From 3aa7b83346ec2f14c5b2ff9b46f258349f1911bd Mon Sep 17 00:00:00 2001 From: qixingchen Date: Sun, 13 May 2018 19:33:46 +0800 Subject: [PATCH] add bilibili live room --- README.md | 1 + docs/README.md | 12 +++++-- router.js | 1 + routes/bilibili/liveRoom.js | 63 +++++++++++++++++++++++++++++++++++++ views/rss.art | 2 +- 5 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 routes/bilibili/liveRoom.js diff --git a/README.md b/README.md index 850a1ac741..0b96948799 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ RSSHub 是一个轻量、易于扩展的 RSS 生成器,可以给任何奇奇 - 分区视频 - 视频评论 - link 公告 + - 直播开播 - 微博 - 博主 - 网易云音乐 diff --git a/docs/README.md b/docs/README.md index f8b2e0733c..20ab7b624f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -167,11 +167,19 @@ s ### link 公告 -举例: https://rss.now.sh/bilibili/link/news/live +举例: [https://rss.now.sh/bilibili/link/news/live](https://rss.now.sh/bilibili/link/news/live) 路由: `/bilibili/link/news/:product` -参数: product 公告分类 包括 直播:live 小视频:vc 相簿:wh +参数: product, 公告分类 包括 直播:live 小视频:vc 相簿:wh + +### 直播开播 + +举例: [https://rss.now.sh/bilibili/live/room/63489](https://rss.now.sh/bilibili/live/room/63489) + +路由: `bilibili/live/room/:roomID` + +参数: roomID, 房间号 可在直播间 URL 中找到,长短号均可 ## 微博 diff --git a/router.js b/router.js index 38ebb4059a..5bbea6ddcc 100644 --- a/router.js +++ b/router.js @@ -21,6 +21,7 @@ router.get('/bilibili/partion/:tid', require('./routes/bilibili/partion')); router.get('/bilibili/bangumi/:seasonid', require('./routes/bilibili/bangumi')); router.get('/bilibili/video/reply/:aid', require('./routes/bilibili/reply')); router.get('/bilibili/link/news/:product', require('./routes/bilibili/linkNews')); +router.get('/bilibili/live/room/:roomID', require('./routes/bilibili/liveRoom')); // // 微博 diff --git a/routes/bilibili/liveRoom.js b/routes/bilibili/liveRoom.js new file mode 100644 index 0000000000..3506335312 --- /dev/null +++ b/routes/bilibili/liveRoom.js @@ -0,0 +1,63 @@ +const axios = require('axios'); +const art = require('art-template'); +const path = require('path'); +const config = require('../../config'); + +module.exports = async (ctx) => { + let roomID = ctx.params.roomID; + + //短号查询长号 + if (parseInt(roomID, 10) < 10000) { + + const roomIDResponse = await axios({ + method: 'get', + url: `https://api.live.bilibili.com/room/v1/Room/room_init?id=${roomID}`, + headers: { + 'User-Agent': config.ua, + 'Referer': `https://live.bilibili.com/${roomID}` + } + }); + roomID = roomIDResponse.data.data.room_id; + } + + const nameResponse = await axios({ + method: 'get', + url: `https://api.live.bilibili.com/live_user/v1/UserInfo/get_anchor_in_room?roomid=${roomID}`, + headers: { + 'User-Agent': config.ua, + 'Referer': `https://live.bilibili.com/${roomID}` + } + }); + + const name = nameResponse.data.data.info.uname; + + const response = await axios({ + method: 'get', + url: `https://api.live.bilibili.com/room/v1/Room/get_info?room_id=${roomID}&from=room`, + headers: { + 'User-Agent': config.ua, + 'Referer': `https://live.bilibili.com/${roomID}` + } + }); + const data = response.data.data; + + let liveItem = []; + + if (data.live_status === 1) { + liveItem.push({ + title: data.title, + description: `${ data.title}
${data.description}`, + pubDate: new Date(data.live_time.replace(' ', 'T') + "+08:00").toUTCString(), + guid: `https://live.bilibili.com/${roomID} ${data.live_time}`, + link: `https://live.bilibili.com/${roomID}` + }); + } + + ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), { + title: `${name} 直播间开播状态`, + link: `https://live.bilibili.com/${roomID}`, + description: `${name} 直播间开播了`, + lastBuildDate: new Date().toUTCString(), + item: liveItem, + }); +}; \ No newline at end of file diff --git a/views/rss.art b/views/rss.art index e6a09f46d2..ade45a6248 100644 --- a/views/rss.art +++ b/views/rss.art @@ -21,7 +21,7 @@ <![CDATA[{{ $value.title }}]]> {{ if $value.pubDate }}{{ $value.pubDate }}{{ /if }} - {{ $value.link }} + {{ $value.guid || $value.link }} {{ $value.link }} {{ /each }}