feat(route): Bilibili UP 主所有视频 (#10352)
* feat(route): Bilibili UP 主所有视频 * feat(route): fix code review Co-authored-by: pull[bot] <39814207+pull[bot]@users.noreply.github.com>
This commit is contained in:
parent
d7871687a2
commit
640c3102cd
|
|
@ -36,6 +36,10 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
|
|||
|
||||
<Route author="DIYgod" example="/bilibili/user/video/2267573" path="/bilibili/user/video/:uid/:disableEmbed?" :paramsDesc="['用户 id, 可在 UP 主主页中找到', '默认为开启内嵌视频, 任意值为关闭']" anticrawler="1" radar="1" rssbud="1"/>
|
||||
|
||||
### UP 主所有视频
|
||||
|
||||
<Route author="CcccFz" example="/bilibili/user/video-all/436361287" path="/bilibili/user/video-all/:uid/:disableEmbed?" :paramsDesc="['用户 id, 可在 UP 主主页中找到', '默认为开启内嵌视频, 任意值为关闭']" anticrawler="1" radar="1" rssbud="1"/>
|
||||
|
||||
### UP 主专栏
|
||||
|
||||
<Route author="lengthmin" example="/bilibili/user/article/334958638" path="/bilibili/user/article/:uid" :paramsDesc="['用户 id, 可在 UP 主主页中找到']" anticrawler="1" radar="1" rssbud="1"/>
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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'));
|
||||
|
|
|
|||
|
|
@ -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 ? `<br><br>${utils.iframe(item.aid)}` : ''}<br><img src="${item.pic}">`,
|
||||
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,
|
||||
})),
|
||||
};
|
||||
};
|
||||
Loading…
Reference in New Issue