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

XFEstudio/bilibili-API-collect

添加视频实时广播相关

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

代码差异

4 个文件 +569 -0
Modified .gitignore +1 -0
@@ -5,3 +5,4 @@ live/info_flow.md
5 5 bangumi/info.md
6 6 bangumi/ststus_number.md
7 7 live/live_manage.md
8 danmaku/action.md
Added broadcast/general.md +167 -0
@@ -0,0 +1,167 @@
1 # 全站广播
2
3 ## 获取广播服务器地址
4
5 > http://api.bilibili.com/x/web-interface/broadcast/servers
6
7 *方式:GET*
8
9 **参数:**
10
11 | 参数名 | 类型 | 内容 | 必要性 | 备注 |
12 | -------- | ---- | -------- | ------ | --------------------------------- |
13 | platform | url | 平台选择 | 必要 | 为web时输出域名<br />其他时输出ip |
14
15 **json回复:**
16
17 根对象:
18
19 | 字段 | 类型 | 内容 | 备注 |
20 | ------- | ---- | -------- | --------------------------- |
21 | code | num | 返回值 | 0:成功<br />-400:请求错误 |
22 | message | str | 错误信息 | 默认为0 |
23 | ttl | num | 1 | 作用尚不明确 |
24 | data | obj | 信息本体 | |
25
26 `data`对象:
27
28 | 字段 | 类型 | 内容 | 备注 |
29 | ------------- | ------ | ------------------ | ---- |
30 | domain | str | 广播服务器url | |
31 | tcp_port | num | tcp端口 | |
32 | ws_port | num | websocket端口 | |
33 | wss_port | num | websocket ssl端口 | |
34 | heartbeat | num | 最大心跳包间隔时间 | |
35 | nodes | arrary | 服务节点地址列表 | |
36 | backoff | obj | ??? | |
37 | heartbeat_max | num | ??? | |
38
39 `data`中的`nodes`数组:
40
41 | 项 | 类型 | 内容 | 备注 |
42 | ---- | ---- | ------------- | ---- |
43 | 0 | str | 服务节点1 | |
44 | n | str | 服务节点(n+1) | |
45 | …… | str | …… | |
46
47 `data`中的`backoff`对象:
48
49 | 字段 | 类型 | 内容 | 备注 |
50 | ---------- | ---- | ------ | ---- |
51 | max_delay | num | ??? | |
52 | base_delay | num | ??? | |
53 | factor | num | ??? | |
54 | jitter | num | ??? | |
55
56 示例:
57
58 当`platform`=`web`时,不显示节点ip
59
60 http://api.bilibili.com/x/web-interface/broadcast/servers?platform=web
61
62 ```json
63 {
64 "code": 0,
65 "message": "0",
66 "ttl": 1,
67 "data": {
68 "domain": "broadcast.chat.bilibili.com",
69 "tcp_port": 7821,
70 "ws_port": 7822,
71 "wss_port": 7823,
72 "heartbeat": 30,
73 "nodes": ["broadcast.chat.bilibili.com"],
74 "backoff": {
75 "max_delay": 300,
76 "base_delay": 3,
77 "factor": 1.8,
78 "jitter": 0.3
79 },
80 "heartbeat_max": 3
81 }
82 }
83 ```
84
85 当`platform`=其他时,显示节点ip
86
87 http://api.bilibili.com/x/web-interface/broadcast/servers?platform=1
88
89 ```json
90 {
91 "code": 0,
92 "message": "0",
93 "ttl": 1,
94 "data": {
95 "domain": "broadcast.chat.bilibili.com",
96 "tcp_port": 7821,
97 "ws_port": 7822,
98 "wss_port": 7823,
99 "heartbeat": 30,
100 "nodes": ["134.175.207.130", "120.92.150.90", "120.92.150.212", "192.144.173.136", "154.8.217.108"],
101 "backoff": {
102 "max_delay": 300,
103 "base_delay": 3,
104 "factor": 1.8,
105 "jitter": 0.3
106 },
107 "heartbeat_max": 3
108 }
109 }
110 ```
111
112
113
114 ## 服务器数据包
115
116 连接服务器分为三种方式,分别是ws wss tcp,数据包分为上行和下行
117
118 单个数据包分为头部和正文
119
120 其中上行的有认证包 心跳包,下行的有认证包回复 心跳包回复 普通包
121
122 建立连接后超过30s内未发送认证包,或握手后30s内未发送心跳包,或发送了错误的认证包,都会被强制断开连接
123
124 操作流程:
125
126 1.发送认证包,等待接收认证回复
127
128 2.确认握手成功后,每30s内发送心跳包,并立即接收心跳包回复
129
130 3.空闲时间接收普通包
131
132 ### 数据包结构
133
134 头部通用于上行和下行数据包
135
136 头部格式:
137
138 | 偏移量 | 长度(字节) | 类型 | 含义 |
139 | ------ | ------------ | ------ | ---------------------------------------------------- |
140 | 0x00 | 4 | uint32 | 封包总大小(头部大小+正文大小) |
141 | 0x04 | 2 | uint16 | 头部大小(一般为0x0012,18字节) |
142 | 0x06 | 2 | uint16 | 协议版本,可取常数1 |
143 | 0x08 | 4 | uint32 | 操作码(包类型)<br />**见下表** |
144 | 0x0C | 4 | uint32 | sequence(请求次数),可取常数1<br />对于普通包恒为0 |
145 | 0x10 | 2 | uint16 | 保留,一般为0 |
146
147 操作码:
148
149 | 代码 | 含义 |
150 | ---------- | ---------- |
151 | 0x00000002 | 心跳包 |
152 | 0x00000003 | 心跳包回复 |
153 | 0x000003E8 | 普通包 |
154 | 0x00000007 | 认证包 |
155 | 0x00000008 | 认证包回复 |
156
157 **示例:**
158
159 以下为一个认证包示例,正文为文本`test`
160
161 ```
162 00000000 00 00 00 16 00 12 00 01 00 00 00 07 00 00 00 01 |................|
163 00000010 00 00 74 65 73 74 |..test|
164 ```
165
166
167
Added broadcast/video_room.md +152 -0
@@ -0,0 +1,152 @@
1 # 视频实时信息
2
3 ## 认证包(上行)
4
5 **正文内容json:**
6
7 根对象:
8
9 | 字段 | 类型 | 内容 | 备注 |
10 | -------- | ------ | -------- | ------------------------------ |
11 | room_id | str | 目标视频 | `video://{视频avID}/{视频CID}` |
12 | platform | str | 平台标识 | 默认为`web` |
13 | accepts | arrary | 操作标识 | |
14
15 `arrary`数组:
16
17 | 项 | 类型 | 内容 | 备注 |
18 | ---- | ---- | ---- | ---- |
19 | 0 | num | 1000 | |
20
21 **示例:**
22
23 发送视频`av706`(1P的CID为` 3724723 `)的认证包
24
25 ```
26 00000000 00 00 00 55 00 12 00 01 00 00 00 07 00 00 00 01 |...U............|
27 00000010 00 00 7b 22 72 6f 6f 6d 5f 69 64 22 3a 22 76 69 |..{"room_id":"vi|
28 00000020 64 65 6f 3a 2f 2f 37 30 36 2f 33 37 32 34 37 32 |deo://706/372472|
29 00000030 33 22 2c 22 70 6c 61 74 66 72 6f 6d 22 3a 22 77 |3","platfrom":"w|
30 00000040 65 62 22 2c 22 61 63 63 65 70 74 73 22 3a 5b 31 |eb","accepts":[1|
31 00000050 30 30 30 5d 7d |000]}|
32 ```
33
34
35
36 ## 认证包回复(下行)
37
38 **正文内容json:**
39
40 根对象:
41
42 | 字段 | 类型 | 内容 | 备注 |
43 | ------- | ---- | -------- | -------- |
44 | code | num | 返回值 | 0:成功 |
45 | message | str | 错误信息 | 默认为OK |
46 | version | num | 版本号 | |
47
48 示例:
49
50 ```
51 00000000 00 00 00 37 00 12 00 01 00 00 00 08 00 00 00 01 |...7............|
52 00000010 00 00 7b 22 63 6f 64 65 22 3a 30 2c 22 6d 65 73 |..{"code":0,"mes|
53 00000020 73 61 67 65 22 3a 22 4f 4b 22 2c 22 76 65 72 73 |sage":"OK","vers|
54 00000030 69 6f 6e 22 3a 31 7d |ion":1}|
55 ```
56
57
58
59 ## 心跳包(上行)
60
61 正文可为任意内容或为空
62
63 **示例:**
64
65 正文为空的示例
66
67 ```
68 00000000 00 00 00 12 00 12 00 01 00 00 00 02 00 00 00 01 |................|
69 00000010 00 00 |..|
70 ```
71
72 正文为`[object Object]`的示例
73
74 ```
75 00000000 00 00 00 21 00 12 00 01 00 00 00 02 00 00 00 01 |...!............|
76 00000010 00 00 5b 6f 62 6a 65 63 74 20 4f 62 6a 65 63 74 |..[object Object|
77 00000020 5d |]|
78 ```
79
80
81
82 ## 心跳包回复(实时观看数)(下行)
83
84 **正文内容json:**
85
86 根对象:
87
88 | 字段 | 类型 | 内容 | 备注 |
89 | ------- | ---- | -------- | -------- |
90 | code | num | 返回值 | 0:成功 |
91 | message | str | 错误信息 | 默认为OK |
92 | data | obj | 信息本体 | |
93
94 `data`对象:
95
96 | 字段 | 类型 | 内容 | 备注 |
97 | ---- | ---- | ---------------- | ---- |
98 | room | obj | 视频实时观看信息 | |
99
100 `data`中的`room`对象:
101
102 | 字段 | 类型 | 内容 | 备注 |
103 | ------- | ---- | ------------ | ------------------------------ |
104 | online | num | 实时观看人数 | |
105 | room_id | str | 目标视频 | `video://{视频avID}/{视频CID}` |
106
107 **示例:**
108
109 当前视频`av706`实时观看人数为13
110
111 ```
112 00000000 00 00 00 68 00 12 00 01 00 00 00 03 00 00 00 01 |...h............|
113 00000010 00 00 7b 22 63 6f 64 65 22 3a 30 2c 22 6d 65 73 |..{"code":0,"mes|
114 00000020 73 61 67 65 22 3a 22 30 22 2c 22 64 61 74 61 22 |sage":"0","data"|
115 00000030 3a 7b 22 72 6f 6f 6d 22 3a 7b 22 6f 6e 6c 69 6e |:{"room":{"onlin|
116 00000040 65 22 3a 31 33 2c 22 72 6f 6f 6d 5f 69 64 22 3a |e":13,"room_id":|
117 00000050 22 76 69 64 65 6f 3a 2f 2f 37 30 36 2f 33 37 32 |"video://706/372|
118 00000060 34 37 32 33 22 7d 7d 7d |4723"}}}|
119 ```
120
121
122
123 ## 普通包(实时弹幕)(下行)
124
125 **正文内容json:**
126
127 根数组:
128
129 | 项 | 类型 | 内容 | 备注 |
130 | ---- | ---- | ------------ | ------------------------------------------------------------ |
131 | 0 | str | 弹幕属性信息 | 详见[「弹幕」中的属性 p](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/danmaku/danmaku.md) |
132 | 1 | str | 弹幕内容 | |
133
134 **示例:**
135
136 弹幕属性为`0.25,1,25,16777215,1588433046,1588431486568150,0,33ad5d91,32134068443807747`
137
138 弹幕内容为`此生无悔入东方,来世愿生幻想乡`
139
140 ```
141 00000000 00 00 00 91 00 12 00 01 00 00 03 e8 00 00 00 00 |................|
142 00000010 00 00 5b 22 30 2e 32 35 2c 31 2c 32 35 2c 31 36 |..["0.25,1,25,16|
143 00000020 37 37 37 32 31 35 2c 31 35 38 38 34 33 33 30 34 |777215,158843304|
144 00000030 36 2c 31 35 38 38 34 33 31 34 38 36 35 36 38 31 |6,15884314865681|
145 00000040 35 30 2c 30 2c 33 33 61 64 35 64 39 31 2c 33 32 |50,0,33ad5d91,32|
146 00000050 31 33 34 30 36 38 34 34 33 38 30 37 37 34 37 22 |134068443807747"|
147 00000060 2c 22 e6 ad a4 e7 94 9f e6 97 a0 e6 82 94 e5 85 |,"此 生 无 悔|
148 00000070 a5 e4 b8 9c e6 96 b9 ef bc 8c e6 9d a5 e4 b8 96 |入 东 方 ,来 世 |
149 00000080 e6 84 bf e7 94 9f e5 b9 bb e6 83 b3 e4 b9 a1 22 |愿 生 幻 想 乡"|
150 00000090 5d |]|
151 ```
152
Modified user/space.md +249 -0
@@ -1729,6 +1729,255 @@ http://api.bilibili.com/x/space/acc/tags?mid=53456
1729 1729 }
1730 1730 ```
1731 1731
1732 ### 查询用户创建的视频收藏夹列表
1733
1734 > http://api.bilibili.com/x/v3/fav/folder/created/list-all
1735
1736 *方式:GET*
1737
1738 查看私有收藏夹时需要登录(SESSDATA)
1739
1740 **参数:**
1741
1742 | 参数名 | 类型 | 内容 | 必要性 | 备注 |
1743 | ------ | ---- | ----------- | ------ | ---- |
1744 | up_mid | url | 目标用户UID | 必要 | |
1745
1746 **json回复:**
1747
1748 根对象:
1749
1750 | 字段 | 类型 | 内容 | 备注 |
1751 | ------- | ----------------------------- | -------- | --------------------------- |
1752 | code | num | 返回值 | 0:成功<br />-400:请求错误 |
1753 | message | str | 错误信息 | 默认为0 |
1754 | ttl | num | 1 | 作用尚不明确 |
1755 | data | 隐藏时:null<br />公开时:obj | 信息本体 | |
1756
1757 `data`对象:
1758
1759 | 字段 | 类型 | 内容 | 备注 |
1760 | ----- | ---------------------------------------- | -------------- | ---- |
1761 | count | num | 创建的收藏夹数 | |
1762 | list | 无收藏夹时:null<br />有收藏夹时:arrary | 收藏夹列表 | |
1763
1764 `data`中的`list`数组:
1765
1766 | 项 | 类型 | 内容 | 备注 |
1767 | ---- | ---- | ----------- | --------------------- |
1768 | 0 | obj | 收藏夹1 | |
1769 | n | obj | 收藏夹(n+1) | 项数取决于`count`的值 |
1770 | …… | obj | …… | |
1771
1772 `data`中的`list`数组中的对象:
1773
1774 | 字段 | 类型 | 内容 | 备注 |
1775 | ----------- | ---- | ---------------- | ----------------------------------------- |
1776 | id | num | 收藏夹mlID | |
1777 | fid | num | 原始收藏夹ID | 去除两位UID尾号 |
1778 | mid | num | 创建用户UID | |
1779 | attr | num | 收藏夹属性 | 转换成8-bit二进制处理<br />详细说明见下表 |
1780 | title | str | 收藏夹标题 | |
1781 | fav_state | num | 0 | 作用尚不明确 |
1782 | media_count | num | 收藏夹总计视频数 | |
1783
1784 `attr`属性二进制值表:
1785
1786 | 其他有待补充... | 1:默认收藏夹 | 0:公开性 |
1787 | --------------- | -------------------------------- | -------------------- |
1788 | | 0:默认收藏夹<br />1:其他收藏夹 | 0:公开<br />1:私有 |
1789
1790 **示例:**
1791
1792 查询用户`UID=7792521`的收藏夹列表
1793
1794 http://api.bilibili.com/x/v3/fav/folder/created/list-all?up_mid=7792521
1795
1796 ```json
1797 {
1798 "code": 0,
1799 "message": "0",
1800 "ttl": 1,
1801 "data": {
1802 "count": 5,
1803 "list": [{
1804 "id": 44233921,
1805 "fid": 442339,
1806 "mid": 7792521,
1807 "attr": 0,
1808 "title": "默认收藏夹",
1809 "fav_state": 0,
1810 "media_count": 85
1811 }, {
1812 "id": 936347621,
1813 "fid": 9363476,
1814 "mid": 7792521,
1815 "attr": 22,
1816 "title": "放假君的鬼畜私房歌",
1817 "fav_state": 0,
1818 "media_count": 2
1819 }, {
1820 "id": 845218621,
1821 "fid": 8452186,
1822 "mid": 7792521,
1823 "attr": 22,
1824 "title": "♪一言不合就开唱♪",
1825 "fav_state": 0,
1826 "media_count": 4
1827 }, {
1828 "id": 844998121,
1829 "fid": 8449981,
1830 "mid": 7792521,
1831 "attr": 22,
1832 "title": "个人作品精选",
1833 "fav_state": 0,
1834 "media_count": 25
1835 }, {
1836 "id": 381779121,
1837 "fid": 3817791,
1838 "mid": 7792521,
1839 "attr": 22,
1840 "title": "鬼畜小课堂",
1841 "fav_state": 0,
1842 "media_count": 25
1843 }]
1844 }
1845 }
1846 ```
1847
1848
1849
1850 ### 查询用户收藏的收藏夹
1851
1852 > http://api.bilibili.com/x/v3/fav/folder/collected/list
1853
1854 *方式:GET*
1855
1856 **参数:**
1857
1858 | 参数名 | 类型 | 内容 | 必要性 | 备注 |
1859 | ------ | ---- | ----------- | ------ | ---- |
1860 | ps | url | 每页项数 | 必要 | |
1861 | pn | url | 页码 | 必要 | |
1862 | up_mid | url | 目标用户UID | 必要 | |
1863
1864 **json回复:**
1865
1866 根对象:
1867
1868 | 字段 | 类型 | 内容 | 备注 |
1869 | ------- | ----------------------------- | -------- | ------------------------------------------------------------ |
1870 | code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败<br />40022:签名过长 |
1871 | message | str | 错误信息 | 默认为0 |
1872 | ttl | num | 1 | 作用尚不明确 |
1873 | data | 隐藏时:null<br />公开时:obj | 信息本体 | |
1874
1875 `data`对象:
1876
1877 | 字段 | 类型 | 内容 | 备注 |
1878 | ----- | ---------------------------------------- | -------------- | ---- |
1879 | count | num | 创建的收藏夹数 | |
1880 | list | 无收藏夹时:null<br />有收藏夹时:arrary | 收藏夹列表 | |
1881
1882 `data`中的`list`数组:
1883
1884 | 项 | 类型 | 内容 | 备注 |
1885 | ---- | ---- | ----------- | --------------------- |
1886 | 0 | obj | 收藏夹1 | |
1887 | n | obj | 收藏夹(n+1) | 项数取决于`count`的值 |
1888 | …… | obj | …… | |
1889
1890 `data`中的`list`数组中的对象:
1891
1892 | 字段 | 类型 | 内容 | 备注 |
1893 | ----------- | ---- | ------------------ | ----------------------------------------- |
1894 | id | num | 收藏夹mlID | |
1895 | fid | num | 原始收藏夹ID | 去除两位UID尾号 |
1896 | mid | num | 创建用户UID | |
1897 | attr | num | 收藏夹属性 | 转换成8-bit二进制处理<br />详细说明见下表 |
1898 | title | str | 收藏夹标题 | |
1899 | cover | str | 收藏夹封面图片url | |
1900 | upper | obj | 收藏夹创建用户信息 | |
1901 | cover_type | num | 2 | 作用尚不明确 |
1902 | intro | str | 空 | 作用尚不明确 |
1903 | ctime | num | 创建时间 | 时间戳 |
1904 | mtime | num | 审核时间 | 时间戳 |
1905 | state | num | 0 | 作用尚不明确 |
1906 | fav_state | num | 0 | 作用尚不明确 |
1907 | media_count | num | 收藏夹总计视频数 | |
1908
1909 `attr`属性二进制值表:
1910
1911 | 其他有待补充... | 1:默认收藏夹 | 0:公开性 |
1912 | --------------- | -------------------------------- | -------------------- |
1913 | | 0:默认收藏夹<br />1:其他收藏夹 | 0:公开<br />1:私有 |
1914
1915 `data`中的`list`数组中的对象中的`upper`对象:
1916
1917 | 字段 | 类型 | 内容 | 备注 |
1918 | ---- | ---- | ---------- | ------------ |
1919 | mid | num | 创建人UID | |
1920 | name | str | 创建人昵称 | |
1921 | face | str | 空 | 作用尚不明确 |
1922
1923 **示例:**
1924
1925 查询用户`UID=293793435`的收藏夹收藏列表
1926
1927 http://api.bilibili.com/x/v3/fav/folder/collected/list?pn=1&ps=20&up_mid=293793435
1928
1929 ```json
1930 {
1931 "code": 0,
1932 "message": "0",
1933 "ttl": 1,
1934 "data": {
1935 "count": 2,
1936 "list": [{
1937 "id": 496307088,
1938 "fid": 4963070,
1939 "mid": 412466388,
1940 "attr": 22,
1941 "title": "入站必刷",
1942 "cover": "http://i0.hdslb.com/bfs/archive/baae2b4050363c0ab45465b7cf696b8304fdaca8.jpg",
1943 "upper": {
1944 "mid": 412466388,
1945 "name": "热门菌",
1946 "face": ""
1947 },
1948 "cover_type": 2,
1949 "intro": "",
1950 "ctime": 1563394571,
1951 "mtime": 1563394571,
1952 "state": 0,
1953 "fav_state": 0,
1954 "media_count": 55
1955 }, {
1956 "id": 381779121,
1957 "fid": 3817791,
1958 "mid": 7792521,
1959 "attr": 22,
1960 "title": "鬼畜小课堂",
1961 "cover": "http://i2.hdslb.com/bfs/archive/09a668cfdb38fb3a85f905c10f48a2947e36a695.jpg",
1962 "upper": {
1963 "mid": 7792521,
1964 "name": "还有一天就放假了",
1965 "face": ""
1966 },
1967 "cover_type": 2,
1968 "intro": "",
1969 "ctime": 1553700224,
1970 "mtime": 1557291666,
1971 "state": 0,
1972 "fav_state": 0,
1973 "media_count": 25
1974 }]
1975 }
1976 }
1977 ```
1978
1979
1980
1732 1981
1733 1982
1734 1983 ## 设置相关