diff --git a/docs/social-media.md b/docs/social-media.md index 34878be73..3b3633d5b 100644 --- a/docs/social-media.md +++ b/docs/social-media.md @@ -340,6 +340,10 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性 +### 合集更新 + + + ## Dev.to ### 最高职位 diff --git a/lib/v2/bilibili/collection.js b/lib/v2/bilibili/collection.js new file mode 100644 index 000000000..1744b2de0 --- /dev/null +++ b/lib/v2/bilibili/collection.js @@ -0,0 +1,34 @@ +const got = require('@/utils/got'); +const cache = require('./cache'); +const utils = require('./utils'); +const { parseDate } = require('@/utils/parse-date'); + +module.exports = async (ctx) => { + const uid = ctx.params.uid; + const sid = ctx.params.sid; + const disableEmbed = ctx.params.disableEmbed; + const [name, face] = await cache.getUsernameAndFaceFromUID(ctx, uid); + const response = await got({ + method: 'get', + url: `https://api.bilibili.com/x/polymer/space/seasons_archives_list?mid=${uid}&season_id=${sid}&sort_reverse=false&page_num=1&page_size=30`, + headers: { + Referer: `https://space.bilibili.com/${uid}/channel/collectiondetail?sid=${sid}`, + }, + }); + const data = response.data; + + ctx.state.data = { + title: `${name}的${data.data.meta.name}`, + link: `https://space.bilibili.com/${uid}/channel/collectiondetail?sid=${sid}`, + description: `${name} 的 bilibili 合集`, + logo: face, + icon: face, + item: data.data.archives.map((item) => ({ + title: item.title, + description: `${!disableEmbed ? `

${utils.iframe(item.aid)}` : ''}
`, + pubDate: parseDate(item.pubdate * 1000), + link: item.pubdate > utils.bvidTime && item.bvid ? `https://www.bilibili.com/video/${item.bvid}` : `https://www.bilibili.com/video/av${item.aid}`, + author: name, + })), + }; +}; diff --git a/lib/v2/bilibili/maintainer.js b/lib/v2/bilibili/maintainer.js index 30dfe7a4b..1c1679ccc 100644 --- a/lib/v2/bilibili/maintainer.js +++ b/lib/v2/bilibili/maintainer.js @@ -4,6 +4,7 @@ module.exports = { '/blackboard': ['Qixingchen'], '/bangumi/:seasonid': ['DIYgod'], '/bangumi/media/:mediaid': ['DIYgod'], + '/collection/:uid/:sid/:disableEmbed?': ['shininome'], '/fav/:uid/:fid/:disableEmbed?': ['Qixingchen'], '/followings/article/:uid': ['woshiluo'], '/followings/dynamic/:uid/:disableEmbed?': ['TigerCubDen'], diff --git a/lib/v2/bilibili/radar.js b/lib/v2/bilibili/radar.js index 0224460a6..8f630e46a 100644 --- a/lib/v2/bilibili/radar.js +++ b/lib/v2/bilibili/radar.js @@ -90,6 +90,15 @@ module.exports = { source: '/:uid', target: '/bilibili/user/bangumi/:uid', }, + { + title: '当前合集', + docs: 'https://docs.rsshub.app/social-media.html#bilibili', + source: '/:uid/channel/collectiondetail', + target: (params, url) => { + const sid = new URL(url).searchParams.get('sid'); + return `/bilibili/collection/:uid/${sid}`; + }, + }, ], manga: [ { diff --git a/lib/v2/bilibili/router.js b/lib/v2/bilibili/router.js index c0f09009f..f4b15bacc 100644 --- a/lib/v2/bilibili/router.js +++ b/lib/v2/bilibili/router.js @@ -4,6 +4,7 @@ module.exports = (router) => { router.get('/blackboard', require('./blackboard')); router.get('/bangumi/:seasonid', require('./bangumi')); // 弃用 router.get('/bangumi/media/:mediaid', require('./bangumi')); + router.get('/collection/:uid/:sid/:disableEmbed?', require('./collection')); router.get('/fav/:uid/:fid/:disableEmbed?', require('./fav')); router.get('/followings/article/:uid', require('./followings_article')); router.get('/followings/dynamic/:uid/:disableEmbed?', require('./followings_dynamic'));