add: bilibili歌单 (#1273)

close #847
This commit is contained in:
Chenyang Shi
2018-12-13 11:23:08 +08:00
committed by DIYgod
parent f1d9029dda
commit 15fed45858
3 changed files with 45 additions and 0 deletions

View File

@@ -319,6 +319,8 @@ RSSHub 提供下列 API 接口:
<route name="话题(频道/标签)" author="Qixingchen" example="/bilibili/topic/2233" path="/bilibili/topic/2233" :paramsDesc="['话题名(又称频道名或标签) 例如 2233 或 COSPLAY']"/>
<route name="歌单" author="LogicJake" example="/bilibili/audio/10624" path="/bilibili/audio/10624" :paramsDesc="['歌单 id, 可在歌单页 URL 中找到']/>
### 微博
<route name="博主方案1" author="DIYgod" example="/weibo/user/1195230310" path="/weibo/user/:uid" :paramsDesc="['用户 id, 博主主页打开控制台执行 `$CONFIG.oid` 获取']"/>

View File

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

42
routes/bilibili/audio.js Normal file
View File

@@ -0,0 +1,42 @@
const axios = require('../../utils/axios');
const audio = 'https://www.bilibili.com/audio/au';
module.exports = async (ctx) => {
const id = Number.parseInt(ctx.params.id);
const link = `https://www.bilibili.com/audio/am${id}`;
const apiMenuUrl = `https://www.bilibili.com/audio/music-service-c/web/menu/info?sid=${id}`;
const menuResponse = await axios.get(apiMenuUrl);
const menuData = menuResponse.data.data;
const introduction = menuData.intro;
const title = menuData.title;
const apiUrl = `https://www.bilibili.com/audio/music-service-c/web/song/of-menu?sid=${id}&pn=1&ps=100`;
const response = await axios.get(apiUrl);
const data = response.data.data.data;
const out = data.map((item) => {
const title = item.title;
const link = audio + item.statistic.sid;
const author = item.author;
const description = item.intro + `<br><img src="${item.cover}">`;
const single = {
title: title,
link: link,
author: author,
pubDate: new Date(item.passtime * 1000),
description: description,
};
return single;
});
ctx.state.data = {
title: title,
link: link,
description: introduction,
item: out,
};
};