弹幕获取 Link to heading
首先通过视频aid获取cid Link to heading
视频的aid又称av号,是视频url中av后面的一串数字 https://www.bilibili.com/av67289687
67289687就是这个视频的aid
使用aid去请求这个api https://api.bilibili.com/x/web-interface/view?aid=${aid}
即可得到cid
通过cid获取视频弹幕信息 Link to heading
拿到cid以后请求这个api可以得到弹幕信息,xml格式。 https://api.bilibili.com/x/v1/dm/list.so?oid=${cid}
文件转码 Link to heading
应为返回的xml弹幕文件的content-encoding为deflate,需要用到zlib来解压。
解码用户id Link to heading
b站弹幕是这样的形式
<d p="53.87100,1,25,16777215,1562172618,0,13ba9291,18366041035898882">艾欧尼亚</d>
d标签值是弹幕内容,属性p里面依次是弹幕的出现时间,模式,字体大小,颜色,发送时间戳,弹幕池,用户Hash,数据库ID
其中要用的是用户Hash。用户Hash只是简单的把数字ID用ITU I.363.5算法进行了Hash。
有两种方法把用户Hash转成uid
- 使用第三方接口
https://biliquery.typcn.com/api/user/hash/用户Hash
- 自给自足
我这里有一个例子,借鉴了bilibili-helper
const Crc32Engine = require('./crc32');
const crcEngine = new Crc32Engine();
const hashToUid = hash => {
let extracted = /^b(\d+)$/.exec(hash);
let uids = [];
if (extracted && extracted[1]) {
uids = [extracted[1]];
} else {
uids = crcEngine.crack(hash);
}
return uids[uids.length-1];
};
module.exports = {
hashToUid
};
// crc32: https://github.com/blogwy/BilibiliVideoDownload/blob/master/utils/danmu/crc32.js
访问用户主页 Link to heading
https://space.bilibili.com/uid