diff --git a/docs/social-media.md b/docs/social-media.md
index 3411606d5..87a1918c7 100644
--- a/docs/social-media.md
+++ b/docs/social-media.md
@@ -36,6 +36,10 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
+### UP 主所有视频
+
+
+
### UP 主专栏
diff --git a/lib/v2/bilibili/radar.js b/lib/v2/bilibili/radar.js
index 81ec38fe4..0224460a6 100644
--- a/lib/v2/bilibili/radar.js
+++ b/lib/v2/bilibili/radar.js
@@ -48,6 +48,12 @@ module.exports = {
source: '/:uid',
target: '/bilibili/user/video/:uid',
},
+ {
+ title: 'UP 主所有视频',
+ docs: 'https://docs.rsshub.app/social-media.html#bilibili',
+ source: '/:uid',
+ target: '/bilibili/user/video-all/:uid',
+ },
{
title: 'UP 主专栏',
docs: 'https://docs.rsshub.app/social-media.html#bilibili',
diff --git a/lib/v2/bilibili/router.js b/lib/v2/bilibili/router.js
index eb041593a..c0f09009f 100644
--- a/lib/v2/bilibili/router.js
+++ b/lib/v2/bilibili/router.js
@@ -32,6 +32,7 @@ module.exports = (router) => {
router.get('/user/followers/:uid', require('./followers'));
router.get('/user/followings/:uid', require('./followings'));
router.get('/user/video/:uid/:disableEmbed?', require('./video'));
+ router.get('/user/video-all/:uid/:disableEmbed?', require('./video-all'));
router.get('/video/danmaku/:bvid/:pid?', require('./danmaku'));
router.get('/video/page/:bvid/:disableEmbed?', require('./page'));
router.get('/video/reply/:bvid', require('./reply'));
diff --git a/lib/v2/bilibili/video-all.js b/lib/v2/bilibili/video-all.js
new file mode 100644
index 000000000..f025119ed
--- /dev/null
+++ b/lib/v2/bilibili/video-all.js
@@ -0,0 +1,52 @@
+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 disableEmbed = ctx.params.disableEmbed;
+ const [name, face] = await cache.getUsernameAndFaceFromUID(ctx, uid);
+
+ const response = await got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=1&keyword=&order=pubdate&jsonp=jsonp`, {
+ headers: {
+ Referer: `https://space.bilibili.com/${uid}/`,
+ },
+ });
+
+ const vlist = [...response.data.data.list.vlist];
+ const pageTotal = Math.ceil(response.data.data.page.count / response.data.data.page.ps);
+ const promises = [];
+
+ if (pageTotal > 1) {
+ for (let i = 2; i <= pageTotal; i++) {
+ promises.push(
+ got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=${i}&keyword=&order=pubdate&jsonp=jsonp`, {
+ headers: {
+ Referer: `https://space.bilibili.com/${uid}/`,
+ },
+ })
+ );
+ }
+ const rets = await Promise.all(promises);
+ rets.forEach((ret) => {
+ vlist.push(...ret.data.data.list.vlist);
+ });
+ }
+
+ ctx.state.data = {
+ title: name,
+ link: `https://space.bilibili.com/${uid}/video`,
+ description: `${name} 的 bilibili 所有视频`,
+ logo: face,
+ icon: face,
+ item: vlist.map((item) => ({
+ title: item.title,
+ description: `${item.description}${!disableEmbed ? `
${utils.iframe(item.aid)}` : ''}
`,
+ pubDate: parseDate(item.created, 'X'),
+ link: item.created > utils.bvidTime && item.bvid ? `https://www.bilibili.com/video/${item.bvid}` : `https://www.bilibili.com/video/av${item.aid}`,
+ author: name,
+ comments: item.comment,
+ })),
+ };
+};