feat(route): Support xsijishe rank (#14006)

* 支持司机社论坛 rss

* rename sjs to xsijishe

* Update docs/bbs.md

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update docs/bbs.md

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update lib/v2/xsijishe/forum.js

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update lib/v2/xsijishe/forum.js

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update lib/v2/xsijishe/forum.js

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* Update lib/v2/xsijishe/radar.js

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* support xsijishe rank

* support xsijishe rank

---------
This commit is contained in:
Jack Bryant 2023-12-10 22:16:51 +08:00 committed by GitHub
parent 1f41a941f6
commit 8b10f38ea0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 78 additions and 0 deletions

View File

@ -1,3 +1,4 @@
module.exports = {
'/forum/:fid': ['akynazh'],
'/rank/:type': ['akynazh'],
};

View File

@ -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',
},
],
},
};

60
lib/v2/xsijishe/rank.js Normal file
View File

@ -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,
};
};

View File

@ -1,3 +1,4 @@
module.exports = function (router) {
router.get('/forum/:fid', require('./forum'));
router.get('/rank/:type', require('./rank'));
};

View File

@ -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}
<Route author="akynazh" example="/xsijishe/rank/weekly" path="/xsijishe/rank/:type" paramsDesc={['排行榜类型: weekly | monthly']} radar="1"/>
### 论坛 {#si-ji-she-lun-tan}
<Route author="akynazh" example="/xsijishe/forum/51" path="/xsijishe/forum/:fid" paramsDesc={['子论坛 id']} radar="1">