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
+ }]
+ }
+}
+```
+
+
+
## 设置相关