From 06e67d6219537fa1453586dcd5612c090cdd1952 Mon Sep 17 00:00:00 2001 From: JimenezLi <75196426+JimenezLi@users.noreply.github.com> Date: Mon, 28 Aug 2023 22:07:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(route):=20`/bangumi/tv/subject`=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=98=BE=E7=A4=BA=E5=8E=9F=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E5=8F=82=E6=95=B0=20(#13139)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(route): /bangumi/tv/subject add param showOriginalName * Update lib/v2/bangumi/tv/subject/index.js --------- --- lib/v2/bangumi/maintainer.js | 1 + lib/v2/bangumi/radar.js | 18 +++++----- lib/v2/bangumi/router.js | 3 +- lib/v2/bangumi/tv/subject/ep.js | 7 ++-- lib/v2/bangumi/tv/subject/index.js | 34 ++++++++++--------- .../bangumi/tv/subject/offcial-subject-api.js | 5 +-- lib/v2/bangumi/tv/subject/utils.js | 5 +++ website/docs/routes/anime.md | 12 +++++++ 8 files changed, 53 insertions(+), 32 deletions(-) create mode 100644 lib/v2/bangumi/tv/subject/utils.js diff --git a/lib/v2/bangumi/maintainer.js b/lib/v2/bangumi/maintainer.js index 3c73156f9..2e0def8ef 100644 --- a/lib/v2/bangumi/maintainer.js +++ b/lib/v2/bangumi/maintainer.js @@ -12,6 +12,7 @@ module.exports = { '/tv/subject/:id/blogs': ['ylc395'], '/tv/subject/:id/comments': ['ylc395'], '/tv/subject/:id/topics': ['ylc395'], + '/tv/subject/:id/:type?/:showOriginalName?': ['JimenezLi'], '/tv/topic/:id': ['ylc395'], '/tv/user/blog/:id': ['nczitzk'], }; diff --git a/lib/v2/bangumi/radar.js b/lib/v2/bangumi/radar.js index 65bdb4893..dcd2cebc8 100644 --- a/lib/v2/bangumi/radar.js +++ b/lib/v2/bangumi/radar.js @@ -3,55 +3,55 @@ const bangumiTV = { '.': [ { title: '小组话题', - docs: 'https://docs.rsshub.app/routes/anime#bangumi', + docs: 'https://docs.rsshub.app/routes/anime#bangumi-fan-zu-ji-hua', source: '/group/:id', target: '/bangumi/tv/group/:id', }, { title: '小组话题的新回复', - docs: 'https://docs.rsshub.app/routes/anime#bangumi', + docs: 'https://docs.rsshub.app/routes/anime#bangumi-fan-zu-ji-hua', source: '/group/topic/:id', target: '/bangumi/tv/topic/:id', }, { title: '现实人物的新作品', - docs: 'https://docs.rsshub.app/routes/anime#bangumi', + docs: 'https://docs.rsshub.app/routes/anime#bangumi-fan-zu-ji-hua', source: '/person/:id', target: '/bangumi/tv/person/:id', }, { title: '用户日志', - docs: 'https://docs.rsshub.app/routes/anime#bangumi', + docs: 'https://docs.rsshub.app/routes/anime#bangumi-fan-zu-ji-hua', source: '/user/:id', target: '/bangumi/tv/user/blog/:id', }, { title: '条目的讨论', - docs: 'https://docs.rsshub.app/routes/anime#bangumi', + docs: 'https://docs.rsshub.app/routes/anime#bangumi-fan-zu-ji-hua', source: '/subject/:id', target: '/bangumi/tv/subject/:id/topics', }, { title: '条目的评论', - docs: 'https://docs.rsshub.app/routes/anime#bangumi', + docs: 'https://docs.rsshub.app/routes/anime#bangumi-fan-zu-ji-hua', source: '/subject/:id', target: '/bangumi/tv/subject/:id/blogs', }, { title: '条目的章节', - docs: 'https://docs.rsshub.app/routes/anime#bangumi', + docs: 'https://docs.rsshub.app/routes/anime#bangumi-fan-zu-ji-hua', source: '/subject/:id', target: '/bangumi/tv/subject/:id', }, { title: '条目的吐槽箱', - docs: 'https://docs.rsshub.app/routes/anime#bangumi', + docs: 'https://docs.rsshub.app/routes/anime#bangumi-fan-zu-ji-hua', source: '/subject/:id', target: '/bangumi/tv/subject/:id/comments', }, { title: '放送列表', - docs: 'https://docs.rsshub.app/routes/anime#bangumi', + docs: 'https://docs.rsshub.app/routes/anime#bangumi-fan-zu-ji-hua', source: '/calendar', target: '/bangumi/tv/calendar/today', }, diff --git a/lib/v2/bangumi/router.js b/lib/v2/bangumi/router.js index 7707b9c10..3d1ab6c7d 100644 --- a/lib/v2/bangumi/router.js +++ b/lib/v2/bangumi/router.js @@ -7,8 +7,7 @@ module.exports = function (router) { router.get('/tv/calendar/today', require('./tv/calendar/today')); router.get('/tv/group/:id', require('./tv/group/topic')); router.get('/tv/person/:id', require('./tv/person')); - router.get('/tv/subject/:id', require('./tv/subject')); - router.get('/tv/subject/:id/:type', require('./tv/subject')); + router.get('/tv/subject/:id/:type?/:showOriginalName?', require('./tv/subject')); router.get('/tv/topic/:id', require('./tv/group/reply')); router.get('/tv/user/blog/:id', require('./tv/user/blog')); }; diff --git a/lib/v2/bangumi/tv/subject/ep.js b/lib/v2/bangumi/tv/subject/ep.js index b0e02b8b3..04fbc00b4 100644 --- a/lib/v2/bangumi/tv/subject/ep.js +++ b/lib/v2/bangumi/tv/subject/ep.js @@ -2,8 +2,9 @@ const got = require('@/utils/got'); const { parseDate } = require('@/utils/parse-date'); const { art } = require('@/utils/render'); const path = require('path'); +const { getLocalName } = require('./utils'); -module.exports = async (subjectID) => { +module.exports = async (subjectID, showOriginalName) => { const url = `https://api.bgm.tv/subject/${subjectID}?responseGroup=large`; const { data: epsInfo } = await got(url); const activeEps = []; @@ -15,11 +16,11 @@ module.exports = async (subjectID) => { }); return { - title: epsInfo.name_cn || epsInfo.name, + title: getLocalName(epsInfo, showOriginalName), link: `https://bgm.tv/subject/${subjectID}`, description: epsInfo.summary, item: activeEps.map((e) => ({ - title: `ep.${e.sort} ${e.name_cn || e.name}`, + title: `ep.${e.sort} ${getLocalName(e, showOriginalName)}`, description: art(path.resolve(__dirname, '../../templates/tv/ep.art'), { e, epsInfo, diff --git a/lib/v2/bangumi/tv/subject/index.js b/lib/v2/bangumi/tv/subject/index.js index 0929aa32d..bd75053d7 100644 --- a/lib/v2/bangumi/tv/subject/index.js +++ b/lib/v2/bangumi/tv/subject/index.js @@ -1,26 +1,28 @@ const getComments = require('./comments.js'); const getFromAPI = require('./offcial-subject-api.js'); const getEps = require('./ep.js'); +const { queryToBoolean } = require('@/utils/readable-social'); module.exports = async (ctx) => { const id = ctx.params.id; + const type = ctx.params.type || 'ep'; + const showOriginalName = queryToBoolean(ctx.params.showOriginalName); let response; - if (ctx.params.type) { - switch (ctx.params.type) { - case 'comments': - response = await getComments(id, Number(ctx.query.minLength) || 0); - break; - case 'blogs': - response = await getFromAPI('blog')(id); - break; - case 'topics': - response = await getFromAPI('topic')(id); - break; - default: - throw Error(`暂不支持对${ctx.params.type}的订阅`); - } - } else { - response = await getEps(id); + switch (type) { + case 'ep': + response = await getEps(id, showOriginalName); + break; + case 'comments': + response = await getComments(id, Number(ctx.query.minLength) || 0); + break; + case 'blogs': + response = await getFromAPI('blog')(id, showOriginalName); + break; + case 'topics': + response = await getFromAPI('topic')(id, showOriginalName); + break; + default: + throw Error(`暂不支持对${type}的订阅`); } ctx.state.data = response; }; diff --git a/lib/v2/bangumi/tv/subject/offcial-subject-api.js b/lib/v2/bangumi/tv/subject/offcial-subject-api.js index 98e6b1f6a..2020e5150 100644 --- a/lib/v2/bangumi/tv/subject/offcial-subject-api.js +++ b/lib/v2/bangumi/tv/subject/offcial-subject-api.js @@ -1,5 +1,6 @@ const got = require('@/utils/got'); const { parseDate } = require('@/utils/parse-date'); +const { getLocalName } = require('./utils'); module.exports = (type) => { const mapping = { @@ -13,12 +14,12 @@ module.exports = (type) => { }, }; - return async (subjectID) => { + return async (subjectID, showOriginalName) => { // 官方提供的条目API文档见 https://github.com/bangumi/api/blob/3f3fa6390c468816f9883d24be488e41f8946159/docs-raw/Subject-API.md const url = `https://api.bgm.tv/subject/${subjectID}?responseGroup=large`; const { data: subjectInfo } = await got(url); return { - title: `${subjectInfo.name_cn || subjectInfo.name}的 Bangumi ${mapping[type].cn}`, + title: `${getLocalName(subjectInfo, showOriginalName)}的 Bangumi ${mapping[type].cn}`, link: `https://bgm.tv/subject/${subjectInfo.id}/${mapping[type].en}`, item: subjectInfo[type].map((article) => ({ title: `${article.user.nickname}:${article.title}`, diff --git a/lib/v2/bangumi/tv/subject/utils.js b/lib/v2/bangumi/tv/subject/utils.js new file mode 100644 index 000000000..31a3a2526 --- /dev/null +++ b/lib/v2/bangumi/tv/subject/utils.js @@ -0,0 +1,5 @@ +const getLocalName = (obj, showOriginalName) => (showOriginalName ? obj.name || obj.name_cn : obj.name_cn || obj.name); + +module.exports = { + getLocalName, +}; diff --git a/website/docs/routes/anime.md b/website/docs/routes/anime.md index 9281dfc39..1c724d127 100644 --- a/website/docs/routes/anime.md +++ b/website/docs/routes/anime.md @@ -159,6 +159,18 @@ For more tags, please go to [Search torrent](https://bangumi.moe/search/index) +### 条目的通用路由格式 {#bangumi-fan-zu-ji-hua-tiao-mu-di-tong-yong-lu-you-ge-shi} + + + +:::caution + +此通用路由仅用于对路由参数的描述,具体信息请查看下方与条目相关的路由 + +::: + + + ### 条目的章节 {#bangumi-fan-zu-ji-hua-tiao-mu-di-zhang-jie}