添加 B站 标签/话题/频道 RSS (#477)

fix #265 

标签/话题/频道 是一个东西在B站不同页面上显示的不同名字(
This commit is contained in:
qixingchen 2018-08-16 16:54:20 +08:00 committed by DIYgod
parent c329f1234a
commit 616ff800e4
4 changed files with 76 additions and 3 deletions

View File

@ -42,6 +42,7 @@ RSSHub 是一个轻量、易于扩展的 RSS 生成器,可以给任何奇奇
- 会员购新品上架
- 会员购作品
- 排行榜
- 话题(频道/标签)
- 微博
- 博主
- 关键词

View File

@ -232,7 +232,7 @@ fid收藏夹 ID,可在收藏夹的 URL 中找到,默认收藏夹建议使用
参数: uid用户 id可在 UP 主主页中找到
### UP 主粉丝
### UP 主粉丝 <Author uid="Qixingchen"/>
举例: [https://rsshub.app/bilibili/user/followers/2267573](https://rsshub.app/bilibili/user/followers/2267573)
@ -240,7 +240,7 @@ fid收藏夹 ID,可在收藏夹的 URL 中找到,默认收藏夹建议使用
参数: uid用户 id可在 UP 主主页中找到
### UP 主关注用户
### UP 主关注用户 <Author uid="Qixingchen"/>
举例: [https://rsshub.app/bilibili/user/followings/2267573](https://rsshub.app/bilibili/user/followings/2267573)
@ -352,7 +352,7 @@ fid收藏夹 ID,可在收藏夹的 URL 中找到,默认收藏夹建议使用
| ---- | ------ | ------ |
| 11 | 185 | 187 |
### 视频评论
### 视频评论 <Author uid="Qixingchen"/>
举例: [https://rsshub.app/bilibili/video/reply/21669336](https://rsshub.app/bilibili/video/reply/21669336)
@ -442,6 +442,14 @@ rid: 排行榜分区 id默认 0
| ---- | ---- | -------- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| 0 | 1 | 168 | 3 | 129 | 4 | 36 | 160 | 119 | 155 | 5 | 181 |
### 话题(频道/标签) <Author uid="Qixingchen"/>
举例: [https://rsshub.app/bilibili/topic/2233](https://rsshub.app/bilibili/topic/2233)
路由: `/bilibili/topic/:topic`
参数: topic 话题名(又称频道名或标签) 例如 2233 或 COSPLAY
## bangumi
### 放送列表 <Author uid="hufan-akari"/>

View File

@ -105,6 +105,7 @@ router.get('/bilibili/mall/new', require('./routes/bilibili/mallNew'));
router.get('/bilibili/mall/ip/:id', require('./routes/bilibili/mallIP'));
router.get('/bilibili/ranking/:rid?/:day?', require('./routes/bilibili/ranking'));
router.get('/bilibili/channel/:uid/:cid', require('./routes/bilibili/userChannel'));
router.get('/bilibili/topic/:topic', require('./routes/bilibili/topic'));
// bangumi
router.get('/bangumi/calendar/today', require('./routes/bangumi/calendar/today'));

63
routes/bilibili/topic.js Normal file
View File

@ -0,0 +1,63 @@
const axios = require('../../utils/axios');
const JSONbig = require('json-bigint');
const config = require('../../config');
module.exports = async (ctx) => {
const topic = ctx.params.topic;
const urlEncodedTopic = encodeURIComponent(topic);
const response = await axios({
method: 'get',
url: `https://api.vc.bilibili.com/topic_svr/v1/topic_svr/topic_new?topic_name=${urlEncodedTopic}`,
headers: {
'User-Agent': config.ua,
Referer: `https://www.bilibili.com/tag/${urlEncodedTopic}/feed`,
},
transformResponse: [(data) => data],
});
const data = JSONbig.parse(response.data).data.cards;
ctx.state.data = {
title: `${topic} 的全部话题`,
link: `https://www.bilibili.com/tag/${topic}/feed`,
description: `https://www.bilibili.com/tag/${topic}/feed`,
item: data.map((item) => {
const parsed = JSONbig.parse(item.card);
const data = parsed.item || parsed;
// img
let imgHTML = '';
if (data.pictures) {
for (let i = 0; i < data.pictures.length; i++) {
imgHTML += `<img referrerpolicy="no-referrer" src="${data.pictures[i].img_src}">`;
}
}
if (data.pic) {
imgHTML += `<img referrerpolicy="no-referrer" src="${data.pic}">`;
}
// link
let link = '';
if (data.dynamic_id) {
link = `https://t.bilibili.com/${data.dynamic_id}`;
} else if (data.aid) {
link = `https://www.bilibili.com/video/av${data.aid}`;
} else if (data.video_playurl) {
link = `https://vc.bilibili.com/video/${data.id}`;
} else if (data.id) {
link = `https://h.bilibili.com/${data.id}`;
} else if (data.rp_id && item.desc && item.desc.dynamic_id) {
link = `https://t.bilibili.com/${item.desc.dynamic_id}`;
} else if (data.sketch && data.sketch.sketch_id && item.desc && item.desc.dynamic_id) {
link = `https://t.bilibili.com/${item.desc.dynamic_id}`;
}
return {
title: data.title || data.description || data.content || (data.vest && data.vest.content),
description: `${data.desc || data.description || data.content || data.summary || (data.vest && data.vest.content) + (data.sketch && data.sketch.title)}${imgHTML} `,
pubDate: new Date(item.desc.timestamp * 1000).toUTCString(),
link: link,
};
}),
};
};