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}