diff --git a/docs/README.md b/docs/README.md index eef4ac897..faf2efb5b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -825,6 +825,8 @@ GitHub 官方也提供了一些 RSS: + + diff --git a/router.js b/router.js index 7e72dd8cc..83df06ea3 100644 --- a/router.js +++ b/router.js @@ -119,6 +119,7 @@ router.get('/bangumi/subject/:id/:type', require('./routes/bangumi/subject')); router.get('/bangumi/person/:id', require('./routes/bangumi/person')); router.get('/bangumi/topic/:id', require('./routes/bangumi/group/reply.js')); router.get('/bangumi/group/:id', require('./routes/bangumi/group/topic.js')); +router.get('/bangumi/subject/:id', require('./routes/bangumi/subject')); // 微博 router.get('/weibo/user/:uid', require('./routes/weibo/user')); diff --git a/routes/bangumi/subject/ep.js b/routes/bangumi/subject/ep.js new file mode 100644 index 000000000..3b6d16ffa --- /dev/null +++ b/routes/bangumi/subject/ep.js @@ -0,0 +1,26 @@ +const axios = require('../../../utils/axios'); +const DateTime = require('luxon').DateTime; + +module.exports = async (subjectID) => { + const url = `https://api.bgm.tv/subject/${subjectID}/ep`; + const epsInfo = (await axios.get(url)).data; + const activeEps = []; + + epsInfo.eps.map((e) => { + if (e.status !== 'NA') { + activeEps.push(e); + } + }); + + return { + title: `${epsInfo.name_cn}的Bangumi章节`, + link: `https://bgm.tv/subject/${subjectID}`, + item: activeEps.map((e) => ({ + title: e.name_cn, + description: e.desc, + pubDate: DateTime.fromFormat(e.airdate, 'yyyy-L-dd'), + guid: e.id, + link: e.url, + })), + }; +}; diff --git a/routes/bangumi/subject/index.js b/routes/bangumi/subject/index.js index 3b111e8d1..8eb61a088 100644 --- a/routes/bangumi/subject/index.js +++ b/routes/bangumi/subject/index.js @@ -1,22 +1,27 @@ const getComments = require('./comments.js'); const getFromAPI = require('./offcial-subject-api.js'); +const getEps = require('./ep.js'); + module.exports = async (ctx) => { const id = ctx.params.id; let response; - switch (ctx.params.type) { - case 'comments': - response = await getComments(id, Number(ctx.request.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}的订阅`); + if (ctx.params.type) { + switch (ctx.params.type) { + case 'comments': + response = await getComments(id, Number(ctx.request.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); } - ctx.state.data = response; };