32 KiB
弹幕操作
发送视频弹幕
请求方式:POST
认证方式:Cookie(SESSDATA)或APP
此接口与漫画弹幕相同
mode=6
的逆向弹幕与mode=8
的代码弹幕不可发送
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 | |
type | num | 弹幕类选择 | 必要 | 1:视频弹幕 |
oid | num | 视频cid | 必要 | |
msg | str | 弹幕内容 | 必要 | 长度小于100字符 |
bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
progress | num | 弹幕出现在视频内的时间 | 非必要 | 单位为毫秒 默认为0 |
color | num | 弹幕颜色设置 | 非必要 | 十进制RGB888值 默认为16777215(#FFFFFF)白色 |
fontsize | num | 弹幕字号设置 | 非必要 | 默认为25 极小:12 超小:16 小:18 标准:25 大:36 超大:45 极大:64 |
pool | num | 弹幕池选择 | 非必要 | 0:普通池 1:字幕池 2:特殊池(代码/BAS弹幕) 默认为0 |
mode | num | 弹幕类型选择 | 必要 | 1:普通弹幕 4:底部弹幕 5:顶部弹幕 7:高级弹幕 9:BAS弹幕( pool 必须为2) |
rnd | num | 当前时间戳*1000000 | 非必要 | 若无此项,则发送弹幕冷却时间限制为90s 若有此项,则发送弹幕冷却时间限制为5s |
csrf | str | CSRF Token(位于cookie) | Cookie方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 -102:账号被封停 -111:csrf校验失败 -400:请求错误 -404:无此项 36700:系统升级中 36701:弹幕包含被禁止的内容 36702:弹幕长度大于100 36703:发送频率过快 36704:禁止向未审核的视频发送弹幕 36705:您的等级不足,不能发送弹幕 36706:您的等级不足,不能发送顶端弹幕 36707:您的等级不足,不能发送底端弹幕 36708:您的等级不足,不能发送彩色弹幕 36709:您的等级不足,不能发送高级弹幕 36710:您的权限不足,不能发送这种样式的弹幕 36711:该视频禁止发送弹幕 36712:level 1用户发送弹幕的最大长度为20 36713:稿件未付费 36714:弹幕发送时间不合法 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,普通弹幕,游动弹幕)
curl 'https://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'
查看响应示例:
{
"code":0,
"message":"0",
"ttl":1,
"data":{
"action":"",
"dmid":32161968826613767,
"dmid_str":"32161968826613767",
"visible":true
}
}
发送互动弹幕
请求方式:POST
认证方式:Cookie(SESSDATA)或APP
2020-09-25 B站更新了互动弹幕功能,包括UP主头像弹幕、关联视频弹幕、视频内嵌引导关注按钮三大功能
详情见:
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 | |
type | num | 互动弹幕类型 | 必要 | 1:UP主头像弹幕 2:关联视频弹幕 5:视频内嵌引导关注按钮 |
aid | num | 稿件avid | 必要 | |
cid | num | 视频cid | 必要 | |
progress | num | 弹幕出现在视频内的时间 | 非必要 | 单位为毫秒 默认为0 |
plat | num | 平台标识 | 必要 | 1:web端 2:安卓端 8:视频管理页面 |
data | str | json序列 | 必要 | |
dmid | num | 修改互动弹幕的弹幕id | 非必要 | 注:修改弹幕plat 必须为8 |
csrf | str | CSRF Token(位于cookie) | Cookie方式必要 |
data
参数json序列:
类型为【UP主头像弹幕】时:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
msg | str | 弹幕内容 |
类型为【关联视频弹幕】时:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
msg | str | 弹幕内容 | |
bvid | str | 关联视频的bvid |
类型为【视频内嵌引导关注按钮】时:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
duration | num | 持续时间 | 单位为毫秒 |
posX | num | X坐标 | 区间:[118-549] |
posY | num | Y坐标 | 区间:[82-293] |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 -102:账号被封停 -111:csrf校验失败 -400:请求错误 -404:无此项 -500:服务器错误 36711:该视频禁止发送弹幕 79026:发送失败,请勿填写当前稿件bvid 79024:发送失败,请输入正确的bvid 79036:该指令弹幕超出限制 79037:关注弹幕坐标溢出 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | 正确时:obj 错误时:null |
信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
command | str | 指令? | UP主头像弹幕:#UP# 关联视频弹幕:#LINK# 视频内嵌引导关注按钮:#ATTENTION# |
content | str | 弹幕内容 | |
extra | str | 弹幕数据 | json序列 |
id | num | 弹幕dmid | |
idStr | str | 弹幕dmid | 字串形式 |
mid | num | 用户mid | |
oid | num | 视频cid | |
progress | num | 弹幕出现在视频内的时间 | |
type | num | 互动弹幕类型 | 1:UP主头像弹幕 2:关联视频弹幕 5:视频内嵌引导关注按钮 |
extra
序列数据:
类型为【UP主头像弹幕】时:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
icon | str | UP主头像url |
类型为【关联视频弹幕】时:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
aid | num | 关联视频的avid | |
title | str | 关联视频的标题 | |
bvid | str | 关联视频的bvid |
类型为【视频内嵌引导关注按钮】时:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
duration | num | 持续时间 | 单位为毫秒 |
posX | num | X坐标 | 区间:[118-549] |
posY | num | Y坐标 | 区间:[82-293] |
icon | str | 按钮图片url | 不应该是关注按钮吗,但这个是圆形的 |
type | num | 关注按钮类型 | 0:仅关注 1:仅三联 2:关注+三联 |
示例:
为视频av201947622
(cid为230709860
)的5000ms位置发送一条UP主头像弹幕test
curl 'https://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'
查看响应示例:
{
"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"
}
}
为视频av201947622
(cid为230709860
)的5000ms位置发送一条发送关联视频弹幕测试1234
关联视频为BV1kz4y1X7XP
curl 'https://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'
查看响应示例:
{
"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"
}
}
为视频av201947622
(cid为230709860
)的5000ms位置发送视频内嵌引导关注按钮,X坐标为118,Y坐标为82,持续时间为5000ms
curl 'https://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'
查看响应示例:
{
"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"
}
}
撤回弹幕
请求方式:POST
认证方式:Cookie(SESSDATA)或APP
仅能撤回自己两分钟内的弹幕,且每天只有3次机会
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 | |
dmid | num | 弹幕dmid | 必要 | |
cid | num | 视频cid | 必要 | |
csrf | str | CSRF Token(位于cookie) | Cookie方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 -102:账号被封停 -111:csrf校验失败 -400:请求错误 -404:无此项 36301:撤回失败,弹幕发送已过2分钟 36302:撤回失败,弹幕已经被删除或撤回 36303:撤回失败,今天撤回的机会已经用完 36304:撤回失败,服务器出错 |
message | str | 错误信息 | 成功后显示剩余次数 |
ttl | num | 1 |
示例:
撤回cid=168901231
下的弹幕32310301474947077
的弹幕
curl 'https://api.bilibili.com/x/dm/recall' \
--data-urlencode 'cid=168901231' \
--data-urlencode 'dmid=32310301474947077' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
查看响应示例:
{
"code": 0,
"message": "撤回成功,你还有3次撤回机会"
}
购买高级弹幕发送权限
请求方式:POST
认证方式:Cookie(SESSDATA)或APP
购买一次需要2硬币,同时向up主发送请求
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 | |
mode | str | sp | 必要 | |
cid | num | 视频cid | 必要 | |
csrf | str | CSRF Token(位于cookie) | Cookie方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 -102:账号被封停 -111:csrf校验失败 -107:硬币不足 -400:请求错误 36007:不允许购买 36009:正在确认中 36010:已购买 |
message | str | 返回信息 | |
ttl | num | 1 |
示例:
购买视频cid为168901231
的高级弹幕发送权限
curl 'https://api.bilibili.com/x/dm/adv/buy' \
--data-urlencode 'cid=168901231' \
--data-urlencode 'mode=sp' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
查看响应示例:
{
"code":0,
"message":"已成功购买"
}
检测高级弹幕发送权限
请求方式:GET
认证方式:Cookie(SESSDATA)或APP
url参数:
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 | |
mode | str | sp | 必要 | |
cid | num | 视频cid | 必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 --400:请求错误 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | 有效时:obj 无效时:null |
有效时:信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
coins | num | 需要支付的硬币数 | |
confirm | num | 是否同意 | 1:同意 2:未同意 未购买时无此项 |
accept | bool | 是否允许申请 | true:允许 false:不允许 |
hasBuy | bool | 是否已购买 | true:已购买 未购买时无此项 |
示例:
查询视频cid为168901231
的视频高级弹幕权限购买状态
当前状态为已购买且同意
curl -G 'https://api.bilibili.com/x/dm/adv/state' \
--data-urlencode 'cid=168901231' \
--data-urlencode 'mode=sp' \
-b 'SESSDATA=xxx'
查看响应示例:
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"coins": 2,
"confirm": 1,
"accept": true,
"hasBuy": true
}
}
查询弹幕点赞数
请求方式:GET
认证方式:Cookie(SESSDATA)或APP
url参数:
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 | |
oid | num | 视频cid | 必要 | |
ids | nums | 弹幕dmid列表 | 必要 | 多个id之间用, 分隔 |
json回复
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -400:请求错误 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
{弹幕id} | obj | 弹幕id对应的信息 | id分别对应请求参数中的ids ,下同 |
…… | obj | 弹幕id对应的信息 |
{弹幕id}
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
likes | num | 点赞数 | |
user_like | num | 是否点赞 | 0:未点赞 1:已点赞 需要登录(Cookie或APP) 未登录恒为0 |
id_str | str | 弹幕dmid |
示例
查询cid=236871317
下的弹幕35600074482384899
、38880975220375559
、39052528418553863
点赞数
curl -G 'https://api.bilibili.com/x/v2/dm/thumbup/stats' \
--data-urlencode 'oid=236871317' \
--data-urlencode 'ids=39019145405661191,38880975220375559,39052528418553863' \
-b 'SESSDATA=xxx'
查看响应示例:
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"38880975220375559": {
"likes": 1,
"user_like": 1,
"id_str": "38880975220375559"
},
"39019145405661191": {
"likes": 3,
"user_like": 1,
"id_str": "39019145405661191"
},
"39052528418553863": {
"likes": 2,
"user_like": 0,
"id_str": "39052528418553863"
}
}
}
点赞弹幕
请求方式:POST
认证方式:Cookie(SESSDATA)或APP
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 | |
dmid | num | 弹幕dmid | 必要 | |
oid | num | 视频cid | 必要 | |
op | num | 操作 | 必要 | 1:点赞 2:取消点赞 |
platform | str | 平台 | 非必要 | |
csrf | str | CSRF Token(位于cookie) | Cookie方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf 校验失败 -400:请求错误 36106:该弹幕已被删除 36805:该视频禁止点赞弹幕 65004:取消赞失败 未点赞过 65006:已赞过 |
message | str | 错误信息 | 默认为0 |
tll | num | 1 |
示例
为cid=145928946
下的弹幕35600074482384899
点赞
curl 'https://api.bilibili.com/x/v2/dm/thumbup/add' \
--data-urlencode 'dmid=35600074482384899' \
--data-urlencode 'oid=145928946' \
--data-urlencode 'op=1' \
--data-urlencode 'platform=web_player' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
查看响应示例:
{
"code":0,
"message":"0",
"ttl":1
}
举报弹幕
请求方式:POST
认证方式:Cookie(SESSDATA)或APP
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 | |
cid | num | 视频cid | 必要 | |
dmid | num | 弹幕dmid | 必要 | |
reason | num | 举报类型 | 必要 | 类型代码见下表 |
content | str | 其他举报备注 | 非必要 | reason=11 时有效 |
csrf | str | CSRF Token(位于cookie) | Cookie方式必要 |
举报类型reason
:
代码 | 含义 |
---|---|
1 | 违法违禁 |
2 | 色情低俗 |
3 | 赌博诈骗 |
4 | 人身攻击 |
5 | 侵犯隐私 |
6 | 垃圾广告 |
7 | 引战 |
8 | 剧透 |
9 | 恶意刷屏 |
10 | 视频无关 |
11 | 其他 |
12 | 青少年不良 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf 校验失败 -400:请求错误 36201:举报弹幕不存在 36203:举报原因类型错误 36204:已举报 |
message | str | 错误信息 | 默认为空 |
tll | num | 1 | 举报失败时 |
示例
举报cid=145928946
下的弹幕35600074482384899
,理由是引战
curl 'https://api.bilibili.com/x/dm/report/add' \
--data-urlencode 'cid=145928946' \
--data-urlencode 'dmid=35600074482384899' \
--data-urlencode 'reason=7' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
查看响应示例:
{
"code":0,
"message":""
}
保护&删除弹幕
请求方式:POST
认证方式:Cookie(SESSDATA) 或APP
注:只能操作自己的稿件或有骑士权限的稿件
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 | |
type | num | 弹幕类选择 | 必要 | 1:视频弹幕 |
oid | num | 视频cid | 必要 | |
dmids | nums | 弹幕dmid | 必要 | 多个id之间用, 分隔 |
state | num | 操作代码 | 必要 | 1:删除弹幕 2:弹幕保护 3:取消保护 |
csrf | str | CSRF Token(位于cookie) | Cookie方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf 校验失败 -400:请求错误 -403:访问权限不足 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 |
示例
删除cid=145928946
下的弹幕35600074482384899
、39067304918515717
、39082777041174531
curl 'https://api.bilibili.com/x/v2/dm/edit/state' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=145928946' \
--data-urlencode 'dmids=35600074482384899,39067304918515717,39082777041174531' \
--data-urlencode 'state=1' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
查看响应示例:
{
"code":0,
"message":"0",
"ttl":1
}
修改字幕池
请求方式:POST
认证方式:Cookie(SESSDATA) 或APP
注:只能操作自己的稿件或有骑士权限的稿件
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 | |
type | num | 弹幕类选择 | 必要 | 1:视频弹幕 |
oid | num | 视频cid | 必要 | |
dmids | nums | 弹幕dmid | 必要 | 多个id之间用, 分隔 |
pool | num | 操作代码 | 必要 | 0:移出字幕池 1:移入字幕池 |
csrf | str | CSRF Token(位于cookie) | Cookie方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf 校验失败 -400:请求错误 -403:访问权限不足 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 |
示例
将cid=145928946
下的弹幕35600074482384899
、39067304918515717
、39082777041174531
移入字幕池
curl 'https://api.bilibili.com/x/v2/dm/edit/state' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=145928946' \
--data-urlencode 'pool=1' \
--data-urlencode 'dmids=35600074482384899,39067304918515717,39082777041174531' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
查看响应示例:
{
"code":0,
"message":"0",
"ttl":1
}