feat: remove notOperational routes - bbs
This commit is contained in:
parent
95864937f2
commit
f812e915a4
|
|
@ -119,7 +119,6 @@
|
|||
},
|
||||
'govopendata.com': { _name: '新闻联播文字版', cn: [{ title: '新闻联播文字版', docs: 'https://docs.rsshub.app/routes/traditional-media#xin-wen-lian-bo-wen-zi-ban', source: '/xinwenlianbo', target: '/xinwenlianbo/index' }] },
|
||||
'steampowered.com': { _name: 'Steam', store: [{ title: 'search', docs: 'https://docs.rsshub.app/routes/game#steam', source: '/search/', target: (params, url) => `/steam/search/${new URL(url).searchParams}` }] },
|
||||
'xiaomi.cn': { _name: '小米社区', www: [{ title: '圈子', docs: 'https://docs.rsshub.app/routes/bbs#xiao-mi-she-qu', source: '/board/:boardId', target: '/mi/bbs/board/:boardId' }] },
|
||||
'suzhou.gov.cn': { _name: '苏州市政府', www: [{ title: '政府新闻', docs: 'https://docs.rsshub.app/routes/government#su-zhou-shi-ren-min-zheng-fu', source: '/szsrmzf/:uid/nav_list.', target: '/gov/suzhou/news/:uid' }] },
|
||||
'mqube.net': {
|
||||
_name: 'MQube',
|
||||
|
|
|
|||
|
|
@ -311,17 +311,6 @@ module.exports = {
|
|||
},
|
||||
],
|
||||
},
|
||||
'xiaomi.cn': {
|
||||
_name: '小米社区',
|
||||
www: [
|
||||
{
|
||||
title: '圈子',
|
||||
docs: 'https://docs.rsshub.app/routes/bbs#xiao-mi-she-qu',
|
||||
source: '/board/:boardId',
|
||||
target: '/mi/bbs/board/:boardId',
|
||||
},
|
||||
],
|
||||
},
|
||||
'suzhou.gov.cn': {
|
||||
_name: '苏州市政府',
|
||||
www: [
|
||||
|
|
|
|||
|
|
@ -138,7 +138,6 @@ router.get('/mi/crowdfunding', lazyloadRouteHandler('./routes/mi/crowdfunding'))
|
|||
// router.get('/mi/youpin/crowdfunding', lazyloadRouteHandler('./routes/mi/youpin/crowdfunding'));
|
||||
// router.get('/mi/youpin/new/:sort?', lazyloadRouteHandler('./routes/mi/youpin/new'));
|
||||
router.get('/miui/:device/:type?/:region?', lazyloadRouteHandler('./routes/mi/miui/index'));
|
||||
router.get('/mi/bbs/board/:boardId', lazyloadRouteHandler('./routes/mi/board'));
|
||||
|
||||
// 纵横
|
||||
router.get('/zongheng/chapter/:id', lazyloadRouteHandler('./routes/zongheng/chapter'));
|
||||
|
|
@ -1068,11 +1067,6 @@ router.get('/soul/posts/hot/:pid*', lazyloadRouteHandler('./routes/soul/hot'));
|
|||
// 单向空间
|
||||
router.get('/owspace/read/:type?', lazyloadRouteHandler('./routes/owspace/read'));
|
||||
|
||||
// 天涯论坛
|
||||
router.get('/tianya/index/:type', lazyloadRouteHandler('./routes/tianya/index'));
|
||||
router.get('/tianya/user/:userid', lazyloadRouteHandler('./routes/tianya/user'));
|
||||
router.get('/tianya/comments/:userid', lazyloadRouteHandler('./routes/tianya/comments'));
|
||||
|
||||
// eleme
|
||||
router.get('/eleme/open/announce', lazyloadRouteHandler('./routes/eleme/open/announce'));
|
||||
router.get('/eleme/open-be/announce', lazyloadRouteHandler('./routes/eleme/open-be/announce'));
|
||||
|
|
@ -1133,9 +1127,6 @@ router.get('/cfan/news', lazyloadRouteHandler('./routes/cfan/news'));
|
|||
// 奈菲影视
|
||||
router.get('/nfmovies/:id?', lazyloadRouteHandler('./routes/nfmovies/index'));
|
||||
|
||||
// 书友社区
|
||||
router.get('/andyt/:view?', lazyloadRouteHandler('./routes/andyt/index'));
|
||||
|
||||
// engadget
|
||||
router.get('/engadget/:lang?', lazyloadRouteHandler('./routes/engadget/home'));
|
||||
|
||||
|
|
@ -1700,10 +1691,6 @@ router.get('/changku/cate/:postid', lazyloadRouteHandler('./routes/changku/index
|
|||
// 上海市生态环境局
|
||||
router.get('/gov/shanghai/sthj', lazyloadRouteHandler('./routes/gov/shanghai/sthj'));
|
||||
|
||||
// 才符
|
||||
router.get('/91ddcc/user/:user', lazyloadRouteHandler('./routes/91ddcc/user'));
|
||||
router.get('/91ddcc/stage/:stage', lazyloadRouteHandler('./routes/91ddcc/stage'));
|
||||
|
||||
// BookwalkerTW热门新书
|
||||
router.get('/bookwalkertw/news', lazyloadRouteHandler('./routes/bookwalkertw/news'));
|
||||
|
||||
|
|
@ -1778,10 +1765,6 @@ router.get('/hfut/tzgg', lazyloadRouteHandler('./routes/universities/hfut/tzgg')
|
|||
// OneJAV
|
||||
router.get('/onejav/:type/:key?', lazyloadRouteHandler('./routes/onejav/one'));
|
||||
|
||||
// 水木社区
|
||||
router.get('/newsmth/account/:id', lazyloadRouteHandler('./routes/newsmth/account'));
|
||||
router.get('/newsmth/section/:section', lazyloadRouteHandler('./routes/newsmth/section'));
|
||||
|
||||
// Kotaku
|
||||
router.get('/kotaku/story/:type', lazyloadRouteHandler('./routes/kotaku/story'));
|
||||
|
||||
|
|
@ -1886,9 +1869,6 @@ router.get('/anki/changes', lazyloadRouteHandler('./routes/anki/changes'));
|
|||
// 台湾中央通讯社
|
||||
// router.get('/cna/:id?', lazyloadRouteHandler('./routes/cna/index'));
|
||||
|
||||
// 华为心声社区
|
||||
router.get('/huawei/xinsheng/:caty?/:order?/:keyword?', lazyloadRouteHandler('./routes/huawei/xinsheng/index'));
|
||||
|
||||
// 守望先锋
|
||||
router.get('/ow/patch', lazyloadRouteHandler('./routes/ow/patch'));
|
||||
|
||||
|
|
@ -2060,9 +2040,6 @@ router.get('/deloitte/industries/:category?', lazyloadRouteHandler('./routes/del
|
|||
// 复旦大学继续教育学院
|
||||
router.get('/fudan/cce', lazyloadRouteHandler('./routes/universities/fudan/cce'));
|
||||
|
||||
// LowEndTalk
|
||||
router.get('/lowendtalk/discussion/:id?', lazyloadRouteHandler('./routes/lowendtalk/discussion'));
|
||||
|
||||
// 无产者评论
|
||||
router.get('/proletar/:type?/:id?', lazyloadRouteHandler('./routes/proletar/index'));
|
||||
|
||||
|
|
@ -2122,9 +2099,6 @@ router.get('/xynu/zkb/:category', lazyloadRouteHandler('./routes/universities/xy
|
|||
// DailyArt
|
||||
router.get('/dailyart/:language?', lazyloadRouteHandler('./routes/dailyart/index'));
|
||||
|
||||
// SCBOY
|
||||
router.get('/scboy/thread/:tid', lazyloadRouteHandler('./routes/scboy/thread'));
|
||||
|
||||
// 猿料
|
||||
router.get('/yuanliao/:tag?/:sort?', lazyloadRouteHandler('./routes/yuanliao/index'));
|
||||
|
||||
|
|
@ -2266,9 +2240,6 @@ router.get('/trakt/collection/:username/:type?', lazyloadRouteHandler('./routes/
|
|||
// 全球化智库
|
||||
router.get('/ccg/:category?', lazyloadRouteHandler('./routes/ccg/index'));
|
||||
|
||||
// 灵异网
|
||||
router.get('/lingyi/:category', lazyloadRouteHandler('./routes/lingyi/index'));
|
||||
|
||||
// 歪脑读
|
||||
router.get('/wainao-reads/all-articles', lazyloadRouteHandler('./routes/wainao/index'));
|
||||
|
||||
|
|
|
|||
|
|
@ -1,48 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const currentUrl = `https://sns.91ddcc.com/s/${ctx.params.stage}`;
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: currentUrl,
|
||||
});
|
||||
|
||||
const $ = cheerio.load(response.data);
|
||||
const list = $('div.log-box div.l-single')
|
||||
.slice(0, 5)
|
||||
.map((_, item) => {
|
||||
item = $(item);
|
||||
const a = item.find('div.word a.s-til');
|
||||
return {
|
||||
title: a.text(),
|
||||
link: `https://sns.91ddcc.com${a.attr('href')}`,
|
||||
pubDate: new Date(item.find('div.floor a.fr').text() + ' GMT+8').toUTCString(),
|
||||
author: item.find('div.floor a.fl').text(),
|
||||
};
|
||||
})
|
||||
.get();
|
||||
|
||||
const items = await Promise.all(
|
||||
list.map((item) =>
|
||||
ctx.cache.tryGet(item.link, async () => {
|
||||
const detailResponse = await got({
|
||||
method: 'get',
|
||||
url: item.link,
|
||||
});
|
||||
const content = cheerio.load(detailResponse.data);
|
||||
|
||||
item.description = content('div.article-con').html();
|
||||
|
||||
return item;
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
ctx.state.data = {
|
||||
title: `${$('a.name').text()} - 才符`,
|
||||
link: currentUrl,
|
||||
item: items,
|
||||
description: $('div.bot-info').text(),
|
||||
};
|
||||
};
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const currentUrl = `https://sns.91ddcc.com/${ctx.params.user}`;
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: currentUrl,
|
||||
});
|
||||
|
||||
const $ = cheerio.load(response.data);
|
||||
const list = $('div.dynamic-single')
|
||||
.slice(0, 10)
|
||||
.map((_, item) => {
|
||||
item = $(item);
|
||||
|
||||
const word = item.find('div.word');
|
||||
const detailTitle = item.find('p.detail-title').text();
|
||||
|
||||
let link = currentUrl;
|
||||
let title = detailTitle || word.html();
|
||||
|
||||
if (word.attr('onclick')) {
|
||||
link = `https://sns.91ddcc.com${word.attr('onclick').split("'")[1]}`;
|
||||
} else {
|
||||
title = item.find('div.fl').text().trim();
|
||||
}
|
||||
|
||||
item.find('p.detail-title').remove();
|
||||
|
||||
return {
|
||||
title,
|
||||
link,
|
||||
description: item.find('div.dynamic-content').html(),
|
||||
pubDate: new Date(item.attr('add-time') * 1000).toUTCString(),
|
||||
};
|
||||
})
|
||||
.get();
|
||||
|
||||
ctx.state.data = {
|
||||
title: `${$('span.user-name').text()} - 才符`,
|
||||
link: currentUrl,
|
||||
item: list,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
const baseUrl = 'https://andyt.cn/forum.php?mod=guide&view=';
|
||||
const host = 'https://andyt.cn/';
|
||||
const viewProps = {
|
||||
newthread: '最新发表',
|
||||
hot: '最新热门',
|
||||
digest: '最新精华',
|
||||
new: '最新回复',
|
||||
};
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const view = ctx.params.view || 'newthread';
|
||||
const url = baseUrl + view;
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url,
|
||||
});
|
||||
const $ = cheerio.load(response.data);
|
||||
|
||||
ctx.state.data = {
|
||||
title: `${viewProps[view]} - 书友社区`,
|
||||
link: url,
|
||||
description: `${viewProps[view]} - 书友社区`,
|
||||
item: $('.bm_c')
|
||||
.find('tbody')
|
||||
.map((index, item) => ({
|
||||
title: `【` + $(item).find('td.by a').eq(0).text() + `】` + $(item).find('a.xst').text(),
|
||||
description: '',
|
||||
author: $(item).find('cite').text().trim(),
|
||||
link: host + $(item).find('a').eq(0).attr('href'),
|
||||
}))
|
||||
.get(),
|
||||
};
|
||||
};
|
||||
|
|
@ -1,61 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
ctx.params.order = ctx.params.order || '';
|
||||
ctx.params.keyword = ctx.params.keyword || '';
|
||||
ctx.params.caty = ctx.params.caty || '';
|
||||
|
||||
const rootUrl = `http://xinsheng.huawei.com/cn/index.php?app=forum&mod=List&class=461&order=${ctx.params.order}&search=${ctx.params.keyword}&cate=${ctx.params.caty}`;
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: rootUrl,
|
||||
});
|
||||
const $ = cheerio.load(response.data);
|
||||
|
||||
$('a[linktag="__subject_link__"]').remove();
|
||||
|
||||
const list = $('.bbs_list ul li .font_box .title p font a')
|
||||
.slice(0, 15)
|
||||
.map((_, item) => {
|
||||
item = $(item);
|
||||
return {
|
||||
title: item.attr('title'),
|
||||
link: item.attr('href'),
|
||||
};
|
||||
})
|
||||
.get();
|
||||
|
||||
const items = await Promise.all(
|
||||
list.map((item) =>
|
||||
ctx.cache.tryGet(item.link, async () => {
|
||||
const detailResponse = await got({
|
||||
method: 'get',
|
||||
url: item.link,
|
||||
});
|
||||
const content = cheerio.load(detailResponse.data);
|
||||
|
||||
item.description = content('.bbs_info_right_text').eq(0).html();
|
||||
item.pubDate = new Date(content('span.fl').eq(0).text().trim() + ' GMT+8').toUTCString();
|
||||
item.author = content('.bbs_info_user_ a').eq(1).text();
|
||||
|
||||
return item;
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
let title;
|
||||
|
||||
$('.bbs_list_box_title_wz ul li').each(function () {
|
||||
if ($(this).hasClass('on')) {
|
||||
title = $(this).text();
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
ctx.state.data = {
|
||||
title: `${title} - 华为家事 - 心声社区`,
|
||||
link: rootUrl,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const categories = {
|
||||
tuijian: '编辑推荐',
|
||||
lingyishijian: '灵异事件',
|
||||
guihualianpian: '鬼话连篇',
|
||||
minjianqitan: '民间奇谈',
|
||||
qiwenyishi: '奇闻异事',
|
||||
lingyitupian: '灵异图片',
|
||||
};
|
||||
const url = `http://www.lingyi.org/topics/${ctx.params.category}`;
|
||||
const res = await got({
|
||||
method: 'get',
|
||||
url,
|
||||
});
|
||||
const $ = cheerio.load(res.data);
|
||||
const resultItem = $('.post-list-item')
|
||||
.map((index, li) => {
|
||||
const elem = $(li);
|
||||
return {
|
||||
title: elem.find('h2').text(),
|
||||
description: elem.find('.post-excerpt').text(),
|
||||
link: elem.find('h2 a').attr('href'),
|
||||
image: elem.find('.mobile-show > div > a > picture > img').attr('href'),
|
||||
pubDate: elem.find('time').attr('datetime'),
|
||||
author: elem.find('.post-list-meta-user>a>span').text(),
|
||||
};
|
||||
})
|
||||
.get();
|
||||
|
||||
const out = await Promise.all(
|
||||
resultItem.map(async (link) => {
|
||||
const pageUrl = link.link;
|
||||
const cache = await ctx.cache.get(link);
|
||||
if (cache) {
|
||||
return Promise.resolve(JSON.parse(cache));
|
||||
}
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: pageUrl,
|
||||
headers: {
|
||||
Referer: url,
|
||||
},
|
||||
});
|
||||
const $1 = cheerio.load(response.data);
|
||||
const single = {
|
||||
pubDate: link.pubDate,
|
||||
link: link.link,
|
||||
title: link.title,
|
||||
description: $1('.entry-content').html(),
|
||||
};
|
||||
ctx.cache.set(link.link, JSON.stringify(single));
|
||||
return Promise.resolve(single);
|
||||
})
|
||||
);
|
||||
|
||||
ctx.state.data = {
|
||||
title: `${categories[ctx.params.category]} - 中国灵异网`,
|
||||
link: url,
|
||||
item: out,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const rootUrl = 'https://www.lowendtalk.com';
|
||||
const currentUrl = `${rootUrl}/discussion/${ctx.params.id}`;
|
||||
let response = await got({
|
||||
method: 'get',
|
||||
url: currentUrl,
|
||||
});
|
||||
|
||||
let $ = cheerio.load(response.data);
|
||||
|
||||
response = await got({
|
||||
method: 'get',
|
||||
url: $('.LastPage').attr('href'),
|
||||
});
|
||||
|
||||
$ = cheerio.load(response.data);
|
||||
|
||||
const items = $('.userContent')
|
||||
.map((_, item) => {
|
||||
item = $(item);
|
||||
|
||||
const header = item.parent().parent().prev();
|
||||
const pubDate = header.find('time');
|
||||
|
||||
return {
|
||||
description: item.html(),
|
||||
pubDate: pubDate.attr('datetime'),
|
||||
author: header.find('.Author').text(),
|
||||
link: `${rootUrl}${pubDate.parent().attr('href')}`,
|
||||
title: `${header.find('.Author').text().trim()}: ${item.text()}`,
|
||||
};
|
||||
})
|
||||
.get();
|
||||
|
||||
ctx.state.data = {
|
||||
title: $('h1').eq(0).text(),
|
||||
link: currentUrl,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const boardId = ctx.params.boardId;
|
||||
const link = `https://www.xiaomi.cn/board/${boardId}`;
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: `https://prod.api.xiaomi.cn/community/board/home/announce/list?after=&limit=20&boardId=${boardId}`,
|
||||
headers: {
|
||||
Referer: link,
|
||||
},
|
||||
});
|
||||
const data = response.data.entity.records;
|
||||
const name = data[0].boards[0].boardName;
|
||||
|
||||
ctx.state.data = {
|
||||
title: name + '-小米社区',
|
||||
link,
|
||||
item: data.map((item) => {
|
||||
let picTpl = '';
|
||||
if (item.picList && item.picList.length) {
|
||||
item.picList.forEach((pic) => {
|
||||
picTpl += `<br><img src="${pic.imageUrl}">`;
|
||||
});
|
||||
}
|
||||
return {
|
||||
title: item.title || item.textContent,
|
||||
description: item.textContent + picTpl,
|
||||
pubDate: new Date(item.createTime).toUTCString(),
|
||||
author: item.author.name,
|
||||
link: `https://www.xiaomi.cn/post/${item.id}`,
|
||||
};
|
||||
}),
|
||||
};
|
||||
};
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
const url = require('url');
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const date = require('@/utils/date');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const rootUrl = `https://exp.newsmth.net`;
|
||||
const currentUrl = `${rootUrl}/account/${ctx.params.id}`;
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: currentUrl,
|
||||
});
|
||||
const $ = cheerio.load(response.data);
|
||||
|
||||
const list = $('ul.article-list li')
|
||||
.slice(0, 10)
|
||||
.map((_, item) => {
|
||||
item = $(item);
|
||||
const a = item.find('a.article-subject');
|
||||
const pubDate = date(item.find('div.article-time').text());
|
||||
|
||||
item.find('div.article-time').remove();
|
||||
|
||||
return {
|
||||
title: a.text(),
|
||||
link: url.resolve(rootUrl, a.attr('href')),
|
||||
description: item.find('div.article-main').html(),
|
||||
pubDate,
|
||||
};
|
||||
})
|
||||
.get();
|
||||
|
||||
ctx.state.data = {
|
||||
title: $('title').text(),
|
||||
link: currentUrl,
|
||||
item: list,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,99 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const date = require('@/utils/date');
|
||||
|
||||
const config = {
|
||||
community: {
|
||||
link: '/section/7fba65e45f678eb8c605d4107de04185',
|
||||
title: '社区管理',
|
||||
},
|
||||
university: {
|
||||
link: '/section/4fcab28694a0be93d9297d8cede052d9',
|
||||
title: '国内院校',
|
||||
},
|
||||
entertainment: {
|
||||
link: '/section/3497e48bb537373d0f738b41fe53a41b',
|
||||
title: '休闲娱乐',
|
||||
},
|
||||
location: {
|
||||
link: '/section/353fdfda1dfe7a714e592bab99c762cd',
|
||||
title: '五湖四海',
|
||||
},
|
||||
game: {
|
||||
link: '/section/c8d614e56acb8a192ec4af8b375a5eea',
|
||||
title: '游戏运动',
|
||||
},
|
||||
society: {
|
||||
link: '/section/5b634fdc9ecddf6042561c959176c077',
|
||||
title: '社会信息',
|
||||
},
|
||||
romance: {
|
||||
link: '/section/1c455a5dccf4242008d188f9676e3f4e',
|
||||
title: '知性感性',
|
||||
},
|
||||
culture: {
|
||||
link: '/section/12af235486fde6684e4b9e83f5d2b779',
|
||||
title: '文化人文',
|
||||
},
|
||||
science: {
|
||||
link: '/section/4ed7f0d8b621c8ccf9e11eca9991d6dc',
|
||||
title: '学术科学',
|
||||
},
|
||||
technology: {
|
||||
link: '/section/4dda79c64b3ffb61f8048d745292ff5d',
|
||||
title: '电脑技术',
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const cfg = config[ctx.params.section];
|
||||
if (!cfg) {
|
||||
throw Error('Bad section. See <a href="https://docs.rsshub.app/routes/bbs#shui-mu-she-qu-fen-qu-wen-zhang">docs</a>');
|
||||
}
|
||||
|
||||
const rootUrl = `https://exp.newsmth.net/statistics/hot`;
|
||||
const currentUrl = `${rootUrl}${cfg.link}`;
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: currentUrl,
|
||||
});
|
||||
const $ = cheerio.load(response.data);
|
||||
|
||||
const list = $('ul.article-list li')
|
||||
.slice(0, 15)
|
||||
.map((_, item) => {
|
||||
item = $(item);
|
||||
const a = item.find('a.article-subject');
|
||||
const pubDate = date(item.find('div.article-account-name span').text());
|
||||
|
||||
return {
|
||||
title: a.text(),
|
||||
link: `https://exp.newsmth.net${a.attr('href')}`,
|
||||
pubDate,
|
||||
};
|
||||
})
|
||||
.get();
|
||||
|
||||
const items = await Promise.all(
|
||||
list.map((item) =>
|
||||
ctx.cache.tryGet(item.link, async () => {
|
||||
const detailResponse = await got({
|
||||
method: 'get',
|
||||
url: item.link,
|
||||
});
|
||||
const content = cheerio.load(detailResponse.data);
|
||||
|
||||
item.description = content('div.show-content').html();
|
||||
|
||||
return item;
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
ctx.state.data = {
|
||||
title: cfg.title + ' - 水木社区',
|
||||
link: currentUrl,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const { userid } = ctx.params;
|
||||
const url = 'http://www.tianya.cn/' + userid + '/bbs?t=post';
|
||||
const responseraw = await got(url, { headers: { Referer: 'http://bbs.tianya.cn' } });
|
||||
const $ = cheerio.load(responseraw.data);
|
||||
const username = $('div.portrait h2 a').first().text();
|
||||
|
||||
const turl = `http://www.tianya.cn/api/bbsuser?method=userinfo.ice.getUserTotalReplyList¶ms.userId=${userid}¶ms.pageSize=20¶ms.bMore=true`;
|
||||
const response = await got(turl, { headers: { Referer: 'http://bbs.tianya.cn' } });
|
||||
const json = response.data;
|
||||
const items = await Promise.all(
|
||||
json.data.rows.map(async (ele) => {
|
||||
const title = ele.title;
|
||||
const link = `http://bbs.tianya.cn/go_reply_position.jsp?item=${ele.item}&id=${ele.art_id}&rid=${ele.reply_id}`;
|
||||
const date = ele.reply_time;
|
||||
|
||||
const commentData = await ctx.cache.tryGet(link, async () => {
|
||||
const commentResponse = await got(link, { headers: { Referer: 'http://bbs.tianya.cn' } });
|
||||
const res = cheerio.load(commentResponse.data)(`div[replyid='${ele.reply_id}'] div.atl-content div.bbs-content`).html();
|
||||
return res;
|
||||
});
|
||||
|
||||
const pubDate = new Date(date).toUTCString();
|
||||
return Promise.resolve({
|
||||
title,
|
||||
description: commentData,
|
||||
link,
|
||||
pubDate,
|
||||
});
|
||||
})
|
||||
);
|
||||
ctx.state.data = {
|
||||
title: username + '的天涯回帖',
|
||||
description: username,
|
||||
link: url,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const { type } = ctx.params;
|
||||
const url = 'http://bbs.tianya.cn/list-' + type + '-1.shtml';
|
||||
const response = await got(url, { headers: { Referer: 'http://bbs.tianya.cn' } });
|
||||
const $ = cheerio.load(response.data);
|
||||
const typeTitle = $('div.location div.text strong').text();
|
||||
const items = $('table > tbody ~ tbody > tr')
|
||||
.map((_, ele) => {
|
||||
const $item = cheerio.load(ele);
|
||||
const title = $item('td.td-title a').text();
|
||||
const link = 'http://bbs.tianya.cn' + $item('td.td-title a').attr('href');
|
||||
const date = $item('td').last().attr('title');
|
||||
|
||||
const pubDate = new Date(date).toUTCString();
|
||||
return {
|
||||
title,
|
||||
description: title,
|
||||
link,
|
||||
pubDate,
|
||||
};
|
||||
})
|
||||
.get();
|
||||
ctx.state.data = {
|
||||
title: typeTitle,
|
||||
description: typeTitle,
|
||||
link: url,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const { userid } = ctx.params;
|
||||
const url = 'http://www.tianya.cn/' + userid + '/bbs?t=post';
|
||||
const responseraw = await got(url, { headers: { Referer: 'http://bbs.tianya.cn' } });
|
||||
const $ = cheerio.load(responseraw.data);
|
||||
const username = $('div.portrait h2 a').first().text();
|
||||
|
||||
const turl = `http://www.tianya.cn/api/bbsuser?method=userinfo.ice.getUserTotalArticleList¶ms.userId=${userid}¶ms.pageSize=20¶ms.bMore=true`;
|
||||
const response = await got(turl, { headers: { Referer: 'http://bbs.tianya.cn' } });
|
||||
const json = response.data;
|
||||
const items = json.data.rows.map((ele) => {
|
||||
const title = ele.title;
|
||||
const clicknum = ` 点击数:${ele.click_counter},回复数:${ele.reply_counter}`;
|
||||
const link = `http://bbs.tianya.cn/post-${ele.item}-${ele.art_id}-1.shtml`;
|
||||
const date = ele.compose_time;
|
||||
|
||||
const pubDate = new Date(date).toUTCString();
|
||||
return {
|
||||
title,
|
||||
description: title + clicknum,
|
||||
link,
|
||||
pubDate,
|
||||
};
|
||||
});
|
||||
ctx.state.data = {
|
||||
title: username + '的天涯帖子',
|
||||
description: username,
|
||||
link: url,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const category = ctx.params.category ?? '';
|
||||
const sort = ctx.params.sort ?? '';
|
||||
|
||||
const rootUrl = 'https://2047.name';
|
||||
const currentUrl = `${rootUrl}${category ? `/c/${category}` : ''}${sort ? `?sortby=${sort}` : ''}`;
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: currentUrl,
|
||||
});
|
||||
|
||||
const $ = cheerio.load(response.data);
|
||||
|
||||
const list = $('.threadlist_title')
|
||||
.slice(0, ctx.query.limit ? parseInt(ctx.query.limit) : 50)
|
||||
.map((_, item) => {
|
||||
item = $(item);
|
||||
|
||||
return {
|
||||
title: item.text(),
|
||||
link: `${rootUrl}${item.attr('href')}`,
|
||||
};
|
||||
})
|
||||
.get();
|
||||
|
||||
const items = await Promise.all(
|
||||
list.map((item) =>
|
||||
ctx.cache.tryGet(item.link, async () => {
|
||||
const detailResponse = await got({
|
||||
method: 'get',
|
||||
url: item.link,
|
||||
});
|
||||
|
||||
const content = cheerio.load(detailResponse.data);
|
||||
|
||||
item.description = content('.post_content').eq(0).html();
|
||||
item.author = content('meta[property="og:article:author"]').attr('content');
|
||||
item.pubDate = parseDate(content('meta[property="og:article:published_time"]').attr('content'));
|
||||
|
||||
return item;
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
ctx.state.data = {
|
||||
title: $('title').text(),
|
||||
link: currentUrl,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
module.exports = {
|
||||
'/:category?/:sort?': ['nczitzk'],
|
||||
};
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
module.exports = {
|
||||
'2047.name': {
|
||||
_name: '2047',
|
||||
'.': [
|
||||
{
|
||||
title: '分类',
|
||||
docs: 'https://docs.rsshub.app/routes/bbs#2047-fen-lei',
|
||||
source: ['/'],
|
||||
target: '/2047/:category?/:sort?',
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
module.exports = function (router) {
|
||||
router.get('/:category?/:sort?', require('./index'));
|
||||
};
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const iconv = require('iconv-lite');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
const timezone = require('@/utils/timezone');
|
||||
|
||||
const rootUrl = 'http://www.audiobar.cn/';
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const currentUrl = `${rootUrl}/all.php`;
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: currentUrl,
|
||||
responseType: 'buffer',
|
||||
});
|
||||
const data = iconv.decode(response.data, 'gb2312');
|
||||
const $ = cheerio.load(data);
|
||||
|
||||
const list = $('.thread_every_container_div')
|
||||
.map((_, item) => {
|
||||
item = $(item);
|
||||
|
||||
const link = item.find('.thread_subject').attr('href');
|
||||
const dateStr = item.find('.atrd_span').text().slice(-26).replace(' ', '');
|
||||
return {
|
||||
title: item.find('.thread_subject').text().replace('\n', '').replace(' ', ''),
|
||||
link: link.indexOf('http') > -1 ? link : `${rootUrl}${link}`,
|
||||
pubDate: timezone(parseDate(dateStr, 'YY-M-D HH:mm'), +8),
|
||||
};
|
||||
})
|
||||
.get();
|
||||
const items = await Promise.all(
|
||||
list.map((item) =>
|
||||
ctx.cache.tryGet(item.link, async () => {
|
||||
const detailResponse = await got({
|
||||
method: 'get',
|
||||
url: item.link,
|
||||
responseType: 'buffer',
|
||||
});
|
||||
const detailResponsedata = iconv.decode(detailResponse.data, 'gb2312');
|
||||
const content = cheerio.load(detailResponsedata);
|
||||
item.description = content('.zhengwen_div').text().replace('Your browser does not support HTML5, please change another browser.', '');
|
||||
return item;
|
||||
})
|
||||
)
|
||||
);
|
||||
ctx.state.data = {
|
||||
title: '音频应用-最新主题',
|
||||
link: currentUrl,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
module.exports = {
|
||||
'/latest': ['zxzhuty'],
|
||||
};
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
module.exports = {
|
||||
'audiobar.cn': {
|
||||
_name: '音频应用',
|
||||
'.': [
|
||||
{
|
||||
title: '最新主题',
|
||||
docs: 'https://docs.rsshub.app/routes/bbs#yin-pin-ying-yong',
|
||||
source: ['/all.php'],
|
||||
target: '/audiobar/latest',
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
module.exports = function (router) {
|
||||
router.get('/latest', require('./latest'));
|
||||
};
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const { rootUrl, ProcessItems } = require('./utils');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const node = ctx.params.node ?? '258';
|
||||
const type = ctx.params.type ?? '1';
|
||||
|
||||
const currentUrl = rootUrl;
|
||||
const nodeUrl = `${rootUrl}/api/topic/node?nodeId=${node}`;
|
||||
const apiUrl = `${rootUrl}/api/topic/node/topics?page=1&nodeId=${node}&type=${type}&limit=${ctx.query.limit}`;
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: nodeUrl,
|
||||
});
|
||||
|
||||
const data = response.data.data;
|
||||
|
||||
const items = await ProcessItems(apiUrl, ctx.query.limit, ctx.cache.tryGet);
|
||||
|
||||
ctx.state.data = {
|
||||
title: `海角社区 - ${data.name}`,
|
||||
link: `${currentUrl}/article?nodeId=${node}`,
|
||||
item: items,
|
||||
description: data.description.replace(/<\/?p>/, ''),
|
||||
};
|
||||
};
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
const { rootUrl, ProcessItems } = require('./utils');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const currentUrl = rootUrl;
|
||||
const apiUrl = `${rootUrl}/api/topic/hot/topics?page=1`;
|
||||
|
||||
const items = await ProcessItems(apiUrl, ctx.query.limit, ctx.cache.tryGet);
|
||||
|
||||
ctx.state.data = {
|
||||
title: '海角社区 - 热门',
|
||||
link: currentUrl,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
const { rootUrl, ProcessItems } = require('./utils');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const currentUrl = rootUrl;
|
||||
const apiUrl = `${rootUrl}/api/topic/node/topics?page=1&nodeId=0&type=1`;
|
||||
|
||||
const items = await ProcessItems(apiUrl, ctx.query.limit, ctx.cache.tryGet);
|
||||
|
||||
ctx.state.data = {
|
||||
title: '海角社区 - 最新',
|
||||
link: currentUrl,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
module.exports = {
|
||||
'/event': ['nczitzk'],
|
||||
'/hot': ['nczitzk'],
|
||||
'/latest': ['nczitzk'],
|
||||
'/news': ['nczitzk'],
|
||||
'/notice': ['nczitzk'],
|
||||
'/original': ['nczitzk'],
|
||||
'/top': ['nczitzk'],
|
||||
'/:node?/:type?': ['nczitzk'],
|
||||
};
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
const { rootUrl, ProcessItems } = require('./utils');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const currentUrl = rootUrl;
|
||||
const apiUrl = `${rootUrl}/api/topic/node/news?page=1`;
|
||||
|
||||
const items = await ProcessItems(apiUrl, ctx.query.limit, ctx.cache.tryGet);
|
||||
|
||||
ctx.state.data = {
|
||||
title: '海角社区 - 新闻',
|
||||
link: currentUrl,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
const { rootUrl, ProcessItems } = require('./utils');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const currentUrl = rootUrl;
|
||||
const apiUrl = `${rootUrl}/api/topic/node/topics?page=1&nodeId=14&type=0`;
|
||||
|
||||
const items = await ProcessItems(apiUrl, ctx.query.limit, ctx.cache.tryGet);
|
||||
|
||||
ctx.state.data = {
|
||||
title: '海角社区 - 公告',
|
||||
link: currentUrl,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
const { rootUrl, ProcessItems } = require('./utils');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const currentUrl = rootUrl;
|
||||
const apiUrl = `${rootUrl}/api/topic/node/topics?page=1&type=7`;
|
||||
|
||||
const items = await ProcessItems(apiUrl, ctx.query.limit, ctx.cache.tryGet);
|
||||
|
||||
ctx.state.data = {
|
||||
title: '海角社区 - 原创',
|
||||
link: currentUrl,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
module.exports = {
|
||||
'hjedd.com': {
|
||||
_name: '海角社区',
|
||||
'.': [
|
||||
{
|
||||
title: '热门',
|
||||
docs: 'https://docs.rsshub.app/routes/bbs#hai-jiao-she-qu-re-men',
|
||||
source: ['/'],
|
||||
target: '/hjedd/hot',
|
||||
},
|
||||
{
|
||||
title: '新闻',
|
||||
docs: 'https://docs.rsshub.app/routes/bbs#hai-jiao-she-qu-xin-wen',
|
||||
source: ['/'],
|
||||
target: '/hjedd/news',
|
||||
},
|
||||
{
|
||||
title: '大事记',
|
||||
docs: 'https://docs.rsshub.app/routes/bbs#hai-jiao-she-qu-da-shi-ji',
|
||||
source: ['/article', '/'],
|
||||
target: '/hjedd/event',
|
||||
},
|
||||
{
|
||||
title: '原创',
|
||||
docs: 'https://docs.rsshub.app/routes/bbs#hai-jiao-she-qu-da-yuan-chuang',
|
||||
source: ['/'],
|
||||
target: '/hjedd/original',
|
||||
},
|
||||
{
|
||||
title: '精华',
|
||||
docs: 'https://docs.rsshub.app/routes/bbs#hai-jiao-she-qu-da-jing-hua',
|
||||
source: ['/'],
|
||||
target: '/hjedd/top',
|
||||
},
|
||||
{
|
||||
title: '公告',
|
||||
docs: 'https://docs.rsshub.app/routes/bbs#hai-jiao-she-qu-da-gong-gao',
|
||||
source: ['/'],
|
||||
target: '/hjedd/notice',
|
||||
},
|
||||
{
|
||||
title: '最新',
|
||||
docs: 'https://docs.rsshub.app/routes/bbs#hai-jiao-she-qu-da-zui-xin',
|
||||
source: ['/'],
|
||||
target: '/hjedd/latest',
|
||||
},
|
||||
{
|
||||
title: '文章',
|
||||
docs: 'https://docs.rsshub.app/routes/bbs#hai-jiao-she-qu-da-wen-zhang',
|
||||
source: ['/article', '/'],
|
||||
target: (params, url) => `/hjedd/${new URL(url).searchParams.get('nodeId')}`,
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
module.exports = function (router) {
|
||||
router.get('/event', require('./article'));
|
||||
router.get('/hot', require('./hot'));
|
||||
router.get('/latest', require('./latest'));
|
||||
router.get('/news', require('./news'));
|
||||
router.get('/notice', require('./notice'));
|
||||
router.get('/original', require('./original'));
|
||||
router.get('/top', require('./top'));
|
||||
router.get('/:node?/:type?', require('./article'));
|
||||
};
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
{{ if attachment.category == 'video' }}
|
||||
<video poster="{{ attachment.data }}" controls>
|
||||
<source src="{{ attachment.remoteUrl }}" type="application/x-mpegURL">
|
||||
</video>
|
||||
{{ else }}
|
||||
<img src="{{ attachment.data }}">
|
||||
{{ /if }}
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
const { rootUrl, ProcessItems } = require('./utils');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const currentUrl = rootUrl;
|
||||
const apiUrl = `${rootUrl}/api/topic/node/topics?page=1&nodeId=0&type=3`;
|
||||
|
||||
const items = await ProcessItems(apiUrl, ctx.query.limit, ctx.cache.tryGet);
|
||||
|
||||
ctx.state.data = {
|
||||
title: '海角社区 - 精华',
|
||||
link: currentUrl,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,111 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const asyncPool = require('tiny-async-pool');
|
||||
const timezone = require('@/utils/timezone');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
const { art } = require('@/utils/render');
|
||||
const path = require('path');
|
||||
|
||||
const rootUrl = 'https://www.hjedd.com';
|
||||
|
||||
const decodeImage = (text) => {
|
||||
const e = 'ABCD*EFGHIJKLMNOPQRSTUVWX#YZabcdefghijklmnopqrstuvwxyz1234567890';
|
||||
|
||||
let a,
|
||||
o,
|
||||
i,
|
||||
r,
|
||||
c,
|
||||
s,
|
||||
u = '',
|
||||
image = '',
|
||||
index = 0;
|
||||
|
||||
text = text.replace(/[^A-Za-z0-9*#]/g, '');
|
||||
|
||||
while (index < text.length) {
|
||||
r = e.indexOf(text.charAt(index++));
|
||||
c = e.indexOf(text.charAt(index++));
|
||||
s = e.indexOf(text.charAt(index++));
|
||||
u = e.indexOf(text.charAt(index++));
|
||||
a = (r << 2) | (c >> 4);
|
||||
o = ((15 & c) << 4) | (s >> 2);
|
||||
i = ((3 & s) << 6) | u;
|
||||
image += String.fromCharCode(a);
|
||||
64 !== s && (image += String.fromCharCode(o));
|
||||
64 !== u && (image += String.fromCharCode(i));
|
||||
}
|
||||
|
||||
return image;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
rootUrl,
|
||||
ProcessItems: async (apiUrl, limit, tryGet) => {
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: apiUrl,
|
||||
});
|
||||
|
||||
const list = response.data.data.results.slice(0, limit ? parseInt(limit) : 20).map((item) => ({
|
||||
guid: item.topicId,
|
||||
title: item.title,
|
||||
link: `${rootUrl}/post/details?pid=${item.topicId}`,
|
||||
category: item.node?.name ?? [],
|
||||
author: item.user.nickname,
|
||||
pubDate: timezone(parseDate(item.createTime), +8),
|
||||
description: item.liteContent ? `<p>${item.liteContent}</p>` : '',
|
||||
}));
|
||||
|
||||
const items = [];
|
||||
for await (const item of asyncPool(5, list, (item) =>
|
||||
tryGet(item.link, async () => {
|
||||
const detailResponse = await got({
|
||||
method: 'get',
|
||||
url: `https://www.hjedd.com/api/topic/${item.guid}`,
|
||||
});
|
||||
|
||||
const content = cheerio.load(detailResponse.data.data.content);
|
||||
|
||||
content('.sell-btn').remove();
|
||||
|
||||
const attachments = detailResponse.data.data.attachments ?? [];
|
||||
|
||||
for await (const attachment of asyncPool(5, attachments, (attachment) =>
|
||||
tryGet(attachment.remoteUrl, async () => {
|
||||
const attachmentResponse = await got({
|
||||
method: 'get',
|
||||
url: attachment.coverUrl ?? attachment.remoteUrl,
|
||||
});
|
||||
|
||||
attachment.data = decodeImage(attachmentResponse.data);
|
||||
|
||||
return attachment;
|
||||
})
|
||||
)) {
|
||||
if (content(`[data-id="${attachment.id}"]`).length === 0) {
|
||||
content('body').append(
|
||||
art(path.join(__dirname, 'templates/attachment.art'), {
|
||||
attachment,
|
||||
})
|
||||
);
|
||||
} else {
|
||||
content(`[data-id="${attachment.id}"]`).replaceWith(
|
||||
art(path.join(__dirname, 'templates/attachment.art'), {
|
||||
attachment,
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
item.description = content('body').html();
|
||||
|
||||
return item;
|
||||
})
|
||||
)) {
|
||||
items.push(item);
|
||||
}
|
||||
|
||||
return items;
|
||||
},
|
||||
};
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const { toTitleCase } = require('@/utils/common-utils');
|
||||
const { parseDate, parseRelativeDate } = require('@/utils/parse-date');
|
||||
const rootUrl = `https://forum.mobilism.org/viewforum.php?f=`;
|
||||
const categeoryMap = {
|
||||
books: {
|
||||
romance: 1292,
|
||||
scifi: 1293,
|
||||
classics: 121,
|
||||
magazines: 123,
|
||||
audioBooks: 124,
|
||||
comics: 311,
|
||||
},
|
||||
android: {
|
||||
apps: 399,
|
||||
games: 408,
|
||||
},
|
||||
iphone: {
|
||||
apps: 316,
|
||||
games: 320,
|
||||
},
|
||||
ipad: {
|
||||
apps: 951,
|
||||
games: 988,
|
||||
},
|
||||
};
|
||||
module.exports = async (ctx) => {
|
||||
const { category, type, fulltext } = ctx.params;
|
||||
const currentUrl = rootUrl + categeoryMap[category][type];
|
||||
const response = await got(currentUrl);
|
||||
const $ = cheerio.load(cheerio.load(response.data)('tbody')[1]);
|
||||
const lists = $('tbody > tr');
|
||||
const list = lists
|
||||
.map((index, item) => {
|
||||
item = $(item);
|
||||
const title = item.find('td').first().find('a[title]').text();
|
||||
const link = new URL(item.find('td').first().find('a[title]').attr('href'), 'https://forum.mobilism.org');
|
||||
const author = item.find('td').first().find('a.username-coloured').text();
|
||||
const pubDate = item.find('td').first().find('small').text();
|
||||
link.searchParams.delete('sid');
|
||||
return {
|
||||
title,
|
||||
link: link.toString(),
|
||||
author,
|
||||
pubDate: /ago|day/.test(pubDate) ? parseRelativeDate(pubDate) : parseDate(pubDate, 'MMM D, YYYY, h:mm a'),
|
||||
};
|
||||
})
|
||||
.get()
|
||||
.sort((a, b) => b.pubDate - a.pubDate)
|
||||
.slice(0, ctx.query.limit ? parseInt(ctx.query.limit) : 35);
|
||||
// server will return 520 if concurrency > 37 when fulltext is used
|
||||
let items;
|
||||
if (fulltext === 'y') {
|
||||
items = await Promise.all(
|
||||
list.map((item) =>
|
||||
ctx.cache.tryGet(item.link, async () => {
|
||||
const detailResponse = await got(item.link);
|
||||
const content = cheerio.load(detailResponse.data);
|
||||
item.description = content('div.content').html();
|
||||
return item;
|
||||
})
|
||||
)
|
||||
);
|
||||
} else {
|
||||
items = list;
|
||||
}
|
||||
|
||||
ctx.state.data = {
|
||||
title: `Mobilism Forums ${toTitleCase(category)} ${toTitleCase(type)} Release`,
|
||||
link: currentUrl,
|
||||
description: `Mobilism Forums ${toTitleCase(category)} ${toTitleCase(type)} RSS`,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
module.exports = {
|
||||
'/forums/:category/:type/:fulltext?': ['nitezs'],
|
||||
'/portal/:type/:fulltext?': ['nitezs'],
|
||||
};
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const { toTitleCase } = require('@/utils/common-utils');
|
||||
const { parseDate, parseRelativeDate } = require('@/utils/parse-date');
|
||||
|
||||
const get = (data) => {
|
||||
const $ = cheerio.load(data);
|
||||
const posts = $('div.span9 > section');
|
||||
const items = posts
|
||||
.map((index, item) => {
|
||||
item = $(item);
|
||||
const link = new URL(item.find('div.well > a').attr('href'), 'https://forum.mobilism.org');
|
||||
const pubDate = item.find('div.well > span.muted > em').text().replace(item.find('div.well > span.muted > em > strong').text(), '').replace(' at ', '').split(' in ')[0];
|
||||
link.searchParams.delete('sid');
|
||||
return {
|
||||
title: item.find('div.page-header > h3').text(),
|
||||
link: link.toString(),
|
||||
author: item.find('div.well > span.muted > em > strong').text().replace('Posted by: ', ''),
|
||||
description: item.find('div.well > div.postbody').text(),
|
||||
pubDate: /ago|day/.test(pubDate) ? parseRelativeDate(pubDate) : parseDate(pubDate, 'MMM D, YYYY, h:mm a'),
|
||||
};
|
||||
})
|
||||
.get();
|
||||
return items;
|
||||
};
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const { type, fulltext } = ctx.params;
|
||||
const url = `https://forum.mobilism.org/portal.php?mode=articles&block=${type}&sk=t&sd=d&start=0`;
|
||||
const response = await got(url);
|
||||
const list = get(response.data);
|
||||
let items;
|
||||
if (fulltext === 'y') {
|
||||
items = await Promise.all(
|
||||
list.map((item) =>
|
||||
ctx.cache.tryGet(item.link, async () => {
|
||||
const detailResponse = await got(item.link);
|
||||
const content = cheerio.load(detailResponse.data);
|
||||
item.description = content('div.content').html();
|
||||
return item;
|
||||
})
|
||||
)
|
||||
);
|
||||
} else {
|
||||
items = list;
|
||||
}
|
||||
|
||||
ctx.state.data = {
|
||||
title: `Mobilism Portal ${toTitleCase(type)} Release`,
|
||||
link: url,
|
||||
description: `Mobilism Portal ${toTitleCase(type)} RSS`,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
module.exports = {
|
||||
'mobilism.org': {
|
||||
_name: 'Mobilism',
|
||||
'.': [
|
||||
{
|
||||
title: '论坛',
|
||||
docs: 'https://docs.rsshub.app/routes/bbs#mobilism',
|
||||
source: '/',
|
||||
},
|
||||
{
|
||||
title: '门户',
|
||||
docs: 'https://docs.rsshub.app/routes/bbs#mobilism',
|
||||
source: '/portal.php',
|
||||
target: (_params, url) => `/mobilism/portal/${new URL(url).searchParams.get('block')}`,
|
||||
},
|
||||
{
|
||||
title: '电子书',
|
||||
docs: 'https://docs.rsshub.app/routes/reading#mobilism',
|
||||
source: '/',
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
module.exports = function (router) {
|
||||
router.get('/forums/:category/:type/:fulltext?', require('./forums'));
|
||||
router.get('/portal/:type/:fulltext?', require('./portal'));
|
||||
};
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
const timezone = require('@/utils/timezone');
|
||||
const { art } = require('@/utils/render');
|
||||
const path = require('path');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const id = ctx.params.id;
|
||||
const rootUrl = 'https://www.nmbxd1.com';
|
||||
const currentUrl = /^\d+$/.test(id) ? `${rootUrl}/Forum/timeline/id/${id}` : `${rootUrl}/f/${id}`;
|
||||
const response = await got(currentUrl);
|
||||
const $ = cheerio.load(response.data);
|
||||
$('.h-threads-img-tool').remove();
|
||||
$('.h-threads-item-reply-icon').remove();
|
||||
$('.h-admin-tool').remove();
|
||||
$('.h-threads-tips').remove();
|
||||
$('.h-threads-info-report-btn').remove();
|
||||
$('.h-threads-info-reply-btn').remove();
|
||||
|
||||
const items = $('.h-threads-item')
|
||||
.get()
|
||||
.map((item) => {
|
||||
item = $(item);
|
||||
// Do not remove the info element to keep the description style consistent.
|
||||
const info = item.find('.h-threads-item-main .h-threads-info');
|
||||
const title = info.find('.h-threads-info-title').text();
|
||||
const author = [info.find('.h-threads-info-uid font'), info.find('.h-threads-info-uid')]
|
||||
.find((elem) => elem.length > 0)
|
||||
.contents()
|
||||
.first()
|
||||
.text()
|
||||
.replace(/^ID:/, '');
|
||||
const category = info.find('spam').text();
|
||||
const link = new URL(rootUrl + info.find('.h-threads-info-id').attr('href'));
|
||||
// cleanup query paramter
|
||||
link.query = link.search = '';
|
||||
const pubDate = timezone(parseDate(info.find('.h-threads-info-createdat').text().replace(/\(.\)/, ' ')), +8);
|
||||
|
||||
return {
|
||||
title,
|
||||
author,
|
||||
category,
|
||||
description: art(path.join(__dirname, 'templates/description.art'), {
|
||||
item: item.html(),
|
||||
}),
|
||||
pubDate,
|
||||
link: link.toString(),
|
||||
};
|
||||
});
|
||||
|
||||
ctx.state.data = {
|
||||
title: $('title').text(),
|
||||
link: currentUrl,
|
||||
description: $('meta[name=description]').attr('content'),
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
module.exports = {
|
||||
'/:id': ['miles170'],
|
||||
};
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
module.exports = {
|
||||
'nmbxd1.com': {
|
||||
_name: 'X岛匿名版',
|
||||
www: [
|
||||
{
|
||||
title: '串',
|
||||
docs: 'https://docs.rsshub.app/routes/bbs#x-dao-ni-ming-ban',
|
||||
source: ['/Forum/timeline/id/:id', '/f/:id'],
|
||||
target: '/nmbxd1/:id',
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
module.exports = (router) => {
|
||||
router.get('/:id', require('./forum'));
|
||||
};
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
<div class="h-threads-item">
|
||||
{{@ item }}
|
||||
</div>
|
||||
<style>
|
||||
.h-threads-item {
|
||||
display: block;
|
||||
background: #ffe;
|
||||
color: #800000;
|
||||
}
|
||||
|
||||
.h-threads-item .h-threads-img-box {
|
||||
display: inline;
|
||||
position: relative;
|
||||
margin: 3px 0;
|
||||
}
|
||||
|
||||
.h-threads-item .h-threads-img-box .h-threads-img-a .h-threads-img {
|
||||
padding: 0;
|
||||
margin: 0 20px;
|
||||
max-width: 250px;
|
||||
}
|
||||
|
||||
.h-threads-item .h-threads-info .h-threads-info-title {
|
||||
font-weight: bold;
|
||||
color: #cc1105;
|
||||
}
|
||||
|
||||
.h-threads-item .h-threads-info .h-threads-info-email {
|
||||
font-weight: bold;
|
||||
color: #117743;
|
||||
}
|
||||
|
||||
.h-threads-item .h-threads-info .h-threads-info-email,
|
||||
.h-threads-item .h-threads-info .h-threads-info-createdat,
|
||||
.h-threads-item .h-threads-info .h-threads-info-uid,
|
||||
.h-threads-item .h-threads-info .h-threads-info-id,
|
||||
.h-threads-item .h-threads-info,
|
||||
.h-threads-item .h-threads-info {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.h-threads-item .h-threads-info {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.h-threads-item .h-threads-info a {
|
||||
margin: 0 2px;
|
||||
}
|
||||
|
||||
.h-threads-item .h-threads-content {
|
||||
font-size: 16px;
|
||||
line-height: 22px;
|
||||
margin: 15px 40px;
|
||||
}
|
||||
|
||||
.h-threads-item .h-threads-item-replies .h-threads-item-reply {
|
||||
display: table;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.h-threads-item .h-threads-item-replies .h-threads-item-reply .h-threads-item-reply-main {
|
||||
display: table-cell;
|
||||
background: #f0e0d6;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -22,64 +22,6 @@
|
|||
| linan | fuyang | tonglu | jiande | chunan |
|
||||
</Route>
|
||||
|
||||
## 2047 {#2047}
|
||||
|
||||
### 分类 {#2047-fen-lei}
|
||||
|
||||
<Route author="nczitzk" example="/2047" path="/2047/:category?/:sort?" paramsDesc={['分类,见下表,默认为首页', '排序,见下表,默认为综合']} notOperational="1">
|
||||
分类
|
||||
|
||||
| 首页 | 时政 | 民生 | 科技 | 休闲 |
|
||||
| ---- | -------- | ----- | ---- | ------- |
|
||||
| | opinions | daily | stem | culture |
|
||||
|
||||
| 欢乐 | 江湖 | 站务 | 水 |
|
||||
| -------- | ----- | ------ | ----- |
|
||||
| tainment | inner | office | water |
|
||||
|
||||
| 时事 | 观点 | 政治 | 人物 | 司法实践 |
|
||||
| ---- | ---- | ---- | ---- | -------- |
|
||||
| 2 | 1 | 31 | 10 | 49 |
|
||||
|
||||
| 香港 | 历史 | 疫情 | 新疆 | 假设 |
|
||||
| ---- | ---- | ---- | ---- | ---- |
|
||||
| 47 | 85 | 44 | 32 | 22 |
|
||||
|
||||
| 经济 | 生活 | 留学移民 | 情感 | 教育 |
|
||||
| ---- | ---- | -------- | ---- | ---- |
|
||||
| 65 | 41 | 14 | 23 | 66 |
|
||||
|
||||
| 技术 | 翻墙 | 加密技术 | 哲学 | 阅读 |
|
||||
| ---- | ---- | -------- | ---- | ---- |
|
||||
| 3 | 18 | 24 | 34 | 6 |
|
||||
|
||||
| 音乐 | 影视 | 炉边诗社 | 博客 | 美食 |
|
||||
| ---- | ---- | -------- | ---- | ---- |
|
||||
| 7 | 11 | 46 | 8 | 43 |
|
||||
|
||||
| 文学 | ACG | 欢乐 | 公告 | 分享发现 |
|
||||
| ---- | --- | ---- | ---- | -------- |
|
||||
| 84 | 30 | 17 | 67 | 5 |
|
||||
|
||||
| 分享原创 | 2049 | 宗教 | 语言 | 人文 |
|
||||
| -------- | ---- | ---- | ---- | ---- |
|
||||
| 12 | 16 | 42 | 56 | 76 |
|
||||
|
||||
| 站务 | 国防 | 工会 | 水 | 江湖 |
|
||||
| ---- | ---- | ---- | -- | ---- |
|
||||
| 13 | 15 | 29 | 4 | 21 |
|
||||
|
||||
| 吐槽 | 树洞 | 标本 |
|
||||
| ---- | ---- | ---- |
|
||||
| 9 | 19 | 20 |
|
||||
|
||||
排序
|
||||
|
||||
| 即时 | 新帖 | 综合 | 精华 | 高赞 | 观看 |
|
||||
| ---- | ---- | ----- | ------ | ---- | ---- |
|
||||
| t\_u | t\_c | t\_hn | t\_hn2 | amv | vc |
|
||||
</Route>
|
||||
|
||||
## 423Down {#423down}
|
||||
|
||||
### 分类 {#423down-fen-lei}
|
||||
|
|
@ -230,7 +172,7 @@ If you opt to enable `fulltext` feature, consider adding `limit` parameter to yo
|
|||
|
||||
### General Subforum - Support cookie {#discuz-general-subforum-support-cookie}
|
||||
|
||||
<Route author="junfengP" example="/discuz/x/00/https%3a%2f%2fbbs.zdfx.net%2fforum-2-1.html" path="/discuz/:ver/:cid/:link" paramsDesc={['discuz version,see below table', 'Cookie id,require self hosted and set environment parameters, see Deploy - Configuration pages for detail','link of subforum, require url encoded']} notOperational="1">
|
||||
<Route author="junfengP" example="/discuz/x/00/https%3a%2f%2fbbs.zdfx.net%2fforum-2-1.html" path="/discuz/:ver/:cid/:link" paramsDesc={['discuz version,see below table', 'Cookie id,require self hosted and set environment parameters, see Deploy - Configuration pages for detail','link of subforum, require url encoded']} configRequired="1">
|
||||
| Discuz X Series | Discuz 7.x Series |
|
||||
| --------------- | ----------------- |
|
||||
| x | 7 |
|
||||
|
|
@ -268,12 +210,6 @@ If you opt to enable `fulltext` feature, consider adding `limit` parameter to yo
|
|||
| ---- | ------------ | ---- | ----- |
|
||||
| jobs | translations | qa | links |
|
||||
|
||||
## LowEndTalk {#lowendtalk}
|
||||
|
||||
### Discussion {#lowendtalk-discussion}
|
||||
|
||||
<Route author="nczitzk" example="/lowendtalk/discussion/168480" path="/lowendtalk/discussion/:id?" paramsDesc={['Discussion id']} notOperational="1" />
|
||||
|
||||
## MCBBS {#mcbbs}
|
||||
|
||||
### 版块 {#mcbbs-ban-kuai}
|
||||
|
|
@ -294,28 +230,6 @@ If you opt to enable `fulltext` feature, consider adding `limit` parameter to yo
|
|||
|
||||
<Route author="TonyRL" example="/meteor/boards" path="/meteor/boards" radar="1" />
|
||||
|
||||
## Mobilism {#mobilism}
|
||||
|
||||
### Forums {#mobilism-forums}
|
||||
|
||||
<Route author="nitezs" example="/mobilism/forums/android/apps" path="/mobilism/forums/:category/:type/:fulltext?" paramsDesc={['Category', 'subcategory','Retrieve fulltext, specify `y` to enable']} notOperational="1">
|
||||
| Android | iPhone | iPad |
|
||||
| ------- | ------ | ---- |
|
||||
| android | iphone | ipad |
|
||||
|
||||
| Apps | games |
|
||||
| ---- | ----- |
|
||||
| apps | games |
|
||||
</Route>
|
||||
|
||||
### Portal {#mobilism-portal}
|
||||
|
||||
<Route author="nitezs" example="/mobilism/portal/androidapps" path="/mobilism/portal/:type/:fulltext?" paramsDesc={['Sections', 'Retrieve fulltext, specify `y` to enable']} notOperational="1">
|
||||
| Android Apps | Android Games | ebook | iPad Apps | iPad Games | iPhone Apps | iPhone Games |
|
||||
| ------------ | ------------- | ----- | --------- | ---------- | ----------- | ------------ |
|
||||
| aapp | agame | ebook | ipapp | ipgame | iapp | igame |
|
||||
</Route>
|
||||
|
||||
## NGA {#nga}
|
||||
|
||||
### 分区帖子 {#nga-fen-qu-tie-zi}
|
||||
|
|
@ -406,7 +320,7 @@ If you opt to enable `fulltext` feature, consider adding `limit` parameter to yo
|
|||
|
||||
### Thread {#scboy-forum-thread}
|
||||
|
||||
<Route author="totorowechat" example="/scboy/thread/188673" path="/scboy/thread/:tid" paramsDesc={['thread tid']} radar="1" notOperational="1">
|
||||
<Route author="totorowechat" example="/scboy/thread/188673" path="/scboy/thread/:tid" paramsDesc={['thread tid']} radar="1" configRequired="1">
|
||||
If the url of the thread is `https://www.scboy.com/?thread-188673.htm` then tid would be `1789863`.
|
||||
|
||||
When accessing Joeyray's Bar, `SCBOY_BBS_TOKEN` needs to be filled in `environment`. See [/install](/install) for details. `SCBOY_BBS_TOKEN` is included in cookies with `bbs_token`.
|
||||
|
|
@ -438,28 +352,6 @@ If you opt to enable `fulltext` feature, consider adding `limit` parameter to yo
|
|||
|
||||
<Route author="liyefox" example="/v2ex/tab/hot" path="/v2ex/tab/:tabid" paramsDesc={['tab标签ID,在 URL 可以找到']} />
|
||||
|
||||
## X 岛匿名版 {#x-dao-ni-ming-ban}
|
||||
|
||||
### 串 {#x-dao-ni-ming-ban-chuan}
|
||||
|
||||
<Route author="miles170" example="/nmbxd1/1" path="/nmbxd1/:id" paramsDesc={['板块 id 或者板块名称,现有板块请参考下表']} notOperational="1">
|
||||
| 综合线 | 非创作线 | 综合版 1 | 欢乐恶搞 | 买买买 (剁手) | 数码 (装机) | 技术 (码农) | 科学 (干货) | 二创 (画师) | 电影 / 电视 | ROLL 点 |
|
||||
| ------ | -------- | -------- | -------- | ------------- | ----------- | ----------- | ----------- | ----------- | ----------- | ------- |
|
||||
| 1 | 3 | 综合版 1 | 欢乐恶搞 | 买买买 | 数码 | 技术宅 | 科学 | 二创 | 影视 | ROLL 点 |
|
||||
|
||||
| 动画 | 漫画 | 主播 (UP) | 特摄 | 胶佬 (手办) | 小马 (美漫) | 东方 Project | 舰娘 | VOCALOID |
|
||||
| ---- | ---- | --------- | ---- | ----------- | ----------- | ------------ | ---- | -------- |
|
||||
| 动画 | 漫画 | 主播 | 特摄 | 胶佬 | 小马 | 东方 Project | 舰娘 | VOCALOID |
|
||||
|
||||
| 游戏综合版 | 手游 | 卡牌桌游 | 任天堂 NS | LOL | SE(FF14) | DOTA & 自走棋 | 联机 (服务器发布) | 怪物猎人 | 鹰角游戏 | 米哈游 | 音乐游戏 |
|
||||
| ---------- | ---- | -------- | --------- | --- | -------- | ------------- | ----------------------- | -------- | -------- | ------ | -------- |
|
||||
| 游戏 | 手游 | 卡牌桌游 | 任天堂 | LOL | SE | DOTA | 联机 %28 服务器发布 %29 | 怪物猎人 | 鹰角游戏 | 米哈游 | 音游 |
|
||||
|
||||
| 跑团 | 规则怪谈 | 都市怪谈 (灵异) | 脑洞 (推理) | 料理 (美食) | 宠物 | 学业 (校园) | 社畜 | 育儿 | 摄影 (cos) | 文学 (推书) | 音乐 (推歌) | 技术支持 |
|
||||
| ---- | -------- | --------------- | ----------- | ----------- | ---- | ----------- | ---- | ---- | -------------- | ----------- | ----------- | -------- |
|
||||
| 跑团 | 规则怪谈 | 都市怪谈 | 推理 | 料理 | 宠物 | 考试 | 社畜 | 育儿 | 摄影 %28cos%29 | 文学 | 音乐 | 技术支持 |
|
||||
</Route>
|
||||
|
||||
## ZodGame {#zodgame}
|
||||
|
||||
### forum {#zodgame-forum}
|
||||
|
|
@ -519,16 +411,6 @@ If you opt to enable `fulltext` feature, consider adding `limit` parameter to yo
|
|||
用例:`/baidu/tieba/search/neuro/kw=neurosama&only_thread=1&sm=2`
|
||||
</Route>
|
||||
|
||||
## 才符 {#cai-fu}
|
||||
|
||||
### 用户动态 {#cai-fu-yong-hu-dong-tai}
|
||||
|
||||
<Route author="nczitzk" example="/91ddcc/user/2377095" path="/91ddcc/user/:user" paramsDesc={['用户ID,在 URL 可以找到']} notOperational="1" />
|
||||
|
||||
### 驿站帖子 {#cai-fu-yi-zhan-tie-zi}
|
||||
|
||||
<Route author="nczitzk" example="/91ddcc/stage/206" path="/91ddcc/stage/:stage" paramsDesc={['驿站ID,在 URL 可以找到']} notOperational="1" />
|
||||
|
||||
## 超理论坛 {#chao-li-lun-tan}
|
||||
|
||||
### 板块 {#chao-li-lun-tan-ban-kuai}
|
||||
|
|
@ -586,7 +468,7 @@ If you opt to enable `fulltext` feature, consider adding `limit` parameter to yo
|
|||
|
||||
### 个人帖子 {#ding-xiang-yuan-ge-ren-tie-zi}
|
||||
|
||||
<Route author="TonyRL" example="/dxy/bbs/profile/thread/8335054" path="/dxy/bbs/profile/thread/:userId" paramsDesc={['个人 ID,可在 URL 中找到']} radar="1" notOperational="1" />
|
||||
<Route author="TonyRL" example="/dxy/bbs/profile/thread/8335054" path="/dxy/bbs/profile/thread/:userId" paramsDesc={['个人 ID,可在 URL 中找到']} radar="1" />
|
||||
|
||||
## 斗鱼 {#dou-yu}
|
||||
|
||||
|
|
@ -636,44 +518,6 @@ If you opt to enable `fulltext` feature, consider adding `limit` parameter to yo
|
|||
| | qna | lowshine | it | finance | startup | city |
|
||||
</Route>
|
||||
|
||||
## 海角社区 {#hai-jiao-she-qu}
|
||||
|
||||
### 热门 {#hai-jiao-she-qu-re-men}
|
||||
|
||||
<Route author="nczitzk" example="/hjedd/hot" path="/hjedd/hot" notOperational="1" />
|
||||
|
||||
### 新闻 {#hai-jiao-she-qu-xin-wen}
|
||||
|
||||
<Route author="nczitzk" example="/hjedd/news" path="/hjedd/news" notOperational="1" />
|
||||
|
||||
### 大事记 {#hai-jiao-she-qu-da-shi-ji}
|
||||
|
||||
<Route author="nczitzk" example="/hjedd/event" path="/hjedd/event" notOperational="1" />
|
||||
|
||||
### 原创 {#hai-jiao-she-qu-yuan-chuang}
|
||||
|
||||
<Route author="nczitzk" example="/hjedd/original" path="/hjedd/original" notOperational="1" />
|
||||
|
||||
### 精华 {#hai-jiao-she-qu-jing-hua}
|
||||
|
||||
<Route author="nczitzk" example="/hjedd/top" path="/hjedd/top" notOperational="1" />
|
||||
|
||||
### 公告 {#hai-jiao-she-qu-gong-gao}
|
||||
|
||||
<Route author="nczitzk" example="/hjedd/notice" path="/hjedd/notice" notOperational="1" />
|
||||
|
||||
### 最新 {#hai-jiao-she-qu-zui-xin}
|
||||
|
||||
<Route author="nczitzk" example="/hjedd/latest" path="/hjedd/latest" notOperational="1" />
|
||||
|
||||
### 文章 {#hai-jiao-she-qu-wen-zhang}
|
||||
|
||||
<Route author="nczitzk" example="/hjedd/1288/1" path="/hjedd/:node?/:type?" paramsDesc={['节点 id,可在对应节点页 URL 中找到,默认为 `258`,即 大事记', '类型 id,见下表,默认为 `0`,即 默认']} notOperational="1">
|
||||
| 默认 | 最新 | 热门 | 精华 | 悬赏 | 出售 |
|
||||
| ---- | ---- | ---- | ---- | ---- | ---- |
|
||||
| 0 | 1 | 2 | 3 | 4 | 5 |
|
||||
</Route>
|
||||
|
||||
## 虎扑 {#hu-pu}
|
||||
|
||||
### 首页 {#hu-pu-shou-ye}
|
||||
|
|
@ -704,24 +548,6 @@ If you opt to enable `fulltext` feature, consider adding `limit` parameter to yo
|
|||
:::
|
||||
</Route>
|
||||
|
||||
## 华为心声社区 {#hua-wei-xin-sheng-she-qu}
|
||||
|
||||
### 华为家事 {#hua-wei-xin-sheng-she-qu-hua-wei-jia-shi}
|
||||
|
||||
<Route author="nczitzk" example="/huawei/xinsheng" path="/huawei/xinsheng/:caty?/:order?/:keyword?" paramsDesc={['分区 ID, 见下表,默认为全部帖子', '排序方式, 见下表,默认为最新回复', '关键词,默认为空']} notOperational="1">
|
||||
分区 ID
|
||||
|
||||
| 全部帖子 | 公司文件 | 管理思考 | 产品改进 | 版务公告 |
|
||||
| -------- | -------- | -------- | -------- | -------- |
|
||||
| | 155 | 415 | 427 | 419 |
|
||||
|
||||
排序方式
|
||||
|
||||
| 最新发帖 | 最新回复 | 最多回复 | 最多点击 |
|
||||
| -------- | -------- | ---------- | --------- |
|
||||
| cTime | rTime | replycount | viewcount |
|
||||
</Route>
|
||||
|
||||
## 火线 {#huo-xian}
|
||||
|
||||
### Zone {#huo-xian-zone}
|
||||
|
|
@ -896,30 +722,6 @@ If you opt to enable `fulltext` feature, consider adding `limit` parameter to yo
|
|||
|
||||
<Route author="nczitzk" example="/samsungmembers/latest" path="/samsungmembers/latest" />
|
||||
|
||||
## 书友社区 {#shu-you-she-qu}
|
||||
|
||||
### 导读 {#shu-you-she-qu-dao-du}
|
||||
|
||||
<Route author="AngUOI" example="/andyt/newthread" path="/andyt/:view?" paramsDesc={['子版块 view, 为空默认最新发表']} notOperational="1">
|
||||
| 最新发表 | 最新热门 | 最新精华 | 最新回复 |
|
||||
| --------- | -------- | -------- | -------- |
|
||||
| newthread | hot | digest | new |
|
||||
</Route>
|
||||
|
||||
## 水木社区 {#shui-mu-she-qu}
|
||||
|
||||
### 分区文章 {#shui-mu-she-qu-fen-qu-wen-zhang}
|
||||
|
||||
<Route author="nczitzk" example="/newsmth/section/university" path="/newsmth/section/:section" paramsDesc={['分区名,见下表']} notOperational="1">
|
||||
| 社区管理 | 国内院校 | 休闲娱乐 | 五湖四海 | 游戏运动 | 社会信息 | 知性感性 | 文化人文 | 学术科学 | 电脑技术 |
|
||||
| --------- | ---------- | ------------- | -------- | -------- | -------- | -------- | -------- | -------- | ---------- |
|
||||
| community | university | entertainment | location | game | society | romance | culture | science | technology |
|
||||
</Route>
|
||||
|
||||
### 用户文章 {#shui-mu-she-qu-yong-hu-wen-zhang}
|
||||
|
||||
<Route author="nczitzk" example="/newsmth/account/fef705ec94819a5a87941759e33c0982" path="/newsmth/account/:id" paramsDesc={['用户 id,可在用户页的 URL 中找到']} notOperational="1" />
|
||||
|
||||
## 司机社 {#si-ji-she}
|
||||
|
||||
### 排行榜 {#si-ji-she-pai-hang-bang}
|
||||
|
|
@ -934,20 +736,6 @@ If you opt to enable `fulltext` feature, consider adding `limit` parameter to yo
|
|||
:::
|
||||
</Route>
|
||||
|
||||
## 天涯论坛 {#tian-ya-lun-tan}
|
||||
|
||||
### 子版块 {#tian-ya-lun-tan-zi-ban-kuai}
|
||||
|
||||
<Route author="a14907" example="/tianya/index/lookout" path="/tianya/index/:type" paramsDesc={['板块类型 type,可在 URL 找到 例如,天涯杂谈板块的地址是 http://bbs.tianya.cn/list-free-1.shtml, 这个板块的type就是free; 同理,我的大学板块地址为http://bbs.tianya.cn/list-university-1.shtml,类型是university']} notOperational="1" />
|
||||
|
||||
### 用户帖子 {#tian-ya-lun-tan-yong-hu-tie-zi}
|
||||
|
||||
<Route author="a14907" example="/tianya/user/11488997" path="/tianya/user/:userid" paramsDesc={['用户id userid,可在 URL 找到 例如,用户苕木匠的地址是 http://www.tianya.cn/11488997/bbs, 苕木匠的userid就是11488997']} notOperational="1" />
|
||||
|
||||
### 用户的回帖 {#tian-ya-lun-tan-yong-hu-de-hui-tie}
|
||||
|
||||
<Route author="a14907" example="/tianya/comments/11488997" path="/tianya/comments/:userid" paramsDesc={['用户id userid,可在 URL 找到 例如,用户苕木匠的地址是 http://www.tianya.cn/11488997/bbs, 苕木匠的userid就是11488997']} notOperational="1" />
|
||||
|
||||
## 通信人家园 {#tong-xin-ren-jia-yuan}
|
||||
|
||||
### 论坛 频道 {#tong-xin-ren-jia-yuan-lun-tan-pin-dao}
|
||||
|
|
@ -992,12 +780,6 @@ If you opt to enable `fulltext` feature, consider adding `limit` parameter to yo
|
|||
|
||||
<Route author="nczitzk" example="/wenxuecity/news" path="/wenxuecity/news" />
|
||||
|
||||
## 小米社区 {#xiao-mi-she-qu}
|
||||
|
||||
### 圈子 {#xiao-mi-she-qu-quan-zi}
|
||||
|
||||
<Route author="DIYgod" example="/mi/bbs/board/18066617" path="/mi/bbs/board/:boardId" paramsDesc={['圈子 id,可在圈子 URL 找到']} radar="1" notOperational="1" />
|
||||
|
||||
## 小木虫论坛 {#xiao-mu-chong-lun-tan}
|
||||
|
||||
### 期刊点评 {#xiao-mu-chong-lun-tan-qi-kan-dian-ping}
|
||||
|
|
@ -1214,12 +996,6 @@ If you opt to enable `fulltext` feature, consider adding `limit` parameter to yo
|
|||
| studyinusa | career | lifestyle | invest | visa | news |
|
||||
</Route>
|
||||
|
||||
## 音频应用 {#yin-pin-ying-yong}
|
||||
|
||||
### 最新主题 {#yin-pin-ying-yong-zui-xin-zhu-ti}
|
||||
|
||||
<Route author="zxzhuty" example="/audiobar/latest" path="/audiobar/latest" notOperational="1" />
|
||||
|
||||
## 直播吧 {#zhi-bo-ba}
|
||||
|
||||
### 子论坛 {#zhi-bo-ba-zi-lun-tan}
|
||||
|
|
@ -1237,17 +1013,3 @@ If you opt to enable `fulltext` feature, consider adding `limit` parameter to yo
|
|||
| --- | ----- | -------- | ------ |
|
||||
| nba | zuqiu | dianjing | zonghe |
|
||||
</Route>
|
||||
|
||||
## 中国灵异网 {#zhong-guo-ling-yi-wang}
|
||||
|
||||
### 分类 {#zhong-guo-ling-yi-wang-fen-lei}
|
||||
|
||||
<Route author="sanmmm" example="/lingyi/qiwenyishi" path="/lingyi/:qiwenyishi" paramsDesc={['分类']} notOperational="1">
|
||||
| 编辑推荐 | 奇闻异事 | 鬼话连篇 |
|
||||
| -------- | ---------- | -------------- |
|
||||
| tuijian | qiwenyishi | guihualianpian |
|
||||
|
||||
| 灵异事件 | 灵异图片 | 民间奇谈 |
|
||||
| ------------- | ------------ | ------------ |
|
||||
| lingyishijain | lingyitupian | minjianqitan |
|
||||
</Route>
|
||||
|
|
|
|||
|
|
@ -74,21 +74,6 @@
|
|||
For instance, when doing search at [https://magazinelib.com](https://magazinelib.com) and you get url `https://magazinelib.com/?s=new+yorker`, the query is `new+yorker`
|
||||
</Route>
|
||||
|
||||
## Mobilism {#mobilism}
|
||||
|
||||
### eBook Releases {#mobilism-ebook-releases}
|
||||
|
||||
<Route author="nitezs" example="/mobilism/forums/books/romance" path="/mobilism/forums/books/:type/:fulltext?" paramsDesc={['Category', 'Retrieve fulltext, specify `y` to enable']} notOperational="1">
|
||||
| Category | Parameter |
|
||||
| ------------------------ | ---------- |
|
||||
| Romance | romance |
|
||||
| Sci-Fi/Fantasy/Horror | scifi |
|
||||
| General Fiction/Classics | classics |
|
||||
| Magazines & Newspapers | magazines |
|
||||
| Audiobooks | audioBooks |
|
||||
| Comics | comics |
|
||||
</Route>
|
||||
|
||||
## Penguin Random House {#penguin-random-house}
|
||||
|
||||
### Book Lists {#penguin-random-house-book-lists}
|
||||
|
|
|
|||
Loading…
Reference in New Issue