From a627bd6eb6c7ee8dcacb58dc676faa980ef09030 Mon Sep 17 00:00:00 2001 From: shininome <67734180+shininome@users.noreply.github.com> Date: Tue, 16 Aug 2022 23:24:22 +0800 Subject: [PATCH] =?UTF-8?q?feat(route):=20=E5=A2=9E=E5=8A=A0bilibili?= =?UTF-8?q?=E5=90=88=E9=9B=86=E7=9A=84=E8=AE=A2=E9=98=85=20(#10470)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add files via upload * style: auto format * Add files via upload * Add files via upload * Add files via upload * Add files via upload * style: auto format * 这里是注释 * 更新collections.js为shininome * 增加collection * 修补分号 * 修补括号 我是傻子 * style: auto format Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- docs/social-media.md | 4 ++++ lib/v2/bilibili/collection.js | 34 ++++++++++++++++++++++++++++++++++ lib/v2/bilibili/maintainer.js | 1 + lib/v2/bilibili/radar.js | 9 +++++++++ lib/v2/bilibili/router.js | 1 + 5 files changed, 49 insertions(+) create mode 100644 lib/v2/bilibili/collection.js 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'));