diff --git a/docs/social-media.md b/docs/social-media.md
index 3afb8803d2..88a6a8d26a 100644
--- a/docs/social-media.md
+++ b/docs/social-media.md
@@ -46,7 +46,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
### UP 主频道
-
+
### UP 主默认收藏夹
diff --git a/lib/routes/bilibili/userChannel.js b/lib/routes/bilibili/userChannel.js
index 62df158e0b..a2a91d8799 100644
--- a/lib/routes/bilibili/userChannel.js
+++ b/lib/routes/bilibili/userChannel.js
@@ -3,17 +3,35 @@ const cache = require('./cache');
const utils = require('./utils');
module.exports = async (ctx) => {
- const cid = ctx.params.cid;
- const uid = ctx.params.uid;
+ const uid = Number.parseInt(ctx.params.uid);
+ const cid = Number.parseInt(ctx.params.cid);
const disableEmbed = ctx.params.disableEmbed;
+ // 获取频道的 ctype
+ const channelsLink = `https://api.bilibili.com/x/space/channel/list?mid=${uid}`;
+ const channelsResponse = await ctx.cache.tryGet(channelsLink, async () => {
+ const response = await got.get(channelsLink, {
+ headers: {
+ Referer: `https://space.bilibili.com/${uid}/`,
+ },
+ });
+ return response.data;
+ });
+ const channelInfo = channelsResponse.data.list.find((channel) => channel.cid === cid);
+ if (!channelInfo) {
+ throw new Error('无法获取该频道信息,请报告这个问题');
+ }
+ const ctype = channelInfo.is_live_playback ? 1 : 0;
+
+ const link = `https://space.bilibili.com/${uid}/detail?cid=${cid}&ctype=${ctype}`;
const userName = await cache.getUsernameFromUID(ctx, uid);
- const host = `https://api.bilibili.com/x/space/channel/video?mid=${uid}&cid=${cid}&pn=1&ps=10&order=0`;
+ const host = `https://api.bilibili.com/x/space/channel/video?mid=${uid}&cid=${cid}&pn=1&ps=10&order=0&ctype=${ctype}`;
+
const response = await got({
method: 'get',
url: host,
headers: {
- Referer: `https://space.bilibili.com/${uid}/`,
+ Referer: link,
},
});
@@ -31,15 +49,25 @@ module.exports = async (ctx) => {
ctx.state.data = {
title: `${userName} 的 bilibili 频道 ${channelName}`,
- link: `https://space.bilibili.com/${uid}/#/channel/detail?cid=${cid}`,
+ link,
description: data.name,
- item: data.archives.map((item) => ({
- title: item.title,
- description: `${item.desc}${!disableEmbed ? `
${utils.iframe(item.aid)}` : ''}
`,
- pubDate: new Date(item.pubdate * 1000).toUTCString(),
- link: item.pubdate > utils.bvidTime && item.bvid ? `https://www.bilibili.com/video/${item.bvid}` : `https://www.bilibili.com/video/av${item.aid}`,
- author: userName,
- })),
+ item: data.archives.map((item) => {
+ const descList = [];
+ if (item.desc) {
+ descList.push(item.desc);
+ }
+ if (!disableEmbed) {
+ descList.push(`${item.desc ? '
' : ''}${utils.iframe(item.aid)}`);
+ }
+ descList.push(`
`);
+ return {
+ title: item.title,
+ description: descList.join('
'),
+ pubDate: new Date(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: userName,
+ };
+ }),
};
};