🚀调整项目结构
This commit is contained in:
822
docs/danmaku/action.md
Normal file
822
docs/danmaku/action.md
Normal file
@@ -0,0 +1,822 @@
|
||||
# 弹幕操作
|
||||
|
||||
- [发送视频弹幕](#发送视频弹幕)
|
||||
- [发送互动弹幕](#发送互动弹幕)
|
||||
- [撤回弹幕](#撤回弹幕)
|
||||
- [购买高级弹幕发送权限](#购买高级弹幕发送权限)
|
||||
- [检测高级弹幕发送权限](#检测高级弹幕发送权限)
|
||||
- [查询弹幕点赞数](#查询弹幕点赞数)
|
||||
- [点赞弹幕](#点赞弹幕)
|
||||
- [举报弹幕](#举报弹幕)
|
||||
- [保护&删除弹幕](#保护&删除弹幕)
|
||||
- [修改字幕池](#修改字幕池)
|
||||
|
||||
---
|
||||
|
||||
## 发送视频弹幕
|
||||
|
||||
> https://api.bilibili.com/x/v2/dm/post
|
||||
|
||||
*请求方式: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 | 弹幕出现在视频内的时间 | 非必要 | 单位为毫秒<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 />9:BAS弹幕(`pool`必须为2) |
|
||||
| rnd | num | 当前时间戳*1000000 | 非必要 | **若无此项,则发送弹幕冷却时间限制为90s**<br />若有此项,则发送弹幕冷却时间限制为5s |
|
||||
| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
|
||||
|
||||
**json回复:**
|
||||
|
||||
根对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ------- | ---- | -------- | ------------------------------------------------------------ |
|
||||
| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-102:账号被封停<br />-111:csrf校验失败<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 />36712:level 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 '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'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>查看响应示例:</summary>
|
||||
|
||||
```json
|
||||
{
|
||||
"code":0,
|
||||
"message":"0",
|
||||
"ttl":1,
|
||||
"data":{
|
||||
"action":"",
|
||||
"dmid":32161968826613767,
|
||||
"dmid_str":"32161968826613767",
|
||||
"visible":true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## 发送互动弹幕
|
||||
|
||||
> https://api.bilibili.com/x/v2/dm/command/post
|
||||
|
||||
*请求方式:POST*
|
||||
|
||||
认证方式:Cookie(SESSDATA)或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 ):**
|
||||
|
||||
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|
||||
| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ |
|
||||
| access_key | str | APP登录Token | APP方式必要 | |
|
||||
| type | num | 互动弹幕类型 | 必要 | 1:UP主头像弹幕<br />2:关联视频弹幕<br />5:视频内嵌引导关注按钮 |
|
||||
| aid | num | 稿件avid | 必要 | |
|
||||
| cid | num | 视频cid | 必要 | |
|
||||
| progress | num | 弹幕出现在视频内的时间 | 非必要 | 单位为毫秒<br />默认为0 |
|
||||
| plat | num | 平台标识 | 必要 | 1:web端<br />2:安卓端<br />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:成功<br />-101:账号未登录<br />-102:账号被封停<br />-111:csrf校验失败<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 | 用户mid | |
|
||||
| oid | num | 视频cid | |
|
||||
| progress | num | 弹幕出现在视频内的时间 | |
|
||||
| type | num | 互动弹幕类型 | 1:UP主头像弹幕<br />2:关联视频弹幕<br />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:仅关注<br />1:仅三联<br />2:关注+三联 |
|
||||
|
||||
**示例:**
|
||||
|
||||
为视频`av201947622`(cid为`230709860`)的5000ms位置发送一条UP主头像弹幕`test`
|
||||
|
||||
```shell
|
||||
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'
|
||||
```
|
||||
|
||||
<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 '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'
|
||||
```
|
||||
|
||||
<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坐标为118,Y坐标为82,持续时间为5000ms
|
||||
|
||||
```shell
|
||||
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'
|
||||
```
|
||||
|
||||
<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>
|
||||
|
||||
|
||||
## 撤回弹幕
|
||||
|
||||
> https://api.bilibili.com/x/dm/recall
|
||||
|
||||
*请求方式: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:成功<br />-101:账号未登录<br />-102:账号被封停<br />-111:csrf校验失败<br />-400:请求错误<br />-404:无此项<br />36301:撤回失败,弹幕发送已过2分钟<br />36302:撤回失败,弹幕已经被删除或撤回<br />36303:撤回失败,今天撤回的机会已经用完<br />36304:撤回失败,服务器出错 |
|
||||
| message | str | 错误信息 | 成功后显示剩余次数 |
|
||||
| ttl | num | 1 | |
|
||||
|
||||
**示例:**
|
||||
|
||||
撤回`cid=168901231`下的弹幕`32310301474947077`的弹幕
|
||||
|
||||
```shell
|
||||
curl 'https://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>
|
||||
|
||||
## 购买高级弹幕发送权限
|
||||
|
||||
> https://api.bilibili.com/x/dm/adv/buy
|
||||
|
||||
*请求方式: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:成功<br />-101:账号未登录<br />-102:账号被封停<br />-111:csrf校验失败<br />-107:硬币不足<br />-400:请求错误<br />36007:不允许购买<br />36009:正在确认中<br />36010:已购买 |
|
||||
| message | str | 返回信息 | |
|
||||
| ttl | num | 1 | |
|
||||
|
||||
示例:
|
||||
|
||||
购买视频cid为`168901231`的高级弹幕发送权限
|
||||
|
||||
```shell
|
||||
curl 'https://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>
|
||||
|
||||
## 检测高级弹幕发送权限
|
||||
|
||||
> https://api.bilibili.com/x/dm/adv/state
|
||||
|
||||
*请求方式:GET*
|
||||
|
||||
认证方式:Cookie(SESSDATA)或APP
|
||||
|
||||
**url参数:**
|
||||
|
||||
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|
||||
| ---------- | ---- | ------------ | ----------- | ---- |
|
||||
| access_key | str | APP登录Token | APP方式必要 | |
|
||||
| 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 'https://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>
|
||||
|
||||
## 查询弹幕点赞数
|
||||
|
||||
> https://api.bilibili.com/x/v2/dm/thumbup/stats
|
||||
|
||||
*请求方式:GET*
|
||||
|
||||
认证方式:Cookie(SESSDATA)或APP
|
||||
|
||||
**url参数:**
|
||||
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|
||||
| ---------- | ---- | ------------ | ----------- | ------------------- |
|
||||
| access_key | str | APP登录Token | APP方式必要 | |
|
||||
| oid | num | 视频cid | 必要 | |
|
||||
| ids | nums | 弹幕dmid列表 | 必要 | 多个id之间用`,`分隔 |
|
||||
|
||||
**json回复**
|
||||
|
||||
根对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ------- | ---- | -------- | --------------------------- |
|
||||
| code | num | 返回值 | 0:成功<br />-400:请求错误 |
|
||||
| message | str | 错误信息 | 默认为0 |
|
||||
| ttl | num | 1 | |
|
||||
| data | obj | 信息本体 | |
|
||||
|
||||
`data`对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| -------- | ---- | ---------------- | --------------------------------- |
|
||||
| {弹幕id} | obj | 弹幕id对应的信息 | id分别对应请求参数中的`ids`,下同 |
|
||||
| …… | obj | 弹幕id对应的信息 | |
|
||||
|
||||
`{弹幕id}`对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| --------- | ---- | -------- | ------------------------------------------------------------ |
|
||||
| likes | num | 点赞数 | |
|
||||
| user_like | num | 是否点赞 | 0:未点赞<br />1:已点赞<br />需要登录(Cookie或APP) <br />未登录恒为0 |
|
||||
| id_str | str | 弹幕dmid | |
|
||||
|
||||
**示例**
|
||||
|
||||
查询`cid=236871317`下的弹幕`35600074482384899`、`38880975220375559`、`39052528418553863`点赞数
|
||||
|
||||
```shell
|
||||
curl -G 'https://api.bilibili.com/x/v2/dm/thumbup/stats' \
|
||||
--data-urlencode 'oid=236871317' \
|
||||
--data-urlencode 'ids=39019145405661191,38880975220375559,39052528418553863' \
|
||||
-b 'SESSDATA=xxx'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>查看响应示例:</summary>
|
||||
|
||||
```json
|
||||
{
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## 点赞弹幕
|
||||
|
||||
> https://api.bilibili.com/x/v2/dm/thumbup/add
|
||||
|
||||
*请求方式:POST*
|
||||
|
||||
认证方式:Cookie(SESSDATA)或APP
|
||||
|
||||
**正文参数( application/x-www-form-urlencoded ):**
|
||||
|
||||
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|
||||
| ---------- | ---- | ------------------------ | -------------- | ------------------------ |
|
||||
| access_key | str | APP登录Token | APP方式必要 | |
|
||||
| dmid | num | 弹幕dmid | 必要 | |
|
||||
| oid | num | 视频cid | 必要 | |
|
||||
| op | num | 操作 | 必要 | 1:点赞<br />2:取消点赞 |
|
||||
| platform | str | 平台 | 非必要 | |
|
||||
| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
|
||||
|
||||
**json回复:**
|
||||
|
||||
根对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
|---------|-----|------|------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf 校验失败<br />-400:请求错误<br />36106:该弹幕已被删除<br/>36805:该视频禁止点赞弹幕<br/>65004:取消赞失败 未点赞过<br />65006:已赞过 |
|
||||
| message | str | 错误信息 | 默认为0 |
|
||||
| tll | num | 1 | |
|
||||
|
||||
**示例**
|
||||
|
||||
为`cid=145928946`下的弹幕`35600074482384899`点赞
|
||||
|
||||
```shell
|
||||
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'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>查看响应示例:</summary>
|
||||
|
||||
```json
|
||||
{
|
||||
"code":0,
|
||||
"message":"0",
|
||||
"ttl":1
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## 举报弹幕
|
||||
|
||||
> https://api.bilibili.com/x/dm/report/add
|
||||
|
||||
*请求方式: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:成功<br />-101:账号未登录<br />-111:csrf 校验失败<br />-400:请求错误<br />36201:举报弹幕不存在<br />36203:举报原因类型错误<br />36204:已举报 |
|
||||
| message | str | 错误信息 | 默认为空 |
|
||||
| tll | num | 1 | 举报失败时 |
|
||||
|
||||
**示例**
|
||||
|
||||
举报`cid=145928946`下的弹幕`35600074482384899`,理由是`引战`
|
||||
|
||||
```shell
|
||||
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'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>查看响应示例:</summary>
|
||||
|
||||
```json
|
||||
{
|
||||
"code":0,
|
||||
"message":""
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## 保护&删除弹幕
|
||||
|
||||
> https://api.bilibili.com/x/v2/dm/edit/state
|
||||
|
||||
*请求方式: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:删除弹幕<br />2:弹幕保护<br />3:取消保护 |
|
||||
| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
|
||||
|
||||
**json回复:**
|
||||
|
||||
根对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ------- | ---- | -------- | ------------------------------------------------------------ |
|
||||
| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf 校验失败<br />-400:请求错误<br />-403:访问权限不足 |
|
||||
| message | str | 错误信息 | 默认为0 |
|
||||
| ttl | num | 1 | |
|
||||
|
||||
**示例**
|
||||
|
||||
删除`cid=145928946`下的弹幕`35600074482384899`、`39067304918515717`、`39082777041174531`
|
||||
|
||||
```shell
|
||||
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'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>查看响应示例:</summary>
|
||||
|
||||
```json
|
||||
{
|
||||
"code":0,
|
||||
"message":"0",
|
||||
"ttl":1
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## 修改字幕池
|
||||
|
||||
> https://api.bilibili.com/x/v2/dm/edit/pool
|
||||
|
||||
*请求方式: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:移出字幕池<br />1:移入字幕池 |
|
||||
| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
|
||||
|
||||
**json回复:**
|
||||
|
||||
根对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ------- | ---- | -------- | ------------------------------------------------------------ |
|
||||
| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf 校验失败<br />-400:请求错误<br />-403:访问权限不足 |
|
||||
| message | str | 错误信息 | 默认为0 |
|
||||
| ttl | num | 1 | |
|
||||
|
||||
**示例**
|
||||
|
||||
将`cid=145928946`下的弹幕`35600074482384899`、`39067304918515717`、`39082777041174531`移入字幕池
|
||||
|
||||
```shell
|
||||
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'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>查看响应示例:</summary>
|
||||
|
||||
```json
|
||||
{
|
||||
"code":0,
|
||||
"message":"0",
|
||||
"ttl":1
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
513
docs/danmaku/buzzword.md
Normal file
513
docs/danmaku/buzzword.md
Normal file
@@ -0,0 +1,513 @@
|
||||
# 名词解释
|
||||
|
||||
该功能用于解释和科普 B 站弹幕、评论等的专有名词及梗,展示其出处,并推荐相关站内内容
|
||||
|
||||
可使用页面 https://www.bilibili.com/blackboard/activity-joFQ0txEQd.html?type_id=4 查看名词列表
|
||||
|
||||
可使用页面 https://www.bilibili.com/blackboard/activity-WroMZNunfa.html?id=1 查看名词解释详情
|
||||
|
||||
- [拉取名词解释列表](#拉取名词解释列表)
|
||||
- [查询名词解释详情](#查询名词解释详情)
|
||||
|
||||
---
|
||||
|
||||
## 拉取名词解释列表
|
||||
|
||||
> https://api.bilibili.com/x/v2/dm/buzzword/list
|
||||
|
||||
*请求方式:GET*
|
||||
|
||||
**url参数:**
|
||||
|
||||
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|
||||
| ------- | ---- | -------- | ------ | ---------------------------------------------- |
|
||||
| type_id | num | 名词类型 | 必要 | 如:4代表“哔哩哔哩热词图鉴”<br />5代表“语言类” |
|
||||
| pn | num | 页码 | 非必要 | 默认为1 |
|
||||
| ps | num | 每页项数 | 非必要 | 默认为20 |
|
||||
|
||||
**json回复:**
|
||||
|
||||
根对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ------- | ---- | -------- | --------------------------- |
|
||||
| code | num | 返回值 | 0:成功<br />-400:请求错误 |
|
||||
| message | str | 错误信息 | 默认为0 |
|
||||
| ttl | num | 1 | |
|
||||
| data | obj | 数据本体 | |
|
||||
|
||||
`data`对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| --------- | ----- | -------- | ---- |
|
||||
| type | obj | 类型信息 | |
|
||||
| buzzwords | array | 词语列表 | |
|
||||
| page | obj | 页面信息 | |
|
||||
|
||||
`data`中的`type`对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ----------- | ---- | -------- | ------ |
|
||||
| id | num | 类型 id | |
|
||||
| name | str | 类型名称 | |
|
||||
| name_pinyin | obj | 拼音信息 | 见副表 |
|
||||
|
||||
`data`中的`buzzwords`数组:
|
||||
|
||||
| 项 | 类型 | 内容 | 备注 |
|
||||
| ---- | ---- | --------------- | ---- |
|
||||
| 0 | obj | 名词条目 1 | |
|
||||
| n | obj | 名词条目(n+1) | |
|
||||
| …… | obj | …… | …… |
|
||||
|
||||
`buzzwords`数组中的对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ----------- | ---- | ------------ | ----------------------------------------- |
|
||||
| id | num | 名词 id | 用于[查询名词解释详情](#查询名词解释详情) |
|
||||
| name | str | 名词 | |
|
||||
| name_pinyin | obj | 拼音信息 | 见副表 |
|
||||
| picture | str | 名词图片 url | |
|
||||
|
||||
`data`中的`page`对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ----- | ---- | -------- | ---- |
|
||||
| num | num | 当前页码 | |
|
||||
| size | num | 每页项数 | |
|
||||
| total | num | 总计项数 | |
|
||||
| cnt | num | (?) | |
|
||||
|
||||
副表:拼音`name_pinyin`对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| -------------- | ---- | -------- | ---- |
|
||||
| 对应单个汉字 1 | str | 拼音字串 | |
|
||||
| 对应单个汉字 n | str | 拼音字串 | |
|
||||
| …… | str | …… | …… |
|
||||
|
||||
**示例:**
|
||||
|
||||
拉取对应`哔哩哔哩热词图鉴`的名词列表,以20项为一页拉取第1页
|
||||
|
||||
```bash
|
||||
curl -G 'https://api.bilibili.com/x/v2/dm/buzzword/list' \
|
||||
--data-urlencode 'type_id=4' \
|
||||
--data-urlencode 'ps=10' \
|
||||
--data-urlencode 'pn=1'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>查看响应示例:</summary>
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 0,
|
||||
"message": "0",
|
||||
"ttl": 1,
|
||||
"data": {
|
||||
"type": {
|
||||
"id": 4,
|
||||
"name": "哔哩哔哩热词图鉴",
|
||||
"name_pinyin": {
|
||||
"哔": "bì",
|
||||
"哩": "lī",
|
||||
"图": "tú",
|
||||
"热": "rè",
|
||||
"词": "cí",
|
||||
"鉴": "jiàn"
|
||||
},
|
||||
"level": 0
|
||||
},
|
||||
"buzzwords": [
|
||||
{
|
||||
"id": 145,
|
||||
"name": "麦乐鸡侠",
|
||||
"name_pinyin": {
|
||||
"乐": "lè",
|
||||
"侠": "xiá",
|
||||
"鸡": "jī",
|
||||
"麦": "mài"
|
||||
},
|
||||
"picture": "https://i0.hdslb.com/bfs/archive/1cdec1ff86733a38c1a9ff824dde6d4121955aee.png"
|
||||
},
|
||||
{
|
||||
"id": 146,
|
||||
"name": "金钱豹",
|
||||
"name_pinyin": {
|
||||
"豹": "bào",
|
||||
"金": "jīn",
|
||||
"钱": "qián"
|
||||
},
|
||||
"picture": "https://i0.hdslb.com/bfs/archive/3d492f4c01da7d15073d3175871e14ed56f0f78a.png"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "通辽可汗",
|
||||
"name_pinyin": {
|
||||
"可": "kě",
|
||||
"汗": "hàn",
|
||||
"辽": "liáo",
|
||||
"通": "tōng"
|
||||
},
|
||||
"picture": "https://i0.hdslb.com/bfs/archive/ca332fb5f9da48497298cf26fe07b1f061e53a0b.jpg"
|
||||
},
|
||||
{
|
||||
"id": 123,
|
||||
"name": "资本马桶搋",
|
||||
"name_pinyin": {
|
||||
"搋": "chuāi",
|
||||
"本": "běn",
|
||||
"桶": "tǒng",
|
||||
"资": "zī",
|
||||
"马": "mǎ"
|
||||
},
|
||||
"picture": "https://i0.hdslb.com/bfs/archive/aaf33dced1941af0946f37c62f4b48fcaba9c9a2.jpg"
|
||||
},
|
||||
{
|
||||
"id": 133,
|
||||
"name": "马了顶大",
|
||||
"name_pinyin": {
|
||||
"了": "le",
|
||||
"大": "dà",
|
||||
"顶": "dǐng",
|
||||
"马": "mǎ"
|
||||
},
|
||||
"picture": "https://i0.hdslb.com/bfs/archive/9653bd7f8d2c804aceb8043ebd5c8360a93e26c0.png"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "退钱",
|
||||
"name_pinyin": {
|
||||
"退": "tuì",
|
||||
"钱": "qián"
|
||||
},
|
||||
"picture": "https://i0.hdslb.com/bfs/archive/2540db0bc94792b1f5be75e19aa05d33666e3036.jpg"
|
||||
},
|
||||
{
|
||||
"id": 141,
|
||||
"name": "森林冰火人",
|
||||
"name_pinyin": {
|
||||
"人": "rén",
|
||||
"冰": "bīng",
|
||||
"林": "lín",
|
||||
"森": "sēn",
|
||||
"火": "huǒ"
|
||||
},
|
||||
"picture": "https://i0.hdslb.com/bfs/archive/bc5ca101313d4db223c395d64779e76eb3482d60.jpg"
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "学霸题",
|
||||
"name_pinyin": {
|
||||
"学": "xué",
|
||||
"霸": "bà",
|
||||
"题": "tí"
|
||||
},
|
||||
"picture": "https://i0.hdslb.com/bfs/archive/a67a0a57ec48beb8c8dcc9f26c7bb66cd0ed5da7.jpg"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "张三",
|
||||
"name_pinyin": {
|
||||
"三": "sān",
|
||||
"张": "zhāng"
|
||||
},
|
||||
"picture": "https://i0.hdslb.com/bfs/archive/f4dac6fdc5c58639b79ae87385e9b9f7eae3b263.png"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "饮茶先啦",
|
||||
"name_pinyin": {
|
||||
"先": "xiān",
|
||||
"啦": "la",
|
||||
"茶": "chá",
|
||||
"饮": "yǐn"
|
||||
},
|
||||
"picture": "https://i0.hdslb.com/bfs/archive/4c90ad207f0041e2dccd586827028aea50c2dc7d.jpg"
|
||||
}
|
||||
],
|
||||
"page": {
|
||||
"num": 1,
|
||||
"size": 10,
|
||||
"total": 143,
|
||||
"cnt": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## 查询名词解释详情
|
||||
|
||||
> https://api.bilibili.com/x/v2/dm/buzzword/detail
|
||||
|
||||
*请求方式:GET*
|
||||
|
||||
**url参数:**
|
||||
|
||||
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|
||||
| ------ | ---- | ------ | ------ | -------------------------------- |
|
||||
| id | num | 名词id | 必要 | 如:1代表“kksk”<br />2代表“打脸” |
|
||||
|
||||
**json回复:**
|
||||
|
||||
根对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ------- | --------------------------------- | -------- | --------------------------------------------------- |
|
||||
| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:不存在该名词 |
|
||||
| message | str | 错误信息 | 默认为0 |
|
||||
| ttl | num | 1 | |
|
||||
| data | 有数据时:obj<br />无数据时:null | 数据本体 | |
|
||||
|
||||
`data`对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ----------------- | ------------------------------- | -------------------- | ----------------------------- |
|
||||
| id | num | 名词id | |
|
||||
| name | str | 名词 | |
|
||||
| description | str | 名词解释 | |
|
||||
| picture | str | 名词图片 url | |
|
||||
| types | array | 父分类列表 | 该名词可能隶属多个父分类 |
|
||||
| related_words | array | 近义词/相关词 | |
|
||||
| uppers | 有数据:array<br />无数据:null | 相关 UP 列表 | 该名词(梗)出处 |
|
||||
| related_ugc | 有数据:array<br />无数据:null | 相关 ucg 视频列表 | 该名词(梗)出处 |
|
||||
| related_ogv | 有数据:array<br />无数据:null | 相关 pgc 视频列表 | 该名词(梗)出处 |
|
||||
| guides | obj | 推荐创作信息 | |
|
||||
| related_buzzwords | array | 推荐名词列表 | |
|
||||
| topic | obj | 关联话题信息 | |
|
||||
| show_dynamic | bool | 是否展示话题动态聚合 | `true`展示<br />`false`不展示 |
|
||||
|
||||
`data`中的`types`数组:
|
||||
|
||||
| 项 | 类型 | 内容 | 备注 |
|
||||
| ---- | ---- | ------------- | ---- |
|
||||
| 0 | obj | 父分类 1 | |
|
||||
| n | obj | 父分类(n+1) | |
|
||||
| …… | obj | …… | …… |
|
||||
|
||||
`types`数组中的对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ----------- | ---- | -------- | ---- |
|
||||
| id | num | 类型 id | |
|
||||
| name | str | 类型名称 | |
|
||||
| name_pinyin | null | | |
|
||||
| level | num | 权重? | |
|
||||
|
||||
`data`中的`related_words`数组:
|
||||
|
||||
| 项 | 类型 | 内容 | 备注 |
|
||||
| ---- | ---- | -------------------- | ---- |
|
||||
| 0 | str | 近义词/相关词1 | |
|
||||
| n | str | 近义词/相关词(n+1) | |
|
||||
| …… | str | …… | …… |
|
||||
|
||||
`data`中的`uppers`数组:
|
||||
|
||||
| 项 | 类型 | 内容 | 备注 |
|
||||
| ---- | ---- | -------------- | ---- |
|
||||
| 0 | obj | 相关 UP 1 | |
|
||||
| n | obj | 相关 UP(n+1) | |
|
||||
| …… | obj | …… | …… |
|
||||
|
||||
`uppers`数组中的对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ---------- | ---- | ------------- | ------------------------------------------------------------ |
|
||||
| id | num | UP 主 mid | |
|
||||
| recommend | str | | |
|
||||
| name | str | UP 主昵称 | |
|
||||
| face | str | UP 主头像 url | |
|
||||
| official | obj | UP 主认证信息 | |
|
||||
| followed | bool | 是否关注 | 需要登录(Cookie 或 APP)<br />`true`已关注<br />`false`未关注 |
|
||||
| fans_count | num | 粉丝数 | |
|
||||
|
||||
`data`中的`related_ugc`数组:
|
||||
|
||||
| 项 | 类型 | 内容 | 备注 |
|
||||
| ---- | ---- | -------------------- | ---- |
|
||||
| 0 | obj | 相关 ucg 视频 1 | |
|
||||
| n | obj | 相关 ucg 视频(n+1) | |
|
||||
| …… | obj | …… | …… |
|
||||
|
||||
`related_ugc`数组中的对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| -------- | ---- | ------------ | -------- |
|
||||
| aid | num | 稿件 avid | |
|
||||
| cid | num | 视频 cid | |
|
||||
| name | str | 视频标题 | |
|
||||
| link | str | 空 | |
|
||||
| play | num | 播放数 | |
|
||||
| danmaku | num | 弹幕数 | |
|
||||
| duration | num | 视频时长 | 单位为秒 |
|
||||
| cover | str | 视频封面 url | |
|
||||
|
||||
`data`中的`related_ogv`数组:
|
||||
|
||||
| 项 | 类型 | 内容 | 备注 |
|
||||
| ---- | ---- | -------------------- | ---- |
|
||||
| 0 | obj | 相关 pgc 视频 1 | |
|
||||
| n | obj | 相关 pgc 视频(n+1) | |
|
||||
| …… | obj | …… | …… |
|
||||
|
||||
`related_ogv`数组中的对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ----------- | ---- | ------------ | ------------------------------------- |
|
||||
| season_id | num | 剧集 ssid | |
|
||||
| name | str | 剧集标题 | |
|
||||
| play | num | 播放数 | |
|
||||
| followed | num | 追剧/番数 | |
|
||||
| is_followed | bool | 是否追剧/番 | `true`已追剧/番<br />`false`未追剧/番 |
|
||||
| new_ep | str | 最新一集信息 | |
|
||||
| cover | str | 剧集封面 url | |
|
||||
| episodes | null | | |
|
||||
| follow_info | obj | | |
|
||||
|
||||
`data`中的`guides`对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| --------------- | ----- | ---------------- | ---- |
|
||||
| description | str | 创作推介文案 | |
|
||||
| contribute_tags | array | 创作跳转按钮信息 | |
|
||||
|
||||
`guides`中的`contribute_tags`数组:
|
||||
|
||||
| 项 | 类型 | 内容 | 备注 |
|
||||
| ---- | ---- | ------------------- | ---- |
|
||||
| 0 | obj | 创作跳转按钮 1 | |
|
||||
| n | obj | 创作跳转按钮(n+1) | |
|
||||
| …… | obj | …… | …… |
|
||||
|
||||
`contribute_tags`数组中的对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ----- | ---- | -------- | -------------------------- |
|
||||
| title | str | 按钮文案 | |
|
||||
| link | str | 跳转 uri | 跳转至必剪或客户端创作入口 |
|
||||
|
||||
`data`中的`related_buzzwords`数组:
|
||||
|
||||
| 项 | 类型 | 内容 | 备注 |
|
||||
| ---- | ---- | --------------- | ---- |
|
||||
| 0 | obj | 推荐名词 1 | |
|
||||
| n | obj | 推荐名词(n+1) | |
|
||||
| …… | obj | …… | …… |
|
||||
|
||||
`related_buzzwords`数组中的对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ----------- | ---- | ------- | ----------------------------------------- |
|
||||
| id | num | 名词 id | 用于[查询名词解释详情](#查询名词解释详情) |
|
||||
| name | str | 名词 | |
|
||||
| name_pinyin | null | | |
|
||||
| picture | str | 空 | |
|
||||
|
||||
`data`中的`topic`对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ---------- | ---- | ------------ | ---- |
|
||||
| topic_id | num | 关联话题id | |
|
||||
| topic_name | str | 关联话题名称 | |
|
||||
|
||||
**示例:**
|
||||
|
||||
查询名词`kksk`的详情
|
||||
|
||||
```bash
|
||||
curl -G 'https://api.bilibili.com/x/v2/dm/buzzword/detail' \
|
||||
--data-urlencode 'id=1'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>查看响应示例:</summary>
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 0,
|
||||
"message": "0",
|
||||
"ttl": 1,
|
||||
"data": {
|
||||
"id": 1,
|
||||
"name": "kksk",
|
||||
"description": "该梗是日语“ここすき”罗马音的字母缩写,翻译为喜欢这里。一般作为赞扬认可的弹幕出现在视频画面中。由于在2017年随着以《恶魔人》为BGM和语音剪辑素材的《美洲豹人》系列作品的传播,让这个梗快速的通过弹幕流行开,并频繁出现在各类稿件经典画面中。",
|
||||
"picture": "https://i0.hdslb.com/bfs/archive/c269c9ca1b5eb730ee1d77aadd28e3165eaa4d6d.png",
|
||||
"types": [
|
||||
{
|
||||
"id": 4,
|
||||
"name": "哔哩哔哩热词图鉴",
|
||||
"name_pinyin": null,
|
||||
"level": 0
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "语言类",
|
||||
"name_pinyin": null,
|
||||
"level": 0
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "空耳",
|
||||
"name_pinyin": null,
|
||||
"level": 0
|
||||
}
|
||||
],
|
||||
"related_words": [
|
||||
"恶魔人",
|
||||
"美洲豹人",
|
||||
"喜欢这里"
|
||||
],
|
||||
"uppers": [
|
||||
{
|
||||
"id": 488450,
|
||||
"recommend": "",
|
||||
"name": "PXN1",
|
||||
"face": "http://i2.hdslb.com/bfs/face/96dd8cc4f2922bd81e5a938f6ad02b3e3041debe.jpg",
|
||||
"official": {
|
||||
"role": 0,
|
||||
"title": "",
|
||||
"desc": "",
|
||||
"type": -1
|
||||
},
|
||||
"followed": false,
|
||||
"fans_count": 1416
|
||||
}
|
||||
],
|
||||
"related_ugc": [
|
||||
{
|
||||
"aid": 30056798,
|
||||
"cid": 52388183,
|
||||
"name": "恶 魔 人",
|
||||
"link": "",
|
||||
"play": 3434500,
|
||||
"danmaku": 8292,
|
||||
"duration": 188,
|
||||
"cover": "http://i0.hdslb.com/bfs/archive/f0433d2dacf4b3397a9390ab982cefd138dbf8c8.jpg"
|
||||
}
|
||||
],
|
||||
"related_ogv": null,
|
||||
"guides": {
|
||||
"description": "使用同款热梗素材创作你的专属作品吧!添加热梗主题#kksk是什么梗#参与投稿,优质稿件会优先展示在哔哩哔哩热词图鉴相关推荐中哦!",
|
||||
"contribute_tags": [
|
||||
{
|
||||
"title": "拍同款",
|
||||
"link": "bilibili://uper/appTraffic?appScheme=bcut%3A%2F%2Fstudio%2Fmaterial_editor%2F%3Ftab_id%3D1%26sub_id%3D90160%26third_id%3D150281&appName=com.bilibili.studio&appID=1299589486"
|
||||
}
|
||||
]
|
||||
},
|
||||
"related_buzzwords": null,
|
||||
"topic": {
|
||||
"topic_id": 7642,
|
||||
"topic_name": "kksk是什么梗"
|
||||
},
|
||||
"show_dynamic": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
75
docs/danmaku/config.md
Normal file
75
docs/danmaku/config.md
Normal file
@@ -0,0 +1,75 @@
|
||||
# 弹幕个人配置修改
|
||||
|
||||
- [修改弹幕个人配置(web端)](#修改弹幕个人配置web端)
|
||||
|
||||
---
|
||||
|
||||
## 修改弹幕个人配置(web端)
|
||||
|
||||
> https://api.bilibili.com/x/v2/dm/web/config
|
||||
|
||||
*请求方式:POST*
|
||||
|
||||
认证方式:Cookie(SESSDATA)或APP
|
||||
|
||||
**正文参数( application/x-www-form-urlencoded ):**
|
||||
|
||||
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|
||||
| ------------ | ------ | ------------------------ | -------------- | ------------------------------------------------------------ |
|
||||
| access_key | str | APP登录Token | APP方式必要 | |
|
||||
| dm_switch | bool | 弹幕开关 | 非必要 | true:开启<br />false:关闭 |
|
||||
| blockscroll | bool | 屏蔽类型-滚动 | 非必要 | true:不屏蔽<br />false:屏蔽 |
|
||||
| blocktop | bool | 屏蔽类型-顶部 | 非必要 | 同上 |
|
||||
| blockbottom | bool | 屏蔽类型-底部 | 非必要 | 同上 |
|
||||
| blockcolor | bool | 屏蔽类型-彩色 | 非必要 | 同上 |
|
||||
| blockspecial | bool | 屏蔽类型-特殊 | 非必要 | 同上 |
|
||||
| ai_switch | bool | 是否打开智能云屏蔽 | 非必要 | true:开启<br />false:关闭 |
|
||||
| ai_level | num | 智能云屏蔽等级 | 非必要 | 区间:[0-10]<br />0为默认等级(3级) |
|
||||
| preventshade | bool | 防挡弹幕(底部15%) | 非必要 | true:开启<br />false:关闭 |
|
||||
| dmask | bool | 智能防挡弹幕(人像蒙版) | 非必要 | 同上 |
|
||||
| opacity | num | 弹幕不透明度 | 非必要 | 区间:[0-1] |
|
||||
| dmarea | num | 弹幕显示区域 | 非必要 | 100:不重叠<br />75:3/4屏<br />50:半瓶<br />25:1/4屏<br />0:不限 |
|
||||
| speedplus | num | 弹幕速度 | 非必要 | 区间:[0.4-1.6] |
|
||||
| fontsize | num | 字体大小 | 非必要 | 区间:[0.4-1.6] |
|
||||
| screensync | bool | 跟随屏幕缩放比例 | 非必要 | true:开启<br />false:关闭 |
|
||||
| speedsync | bool | 根据播放倍速调整速度 | 非必要 | 同上 |
|
||||
| fontfamily | str | 字体类型 | 非必要 | 未启用 |
|
||||
| bold | bool | 粗体 | 非必要 | 未启用 |
|
||||
| fontborder | num | 描边类型 | 非必要 | 0:重墨<br />1:描边<br />2:45°投影 |
|
||||
| drawType | string | 渲染类型 | 非必要 | 未启用 |
|
||||
| ts | num | 当前时间戳 | 非必要 | |
|
||||
| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
|
||||
|
||||
**json回复:**
|
||||
|
||||
根对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ------- | ---- | -------- | ------------------------------------------------------------ |
|
||||
| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-111:csrf校验失败<br />-400:请求错误<br />23004:数据没有修改 |
|
||||
| message | str | 错误信息 | 默认为0 |
|
||||
| ttl | num | 1 | |
|
||||
|
||||
**示例:**
|
||||
|
||||
关闭弹幕
|
||||
|
||||
```shell
|
||||
curl 'https://api.bilibili.com/x/v2/dm/web/config' \
|
||||
--data-urlencode 'dm_switch=false' \
|
||||
--data-urlencode 'csrf=xxx' \
|
||||
-b 'SESSDATA=xxx'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>查看响应示例:</summary>
|
||||
|
||||
```json
|
||||
{
|
||||
"code":0,
|
||||
"message":"0",
|
||||
"ttl":1
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
111
docs/danmaku/danmaku_proto.md
Normal file
111
docs/danmaku/danmaku_proto.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# protobuf弹幕
|
||||
|
||||
2020年5月23日,哔哩哔哩网页端及移动端启用了新的默认弹幕api,网页端弹幕显示的上限变为原弹幕池上限的两倍。
|
||||
|
||||
新的api是以6分钟为一个单位加载,即每次加载6分钟内的弹幕
|
||||
|
||||
- [获取实时弹幕](#获取实时弹幕)
|
||||
|
||||
---
|
||||
|
||||
## 获取实时弹幕
|
||||
|
||||
> https://api.bilibili.com/x/v2/dm/web/seg.so (web端)
|
||||
>
|
||||
> https://api.bilibili.com/x/v2/dm/list/seg.so (APP端)
|
||||
>
|
||||
> https://i0.hdslb.com/bfs/dm/{data}.bin (BAS/代码弹幕专包)
|
||||
|
||||
*请求方式:GET*
|
||||
|
||||
此接口与漫画弹幕相同
|
||||
|
||||
只能返回普通弹幕(`pool=1` `mode=1-7`)和代码弹幕(`pool=2` `mode=8`),BAS弹幕(`pool=2` `mode=9`)请从[弹幕元数据](danmaku_view_proto.md)中获取
|
||||
|
||||
互动弹幕(UP主头像弹幕、关联视频、内嵌关注按钮)也不存在这个接口,请从[弹幕元数据](danmaku_view_proto.md)中获取
|
||||
|
||||
**注:仅获取6min的整数倍时间内的弹幕,6min内最多弹幕数为6000条(如第一包中弹幕`progress`值域为0-360000)**
|
||||
|
||||
**url参数:**
|
||||
|
||||
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|
||||
| ------------- | ---- | -------- | ------ | ----------- |
|
||||
| type | num | 弹幕类 | 必要 | 1:视频弹幕 |
|
||||
| oid | num | 视频cid | 必要 | |
|
||||
| pid | num | 稿件avid | 非必要 | |
|
||||
| segment_index | num | 分包 | 必要 | 6分钟一包 |
|
||||
|
||||
**proto回复:**
|
||||
|
||||
proto定义见:[bilibili.community.service.dm.v1.DmSegMobileReply](../grpc_api/bilibili/community/service/dm/v1/dm.proto)
|
||||
|
||||
- [protogen.marcgravell](https://protogen.marcgravell.com/): 在线编译protogen工具, 无需再安装本地编译器(生成文件需加后缀‘_pb2.py‘才可使用)
|
||||
|
||||
- [protobuf pip](https://pypi.org/project/protobuf/): 可一键安装的python的protogen解析库
|
||||
|
||||
消息`DmSegMobileReply`:
|
||||
|
||||
| 名称 | 类型 | 含义 | 备注 |
|
||||
| ----- | -------------------- | -------- | ---- |
|
||||
| elems | repeated DanmakuElem | 弹幕条目 | |
|
||||
|
||||
消息`DanmakuElem`:
|
||||
|
||||
| 名称 | 类型 | 含义 | 备注 |
|
||||
| -------- | ------ | ------------------ | ------------------------------------------------------------ |
|
||||
| id | int64 | 弹幕dmid | 唯一 可用于操作参数 |
|
||||
| progress | int32 | 视频内弹幕出现时间 | 毫秒 |
|
||||
| mode | int32 | 弹幕类型 | 1 2 3:普通弹幕<br />4:底部弹幕<br />5:顶部弹幕<br />6:逆向弹幕<br />7:高级弹幕<br />8:代码弹幕<br />9:BAS弹幕(仅限于特殊弹幕专包) |
|
||||
| fontsize | int32 | 弹幕字号 | 18:小<br />25:标准<br />36:大 |
|
||||
| color | uint32 | 弹幕颜色 | 十进制RGB888值 |
|
||||
| midHash | string | 发送者mid的HASH | 用于屏蔽用户和查看用户发送的所有弹幕 也可反查用户id |
|
||||
| content | string | 弹幕内容 | utf-8编码 |
|
||||
| ctime | int64 | 弹幕发送时间 | 时间戳 |
|
||||
| weight | int32 | 权重 | 用于智能屏蔽,根据弹幕语义及长度通过AI识别得出<br />范围:[0-10]<br />值越大权重越高 |
|
||||
| action | string | 动作? | 作用尚不明确 |
|
||||
| pool | int32 | 弹幕池 | 0:普通池<br />1:字幕池<br />2:特殊池(代码/BAS弹幕) |
|
||||
| idStr | string | 弹幕dmid | 字串形式<br />唯一 可用于操作参数 |
|
||||
|
||||
**示例:**
|
||||
|
||||
获取视频`av810872(cid=1176840)`(炮姐)的实时弹幕分包1
|
||||
|
||||
**注:[proto定义](../grpc_api/bilibili/community/service/dm/v1/dm.proto)需要编译,`bilibili.community.service.dm.v1.dm_pb2`并非通过pypi安装**
|
||||
|
||||
```python
|
||||
import requests
|
||||
import google.protobuf.text_format as text_format
|
||||
import bilibili.community.service.dm.v1.dm_pb2 as Danmaku
|
||||
|
||||
url = 'https://api.bilibili.com/x/v2/dm/web/seg.so'
|
||||
params = {
|
||||
'type': 1, # 弹幕类型
|
||||
'oid': 1176840, # cid
|
||||
'pid': 810872, # avid
|
||||
'segment_index': 1 # 弹幕分段
|
||||
}
|
||||
resp = requests.get(url, params)
|
||||
data = resp.content
|
||||
|
||||
danmaku_seg = Danmaku.DmSegMobileReply()
|
||||
danmaku_seg.ParseFromString(data)
|
||||
|
||||
print(text_format.MessageToString(danmaku_seg.elems[0], as_utf8=True))
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```
|
||||
id: 711923911
|
||||
progress: 47880
|
||||
mode: 1
|
||||
fontsize: 18
|
||||
color: 10092288
|
||||
midHash: "59417e95"
|
||||
content: "世界第一电击公主殿下,遇到你是我一生最美好的风景!吾炮赛高,永生不离!唯我超电磁炮永世长存! "
|
||||
ctime: 1418799826
|
||||
weight: 6
|
||||
idStr: "711923911"
|
||||
attr: 1
|
||||
```
|
||||
|
||||
298
docs/danmaku/danmaku_view_proto.md
Normal file
298
docs/danmaku/danmaku_view_proto.md
Normal file
@@ -0,0 +1,298 @@
|
||||
# 弹幕元数据
|
||||
|
||||
2020-09-25 B站更新了互动弹幕功能,包括UP主头像弹幕、关联视频弹幕、视频内嵌引导关注按钮三大功能
|
||||
|
||||
详情见:
|
||||
|
||||
[【客户端更新】6.10版本更新!UP主支持发布关联视频弹幕]( https://www.bilibili.com/read/cv7728299 )
|
||||
|
||||
[引导关注卡片](https://www.bilibili.com/blackboard/activity-c8a0iDRQy.html )
|
||||
|
||||
---
|
||||
|
||||
- [获取弹幕个人配置与互动弹幕及BAS(代码)弹幕专包(web端)](#获取弹幕个人配置与互动弹幕及BAS(代码)弹幕专包web端)
|
||||
- [实例](#实例)
|
||||
- [获取互动弹幕](#获取互动弹幕)
|
||||
- [获取BAS(代码)弹幕专包](#获取BAS(代码)弹幕专包)
|
||||
|
||||
---
|
||||
|
||||
## 获取弹幕个人配置与互动弹幕及BAS(代码)弹幕专包(web端)
|
||||
|
||||
> https://api.bilibili.com/x/v2/dm/web/view
|
||||
|
||||
*请求方式:GET*
|
||||
|
||||
认证方式:仅可Cookie(SESSDATA)
|
||||
|
||||
**url参数:**
|
||||
|
||||
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|
||||
| ------ | ---- | -------- | ------ | ----------- |
|
||||
| type | num | 弹幕类 | 必要 | 1:视频弹幕 |
|
||||
| oid | num | 视频cid | 必要 | |
|
||||
| pid | num | 稿件avid | 非必要 | |
|
||||
|
||||
**proto回复:**
|
||||
|
||||
消息`DmWebViewReply`:
|
||||
|
||||
| 名称 | 类型 | 含义 | 备注 |
|
||||
| ---------- | -------------------- | ---------------------- | ---------------------------- |
|
||||
| state | int32 | 弹幕开放状态 | 0:开放弹幕<br />1:禁止弹幕 |
|
||||
| text | string | ? | |
|
||||
| textSide | string | ? | |
|
||||
| dmSge | DmSegConfig | 分段弹幕包信息? | |
|
||||
| flag | DanmakuFlagConfig | ? | |
|
||||
| specialDms | repeated string | BAS(代码)弹幕专包url | |
|
||||
| checkBox | bool | ? | |
|
||||
| count | int64 | 实际弹幕总数 | 具有1500-6000不等的上限 |
|
||||
| commandDms | repeated CommandDm | 互动弹幕条目 | |
|
||||
| dmSetting | DanmuWebPlayerConfig | 弹幕个人配置 | 仅登录后存在 |
|
||||
|
||||
消息`dmSge`:
|
||||
|
||||
| 名称 | 类型 | 含义 | 备注 |
|
||||
| -------- | ----- | ------------ | ---------- |
|
||||
| pageSize | int64 | 分段时间? | 单位为毫秒 |
|
||||
| total | int64 | 最大分页数? | |
|
||||
|
||||
消息`flag`:
|
||||
|
||||
| 名称 | 类型 | 含义 | 备注 |
|
||||
| --------- | ------ | ---- | ---- |
|
||||
| recFlag | int32 | ? | |
|
||||
| recText | string | ? | |
|
||||
| recSwitch | int32 | ? | |
|
||||
|
||||
消息`commandDms`:
|
||||
|
||||
| 名称 | 类型 | 含义 | 备注 |
|
||||
| -------- | ------ | ------------ | ------------------------------------------------------------ |
|
||||
| id | int64 | 弹幕dmid | |
|
||||
| oid | int64 | 视频cid | |
|
||||
| mid | int64 | 发送者mid | |
|
||||
| command | string | 弹幕指令 | `#UP#`:UP主头像弹幕<br />`#LINK#`:关联视频弹幕<br />`#ATTENTION#`:视频内嵌引导关注按钮 |
|
||||
| content | string | 弹幕文字 | |
|
||||
| progress | int32 | 弹幕出现时间 | 单位为毫秒 |
|
||||
| ctime | string | 创建时间? | 此项为空 |
|
||||
| mtime | string | 修改时间? | 此项为空 |
|
||||
| extra | string | 弹幕负载数据 | json序列字串 |
|
||||
| idStr | string | 弹幕dmid | 字串形式 |
|
||||
|
||||
`extra`json序列:
|
||||
|
||||
类型为【UP主头像弹幕】时:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ---- | ---- | ----------- | ---- |
|
||||
| icon | str | UP主头像url | |
|
||||
|
||||
类型为【关联视频弹幕】时:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ----- | ---- | ------------------- | ---- |
|
||||
| aid | num | 关联视频的avid | |
|
||||
| title | str | 关联视频的标题 | |
|
||||
| icon | str | 关联视频按钮图片url | |
|
||||
| bvid | str | 关联视频的bvid | |
|
||||
|
||||
类型为【视频内嵌引导关注按钮】时:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| -------- | ---- | ------------ | ------------------------------------------ |
|
||||
| duration | num | 持续时间 | 单位为毫秒 |
|
||||
| posX | num | X坐标 | 区间:[118-549] |
|
||||
| posY | num | Y坐标 | 区间:[82-293] |
|
||||
| icon | str | 按钮图片url | 不应该是关注按钮吗,但这个是圆形的 |
|
||||
| type | num | 关注按钮类型 | 0:仅关注<br />1:仅三联<br />2:关注+三联 |
|
||||
|
||||
消息`dmSetting`:
|
||||
|
||||
| 名称 | 类型 | 含义 | 备注 |
|
||||
| ------------ | ------ | ------------------------ | ------------------------------------------------------------ |
|
||||
| dmSwitch | bool | 弹幕开关 | true:开启<br />false:关闭 |
|
||||
| aiSwitch | bool | 智能云屏蔽 | 同上 |
|
||||
| aiLevel | int32 | 智能云屏蔽级别 | 区间:[1-10] |
|
||||
| blocktop | bool | 屏蔽类型-顶部 | true:不屏蔽<br />false:屏蔽 |
|
||||
| blockscroll | bool | 屏蔽类型-滚动 | 同上 |
|
||||
| blockbottom | bool | 屏蔽类型-底部 | 同上 |
|
||||
| blockcolor | bool | 屏蔽类型-彩色 | 同上 |
|
||||
| blockspecial | bool | 屏蔽类型-特殊 | 同上 |
|
||||
| preventshade | bool | 防挡弹幕(底部15%) | true:开启<br />false:关闭 |
|
||||
| dmask | bool | 智能防挡弹幕(人像蒙版) | 同上 |
|
||||
| opacity | float | 弹幕不透明度 | 区间:[0-1] |
|
||||
| dmarea | int32 | 弹幕显示区域 | 100:不重叠<br />75:3/4屏<br />50:半瓶<br />25:1/4屏<br />0:不限 |
|
||||
| speedplus | float | 弹幕速度 | 区间:[0.4-1.6] |
|
||||
| fontsize | float | 字体大小 | 区间:[0.4-1.6] |
|
||||
| screensync | bool | 跟随屏幕缩放比例 | |
|
||||
| speedsync | bool | 根据播放倍速调整速度 | |
|
||||
| fontfamily | string | 字体类型? | 未启用 |
|
||||
| bold | bool | 粗体? | 未启用 |
|
||||
| fontborder | int32 | 描边类型 | 0:重墨<br />1:描边<br />2:45°投影 |
|
||||
| drawType | string | 渲染类型? | 未启用 |
|
||||
|
||||
protobuf结构体:
|
||||
|
||||
**web_dmview.proto**
|
||||
|
||||
```protobuf
|
||||
syntax = "proto3";
|
||||
|
||||
//分段弹幕包信息?
|
||||
message DmSegConfig {
|
||||
int64 pageSize = 1; //分段时间?
|
||||
int64 total = 2; //最大分页数?
|
||||
}
|
||||
|
||||
//
|
||||
message DanmakuFlagConfig {
|
||||
int32 recFlag = 1; //
|
||||
string recText = 2; //
|
||||
int32 recSwitch = 3; //
|
||||
}
|
||||
|
||||
// 互动弹幕条目
|
||||
message CommandDm {
|
||||
int64 id = 1; //弹幕dmid
|
||||
int64 oid = 2; //视频cid
|
||||
int64 mid = 3; //发送者mid
|
||||
string command = 4; //弹幕指令
|
||||
string content = 5; //弹幕文字
|
||||
int32 progress = 6; //弹幕出现时间
|
||||
string ctime = 7; //
|
||||
string mtime = 8; //
|
||||
string extra = 9; //弹幕负载数据
|
||||
string idStr = 10; //弹幕dmid(字串形式)
|
||||
}
|
||||
|
||||
//弹幕个人配置
|
||||
message DanmuWebPlayerConfig{
|
||||
bool dmSwitch=1; //弹幕开关
|
||||
bool aiSwitch=2; //智能云屏蔽
|
||||
int32 aiLevel=3; //智能云屏蔽级别
|
||||
bool blocktop=4; //屏蔽类型-顶部
|
||||
bool blockscroll=5; //屏蔽类型-滚动
|
||||
bool blockbottom=6; //屏蔽类型-底部
|
||||
bool blockcolor=7; //屏蔽类型-彩色
|
||||
bool blockspecial=8; //屏蔽类型-特殊
|
||||
bool preventshade=9; //防挡弹幕(底部15%)
|
||||
bool dmask=10; //智能防挡弹幕(人像蒙版)
|
||||
float opacity=11; //弹幕不透明度
|
||||
int32 dmarea=12; //弹幕显示区域
|
||||
float speedplus=13; //弹幕速度
|
||||
float fontsize=14; //字体大小
|
||||
bool screensync=15; //跟随屏幕缩放比例
|
||||
bool speedsync=16; //根据播放倍速调整速度
|
||||
string fontfamily=17; //字体类型?
|
||||
bool bold=18; //粗体?
|
||||
int32 fontborder=19; //描边类型
|
||||
string drawType=20; //渲染类型?
|
||||
}
|
||||
|
||||
message DmWebViewReply {
|
||||
int32 state = 1; //弹幕开放状态
|
||||
string text = 2; //
|
||||
string textSide = 3; //
|
||||
DmSegConfig dmSge = 4; //分段弹幕包信息?
|
||||
DanmakuFlagConfig flag = 5; //
|
||||
repeated string specialDms = 6; //BAS(代码)弹幕专包url
|
||||
bool checkBox = 7; //
|
||||
int64 count = 8; //实际弹幕总数
|
||||
repeated CommandDm commandDms = 9; //互动弹幕条目
|
||||
DanmuWebPlayerConfig dmSetting = 10; //弹幕个人配置
|
||||
}
|
||||
```
|
||||
|
||||
**示例:**
|
||||
|
||||
获取视频`av797164471(cid=236871317)`的弹幕元数据
|
||||
|
||||
```shell
|
||||
curl -G 'https://api.bilibili.com/x/v2/dm/web/view' \
|
||||
--data-urlencode 'type=1' \
|
||||
--data-urlencode 'oid=236871317' \
|
||||
--data-urlencode 'pid=797164471' \
|
||||
-b 'SESSDATA=xxx' \
|
||||
-o 'danmaku_view.bin'
|
||||
```
|
||||
|
||||
响应正文为protubuf二进制数据
|
||||
|
||||
## 实例
|
||||
|
||||
### 获取互动弹幕
|
||||
|
||||
获取并显示视频`av797164471(cid=236871317)`的所有互动弹幕
|
||||
|
||||
```python
|
||||
import web_dmview_pb2
|
||||
import requests
|
||||
|
||||
AVID = 797164471
|
||||
CID = 236871317
|
||||
url = f'https://api.bilibili.com/x/v2/dm/web/view?type=1&oid={CID}&pid={AVID}'
|
||||
|
||||
data = requests.get(url)
|
||||
target = web_dmview_pb2.DmWebViewReply()
|
||||
target.ParseFromString(data.content)
|
||||
|
||||
print(f'互动弹幕数={len(target.commandDms)}')
|
||||
for i in target.commandDms:
|
||||
print(f'''\
|
||||
---弹幕ID={i.id}
|
||||
---视频cid={i.oid}
|
||||
---发送者mid={i.mid}
|
||||
---弹幕指令={i.command}
|
||||
---弹幕文字={i.content}
|
||||
---弹幕出现时间={i.progress}
|
||||
---弹幕负载数据={i.extra}
|
||||
---弹幕ID(字串)={i.idStr}'''
|
||||
)
|
||||
```
|
||||
|
||||
输出为:
|
||||
|
||||
```
|
||||
互动弹幕数=1
|
||||
---弹幕ID=38469676112019463
|
||||
---视频cid=236871317
|
||||
---发送者mid=501183549
|
||||
---弹幕指令=#UP#
|
||||
---弹幕文字=这个视频没有恰饭!别紧张!
|
||||
---弹幕出现时间=157818
|
||||
---弹幕负载数据={"icon":"https://i1.hdslb.com/bfs/face/559abe31f561f71f3106d8ee7b2065cac50c1235.jpg"}
|
||||
---弹幕ID(字串)=38469676112019463
|
||||
```
|
||||
|
||||
### 获取BAS(代码)弹幕专包
|
||||
|
||||
BAS弹幕(`pool=2` `mode=9`)只能从此包获取,代码弹幕(`pool=2` `mode=8`)也能从此包获取
|
||||
|
||||
获取并显示视频`av2(cid=62131)`的所有BAS(代码)弹幕专包
|
||||
|
||||
```python
|
||||
import web_dmview_pb2
|
||||
import requests
|
||||
|
||||
AVID = 2
|
||||
CID = 62131
|
||||
url = f'https://api.bilibili.com/x/v2/dm/web/view?type=1&oid={CID}&pid={AVID}'
|
||||
|
||||
data = requests.get(url)
|
||||
target = web_dmview_pb2.DmWebViewReply()
|
||||
target.ParseFromString(data.content)
|
||||
|
||||
print(f'特殊弹幕包数={len(target.specialDms)}')
|
||||
for i in target.specialDms:
|
||||
print(f'特殊弹幕包url={i}')
|
||||
```
|
||||
|
||||
输出为:
|
||||
|
||||
```
|
||||
特殊弹幕包数=1
|
||||
特殊弹幕包url=https://i0.hdslb.com/bfs/dm/b0d5f08c12be59292aa0d4e09b6dd8e54c2ba886.bin
|
||||
```
|
||||
|
||||
使用[普通分段包弹幕](danmaku_proto.md#获取实时弹幕)的proto结构体反序列化此bin数据
|
||||
153
docs/danmaku/danmaku_xml.md
Normal file
153
docs/danmaku/danmaku_xml.md
Normal file
@@ -0,0 +1,153 @@
|
||||
# xml弹幕
|
||||
|
||||
实时弹幕池容量有限(根据视频类型500-8000条不等),占满后再发送会使实时弹幕池底部的弹幕压入历史弹幕池(类似于堆栈)
|
||||
|
||||
---
|
||||
|
||||
- [获取实时弹幕1](#获取实时弹幕1)
|
||||
- [获取实时弹幕2](#获取实时弹幕2)
|
||||
- [弹幕格式](#弹幕格式)
|
||||
|
||||
---
|
||||
|
||||
## 获取实时弹幕1
|
||||
|
||||
> https://api.bilibili.com/x/v1/dm/list.so
|
||||
|
||||
*请求方式:GET*
|
||||
|
||||
**使用deflate压缩,注意解码**
|
||||
|
||||
**url参数:**
|
||||
|
||||
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|
||||
| ------ | ---- | ------- | ------ | ---- |
|
||||
| oid | num | 视频cid | 必要 | |
|
||||
|
||||
**示例:**
|
||||
|
||||
```shell
|
||||
curl -G 'https://api.bilibili.com/x/v1/dm/list.so' \
|
||||
--data-urlencode 'oid=144541892' \
|
||||
--compressed -o 'danmaku.xml'
|
||||
```
|
||||
|
||||
## 获取实时弹幕2
|
||||
|
||||
> https://comment.bilibili.com/{cid}.xml
|
||||
|
||||
*请求方式:GET*
|
||||
|
||||
效果与前者相同
|
||||
|
||||
**使用deflate压缩,注意解码**
|
||||
|
||||
**url路径:**
|
||||
|
||||
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|
||||
| ------ | ---- | ------- | ------ | ---- |
|
||||
| cid | num | 视频cid | 必要 | |
|
||||
|
||||
**示例:**
|
||||
|
||||
```shell
|
||||
curl 'https://comment.bilibili.com/144541892.xml'
|
||||
--compressed -o 'danmaku.xml'
|
||||
```
|
||||
|
||||
**xml回复:**
|
||||
|
||||
<details>
|
||||
<summary>查看响应示例:</summary>
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<i>
|
||||
<chatserver>chat.bilibili.com</chatserver>
|
||||
<chatid>144541892</chatid>
|
||||
<mission>0</mission>
|
||||
<maxlimit>1500</maxlimit>
|
||||
<state>0</state>
|
||||
<real_name>0</real_name>
|
||||
<source>e-r</source>
|
||||
<d p="490.19100,1,25,16777215,1584268892,0,a16fe0dd,29950852386521095">从结尾回来看这里,更感动了!</d>
|
||||
<d p="18.77300,1,25,16777215,1584268920,0,4fe08d3,29950867226492933">咦三体居然还有动画</d>
|
||||
<d p="52.88400,1,25,16777215,1584268954,0,4fe08d3,29950885214289927">哈哈哈哈开心</d>
|
||||
<d p="25.51600,1,25,16777215,1584268957,0,e4b18b37,29950886612566021">红岸么</d>
|
||||
<d p="144.45200,1,25,16777215,1584269076,0,e4b18b37,29950948716576775">我就是想看我的世界里水滴长啥样</d>
|
||||
<d p="112.64100,1,25,16777215,1584269109,0,96606007,29950966302244871">有手指?</d>
|
||||
<d p="222.84000,1,25,16777215,1584269154,0,e4b18b37,29950989809745923">侦测到在途的聚变打击</d>
|
||||
<d p="284.77800,1,25,16777215,1584269216,0,e4b18b37,29951022237483011">都是虫子</d>
|
||||
<d p="398.00500,1,25,16777215,1584269329,0,e4b18b37,29951081615196163">ocean</d>
|
||||
<d p="432.17900,1,25,16777215,1584269363,0,e4b18b37,29951099571535943">村民,哼~</d>
|
||||
<d p="467.41900,1,25,16777215,1584269399,0,e4b18b37,29951118364639237">黄河之水天上来</d>
|
||||
<d p="6.71900,1,25,16777215,1584269422,0,70ba16f4,29951130398621699">镇站之宝</d>
|
||||
<d p="313.08600,1,25,16777215,1584269425,0,e531c9dc,29951131798994947">这水</d>
|
||||
<d p="587.87900,1,25,16777215,1584269519,0,e4b18b37,29951181142360071">海的那边是什么</d>
|
||||
<d p="618.05000,1,25,16777215,1584269549,0,e4b18b37,29951196901933061">折跃门准备完毕</d>
|
||||
…………
|
||||
<i>
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## 弹幕格式
|
||||
|
||||
### xml格式结构
|
||||
|
||||
- 标签 i
|
||||
|
||||
- 标签 chatserver:chat.bilibili.com
|
||||
- 标签 chatid:视频cid
|
||||
- 标签 mission:0
|
||||
- 标签 maxlimit:实时弹幕池最大容量
|
||||
- 标签 state:弹幕状态(0:正常 1:弹幕已关闭)
|
||||
- 标签 real_name:0
|
||||
- 标签 source:e-r
|
||||
|
||||
- 标签 d (带有属性 p):弹幕内容
|
||||
|
||||
### 属性 p
|
||||
|
||||
字符串内每项用逗号`,`分隔
|
||||
|
||||
| 项 | 含义 | 类型 | 备注 |
|
||||
| ---- | ------------------ | ------ | ------------------------------------------------------------ |
|
||||
| 0 | 视频内弹幕出现时间 | float | 秒 |
|
||||
| 1 | 弹幕类型 | int32 | 1 2 3:普通弹幕<br />4:底部弹幕<br />5:顶部弹幕<br />6:逆向弹幕<br />7:高级弹幕<br />8:代码弹幕<br />9:BAS弹幕(`pool`必须为2) |
|
||||
| 2 | 弹幕字号 | int32 | 18:小<br />25:标准<br />36:大 |
|
||||
| 3 | 弹幕颜色 | int32 | 十进制RGB888值 |
|
||||
| 4 | 弹幕发送时间 | int32 | 时间戳 |
|
||||
| 5 | 弹幕池类型 | int32 | 0:普通池<br />1:字幕池<br />2:特殊池(代码/BAS弹幕) |
|
||||
| 6 | 发送者mid的HASH | string | 用于屏蔽用户和查看用户发送的所有弹幕 也可反查用户id |
|
||||
| 7 | 弹幕dmid | int64 | 唯一 可用于操作参数 |
|
||||
| 8 | 弹幕的屏蔽等级 | int32 | 0-10,低于用户设定等级的弹幕将被屏蔽<br />(新增,下方样例未包含) |
|
||||
|
||||
```xml
|
||||
<d p="490.19100,1,25,16777215,1584268892,0,a16fe0dd,29950852386521095">从结尾回来看这里,更感动了!</d>
|
||||
```
|
||||
|
||||
弹幕内容为:“从结尾回来看这里,更感动了!”
|
||||
|
||||
参数为:视频内出现的时间是490.19100秒,类型是普通弹幕,字号为标准,颜色为白色(#FFFFFF),发送时间是2020/3/15 18:41:32.........
|
||||
|
||||
### web版标准颜色
|
||||
|
||||
弹幕的颜色属性使用**十进制RGB888**值
|
||||
|
||||
| 颜色 | HEX(RGB888) | DEC(RGB888) |
|
||||
| --------------------------------- | ----------------------------------- | ------------------------------------- |
|
||||
| <font color="#FE0302">红色</font> | <font color="#FE0302">FE0302</font> | <font color="#FE0302">16646914</font> |
|
||||
| <font color="#FF7204">橘红</font> | <font color="#FF7204">FF7204</font> | <font color="#FF7204">16740868</font> |
|
||||
| <font color="#FFAA02">橘黄</font> | <font color="#FFAA02">FFAA02</font> | <font color="#FFAA02">16755202</font> |
|
||||
| <font color="#FFD302">淡黄</font> | <font color="#FFD302">FFD302</font> | <font color="#FFD302">16765698</font> |
|
||||
| <font color="#FFFF00">黄色</font> | <font color="#FFFF00">FFFF00</font> | <font color="#FFFF00">16776960</font> |
|
||||
| <font color="#A0EE00">草绿</font> | <font color="#A0EE00">A0EE00</font> | <font color="#A0EE00">10546688</font> |
|
||||
| <font color="#00CD00">绿色</font> | <font color="#00CD00">00CD00</font> | <font color="#00CD00">52480</font> |
|
||||
| <font color="#019899">墨绿</font> | <font color="#019899">019899</font> | <font color="#019899">104601</font> |
|
||||
| <font color="#4266BE">紫色</font> | <font color="#4266BE">4266BE</font> | <font color="#4266BE">4351678</font> |
|
||||
| <font color="#89D5FF">青色</font> | <font color="#89D5FF">89D5FF</font> | <font color="#89D5FF">9022215</font> |
|
||||
| <font color="#CC0273">品红</font> | <font color="#CC0273">CC0273</font> | <font color="#CC0273">13369971</font> |
|
||||
| <font color="#222222">黑色</font> | <font color="#222222">222222</font> | <font color="#222222">2236962</font> |
|
||||
| <font color="#9B9B9B">灰色</font> | <font color="#9B9B9B">9B9B9B</font> | <font color="#9B9B9B">10197915</font> |
|
||||
| <font color="#FFFFFF">白色</font> | <font color="#FFFFFF">FFFFFF</font> | <font color="#FFFFFF">16777215</font> |
|
||||
246
docs/danmaku/history.md
Normal file
246
docs/danmaku/history.md
Normal file
@@ -0,0 +1,246 @@
|
||||
# 历史弹幕
|
||||
|
||||
**注:历史弹幕的xml接口已经失效,现已改为protobuf接口**
|
||||
|
||||
- [查询历史弹幕日期](#查询历史弹幕日期)
|
||||
- [获取历史弹幕protobuf接口](#获取历史弹幕protobuf接口)
|
||||
- [~~获取历史弹幕xml接口~~](#获取历史弹幕xml接口)
|
||||
|
||||
---
|
||||
|
||||
## 查询历史弹幕日期
|
||||
|
||||
> https://api.bilibili.com/x/v2/dm/history/index
|
||||
|
||||
*请求方式:GET*
|
||||
|
||||
认证方式:Cookie(SESSDATA)
|
||||
|
||||
**注:查询历史弹幕需要登录**
|
||||
|
||||
**url参数:**
|
||||
|
||||
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|
||||
| ------ | ---- | ------------ | ------ | ------- |
|
||||
| type | num | 1 | 必要 | |
|
||||
| oid | num | 视频cid | 必要 | |
|
||||
| month | str | 查询目标年月 | 必要 | YYYY-MM |
|
||||
|
||||
**json回复:**
|
||||
|
||||
根对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ------- | ------------------------------- | -------- | ------------------------------------------------- |
|
||||
| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-101:账号未登录 |
|
||||
| message | str | 错误信息 | 默认为0 |
|
||||
| ttl | num | 1 | |
|
||||
| data | 有弹幕:array<br />无弹幕:null | 日期列表 | |
|
||||
|
||||
`data`数组:
|
||||
|
||||
| 项 | 类型 | 内容 | 备注 |
|
||||
| ---- | ---- | ------------------- | ---------- |
|
||||
| 0 | str | 存在弹幕的日期1 | YYYY-MM-DD |
|
||||
| n | str | 存在弹幕的日期(n+1) | YYYY-MM-DD |
|
||||
| …… | str | …… | …… |
|
||||
|
||||
**示例:**
|
||||
|
||||
查询了cid为144541892的视频位于2020年1月中有历史弹幕记录的日期
|
||||
|
||||
```shell
|
||||
curl -G 'https://api.bilibili.com/x/v2/dm/history/index' \
|
||||
--data-urlencode 'type=1' \
|
||||
--data-urlencode 'oid=144541892' \
|
||||
--data-urlencode 'month=2020-01' \
|
||||
-b 'SESSDATA=xxx'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>查看响应示例:</summary>
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 0,
|
||||
"message": "0",
|
||||
"ttl": 1,
|
||||
"data": [
|
||||
"2020-01-21",
|
||||
"2020-01-22",
|
||||
"2020-01-23",
|
||||
"2020-01-24",
|
||||
"2020-01-25",
|
||||
"2020-01-26",
|
||||
"2020-01-27",
|
||||
"2020-01-28",
|
||||
"2020-01-29",
|
||||
"2020-01-30",
|
||||
"2020-01-31"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
返回结果的 `data` 项说明这些日期有弹幕发送。若查询的月份中视频无弹幕,则 `data` 项为 `null`
|
||||
|
||||
```shell
|
||||
curl -G 'https://api.bilibili.com/x/v2/dm/history/index' \
|
||||
--data-urlencode 'type=1' \
|
||||
--data-urlencode 'oid=144541892' \
|
||||
--data-urlencode 'month=2019-12' \
|
||||
-b 'SESSDATA=xxx'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>查看响应示例:</summary>
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 0,
|
||||
"message": "0",
|
||||
"ttl": 1,
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## 获取历史弹幕protobuf接口
|
||||
|
||||
> https://api.bilibili.com/x/v2/dm/web/history/seg.so
|
||||
|
||||
*请求方式:GET*
|
||||
|
||||
认证方式:Cookie(SESSDATA)
|
||||
|
||||
**url参数:**
|
||||
|
||||
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|
||||
| ------ | ---- | -------- | ------ | ----------- |
|
||||
| type | num | 弹幕类 | 必要 | 1:视频弹幕 |
|
||||
| oid | num | 视频cid | 必要 | |
|
||||
| date | str | 弹幕日期 | 必要 | YYYY-MM-DD |
|
||||
|
||||
**proto回复:**
|
||||
|
||||
porto定义见:[bilibili.community.service.dm.v1.DmSegMobileReply](../grpc_api/bilibili/community/service/dm/v1.proto)
|
||||
|
||||
详细说明见[protobuf弹幕](danmaku_proto.md)
|
||||
|
||||
获取视频`av84271171(cid=144541892)`2020-01-21的历史弹幕
|
||||
|
||||
**注:proto定义需要编译**
|
||||
|
||||
```python
|
||||
import requests
|
||||
import google.protobuf.text_format as text_format
|
||||
import bilibili.community.service.dm.v1_pb2 as Danmaku
|
||||
|
||||
url = 'https://api.bilibili.com/x/v2/dm/web/history/seg.so'
|
||||
params = {
|
||||
'type':1, #弹幕类型
|
||||
'oid':144541892, #cid
|
||||
'date':'2020-01-21' #弹幕日期
|
||||
}
|
||||
cookies = {
|
||||
'SESSDATA':'xxx'
|
||||
}
|
||||
resp = requests.get(url,params,cookies=cookies)
|
||||
data = resp.content
|
||||
|
||||
danmaku_seg = Danmaku.DmSegMobileReply()
|
||||
danmaku_seg.ParseFromString(data)
|
||||
|
||||
print(text_format.MessageToString(danmaku_seg.elems[0],as_utf8=True))
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```
|
||||
id: 27532611677585408
|
||||
progress: 300507
|
||||
mode: 1
|
||||
fontsize: 25
|
||||
color: 16777215
|
||||
midHash: "2a28d4a6"
|
||||
content: "章北海的老爹"
|
||||
ctime: 1579621359
|
||||
idStr: "27532611677585408"
|
||||
```
|
||||
|
||||
## 获取历史弹幕xml接口
|
||||
|
||||
<details>
|
||||
<summary>查看折叠内容:</summary>
|
||||
|
||||
> https://api.bilibili.com/x/v2/dm/history
|
||||
|
||||
*请求方式:GET*
|
||||
|
||||
认证方式:Cookie(SESSDATA)
|
||||
|
||||
**注:查询历史弹幕需要登录**
|
||||
|
||||
结果为[标准xml格式弹幕](danmaku_xml.md#弹幕格式)
|
||||
|
||||
**使用deflate压缩,注意解码**
|
||||
|
||||
**url参数:**
|
||||
|
||||
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|
||||
| ------ | ---- | -------- | ------ | ---------- |
|
||||
| type | num | 1 | 必要 | |
|
||||
| oid | num | 视频cid | 必要 | |
|
||||
| date | str | 弹幕日期 | 必要 | YYYY-MM-DD |
|
||||
|
||||
**示例:**
|
||||
|
||||
获取视频`av84271171(cid=144541892)`2020-01-21的历史弹幕
|
||||
|
||||
```shell
|
||||
curl -G 'https://api.bilibili.com/x/v2/dm/history' \
|
||||
--data-urlencode 'type=1' \
|
||||
--data-urlencode 'oid=144541892' \
|
||||
--data-urlencode 'date=2020-01-21' \
|
||||
-b 'SESSDATA=xxx' \
|
||||
--compressed -o 'danmaku.xml'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>查看响应示例:</summary>
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<i>
|
||||
<chatserver>chat.bilibili.com</chatserver>
|
||||
<chatid>144541892</chatid>
|
||||
<mission>0</mission>
|
||||
<maxlimit>1500</maxlimit>
|
||||
<state>0</state>
|
||||
<real_name>0</real_name>
|
||||
<d p="473.43400,1,25,15138834,1579622380,0,ec16f2d,27532609919123456">敬礼</d>
|
||||
<d p="3.10200,1,25,16777215,1579622362,0,a2bd7474,27532609920696320">悄默声的更新啊怎么</d>
|
||||
<d p="17.52300,1,25,16777215,1579622357,0,972c932b,27532609906016258">久等了</d>
|
||||
<d p="40.81800,1,25,16777215,1579622343,0,bbca6701,27532609906540546">不都是乱纪元才浸泡</d>
|
||||
<d p="243.39800,1,25,15138834,1579622336,0,77b00ed9,27532609924890624">已阅,狗屁不通。大字报在地上搞搞就行,别弄到天上去</d>
|
||||
<d p="559.80000,1,25,16777215,1579622334,0,9affc7f5,27532609909686274">CSSC。。。</d>
|
||||
<d p="398.29700,1,25,16777215,1579622331,0,18d4707,27532609926463488">看到了个寂寞</d>
|
||||
<d p="34.81000,1,25,38979,1579622327,0,319d7700,27532609926987776">有耳朵了!</d>
|
||||
<d p="18.65700,1,25,16777215,1579622321,0,bbca6701,27532609912307714">雪天不用浸泡吧</d>
|
||||
<d p="305.99800,1,25,16777215,1579622316,0,878c315b,27532609928560640">未来史学派</d>
|
||||
<d p="7.86200,1,25,16777215,1579622309,0,c5136613,27532609913880578">浸泡!!!!!!!</d>
|
||||
<d p="368.95600,1,25,16777215,1579622302,0,18d4707,27532609914404866">章召忠</d>
|
||||
<d p="25.19800,1,25,16777215,1579622286,0,4dab6898,27532609931706368">mi24av</d>
|
||||
<d p="41.10100,1,25,16777215,1579622274,0,33d31036,27532609932230656">泪奔</d>
|
||||
<d p="627.69800,1,25,16777215,1579622264,0,d79a826a,27532609933279232">组建太空军</d>
|
||||
<d p="310.58900,1,25,16777215,1579622243,0,18d4707,27532609918074882">是未来史学派?</d>
|
||||
<d p="723.34800,1,25,16777215,1579622239,0,844fa9e7,27532609919123458">刘培强还行</d>
|
||||
…………
|
||||
<i>
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
</details>
|
||||
92
docs/danmaku/snapshot.md
Normal file
92
docs/danmaku/snapshot.md
Normal file
@@ -0,0 +1,92 @@
|
||||
# 弹幕快照
|
||||
|
||||
- [获取弹幕快照](#获取弹幕快照)
|
||||
|
||||
---
|
||||
|
||||
## 获取弹幕快照
|
||||
|
||||
> https://api.bilibili.com/x/v2/dm/ajax
|
||||
|
||||
*请求方式:GET*
|
||||
|
||||
最近产生的几条弹幕内容,**最多20条**
|
||||
|
||||
**url参数:**
|
||||
|
||||
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|
||||
| ------ | -------- | ------------------ | ------ | ---- |
|
||||
| aid | num或str | 稿件avid或稿件bvid | 必要 | |
|
||||
|
||||
**json回复:**
|
||||
|
||||
根对象:
|
||||
|
||||
| 字段 | 类型 | 内容 | 备注 |
|
||||
| ------- | ----- | -------- | --------------------------------------------- |
|
||||
| code | num | 返回值 | 0:成功<br />-400:请求错误<br />-404:无视频 |
|
||||
| message | str | 错误信息 | 默认为0 |
|
||||
| ttl | num | 1 | |
|
||||
| data | array | 预览列表 | |
|
||||
|
||||
`data`数组:
|
||||
|
||||
| 项 | 类型 | 内容 | 备注 |
|
||||
| ---- | ---- | --------------- | -------- |
|
||||
| 0 | str | 预览内容1 | |
|
||||
| n | str | 预览内容(n+1) | |
|
||||
| …… | str | …… | …… |
|
||||
| 19 | str | 预览内容20 | 最后一条 |
|
||||
|
||||
**示例:**
|
||||
|
||||
获取视频`av43337021`/`BV1rb411m7gE`的弹幕快照,总计20条
|
||||
|
||||
avid方式:
|
||||
|
||||
```shell
|
||||
curl -G 'https://api.bilibili.com/x/v2/dm/ajax' \
|
||||
--data-urlencode 'aid=43337021'
|
||||
```
|
||||
|
||||
bvid方式:
|
||||
|
||||
```shell
|
||||
curl -G 'https://api.bilibili.com/x/v2/dm/ajax' \
|
||||
--data-urlencode 'aid=BV1rb411m7gE'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>查看响应示例:</summary>
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 0,
|
||||
"message": "0",
|
||||
"ttl": 1,
|
||||
"data": [
|
||||
"漫画比动漫好看而且血腥",
|
||||
"666",
|
||||
"金木小天使",
|
||||
"太喜欢了",
|
||||
"每天一遍防止抑郁",
|
||||
"我还记得土豆那时候还有的看",
|
||||
"把在给我摸摸~",
|
||||
"突然泪目",
|
||||
"感谢野生字幕君",
|
||||
"993-7",
|
||||
"刚刚出的时候小学看,现在高二了",
|
||||
"原版op有这么长吗?搞笑,肯定做了剪辑,op会给你放全歌?",
|
||||
"让你看个op 3 : 5 4 秒?",
|
||||
"说原版不原版的都是弱智",
|
||||
"樱花",
|
||||
"请打开洗脑循环食用,请打开洗脑循环食用,请打开洗脑循环食用,请打开洗脑循环食用,请打开洗脑循环食用,",
|
||||
"再来亿遍",
|
||||
"错的不是我,而是这个世界。",
|
||||
"吃货的第一季的最后一季足以让他封神!",
|
||||
"+"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
Reference in New Issue
Block a user