feat(route): `/bangumi/tv/subject` 添加显示原名称参数 (#13139)

* feat(route): /bangumi/tv/subject add param showOriginalName

* Update lib/v2/bangumi/tv/subject/index.js

---------
This commit is contained in:
JimenezLi 2023-08-28 22:07:57 +08:00 committed by GitHub
parent 37574030e7
commit 06e67d6219
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 53 additions and 32 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,5 @@
const getLocalName = (obj, showOriginalName) => (showOriginalName ? obj.name || obj.name_cn : obj.name_cn || obj.name);
module.exports = {
getLocalName,
};

View File

@ -159,6 +159,18 @@ For more tags, please go to [Search torrent](https://bangumi.moe/search/index)
<Route author="magic-akari" example="/bangumi/tv/calendar/today" path="/bangumi/tv/calendar/today" radar="1"/>
### 条目的通用路由格式 {#bangumi-fan-zu-ji-hua-tiao-mu-di-tong-yong-lu-you-ge-shi}
<Route author="JimenezLi" example="/bangumi/tv/subject/328609/ep/true" path="/bangumi/tv/subject/:id/:type?/:showOriginalName?" paramsDesc={['条目 id, 在条目页面的地址栏查看', '条目类型可选值为 `ep`, `comments`, `blogs`, `topics`默认为 `ep`', '显示番剧标题原名可选值 0/1/false/true默认为 false']}>
:::caution
此通用路由仅用于对路由参数的描述,具体信息请查看下方与条目相关的路由
:::
</Route>
### 条目的章节 {#bangumi-fan-zu-ji-hua-tiao-mu-di-zhang-jie}
<Route author="SettingDust" example="/bangumi/tv/subject/240038" path="/bangumi/tv/subject/:id" paramsDesc={['条目 id, 在条目页面的地址栏查看']} radar="1"/>