From f18eeabd19f8a55c16449376b615fb35cffe221c Mon Sep 17 00:00:00 2001 From: SocialSisterYi <45892418+SocialSisterYi@users.noreply.github.com> Date: Sat, 2 May 2020 23:59:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=A7=86=E9=A2=91=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E5=B9=BF=E6=92=AD=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + broadcast/general.md | 167 +++++++++++++++++++++++++++ broadcast/video_room.md | 152 ++++++++++++++++++++++++ user/space.md | 249 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 569 insertions(+) create mode 100644 broadcast/general.md create mode 100644 broadcast/video_room.md diff --git a/.gitignore b/.gitignore index 384b4d6..b165b27 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ live/info_flow.md bangumi/info.md bangumi/ststus_number.md live/live_manage.md +danmaku/action.md diff --git a/broadcast/general.md b/broadcast/general.md new file mode 100644 index 0000000..829aa48 --- /dev/null +++ b/broadcast/general.md @@ -0,0 +1,167 @@ +# 全站广播 + +## 获取广播服务器地址 + +> http://api.bilibili.com/x/web-interface/broadcast/servers + +*方式:GET* + +**参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| -------- | ---- | -------- | ------ | --------------------------------- | +| platform | url | 平台选择 | 必要 | 为web时输出域名
其他时输出ip | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------------- | ------ | ------------------ | ---- | +| domain | str | 广播服务器url | | +| tcp_port | num | tcp端口 | | +| ws_port | num | websocket端口 | | +| wss_port | num | websocket ssl端口 | | +| heartbeat | num | 最大心跳包间隔时间 | | +| nodes | arrary | 服务节点地址列表 | | +| backoff | obj | ??? | | +| heartbeat_max | num | ??? | | + +`data`中的`nodes`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------- | ---- | +| 0 | str | 服务节点1 | | +| n | str | 服务节点(n+1) | | +| …… | str | …… | | + +`data`中的`backoff`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---------- | ---- | ------ | ---- | +| max_delay | num | ??? | | +| base_delay | num | ??? | | +| factor | num | ??? | | +| jitter | num | ??? | | + +示例: + +当`platform`=`web`时,不显示节点ip + + http://api.bilibili.com/x/web-interface/broadcast/servers?platform=web + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "domain": "broadcast.chat.bilibili.com", + "tcp_port": 7821, + "ws_port": 7822, + "wss_port": 7823, + "heartbeat": 30, + "nodes": ["broadcast.chat.bilibili.com"], + "backoff": { + "max_delay": 300, + "base_delay": 3, + "factor": 1.8, + "jitter": 0.3 + }, + "heartbeat_max": 3 + } +} +``` + +当`platform`=其他时,显示节点ip + + http://api.bilibili.com/x/web-interface/broadcast/servers?platform=1 + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "domain": "broadcast.chat.bilibili.com", + "tcp_port": 7821, + "ws_port": 7822, + "wss_port": 7823, + "heartbeat": 30, + "nodes": ["134.175.207.130", "120.92.150.90", "120.92.150.212", "192.144.173.136", "154.8.217.108"], + "backoff": { + "max_delay": 300, + "base_delay": 3, + "factor": 1.8, + "jitter": 0.3 + }, + "heartbeat_max": 3 + } +} +``` + + + +## 服务器数据包 + +连接服务器分为三种方式,分别是ws wss tcp,数据包分为上行和下行 + +单个数据包分为头部和正文 + +其中上行的有认证包 心跳包,下行的有认证包回复 心跳包回复 普通包 + +建立连接后超过30s内未发送认证包,或握手后30s内未发送心跳包,或发送了错误的认证包,都会被强制断开连接 + +操作流程: + +1.发送认证包,等待接收认证回复 + +2.确认握手成功后,每30s内发送心跳包,并立即接收心跳包回复 + +3.空闲时间接收普通包 + +### 数据包结构 + +头部通用于上行和下行数据包 + +头部格式: + +| 偏移量 | 长度(字节) | 类型 | 含义 | +| ------ | ------------ | ------ | ---------------------------------------------------- | +| 0x00 | 4 | uint32 | 封包总大小(头部大小+正文大小) | +| 0x04 | 2 | uint16 | 头部大小(一般为0x0012,18字节) | +| 0x06 | 2 | uint16 | 协议版本,可取常数1 | +| 0x08 | 4 | uint32 | 操作码(包类型)
**见下表** | +| 0x0C | 4 | uint32 | sequence(请求次数),可取常数1
对于普通包恒为0 | +| 0x10 | 2 | uint16 | 保留,一般为0 | + +操作码: + +| 代码 | 含义 | +| ---------- | ---------- | +| 0x00000002 | 心跳包 | +| 0x00000003 | 心跳包回复 | +| 0x000003E8 | 普通包 | +| 0x00000007 | 认证包 | +| 0x00000008 | 认证包回复 | + +**示例:** + +以下为一个认证包示例,正文为文本`test` + +``` +00000000 00 00 00 16 00 12 00 01 00 00 00 07 00 00 00 01 |................| +00000010 00 00 74 65 73 74 |..test| +``` + + + diff --git a/broadcast/video_room.md b/broadcast/video_room.md new file mode 100644 index 0000000..6326462 --- /dev/null +++ b/broadcast/video_room.md @@ -0,0 +1,152 @@ +# 视频实时信息 + +## 认证包(上行) + +**正文内容json:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| -------- | ------ | -------- | ------------------------------ | +| room_id | str | 目标视频 | `video://{视频avID}/{视频CID}` | +| platform | str | 平台标识 | 默认为`web` | +| accepts | arrary | 操作标识 | | + +`arrary`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ---- | ---- | +| 0 | num | 1000 | | + +**示例:** + +发送视频`av706`(1P的CID为` 3724723 `)的认证包 + +``` +00000000 00 00 00 55 00 12 00 01 00 00 00 07 00 00 00 01 |...U............| +00000010 00 00 7b 22 72 6f 6f 6d 5f 69 64 22 3a 22 76 69 |..{"room_id":"vi| +00000020 64 65 6f 3a 2f 2f 37 30 36 2f 33 37 32 34 37 32 |deo://706/372472| +00000030 33 22 2c 22 70 6c 61 74 66 72 6f 6d 22 3a 22 77 |3","platfrom":"w| +00000040 65 62 22 2c 22 61 63 63 65 70 74 73 22 3a 5b 31 |eb","accepts":[1| +00000050 30 30 30 5d 7d |000]}| +``` + + + +## 认证包回复(下行) + +**正文内容json:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为OK | +| version | num | 版本号 | | + +示例: + +``` +00000000 00 00 00 37 00 12 00 01 00 00 00 08 00 00 00 01 |...7............| +00000010 00 00 7b 22 63 6f 64 65 22 3a 30 2c 22 6d 65 73 |..{"code":0,"mes| +00000020 73 61 67 65 22 3a 22 4f 4b 22 2c 22 76 65 72 73 |sage":"OK","vers| +00000030 69 6f 6e 22 3a 31 7d |ion":1}| +``` + + + +## 心跳包(上行) + +正文可为任意内容或为空 + +**示例:** + +正文为空的示例 + +``` +00000000 00 00 00 12 00 12 00 01 00 00 00 02 00 00 00 01 |................| +00000010 00 00 |..| +``` + +正文为`[object Object]`的示例 + +``` +00000000 00 00 00 21 00 12 00 01 00 00 00 02 00 00 00 01 |...!............| +00000010 00 00 5b 6f 62 6a 65 63 74 20 4f 62 6a 65 63 74 |..[object Object| +00000020 5d |]| +``` + + + +## 心跳包回复(实时观看数)(下行) + +**正文内容json:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | -------- | -------- | +| code | num | 返回值 | 0:成功 | +| message | str | 错误信息 | 默认为OK | +| data | obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------------- | ---- | +| room | obj | 视频实时观看信息 | | + +`data`中的`room`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ---- | ------------ | ------------------------------ | +| online | num | 实时观看人数 | | +| room_id | str | 目标视频 | `video://{视频avID}/{视频CID}` | + +**示例:** + +当前视频`av706`实时观看人数为13 + +``` +00000000 00 00 00 68 00 12 00 01 00 00 00 03 00 00 00 01 |...h............| +00000010 00 00 7b 22 63 6f 64 65 22 3a 30 2c 22 6d 65 73 |..{"code":0,"mes| +00000020 73 61 67 65 22 3a 22 30 22 2c 22 64 61 74 61 22 |sage":"0","data"| +00000030 3a 7b 22 72 6f 6f 6d 22 3a 7b 22 6f 6e 6c 69 6e |:{"room":{"onlin| +00000040 65 22 3a 31 33 2c 22 72 6f 6f 6d 5f 69 64 22 3a |e":13,"room_id":| +00000050 22 76 69 64 65 6f 3a 2f 2f 37 30 36 2f 33 37 32 |"video://706/372| +00000060 34 37 32 33 22 7d 7d 7d |4723"}}}| +``` + + + +## 普通包(实时弹幕)(下行) + +**正文内容json:** + +根数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------ | ------------------------------------------------------------ | +| 0 | str | 弹幕属性信息 | 详见[「弹幕」中的属性 p](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/danmaku/danmaku.md) | +| 1 | str | 弹幕内容 | | + +**示例:** + +弹幕属性为`0.25,1,25,16777215,1588433046,1588431486568150,0,33ad5d91,32134068443807747` + +弹幕内容为`此生无悔入东方,来世愿生幻想乡` + +``` +00000000 00 00 00 91 00 12 00 01 00 00 03 e8 00 00 00 00 |................| +00000010 00 00 5b 22 30 2e 32 35 2c 31 2c 32 35 2c 31 36 |..["0.25,1,25,16| +00000020 37 37 37 32 31 35 2c 31 35 38 38 34 33 33 30 34 |777215,158843304| +00000030 36 2c 31 35 38 38 34 33 31 34 38 36 35 36 38 31 |6,15884314865681| +00000040 35 30 2c 30 2c 33 33 61 64 35 64 39 31 2c 33 32 |50,0,33ad5d91,32| +00000050 31 33 34 30 36 38 34 34 33 38 30 37 37 34 37 22 |134068443807747"| +00000060 2c 22 e6 ad a4 e7 94 9f e6 97 a0 e6 82 94 e5 85 |,"此 生 无 悔| +00000070 a5 e4 b8 9c e6 96 b9 ef bc 8c e6 9d a5 e4 b8 96 |入 东 方 ,来 世 | +00000080 e6 84 bf e7 94 9f e5 b9 bb e6 83 b3 e4 b9 a1 22 |愿 生 幻 想 乡"| +00000090 5d |]| +``` + diff --git a/user/space.md b/user/space.md index 5b2e109..fa83aa8 100644 --- a/user/space.md +++ b/user/space.md @@ -1729,6 +1729,255 @@ http://api.bilibili.com/x/space/acc/tags?mid=53456 } ``` +### 查询用户创建的视频收藏夹列表 + +> http://api.bilibili.com/x/v3/fav/folder/created/list-all + +*方式:GET* + +查看私有收藏夹时需要登录(SESSDATA) + +**参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| up_mid | url | 目标用户UID | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | --------------------------- | +| code | num | 返回值 | 0:成功
-400:请求错误 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | +| data | 隐藏时:null
公开时:obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---------------------------------------- | -------------- | ---- | +| count | num | 创建的收藏夹数 | | +| list | 无收藏夹时:null
有收藏夹时:arrary | 收藏夹列表 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | --------------------- | +| 0 | obj | 收藏夹1 | | +| n | obj | 收藏夹(n+1) | 项数取决于`count`的值 | +| …… | obj | …… | | + +`data`中的`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ---------------- | ----------------------------------------- | +| id | num | 收藏夹mlID | | +| fid | num | 原始收藏夹ID | 去除两位UID尾号 | +| mid | num | 创建用户UID | | +| attr | num | 收藏夹属性 | 转换成8-bit二进制处理
详细说明见下表 | +| title | str | 收藏夹标题 | | +| fav_state | num | 0 | 作用尚不明确 | +| media_count | num | 收藏夹总计视频数 | | + +`attr`属性二进制值表: + +| 其他有待补充... | 1:默认收藏夹 | 0:公开性 | +| --------------- | -------------------------------- | -------------------- | +| | 0:默认收藏夹
1:其他收藏夹 | 0:公开
1:私有 | + +**示例:** + +查询用户`UID=7792521`的收藏夹列表 + +http://api.bilibili.com/x/v3/fav/folder/created/list-all?up_mid=7792521 + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "count": 5, + "list": [{ + "id": 44233921, + "fid": 442339, + "mid": 7792521, + "attr": 0, + "title": "默认收藏夹", + "fav_state": 0, + "media_count": 85 + }, { + "id": 936347621, + "fid": 9363476, + "mid": 7792521, + "attr": 22, + "title": "放假君的鬼畜私房歌", + "fav_state": 0, + "media_count": 2 + }, { + "id": 845218621, + "fid": 8452186, + "mid": 7792521, + "attr": 22, + "title": "♪一言不合就开唱♪", + "fav_state": 0, + "media_count": 4 + }, { + "id": 844998121, + "fid": 8449981, + "mid": 7792521, + "attr": 22, + "title": "个人作品精选", + "fav_state": 0, + "media_count": 25 + }, { + "id": 381779121, + "fid": 3817791, + "mid": 7792521, + "attr": 22, + "title": "鬼畜小课堂", + "fav_state": 0, + "media_count": 25 + }] + } +} +``` + + + +### 查询用户收藏的收藏夹 + +> http://api.bilibili.com/x/v3/fav/folder/collected/list + +*方式:GET* + +**参数:** + +| 参数名 | 类型 | 内容 | 必要性 | 备注 | +| ------ | ---- | ----------- | ------ | ---- | +| ps | url | 每页项数 | 必要 | | +| pn | url | 页码 | 必要 | | +| up_mid | url | 目标用户UID | 必要 | | + +**json回复:** + +根对象: + +| 字段 | 类型 | 内容 | 备注 | +| ------- | ----------------------------- | -------- | ------------------------------------------------------------ | +| code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
40022:签名过长 | +| message | str | 错误信息 | 默认为0 | +| ttl | num | 1 | 作用尚不明确 | +| data | 隐藏时:null
公开时:obj | 信息本体 | | + +`data`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----- | ---------------------------------------- | -------------- | ---- | +| count | num | 创建的收藏夹数 | | +| list | 无收藏夹时:null
有收藏夹时:arrary | 收藏夹列表 | | + +`data`中的`list`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ----------- | --------------------- | +| 0 | obj | 收藏夹1 | | +| n | obj | 收藏夹(n+1) | 项数取决于`count`的值 | +| …… | obj | …… | | + +`data`中的`list`数组中的对象: + +| 字段 | 类型 | 内容 | 备注 | +| ----------- | ---- | ------------------ | ----------------------------------------- | +| id | num | 收藏夹mlID | | +| fid | num | 原始收藏夹ID | 去除两位UID尾号 | +| mid | num | 创建用户UID | | +| attr | num | 收藏夹属性 | 转换成8-bit二进制处理
详细说明见下表 | +| title | str | 收藏夹标题 | | +| cover | str | 收藏夹封面图片url | | +| upper | obj | 收藏夹创建用户信息 | | +| cover_type | num | 2 | 作用尚不明确 | +| intro | str | 空 | 作用尚不明确 | +| ctime | num | 创建时间 | 时间戳 | +| mtime | num | 审核时间 | 时间戳 | +| state | num | 0 | 作用尚不明确 | +| fav_state | num | 0 | 作用尚不明确 | +| media_count | num | 收藏夹总计视频数 | | + +`attr`属性二进制值表: + +| 其他有待补充... | 1:默认收藏夹 | 0:公开性 | +| --------------- | -------------------------------- | -------------------- | +| | 0:默认收藏夹
1:其他收藏夹 | 0:公开
1:私有 | + +`data`中的`list`数组中的对象中的`upper`对象: + +| 字段 | 类型 | 内容 | 备注 | +| ---- | ---- | ---------- | ------------ | +| mid | num | 创建人UID | | +| name | str | 创建人昵称 | | +| face | str | 空 | 作用尚不明确 | + +**示例:** + +查询用户`UID=293793435`的收藏夹收藏列表 + + http://api.bilibili.com/x/v3/fav/folder/collected/list?pn=1&ps=20&up_mid=293793435 + +```json +{ + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "count": 2, + "list": [{ + "id": 496307088, + "fid": 4963070, + "mid": 412466388, + "attr": 22, + "title": "入站必刷", + "cover": "http://i0.hdslb.com/bfs/archive/baae2b4050363c0ab45465b7cf696b8304fdaca8.jpg", + "upper": { + "mid": 412466388, + "name": "热门菌", + "face": "" + }, + "cover_type": 2, + "intro": "", + "ctime": 1563394571, + "mtime": 1563394571, + "state": 0, + "fav_state": 0, + "media_count": 55 + }, { + "id": 381779121, + "fid": 3817791, + "mid": 7792521, + "attr": 22, + "title": "鬼畜小课堂", + "cover": "http://i2.hdslb.com/bfs/archive/09a668cfdb38fb3a85f905c10f48a2947e36a695.jpg", + "upper": { + "mid": 7792521, + "name": "还有一天就放假了", + "face": "" + }, + "cover_type": 2, + "intro": "", + "ctime": 1553700224, + "mtime": 1557291666, + "state": 0, + "fav_state": 0, + "media_count": 25 + }] + } +} +``` + + + ## 设置相关