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

XFEstudio/bilibili-API-collect

修改protobuf弹幕 并勘误

cc590a3
SocialSisterYi <45892418+SocialSisterYi@users.noreply.github.com>
提交于

代码差异

4 个文件 +94 -68
Modified README.md +3 -1
@@ -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)×
Modified danmaku/action.md +4 -4
@@ -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
Modified danmaku/danmaku_proto.md +73 -49
@@ -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
Modified danmaku/danmaku_xml.md +14 -14
@@ -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>