bilibili-API-collect/docs/live/danmaku.md
pskdje 438425a282
更新直播间管理,添加直播回放,更新直播信息流 (#1298)
* docs: 更新对直播间开播请求返回的字段的描述及备注

* fix: 修改错误的 `pflag` 说明

* 添加直播回放相关接口

添加记录: https://github.com/pskdje/bilibili-API-collect/pull/6

* feat:添加 直播回放 链接

* feat: 给L1163添加code值,添加移动端片段发布页面

添加投稿直播回放的code
给直播回放片段发布页面添加移动端的链接

* feat: 添加和更新直播信息流cmd

部分信息来着: https://github.com/SocialSisterYi/bilibili-API-collect/issues/1220

- 调整弹幕info[0][15]某个代码块的语言信息
- 添加交互合并的101和103类型
* 添加GOTO_BUY_FLOW和HOT_BUY_NUM
* 添加WEALTH_NOTIFY
* 添加VOICE_JOIN_SWITCH
* 添加USER_PANEL_RED_ALARM和GIFT_BOARD_RED_DOT
* 添加 粉丝勋章 相关cmd
* 添加 WIDGET_WISH_INFO 信息
- 添加PLAYTOGETHER_ICON_CHANGE、FANS_CLUB_POKE_GIFT_NOTICE、master_qn_strategy_chg
* 添加和更新 用户进场特效
* 调整INTERACT_WORD相关文本

* feat: 更新获取信息流认证的参数,调整投稿直播回放片段

为 获取信息流认证秘钥 添加URL参数,同时更新示例
调整 投稿直播回放片段 的正文参数,为json回复加备注

* feat: 更新发送弹幕3个参数的描述

https://github.com/SocialSisterYi/bilibili-API-collect/issues/1236#issuecomment-2943228254

* feat: 调整直播回放部分参数的描述

re

* feat: 添加 预更新直播间信息 接口,调整开始直播的信息

关联issue: https://github.com/SocialSisterYi/bilibili-API-collect/issues/1310

开播接口的平台和pflag的关联写于 https://github.com/SocialSisterYi/bilibili-API-collect/discussions/1312
由于缺少测试资料,已放弃更新相关信息。

* feat: 修正冲突合并问题

莫生气,莫生气,生气没人心疼你,气了bug也还在。

---------

Co-authored-by: Pesy Wu <GamerNoTitle@outlook.com>
2025-06-26 17:45:58 +08:00

508 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 直播间弹幕
## 获取当前用户对应直播间可发弹幕配置
> https://api.live.bilibili.com/xlive/web-room/v1/dM/GetDMConfigByGroup
*请求方式: GET*
认证方式: Cookie (SESSDATA)
未登录也可以获取,但颜色只有白色可用,模式只有滚动。
**url参数**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ---- | --- | --- | ---- | --- |
| room_id | num | 直播间id | 必要 | |
| web_location | str | (?) | 非必要 | 作用尚不明确 |
| w_rid | str | wbi签名 | 非必要 | 不强制需要 |
| wts | num | 秒时间戳 | 非必要 | 不强制需要 |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| --- | --- | --- | --- |
| code | num | 返回值 | 0: 成功<br />-400: 参数错误 |
| data | obj | 信息本体 | |
| message | str | 错误信息 | |
| msg | str | 信息 | 成功时存在,为`""`(空字符串) |
| ttl | num | `1` | 成功时不存在 |
`data` 对象:
| 字段 | 类型 | 内容 | 备注 |
| --- | --- | --- | --- |
| group | arr | 弹幕颜色组 | |
| mode | arr | 弹幕显示模式 | |
`data.group` 数组中对象:
| 字段 | 类型 | 内容 | 备注 |
| --- | --- | --- | --- |
| name | str | 显示名称 | |
| sort | num | 用于排序 | |
| color | arr | 该组颜色列表 | |
`data.group[i].color` 数组中对象:
| 字段 | 类型 | 内容 | 备注 |
| --- | --- | --- | --- |
| name | str | 颜色名 | |
| color | str | 十进制颜色值 | 发送弹幕用 |
| color\_hex | str | 十六进制颜色值 | 发送弹幕用 |
| status | num | 可用状态 | 0: 不可用<br />1: 可用 |
| weight | num | (?) | 作用尚不明确 |
| color\_id | num | 颜色id? | |
| origin | num | (?) | |
`data.mode` 数组中对象:
| 字段 | 类型 | 内容 | 备注 |
| --- | --- | --- | --- |
| name | str | 模式名称 | |
| mode | num | 模式值 | 发送弹幕用 |
| type | str | 模式类型 | |
| status | num | 可用状态 | 0: 不可用<br />1: 可用 |
**示例:**
获取未登录用户在直播间 `1` 的弹幕配置可用情况
```shell
curl 'https://api.live.bilibili.com/xlive/web-room/v1/dM/GetDMConfigByGroup?room_id=1'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"data": {
"group": [
{
"name": "普",
"sort": 0,
"color": [
{
"name": "白色",
"color": "16777215",
"color_hex": "ffffff",
"status": 1,
"weight": -9999,
"color_id": -9999,
"origin": 0
}
]
},
{
"name": "航",
"sort": 100,
"color": [
{
"name": "紫色",
"color": "14893055",
"color_hex": "e33fff",
"status": 0,
"weight": 0,
"color_id": 6,
"origin": 1
}
]
},
{
"name": "粉",
"sort": 200,
"color": [
{
"name": "松石绿",
"color": "5566168",
"color_hex": "54eed8",
"status": 0,
"weight": 99,
"color_id": 66,
"origin": 2
},
{
"name": "雨后蓝",
"color": "5816798",
"color_hex": "58c1de",
"status": 0,
"weight": 98,
"color_id": 67,
"origin": 2
},
{
"name": "星空蓝",
"color": "4546550",
"color_hex": "455ff6",
"status": 0,
"weight": 97,
"color_id": 68,
"origin": 2
},
{
"name": "紫罗兰",
"color": "9920249",
"color_hex": "975ef9",
"status": 0,
"weight": 96,
"color_id": 69,
"origin": 2
},
{
"name": "梦境红",
"color": "12802438",
"color_hex": "c35986",
"status": 0,
"weight": 95,
"color_id": 70,
"origin": 2
},
{
"name": "热力橙",
"color": "16747553",
"color_hex": "ff8c21",
"status": 0,
"weight": 94,
"color_id": 71,
"origin": 2
},
{
"name": "香槟金",
"color": "16774434",
"color_hex": "fff522",
"status": 0,
"weight": 93,
"color_id": 72,
"origin": 2
}
]
},
{
"name": "爷",
"sort": 300,
"color": [
{
"name": "红色",
"color": "16738408",
"color_hex": "ff6868",
"status": 0,
"weight": 0,
"color_id": 8,
"origin": 3
},
{
"name": "蓝色",
"color": "6737151",
"color_hex": "66ccff",
"status": 0,
"weight": 0,
"color_id": 7,
"origin": 3
}
]
},
{
"name": "活",
"sort": 400,
"color": [
{
"name": "盛典金",
"color": "16766720",
"color_hex": "ffd700",
"status": 0,
"weight": 100,
"color_id": 44,
"origin": 4
},
{
"name": "升腾蓝",
"color": "4286945",
"color_hex": "4169e1",
"status": 0,
"weight": 100,
"color_id": 43,
"origin": 4
},
{
"name": "青色",
"color": "65532",
"color_hex": "fffc",
"status": 0,
"weight": 0,
"color_id": 5,
"origin": 4
},
{
"name": "绿色",
"color": "8322816",
"color_hex": "7eff00",
"status": 0,
"weight": 0,
"color_id": 4,
"origin": 4
},
{
"name": "黄色弹幕",
"color": "16772431",
"color_hex": "ffed4f",
"status": 0,
"weight": 0,
"color_id": 3,
"origin": 4
},
{
"name": "橙色",
"color": "16750592",
"color_hex": "ff9800",
"status": 0,
"weight": 0,
"color_id": 2,
"origin": 4
},
{
"name": "粉色",
"color": "16741274",
"color_hex": "ff739a",
"status": 0,
"weight": 0,
"color_id": 1,
"origin": 4
}
]
}
],
"mode": [
{
"name": "滚动",
"mode": 1,
"type": "scroll",
"status": 1
},
{
"name": "底部",
"mode": 4,
"type": "bottom",
"status": 0
},
{
"name": "顶部",
"mode": 5,
"type": "top",
"status": 0
}
]
},
"message": "",
"msg": ""
}
```
</details>
## 设置弹幕样式
> https://api.live.bilibili.com/xlive/web-room/v1/dM/AjaxSetConfig
*请求方式: POST*
认证方式: Cookie (SESSDATA)
鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同
**正文参数 (application/x-www-form-urlencoded)**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ---- | --- | --- | ---- | --- |
| csrf | str | CSRF Token位于cookie | 必要 | |
| csrf\_token | str | 同csrf | 非必要 | |
| room\_id | num | 直播间id | 必要 | |
| color | str | 颜色值 | 必要(可选) | color和mode任选一个 |
| mode | num | 弹幕模式 | 必要(可选) | color和mode任选一个 |
注1: 抓取到的color格式是`"0x"+六位十六进制小写颜色值`,实际不需要`0x`,且不区分大小写。
注2: 若color和mode同时存在将只处理colormode将被忽略。见[#1236(comment)](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1236#issuecomment-2849019923)
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| --- | --- | --- | --- |
| code | num | 返回值 | 0: 成功<br />-101: 账号未登录<br />-500: 未达到使用条件<br />10064002: 参数错误<br />10065107: 颜色不存在 |
| message | str | 错误信息 | |
| ttl | num | `1` | |
| data | obj | 信息本体 | 部分情况不存在10064002时为`null` |
`data` 对象:
| 字段 | 类型 | 内容 | 备注 |
| --- | --- | --- | --- |
| status | num | 同code | |
| msg | str | 提示信息 | 成功时有内容 |
| roomid | num | 直播间id | |
**示例:**
更改直播间 `1017` 的弹幕颜色为白色
```shell
curl 'https://api.live.bilibili.com/xlive/web-room/v1/dM/AjaxSetConfig' \
--data-urlencode 'room_id=1017' \
--data-urlencode 'color=0xffffff' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx;bili_jct=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code":0,
"message":"0",
"ttl":1,
"data":{
"status":0,
"msg":"设置成功~",
"roomid":1017
}
}
```
</details>
## 发送直播弹幕
> https://api.live.bilibili.com/msg/send
*请求方式: POST*
认证方式: Cookie (SESSDATA)
鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同
**url参数**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ----- | ---- | --- | ----- | --- |
| w_rid | str | wbi签名 | 非必要 | 不强制需要 |
| wts | num | Unix 秒时间戳 | 非必要 | 不强制需要 |
**正文参数 (`application/x-www-form-urlencoded`或`multipart/form-data`)**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ---- | --- | --- | ---- | --- |
| csrf | str | CSRF Token位于cookie | 必要 | |
| roomid | num | 直播间id | 必要 | |
| msg | str | 弹幕内容 | 必要 | |
| rnd | num | 当前 Unix 秒时间戳 | 必要 | |
| fontsize | num | 字体大小 | 必要 | 默认为`25` |
| color | num | 十进制颜色值 | 必要 | 实际无效果 |
| mode | num | 展示模式 | 非必要 | 默认为`1` |
| bubble | num | (?) | 非必要 | 值为`0` |
| room\_type | num | (?) | 非必要 | `0` |
| jumpfrom | num | (?) | 非必要 | `0` |
| reply\_mid | num | 要“@”的用户mid | 非必要 | 默认为`0` |
| reply\_attr | num | (?) | 非必要 | `0` |
| reply\_uname | str | 要“@”的用户名称 | 非必要 | 默认为`""`提供reply\_mid时不需要提供 |
| replay\_dmid | str | 要回复的弹幕id | 非必要 | 默认为`""` |
| statistics | str | (?) | 非必要 | `{"appId":100,"platform":5}` |
| csrf_token | str | 同csrf | 非必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| --- | --- | --- | --- |
| code | num | 返回值 | `-101`:账号未登录<br />`-111`:csrf 校验失败<br />`-400`:请求错误,带有必须参数的信息<br />`1003212`:超出限制长度<br />`10031`:发送频率过快 |
| message | str | 错误信息 | |
| msg | str | 同`message` | |
| data | obj | 信息本体 | |
| ttl | num | `1` | 在小于0的code中存在 |
`data` 对象:
| 字段 | 类型 | 内容 | 备注 |
| --- | --- | --- | --- |
| mode_info | obj | 弹幕信息 | |
| dm_v2 | null | v2弹幕 | |
`data.mode_info` 对象:
基本上与[直播间信息流#弹幕 (DANMU_MSG)](message_stream.md#弹幕-danmu_msg)的`info[0][15]`对象相同。
**示例:**
给直播间 `1899237171` 发送内容为 `QwQ` 的弹幕
```shell
curl 'https://api.live.bilibili.com/msg/send' \
--data-urlencode 'roomid=1899237171' \
--data-urlencode 'msg=QwQ' \
--data-urlencode 'rnd=1744956003' \
--data-urlencode 'fontsize=25'
--data-urlencode 'color=16777215'
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx;bili_jct=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code":0,
"data":{
"mode_info":{
"mode":0,
"show_player_type":0,
"extra":"{\"send_from_me\":true,\"master_player_hidden\":false,\"mode\":0,\"color\":16777215,\"dm_type\":0,\"font_size\":25,\"player_mode\":1,\"show_player_type\":0,\"content\":\"QwQ\",\"user_hash\":\"2402762465\",\"emoticon_unique\":\"\",\"bulge_display\":0,\"recommend_score\":7,\"main_state_dm_color\":\"\",\"objective_state_dm_color\":\"\",\"direction\":0,\"pk_direction\":0,\"quartet_direction\":0,\"anniversary_crowd\":0,\"yeah_space_type\":\"\",\"yeah_space_url\":\"\",\"jump_to_url\":\"\",\"space_type\":\"\",\"space_url\":\"\",\"animation\":{},\"emots\":null,\"is_audited\":false,\"id_str\":\"4e3ed8ede9409b234b5e1d64c06801ea3119\",\"icon\":null,\"show_reply\":true,\"reply_mid\":0,\"reply_uname\":\"\",\"reply_uname_color\":\"\",\"reply_is_mystery\":false,\"reply_type_enum\":0,\"hit_combo\":0,\"esports_jump_url\":\"\"}",
"user":{
"uid":438160221,
"base":{
"name":"weatfe",
"face":"https://i0.hdslb.com/bfs/face/member/noface.jpg",
"name_color":0,
"is_mystery":false,
"risk_ctrl_info":null,
"origin_info":{
"name":"weatfe",
"face":"https://i0.hdslb.com/bfs/face/member/noface.jpg"
},
"official_info":{
"role":0,
"title":"",
"desc":"",
"type":-1
},
"name_color_str":""
},
"medal":null,
"wealth":null,
"title":{
"old_title_css_id":"",
"title_css_id":""
},
"guard":null,
"uhead_frame":null,
"guard_leader":{
"is_guard_leader":false
}
}
},
"dm_v2":null
},
"message":"",
"msg":""
}
```
</details>