Files
bilibili-API-collect/danmaku/action.md

466 lines
18 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.

# 弹幕操作
## 发送视频弹幕
> http://api.bilibili.com/x/v2/dm/post
*请求方式POST*
认证方式CookieSESSDATA
**正文参数( application/x-www-form-urlencoded **
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| -------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ |
| type | num | 1 | 必要 | |
| oid | num | 视频CID | 必要 | |
| msg | str | 弹幕内容 | 必要 | 长度小于100字符 |
| bvid | str | 视频bvID | 必要(可选) | avID与bvID任选一个 |
| aid | num | 视频avID | 必要(可选) | avID与bvID任选一个 |
| progress | num | 弹幕出现在视频内的时间 | 非必要 | 单位为毫秒<br />默认为0 |
| color | num | 弹幕颜色设置 | 非必要 | 十进制RGB888值<br />默认为16777215#FFFFFF)白色 |
| fontsize | num | 弹幕字号设置 | 非必要 | 默认为25<br />极小12<br />超小16<br />18<br />标准25<br />36<br />超大45<br />极大64 |
| pool | num | 弹幕池选择 | 非必要 | 0普通池<br />1字幕池<br />2特殊池代码/BAS弹幕<br />默认为0 |
| mode | num | 弹幕类型选择 | 必要 | 1普通弹幕<br />4底部弹幕<br />5顶部弹幕<br />7高级弹幕<br />9BAS弹幕`pool`必须为2 |
| rnd | num | 当前时间戳*1000000 | 非必要 | **若无此项则发送弹幕冷却时间限制为90s**<br />若有此项则发送弹幕冷却时间限制为5s |
| csrf | str | CSRF Token位于cookie | Cookie方式必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | 0成功<br />-101账号未登录<br />-102账号被封停<br />-111csrf校验失败<br />-400请求错误<br />-404无此项<br />36700系统升级中<br />36701弹幕包含被禁止的内容<br />36702弹幕长度大于100<br />36703发送频率过快<br />36704禁止向未审核的视频发送弹幕<br />36705您的等级不足不能发送弹幕<br />36706您的等级不足不能发送顶端弹幕<br />36707您的等级不足不能发送底端弹幕<br />36708您的等级不足不能发送彩色弹幕<br />36709您的等级不足不能发送高级弹幕<br />36710您的权限不足不能发送这种样式的弹幕<br />36711该视频禁止发送弹幕<br />36712level 1用户发送弹幕的最大长度为20<br />36713稿件未付费<br />36714弹幕发送时间不合法<br />36715当日操作数量超过上限 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| -------- | ---- | -------- | ------------ |
| action | str | 空 | 作用尚不明确 |
| dmid | num | 弹幕dmID | |
| dmid_str | str | 弹幕dmID | 字串形式 |
| visible | bool | true | 作用尚不明确 |
**示例:**
为视频`av2`/`BV1xx411c7mD`CID为`62131`的5000ms位置发送一条弹幕`前来考古`(颜色为#FFFFFF字号25普通弹幕游动弹幕
```shell
curl 'http://api.bilibili.com/x/v2/dm/post'\
--data-urlencode 'type=1'\
--data-urlencode 'oid=62131'\
--data-urlencode 'msg=前来考古'\
--data-urlencode 'aid=2'\
--data-urlencode 'progress=5000'\
--data-urlencode 'color=16777215'\
--data-urlencode 'fontsize=25'\
--data-urlencode 'pool=0'\
--data-urlencode 'mode=1'\
--data-urlencode 'rnd=3456789987654321'\
--data-urlencode 'csrf=xxx'\
-b 'SESSDATA=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code":0,
"message":"0",
"ttl":1,
"data":{
"action":"",
"dmid":32161968826613767,
"dmid_str":"32161968826613767",
"visible":true
}
}
```
</details>
## 发送互动弹幕
> http://api.bilibili.com/x/v2/dm/command/post
*请求方式POST*
认证方式CookieSESSDATA或APP
2020-09-25 B站更新了互动弹幕功能包括UP主头像弹幕、关联视频弹幕、视频内嵌引导关注按钮三大功能
详情见:
[【客户端更新】6.10版本更新UP主支持发布关联视频弹幕]( https://www.bilibili.com/read/cv7728299 )
[引导关注卡片]( https://www.bilibili.com/blackboard/activity-c8a0iDRQy.html )
**正文参数( application/x-www-form-urlencoded **
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| -------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ |
| type | num | 互动弹幕类型 | 必要 | 1UP主头像弹幕<br />2关联视频弹幕<br />5视频内嵌引导关注按钮 |
| aid | num | 视频avID | 必要 | |
| cid | num | 视频CID | 必要 | |
| progress | num | 弹幕出现在视频内的时间 | 非必要 | 单位为毫秒<br />默认为0 |
| plat | num | 平台标识 | 必要 | 1web端<br />2安卓端<br />8视频管理页面 |
| data | str | json序列 | 必要 | |
| dmid | num | 修改互动弹幕的弹幕ID | 非必要 | 注:修改弹幕`plat`必须为8 |
| csrf | str | CSRF Token位于cookie | Cookie方式必要 | |
`data`参数:
类型为【UP主头像弹幕】时
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | -------- | ---- |
| msg | str | 弹幕内容 | |
类型为【关联视频弹幕】时:
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | -------------- | ---- |
| msg | str | 弹幕内容 | |
| bvid | str | 关联视频的bvID | |
类型为【视频内嵌引导关注按钮】时:
| 字段 | 类型 | 内容 | 备注 |
| -------- | ---- | -------- | --------------- |
| duration | num | 持续时间 | 单位为毫秒 |
| posX | num | X坐标 | 区间:[118-549] |
| posY | num | Y坐标 | 区间:[82-293] |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ----------------------------- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | 0成功<br />-101账号未登录<br />-102账号被封停<br />-111csrf校验失败<br />-400请求错误<br />-404无此项<br />-500服务器错误<br />36711该视频禁止发送弹幕<br />79026发送失败请勿填写当前稿件BVID<br />79024发送失败请输入正确的BVID<br />79036该指令弹幕超出限制<br />79037关注弹幕坐标溢出 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | 正确时obj<br />错误时null | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| -------- | ---- | ---------------------- | ------------------------------------------------------------ |
| command | str | 指令? | UP主头像弹幕#UP#<br />关联视频弹幕:#LINK#<br />视频内嵌引导关注按钮:#ATTENTION# |
| content | str | 弹幕内容 | |
| extra | str | 弹幕数据 | json序列 |
| id | num | 弹幕dmID | |
| idStr | str | 弹幕dmID | 字串形式 |
| mid | num | 用户UID | |
| oid | num | 视频CID | |
| progress | num | 弹幕出现在视频内的时间 | |
| type | num | 互动弹幕类型 | 1UP主头像弹幕<br />2关联视频弹幕<br />5视频内嵌引导关注按钮 |
`extra`序列数据:
类型为【UP主头像弹幕】时
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | ----------- | ---- |
| icon | str | UP主头像url | |
类型为【关联视频弹幕】时:
| 字段 | 类型 | 内容 | 备注 |
| ----- | ---- | -------------- | ---- |
| aid | num | 关联视频的avID | |
| title | str | 关联视频的标题 | |
| bvid | str | 关联视频的bvID | |
**示例:**
为视频`av201947622`CID为`230709860`的5000ms位置发送一条UP主头像弹幕`test`
```shell
curl 'http://api.bilibili.com/x/v2/dm/command/post'\
--data-urlencode 'type=1'\
--data-urlencode 'aid=201947622'\
--data-urlencode 'cid=230709860'\
--data-urlencode 'progress=5000'\
--data-urlencode 'plat=1'\
--data-urlencode 'data={"msg":"test"}'\
--data-urlencode 'csrf=xxx'\
-b 'SESSDATA=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"id": 39053842117558279,
"oid": 230709860,
"mid": 293793435,
"type": 1,
"command": "#UP#",
"content": "test",
"extra": "{\"icon\":\"http://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg\"}",
"idStr": "39053842117558279"
}
}
```
</details>
为视频`av201947622`CID为`230709860`的5000ms位置发送一条发送关联视频弹幕`测试1234`关联视频为`BV1kz4y1X7XP`
```shell
curl 'http://api.bilibili.com/x/v2/dm/command/post'\
--data-urlencode 'type=2'\
--data-urlencode 'aid=201947622'\
--data-urlencode 'cid=230709860'\
--data-urlencode 'progress=5000'\
--data-urlencode 'plat=1'\
--data-urlencode 'data={"bvid":"BV1kz4y1X7XP","msg":"测试1234"}'\
--data-urlencode 'csrf=xxx'\
-b 'SESSDATA=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"id": 39054383689236483,
"oid": 230709860,
"mid": 293793435,
"type": 2,
"command": "#LINK#",
"content": "测试1234",
"progress": 11925,
"extra": "{\"aid\":583785685,\"title\":\"【cmd】访问api 命令行也能上B站\",\"bvid\":\"BV1kz4y1X7XP\"}",
"idStr": "39054383689236483"
}
}
```
</details>
为视频`av201947622`CID为`230709860`的5000ms位置发送视频内嵌引导关注按钮X坐标为118Y坐标为82持续时间为5000ms
```shell
curl 'http://api.bilibili.com/x/v2/dm/command/post'\
--data-urlencode 'type=5'\
--data-urlencode 'aid=201947622'\
--data-urlencode 'cid=230709860'\
--data-urlencode 'progress=5000'\
--data-urlencode 'plat=1'\
--data-urlencode 'data={"duration":5000,"posX":118,"posY":82}'\
--data-urlencode 'csrf=xxx'\
-b 'SESSDATA=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"id": 39055158405496839,
"oid": 230709860,
"mid": 293793435,
"type": 5,
"command": "#ATTENTION#",
"progress": 5000,
"extra": "{\"duration\":5000,\"posX\":118,\"posY\":82}",
"idStr": "39055158405496839"
}
}
```
</details>
## 撤回弹幕
> http://api.bilibili.com/x/dm/recall
*请求方式POST*
认证方式CookieSESSDATA
仅能撤回自己两分钟内的弹幕且每天只有3次机会
**正文参数( application/x-www-form-urlencoded **
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | ------------------------ | ------ | ---- |
| dmid | num | 弹幕dmID | 必要 | |
| cid | num | 视频CID | 必要 | |
| csrf | str | CSRF Token位于cookie | 必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | 0成功<br />-101账号未登录<br />-102账号被封停<br />-111csrf校验失败<br />-400请求错误<br />-404无此项<br />36301撤回失败弹幕发送已过2分钟<br />36302撤回失败弹幕已经被删除或撤回<br />36303撤回失败今天撤回的机会已经用完<br />36304撤回失败服务器出错 |
| message | str | 错误信息 | 成功后显示剩余次数 |
| ttl | num | 1 | |
**示例:**
撤回`CID=168901231`下的弹幕`32310301474947077`的弹幕
```shell
curl 'http://api.bilibili.com/x/dm/recall'\
--data-urlencode 'cid=168901231'\
--data-urlencode 'dmid=32310301474947077'\
--data-urlencode 'csrf=xxx'\
-b 'SESSDATA=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "撤回成功你还有3次撤回机会"
}
```
</details>
## 购买高级弹幕发送权限
> http://api.bilibili.com/x/dm/adv/buy
*请求方式POST*
认证方式CookieSESSDATA
购买一次需要2硬币同时向up主发送请求
**正文参数( application/x-www-form-urlencoded **
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | ------------------------ | ------ | ---- |
| mode | str | sp | 必要 | |
| cid | num | 视频CID | 必要 | |
| csrf | str | CSRF Token位于cookie | 必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | 0成功<br />-101账号未登录<br />-102账号被封停<br />-111csrf校验失败<br />-107硬币不足<br />-400请求错误<br />36007不允许购买<br />36009正在确认中<br />36010已购买 |
| message | str | 返回信息 | |
| ttl | num | 1 | |
示例:
购买视频CID为`168901231`的高级弹幕发送权限
```shell
curl 'http://api.bilibili.com/x/dm/adv/buy'\
--data-urlencode 'cid=168901231'\
--data-urlencode 'mode=sp'\
--data-urlencode 'csrf=xxx'\
-b 'SESSDATA=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code":0,
"message":"已成功购买"
}
```
</details>
## 检测高级弹幕发送权限
> http://api.bilibili.com/x/dm/adv/state
*请求方式GET*
认证方式CookieSESSDATA
**url参数**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | ------- | ------ | ---- |
| mode | str | sp | 必要 | |
| cid | num | 视频CID | 必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ----------------------------- | ---------------- | -------------------------------------------------- |
| code | num | 返回值 | 0成功<br />-101账号未登录<br />--400请求错误 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | 有效时obj<br />无效时null | 有效时:信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | ---------------- | ------------------------------------------ |
| coins | num | 需要支付的硬币数 | |
| confirm | num | 是否同意 | 1同意<br />2未同意<br />未购买时无此项 |
| accept | bool | 是否允许申请 | true允许<br />false不允许 |
| hasBuy | bool | 是否已购买 | true已购买<br />未购买时无此项 |
**示例:**
查询视频CID为`168901231`的视频高级弹幕权限购买状态
当前状态为已购买且同意
```shell
curl -G 'http://api.bilibili.com/x/dm/adv/state'\
--data-urlencode 'cid=168901231'\
--data-urlencode 'mode=sp'\
-b 'SESSDATA=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"coins": 2,
"confirm": 1,
"accept": true,
"hasBuy": true
}
}
```
</details>