mirror of
https://github.com/DIYgod/RSSHub.git
synced 2026-09-24 23:12:34 +08:00
feat(route): 新增 米游社 - 同人榜 路由 (#13153)
* feat(route): 添加 百度股市通 * fix: 修改 百度股市通 路径 * docs: 添加 百度股市通 文档 * feat: 添加 radar 支持 * fix: 按字母顺序插入新路由 * feat(route): 新增 腾讯新闻 - 新型冠状病毒肺炎疫情实时追踪 * fix: 优化 腾讯新闻 - 新型冠状病毒肺炎疫情实时追踪 的标题 * fix: 修复 腾讯新闻 - 新型冠状病毒肺炎疫情实时追踪 部分情况下的非空判断 * fix: 修复 地区名称标题的问题 * fix: 腾讯新闻 - 新型冠状病毒肺炎疫情实时追踪 的 guid 增加 pubDate * fix: 修复 腾讯新闻 - 新型冠状病毒肺炎疫情实时追踪 guid 中添加 pubDate * fix: 修改 腾讯新闻 - 新型冠状病毒肺炎疫情实时追踪 的 title * feat(route): 修复 HelloGitHub 的 月刊 路由 * fix: remove guid * feat(route): 新增 bilibili 热搜 * feat(route): 完善 bilibili热搜 的 radar * fix: 优化 bilibili热搜 list 的非空判断 * fix: 修复 bilibili热搜路由失效 fix #12632 * fix(route): 修复 bilibili热搜路由 的校验逻辑计算 * fix: 优化 bilibili/utils 的 addVerifyInfo 逻辑 * feat(route): bilibili 动态中的视频链接默认改为 BV 号并增加配置参数;修改 专栏显示全文 的参数来源 * fix(route): 修复 fulltext 来源错误;修复 addVerifyInfo 逻辑错误 * fix(route): 移除不必要的参数 * feat(route): 新增 米游社 - 同人榜 路由 * fix: 修复 崩坏二 默认排行榜类型错误;修复 art 模板路径错误 * fix: 提取 静态数据;优化入参形式 * fix(docs): 更新 bilibili 文档 * docs(docs): 修复 掘金文档错误 * fix(route): 修复 参数风格问题;修改 query 的处理 * docs(docs): 回退 last_id --------- Co-authored-by: pull[bot] <39814207+pull[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
pull[bot]
parent
d5f916caec
commit
90a2db4b24
@@ -30,7 +30,7 @@ module.exports = {
|
||||
'/user/channel/:uid/:sid/:disableEmbed?': ['weirongxu'],
|
||||
'/user/coin/:uid/:disableEmbed?': ['DIYgod'],
|
||||
'/user/collection/:uid/:sid/:disableEmbed?': ['shininome'],
|
||||
'/user/dynamic/:uid/:routeParams?': ['DIYgod', 'zytomorrow', 'JimenezLi'],
|
||||
'/user/dynamic/:uid/:routeParams?': ['DIYgod', 'zytomorrow', 'CaoMeiYouRen', 'JimenezLi'],
|
||||
'/user/fav/:uid/:disableEmbed?': ['DIYgod'],
|
||||
'/user/followers/:uid/:loginUid': ['Qixingchen'],
|
||||
'/user/followings/:uid/:loginUid': ['Qixingchen'],
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
const got = require('@/utils/got');
|
||||
const { art } = require('@/utils/render');
|
||||
const path = require('path');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
const { DATA_MAP, RANKING_TYPE_MAP } = require('./static-data');
|
||||
|
||||
const renderDescription = (description, images) => art(path.join(__dirname, '../templates/description.art'), { description, images });
|
||||
|
||||
const getGameInfo = (game) => ({
|
||||
gids: DATA_MAP[game]?.gids,
|
||||
title: DATA_MAP[game]?.title,
|
||||
});
|
||||
const getForumInfo = (game, forum_type) => {
|
||||
forum_type = forum_type || DATA_MAP[game]?.default_forum || 'tongren';
|
||||
const forum = DATA_MAP[game]?.forums?.[forum_type];
|
||||
return {
|
||||
forum_id: forum?.forum_id,
|
||||
title: `${forum?.title}榜`,
|
||||
};
|
||||
};
|
||||
const getCateInfo = (game, forum_type, cate_type) => {
|
||||
forum_type = forum_type || DATA_MAP[game]?.default_forum || 'tongren';
|
||||
const forum = DATA_MAP[game]?.forums?.[forum_type];
|
||||
const default_cate = forum?.default_cate;
|
||||
if (!default_cate) {
|
||||
return {
|
||||
title: '',
|
||||
cate_id: '0',
|
||||
};
|
||||
}
|
||||
cate_type = cate_type || default_cate;
|
||||
return {
|
||||
title: `${forum?.cates?.[cate_type]?.title}榜`,
|
||||
cate_id: forum?.cates?.[cate_type]?.cate_id,
|
||||
};
|
||||
};
|
||||
const getRankingTypeInfo = (game, ranking_type) => {
|
||||
ranking_type = ranking_type || DATA_MAP[game]?.default_ranking_type || 'daily';
|
||||
return {
|
||||
id: RANKING_TYPE_MAP[ranking_type]?.id,
|
||||
title: RANKING_TYPE_MAP[ranking_type]?.title,
|
||||
};
|
||||
};
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const { game } = ctx.params;
|
||||
const routeParams = Object.fromEntries(new URLSearchParams(ctx.params.routeParams));
|
||||
const { forumType: forum_type = 'tongren', cateType: cate_type, rankingType: ranking_type, lastId: last_id = '' } = routeParams;
|
||||
const page_size = ctx.query.limit || '20';
|
||||
const { gids, title: game_title } = getGameInfo(game);
|
||||
if (!gids) {
|
||||
throw new Error('未知的游戏!');
|
||||
}
|
||||
const { forum_id, title: forum_title } = getForumInfo(game, forum_type);
|
||||
if (!forum_id) {
|
||||
throw new Error(`${game_title} 的排行榜不存在!`);
|
||||
}
|
||||
const { cate_id, title: cate_title } = getCateInfo(game, forum_type, cate_type);
|
||||
const { id: type, title: type_title } = getRankingTypeInfo(game, ranking_type);
|
||||
const query = new URLSearchParams({
|
||||
gids,
|
||||
forum_id,
|
||||
cate_id,
|
||||
type,
|
||||
page_size,
|
||||
last_id,
|
||||
}).toString();
|
||||
const url = `https://bbs-api.miyoushe.com/post/wapi/getImagePostList?${query}`;
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url,
|
||||
});
|
||||
const list = response?.data?.data?.list;
|
||||
if (!list) {
|
||||
throw new Error('未获取到数据!');
|
||||
}
|
||||
const title = `米游社-${game_title}-${forum_title}${cate_title ? `-${cate_title}` : ''}-${type_title}`;
|
||||
const items = list.map((e) => {
|
||||
const author = e.user.nickname;
|
||||
const title = e.post.subject;
|
||||
const link = `https://bbs.mihoyo.com/ys/article/${e.post.post_id}`;
|
||||
let describe = e.post.content || '';
|
||||
try {
|
||||
describe = JSON.parse(e.post.content).describe;
|
||||
} catch (error) {
|
||||
if (!(error instanceof SyntaxError)) {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
const description = renderDescription(describe || '', [e.post.cover, ...e.post.images]);
|
||||
const pubDate = parseDate(e.post.created_at * 1000);
|
||||
return {
|
||||
author,
|
||||
title,
|
||||
link,
|
||||
description,
|
||||
pubDate,
|
||||
};
|
||||
});
|
||||
const data = {
|
||||
title,
|
||||
link: url,
|
||||
item: items,
|
||||
};
|
||||
ctx.state.data = data;
|
||||
};
|
||||
@@ -0,0 +1,137 @@
|
||||
// 排行榜基本数据
|
||||
const DATA_MAP = {
|
||||
bh2: {
|
||||
title: '崩坏学园2',
|
||||
gids: 3,
|
||||
default_forum: 'tongren',
|
||||
default_ranking_type: 'weekly',
|
||||
forums: {
|
||||
tongren: {
|
||||
title: '同人',
|
||||
forum_id: 40,
|
||||
},
|
||||
},
|
||||
},
|
||||
bh3: {
|
||||
title: '崩坏3',
|
||||
gids: 1,
|
||||
default_forum: 'tongren',
|
||||
forums: {
|
||||
tongren: {
|
||||
title: '同人',
|
||||
forum_id: 4,
|
||||
default_cate: 'illustration',
|
||||
cates: {
|
||||
comic: {
|
||||
title: '漫画',
|
||||
cate_id: 3,
|
||||
},
|
||||
illustration: {
|
||||
title: '插画',
|
||||
cate_id: 4,
|
||||
},
|
||||
cos: {
|
||||
title: 'COS',
|
||||
cate_id: 17,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
ys: {
|
||||
title: '原神',
|
||||
gids: 2,
|
||||
default_forum: 'tongren',
|
||||
forums: {
|
||||
tongren: {
|
||||
title: '同人',
|
||||
forum_id: 29,
|
||||
default_cate: 'illustration',
|
||||
cates: {
|
||||
manual: {
|
||||
title: '手工',
|
||||
cate_id: 1,
|
||||
},
|
||||
qute: {
|
||||
title: 'Q版',
|
||||
cate_id: 2,
|
||||
},
|
||||
comic: {
|
||||
title: '漫画',
|
||||
cate_id: 3,
|
||||
},
|
||||
illustration: {
|
||||
title: '插画',
|
||||
cate_id: 4,
|
||||
},
|
||||
},
|
||||
},
|
||||
cos: {
|
||||
title: 'COS',
|
||||
forum_id: 49,
|
||||
},
|
||||
},
|
||||
},
|
||||
wd: {
|
||||
title: '未定事件簿',
|
||||
gids: 4,
|
||||
default_forum: 'tongren',
|
||||
forums: {
|
||||
tongren: {
|
||||
title: '同人',
|
||||
forum_id: 38,
|
||||
},
|
||||
},
|
||||
},
|
||||
sr: {
|
||||
title: '崩坏:星穹铁道',
|
||||
gids: 6,
|
||||
default_forum: 'tongren',
|
||||
forums: {
|
||||
tongren: {
|
||||
title: '同人',
|
||||
forum_id: 56,
|
||||
},
|
||||
},
|
||||
},
|
||||
zzz: {
|
||||
title: '绝区零',
|
||||
gids: 8,
|
||||
},
|
||||
dby: {
|
||||
title: '大别野',
|
||||
gids: 5,
|
||||
default_forum: 'tongren',
|
||||
forums: {
|
||||
tongren: {
|
||||
title: '同人',
|
||||
forum_id: 39,
|
||||
},
|
||||
cos: {
|
||||
title: 'COS',
|
||||
forum_id: 47,
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// 排行榜分类
|
||||
const RANKING_TYPE_MAP = {
|
||||
daily: {
|
||||
id: 1,
|
||||
title: '日榜',
|
||||
},
|
||||
weekly: {
|
||||
id: 2,
|
||||
title: '周榜',
|
||||
},
|
||||
monthly: {
|
||||
id: 3,
|
||||
title: '月榜',
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
DATA_MAP,
|
||||
RANKING_TYPE_MAP,
|
||||
};
|
||||
@@ -1,4 +1,5 @@
|
||||
module.exports = {
|
||||
'/bbs/img-ranking/:game/:routeParams?': ['CaoMeiYouRen'],
|
||||
'/bbs/official/:gids/:type?/:page_size?/:last_id?': ['CaoMeiYouRen'],
|
||||
'/sr/:location?/:category?': ['shinanory'],
|
||||
'/ys/:location?/:category?': ['nczitzk'],
|
||||
|
||||
@@ -21,9 +21,15 @@ module.exports = {
|
||||
'mihoyo.com': {
|
||||
_name: '米哈游',
|
||||
bbs: [
|
||||
{
|
||||
title: '米游社 - 同人榜',
|
||||
docs: 'https://docs.rsshub.app/routes/game#mi-ha-you',
|
||||
source: '/:game/imgRanking/:forum_id/:ranking_id/:cate_id',
|
||||
target: `/mihoyo/bbs/img-ranking/:game`,
|
||||
},
|
||||
{
|
||||
title: '米游社 - 官方公告',
|
||||
docs: 'https://docs.rsshub.app/routes/game#mi-ha-you-mi-you-she-guan-fang-gong-gao',
|
||||
docs: 'https://docs.rsshub.app/routes/game#mi-ha-you',
|
||||
source: ['/:game/home/28', '/:game/home/6', '/:game/home/31', '/:game/home/33', '/:game/home/53', '/:game/home/58'],
|
||||
target: (params, url) => {
|
||||
const GITS_MAP = {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
module.exports = function (router) {
|
||||
router.get('/bbs/official/:gids/:type?/:page_size?/:last_id?', require('./bbs'));
|
||||
router.get('/bbs/img-ranking/:game/:routeParams?', require('./bbs/img-ranking'));
|
||||
router.get('/bbs/official/:gids/:type?/:page_size?/:last_id?', require('./bbs/official'));
|
||||
router.get('/sr/:location?/:category?', require('./sr/news'));
|
||||
router.get('/ys/:location?/:category?', require('./ys/news'));
|
||||
};
|
||||
|
||||
@@ -747,6 +747,52 @@ Example:`https://www.iyingdi.com/tz/people/55547` ,id 是 `55547`
|
||||
|
||||
</Route>
|
||||
|
||||
### 米游社 - 同人榜 {#mi-ha-you-mi-you-she---tong-ren-bang}
|
||||
|
||||
<Route author="CaoMeiYouRen" example="/mihoyo/bbs/img-ranking/ys/forumType=tongren&cateType=illustration&rankingType=daily" path="/bbs/img-ranking/:game/:routeParams?" paramsDesc={['游戏缩写','额外参数;请参阅以下说明和表格']} radar="1">
|
||||
|
||||
| 键 | 含义 | 接受的值 | 默认值 |
|
||||
| ----------- | ----------------------------------- | ------------------------------------------------------------ | ------------ |
|
||||
| forumType | 主榜类型(仅原神、大别野有cos主榜) | tongren/cos | tongren |
|
||||
| cateType | 子榜类型(仅崩坏三、原神有子榜) | 崩坏三:illustration/comic/cos;原神:illustration/comic/qute/manual | illustration |
|
||||
| rankingType | 排行榜类型(崩坏二没有日榜) | daily/weekly/monthly | daily |
|
||||
| lastId | 当前页id(用于分页) | 数字 | 1 |
|
||||
|
||||
游戏缩写(目前绝区零还没有同人榜
|
||||
|
||||
| 崩坏三 | 原神 | 崩坏二 | 未定事件簿 | 星穹铁道 | 大别野 |
|
||||
| ------ | ---- | ------ | ---------- | -------- | ------ |
|
||||
| bh3 | ys | bh2 | wd | sr | dby |
|
||||
|
||||
主榜类型
|
||||
|
||||
| 同人榜 | COS榜 |
|
||||
| ------- | ----- |
|
||||
| tongren | cos |
|
||||
|
||||
子榜类型
|
||||
|
||||
崩坏三 子榜
|
||||
|
||||
| 插画 | 漫画 | COS |
|
||||
| ------------ | ----- | ---- |
|
||||
| illustration | comic | cos |
|
||||
|
||||
|
||||
原神 子榜
|
||||
|
||||
| 插画 | 漫画 | Q版 | 手工 |
|
||||
| ------------ | ----- | ---- | ------ |
|
||||
| illustration | comic | qute | manual |
|
||||
|
||||
排行榜类型
|
||||
|
||||
| 日榜 | 周榜 | 月榜 |
|
||||
| ----- | ------ | ------- |
|
||||
| daily | weekly | monthly |
|
||||
|
||||
</Route>
|
||||
|
||||
### 米游社 - 官方公告 {#mi-ha-you-mi-you-she---guan-fang-gong-gao}
|
||||
|
||||
<Route author="CaoMeiYouRen" example="/mihoyo/bbs/official/2/3/20/" path="/bbs/official/:gids/:type?/:page_size?/:last_id?" paramsDesc={['游戏id','公告类型,默认为 2(即 活动)','分页大小,默认为 20 ','跳过的公告数,例如指定为 40 就是从第 40 条公告开始,可用于分页']} radar="1">
|
||||
|
||||
@@ -1125,7 +1125,7 @@ Stay up to date on the latest React news, tutorials, resources, and more. Delive
|
||||
|
||||
</Route>
|
||||
|
||||
### 用户专栏 {#jue-jin-yong-hu-zhuan-lan}
|
||||
### 用户文章 {#jue-jin-yong-hu-wen-zhang}
|
||||
|
||||
<Route author="Maecenas" example="/juejin/posts/3051900006845944" path="/juejin/posts/:id" paramsDesc={['用户 id, 可在用户页 URL 中找到']} radar="1" rssbud="1"/>
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
|
||||
|
||||
### UP 主动态 {#bilibili-up-zhu-dong-tai}
|
||||
|
||||
<Route author="DIYgod zytomorrow JimenezLi" example="/bilibili/user/dynamic/2267573" path="/bilibili/user/dynamic/:uid/:routeParams?" paramsDesc={['用户 id, 可在 UP 主主页中找到', '额外参数;请参阅以下说明和表格']} radar="1" rssbud="1">
|
||||
<Route author="DIYgod zytomorrow CaoMeiYouRen JimenezLi" example="/bilibili/user/dynamic/2267573" path="/bilibili/user/dynamic/:uid/:routeParams?" paramsDesc={['用户 id, 可在 UP 主主页中找到', '额外参数;请参阅以下说明和表格']} radar="1" rssbud="1">
|
||||
|
||||
| 键 | 含义 | 接受的值 | 默认值 |
|
||||
| -- | ---- | ------- | ------ |
|
||||
|
||||
Reference in New Issue
Block a user