diff --git a/lib/v2/xsijishe/maintainer.js b/lib/v2/xsijishe/maintainer.js index e136abf72..2e41f7754 100644 --- a/lib/v2/xsijishe/maintainer.js +++ b/lib/v2/xsijishe/maintainer.js @@ -1,3 +1,4 @@ module.exports = { '/forum/:fid': ['akynazh'], + '/rank/:type': ['akynazh'], }; diff --git a/lib/v2/xsijishe/radar.js b/lib/v2/xsijishe/radar.js index 2cab0e2f8..ea7380c6c 100644 --- a/lib/v2/xsijishe/radar.js +++ b/lib/v2/xsijishe/radar.js @@ -14,6 +14,18 @@ module.exports = { } }, }, + { + title: '周排行榜', + docs: 'https://docs.rsshub.app/routes/bbs#si-ji-she', + source: ['/*'], + target: '/xsijishe/rank/weekly', + }, + { + title: '月排行榜', + docs: 'https://docs.rsshub.app/routes/bbs#si-ji-she', + source: ['/*'], + target: '/xsijishe/rank/monthly', + }, ], }, }; diff --git a/lib/v2/xsijishe/rank.js b/lib/v2/xsijishe/rank.js new file mode 100644 index 000000000..600566c86 --- /dev/null +++ b/lib/v2/xsijishe/rank.js @@ -0,0 +1,60 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const baseUrl = 'https://xsijishe.com'; + +module.exports = async (ctx) => { + const rankType = ctx.params.type; + let title; + let rankId; + if (rankType === 'weekly') { + title = '司机社综合周排行榜'; + rankId = 'nex_recons_demens'; + } else if (rankType === 'monthly') { + title = '司机社综合月排行榜'; + rankId = 'nex_recons_demens1'; + } else { + throw Error('Invalid rank type'); + } + const url = `${baseUrl}/portal.php`; + const resp = await got(url); + const $ = cheerio.load(resp.data); + let items = $(`#${rankId} dd`) + .toArray() + .map((item) => { + item = $(item); + const title = item.find('h5').text().trim(); + const link = item.find('a').attr('href'); + return { + title, + link: `${baseUrl}/${link}`, + }; + }); + items = await Promise.all( + items.map((item) => + ctx.cache.tryGet(item.link, async () => { + const resp = await got(item.link); + const $ = cheerio.load(resp.data); + const firstViewBox = $('.t_f').first(); + + firstViewBox.find('img').each((_, img) => { + img = $(img); + if (img.attr('zoomfile')) { + img.attr('src', img.attr('zoomfile')); + img.removeAttr('zoomfile'); + img.removeAttr('file'); + } + img.removeAttr('onmouseover'); + }); + + item.description = firstViewBox.html(); + return item; + }) + ) + ); + ctx.state.data = { + title, + link: url, + description: title, + item: items, + }; +}; diff --git a/lib/v2/xsijishe/router.js b/lib/v2/xsijishe/router.js index 87b792c18..93ed05c1c 100644 --- a/lib/v2/xsijishe/router.js +++ b/lib/v2/xsijishe/router.js @@ -1,3 +1,4 @@ module.exports = function (router) { router.get('/forum/:fid', require('./forum')); + router.get('/rank/:type', require('./rank')); }; diff --git a/website/docs/routes/bbs.mdx b/website/docs/routes/bbs.mdx index 6abc27e75..4fcc447a7 100644 --- a/website/docs/routes/bbs.mdx +++ b/website/docs/routes/bbs.mdx @@ -1005,6 +1005,10 @@ When accessing Joeyray's Bar, `SCBOY_BBS_TOKEN` needs to be filled in `environme ## 司机社 {#si-ji-she} +### 排行榜 {#si-ji-she-pai-hang-bang} + + + ### 论坛 {#si-ji-she-lun-tan}