返回提交历史
Modified
README.md
+3
-1
Modified
danmaku/action.md
+4
-4
Modified
danmaku/danmaku_proto.md
+73
-49
Modified
danmaku/danmaku_xml.md
+14
-14
XFEstudio/bilibili-API-collect
修改protobuf弹幕 并勘误
cc590a3
代码差异
4 个文件
+94
-68
@@ -68,13 +68,15 @@
68
68
- 状态数
69
69
- 操作
70
70
- [视频弹幕](danmaku)
71
- [protobuf实时弹幕](danmaku/danmaku_proto.md)
71
- [protobuf实时弹幕](danmaku/danmaku_proto.md)×
72
- protobuf云推荐弹幕
72
73
- [xml实时弹幕](danmaku/danmaku_xml.md)√
73
74
- [xml历史弹幕](danmaku/history.md)√
74
75
- [快照](danmaku/snapshot.md)√
75
76
- [弹幕操作](danmaku/action.md)×
76
77
- 高级弹幕
77
78
- 屏蔽管理
79
- 智能防挡弹幕
78
80
- [专栏](article)
79
81
- 分区
80
82
- [基本信息](article/info.md)×
@@ -18,10 +18,10 @@
18
18
| bvid | str | 视频bvID | 必要(可选) | avID与bvID任选一个 |
19
19
| aid | num | 视频avID | 必要(可选) | avID与bvID任选一个 |
20
20
| progress | num | 弹幕出现在视频内的时间 | 非必要 | 单位为毫秒<br />默认为0 |
21
| color | num | 弹幕颜色设置 | 非必要 | 详见[「弹幕」中的属性 p](danmaku.md#属性 p)<br />默认为16777215(#FFFFFF)白色 |
22
| fontsize | num | 弹幕字号设置 | 非必要 | 详见[「弹幕」中的属性 p](danmaku.md#属性 p)<br />默认为25 |
23
| pool | num | 弹幕池选择 | 非必要 | 0:普通弹幕<br />1:字幕弹幕<br />2:BAS弹幕<br />默认为0 |
24
| mode | num | 弹幕类型选择 | 必要 | 1:普通<br />4:底部<br />5:顶部<br />7:高级<br />9:BAS(`pool`必须为2) |
21
| color | num | 弹幕颜色设置 | 非必要 | 十进制RGB888值<br />默认为16777215(#FFFFFF)白色 |
22
| fontsize | num | 弹幕字号设置 | 非必要 | 默认为25 |
23
| pool | num | 弹幕池选择 | 非必要 | 0:普通池<br />1:字幕池<br />2:特殊池(代码/BAS弹幕)<br />默认为0 |
24
| mode | num | 弹幕类型选择 | 必要 | 1:普通弹幕<br />4:底部弹幕<br />5:顶部弹幕<br />7:高级弹幕<br />9:BAS弹幕(`pool`必须为2) |
25
25
| rnd | num | 16位10进制随机数 | 非必要 | **若无此项,则发送弹幕冷却时间限制为90s**<br />若有此项,则发送弹幕冷却时间限制为5s |
26
26
| csrf | str | CSRF Token(位于cookie) | 必要 | |
27
27
@@ -1,46 +1,54 @@
1
1
# protobuf弹幕
2
2
3
2020年5月23日,哔哩哔哩网页端启用了新的默认弹幕api,网页端弹幕显示的上限变为原弹幕池上限的两倍。
3
2020年5月23日,哔哩哔哩网页端及移动端启用了新的默认弹幕api,网页端弹幕显示的上限变为原弹幕池上限的两倍。
4
4
5
哔哩哔哩的视频是以6分钟为一个单位加载的,新的api也是以6分钟为一个单位加载,即每次加载6分钟内的弹幕,如果打开右侧的弹幕列表就会一次加载完所有的弹幕。
5
新的api是以6分钟为一个单位加载,即每次加载6分钟内的弹幕
6
6
7
7
## 获取实时弹幕
8
8
9
> https://api.bilibili.com/x/v2/dm/web/seg.so
9
> http://api.bilibili.com/x/v2/dm/web/seg.so
10
>
11
> http://api.bilibili.com/x/v2/dm/list/seg.so
10
12
11
*请求方式:GET*
13
*请求方式:GET*
14
15
此接口与漫画弹幕相同
16
17
只能返回普通和高级弹幕,代码(BAS)弹幕请从云推荐弹幕中获取
18
19
**注:仅获取6min的整数倍时间内的弹幕(如第一包中弹幕`progress`值域为0-360000)**
12
20
13
21
**url参数:**
14
22
15
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
16
| ------------- | ---- | ------- | ------ | --------- |
17
| oid | num | 视频CID | 必要 | |
18
| pid | num | 视频AID | 非必要 | |
19
| type | num | 未知 | 必要 | 一般为1 |
20
| segment_index | num | 分段 | 必要 | 6分钟一段 |
23
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
24
| ------------- | ---- | -------- | ------ | ----------- |
25
| type | num | 弹幕分类 | 必要 | 1:视频弹幕 |
26
| oid | num | 视频CID | 必要 | |
27
| pid | num | 视频avID | 非必要 | |
28
| segment_index | num | 分包 | 必要 | 6分钟一包 |
29
30
**回复:**
21
31
22
**返回:**
32
返回二进制数据,需要自行解析
23
33
24
返回二进制数据,需要自行解析。
34
**示例:**
35
36
获取视频`av810872(CID=1176840)`的实时弹幕分段`1`
37
38
```shell
39
curl -G 'http://api.bilibili.com/x/v2/dm/web/seg.so'\
40
--data-urlencode 'type=1'\
41
--data-urlencode 'oid=1176840'\
42
--data-urlencode 'pid=810872'\
43
--data-urlencode 'segment_index=1'\
44
-o 'danmaku.bin'
45
```
25
46
26
只能返回普通和高级弹幕,代码弹幕请从弹幕云屏蔽中获取。
47
响应正文为protubuf二进制数据
27
48
28
49
## 弹幕格式
29
50
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 | 唯一 可用于操作参数 |
51
protobuf结构体:
44
52
45
53
**bilidm.proto**
46
54
@@ -48,44 +56,60 @@
48
56
syntax = "proto3";
49
57
50
58
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;
59
int64 id = 1; //弹幕dmID
60
int32 progress = 2; //出现时间
61
int32 mode = 3; //弹幕类型
62
int32 fontsize = 4; //文字大小
63
uint32 color = 5; //弹幕颜色
64
string midHash = 6; //发送者UID的HASH
65
string content = 7; //弹幕内容
66
int64 ctime = 8; //发送时间
67
int32 weight = 9; //权重
68
string action = 10; //动作
69
int32 pool = 11; //弹幕池
70
string idStr = 12; //弹幕dmID
63
71
}
64
72
65
//弹幕接口返回的数据
66
73
message DmSegMobileReply {
67
74
repeated DanmakuElem elems = 1;
68
75
}
69
76
```
70
77
71
**实例:**
78
| 名称 | 含义 | 类型 | 备注 |
79
| -------- | -------------------- | ------ | ------------------------------------------------------------ |
80
| id | 弹幕dmID | int64 | 唯一 可用于操作参数 |
81
| progress | 视频内弹幕出现时间 | int32 | 毫秒 |
82
| mode | 弹幕类型 | int32 | 1 2 3:普通弹幕<br />4:底部弹幕<br />5:顶部弹幕<br />6:逆向弹幕<br />7:高级弹幕<br />8:代码弹幕<br />9:BAS弹幕 |
83
| fontsize | 弹幕字号 | int32 | 18:小<br />25:标准<br />36:大 |
84
| color | 弹幕颜色 | uint32 | 十进制RGB888值 |
85
| midHash | 发送者UID的HASH | string | 用于屏蔽用户和查看用户发送的所有弹幕 也可反查用户ID |
86
| content | 弹幕内容 | string | utf-8编码 |
87
| ctime | 弹幕发送时间 | int64 | 时间戳 |
88
| weight | 权重 | int32 | 用于智能屏蔽级别 |
89
| action | 动作 | string | 未知 |
90
| pool | 弹幕池 | int32 | 0:普通池<br />1:字幕池<br />2:特殊池(代码/BAS弹幕) |
91
| idStr | 弹幕dmID的字符串类型 | string | 唯一 可用于操作参数 |
92
93
## 实例
72
94
73
获取炮姐弹幕,https://www.bilibili.com/video/BV1Js411o76u
95
获取炮姐弹幕第1包,[BV1Js411o76u](https://www.bilibili.com/video/BV1Js411o76u)
74
96
75
编译proto文件
97
编译proto结构文件
76
98
77
```powershell
78
protoc.exe --python_out=. .\bilidm.proto
99
```shell
100
protoc --python_out=. bilidm.proto
79
101
```
80
102
81
生成文件:bilidm_pb2.py
103
生成bilidm_pb2.py
82
104
83
main.py
105
---
106
107
以下为python测试代码
84
108
85
109
```python
86
110
import bilidm_pb2
87
111
import requests
88
url = 'https://api.bilibili.com/x/v2/dm/web/seg.so?type=1&oid=1176840&pid=810872&segment_index=1'
112
url = 'http://api.bilibili.com/x/v2/dm/web/seg.so?type=1&oid=1176840&pid=810872&segment_index=1'
89
113
data = requests.get(url)
90
114
target = bilidm_pb2.DmSegMobileReply()
91
115
target.ParseFromString(data.content)
@@ -95,7 +119,7 @@ print(target.elems[0].content)
95
119
96
120
输出:
97
121
98
```shell
122
```
99
123
id: 682225690
100
124
progress: 44125
101
125
mode: 1
@@ -6,7 +6,7 @@
6
6
7
7
> http://api.bilibili.com/x/v1/dm/list.so
8
8
9
*请求方式:GET*
9
*请求方式:GET*
10
10
11
11
**使用deflate压缩,注意解码**
12
12
@@ -28,7 +28,7 @@ curl -G 'http://api.bilibili.com/x/v1/dm/list.so'\
28
28
29
29
> http://comment.bilibili.com/{cid}.xml
30
30
31
*请求方式:GET*
31
*请求方式:GET*
32
32
33
33
效果与前者相同
34
34
@@ -96,18 +96,18 @@ curl 'http://comment.bilibili.com/144541892.xml'
96
96
97
97
### 属性 p
98
98
99
字符串内每项用`,`分隔
100
101
| 项 | 含义 | 类型 | 备注 |
102
| ---- | ------------------ | ----- | ------------------------------------------------------------ |
103
| 0 | 视频内弹幕出现时间 | float | 秒 |
104
| 1 | 弹幕类型 | int | 1 2 3普通弹幕<br />4底部<br />5顶部<br />6逆向<br />7精准定位<br />8代码弹幕<br />9BAS弹幕 |
105
| 2 | 弹幕字号 | int | 18 小<br />25 标准<br />36 大 |
106
| 3 | 弹幕颜色 | int | 十进制RGB888值 |
107
| 4 | 弹幕发送时间 | int | 时间戳 |
108
| 5 | 弹幕池类型 | int | 0普通池<br />1字幕池<br />2特殊池(高级弹幕) |
109
| 6 | 编码后的用户UID | HEX | 用于屏蔽用户和查看用户发送的所有弹幕 也可反查用户ID |
110
| 7 | 弹幕dmID | int | 唯一 可用于操作参数 |
99
字符串内每项用逗号`,`分隔
100
101
| 项 | 含义 | 类型 | 备注 |
102
| ---- | ------------------ | ------ | ------------------------------------------------------------ |
103
| 0 | 视频内弹幕出现时间 | float | 秒 |
104
| 1 | 弹幕类型 | int32 | 1 2 3:普通弹幕<br />4:底部弹幕<br />5:顶部弹幕<br />6:逆向弹幕<br />7:高级弹幕<br />8:代码弹幕<br />9:BAS弹幕(`pool`必须为2) |
105
| 2 | 弹幕字号 | int32 | 18:小<br />25:标准<br />36:大 |
106
| 3 | 弹幕颜色 | int32 | 十进制RGB888值 |
107
| 4 | 弹幕发送时间 | int32 | 时间戳 |
108
| 5 | 弹幕池类型 | int32 | 0:普通池<br />1:字幕池<br />2:特殊池(代码/BAS弹幕) |
109
| 6 | 发送者UID的HASH | string | 用于屏蔽用户和查看用户发送的所有弹幕 也可反查用户ID |
110
| 7 | 弹幕dmID | int64 | 唯一 可用于操作参数 |
111
111
112
112
```xml
113
113
<d p="490.19100,1,25,16777215,1584268892,0,a16fe0dd,29950852386521095">从结尾回来看这里,更感动了!</d>