bilibili-API-collect/danmaku/danmaku_proto.md
2023-02-18 23:25:07 +08:00

4.9 KiB
Raw Blame History

protobuf弹幕

2020年5月23日哔哩哔哩网页端及移动端启用了新的默认弹幕api网页端弹幕显示的上限变为原弹幕池上限的两倍。

新的api是以6分钟为一个单位加载即每次加载6分钟内的弹幕


获取实时弹幕

https://api.bilibili.com/x/v2/dm/web/seg.so web端

https://api.bilibili.com/x/v2/dm/list/seg.so APP端

https://i0.hdslb.com/bfs/dm/{data}.bin BAS/代码弹幕专包)

请求方式GET

此接口与漫画弹幕相同

只能返回普通弹幕(pool=1 mode=1-7)和代码弹幕(pool=2 mode=8BAS弹幕pool=2 mode=9)请从弹幕元数据中获取

互动弹幕UP主头像弹幕、关联视频、内嵌关注按钮也不存在这个接口请从弹幕元数据中获取

仅获取6min的整数倍时间内的弹幕6min内最多弹幕数为6000条如第一包中弹幕progress值域为0-360000

url参数

参数名 类型 内容 必要性 备注
type num 弹幕类 必要 1视频弹幕
oid num 视频cid 必要
pid num 稿件avid 非必要
segment_index num 分包 必要 6分钟一包

proto回复

proto定义见bilibili.community.service.dm.v1.DmSegMobileReply

  • protogen.marcgravell: 在线编译protogen工具, 无需再安装本地编译器(生成文件需加后缀_pb2.py才可使用)

  • protobuf pip: 可一键安装的python的protogen解析库

消息DmSegMobileReply

名称 类型 含义 备注
elems repeated DanmakuElem 弹幕条目

消息DanmakuElem

名称 类型 含义 备注
id int64 弹幕dmid 唯一 可用于操作参数
progress int32 视频内弹幕出现时间 毫秒
mode int32 弹幕类型 1 2 3普通弹幕
4底部弹幕
5顶部弹幕
6逆向弹幕
7高级弹幕
8代码弹幕
9BAS弹幕仅限于特殊弹幕专包
fontsize int32 弹幕字号 18
25标准
36
color uint32 弹幕颜色 十进制RGB888值
midHash string 发送者mid的HASH 用于屏蔽用户和查看用户发送的所有弹幕 也可反查用户id
content string 弹幕内容 utf-8编码
ctime int64 弹幕发送时间 时间戳
weight int32 权重 用于智能屏蔽根据弹幕语义及长度通过AI识别得出
范围:[0-10]
值越大权重越高
action string 动作? 作用尚不明确
pool int32 弹幕池 0普通池
1字幕池
2特殊池代码/BAS弹幕
idStr string 弹幕dmid 字串形式
唯一 可用于操作参数

示例:

获取视频av810872(cid=1176840)炮姐的实时弹幕分包1

注:proto定义需要编译,bilibili.community.service.dm.v1.dm_pb2并非通过pypi安装

import requests
import google.protobuf.text_format as text_format
import bilibili.community.service.dm.v1.dm_pb2 as Danmaku

url = 'https://api.bilibili.com/x/v2/dm/web/seg.so'
params = {
    'type': 1,         # 弹幕类型
    'oid': 1176840,    # cid
    'pid': 810872,     # avid
    'segment_index': 1 # 弹幕分段
}
resp = requests.get(url, params)
data = resp.content

danmaku_seg = Danmaku.DmSegMobileReply()
danmaku_seg.ParseFromString(data)

print(text_format.MessageToString(danmaku_seg.elems[0], as_utf8=True))

输出:

id: 711923911
progress: 47880
mode: 1
fontsize: 18
color: 10092288
midHash: "59417e95"
content: "世界第一电击公主殿下,遇到你是我一生最美好的风景!吾炮赛高,永生不离!唯我超电磁炮永世长存! "
ctime: 1418799826
weight: 6
idStr: "711923911"
attr: 1