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