From 4a6143012cc43dd6f272976920a829fa49b42889 Mon Sep 17 00:00:00 2001
From: pskdje <77605497+pskdje@users.noreply.github.com>
Date: Fri, 8 Aug 2025 14:33:17 +0800
Subject: [PATCH 1/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=92=8C=E6=9B=B4?=
=?UTF-8?q?=E6=96=B0=E7=9B=B4=E6=92=AD=E5=9B=9E=E6=94=BE=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
变更信息参见: https://github.com/SocialSisterYi/bilibili-API-collect/issues/1361
---
docs/live/live_replay.md | 389 ++++++++++++++++++++++++++++-----------
1 file changed, 283 insertions(+), 106 deletions(-)
diff --git a/docs/live/live_replay.md b/docs/live/live_replay.md
index 0bad582..a2d1f03 100644
--- a/docs/live/live_replay.md
+++ b/docs/live/live_replay.md
@@ -40,6 +40,7 @@
| pagination | obj | 分页信息 | |
| archive_flag | bool | (?) | 作用尚不明确 |
| can\_edit | num | (?) | 作用尚不明确 |
+| can_upload | bool | (?) | 作用尚不明确 |
`data.replay_info` 数组中的对象:
@@ -486,7 +487,7 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/DeleteSliceDr
| 字段 | 类型 | 内容 | 备注 |
| --- | --- | --- | --- |
-| code | num | 返回值 | -101:未登录
-111:csrf校验失败
0:成功
100:非法参数
210:回放id或场次key无效 |
+| code | num | 返回值 | -101:未登录
-111:csrf校验失败
0:成功
100:非法参数
210:回放id或场次key无效
217:未找到直播录像 |
| message | str | 错误信息 | 成功时为`"0"` |
| ttl | num | `1` | |
| data | obj | 信息本体 | |
@@ -770,6 +771,7 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVide
| 字段 | 类型 | 内容 | 备注 |
| --- | --- | --- | --- |
| list | arr | 直播回放视频列表 | 如果该场回放没有视频流将为`null` |
+| ban_list | null | 不可发布的回放列表? | [需要验证] |
`data.list` 数组中的对象:
@@ -817,7 +819,8 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStrea
"stream": "https://bvc-live.bilivideo.com/hls-record-gateway/videoPlay?biz_id=live2vod-clip&end_time=1746879298&header_name=1746863105.m4s&host_id=edge-hls-bvc-self-cn-jsyz-ct-03-59-6d854b4bd8-gnlb7&no_end=0&schema=https&sign=70929627354f4380b54b97fcdb69c8a2&start_time=1746879269&stream_name=live_438160221_32373699&ts=1752930893&version=2",
"type": 2
}
- ]
+ ],
+ "ban_list": null
}
}
```
@@ -862,6 +865,7 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStrea
| max_value | num | (?) | 效果未知 |
| high_light_data | arr | 高光时刻数据 | |
| ass_url | str | ASS字幕链接 | 用作弹幕显示 |
+| high_light_stat | obj | 高亮状态信息 | |
`data.session_data` 数组中的对象:
@@ -882,6 +886,15 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStrea
| cover | str | (?) | 目前为`""` |
| extra | str | (?) | 目前为`""` |
+`data.high_light_stat` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| original_hl | num | “高光时刻”数量 | 有“高光时刻”时存在 |
+| manual_hl | num | “已保存”数量 | 有“已保存”时存在,调用[手动保存高亮片段](#手动保存高亮片段)进行保存 |
+
+注: 可能还存在一个“回溯录制”的字段。
+
**示例:**
获取场次key为`607113721045847859`的会话数据
@@ -902,144 +915,241 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetLiveSessio
"data": {
"session_data": [
{
- "ts": 1746863100,
+ "ts": 1752927300,
"value": 0
},
{
- "ts": 1746863160,
+ "ts": 1752927360,
"value": 0
},
{
- "ts": 1746863220,
+ "ts": 1752927420,
+ "value": 0
+ },
+ // 省略掉大部分重复内容
+ {
+ "ts": 1752946620,
"value": 0
},
{
- "ts": 1746863280,
+ "ts": 1752946680,
"value": 0
},
{
- "ts": 1746863340,
- "value": 0
- },
- {
- "ts": 1746863400,
- "value": 0
- },
- {
- "ts": 1746863460,
- "value": 0
- },
- {
- "ts": 1746863520,
- "value": 0
- },
- {
- "ts": 1746863580,
- "value": 0
- },
- {
- "ts": 1746863640,
- "value": 0
- },
- {
- "ts": 1746863700,
- "value": 0
- },
- {
- "ts": 1746863760,
- "value": 0
- },
- {
- "ts": 1746863820,
- "value": 0
- },
- // 省略100多条数据
- {
- "ts": 1746878520,
- "value": 0
- },
- {
- "ts": 1746878580,
- "value": 0
- },
- {
- "ts": 1746878640,
- "value": 0
- },
- {
- "ts": 1746878700,
- "value": 0
- },
- {
- "ts": 1746878760,
- "value": 0
- },
- {
- "ts": 1746878820,
- "value": 0
- },
- {
- "ts": 1746878880,
- "value": 0
- },
- {
- "ts": 1746878940,
- "value": 0
- },
- {
- "ts": 1746879000,
- "value": 0
- },
- {
- "ts": 1746879060,
- "value": 0
- },
- {
- "ts": 1746879120,
- "value": 0
- },
- {
- "ts": 1746879180,
- "value": 0
- },
- {
- "ts": 1746879240,
+ "ts": 1752946740,
"value": 0
}
],
- "max_danmaku": 1746864660,
- "max_pcu": 1746864660,
+ "max_danmaku": 1752928860,
+ "max_pcu": 1752928200,
"max_value": 0,
"high_light_data": [
{
- "id": 6226272,
+ "id": 9628113,
"type": 1,
- "start_time": 1746873300,
- "end_time": 1746873480,
+ "start_time": 1752928860,
+ "end_time": 1752929040,
"title": "弹幕高光 Top 1",
"cover": "",
"extra": ""
},
{
- "id": 6226274,
+ "id": 9628114,
"type": 1,
- "start_time": 1746873120,
- "end_time": 1746873420,
+ "start_time": 1752938460,
+ "end_time": 1752938640,
"title": "弹幕高光 Top 2",
"cover": "",
"extra": ""
},
{
- "id": 6226271,
+ "id": 9628115,
+ "type": 1,
+ "start_time": 1752938040,
+ "end_time": 1752938220,
+ "title": "弹幕高光 Top 3",
+ "cover": "",
+ "extra": ""
+ },
+ {
+ "id": 9628112,
"type": 2,
- "start_time": 1746864600,
- "end_time": 1746864780,
+ "start_time": 1752928140,
+ "end_time": 1752928320,
"title": "进房高光时刻",
"cover": "",
"extra": ""
}
],
- "ass_url": "https://jssz-boss.hdslb.com/live2arc_anchor_video/dmass_1899237171_607113721045847859.ass?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=y4zI4XTQzlOkmSKg%2F20250520%2Fjssz%2Fs3%2Faws4_request&X-Amz-Date=20250520T130358Z&X-Amz-Expires=7200&X-Amz-SignedHeaders=host&X-Amz-Signature=5e3ddfbcb8893dc6e76deea7981165e18e5df9a7579f4e6e97c7a32abec53d84"
+ "ass_url": "https://jssz-boss.hdslb.com/live2arc_anchor_video/dmass_1899237171_625727121464233779.ass?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=y4zI4XTQzlOkmSKg%2F20250802%2Fjssz%2Fs3%2Faws4_request\u0026X-Amz-Date=20250802T072504Z\u0026X-Amz-Expires=7200\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=384b42382469059a1f4c6b04c7bd2290a0c74c01375df1681eedb3ba8aca5c3c",
+ "high_light_stat": {
+ "original_hl": 4,
+ "manual_hl": 6
+ }
+ }
+}
+```
+
+
+
+## 获取用户高光列表
+
+> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/UserGetManualHighlightList
+
+*请求方法: GET*
+
+认证方式: Cookie (SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | --- | ---- | ----- | --- |
+| live_key | str | 标记直播场次的key | 必要 | |
+| manual_type | num | 查询类型 | 必要 | 1:回溯录制
2:已保存片段 |
+| web_location | str | (?) | 非必要 | 作用尚不明确 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | -400:请求错误
-101:未登录
0:成功 |
+| message | str | 错误信息 | 成功时为`"0"` |
+| ttl | num | `1` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| high_light_stat | obj | 高亮状态信息 | |
+| manual_highlight_list | arr | 高光列表 | 有内容时存在 |
+
+`data.manual_highlight_list` 数组:
+
+| 索引 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| 0 | obj | 第一条高光信息 | 最少存在1条,目前没有高光内容将看不到这个数组 |
+| … | obj | 某一条高光信息 | |
+| i | obj | 最后一条高光信息 | |
+
+`data.manual_highlight_list` 数组中对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| manual_id | num | 片段id | |
+| highlight_title | str | 片段标题 | |
+| start_ts | num | 开始时间戳 | Unix 秒时间戳 |
+| end_ts | num | 结束时间戳 | Unix 秒时间戳 |
+| uid | num | 保存者uid? | |
+| ruid | num | 主播uid | |
+| live_key | str | 标记直播场次的key | |
+
+`data.high_light_stat` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| original_hl | num | “高光时刻”数量 | 有“高光时刻”时存在 |
+| manual_hl | num | “已保存”数量 | 有“已保存”时存在,调用[手动保存高亮片段](#手动保存高亮片段)进行保存 |
+
+注: 可能还存在一个“回溯录制”的字段。
+
+**示例:**
+
+获取用户保存列表
+
+```shell
+curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/UserGetManualHighlightList?live_key=625727121464233779&manual_type=2' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+只有高光时刻的示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "high_light_stat": {
+ "original_hl": 4
+ }
+ }
+}
+```
+
+有保存片段的示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "manual_highlight_list": [
+ {
+ "manual_id": 14434,
+ "highlight_title": "手动保存片段【6】",
+ "start_ts": 1752935402,
+ "end_ts": 1752935402,
+ "uid": 438160221,
+ "ruid": 438160221,
+ "live_key": "625727121464233779"
+ },
+ {
+ "manual_id": 14428,
+ "highlight_title": "手动保存片段【5】",
+ "start_ts": 1752935402,
+ "end_ts": 1752935204,
+ "uid": 438160221,
+ "ruid": 438160221,
+ "live_key": "625727121464233779"
+ },
+ {
+ "manual_id": 14426,
+ "highlight_title": "手动保存片段【4】",
+ "start_ts": 1752935402,
+ "end_ts": 1752935404,
+ "uid": 438160221,
+ "ruid": 438160221,
+ "live_key": "625727121464233779"
+ },
+ {
+ "manual_id": 14425,
+ "highlight_title": "手动保存片段【3】",
+ "start_ts": 1752935402,
+ "end_ts": 1752935404,
+ "uid": 438160221,
+ "ruid": 438160221,
+ "live_key": "625727121464233779"
+ },
+ {
+ "manual_id": 14424,
+ "highlight_title": "手动保存片段【2】",
+ "start_ts": 1752927342,
+ "end_ts": 1752935404,
+ "uid": 438160221,
+ "ruid": 438160221,
+ "live_key": "625727121464233779"
+ },
+ {
+ "manual_id": 14423,
+ "highlight_title": "手动保存片段【1】",
+ "start_ts": 1752927336,
+ "end_ts": 1752946748,
+ "uid": 438160221,
+ "ruid": 438160221,
+ "live_key": "625727121464233779"
+ }
+ ],
+ "high_light_stat": {
+ "original_hl": 4,
+ "manual_hl": 6
+ }
}
}
```
@@ -1134,6 +1244,72 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVide
+## 手动保存高亮片段
+
+> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/UserManualSaveHighlight
+
+*请求方法: POST*
+
+认证方式: Cookie (SESSDATA)
+
+鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | --- | ---- | ----- | --- |
+| live_key | str | 标记直播场次的key | 必要 | 必须为自己的live_key |
+| start_ts | num | 开始时间戳 | 必要 | Unix 秒时间戳 |
+| end_ts | num | 结束时间戳 | 必要 | Unix 秒时间戳 |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+注: 开始时间减结束时间的结果小于1可能导致[直播回放片段发布页面](#直播回放片段发布页面)无法处理这个片段。
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | -400:请求错误
-111:csrf校验失败
-101:未登录
0:成功
|
+| message | str | 错误信息 | |
+| ttl | num | `1` | |
+| data | obj | 信息本体 | 成功时为空对象 |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | `-1` | |
+| message | str | 错误提示 | `主播没有对应场次` , `保存时间点未开播` |
+
+**示例:**
+
+手动保存一个片段
+
+```shell
+curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/UserManualSaveHighlight' \
+ --data-urlencode 'live_key=625727121464233779' \
+ --data-urlencode 'start_ts=1752935402' \
+ --data-urlencode 'end_ts=1752935404' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx;bili_jct=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
## 投稿直播回放片段
> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorPublishVideoSlice
@@ -1156,7 +1332,8 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVide
| av_highlight | num | 高光绑定? | 非必要 | |
| with_subtitle | num | 是否自动生成字幕? | 非必要 | 效果不明确 |
| with_danmaku | num | 是否带弹幕? | 非必要 | 传递`1`时可能导致处于“发布中”状态时不在[获取已发布片段的信息](#获取已发布片段的信息)中显示 |
-| with_reserve | num | (?) | 非必要 | 作用尚不明确 |
+| with_reserve | num | 投稿携带下场直播提醒 | 非必要 | 0:不携带,1:携带 |
+| av_speed | str | 倍速投稿 | 非必要 | 格式为 `倍速值 + "x"` ,使用非1x倍速时可能导致处于“发布中”状态时不在[获取已发布片段的信息](#获取已发布片段的信息)中显示
允许值: `0.5x` , `0.75x` , `1.0x` , `1.25x` , `1.5x` , `2.0x` |
| csrf | str | CSRF Token(位于cookie) | 必要 | |
**json回复:**
@@ -1165,7 +1342,7 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVide
| 字段 | 类型 | 内容 | 备注 |
| --- | --- | --- | --- |
-| code | num | 返回值 | -111:csrf校验失败
-101:未登录
0:成功
4000:时长过长
4001:操作太快
4002:片段已投稿
4003:请选择精彩片段再投稿哦
4006:标题已使用 |
+| code | num | 返回值 | -111:csrf校验失败
-101:未登录
0:成功
4000:时长过长
4001:操作太快
4002:片段已投稿
4003:请选择精彩片段再投稿哦
4006:标题已使用
4008:不被允许的视频倍速 |
| message | str | 错误信息 | |
| ttl | num | `1` | |
| data | obj | 信息本体 | 成功时有效 |
From 4c2e839675a474dac1470bb2f03de4f92b5fdd0c Mon Sep 17 00:00:00 2001
From: pskdje <77605497+pskdje@users.noreply.github.com>
Date: Tue, 12 Aug 2025 22:00:31 +0800
Subject: [PATCH 2/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=92=8C=E6=9B=B4?=
=?UTF-8?q?=E6=96=B0=E7=9B=B4=E6=92=AD=E4=BF=A1=E6=81=AF=E6=B5=81=E6=96=87?=
=?UTF-8?q?=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
更新记录: https://github.com/pskdje/bilibili-API-collect/pull/8
---
* 清除多余空白符
* 添加和调整信息流code,修复房管列表数据错误
1002002 来自对信息流地址获取的roomid参数传递 undefined 得出
* 添加 WIDGET_GIFT_STAR_PROCESS
* 添加 PLAYURL_RELOAD
* 添加 LIVE_MULTI_VIEW_NEW_INFO
* 添加 UNIVERSAL_EVENT_GIFT 和 UNIVERSAL_EVENT_GIFT_V2
* 更新 COMMON_NOTICE_DANMAKU
* 添加 POPULAR_RANK_GUIDE_CARD
* 更新 DANMU_MSG
* 添加 INTERACT_WORD_V2 和 ONLINE_RANK_V3
* 更新 ONLINE_RANK_COUNT
---
docs/live/message_stream.md | 1879 ++++++++++++++++++++++++++++++++++-
1 file changed, 1848 insertions(+), 31 deletions(-)
diff --git a/docs/live/message_stream.md b/docs/live/message_stream.md
index 8a13320..be7c355 100644
--- a/docs/live/message_stream.md
+++ b/docs/live/message_stream.md
@@ -30,7 +30,7 @@
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0: 成功
65530: token 错误 (登录错误)
1: 错误
60009: 分区不存在
**(其他错误码有待补充)** |
+| code | num | 返回值 | 0: 成功
1: 错误
65530: token 错误 (登录错误)
60009: 分区不存在
1002002: 房间号错误
**(其他错误码有待补充)** |
| message | str | 错误信息 | 默认为空 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
@@ -339,6 +339,10 @@ while (!s.isclosed()) {
| cmd | str | `DANMU_MSG` | |
| dm_v2 | str | 空串? | |
| info | array | 弹幕信息 | 感谢 [#1084](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1084) 补充 |
+| msg_id | str | 弹幕id? | 极低概率存在 |
+| p_is_ack | bool | | 极低概率存在 |
+| p_msg_type | num | | 极低概率存在 |
+| send_time | num | 发送时间戳 | Unix 毫秒时间戳,极低概率存在 |
`info` 数组:
@@ -960,6 +964,8 @@ type===106
注: 有用户进入直播间、关注主播、分享直播间时触发
+已被`INTERACT_WORD_V2`替换。
+
**JSON消息:**
根对象:
@@ -967,7 +973,7 @@ type===106
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | ------ | --------- |
| cmd | str | `INTERACT_WORD` | |
-| data | obj | 进入直播间的用户的信息 | |
+| data | obj | 用户交互信息 | |
`data` 对象:
@@ -1041,6 +1047,47 @@ type===106
+#### 用户交互消息V2 (INTERACT_WORD_V2)
+
+注: 该cmd已将`INTERACT_WORD`替换
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `INTERACT_WORD_V2` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| dmscore | num | | |
+| pb | str | 使用 base64 编码 protobuf 后的数据 | 解析后数据基本与`INTERACT_WORD`的`data`相同 |
+
+用于解析protobuf数据的proto文件: [#1332(comment)](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1332#issuecomment-3047237367)
+
+注: 先用 base64 解码 `data.pb` 内的字符串为字节数据pb,再使用proto文件解码pb数据。
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "INTERACT_WORD_V2",
+ "data": {
+ "dmscore": 3,
+ "pb": "CJTwwNEBEgpTdGFyU2VhMjQ2IgIDASgBMNWgITispaTDBkDUubHe/jJKLAiv8CkQEhoG55Sf5oCBIKS6ngYopLqeBjCkup4GOKS6ngZAAWDVoCFo9JQRYgB4gZ/v1tmc1qcYmgEAsgHPAQiU8MDRARJYCgpTdGFyU2VhMjQ2EkpodHRwczovL2kwLmhkc2xiLmNvbS9iZnMvZmFjZS8xMDliNzg3YzVmMTEzYzRhM2M3NDE1YmI5YmY2YjgyYmMzM2JjNGUyLmpwZxpnCgbnlJ/mgIEQEhikup4GIKS6ngYopLqeBjCkup4GOP/hAUgBUK/wKWD0lBF6CSNEQzZCNkI5OYIBCSNEQzZCNkI5OYoBCSNEQzZCNkI5OZIBCSNGRkZGRkZGRpoBCSM4MTAwMUY5OSICCAkyALoBAA=="
+ }
+}
+```
+
+
+
#### 上舰通知 (GUARD_BUY)
注: 当有用户购买 舰长 / 提督 / 总督 时
@@ -1703,6 +1750,95 @@ type===106
+#### 礼物星球进度更新 (WIDGET_GIFT_STAR_PROCESS)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `WIDGET_GIFT_STAR_PROCESS` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| start_date | num | 开始时间? | 一个年月日数字,格式 `Number(String(年) + String(月) + String(日))`,详见消息示例 |
+| process_list | arr | 礼物进度列表 | |
+| finished | bool | 是否完成? | |
+| ddl_timestamp | num | 截止时间? | Unix 秒时间戳 |
+| version | num | 更新时间 | Unix 毫秒时间戳 |
+| reward_gift | num | | |
+| reward_gift_img | str | | |
+| reward_gift_name | str | | |
+| level_info | null | (?) | |
+
+`data.process_list` 数组:
+
+| 索引 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| 0 | obj | 礼物需求1 | |
+| 1 | obj | 礼物需求2 | |
+| 2 | obj | 礼物需求3 | |
+
+`data.process_list` 数组中对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| gift_id | num | 礼物id | |
+| gift_img | str | 礼物图片 | |
+| gift_name | str | 礼物名称 | `礼物星球` |
+| completed_num | num | 当前数量 | |
+| target_num | num | 目标数量 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "WIDGET_GIFT_STAR_PROCESS",
+ "data": {
+ "start_date": 20250728,
+ "process_list": [
+ {
+ "gift_id": 33988,
+ "gift_img": "https://s1.hdslb.com/bfs/live/7164c955ec0ed7537491d189b821cc68f1bea20d.png",
+ "gift_name": "礼物星球",
+ "completed_num": 155,
+ "target_num": 1000
+ },
+ {
+ "gift_id": 31036,
+ "gift_img": "https://s1.hdslb.com/bfs/live/8b40d0470890e7d573995383af8a8ae074d485d9.png",
+ "gift_name": "礼物星球",
+ "completed_num": 123,
+ "target_num": 500
+ },
+ {
+ "gift_id": 34382,
+ "gift_img": "https://s1.hdslb.com/bfs/live/3a1cc7ca50da48670d9f7aa6c8d3cd874228f7b0.png",
+ "gift_name": "礼物星球",
+ "completed_num": 0,
+ "target_num": 1
+ }
+ ],
+ "finished": false,
+ "ddl_timestamp": 1754236800,
+ "version": 1754030237877,
+ "reward_gift": 0,
+ "reward_gift_img": "",
+ "reward_gift_name": "",
+ "level_info": null
+ }
+}
+```
+
+
+
#### 礼物连击 (COMBO_SEND)
**JSON消息:**
@@ -2107,7 +2243,7 @@ type===106
查看消息示例:
-
+
```json
{
"cmd": "ROOM_REAL_TIME_MESSAGE_UPDATE",
@@ -2122,10 +2258,406 @@ type===106
+#### 播放链接刷新 (PLAYURL_RELOAD)
+
+注: 该cmd通常不提供播放链接。
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| cmd | str | `PLAYURL_RELOAD` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| reload_option | obj | 刷新选项? | |
+| playurl | obj | 播放链接信息 | |
+
+`data.reload_option` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| reload_stream_name | arr | 空数组? | |
+| reload_format | arr | 空数组? | |
+| scatter | num | | |
+
+`data.playurl` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| cid | num | 直播间真实id | |
+| g_qn_desc | arr | 画质描述 | |
+| stream | arr | 直播流信息 | |
+| p2p_data | obj | P2P信息 | |
+| dolby_qn | null | dolby画质信息? | |
+
+`data.playurl.g_qn_desc` 数组:
+
+| 索引 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| 0 | obj | 首个画质信息 | |
+| … | obj | 多个画质信息 | |
+| i | obj | 最后画质信息 | |
+
+`data.playurl.g_qn_desc` 数组中对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| qn | num | 画质代码 | |
+| desc | str | 画质描述 | |
+| hdr_desc | str | | |
+| attr_desc | null | | |
+| hdr_type | num | | |
+| media_base_desc | null 或 obj | 媒体描述 |
+
+`data.playurl.g_qn_desc[i].media_base_desc` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| detail_desc | obj | 详细? | |
+| brief_desc | obj | 简洁? | |
+
+`data.playurl.g_qn_desc[i].media_base_desc.detail_desc` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| desc | str | 画质描述 | |
+| tag | arr | 画质标签 | 字符串数组,部分画质存在 |
+
+`data.playurl.g_qn_desc[i].media_base_desc.brief_desc` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| desc | str | 画质描述 | |
+| badge | str | 画质描述 | 部分画质存在 |
+
+`data.stream` 数组中对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| protocol_name | str | 协议名称 | |
+| format | arr | 封装格式列表 | |
+
+`data.stream[i].format` 数组中对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| format_name | str | 视频封装格式名称 | |
+| codec | arr | 编码列表 | |
+| master_url | str | | |
+
+`data.stream[i].format[i].codec` 数组中对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| codec_name | str | 视频编码名称 | |
+| current_qn | num | 当前画质代码? | |
+| accept_qn | arr | 允许的画质代码? | 数字数组 |
+| base_url | str | | |
+| url_info | arr | | |
+| hdr_qn | null | | |
+| dolby_type | num | | |
+| attr_name | str | | |
+| hdr_type | num | | |
+| drm | bool | | |
+| drm_key_systems | null | | |
+| video_codecs | obj | 视频编码信息 | 不一定存在 |
+| audio_codecs | obj | 音频编码信息 | 不一定存在 |
+
+`data.stream[i].format[i].codec[i].video_codecs` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| base | str | 编码格式 | |
+
+`data.stream[i].format[i].codec[i].audio_codecs` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| base | str | 编码格式 | |
+
+`data.playurl.p2p_data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| p2p | bool | | |
+| p2p_type | num | | |
+| m_p2p | bool | | |
+| m_servers | null | | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "PLAYURL_RELOAD",
+ "data": {
+ "reload_option": {
+ "reload_stream_name": [],
+ "reload_format": [],
+ "scatter": 3000
+ },
+ "playurl": {
+ "cid": 41682,
+ "g_qn_desc": [
+ {
+ "qn": 30000,
+ "desc": "杜比",
+ "hdr_desc": "",
+ "attr_desc": null,
+ "hdr_type": 0,
+ "media_base_desc": null
+ },
+ {
+ "qn": 20000,
+ "desc": "4K",
+ "hdr_desc": "",
+ "attr_desc": null,
+ "hdr_type": 0,
+ "media_base_desc": null
+ },
+ {
+ "qn": 10000,
+ "desc": "原画",
+ "hdr_desc": "",
+ "attr_desc": null,
+ "hdr_type": 0,
+ "media_base_desc": {
+ "detail_desc": {
+ "desc": "1080P 原画",
+ "tag": [
+ "高帧率"
+ ]
+ },
+ "brief_desc": {
+ "desc": "1080P",
+ "badge": "原画"
+ }
+ }
+ },
+ {
+ "qn": 400,
+ "desc": "蓝光",
+ "hdr_desc": "",
+ "attr_desc": null,
+ "hdr_type": 0,
+ "media_base_desc": null
+ },
+ {
+ "qn": 250,
+ "desc": "超清",
+ "hdr_desc": "",
+ "attr_desc": null,
+ "hdr_type": 0,
+ "media_base_desc": {
+ "detail_desc": {
+ "desc": "720P 超清"
+ },
+ "brief_desc": {
+ "desc": "720P"
+ }
+ }
+ },
+ {
+ "qn": 150,
+ "desc": "高清",
+ "hdr_desc": "",
+ "attr_desc": null,
+ "hdr_type": 0,
+ "media_base_desc": null
+ },
+ {
+ "qn": 80,
+ "desc": "流畅",
+ "hdr_desc": "",
+ "attr_desc": null,
+ "hdr_type": 0,
+ "media_base_desc": null
+ }
+ ],
+ "stream": [
+ {
+ "protocol_name": "http_stream",
+ "format": [
+ {
+ "format_name": "flv",
+ "codec": [
+ {
+ "codec_name": "avc",
+ "current_qn": 10000,
+ "accept_qn": [
+ 10000
+ ],
+ "base_url": "",
+ "url_info": [],
+ "hdr_qn": null,
+ "dolby_type": 0,
+ "attr_name": "",
+ "hdr_type": 0,
+ "drm": false,
+ "drm_key_systems": null,
+ "video_codecs": {
+ "base": "avc1.64002a"
+ },
+ "audio_codecs": {
+ "base": "mp4a.40.2"
+ }
+ },
+ {
+ "codec_name": "hevc",
+ "current_qn": 250,
+ "accept_qn": [
+ 250
+ ],
+ "base_url": "",
+ "url_info": [],
+ "hdr_qn": null,
+ "dolby_type": 0,
+ "attr_name": "",
+ "hdr_type": 0,
+ "drm": false,
+ "drm_key_systems": null,
+ "video_codecs": {
+ "base": "hvc1.1.6.L120"
+ },
+ "audio_codecs": {
+ "base": "mp4a.40.2"
+ }
+ }
+ ],
+ "master_url": ""
+ }
+ ]
+ },
+ {
+ "protocol_name": "http_hls",
+ "format": [
+ {
+ "format_name": "ts",
+ "codec": [
+ {
+ "codec_name": "avc",
+ "current_qn": 10000,
+ "accept_qn": [
+ 10000
+ ],
+ "base_url": "",
+ "url_info": [],
+ "hdr_qn": null,
+ "dolby_type": 0,
+ "attr_name": "",
+ "hdr_type": 0,
+ "drm": false,
+ "drm_key_systems": null,
+ "video_codecs": {
+ "base": "avc1.64002a"
+ },
+ "audio_codecs": {
+ "base": "mp4a.40.2"
+ }
+ },
+ {
+ "codec_name": "hevc",
+ "current_qn": 250,
+ "accept_qn": [
+ 250
+ ],
+ "base_url": "",
+ "url_info": [],
+ "hdr_qn": null,
+ "dolby_type": 0,
+ "attr_name": "",
+ "hdr_type": 0,
+ "drm": false,
+ "drm_key_systems": null,
+ "video_codecs": {
+ "base": "hvc1.1.6.L120"
+ },
+ "audio_codecs": {
+ "base": "mp4a.40.2"
+ }
+ }
+ ],
+ "master_url": ""
+ },
+ {
+ "format_name": "fmp4",
+ "codec": [
+ {
+ "codec_name": "avc",
+ "current_qn": 10000,
+ "accept_qn": [
+ 10000
+ ],
+ "base_url": "",
+ "url_info": [],
+ "hdr_qn": null,
+ "dolby_type": 0,
+ "attr_name": "",
+ "hdr_type": 0,
+ "drm": false,
+ "drm_key_systems": null,
+ "video_codecs": {
+ "base": "avc1.64002a"
+ },
+ "audio_codecs": {
+ "base": "mp4a.40.2"
+ }
+ },
+ {
+ "codec_name": "hevc",
+ "current_qn": 250,
+ "accept_qn": [
+ 250
+ ],
+ "base_url": "",
+ "url_info": [],
+ "hdr_qn": null,
+ "dolby_type": 0,
+ "attr_name": "",
+ "hdr_type": 0,
+ "drm": false,
+ "drm_key_systems": null,
+ "video_codecs": {
+ "base": "hvc1.1.6.L120"
+ },
+ "audio_codecs": {
+ "base": "mp4a.40.2"
+ }
+ }
+ ],
+ "master_url": ""
+ }
+ ]
+ }
+ ],
+ "p2p_data": {
+ "p2p": false,
+ "p2p_type": 0,
+ "m_p2p": false,
+ "m_servers": null
+ },
+ "dolby_qn": null
+ }
+ }
+}
+```
+
+
+
#### 直播间高能榜 (ONLINE_RANK_V2)
注: 直播间高能用户数据刷新
+在线榜已被 `ONLINE_RANK_V3` 替换
+
**JSON消息:**
根对象:
@@ -2140,7 +2672,7 @@ type===106
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | ------ | --------- |
| list | array | 在直播间高能用户中的用户信息 | |
-| rank_type | str | 待调查 | |
+| rank_type | str | 榜单类型 | |
`data.list[n]` 对象:
@@ -2152,6 +2684,8 @@ type===106
| uname | str | 用户名称 | |
| rank | num | 该用户在高能榜中的排名 | |
| guard_level | num | 大航海等级? | |
+| is_mystery | bool | | |
+| uinfo | obj | 用户信息 | |
**示例:**
@@ -2195,6 +2729,45 @@ type===106
+#### 直播间高能榜V3 (ONLINE_RANK_V3)
+
+注: 直播间高能用户数据刷新
+
+替换 `ONLINE_RANK_V2`
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| cmd | str | `ONLINE_RANK_V3` | |
+| data | obj | 数据本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| pb | str | 使用 base64 编码 protobuf 后的数据 | 解析后数据基本与`ONLINE_RANK_V2`的`data`相同 |
+
+用于解析protobuf数据的proto文件: [#1332(comment)](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1332#issuecomment-3055621742)
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "ONLINE_RANK_V3",
+ "data": {
+ "pb": "CgtvbmxpbmVfcmFuaxqqAwi8jscKEkpodHRwczovL2kyLmhkc2xiLmNvbS9iZnMvZmFjZS9iODM3MGMzMGM3ZDg5NDg4YjRjOWYyNWZmMTgyNjc4OTEyYTRiOTA3LmpwZxoCMTIiDOW4jOWwlOWonOWonCgBMAFCwAIIvI7HChKfAgoM5biM5bCU5aic5aicEkpodHRwczovL2kyLmhkc2xiLmNvbS9iZnMvZmFjZS9iODM3MGMzMGM3ZDg5NDg4YjRjOWYyNWZmMTgyNjc4OTEyYTRiOTA3LmpwZypaCgzluIzlsJTlqJzlqJwSSmh0dHBzOi8vaTIuaGRzbGIuY29tL2Jmcy9mYWNlL2I4MzcwYzMwYzdkODk0ODhiNGM5ZjI1ZmYxODI2Nzg5MTJhNGI5MDcuanBnMloKDOW4jOWwlOWonOWonBJKaHR0cHM6Ly9pMi5oZHNsYi5jb20vYmZzL2ZhY2UvYjgzNzBjMzBjN2Q4OTQ4OGI0YzlmMjVmZjE4MjY3ODkxMmE0YjkwNy5qcGc6CyD///////////8BMhcIARITMjAyNS0wNy0yOSAyMzo1OTo1ORrNAwjnyMIDEkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS9mZWNhYTQ3ZTQ2ODljOWVmYTg0MzBiNmViNzRmNTM2ZTMxN2ZmODYwLmpwZxoBOCIV5byl6IC26IC26IC26IC26IC26IC2KAIwAkLbAgjnyMIDEroCChXlvKXogLbogLbogLbogLbogLbogLYSSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlL2ZlY2FhNDdlNDY4OWM5ZWZhODQzMGI2ZWI3NGY1MzZlMzE3ZmY4NjAuanBnKmMKFeW8peiAtuiAtuiAtuiAtuiAtuiAthJKaHR0cHM6Ly9pMS5oZHNsYi5jb20vYmZzL2ZhY2UvZmVjYWE0N2U0Njg5YzllZmE4NDMwYjZlYjc0ZjUzNmUzMTdmZjg2MC5qcGcyYwoV5byl6IC26IC26IC26IC26IC26IC2EkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS9mZWNhYTQ3ZTQ2ODljOWVmYTg0MzBiNmViNzRmNTM2ZTMxN2ZmODYwLmpwZzoLIP///////////wEyFwgCEhMyMDI1LTA4LTAzIDIzOjU5OjU5GvUDCMTF4wQSS2h0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzcxMmMzNjExMzg1ZTJlMGRjYmU4MDc2YmRkM2ViNmYwZWNjNmZkYWYud2VicBoBNiIe5oKg5ZOJ55qE6buR5ZCs5aSn546L5aSq5Zuw6L69KAMwA0L5AgjExeMEEtgCCh7mgqDlk4nnmoTpu5HlkKzlpKfnjovlpKrlm7Dovr0SS2h0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzcxMmMzNjExMzg1ZTJlMGRjYmU4MDc2YmRkM2ViNmYwZWNjNmZkYWYud2VicCptCh7mgqDlk4nnmoTpu5HlkKzlpKfnjovlpKrlm7Dovr0SS2h0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzcxMmMzNjExMzg1ZTJlMGRjYmU4MDc2YmRkM2ViNmYwZWNjNmZkYWYud2VicDJtCh7mgqDlk4nnmoTpu5HlkKzlpKfnjovlpKrlm7Dovr0SS2h0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzcxMmMzNjExMzg1ZTJlMGRjYmU4MDc2YmRkM2ViNmYwZWNjNmZkYWYud2VicDoLIP///////////wEyFwgDEhMyMDI1LTA3LTI2IDIzOjU5OjU5GtkDCLzSxwkSSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzAyMGYxOWEwNTNjZDBkNGZjNGMyYmQzOTlmYWNjMTk3YWJiZWY5N2EuanBnGgE2IhjmuLjmiYvlpb3pl7LnmoTmtYXogIHluIgoBDADQuQCCLzSxwkSwwIKGOa4uOaJi+WlvemXsueahOa1heiAgeW4iBJKaHR0cHM6Ly9pMS5oZHNsYi5jb20vYmZzL2ZhY2UvMDIwZjE5YTA1M2NkMGQ0ZmM0YzJiZDM5OWZhY2MxOTdhYmJlZjk3YS5qcGcqZgoY5ri45omL5aW96Zey55qE5rWF6ICB5biIEkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS8wMjBmMTlhMDUzY2QwZDRmYzRjMmJkMzk5ZmFjYzE5N2FiYmVmOTdhLmpwZzJmChjmuLjmiYvlpb3pl7LnmoTmtYXogIHluIgSSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzAyMGYxOWEwNTNjZDBkNGZjNGMyYmQzOTlmYWNjMTk3YWJiZWY5N2EuanBnOgsg////////////ATIXCAMSEzIwMjUtMDgtMDQgMjM6NTk6NTkakAMIp9P+CRJKaHR0cHM6Ly9pMS5oZHNsYi5jb20vYmZzL2ZhY2UvZTJkYmM4ZTQ5NzA3NzFiNjlhNWEyYzYzMDI0YTg5NzhjMjc3YWNmMi5qcGcaATYiDOmaj+WFieaykOW9sSgFQqkCCKfT/gkSnwIKDOmaj+WFieaykOW9sRJKaHR0cHM6Ly9pMS5oZHNsYi5jb20vYmZzL2ZhY2UvZTJkYmM4ZTQ5NzA3NzFiNjlhNWEyYzYzMDI0YTg5NzhjMjc3YWNmMi5qcGcqWgoM6ZqP5YWJ5rKQ5b2xEkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS9lMmRiYzhlNDk3MDc3MWI2OWE1YTJjNjMwMjRhODk3OGMyNzdhY2YyLmpwZzJaCgzpmo/lhYnmspDlvbESSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlL2UyZGJjOGU0OTcwNzcxYjY5YTVhMmM2MzAyNGE4OTc4YzI3N2FjZjIuanBnOgsg////////////ATIAGrYDCPWvn4sBEkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS80ZTNkYTdmYWJiOWZlMTkyNzRhYmQ0ZTdlYWMyNmQ3MjI4OGQyNmEwLmpwZxoBNiIV5pKS5qyi5YS/55qE5rCU5rOh5YS/KAZCxQII9a+fiwESugIKFeaSkuasouWEv+eahOawlOazoeWEvxJKaHR0cHM6Ly9pMS5oZHNsYi5jb20vYmZzL2ZhY2UvNGUzZGE3ZmFiYjlmZTE5Mjc0YWJkNGU3ZWFjMjZkNzIyODhkMjZhMC5qcGcqYwoV5pKS5qyi5YS/55qE5rCU5rOh5YS/EkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS80ZTNkYTdmYWJiOWZlMTkyNzRhYmQ0ZTdlYWMyNmQ3MjI4OGQyNmEwLmpwZzJjChXmkpLmrKLlhL/nmoTmsJTms6HlhL8SSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzRlM2RhN2ZhYmI5ZmUxOTI3NGFiZDRlN2VhYzI2ZDcyMjg4ZDI2YTAuanBnOgsg////////////ATIAGusDCPTXwbEBEkpodHRwczovL2kxLmhkc2xiLmNvbS9iZnMvZmFjZS8yN2RiOGQ5MTY3ZDRhMmUyMDg0NjUzNDJkOGVmZjQzZWUzMGJiOGNlLmpwZxoBNiIc57OW5b+D6JuL6JuLLeWNg+WNg+azoue6r+WGoCgHMANC8QII9NfBsQESzwIKHOezluW/g+ibi+ibiy3ljYPljYPms6Lnuq/lhqASSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzI3ZGI4ZDkxNjdkNGEyZTIwODQ2NTM0MmQ4ZWZmNDNlZTMwYmI4Y2UuanBnKmoKHOezluW/g+ibi+ibiy3ljYPljYPms6Lnuq/lhqASSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzI3ZGI4ZDkxNjdkNGEyZTIwODQ2NTM0MmQ4ZWZmNDNlZTMwYmI4Y2UuanBnMmoKHOezluW/g+ibi+ibiy3ljYPljYPms6Lnuq/lhqASSmh0dHBzOi8vaTEuaGRzbGIuY29tL2Jmcy9mYWNlLzI3ZGI4ZDkxNjdkNGEyZTIwODQ2NTM0MmQ4ZWZmNDNlZTMwYmI4Y2UuanBnOgsg////////////ATIXCAMSEzIwMjUtMDctMjUgMjM6NTk6NTk="
+ }
+}
+```
+
+
+
#### 直播间高能用户数量 (ONLINE_RANK_COUNT)
**JSON消息:**
@@ -2210,19 +2783,25 @@ type===106
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | ------ | --------- |
-| count | num | 直播间高能用户数量 | |
+| count | num | 直播间高能用户数量 | 存在上限 |
+| count_text | str | 直播间高能用户数量文本 | |
+| online_count | num | 直播间在线用户数量 | 存在上限 |
+| online_count_text | str | 直播间在线用户数量文本 | |
**示例:**
查看消息示例:
-
+
```json
{
- "cmd": "ONLINE_RANK_COUNT",
- "data": {
- "count": 4
- }
+ "cmd": "ONLINE_RANK_COUNT",
+ "data": {
+ "count": 1084,
+ "count_text": "1084",
+ "online_count": 1084,
+ "online_count_text": "1084"
+ }
}
```
@@ -2296,7 +2875,7 @@ type===106
查看消息示例:
-
+
```json
{
"cmd": "ONLINE_RANK_TOP3",
@@ -2339,7 +2918,7 @@ type===106
查看消息示例:
-
+
```json
{
"cmd": "POPULAR_RANK_CHANGED",
@@ -2577,7 +3156,7 @@ type===106
查看消息示例:
-
+
```json
{
"cmd": "LIKE_INFO_V3_CLICK",
@@ -2638,7 +3217,7 @@ type===106
查看消息示例:
-
+
```json
{
"cmd": "LIKE_INFO_V3_UPDATE",
@@ -2688,7 +3267,7 @@ type===106
| wait_num | num | 待调查 | |
`data.awards[n]` 对象:
-
+
| 字段 | 类型 | 内容 | 备注 |
| ---------- | --- | ------ | --------- |
| gift_id | num | 礼物ID | |
@@ -2782,7 +3361,7 @@ type===106
查看消息示例:
-
+
```json
{
"cmd": "POPULARITY_RED_POCKET_NEW",
@@ -2873,10 +3452,10 @@ type===106
| award_pic | str | 礼物图标 URL | |
| award_big_pic | str | 礼物大图 URL | |
| award_price | num | 礼物价值 | |
-
+
查看消息示例:
-
+
```json
{
"cmd": "POPULARITY_RED_POCKET_WINNER_LIST",
@@ -2961,7 +3540,7 @@ type===106
查看消息示例:
-
+
```json
{
"cmd": "WATCHED_CHANGE",
@@ -3032,7 +3611,7 @@ type===106
查看消息示例:
-
+
```json
{
"cmd": "ENTRY_EFFECT",
@@ -3275,7 +3854,7 @@ type===106
查看消息示例:
-
+
```json
{
"cmd": "AREA_RANK_CHANGED",
@@ -3317,19 +3896,28 @@ type===106
| ---------- | --- | ------ | --------- |
| biz_id | num | 待调查 | |
| content_segments | array | 文本分段 | |
-| danmaku_style | obj | 文本样式信息 | |
+| danmaku_style | obj | 文本样式信息 | 可能不存在 |
| danmaku_url | str | 待调查 | |
| dmscore | num | 待调查 | |
-| terminals | array | 待调查 | |
+| terminals | array | 指定显示的终端 | 数字数组 |
`data.content_segments[n]` 数组中的对象
| 字段 | 类型 | 内容 | 备注 |
| ---------- | --- | ------ | --------- |
-| font_color | str | text 字段的十六进制颜色值 | |
-| font_color_dark | str | text 字段的十六进制颜色值 | APP端设置为深色模式时使用 |
-| text | str | 文本 | |
-| type | num | 待调查 | |
+| background_color | arr 或 null | 背景颜色? | 字符串数组,可能不存在 |
+| background_color_dark | arr 或 null | 深色模式背景颜色? | 可能不存在 |
+| font_bold | bool | text 字段是否加粗? | 可能不存在 |
+| font_color | str | text 字段的十六进制颜色值 | |
+| font_color_dark | str | text 字段的十六进制颜色值 | APP端设置为深色模式时使用,可能不存在 |
+| highlight_font_color | str | text 字段高亮部分的十六进制颜色值? | 可能不存在 |
+| highlight_font_color_dark | str | text 字段高亮部分的十六进制颜色值? | 深色模式时使用,可能不存在 |
+| img_height | num | 图片高度 | 可能不存在 |
+| img_url | str | 图片链接 | 可能不存在 |
+| img_width | str | 图片宽度 | 可能不存在 |
+| text | str | 文本 | |
+| type | num | 文本组件类型 | 1:普通文本
2:图片
3:链接 |
+| uri | str | 链接 | 文本组件类型为 `3` 时存在 |
`data.danmaku_style` 对象:
@@ -3400,6 +3988,59 @@ type===106
}
```
+```json
+{
+ "cmd": "COMMON_NOTICE_DANMAKU",
+ "data": {
+ "content_segments": [
+ {
+ "background_color": null,
+ "background_color_dark": null,
+ "font_bold": false,
+ "font_color": "#F294AE",
+ "font_color_dark": "",
+ "highlight_font_color": "",
+ "highlight_font_color_dark": "",
+ "img_height": 0,
+ "img_url": "",
+ "img_width": 0,
+ "text": "疯狂星期五:疯狂任务今日24点结束,请关注任务完成情况~",
+ "type": 1
+ },
+ {
+ "background_color": [
+ "#FA729A"
+ ],
+ "background_color_dark": null,
+ "font_bold": false,
+ "font_color": "#FFFFFF",
+ "font_color_dark": "",
+ "highlight_font_color": "",
+ "highlight_font_color_dark": "",
+ "img_height": 0,
+ "img_url": "",
+ "img_width": 0,
+ "text": "立即查看",
+ "type": 3,
+ "uri": "https://live.bilibili.com/p/html/bilili-page-gift-intro-container/index.html?is_live_half_webview=1&hybrid_rotate_d=1&hybrid_half_ui=1,3,100p,70p,0,0,30,100,12;2,2,375,100p,0,0,30,100,0;3,3,100p,544,0,0,30,100,12;4,2,375,100p,0,0,30,100,0;5,3,100p,70p,0,0,30,100,0;6,3,100p,70p,0,0,30,100,0;7,3,100p,70p,0,0,30,100,0;8,3,100p,70p,0,0,30,100,0&gift_id=32251&roomId=6154037&anchorId=194484313&sendTargetUid=194484313&active_tab=1"
+ }
+ ],
+ "danmaku_style": {
+ "background_color": null,
+ "background_color_dark": null
+ },
+ "dmscore": 1008,
+ "terminals": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5
+ ]
+ }
+}
+```
+
#### 直播间信息更改 (ROOM_CHANGE)
@@ -3602,7 +4243,7 @@ type===106
查看消息示例:
-
+
```json
{
"cmd": "WIDGET_BANNER",
@@ -3872,7 +4513,7 @@ type===106
查看消息示例:
-
+
```json
{
"cmd": "STOP_LIVE_ROOM_LIST",
@@ -4529,8 +5170,8 @@ type===106
```json
{
- cmd: "ROOM_ADMINS",
- uids: [ 898424, 384203692, 1309513, 30816752, 23931549, 223134 ]
+ "cmd": "ROOM_ADMINS",
+ "uids": [ 898424, 384203692, 1309513, 30816752, 23931549, 223134 ]
}
```
@@ -4596,6 +5237,461 @@ type===106
+#### 多个直播视角信息 (LIVE_MULTI_VIEW_NEW_INFO)
+
+部分活动直播间会下发。
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `LIVE_MULTI_VIEW_NEW_INFO` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| title | str | 活动标题 | 活动结束后为`""` |
+| room_id | num | 主直播间id | 活动结束后为`0` |
+| copy_writing | str | 提示文本 | 活动结束后为`""` |
+| bg_image | str | 背景图片 | 活动结束后为`""` |
+| sub_slt_color | str | 切换按钮颜色? | 活动结束后为`""` |
+| sub_bg_color | str | 切换按钮背景颜色? | 活动结束后为`""` |
+| sub_text_color | str | 切换按钮文本颜色? | 活动结束后为`""` |
+| view_type | num | | |
+| room_list | arr | 房间列表 | 不包括“未直播”状态的直播间,活动结束后为`null` |
+| relation_view | arr | 详细关系? | 不包括“未直播”状态的直播间,活动结束后为`null` |
+| view_pattern | num | | |
+| gather_room_list | arr | 空数组? | 活动结束后为`null` |
+
+`data.room_list` 数组中对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| order_id | num | 顺序id | |
+| room_id | num | 直播间id | 似乎是长号 |
+| room_name | str | 主播名称 | |
+| live_status | num | 直播状态 | 1:直播中
2:轮播中 |
+| jump_url | str | 加入直播间的链接 | |
+
+`data.relation_view` 数组中对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| order_id | num | 顺序id | |
+| view_type | num | | |
+| view_id | num | 直播间id | |
+| view_name | str | 主播名称 | |
+| title | str | 直播间标题 | |
+| cover | str | 直播间封面 | |
+| jump_url | str | 加入直播间的链接 | |
+| switch | bool | | |
+| num | num | 看过人数 | |
+| watch_icon | str | 看过图标 | |
+| live_status | num | 直播状态 | 同`data.room_list[i].live_status` |
+| text_small | str | 看过人数文本 | |
+| use_view_vt | bool | | |
+| anchor_face | str | 主播头像 | |
+| match_live_room | bool | | |
+| match_info | null | | |
+| duration | num | | |
+| up_name | str | `""` | |
+| pub_date | str | | |
+| gather_id | num | | |
+| sub_name | str | | |
+
+**示例:**
+
+
+查看响应示例:
+
+```json
+{
+ "cmd": "LIVE_MULTI_VIEW_NEW_INFO",
+ "data": {
+ "title": "战地风云6公开测试",
+ "room_id": 5050,
+ "copy_writing": "更多视角",
+ "bg_image": "https://i0.hdslb.com/bfs/live/edaa9477a1d8325dd0c36c419b6fd5f9646b2419.png",
+ "sub_slt_color": "#FFFFFF",
+ "sub_bg_color": "#333333",
+ "sub_text_color": "#FFFFFF",
+ "view_type": 0,
+ "room_list": [
+ {
+ "order_id": 2,
+ "room_id": 6154037,
+ "room_name": "Asaki大人",
+ "live_status": 2,
+ "jump_url": "https://live.bilibili.com/6154037?broadcast_type=0&is_room_feed=1&live_from=28022"
+ },
+ {
+ "order_id": 4,
+ "room_id": 1521765,
+ "room_name": "南云鸟羽",
+ "live_status": 1,
+ "jump_url": "https://live.bilibili.com/1521765?broadcast_type=0&is_room_feed=1&live_from=28022"
+ },
+ {
+ "order_id": 8,
+ "room_id": 24065,
+ "room_name": "闻香识",
+ "live_status": 1,
+ "jump_url": "https://live.bilibili.com/24065?broadcast_type=0&is_room_feed=1&live_from=28022"
+ },
+ {
+ "order_id": 14,
+ "room_id": 38528,
+ "room_name": "乔伊奥斯托雷",
+ "live_status": 1,
+ "jump_url": "https://live.bilibili.com/38528?broadcast_type=0&is_room_feed=1&live_from=28022"
+ },
+ {
+ "order_id": 15,
+ "room_id": 21263282,
+ "room_name": "Yommyko",
+ "live_status": 2,
+ "jump_url": "https://live.bilibili.com/21263282?broadcast_type=0&is_room_feed=1&live_from=28022"
+ },
+ {
+ "order_id": 16,
+ "room_id": 5513659,
+ "room_name": "狙佬-zuener",
+ "live_status": 1,
+ "jump_url": "https://live.bilibili.com/5513659?broadcast_type=0&is_room_feed=1&live_from=28022"
+ },
+ {
+ "order_id": 18,
+ "room_id": 146007,
+ "room_name": "Kisflow",
+ "live_status": 1,
+ "jump_url": "https://live.bilibili.com/146007?broadcast_type=0&is_room_feed=1&live_from=28022"
+ },
+ {
+ "order_id": 19,
+ "room_id": 1163043,
+ "room_name": "人形鹿头自走炮",
+ "live_status": 1,
+ "jump_url": "https://live.bilibili.com/1163043?broadcast_type=0&is_room_feed=1&live_from=28022"
+ },
+ {
+ "order_id": 20,
+ "room_id": 3343118,
+ "room_name": "版尤黑紫",
+ "live_status": 1,
+ "jump_url": "https://live.bilibili.com/3343118?broadcast_type=0&is_room_feed=1&live_from=28022"
+ },
+ {
+ "order_id": 21,
+ "room_id": 25212992,
+ "room_name": "贝施汀",
+ "live_status": 1,
+ "jump_url": "https://live.bilibili.com/25212992?broadcast_type=0&is_room_feed=1&live_from=28022"
+ },
+ {
+ "order_id": 22,
+ "room_id": 11313,
+ "room_name": "丧心病狂的魔笑",
+ "live_status": 1,
+ "jump_url": "https://live.bilibili.com/11313?broadcast_type=0&is_room_feed=1&live_from=28022"
+ },
+ {
+ "order_id": 24,
+ "room_id": 902302,
+ "room_name": "LF叶绿",
+ "live_status": 1,
+ "jump_url": "https://live.bilibili.com/902302?broadcast_type=0&is_room_feed=1&live_from=28022"
+ }
+ ],
+ "relation_view": [
+ {
+ "order_id": 2,
+ "view_type": 0,
+ "view_id": 6154037,
+ "view_name": "Asaki大人",
+ "title": "猪猪猪",
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/87e0332a5c3c8cd73fa7616045111b90b0199087.jpg",
+ "jump_url": "https://live.bilibili.com/6154037?broadcast_type=0&is_room_feed=1&live_from=28022",
+ "switch": true,
+ "num": 2305,
+ "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "live_status": 2,
+ "text_small": "2305",
+ "use_view_vt": false,
+ "anchor_face": "https://i1.hdslb.com/bfs/face/84a861facfa041b46f7a30897e9ed3f2e05e0519.jpg",
+ "match_live_room": false,
+ "match_info": null,
+ "duration": 0,
+ "up_name": "",
+ "pub_date": "",
+ "gather_id": 0,
+ "sub_name": ""
+ },
+ {
+ "order_id": 4,
+ "view_type": 0,
+ "view_id": 1521765,
+ "view_name": "南云鸟羽",
+ "title": "【战地6B测】下午四点开!聊天摸鱼",
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/a8216e0b5469949fcbcc72458c7955b562838a89.jpg",
+ "jump_url": "https://live.bilibili.com/1521765?broadcast_type=0&is_room_feed=1&live_from=28022",
+ "switch": true,
+ "num": 36987,
+ "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "live_status": 1,
+ "text_small": "3.6万",
+ "use_view_vt": false,
+ "anchor_face": "https://i1.hdslb.com/bfs/face/f4744b6346ddaccb4642a0f05f25d798fb5d8474.jpg",
+ "match_live_room": false,
+ "match_info": null,
+ "duration": 0,
+ "up_name": "",
+ "pub_date": "",
+ "gather_id": 0,
+ "sub_name": ""
+ },
+ {
+ "order_id": 8,
+ "view_type": 0,
+ "view_id": 24065,
+ "view_name": "闻香识",
+ "title": "4点战地6!!",
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/6e309306fcb7bdeeb5e72f8b4c2d1ed7ba7e1e29.jpg",
+ "jump_url": "https://live.bilibili.com/24065?broadcast_type=0&is_room_feed=1&live_from=28022",
+ "switch": true,
+ "num": 32408,
+ "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "live_status": 1,
+ "text_small": "3.2万",
+ "use_view_vt": false,
+ "anchor_face": "https://i0.hdslb.com/bfs/face/df21869b067816e03c517bc774f6ebf5a86563de.jpg",
+ "match_live_room": false,
+ "match_info": null,
+ "duration": 0,
+ "up_name": "",
+ "pub_date": "",
+ "gather_id": 0,
+ "sub_name": ""
+ },
+ {
+ "order_id": 14,
+ "view_type": 0,
+ "view_id": 38528,
+ "view_name": "乔伊奥斯托雷",
+ "title": "[战地六B测]捞薯条,吃薯条,谁是薯条?",
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/a89ebcd8b4f3e841ddb7cb53fbdc6013a9956013.jpg",
+ "jump_url": "https://live.bilibili.com/38528?broadcast_type=0&is_room_feed=1&live_from=28022",
+ "switch": true,
+ "num": 3660,
+ "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "live_status": 1,
+ "text_small": "3660",
+ "use_view_vt": false,
+ "anchor_face": "https://i1.hdslb.com/bfs/face/82ef4b09c26751649da2a48960d23fd87baa6db5.jpg",
+ "match_live_room": false,
+ "match_info": null,
+ "duration": 0,
+ "up_name": "",
+ "pub_date": "",
+ "gather_id": 0,
+ "sub_name": ""
+ },
+ {
+ "order_id": 15,
+ "view_type": 0,
+ "view_id": 21263282,
+ "view_name": "Yommyko",
+ "title": "和广东双马尾搏斗!禁闭求生2",
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/86ac43cf0c1db277b92a5e83324558ceab2bb108.jpg",
+ "jump_url": "https://live.bilibili.com/21263282?broadcast_type=0&is_room_feed=1&live_from=28022",
+ "switch": true,
+ "num": 1583,
+ "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "live_status": 2,
+ "text_small": "1583",
+ "use_view_vt": false,
+ "anchor_face": "https://i2.hdslb.com/bfs/face/9718e4c59c2cfcc9f8b747ad8ea5006fad78a76a.jpg",
+ "match_live_room": false,
+ "match_info": null,
+ "duration": 0,
+ "up_name": "",
+ "pub_date": "",
+ "gather_id": 0,
+ "sub_name": ""
+ },
+ {
+ "order_id": 16,
+ "view_type": 0,
+ "view_id": 5513659,
+ "view_name": "狙佬-zuener",
+ "title": "战地6!开玩!七年之约已到!",
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/b1779156686031460633d31362205456d1bb53df.jpg",
+ "jump_url": "https://live.bilibili.com/5513659?broadcast_type=0&is_room_feed=1&live_from=28022",
+ "switch": true,
+ "num": 30035,
+ "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "live_status": 1,
+ "text_small": "3.0万",
+ "use_view_vt": false,
+ "anchor_face": "https://i0.hdslb.com/bfs/face/bdb4b214d3446aca7c11b408ae6f35c89f52a5cc.jpg",
+ "match_live_room": false,
+ "match_info": null,
+ "duration": 0,
+ "up_name": "",
+ "pub_date": "",
+ "gather_id": 0,
+ "sub_name": ""
+ },
+ {
+ "order_id": 18,
+ "view_type": 0,
+ "view_id": 146007,
+ "view_name": "Kisflow",
+ "title": "战地6 BETA 战场老登职业哥",
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/0007988a93c06215f0ffd96f7a4e3834d1396408.jpg",
+ "jump_url": "https://live.bilibili.com/146007?broadcast_type=0&is_room_feed=1&live_from=28022",
+ "switch": true,
+ "num": 7839,
+ "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "live_status": 1,
+ "text_small": "7839",
+ "use_view_vt": false,
+ "anchor_face": "https://i1.hdslb.com/bfs/face/5761dbf3f03b1a31ad8a6aec01452c97e93c16c0.jpg",
+ "match_live_room": false,
+ "match_info": null,
+ "duration": 0,
+ "up_name": "",
+ "pub_date": "",
+ "gather_id": 0,
+ "sub_name": ""
+ },
+ {
+ "order_id": 19,
+ "view_type": 0,
+ "view_id": 1163043,
+ "view_name": "人形鹿头自走炮",
+ "title": "神秘远光84男",
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/cea622fe174d8c3fd26e58ea5a7e3b709fd8aee4.jpg",
+ "jump_url": "https://live.bilibili.com/1163043?broadcast_type=0&is_room_feed=1&live_from=28022",
+ "switch": true,
+ "num": 20796,
+ "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "live_status": 1,
+ "text_small": "2.0万",
+ "use_view_vt": false,
+ "anchor_face": "https://i2.hdslb.com/bfs/face/259c1f3b485ad5e2182446246fccb87114701ed8.jpg",
+ "match_live_room": false,
+ "match_info": null,
+ "duration": 0,
+ "up_name": "",
+ "pub_date": "",
+ "gather_id": 0,
+ "sub_name": ""
+ },
+ {
+ "order_id": 20,
+ "view_type": 0,
+ "view_id": 3343118,
+ "view_name": "版尤黑紫",
+ "title": "爽玩!战地6B测",
+ "cover": "https://i0.hdslb.com/bfs/live/user_cover/039be5f223d26d4108941f1f056ee5842e3e5720.jpg",
+ "jump_url": "https://live.bilibili.com/3343118?broadcast_type=0&is_room_feed=1&live_from=28022",
+ "switch": true,
+ "num": 1704,
+ "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "live_status": 1,
+ "text_small": "1704",
+ "use_view_vt": false,
+ "anchor_face": "https://i2.hdslb.com/bfs/face/3cdcbc8945d18575279ac55c75f4da9f0a7dbc9e.jpg",
+ "match_live_room": false,
+ "match_info": null,
+ "duration": 0,
+ "up_name": "",
+ "pub_date": "",
+ "gather_id": 0,
+ "sub_name": ""
+ },
+ {
+ "order_id": 21,
+ "view_type": 0,
+ "view_id": 25212992,
+ "view_name": "贝施汀",
+ "title": "战地6还没开服,先直播剪会儿视频聊聊天",
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/fb0227b71dca8555588c9c6c0af329cf250123a9.jpg",
+ "jump_url": "https://live.bilibili.com/25212992?broadcast_type=0&is_room_feed=1&live_from=28022",
+ "switch": true,
+ "num": 2207,
+ "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "live_status": 1,
+ "text_small": "2207",
+ "use_view_vt": false,
+ "anchor_face": "https://i0.hdslb.com/bfs/face/7242e856562166a27e8be4a184e4cddbaed8177f.jpg",
+ "match_live_room": false,
+ "match_info": null,
+ "duration": 0,
+ "up_name": "",
+ "pub_date": "",
+ "gather_id": 0,
+ "sub_name": ""
+ },
+ {
+ "order_id": 22,
+ "view_type": 0,
+ "view_id": 11313,
+ "view_name": "丧心病狂的魔笑",
+ "title": "等待测试开启!但是先直播周边开箱!",
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/48fb912da0f665427eb230ef3273defdb1a33fa4.jpg",
+ "jump_url": "https://live.bilibili.com/11313?broadcast_type=0&is_room_feed=1&live_from=28022",
+ "switch": true,
+ "num": 2924,
+ "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "live_status": 1,
+ "text_small": "2924",
+ "use_view_vt": false,
+ "anchor_face": "https://i2.hdslb.com/bfs/face/e672848bc2718b79ca2f44eb447e84282c6f806d.jpg",
+ "match_live_room": false,
+ "match_info": null,
+ "duration": 0,
+ "up_name": "",
+ "pub_date": "",
+ "gather_id": 0,
+ "sub_name": ""
+ },
+ {
+ "order_id": 24,
+ "view_type": 0,
+ "view_id": 902302,
+ "view_name": "LF叶绿",
+ "title": "《田 野 打 架 6》",
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/3b18086f9e70f719917c5d4561c25defdd13cd82.jpg",
+ "jump_url": "https://live.bilibili.com/902302?broadcast_type=0&is_room_feed=1&live_from=28022",
+ "switch": true,
+ "num": 1897,
+ "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "live_status": 1,
+ "text_small": "1897",
+ "use_view_vt": false,
+ "anchor_face": "https://i2.hdslb.com/bfs/face/5e3570095f5af77d20188ea45d45da216a31e52d.jpg",
+ "match_live_room": false,
+ "match_info": null,
+ "duration": 0,
+ "up_name": "",
+ "pub_date": "",
+ "gather_id": 0,
+ "sub_name": ""
+ }
+ ],
+ "view_pattern": 1,
+ "gather_room_list": []
+ }
+}
+```
+
+
+
#### 天选时刻合法检查 (ANCHOR_LOT_CHECKSTATUS)
**示例:**
@@ -4904,6 +6000,682 @@ type===106
+#### 连线礼物信息 (UNIVERSAL_EVENT_GIFT)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `UNIVERSAL_EVENT_GIFT` | |
+| data | obj | 信息本体 | |
+| msg_id | str | | |
+| p_is_ack | bool | | |
+| p_msg_type | num | | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| anchor_uid | num | 主播uid | |
+| info | obj | 连线信息 | |
+| room_id | num | 直播间id | |
+
+`data.info` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| biz_session_id | str | 连线会话id? | |
+| business_label | str | | |
+| interact_channel_id | str | 频道id? | |
+| interact_connect_type | num | | |
+| interact_max_users | num | 最大连线数? | |
+| interact_mode | obj | | |
+| interact_template | obj | 展示模板 | |
+| invoking_time | num | | |
+| members | arr | 连线成员 | 参见 `UNIVERSAL_EVENT_GIFT_V2` 的 `data.members` ,缺少部分字段 |
+| members_version | num | | |
+| multi_conn_info | obj | 连线信息 | |
+| room_owner | num | 发起者uid | |
+| room_start_at | str | | |
+| room_start_at_ts | num | | |
+| room_status | num | | |
+| session_start_at | str | | |
+| session_start_at_ts | num | | |
+| session_status | num | | |
+| system_time_unix | num | 服务器时间戳 | Unix 秒时间戳 |
+| trace_id | str | | |
+| version | num | 数据版本 | Unix 毫秒时间戳 |
+
+`data.info.interact_mode` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| apply_timeout | num | 超时? | |
+| interact_mode_type | num | | |
+| invite_timeout | num | 邀请超时? | |
+| join_types | arr | 加入类型? | 数字数组 |
+| position_mode | num | | |
+
+`data.info.interact_template` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| is_variable_layout | bool | 布局是否可变? | |
+| layout_data | obj | 布局信息 | |
+| layout_id | str | 布局id | |
+| layout_list | null | ? | |
+| show_interact_ui | bool | 显示交互UI? | |
+| template_id | str | 模板id? | |
+
+`data.info.interact_template.layout_data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| best_area_show_pos | num | | |
+| cells | arr | 具体布局信息 | |
+| default_cell | obj | | |
+| height | num | | |
+| rtc_resolution | obj | | |
+| width | num | | |
+
+`data.info.interact_template.layout_data.cells` 数组中对象:
+
+与 `data.info.interact_template.layout_data.default_cell` 对象相同
+
+`data.info.interact_template.layout_data.default_cell` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| can_zoom | num | | |
+| default_open | num | | |
+| height | num | | |
+| mobile_avatar_size | num | | |
+| mobile_font_size | num | | |
+| pc_web_avatar_size | num | | |
+| pc_web_font_size | num | | |
+| position | num | 定位? | |
+| width | num | | |
+| x | num | | |
+| y | num | | |
+| z_index | num | | |
+
+`data.info.interact_template.layout_data.rtc_resolution` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code_rate_init | num | | |
+| code_rate_max | num | | |
+| code_rate_min | num | | |
+| horizontal_height | num | | |
+| horizontal_width | num | | |
+| vertical_height | num | | |
+| vertical_width | num | | |
+
+`data.info.members` 数组中对象:
+
+参见 [`UNIVERSAL_EVENT_GIFT_V2`](#连线礼物信息v2-universal_event_gift_v2) 的 `data.members` 数组中对象,本cmd缺少部分字段。
+
+`data.info.multi_conn_info` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| room_owner | num | 发起人uid | |
+| scores | arr | 礼物信息 | |
+| show_score | num | 是否显示? | |
+
+`data.info.multi_conn_info.scores` 数组中对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| price | num | 礼物累计价值 | CNY × 100 |
+| price_text | str | 礼物累计价值文本 | |
+| uid | num | 对应主播uid | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "UNIVERSAL_EVENT_GIFT",
+ "data": {
+ "anchor_uid": 1950658,
+ "info": {
+ "biz_session_id": "17545643420522077733317",
+ "business_label": "universal_multi_conn",
+ "interact_channel_id": "4679025140177408",
+ "interact_connect_type": 0,
+ "interact_max_users": 9,
+ "interact_mode": {
+ "apply_timeout": 20,
+ "interact_mode_type": 0,
+ "invite_timeout": 30,
+ "join_types": [
+ 1,
+ 2
+ ],
+ "position_mode": 0
+ },
+ "interact_template": {
+ "is_variable_layout": true,
+ "layout_data": {
+ "best_area_show_pos": 0,
+ "cells": [
+ {
+ "can_zoom": 2,
+ "default_open": 0,
+ "height": 48,
+ "mobile_avatar_size": 64,
+ "mobile_font_size": 0,
+ "pc_web_avatar_size": 112,
+ "pc_web_font_size": 0,
+ "position": 0,
+ "width": 30,
+ "x": 0,
+ "y": 0,
+ "z_index": 0
+ },
+ {
+ "can_zoom": 1,
+ "default_open": 0,
+ "height": 0,
+ "mobile_avatar_size": 0,
+ "mobile_font_size": 0,
+ "pc_web_avatar_size": 0,
+ "pc_web_font_size": 0,
+ "position": 1,
+ "width": 0,
+ "x": 30,
+ "y": 0,
+ "z_index": 0
+ },
+ {
+ "can_zoom": 1,
+ "default_open": 0,
+ "height": 0,
+ "mobile_avatar_size": 0,
+ "mobile_font_size": 0,
+ "pc_web_avatar_size": 0,
+ "pc_web_font_size": 0,
+ "position": 2,
+ "width": 0,
+ "x": 45,
+ "y": 0,
+ "z_index": 0
+ },
+ {
+ "can_zoom": 1,
+ "default_open": 0,
+ "height": 0,
+ "mobile_avatar_size": 0,
+ "mobile_font_size": 0,
+ "pc_web_avatar_size": 0,
+ "pc_web_font_size": 0,
+ "position": 3,
+ "width": 0,
+ "x": 30,
+ "y": 16,
+ "z_index": 0
+ },
+ {
+ "can_zoom": 1,
+ "default_open": 0,
+ "height": 0,
+ "mobile_avatar_size": 0,
+ "mobile_font_size": 0,
+ "pc_web_avatar_size": 0,
+ "pc_web_font_size": 0,
+ "position": 4,
+ "width": 0,
+ "x": 45,
+ "y": 16,
+ "z_index": 0
+ },
+ {
+ "can_zoom": 1,
+ "default_open": 0,
+ "height": 0,
+ "mobile_avatar_size": 0,
+ "mobile_font_size": 0,
+ "pc_web_avatar_size": 0,
+ "pc_web_font_size": 0,
+ "position": 5,
+ "width": 0,
+ "x": 30,
+ "y": 32,
+ "z_index": 0
+ },
+ {
+ "can_zoom": 1,
+ "default_open": 0,
+ "height": 0,
+ "mobile_avatar_size": 0,
+ "mobile_font_size": 0,
+ "pc_web_avatar_size": 0,
+ "pc_web_font_size": 0,
+ "position": 6,
+ "width": 0,
+ "x": 45,
+ "y": 32,
+ "z_index": 0
+ }
+ ],
+ "default_cell": {
+ "can_zoom": 0,
+ "default_open": 1,
+ "height": 16,
+ "mobile_avatar_size": 40,
+ "mobile_font_size": 10,
+ "pc_web_avatar_size": 72,
+ "pc_web_font_size": 14,
+ "position": 0,
+ "width": 15,
+ "x": 0,
+ "y": 0,
+ "z_index": 0
+ },
+ "height": 48,
+ "rtc_resolution": {
+ "code_rate_init": 500,
+ "code_rate_max": 700,
+ "code_rate_min": 375,
+ "horizontal_height": 400,
+ "horizontal_width": 500,
+ "vertical_height": 576,
+ "vertical_width": 360
+ },
+ "width": 60
+ },
+ "layout_id": "left1_right6",
+ "layout_list": null,
+ "show_interact_ui": true,
+ "template_id": "multi_conn_grid"
+ },
+ "invoking_time": 1,
+ "members": [
+ {
+ "face": "https://i1.hdslb.com/bfs/face/2ddb513f600c203f21aefb9725ab0eb84f093943.jpg",
+ "gender": 0,
+ "join_time": 1754564992,
+ "link_id": "44479117",
+ "position": 0,
+ "room_id": 41682,
+ "uid": 1950658,
+ "uname": "早稻叽"
+ },
+ {
+ "face": "https://i1.hdslb.com/bfs/face/5958bb6814f25d832775ca37043d38f893b4a478.jpg",
+ "gender": -1,
+ "join_time": 1754564347,
+ "link_id": "44478459",
+ "position": 1,
+ "room_id": 26376408,
+ "uid": 2077733317,
+ "uname": "烛不遥"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/7c862b4ad1a29cdd2b849bcea3c3812b67770d21.jpg",
+ "gender": 0,
+ "join_time": 1754564347,
+ "link_id": "44478460",
+ "position": 2,
+ "room_id": 1774970222,
+ "uid": 1035559935,
+ "uname": "新砂Athia"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/81c1f45b45958c19523bb7cbae7fc3fa99b4aae1.jpg",
+ "gender": -1,
+ "join_time": 1754564361,
+ "link_id": "44478500",
+ "position": 3,
+ "room_id": 31361500,
+ "uid": 3546581471070432,
+ "uname": "颂温暖_Swanna"
+ },
+ {
+ "face": "https://i2.hdslb.com/bfs/face/eceb8fa58c41b7cd733bebafcd7c1f3e33b37b07.jpg",
+ "gender": 0,
+ "join_time": 1754564385,
+ "link_id": "44478528",
+ "position": 4,
+ "room_id": 1937830041,
+ "uid": 3546768203582225,
+ "uname": "暴躁小辣jo"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/12c1cd0df2ee6e6bb09b279b0553cdc9ae4af4f0.jpg",
+ "gender": -1,
+ "join_time": 1754564774,
+ "link_id": "44478875",
+ "position": 5,
+ "room_id": 23090250,
+ "uid": 475912512,
+ "uname": "抵抗Resistance"
+ }
+ ],
+ "members_version": 3974722551,
+ "multi_conn_info": {
+ "room_owner": 2077733317,
+ "scores": [
+ {
+ "price": 82900,
+ "price_text": "829",
+ "uid": 1950658
+ },
+ {
+ "price": 21200,
+ "price_text": "212",
+ "uid": 2077733317
+ },
+ {
+ "price": 30400,
+ "price_text": "304",
+ "uid": 1035559935
+ },
+ {
+ "price": 675600,
+ "price_text": "6756",
+ "uid": 3546581471070432
+ },
+ {
+ "price": 96800,
+ "price_text": "968",
+ "uid": 3546768203582225
+ },
+ {
+ "price": 79200,
+ "price_text": "792",
+ "uid": 475912512
+ }
+ ],
+ "show_score": 1
+ },
+ "room_owner": 2077733317,
+ "room_start_at": "",
+ "room_start_at_ts": 0,
+ "room_status": 1,
+ "session_start_at": "",
+ "session_start_at_ts": 0,
+ "session_status": 1,
+ "system_time_unix": 1754568295,
+ "trace_id": "",
+ "version": 1754568295428
+ },
+ "room_id": 41682
+ },
+ "msg_id": "34610565842749442:1000:1000",
+ "p_is_ack": true,
+ "p_msg_type": 1,
+ "send_time": 1754568295441
+}
+```
+
+
+
+#### 连线礼物信息V2 (UNIVERSAL_EVENT_GIFT_V2)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `UNIVERSAL_EVENT_GIFT_V2` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| biz_session_id | str | 连线会话id? | |
+| interact_channel_id | str | 频道id? | |
+| interact_template | obj | 交互模板信息 | |
+| members | arr | 连线成员 | |
+| stream_control | null | | |
+| version | num | 数据版本 | Unix 毫秒时间戳 |
+| session_status | num | | |
+| business_label | str | | |
+| invoking_time | num | | |
+| members_version | num | | |
+| room_status | num | | |
+| system_time_unix | num | 服务器时间戳 | Unix 秒时间戳 |
+| room_owner | num | 发起人uid | |
+| session_start_at | str | 会话开始时间 | |
+| session_start_at_ts | num | 会话经过时间 | |
+| room_start_at | str | 当前直播间加入会话时间 | |
+| room_start_at_ts | num | 当前直播间自加入会话开始经过的时间 | |
+| trace_id | str | 追踪id? | |
+| biz_extra_data | obj | | |
+| channel_users | arr | 当前连线频道内uid列表 | |
+
+`data.interact_template` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| template_id | str | 模板id? | |
+| show_interact_ui | bool | 显示交互UI? | |
+| layout_id | str | 样式id? | |
+
+`data.members` 数组中对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| uid | num | 连线主播uid | |
+| uname | str | 连线主播名称 | |
+| face | str | 连线主播头像 | |
+| position | num | 位置? | |
+| join_time | num | 加入时间 | Unix 秒时间戳 |
+| link_id | str | | |
+| gender | num | | |
+| room_id | num | 连线主播直播间id | |
+| fans_num | num | | |
+| display_name | str | 显示名称 | |
+| biz_extra_data | obj | | |
+| join_time_ts | num | | |
+
+`data.members[i].biz_extra_data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| multi_conn | obj | | |
+
+`data.members[i].biz_extra_data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| price | num | 礼物累计价值 | CNY × 100 |
+| price_text | str | 礼物累计价值文本 | |
+
+`data.biz_extra_data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| multi_conn | obj | | |
+
+`data.biz_extra_data.multi_conn` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| show_score | num | | |
+| support_full_zoom | num | | |
+
+`data.channel_users` 数组:
+
+| 索引 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| 0 | num | 主播uid | |
+| … | num | 主播uid | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "UNIVERSAL_EVENT_GIFT_V2",
+ "data": {
+ "biz_session_id": "17545643420522077733317",
+ "interact_channel_id": "4679025140177408",
+ "interact_template": {
+ "template_id": "multi_conn_grid",
+ "show_interact_ui": true,
+ "layout_id": "left1_right6"
+ },
+ "members": [
+ {
+ "uid": 1950658,
+ "uname": "早稻叽",
+ "face": "https://i1.hdslb.com/bfs/face/2ddb513f600c203f21aefb9725ab0eb84f093943.jpg",
+ "position": 0,
+ "join_time": 1754564992,
+ "link_id": "44479117",
+ "gender": 0,
+ "room_id": 41682,
+ "fans_num": 0,
+ "display_name": "本房主播",
+ "biz_extra_data": {
+ "multi_conn": {
+ "price": 82900,
+ "price_text": "829"
+ }
+ },
+ "join_time_ts": 0
+ },
+ {
+ "uid": 2077733317,
+ "uname": "烛不遥",
+ "face": "https://i1.hdslb.com/bfs/face/5958bb6814f25d832775ca37043d38f893b4a478.jpg",
+ "position": 1,
+ "join_time": 1754564347,
+ "link_id": "44478459",
+ "gender": -1,
+ "room_id": 26376408,
+ "fans_num": 0,
+ "display_name": "烛不遥",
+ "biz_extra_data": {
+ "multi_conn": {
+ "price": 21200,
+ "price_text": "212"
+ }
+ },
+ "join_time_ts": 0
+ },
+ {
+ "uid": 1035559935,
+ "uname": "新砂Athia",
+ "face": "https://i0.hdslb.com/bfs/face/7c862b4ad1a29cdd2b849bcea3c3812b67770d21.jpg",
+ "position": 2,
+ "join_time": 1754564347,
+ "link_id": "44478460",
+ "gender": 0,
+ "room_id": 1774970222,
+ "fans_num": 0,
+ "display_name": "新砂Athia",
+ "biz_extra_data": {
+ "multi_conn": {
+ "price": 30400,
+ "price_text": "304"
+ }
+ },
+ "join_time_ts": 0
+ },
+ {
+ "uid": 3546581471070432,
+ "uname": "颂温暖_Swanna",
+ "face": "https://i0.hdslb.com/bfs/face/81c1f45b45958c19523bb7cbae7fc3fa99b4aae1.jpg",
+ "position": 3,
+ "join_time": 1754564361,
+ "link_id": "44478500",
+ "gender": -1,
+ "room_id": 31361500,
+ "fans_num": 0,
+ "display_name": "颂温暖_Swanna",
+ "biz_extra_data": {
+ "multi_conn": {
+ "price": 675600,
+ "price_text": "6756"
+ }
+ },
+ "join_time_ts": 0
+ },
+ {
+ "uid": 3546768203582225,
+ "uname": "暴躁小辣jo",
+ "face": "https://i2.hdslb.com/bfs/face/eceb8fa58c41b7cd733bebafcd7c1f3e33b37b07.jpg",
+ "position": 4,
+ "join_time": 1754564385,
+ "link_id": "44478528",
+ "gender": 0,
+ "room_id": 1937830041,
+ "fans_num": 0,
+ "display_name": "暴躁小辣jo",
+ "biz_extra_data": {
+ "multi_conn": {
+ "price": 96800,
+ "price_text": "968"
+ }
+ },
+ "join_time_ts": 0
+ },
+ {
+ "uid": 475912512,
+ "uname": "抵抗Resistance",
+ "face": "https://i0.hdslb.com/bfs/face/12c1cd0df2ee6e6bb09b279b0553cdc9ae4af4f0.jpg",
+ "position": 5,
+ "join_time": 1754564774,
+ "link_id": "44478875",
+ "gender": -1,
+ "room_id": 23090250,
+ "fans_num": 0,
+ "display_name": "抵抗Resistance",
+ "biz_extra_data": {
+ "multi_conn": {
+ "price": 79200,
+ "price_text": "792"
+ }
+ },
+ "join_time_ts": 0
+ }
+ ],
+ "stream_control": null,
+ "version": 1754568295421,
+ "session_status": 1,
+ "business_label": "universal_multi_conn",
+ "invoking_time": 2,
+ "members_version": 1262102210,
+ "room_status": 1,
+ "system_time_unix": 1754568295,
+ "room_owner": 2077733317,
+ "session_start_at": "2025-08-07 18:59:06",
+ "session_start_at_ts": 3949,
+ "room_start_at": "2025-08-07 19:09:52",
+ "room_start_at_ts": 3303,
+ "trace_id": "55df19c042f09f5c625d7b8b60689496",
+ "biz_extra_data": {
+ "multi_conn": {
+ "show_score": 1,
+ "support_full_zoom": 2
+ }
+ },
+ "channel_users": [
+ 1950658,
+ 2077733317,
+ 1035559935,
+ 3546581471070432,
+ 3546768203582225,
+ 475912512
+ ]
+ }
+}
+```
+
+
+
#### ??? (PLAY_TOGETHER)
**示例:**
@@ -5159,6 +6931,51 @@ type===106
+#### 冲榜提示卡 (POPULAR_RANK_GUIDE_CARD)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `POPULAR_RANK_GUIDE_CARD` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| ruid | num | 主播uid | |
+| title | str | 提示标题 | |
+| sub_text | str | 提示副标题 | |
+| icon_img | str | 提示卡图标 | 主播头像 |
+| gift_id | num | 礼物id | |
+| countdown | num | 显示时间 | |
+| popup_title | str | 提示文本 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "POPULAR_RANK_GUIDE_CARD",
+ "data": {
+ "ruid": 194484313,
+ "title": "目前人气榜NO.1",
+ "sub_text": "帮我投喂人气票冲榜吧~",
+ "icon_img": "https://i1.hdslb.com/bfs/face/84a861facfa041b46f7a30897e9ed3f2e05e0519.jpg",
+ "gift_id": 33988,
+ "countdown": 10,
+ "popup_title": "投喂一个人气票帮助主播打榜~"
+ }
+}
+```
+
+
+
#### ??? (RECALL_DANMU_MSG)
**JSON消息:**
From bdc05a371b42c983c4ab30390d81da60ccfc70ea Mon Sep 17 00:00:00 2001
From: pskdje <77605497+pskdje@users.noreply.github.com>
Date: Fri, 22 Aug 2025 18:45:07 +0800
Subject: [PATCH 3/6] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E2=80=9C=E7=9B=B4?=
=?UTF-8?q?=E6=92=AD=E6=95=B0=E6=8D=AE=E2=80=9D=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
添加“获取直播场次的直播数据”接口
添加“获取直播表现”接口
---
docs/live/live_data.md | 183 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 183 insertions(+)
create mode 100644 docs/live/live_data.md
diff --git a/docs/live/live_data.md b/docs/live/live_data.md
new file mode 100644
index 0000000..5cec881
--- /dev/null
+++ b/docs/live/live_data.md
@@ -0,0 +1,183 @@
+# 直播数据
+
+## 获取直播场次的直播数据
+
+> https://api.live.bilibili.com/xlive/app-blink/v1/live/StopLiveData
+
+*请求方法: GET*
+
+认证方式: Cookie (SESSDATA)
+
+只能获取自己的直播数据。最好在直播结束时立即请求,否则直播时长可能不准确。
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | --- | ---- | ----- | --- |
+| live_key | str | 标记直播场次的key | 必要 | 若不提供将会获得无效数据 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0:成功
-101:未登录 |
+| message | str | 提示信息 | 成功时为`"0"` |
+| ttl | num | `1` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| LiveTime | num | 该直播场次的直播时长 | 单位:秒,直播结束后还会增长 |
+| AddFans | num | 该直播场次的新增粉丝 | |
+| HamsterRmb | num | 该直播场次的收益 | |
+| NewFansClub | num | 该直播场次新获得粉丝勋章数量 | |
+| DanmuNum | num | 该直播场次的弹幕条数 | |
+| MaxOnline | num | 该直播场次的最大在线? | [需要验证] |
+| WatchedCount | num | 该直播场次的看过人数 | |
+
+**示例:**
+
+获取自己的直播数据
+
+```shell
+curl 'https://api.live.bilibili.com/xlive/app-blink/v1/live/StopLiveData?live_key=634808443264569139' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "LiveTime": 77603,
+ "AddFans": 0,
+ "HamsterRmb": 0,
+ "NewFansClub": 0,
+ "DanmuNum": 3,
+ "MaxOnline": 13,
+ "WatchedCount": 2
+ }
+}
+```
+
+
+
+## 获取直播表现
+
+> https://api.live.bilibili.com/xlive/app-blink/v1/date/Overview
+
+*请求方法: GET*
+
+认证方式: Cookie (SESSDATA)
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0:成功
-101:未登录 |
+| message | str | 提示信息 | 成功时为`"0"` |
+| ttl | num | `1` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| graph | arr | 图表数据 | 在界面显示为雷达图 |
+| propose | null | (?) | |
+
+`data.graph` 数组:
+
+| 索引 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| 0 | obj | 数据类别 | |
+| … | obj | 数据类别 | |
+
+`data.graph` 数组中对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| name | str | 显示的名称 | |
+| index | str | 类别标识 | |
+| me | num | 自己在这个类别的数值 | |
+| max | num | 这个类别最外侧那条线的数值 | |
+| aver | num | 同水平主播在这个类别的数值 | |
+
+**示例:**
+
+获取自己的直播表现
+
+```shell
+curl 'https://api.live.bilibili.com/xlive/app-blink/v1/date/Overview' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "graph": [
+ {
+ "name": "收益",
+ "index": "income",
+ "me": 0,
+ "max": 9.27,
+ "aver": 8.04
+ },
+ {
+ "name": "累计观看",
+ "index": "watchedCount",
+ "me": 5.13,
+ "max": 7.01,
+ "aver": 6.17
+ },
+ {
+ "name": "新增粉丝",
+ "index": "fans",
+ "me": 0,
+ "max": 2.58,
+ "aver": 0
+ },
+ {
+ "name": "用户平均观看时长",
+ "index": "watchTime",
+ "me": 9.31,
+ "max": 11.82,
+ "aver": 10.88
+ },
+ {
+ "name": "开播时长",
+ "index": "broadcast",
+ "me": 17.57,
+ "max": 17.42,
+ "aver": 16.6
+ },
+ {
+ "name": "弹幕数量",
+ "index": "barrage",
+ "me": 7.37,
+ "max": 8.02,
+ "aver": 6.91
+ }
+ ],
+ "propose": null
+ }
+}
+```
+
+
From 77a86f7585cc4ea913a21406dc7265442f7eab1c Mon Sep 17 00:00:00 2001
From: pskdje <77605497+pskdje@users.noreply.github.com>
Date: Sun, 31 Aug 2025 02:02:11 +0800
Subject: [PATCH 4/6] =?UTF-8?q?=E7=9B=B4=E6=92=AD=E5=9B=9E=E6=94=BE?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=B7=BB=E5=8A=A0=E5=9B=A0=E8=AD=A6=E5=91=8A?=
=?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=9A=84=E5=8F=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/live/live_replay.md | 106 +++++++++++++++++++++------------------
1 file changed, 56 insertions(+), 50 deletions(-)
diff --git a/docs/live/live_replay.md b/docs/live/live_replay.md
index a2d1f03..72166a3 100644
--- a/docs/live/live_replay.md
+++ b/docs/live/live_replay.md
@@ -41,6 +41,7 @@
| archive_flag | bool | (?) | 作用尚不明确 |
| can\_edit | num | (?) | 作用尚不明确 |
| can_upload | bool | (?) | 作用尚不明确 |
+| has_third_platform_live| bool | (?) | 作用尚不明确 |
`data.replay_info` 数组中的对象:
@@ -63,6 +64,7 @@
| cover | str | 直播封面 | |
| live_time | num | 直播时间 | 同`data.replay_info[i].start_time` |
| live_type | num | 直播类型? | 作用尚不明确 |
+| platform | str | 直播平台 | |
`data.replay_info[i].video_info` 对象:
@@ -112,65 +114,69 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorGetRepl
"data": {
"replay_info": [
{
- "replay_id": 10707737,
+ "replay_id": 13517082,
"live_info": {
- "title": "摆",
+ "title": "随缘摸鱼",
"cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png",
- "live_time": 1747509268,
- "live_type": 1
+ "live_time": 1756479520,
+ "live_type": 1,
+ "platform": "android_link"
},
"video_info": {
- "replay_status": 2,
+ "replay_status": -8,
"estimated_time": "1970-01-01 08:00:00",
- "duration": 1820,
+ "duration": 9350,
"alert_code": 2,
"alert_message": "录像时长远小于开播时长,请关注直播时网络状况"
},
"alarm_info": {
- "code": 2,
- "message": "录像生成失败,请稍后再试",
- "cur_time": 1747557808,
+ "code": -8,
+ "message": "直播内容存在违规片段",
+ "cur_time": 1756496581,
"is_ban_publish": false
},
- "room_id": 18992371,
- "live_key": "609043243693510451",
- "start_time": 1747509268,
- "end_time": 1747511088
+ "room_id": 1899237171,
+ "live_key": "637117671085969203",
+ "start_time": 1756479520,
+ "end_time": 1756488870
},
{
- "replay_id": 10707664,
+ "replay_id": 13487274,
"live_info": {
- "title": "摆",
+ "title": "随缘摸鱼",
"cover": "https://i0.hdslb.com/bfs/live/59fc254c1f51a962dbf69ae85e4920f2f6fb8dcd.png",
- "live_time": 1747508293,
- "live_type": 1
+ "live_time": 1756385910,
+ "live_type": 1,
+ "platform": "android_link"
},
"video_info": {
"replay_status": 2,
"estimated_time": "1970-01-01 08:00:00",
- "duration": 206,
+ "duration": 14985,
"alert_code": 2,
"alert_message": "录像时长远小于开播时长,请关注直播时网络状况"
},
"alarm_info": {
"code": 2,
"message": "录像生成失败,请稍后再试",
- "cur_time": 1747557808,
+ "cur_time": 1756496581,
"is_ban_publish": false
},
- "room_id": 18992371,
- "live_key": "609041817764368179",
- "start_time": 1747508293,
- "end_time": 1747508499
+ "room_id": 1899237171,
+ "live_key": "636823272552664883",
+ "start_time": 1756385910,
+ "end_time": 1756400895
}
],
"pagination": {
"page": 1,
"page_size": 2,
- "total": 29
+ "total": 16
},
"archive_flag": false,
- "can_edit": 1
+ "can_edit": 1,
+ "can_upload": false,
+ "has_third_platform_live": false
}
}
```
@@ -470,7 +476,7 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/DeleteSliceDr
鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同
-未生成整场直播回放时将进行生成。
+是否生成回放取决于回放状态,处于可生成回放状态且未生成整场直播回放时将进行生成。
**正文参数( application/x-www-form-urlencoded ):**
@@ -635,7 +641,7 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVide
-## 轮询回放合成状态
+## 轮询回放状态
> https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVideoUidRecord
@@ -770,8 +776,8 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVide
| 字段 | 类型 | 内容 | 备注 |
| --- | --- | --- | --- |
-| list | arr | 直播回放视频列表 | 如果该场回放没有视频流将为`null` |
-| ban_list | null | 不可发布的回放列表? | [需要验证] |
+| list | arr 或 null | 直播回放视频列表 | 如果该场回放没有视频流将为`null` |
+| ban_list | null 或 arr | 不可发布的回放时间 | 如果该场回放没有不可发布的时间将为`null` |
`data.list` 数组中的对象:
@@ -782,12 +788,19 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetAnchorVide
| stream | str | 直播回放视频流 | |
| type | num | 类型? | 2:一般回放? |
+`data.ban_list` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| start_time | num | 不可发布片段的开始时间戳 | Unix秒时间戳 |
+| end_time | num | 不可发布片段的结束时间戳 | Unix秒时间戳 |
+
**示例:**
获取某个场次的视频流
```shell
-curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStream?live_key=607113721045847859&start_time=1746863101&end_time=1746879299' \
+curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStream?live_key=637117671085969203&start_time=1756479520&end_time=1756488870' \
-b 'SESSDATA=xxx'
```
@@ -802,25 +815,18 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStrea
"data": {
"list": [
{
- "start_time": 1746863103,
- "end_time": 1746879246,
- "stream": "https://bvc-live.bilivideo.com/hls-record-gateway/videoPlay?biz_id=live2vod-clip&end_time=1746879246&header_name=1746863103.m4s&host_id=edge-hls-bvc-self-cn-jsyz-ct-03-59-6d854b4bd8-gnlb7&no_end=0&schema=https&sign=12f649dd540096672745d60b84f18eda&start_time=1746863103&stream_name=live_438160221_32373699&ts=1752930893&version=2",
- "type": 2
- },
- {
- "start_time": 1746879267,
- "end_time": 1746879269,
- "stream": "https://bvc-live.bilivideo.com/hls-record-gateway/videoPlay?biz_id=live2vod-clip&end_time=1746879269&header_name=1746863104.m4s&host_id=edge-hls-bvc-self-cn-jsyz-ct-03-59-6d854b4bd8-gnlb7&no_end=0&schema=https&sign=5c63605f1fa88561a6257b6812725b4f&start_time=1746879267&stream_name=live_438160221_32373699&ts=1752930893&version=2",
- "type": 2
- },
- {
- "start_time": 1746879269,
- "end_time": 1746879298,
- "stream": "https://bvc-live.bilivideo.com/hls-record-gateway/videoPlay?biz_id=live2vod-clip&end_time=1746879298&header_name=1746863105.m4s&host_id=edge-hls-bvc-self-cn-jsyz-ct-03-59-6d854b4bd8-gnlb7&no_end=0&schema=https&sign=70929627354f4380b54b97fcdb69c8a2&start_time=1746879269&stream_name=live_438160221_32373699&ts=1752930893&version=2",
+ "start_time": 1756479528,
+ "end_time": 1756488870,
+ "stream": "https://bvc-live.bilivideo.com/hls-record-gateway/videoPlay?none=为了防止信息泄露,不提供完整链接。目前该视频流可以获取违规片段的视频。",
"type": 2
}
],
- "ban_list": null
+ "ban_list": [
+ {
+ "start_time": 1756487070,
+ "end_time": 1756488870
+ }
+ ]
}
}
```
@@ -840,8 +846,8 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/GetSliceStrea
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ----- | --- | ---- | ----- | --- |
| live_key | str | 标记直播场次的key | 必要 | |
-| start_tm | str | 开始时间 | 必要 | 格式为`yyyy-mm-dd+HH:MM:SS`,时区为`UTC+08:00`(中国标准时间);取值对实际无影响 |
-| end_tm | str | 开始时间 | 必要 | 格式为`yyyy-mm-dd+HH:MM:SS`,时区为`UTC+08:00`(中国标准时间);取值对实际无影响 |
+| start_tm | str | 开始时间 | 必要 | 格式为`yyyy-mm-dd HH:MM:SS`,时区为`UTC+08:00`(中国标准时间);取值对实际无影响 |
+| end_tm | str | 开始时间 | 必要 | 格式为`yyyy-mm-dd HH:MM:SS`,时区为`UTC+08:00`(中国标准时间);取值对实际无影响 |
| web_location | str | (?) | |
**json回复:**
@@ -1342,7 +1348,7 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/UserManualSav
| 字段 | 类型 | 内容 | 备注 |
| --- | --- | --- | --- |
-| code | num | 返回值 | -111:csrf校验失败
-101:未登录
0:成功
4000:时长过长
4001:操作太快
4002:片段已投稿
4003:请选择精彩片段再投稿哦
4006:标题已使用
4008:不被允许的视频倍速 |
+| code | num | 返回值 | -111:csrf校验失败
-101:未登录
0:成功
4000:时长过长
4001:操作太快
4002:片段已投稿
4003:请选择精彩片段再投稿哦
4006:标题已使用
4008:不被允许的视频倍速
4009:该片段存在违规内容,不允许投稿 |
| message | str | 错误信息 | |
| ttl | num | `1` | |
| data | obj | 信息本体 | 成功时有效 |
@@ -1397,7 +1403,7 @@ curl 'https://api.live.bilibili.com/xlive/app-blink/v1/anchorVideo/AnchorPublish
2. (可选)请求[获取回放的信息](#获取回放的信息)接口,生成合成进度页面;
-3. [轮询回放合成状态](#轮询回放合成状态),当状态变为`30`转到流程4,变为`-30`转到流程5;
+3. [轮询回放合成状态](#轮询回放状态),当状态变为`30`转到流程4,变为`-30`转到流程5;
4. 再次[请求整场直播回放下载链接](#请求整场直播回放下载链接),获取下载链接并下载。
From db6215218b73678e0b72dc1c2235dbe9eaf056e3 Mon Sep 17 00:00:00 2001
From: pskdje <77605497+pskdje@users.noreply.github.com>
Date: Mon, 1 Sep 2025 04:24:53 +0800
Subject: [PATCH 5/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20=E7=9B=B4=E6=92=AD?=
=?UTF-8?q?=E6=8A=95=E7=A5=A8=20=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
添加接口:
- 查询投票信息
- 查询投票历史
- 创建直播投票
- 中断直播投票
---
docs/live/live_vote.md | 470 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 470 insertions(+)
create mode 100644 docs/live/live_vote.md
diff --git a/docs/live/live_vote.md b/docs/live/live_vote.md
new file mode 100644
index 0000000..8e2af3f
--- /dev/null
+++ b/docs/live/live_vote.md
@@ -0,0 +1,470 @@
+# 直播投票
+
+## 查询投票信息
+
+> https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/votePanel
+
+*请求方法: GET*
+
+认证方式: Cookie (SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | --- | ---- | ----- | --- |
+| room_id | num | 直播间id | 必要 | 必须为登录信息对应的直播间 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | -400:请求错误
-101:未登录
0:成功 |
+| message | str | 错误信息 | 成功时为`"0"` |
+| ttl | num | `1` | |
+| data | obj | 信息本体 | 不是登录信息对应的直播间时将为 `null` |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| vote_info | obj | 当前活动的投票信息 | 若当前没有活动的投票将为空对象 |
+| templates | arr | 投票模板 | |
+
+`data.vote_info` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| status | num | 投票状态 | 见[投票状态](#投票状态)枚举 |
+| question | str | 投票问题 | |
+| options | arr | 投票选项 | |
+| duration | num | 投票持续时间 | 单位:毫秒 |
+| result | num | 投票结果偏向哪一方状态 | |
+| result_text | str | 投票结果偏向哪一方 | |
+| etime_str | str | 投票结束时间 | |
+| left_duration | num | 投票剩余时间 | 单位:毫秒,投票结束后不存在 |
+| interaction_id | num | 投票互动id | |
+| template_id | num | 投票模板id | 使用模板时存在 |
+
+`data.vote_info.options` 数组:
+
+| 索引 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| 0 | obj | 投票选项1 | |
+| 1 | obj | 投票选项2 | |
+
+`data.vote_info.options` 数组中对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| idx | num | 选项id | |
+| desc | str | 投票选项描述 | |
+| percent | num | 投票选项占比显示 | |
+
+`data.templates` 数组:
+
+| 索引 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| 0 | obj | 投票模板信息 | |
+| … | obj | 投票模板信息 | |
+
+`data.templates` 数组中对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| template_id | num | 模板id | |
+| question | str | 投票问题 | |
+| option_a | str | 投票选项A | |
+| option_b | str | 投票选项B | |
+
+**示例:**
+
+查询投票信息
+
+```shell
+curl 'https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/votePanel?room_id=1'
+```
+
+
+查看响应示例:
+
+```jsonc
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "vote_info": {
+ "status": 4,
+ "question": "醒醒",
+ "options": [
+ {
+ "idx": 1,
+ "desc": "醒",
+ "percent": 0.5
+ },
+ {
+ "idx": 2,
+ "desc": "睡",
+ "percent": 0.5
+ }
+ ],
+ "duration": 600000,
+ "result": 1,
+ "result_text": "平局",
+ "etime_str": "08-31 15:44",
+ "left_duration": 549660,
+ "interaction_id": 120122595433984
+ },
+ "templates": [
+ {
+ "template_id": 54339003518976,
+ "question": "哪边赢",
+ "option_a": "左",
+ "option_b": "右"
+ },
+ {
+ "template_id": 48570973661696,
+ "question": "只因你太美唱的好吗?",
+ "option_a": "你干嘛",
+ "option_b": "哎哟"
+ },
+ // 省略了大部分内容
+ {
+ "template_id": 46203444257280,
+ "question": "№!",
+ "option_a": "虾头",
+ "option_b": "抽象"
+ },
+ {
+ "template_id": 96177095781888,
+ "question": "相信奇迹吗",
+ "option_a": "相信",
+ "option_b": "必须相信"
+ },
+ {
+ "template_id": 103827382481920,
+ "question": "1",
+ "option_a": "1",
+ "option_b": "1"
+ }
+ ]
+ }
+}
+```
+
+
+
+## 查询投票历史
+
+> https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/voteHistory
+
+*请求方法: GET*
+
+认证方式: Cookie (SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | --- | ---- | ----- | --- |
+| room_id | num | 直播间id | 必要 | 必须为登录信息对应的直播间 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | -400:请求错误
-101:未登录
0:成功 |
+| message | str | 错误信息 | 成功时为`"0"` |
+| ttl | num | `1` | |
+| data | obj | 信息本体 | 不是登录信息对应的直播间时将为空对象 |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| history | arr | 投票历史列表 | |
+
+`data.history` 数组:
+
+| 索引 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| 0 | obj | 投票历史 | 与[查询投票信息](#查询投票信息)`data.vote_info`相同 |
+| … | obj | 投票历史 | 与[查询投票信息](#查询投票信息)`data.vote_info`相同 |
+| 9 | obj | 投票历史 | 与[查询投票信息](#查询投票信息)`data.vote_info`相同 |
+
+`data.history` 数组中对象:
+
+与 [查询投票信息](#查询投票信息) json回复的 `data.vote_info` 相同。
+
+**示例:**
+
+```shell
+curl 'https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/voteHistory?room_id=1' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```jsonc
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "history": [
+ {
+ "status": 5,
+ "question": "醒醒",
+ "options": [
+ {
+ "idx": 1,
+ "desc": "醒",
+ "percent": 0.5
+ },
+ {
+ "idx": 2,
+ "desc": "睡",
+ "percent": 0.5
+ }
+ ],
+ "duration": 600000,
+ "result": 1,
+ "result_text": "平局",
+ "etime_str": "08-31 15:44",
+ "interaction_id": 120122595433984
+ },
+ {
+ "status": 5,
+ "question": "会不会睡死?",
+ "options": [
+ {
+ "idx": 1,
+ "desc": "包会的",
+ "percent": 0.5
+ },
+ {
+ "idx": 2,
+ "desc": "不会的",
+ "percent": 0.5
+ }
+ ],
+ "duration": 60000,
+ "result": 1,
+ "result_text": "平局",
+ "etime_str": "08-31 14:57",
+ "interaction_id": 120117830648832
+ },
+ {
+ "status": 5,
+ "question": "会不会睡着?",
+ "options": [
+ {
+ "idx": 1,
+ "desc": "包会的",
+ "percent": 0.5
+ },
+ {
+ "idx": 2,
+ "desc": "不会的",
+ "percent": 0.5
+ }
+ ],
+ "duration": 180000,
+ "result": 1,
+ "result_text": "平局",
+ "etime_str": "08-31 14:53",
+ "interaction_id": 120117121798656
+ },
+ {
+ "status": 5,
+ "question": "能不能一把过",
+ "options": [
+ {
+ "idx": 1,
+ "desc": "能",
+ "percent": 0.5
+ },
+ {
+ "idx": 2,
+ "desc": "不能",
+ "percent": 0.5
+ }
+ ],
+ "duration": 60000,
+ "result": 1,
+ "result_text": "平局",
+ "etime_str": "08-31 14:41",
+ "interaction_id": 120115796409344,
+ "template_id": 3109187328000
+ }
+ // 省略其余6项
+ ]
+ }
+}
+```
+
+
+
+## 投票状态
+
+此处列出已发现的投票状态,在投票信息和直播信息流 `DM_INTERACTION` 的类型 `101` 等地方使用。
+
+当前状态信息来自混淆代码寻找而来。
+
+| 值 | 含义 | 备注 |
+| -- | ---- | ---- |
+| 0 | | 键名 `NONE` |
+| 1 | 等待审核 | 键名 `WAITING_AUDIT` |
+| 2 | 审核失败 | 键名 `AUDIT_FAILED` |
+| 4 | 投票进行中 | 键名 `DURING` |
+| 5 | 投票结束 | 键名 `END` |
+| 6 | | 键名 `STOP` |
+
+## 创建直播投票
+
+> https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/createVote
+
+*请求方法: POST*
+
+认证方式: Cookie (SESSDATA)
+
+鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同
+
+投票创建完成后,投票信息和审核结果将以直播信息流 `DM_INTERACTION` 的类型 `101` 下发。
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | --- | ---- | ----- | --- |
+| room_id | num | 直播间id | 必要 | 必须为登录信息对应的直播间 |
+| duration | num | 持续时间 | 必要 | 必须为整数,目前范围`0-400:参数错误
-101:未登录
-111:csrf校验失败
0:成功 |
+| message | str | 错误信息 | 成功时为`"0"` |
+| ttl | num | `1` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| interaction_id | num | 投票互动id | |
+
+**示例:**
+
+创建一个投票
+
+```shell
+curl 'https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/createVote' \
+ --data-urlencode 'room_id=3' \
+ --data-urlencode 'duration=1' \
+ --data-urlencode 'question=abcdef' \
+ --data-urlencode 'option_a=A' \
+ --data-urlencode 'option_b=B' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx;bili_jct=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data":{
+ "interaction_id":120008099262976
+ }
+}
+```
+
+
+
+## 中断直播投票
+
+> https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/terminateVote
+
+*请求方法: POST*
+
+认证方式: Cookie (SESSDATA)
+
+鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | --- | ---- | ----- | --- |
+| interaction_id | num | 投票互动id | 必要 | 必须为该登录信息创建的投票 |
+| room_id | num | 直播间id | 必要 | 必须为登录信息对应的直播间 |
+| csrf_token | str | CSRF Token(位于cookie) | 非必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| visit_id | str | (?) | 非必要 | 作用尚不明确 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | -400:参数错误
-101:未登录
-111:csrf校验失败
0:成功
1003402:修改投票状态失败 |
+| message | str | 错误信息 | 成功时为`"0"` |
+| ttl | num | `1` | |
+| data | null | 无 | |
+
+**示例:**
+
+中断某个投票
+
+```shell
+curl 'https://api.live.bilibili.com/xlive/app-room/v1/dm/interaction/terminateVote' \
+ --data-urlencode 'interaction_id=120122595433984' \
+ --data-urlencode 'room_id=1' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx;bili_jct=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": null
+}
+```
+
+
+
+## 弹幕投票主播侧界面
+
+> https://live.bilibili.com/p/html/live-app-guessing-game/anchor_vote.html
+
+直接访问此页面存在部分功能不可用的情况。
+
+**URL查询参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | --- | ---- | ----- | --- |
+| room_id | num | 直播间id | 必要 | 必须为自己的直播间 |
From 1ddec4061a7cbb59152f6f624783d2f370724e6e Mon Sep 17 00:00:00 2001
From: pskdje <77605497+pskdje@users.noreply.github.com>
Date: Mon, 1 Sep 2025 04:38:05 +0800
Subject: [PATCH 6/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20=E7=9B=B4=E6=92=AD?=
=?UTF-8?q?=E6=95=B0=E6=8D=AE=20=E5=92=8C=20=E7=9B=B4=E6=92=AD=E6=8A=95?=
=?UTF-8?q?=E7=A5=A8=20=E9=93=BE=E6=8E=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/README.md b/README.md
index 1dca1ee..abca01c 100644
--- a/README.md
+++ b/README.md
@@ -260,6 +260,8 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC,少部分接
- [ ] [礼物相关](docs/live/gift.md)
- [ ] [大航海/粉丝团](docs/live/guard.md)
- [ ] [直播回放](docs/live/live_replay.md)
+ - [ ] [直播数据](docs/live/live_data.md)
+ - [ ] [直播投票](docs/live/live_vote.md)
- [ ] [活动](docs/activity)
- [ ] [活动列表](docs/activity/list.md)
- [ ] [活动主题信息](docs/activity/info.md)