B站的api调用是比较繁琐的,想通过Vercel简化两个api的调用:
想要简化成:
- 弹幕:
/danmaku/?oid=<视频CID>
- 视频播放URL:
/video/<视频AV号或BV号>/playurl
Vercel入门
- 初始化一个项目
npm init
- 创建一个文件夹用作api的根目录,我这里就直接新建为
api
文件夹
- 在该文件夹下创建
index.js
,这样之后可以使用xxx.vercel.app/api
直接访问到
如果是其他名字就需要访问xxx.vercel.app/api/文件名
index.js
文件内容的一个简单演示,标准的 HTTP Handler 的语法:
如果想返回json格式,可以使用res.json()
- 配置
Rewrites/Redirects
将api文件夹作为根目录:
在项目根目录创建一个 vercel.json
配置如下
实现
目录结构
vercel.json
获取实时protobuf弹幕
B站弹幕使用了protobuf(一种定义消息格式的语法,它允许定义字段类型、顺序和规则)
-
用python处理是比较简单的,所以danmaku API我决定使用python,这里用到了3个依赖
-
下载B站弹幕的.proto
文件,放入/api/danmaku
中:
-
下载protobuf对应版本的编译器(我这里是5.27.2)
https://github.com/protocolbuffers/protobuf/releases/tag/v27.2
然后编译dm.proto
文件
我们就得到一个dm_pb2.py
文件
-
编写index.py
,代理https://api.bilibili.com/x/v2/dm/web/seg.so
的请求并响应出json格式
-
大功告成!
获取视频流URL
package.json添加如下配置,方便使用import
export
添加axios依赖
剩下的只需要一个js文件即可实现