B站视频评论转图片下载
供 Bilibili UP 主与观众互动,将 Bilibili 视频评论区的评论转换成 PNG,应用场景如:呈现观众评论、评论互动、频道 Q&A,将会陆续完善其他功能,敬请期待!
目前功能特色:
- 无限滚动获取评论
- 瀑布流展示评论内容
- 自由选择需要下载的评论
- 支持视频、文字/图片动态评论
- ZIP 压缩包打包下载
功能演示
戳这里 demo 链接
- 视频评论
2. 动态评论
3. 打包下载
实现思路
1.视频评论数据获取
BiliBili于2020年3月将av号转化成为bv号,打开任一视频,可以看到url的格式如下:
https://www.bilibili.com/video/BV1NY411j7uP?spm_id_from=333.851.b_7265636f6d6d656e64.2
其中 BV1NY411j7uP 就是视频的bv号,但只有bv号还不能直接获取视频的评论数据,来看b站的评论接口:
https://api.bilibili.com/x/v2/reply?&type=&pn=&sort=&oid=
| 参数名 | 参数类型 | 参数说明 |
|---|---|---|
| pn | 字符串 | 0和1都表示第一页,2表示第二页 |
| ps | 字符串 | 默认每页获取20条数据 |
| sort | 字符串 | 排序方式 0:按时间排序 2:按热度排序 |
| oid | 字符串 | 视频的av号 |
| type | 字符串 | 评论类型 |
oid是后续获取评论数据的关键,oid其实就是原来的视频av号。
方法一: oid可以通过调用B站的视频信息接口获取:
https://api.bilibili.com/x/web-interface/view?bvid=视频BV号
接口返回的数据如下:
方法二: 也可以将bv号转为av号,相关的转换方法如下:
const table = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF";
const tr = {};
for (let i = 0; i < 58; i++) {
tr[table[i]] = i;
}
const s = [11, 10, 3, 8, 4, 6];
const xor = 177451812,
add = 8728348608;
function bv2av(x) {
let r = 0
for (let i = 0; i < 6; i++) {
r += tr[x[s[i]]] * Math.pow(58, i)
}
return (r - add) ^ xor
}
// 获取视频的aid
export function getAid(bvid) {
if (bvid.includes('BV')) {
return bv2av(bvid)
} else {
return bvid
}
}
评论接口返回数据示例:
2.动态评论数据获取
动态评论接口:
https://api.bilibili.com/x/v2/reply?&type=&pn=&sort=&oid=
b站的动态分为以下四种类型: 转发的动态、带图片、纯文字、其他站内分享。
动态类型查询接口:
https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/get_dynamic_detail?dynamic_id=动态id
动态类型接口返回示例:
不同评论类型对应的type值:
| type值 | 说明 |
|---|---|
| 1 | 有转发内容 |
| 2 | 带图片动态 |
| 4 | 纯文字动态 |
| 2048 | 其他站内分享 |
根据动态类型查询接口返回type,动态评论接口请求参数中的type和oid也需要对应变化:
| 动态接口type值 | 评论接口参数 |
|---|---|
| 2 | type的值为11,oid的值为动态类型接口返回示例图中的 rid |
| 1、4、2048 | type的值为17, oid的值和动态id一致,即dynamic_id |