XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/bilibili-API-collect

添加proto弹幕

dd512a7
setupdata <37763511+setupdata@users.noreply.github.com>
提交于

代码差异

1 个文件 +112 -0
Added danmaku/danmaku_proto.md +112 -0
@@ -0,0 +1,112 @@
1 # protobuf弹幕
2
3 2020年5月23日,哔哩哔哩网页端启用了新的默认弹幕api,网页端弹幕显示的上限变为原弹幕池上限的两倍。
4
5 哔哩哔哩的视频是以6分钟为一个单位加载的,新的api也是以6分钟为一个单位加载,即每次加载6分钟内的弹幕,如果打开右侧的弹幕列表就会一次加载完所有的弹幕。
6
7 ## 获取实时弹幕
8
9 > https://api.bilibili.com/x/v2/dm/web/seg.so
10
11 *请求方式:GET*
12
13 **url参数:**
14
15 | 参数名 | 类型 | 内容 | 必要性 | 备注 |
16 | ------------- | ---- | ------- | ------ | --------- |
17 | oid | num | 视频CID | 必要 | |
18 | pid | num | 视频AID | 非必要 | |
19 | type | num | 未知 | 必要 | 一般为1 |
20 | segment_index | num | 分段 | 必要 | 6分钟一段 |
21
22 **返回:**
23
24 返回二进制数据,需要自行解析。
25
26 只能返回普通和高级弹幕,代码弹幕请从弹幕云屏蔽中获取。
27
28 ## 弹幕格式
29
30 | 名称 | 含义 | 类型 | 备注 |
31 | -------- | -------------------- | ------ | ------------------------------------------------------------ |
32 | id | 弹幕dmID | int64 | 唯一 可用于操作参数 |
33 | progress | 视频内弹幕出现时间 | int32 | 毫秒 |
34 | mode | 弹幕类型 | int32 | 1 2 3普通弹幕<br />4底部<br />5顶部<br />6逆向<br />7高级弹幕<br />8代码弹幕<br />9BAS弹幕 |
35 | fontsize | 弹幕字号 | int32 | 18 小<br />25 标准<br />36 大 |
36 | color | 弹幕颜色 | uint32 | 十进制RGB888值 |
37 | midHash | 编码后的用户UID | string | 用于屏蔽用户和查看用户发送的所有弹幕 也可反查用户ID |
38 | content | 弹幕内容 | string | 字符串是编码格式为\\+三位数字,数字是八进制,为utf-8编码 |
39 | ctime | 弹幕发送时间 | int64 | 时间戳 |
40 | weight | 权重 | int32 | 云屏蔽等级 |
41 | action | 动作 | string | 未知 |
42 | pool | 弹幕池 | int32 | 0普通池<br />1字幕池<br />2特殊池(高级弹幕) |
43 | idStr | 弹幕dmID的字符串类型 | string | 唯一 可用于操作参数 |
44
45 **bilidm.proto**
46
47 ```protobuf
48 syntax = "proto3";
49
50 message DanmakuElem {
51 int64 id = 1;
52 int32 progress = 2;
53 int32 mode = 3;
54 int32 fontsize = 4;
55 uint32 color = 5;
56 string midHash = 6;
57 string content = 7;
58 int64 ctime = 8;
59 int32 weight = 9;
60 string action = 10;
61 int32 pool = 11;
62 string idStr = 12;
63 }
64
65 //弹幕接口返回的数据
66 message DmSegMobileReply {
67 repeated DanmakuElem elems = 1;
68 }
69 ```
70
71 **实例:**
72
73 获取炮姐弹幕,https://www.bilibili.com/video/BV1Js411o76u
74
75 编译proto文件
76
77 ```powershell
78 protoc.exe --python_out=. .\bilidm.proto
79 ```
80
81 生成文件:bilidm_pb2.py
82
83 main.py
84
85 ```python
86 import bilidm_pb2
87 import requests
88 url = 'https://api.bilibili.com/x/v2/dm/web/seg.so?type=1&oid=1176840&pid=810872&segment_index=1'
89 data = requests.get(url)
90 target = bilidm_pb2.DmSegMobileReply()
91 target.ParseFromString(data.content)
92 print(target.elems[0])
93 print(target.elems[0].content)
94 ```
95
96 输出:
97
98 ```shell
99 id: 682225690
100 progress: 44125
101 mode: 1
102 fontsize: 25
103 color: 16777215
104 midHash: "af4aa003"
105 content: "\346\210\221\347\202\256\350\277\230\350\203\275\345\206\215\346\210\230500\345\271\264\357\274\201\357\274\201\357\274\201\346\210\221\347\202\256\350\277\230\350\203\275\345\206\215\346\210\230500\345\271\264\357\274\201\357\274\201\357\274\201\346\210\221\347\202\256\350\277\230\350\203\275\345\206\215\346\210\230500\345\271\264\357\274\201\357\274\201\357\274\201\346\210\221\347\202\256\350\277\230\350\203\275\345\206\215\346\210\230500\345\271\264"
106 ctime: 1416323487
107 weight: 6
108 idStr: "682225690"
109
110 我炮还能再战500年!!!我炮还能再战500年!!!我炮还能再战500年!!!我炮还能再战500年
111 ```
112