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}