🚀调整项目结构

This commit is contained in:
SocialSisterYi
2023-02-22 01:00:06 +08:00
parent b85e835ce7
commit 7d89ece2ac
201 changed files with 84964 additions and 0 deletions

971
docs/live/info.md Normal file
View File

@@ -0,0 +1,971 @@
# 直播间基本信息
- [直播间基本信息](#直播间基本信息)
- [获取直播间信息](#获取直播间信息)
- [获取用户对应的直播间状态](#获取用户对应的直播间状态)
- [获取房间页初始化信息](#获取房间页初始化信息)
- [获取主播信息](#获取主播信息)
- [批量查询直播间状态](#批量查询直播间状态)
- [获取直播间信息](#获取直播间信息)
---
## 获取直播间信息
> https://api.live.bilibili.com/room/v1/Room/get_info
*请求方式: GET*
**URL参数**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---------|-----|------|-----|-------|
| room_id | num | 直播间号 | 必要 | 可以为短号 |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---------|-----|------|-----------------|
| code | num | 返回值 | 0成功<br />1不存在 |
| message | str | 错误信息 | |
| msg | str | 错误信息 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
|-------------------------|-----------|--------|-----------------------------|
| uid | num | 主播mid | |
| room_id | num | 直播间长号 | |
| short_id | num | 直播间短号 | 为0是无短号 |
| attention | num | 关注数量 | |
| online | num | 观看人数 | |
| is_portrait | bool | 是否竖屏 | |
| description | str | 描述 | |
| live_status | num | 直播状态 | 0未开播<br />1直播中<br />2轮播中 |
| area_id | num | 分区id | |
| parent_area_id | num | 父分区id | |
| parent_area_name | str | 父分区名称 | |
| old_area_id | num | 旧版分区id | |
| background | str | 背景图片链接 | |
| title | str | 标题 | |
| user_cover | str | 封面 | |
| keyframe | str | 关键帧 | 用于网页端悬浮展示 |
| is_strict_room | bool | 未知 | 未知 |
| live_time | str | 直播开始时间 | YYYY-MM-DD HH:mm:ss |
| tags | str | 标签 | ','分隔 |
| is_anchor | num | 未知 | 未知 |
| room_silent_type | str | 禁言状态 | |
| room_silent_level | num | 禁言等级 | |
| room_silent_second | num | 禁言时间 | 单位是秒 |
| area_name | str | 分区名称 | |
| pardants | str | 未知 | 未知 |
| area_pardants | str | 未知 | 未知 |
| hot_words | list(str) | 热词 | |
| hot_words_status | num | 热词状态 | |
| verify | str | 未知 | 未知 |
| new_pendants | obj | 头像框\大v | |
| up_session | str | 未知 | |
| pk_status | num | pk状态 | |
| pk_id | num | pk id | |
| battle_id | num | 未知 | |
| allow_change_area_time | num | | |
| allow_upload_cover_time | num | | |
| studio_info | obj | | |
`new_pendants`对象:
| 字段 | 类型 | 内容 | 备注 |
|--------------|-----|-----|-------------------|
| frame | obj | 头像框 | |
| mobile_frame | obj | 同上 | 手机版, 结构一致, 可能null |
| badge | obj | 大v | |
| mobile_badge | obj | 同上 | 手机版, 结构一致, 可能null |
`frame`对象:
| 字段 | 类型 | 内容 | 备注 |
|--------------|------|--------|-----|
| name | str | 名称 | |
| value | str | 值 | |
| position | num | 位置 | |
| desc | str | 描述 | |
| area | num | 分区 | |
| area_old | num | 旧分区 | |
| bg_color | str | 背景色 | |
| bg_pic | str | 背景图 | |
| use_old_area | bool | 是否旧分区号 | |
`badge`对象:
| 字段 | 类型 | 内容 | 备注 |
|----------|-----|-----|-------------------------------------------|
| name | str | 类型 | v_person: 个人认证(黄) <br> v_company: 企业认证(蓝) |
| position | num | 位置 | |
| value | str | 值 | |
| desc | str | 描述 | |
`studio_info`对象:
| 字段 | 类型 | 内容 | 备注 |
|-------------|-------|-----|-----|
| status | num | | |
| master_list | array | | |
**示例:**
查询直播间`room_id=1`信息
```shell
curl -G 'https://api.live.bilibili.com/room/v1/Room/get_info' \
--data-urlencode 'room_id=1'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"msg": "ok",
"message": "ok",
"data": {
"uid": 9617619,
"room_id": 5440,
"short_id": 1,
"attention": 11919499,
"online": 0,
"is_portrait": false,
"description": "欢迎加入bilibili《快乐运动研究社》和B站UP主们一起探讨有关运动的经历感受解决身体和情绪的“疑难杂症”寻找适合自己的运动一起跟练本期我们一起探讨运动健身能缓解社交恐惧吗",
"live_status": 2,
"area_id": 145,
"parent_area_id": 1,
"parent_area_name": "娱乐",
"old_area_id": 6,
"background": "",
"title": "快乐运动研究社",
"user_cover": "https://i0.hdslb.com/bfs/live/new_room_cover/96943b8d106a777a34cf796421bb4254163b30e1.jpg",
"keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe08121926000000005440np0q7a.jpg",
"is_strict_room": false,
"live_time": "0000-00-00 00:00:00",
"tags": "",
"is_anchor": 0,
"room_silent_type": "",
"room_silent_level": 1,
"room_silent_second": 0,
"area_name": "视频聊天",
"pendants": "",
"area_pendants": "",
"hot_words": [
"2333333",
"喂,妖妖零吗",
"红红火火恍恍惚惚",
"FFFFFFFFFF",
"Yooooooo",
"啪啪啪啪啪",
"666666666",
"老司机带带我",
"你为什么这么熟练啊",
"gg",
"prprpr",
"向大佬低头",
"请大家注意弹幕礼仪哦!",
"还有这种操作!",
"囍",
"打call",
"你气不气?",
"队友呢?"
],
"hot_words_status": 0,
"verify": "",
"new_pendants": {
"frame": {
"name": "",
"value": "",
"position": 0,
"desc": "",
"area": 0,
"area_old": 0,
"bg_color": "",
"bg_pic": "",
"use_old_area": false
},
"badge": {
"name": "v_company",
"position": 3,
"value": "",
"desc": "哔哩哔哩直播官方账号"
},
"mobile_frame": {
"name": "",
"value": "",
"position": 0,
"desc": "",
"area": 0,
"area_old": 0,
"bg_color": "",
"bg_pic": "",
"use_old_area": false
},
"mobile_badge": null
},
"up_session": "",
"pk_status": 0,
"pk_id": 0,
"battle_id": 0,
"allow_change_area_time": 0,
"allow_upload_cover_time": 0,
"studio_info": {
"status": 0,
"master_list": []
}
}
}
```
</details>
## 获取用户对应的直播间状态
> https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld
*请求方式GET*
**url参数**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|-----|-----|---------|-----|-----|
| mid | num | 目标用户mid | 必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---------|-----|------|---------------------|
| code | num | 返回值 | 0成功<br />-400请求错误 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
|----------------|-----|-----------|------------------|
| roomStatus | num | 直播间状态 | 0无房间<br />1有房间 |
| roundStatus | num | 轮播状态 | 0未轮播<br />1轮播 |
| live_status | num | 直播状态 | 0未开播<br />1直播中 |
| url | str | 直播间网页url | |
| title | str | 直播间标题 | |
| cover | str | 直播间封面url | |
| online | num | 直播间人气 | 值为上次直播时刷新 |
| roomid | num | 直播间id短号 | |
| broadcast_type | num | 0 | |
| online_hidden | num | 0 | |
**示例:**
查询用户`mid=322892`的直播间信息
```shell
curl -G 'https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld' \
--data-urlencode 'mid=322892'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"roomStatus": 1,
"roundStatus": 0,
"live_status": 1,
"url": "https://live.bilibili.com/5441",
"title": "好久没当黑铁主播了",
"cover": "http://i0.hdslb.com/bfs/live/room_cover/833f7ff506bac17c06010e8834922993657505b2.jpg",
"online": 268602,
"roomid": 5441,
"broadcast_type": 0,
"online_hidden": 0
}
}
```
</details>
## 获取房间页初始化信息
> https://api.live.bilibili.com/room/v1/Room/room_init
*请求方式GET*
**url参数**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|-----|-----|------------|-----|-----|
| id | num | 目标直播间号(短号) | 必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---------|-----|------|------------------------|
| code | num | 返回值 | 0成功<br />60004直播间不存在 |
| msg | str | 错误信息 | 默认为ok |
| message | str | 错误信息 | 默认为ok |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
|--------------|------|--------------|------------------------------------|
| room_id | num | 直播间真实id | |
| short_id | num | 直播间id短号 | |
| uid | num | 主播用户mid | |
| need_p2p | num | 是否p2p | |
| is_hidden | bool | 是否隐藏 | |
| is_locked | bool | 是否锁定 | |
| is_portrait | bool | 是否竖屏 | |
| live_status | num | 直播状态 | 0未开播<br />1直播中<br />2轮播中 |
| hidden_till | num | 隐藏时间戳 | |
| lock_till | num | 锁定时间戳 | |
| encrypted | bool | 是否加密 | |
| pwd_verified | bool | 加密房间是否通过密码验证 | `encrypted`=true时才有意义 |
| live_time | num | 开播时间 | 未开播时为`-62170012800` |
| room_shield | num | 未知 | |
| is_sp | num | 是否为特殊直播间 | 0普通直播间<br />1付费直播间 |
| special_type | num | 特殊直播间标志 | 0普通直播间<br />1付费直播间<br />2拜年祭直播间 |
**示例:**
查询直播间`id=76`的直播间信息
```shell
curl -G 'https://api.live.bilibili.com/room/v1/Room/room_init' \
--data-urlencode 'id=76'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"msg": "ok",
"message": "ok",
"data": {
"room_id": 14073662,
"short_id": 76,
"uid": 50333369,
"need_p2p": 0,
"is_hidden": false,
"is_locked": false,
"is_portrait": false,
"live_status": 1,
"hidden_till": 0,
"lock_till": 0,
"encrypted": false,
"pwd_verified": false,
"live_time": 1602151186,
"room_shield": 1,
"is_sp": 0,
"special_type": 0
}
}
```
</details>
## 获取主播信息
> https://api.live.bilibili.com/live_user/v1/Master/info
*请求方式GET*
**url参数**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|-----|-----|---------|-----|-----|
| uid | num | 目标用户mid | 必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---------|-----|------|------------------|
| code | num | 返回值 | 0成功<br />1参数错误 |
| msg | str | 错误信息 | 默认为空 |
| message | str | 错误信息 | 默认为空 |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
|----------------|-----|-----------|------------|
| info | obj | 主播信息 | |
| exp | obj | 经验等级 | |
| follower_num | num | 主播粉丝数 | |
| room_id | num | 直播间id短号 | |
| medal_name | str | 粉丝勋章名 | |
| glory_count | num | 主播荣誉数 | |
| pendant | str | 直播间头像框url | |
| link_group_num | num | 0 | **作用尚不明确** |
| room_news | obj | 主播公告 | |
`info`对象:
| 字段 | 类型 | 内容 | 备注 |
|-----------------|-----|---------|-------------------------|
| uid | num | 主播mid | |
| uname | str | 主播用户名 | |
| face | str | 主播头像url | |
| official_verify | obj | 认证信息 | |
| gender | num | 主播性别 | -1保密<br />0女<br />1男 |
`info`中的`official_verify`对象:
| 字段 | 类型 | 内容 | 备注 |
|------|-----|--------|------------------------------|
| type | num | 主播认证类型 | -1无<br />0个人认证<br />1机构认证 |
| desc | str | 主播认证信息 | |
`exp`对象:
| 字段 | 类型 | 内容 | 备注 |
|--------------|-----|------|-----|
| master_level | obj | 主播等级 | |
`exp`中的`master_level`对象:
| 字段 | 类型 | 内容 | 备注 |
|---------|-------|--------|-----|
| level | num | 当前等级 | |
| color | num | 等级框颜色 | |
| current | array | 当前等级信息 | |
| next | array | 下一等级信息 | |
`master_level`中的`current`数组:
| 项 | 类型 | 内容 | 备注 |
|-----|-----|------|-----|
| 0 | num | 升级积分 | |
| 1 | num | 总积分 | |
`master_level`中的`next`数组:
| 项 | 类型 | 内容 | 备注 |
|-----|-----|------|-----|
| 0 | num | 升级积分 | |
| 1 | num | 总积分 | |
`room_news`对象:
| 字段 | 类型 | 内容 | 备注 |
|------------|-----|------|-----|
| content | str | 公告内容 | |
| ctime | str | 公告时间 | |
| ctime_text | str | 公告日期 | |
**示例:**
查询直播间`mid=76`的主播信息
```shell
curl -G 'https://api.live.bilibili.com/live_user/v1/Master/info' \
--data-urlencode 'uid=2'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"msg": "",
"message": "",
"data": {
"info": {
"uid": 2,
"uname": "碧诗",
"face": "https://i0.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg",
"official_verify": {
"type": 0,
"desc": "bilibili个人认证:bilibili创始人站长"
},
"gender": 1
},
"exp": {
"master_level": {
"level": 30,
"color": 10512625,
"current": [
2870000,
11883810
],
"next": [
3730000,
15613810
]
}
},
"follower_num": 926624,
"room_id": 1024,
"medal_name": "逸国",
"glory_count": 0,
"pendant": "",
"link_group_num": 0,
"room_news": {
"content": "",
"ctime": "",
"ctime_text": ""
}
}
}
```
</details>
## 批量查询直播间状态
> https://api.live.bilibili.com/room/v1/Room/get_status_info_by_uids
*请求方式GET/POST*
认证方式:无 (无需添加Cookie)
**url参数 (GET方式)**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|--------|-------|------------|-----|-----|
| uids[] | array | 要查询的主播 mid | 必要 | |
**正文参数 (POST方式)**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|------|------|------------|-----|-----|
| uids | nums | 要查询的主播 mid | 必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---------|-----|------|-------------------------|
| code | num | 返回值 | 0成功<br />-111csrf校验失败 |
| message | str | 错误信息 | 默认为success |
| msg | str | 错误信息 | 默认为success |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
|-----|-----|-------|------------|
| uid | str | 直播间信息 | 实际字段为主播mid |
`uid`对象:
| 字段 | 类型 | 内容 | 备注 |
|---------------------|-----|-----------|------------------------------|
| title | str | 直播间标题 | |
| room_id | num | 直播间房间号 | 直播间实际房间号 |
| uid | num | 主播mid | |
| online | num | 直播间在线人数 | |
| live_time | num | 直播持续时长 | |
| live_status | num | 直播间开播状态 | 0未开播<br />1正在直播<br />2轮播中 |
| short_id | num | 直播间房间号 | 直播间短房间号,常见于签约主播 |
| area | num | 直播间分区id | |
| area_name | str | 直播间分区名 | |
| area_v2_id | num | 直播间新版分区id | |
| area_v2_name | str | 直播间新版分区名 | |
| area_v2_parent_id | num | 直播间父分区id | |
| area_v2_parent_name | str | 直播间父分区名 | |
| uname | str | 主播用户名 | |
| face | str | 主播头像url | |
| tag_name | str | 直播间标签 | |
| tags | str | 直播间自定标签 | |
| cover_from_user | str | 直播间封面url | |
| keyframe | str | 直播间关键帧url | |
| lock_till | str | 直播间封禁信息 | |
| hidden_till | str | 直播间隐藏信息 | |
| broadcast_type | num | 直播类型 | 0:普通直播<br />1手机直播 |
**示例:**
查询用户`mid=672328094的直播间信息
```shell
# GET方式
curl -G 'https://api.live.bilibili.com/room/v1/Room/get_status_info_by_uids'
--data-urlencode 'uids[]=672328094'
# POST方式
curl 'https://api.live.bilibili.com/room/v1/Room/get_status_info_by_uids' \
-H "Content-Type: application/json" \
-d "{\"uids\": [672328094]}"
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"msg": "success",
"message": "success",
"data": {
"672328094": {
"title": "【B限】玩个毛线",
"room_id": 22637261,
"uid": 672328094,
"online": 4087370,
"live_time": 0,
"live_status": 2,
"short_id": 0,
"area": 6,
"area_name": "生活娱乐",
"area_v2_id": 371,
"area_v2_name": "虚拟主播",
"area_v2_parent_name": "虚拟主播",
"area_v2_parent_id": 9,
"uname": "嘉然今天吃什么",
"face": "http://i2.hdslb.com/bfs/face/d399d6f5cf7943a996ae96999ba3e6ae2a2988de.jpg",
"tag_name": "日常,学习,萌宠,厨艺,手机直播",
"tags": "",
"cover_from_user": "http://i0.hdslb.com/bfs/live/new_room_cover/f3ed7a782c13086e536ec8bc6e9593bb4918f905.jpg",
"keyframe": "http://i0.hdslb.com/bfs/live-key-frame/keyframe041722000000226372619dr3m8.jpg",
"lock_till": "0000-00-00 00:00:00",
"hidden_till": "0000-00-00 00:00:00",
"broadcast_type": 0
}
}
}
```
</details>
## 清晰度代码
| 代码 | 说明 |
|-------|-----|
| 30000 | 杜比 |
| 20000 | 4K |
| 10000 | 原画 |
| 400 | 蓝光 |
| 250 | 超清 |
| 150 | 高清 |
| 80 | 流畅 |
## 获取直播间信息
> https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo
*请求方式GET*
认证方式:无 (无需添加Cookie)
**url参数 (GET方式)**
| 参数名 | 类型 | 内容 | 必填 | 备注 |
|----------|-----|-------|-----|------------------------------------------------|
| room_id | num | 直播间id | 必要 | |
| protocol | str | 直播协议 | 必要 | 0http_stream<br/>1http_hls<br/>可多选, 使用英文逗号分隔 |
| format | str | 格式 | 必要 | 0flv<br/>1ts<br/>2fmp4<br/>可多选, 使用英文逗号分隔 |
| codec | str | 编码格式 | 必要 | 0AVC<br/>1HEVC<br/>可多选, 使用英文逗号分隔 |
| qn | num | 清晰度编码 | | 默认`150`<br/>[清晰度代码](#清晰度代码) |
| platform | str | `web` | | |
| ptype | num | `8` | | |
| dolby | num | `5` | | |
| panorama | num | `1` | | |
**json回复**
根对象:
| 字段名 | 类型 | 内容 | 备注 |
|---------|-----|------|-----------------------|
| code | num | 响应码 | 0成功<br/>1002002参数错误 |
| message | str | 0 | |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段名 | 类型 | 内容 | 备注 |
|-------------------|-------|-----------|---------------------------|
| room_id | num | 直播间id | |
| short_id | num | 直播间短id | |
| uid | num | 主播uid | |
| is_hidden | bool | 直播间是否被隐藏 | |
| is_locked | bool | 直播间是否被锁定 | |
| is_portrait | bool | 是否竖屏 | |
| live_status | num | 直播状态 | 0未开播<br/>1直播中<br/>2轮播中 |
| hidden_till | num | 隐藏结束时间 | |
| lock_till | num | 封禁结束时间 | 秒级时间戳 |
| encrypted | bool | 直播间为加密直播间 | |
| pwd_verified | bool | 是否通过密码验证 | 当`encrypted`为`true`时才有意义 |
| live_time | num | 本次开播时间 | 秒级时间戳 |
| room_shield | num | | |
| all_special_types | array | | |
| playurl_info | obj | 直播流信息 | |
`playurl_info`对象
| 字段名 | 类型 | 内容 | 备注 |
|-----------|-----|-----|-----|
| conf_json | str | | |
| playurl | obj | | |
`playurl`对象
| 字段名 | 类型 | 内容 | 备注 |
|-----------|-------|-------|-----|
| cid | num | 直播间id | |
| g_qn_desc | array | 清晰度列表 | |
| stream | array | 直播流信息 | |
| p2p_data | obj | | |
| dolby_qn | | | |
`g_qn_desc`数组中的对象
| 字段名 | 类型 | 内容 | 备注 |
|-----------|-----|-------|-----------------|
| qn | num | 清晰度代码 | [清晰度代码](#清晰度代码) |
| desc | str | 清晰度描述 | |
| hdr_desc | str | | |
| attr_desc | | | |
`stream`数组中的对象
| 字段名 | 类型 | 内容 | 备注 |
|---------------|-------|------|-----|
| protocol_name | str | 协议名 | |
| format | array | 格式列表 | |
`format`数组中的对象
| 字段名 | 类型 | 内容 | 备注 |
|-------------|-------|------|-----|
| format_name | str | 格式名 | |
| codec | array | 编码列表 | |
`codec`数组中的对象
| 字段名 | 类型 | 内容 | 备注 |
|------------|-------|-----------|-----------------|
| codec_name | str | 编码名 | |
| current_qn | num | 当前清晰度编码 | [清晰度代码](#清晰度代码) |
| accept_qn | array | 可用清晰度编码列表 | [清晰度代码](#清晰度代码) |
| base_url | str | 播放源路径 | |
| url_info | array | 域名信息列表 | |
| hdr_qn | null | | |
| dolby_type | num | | |
| attr_name | str | | |
`url_info`数组中的对象
| 字段名 | 类型 | 内容 | 备注 |
|------------|-----|-------|-----|
| host | str | 域名 | |
| extra | str | URL参数 | |
| stream_ttl | num | | |
`p2p_data`对象
| 字段名 | 类型 | 内容 | 备注 |
|-----------|------|-----|-----|
| p2p | bool | | |
| p2p_type | num | | |
| m_p2p | bool | | |
| m_servers | null | | |
**示例:**
查询room_id=3的直播间信息
```shell
curl -L -X GET 'https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo?room_id=3&protocol=0,1&format=0,1,2&codec=0,1&qn=10000'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"room_id": 23058,
"short_id": 3,
"uid": 11153765,
"is_hidden": false,
"is_locked": false,
"is_portrait": false,
"live_status": 1,
"hidden_till": 0,
"lock_till": 0,
"encrypted": false,
"pwd_verified": true,
"live_time": 1671425336,
"room_shield": 1,
"all_special_types": [],
"playurl_info": {
"conf_json": "{\"cdn_rate\":10000,\"report_interval_sec\":150}",
"playurl": {
"cid": 23058,
"g_qn_desc": [
{
"qn": 30000,
"desc": "杜比",
"hdr_desc": "",
"attr_desc": null
},
{
"qn": 20000,
"desc": "4K",
"hdr_desc": "",
"attr_desc": null
},
{
"qn": 10000,
"desc": "原画",
"hdr_desc": "",
"attr_desc": null
},
{
"qn": 400,
"desc": "蓝光",
"hdr_desc": "HDR",
"attr_desc": null
},
{
"qn": 250,
"desc": "超清",
"hdr_desc": "HDR",
"attr_desc": null
},
{
"qn": 150,
"desc": "高清",
"hdr_desc": "",
"attr_desc": null
},
{
"qn": 80,
"desc": "流畅",
"hdr_desc": "",
"attr_desc": null
}
],
"stream": [
{
"protocol_name": "http_stream",
"format": [
{
"format_name": "flv",
"codec": [
{
"codec_name": "avc",
"current_qn": 10000,
"accept_qn": [
10000,
150
],
"base_url": "/live-bvc/462997/live_11153765_9369560.flv?",
"url_info": [
{
"host": "https://cn-hbcd-cu-02-20.bilivideo.com",
"extra": "expires=1674103815&pt=web&deadline=1674103815&len=0&oi=1963941079&platform=web&qn=10000&trid=1000061f434c07ac4f4184820bfb141e75e8&uipk=100&uipv=100&nbs=1&uparams=cdn,deadline,len,oi,platform,qn,trid,uipk,uipv,nbs&cdn=cn-gotcha01&upsig=f494aa9e92e24943061fe5082494ec44&sk=33541455720f64c7671bc1480acfb176&p2p_type=1&src=57345&sl=1&free_type=0&sid=cn-hbcd-cu-02-20&chash=1&sche=ban&score=12&pp=rtmp&machinezone=jd&source=onetier&trace=0&site=92e80b6f3ebfd393e7d1c1e2e648d9c1&order=1",
"stream_ttl": 3600
}
],
"hdr_qn": null,
"dolby_type": 0,
"attr_name": ""
}
]
}
]
},
{
"protocol_name": "http_hls",
"format": [
{
"format_name": "ts",
"codec": [
{
"codec_name": "avc",
"current_qn": 10000,
"accept_qn": [
10000,
150
],
"base_url": "/live-bvc/462997/live_11153765_9369560.m3u8?",
"url_info": [
{
"host": "https://cn-hbcd-cu-02-20.bilivideo.com",
"extra": "expires=1674103815&len=0&oi=1963941079&pt=web&qn=10000&trid=1003061f434c07ac4f4184820bfb141e75e8&sigparams=cdn,expires,len,oi,pt,qn,trid&cdn=cn-gotcha01&sign=4f9bcec18e3afdca04b31ffb285ec915&sk=33541455720f64c7671bc1480acfb176&p2p_type=1&src=57345&sl=1&free_type=0&sid=cn-hbcd-cu-02-20&chash=1&sche=ban&score=12&pp=rtmp&machinezone=jd&source=onetier&trace=0&site=92e80b6f3ebfd393e7d1c1e2e648d9c1&order=1",
"stream_ttl": 3600
}
],
"hdr_qn": null,
"dolby_type": 0,
"attr_name": ""
}
]
},
{
"format_name": "fmp4",
"codec": [
{
"codec_name": "avc",
"current_qn": 10000,
"accept_qn": [
10000,
150
],
"base_url": "/live-bvc/462997/live_11153765_9369560/index.m3u8?",
"url_info": [
{
"host": "https://cn-hbcd-cu-02-20.bilivideo.com",
"extra": "expires=1674103815&len=0&oi=1963941079&pt=web&qn=10000&trid=1007061f434c07ac4f4184820bfb141e75e8&sigparams=cdn,expires,len,oi,pt,qn,trid&cdn=cn-gotcha01&sign=cc57dce528316d8389f2f34e7bd15f5c&sk=a99391b8b4d5779b2e32e41dbc989d2d&flvsk=33541455720f64c7671bc1480acfb176&p2p_type=1&src=57345&sl=1&free_type=0&sid=cn-hbcd-cu-02-20&chash=1&sche=ban&bvchls=1&score=12&pp=rtmp&machinezone=jd&source=onetier&trace=0&site=92e80b6f3ebfd393e7d1c1e2e648d9c1&order=1",
"stream_ttl": 3600
},
{
"host": "https://c1--cn-gotcha208.bilivideo.com",
"extra": "expires=1674103815&len=0&oi=1963941079&pt=web&qn=10000&trid=1007061f434c07ac4f4184820bfb141e75e8&sigparams=cdn,expires,len,oi,pt,qn,trid&cdn=cn-gotcha208&sign=2ff96adf5056c8dbee546955260fc2df&sk=a99391b8b4d5779b2e32e41dbc989d2d&p2p_type=1&src=57345&sl=1&free_type=0&pp=rtmp&machinezone=jd&source=onetier&trace=0&site=92e80b6f3ebfd393e7d1c1e2e648d9c1&order=2",
"stream_ttl": 3600
}
],
"hdr_qn": null,
"dolby_type": 0,
"attr_name": ""
}
]
}
]
}
],
"p2p_data": {
"p2p": true,
"p2p_type": 1,
"m_p2p": false,
"m_servers": null
},
"dolby_qn": null
}
}
}
}
```
</details>

214
docs/live/live_area.md Normal file
View File

@@ -0,0 +1,214 @@
# 直播间分区
- [获取全部直播间分区列表](#获取全部直播间分区列表)
---
## 获取全部直播间分区列表
> https://api.live.bilibili.com/room/v1/Area/getList
*请求方式GET*
直播分区共有两级,分别是父分区和子分区
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ------ | ---------- | ------------- |
| code | num | 返回值 | 0成功 |
| msg | str | 错误信息 | 默认为success |
| message | str | 错误信息 | 默认为success |
| data | array | 父分区列表 | |
`data`数组:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ----------- | ---- |
| 0 | obj | 父分区1 | |
| n | obj | 父分区(n+1) | |
| …… | obj | …… | …… |
`data`数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | ---------- | ---- |
| id | num | 父分区id | |
| name | name | 父分区名 | |
| list | list | 子分区列表 | |
`data`数组中的对象中的`list`数组:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ----------- | ---- |
| 0 | obj | 子分区1 | |
| n | obj | 子分区(n+1) | |
| …… | obj | …… | …… |
`list`数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
| ----------- | ---- | ----------------- | ---------------- |
| id | str | 子分区id | |
| parent_id | str | 父分区id | |
| old_area_id | str | 旧分区id | |
| name | str | 子分区名 | |
| act_id | str | 0 | **作用尚不明确** |
| pk_status | str | | **作用尚不明确** |
| hot_status | num | 是否为热门分区 | 0否<br />1是 |
| lock_status | str | 0 | **作用尚不明确** |
| pic | str | 子分区标志图片url | |
| parent_name | str | 父分区名 | |
| area_type | num | | |
**示例:**
如想在`网游`父分区下的`英雄联盟`分区开播则查到子分区id为`86`
```shell
curl 'https://api.live.bilibili.com/room/v1/Area/getList'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"msg": "success",
"message": "success",
"data": [
{
"id": 2,
"name": "网游",
"list": [
{
"id": "86",
"parent_id": "2",
"old_area_id": "4",
"name": "英雄联盟",
"act_id": "0",
"pk_status": "0",
"hot_status": 1,
"lock_status": "0",
"pic": "http://i0.hdslb.com/bfs/vc/dcfb14f14ec83e503147a262e7607858b05d7ac0.png",
"parent_name": "网游",
"area_type": 0
},
{
"id": "252",
"parent_id": "2",
"old_area_id": "3",
"name": "逃离塔科夫",
"act_id": "0",
"pk_status": "0",
"hot_status": 1,
"lock_status": "0",
"pic": "http://i0.hdslb.com/bfs/vc/762a7de3dd5fe8165d1d55b232484a017941592f.png",
"parent_name": "网游",
"area_type": 0
},
{
"id": "80",
"parent_id": "2",
"old_area_id": "1",
"name": "绝地求生",
"act_id": "0",
"pk_status": "0",
"hot_status": 1,
"lock_status": "0",
"pic": "http://i0.hdslb.com/bfs/vc/43ca83fdcd10505eaeef1b76cf8ce642a53b94da.png",
"parent_name": "网游",
"area_type": 0
},
]
},
{
"id": 3,
"name": "手游",
"list": [
{
"id": "35",
"parent_id": "3",
"old_area_id": "12",
"name": "王者荣耀",
"act_id": "0",
"pk_status": "0",
"hot_status": 1,
"lock_status": "0",
"pic": "http://i0.hdslb.com/bfs/vc/0fefa924760b2dd492a12dddafe179bfa1216918.png",
"parent_name": "手游",
"area_type": 0
},
]
},
{
"id": 6,
"name": "单机",
"list": [
{
"id": "236",
"parent_id": "6",
"old_area_id": "1",
"name": "主机游戏",
"act_id": "0",
"pk_status": "0",
"hot_status": 1,
"lock_status": "0",
"pic": "http://i0.hdslb.com/bfs/vc/edb636ee59f902e3134a2790545045bddd70978e.png",
"parent_name": "单机",
"area_type": 0
},
]
},
{
"id": 1,
"name": "娱乐",
"list": [
{
"id": "21",
"parent_id": "1",
"old_area_id": "10",
"name": "视频唱见",
"act_id": "0",
"pk_status": "1",
"hot_status": 1,
"lock_status": "0",
"pic": "http://i0.hdslb.com/bfs/vc/72b93ddafdf63c9f0b626ad546847a3c03c92b6f.png",
"cate_id": "12",
"parent_name": "娱乐",
"area_type": 0
},
]
},
{
"id": 5,
"name": "电台",
"list": [
{
"id": "190",
"parent_id": "5",
"old_area_id": "10",
"name": "唱见电台",
"act_id": "0",
"pk_status": "0",
"hot_status": 0,
"lock_status": "0",
"pic": "http://i0.hdslb.com/bfs/vc/d22d7fafbf9b24e2bc3ce1df5eb9f006e6035e5d.png",
"parent_name": "电台",
"area_type": 0
},
]
}
]
}
```
</details>

160
docs/live/live_stream.md Normal file
View File

@@ -0,0 +1,160 @@
# 直播间视频流
- [根据真实直播间号获取直播视频流](#根据真实直播间号获取直播视频流)
---
## 根据真实直播间号获取直播视频流
> https://api.live.bilibili.com/room/v1/Room/playUrl
*请求方式GET*
**url参数**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | ----------- | ------ | ---- |
| cid | num | 目标真实直播间号 | 必要 | 直播间的`room_id`(非短号) |
| platform | str | 直播流格式 | 非必要 | h5hls方式<br />webhttp-flv方式<br />默认为http-flv方式 |
| quality | num | 画质 | 非必要 | `qn``quality`任选其一<br />2流畅<br />3高清<br />4原画 |
| qn | str | 画质 | 非必要 | `qn``quality`任选其一<br />80流畅<br />150高清<br />400蓝光<br />10000原画<br />200004K<br />30000杜比 |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | --------------------------- |
| code | num | 返回值 | 0成功<br />-400参数错误<br />19002003房间信息不存在 |
| message | str | 错误信息 | 默认为0 |
| ttl | str | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| -------------- | ---- | ------------- | ------------------------ |
| current_quality | num | 当前画质代码`qn` | |
| accept_quality | array | 可选画质数参数 | |
| current_qn | num | 当前画质代码`quality` | |
| quality_description | array | 可选画质参数`quality` | |
| durl | array | 直播流url组 | |
`accept_quality`数组:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ----------------- | ---- |
| 0 | str | `qn`画质代码1 | |
| n | str | `qn`画质代码(n+1) | |
| …… | str | …… | …… |
`quality_description`数组:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ------------- | ---- |
| 0 | obj | 画质代码1 | |
| n | obj | 画质代码(n+1) | |
| …… | obj | …… | …… |
`quality_description`数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | -------------------- | ---- |
| qn | num | 画质代码 | |
| desc | str | 该代码对应的画质名称 | |
`durl`数组:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ----------- | ---- |
| 0 | obj | 主线服务器 | |
| n | obj | 备线n服务器 | |
| …… | obj | …… | …… |
`durl`数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
| -------------- | ---- | ------------- | ------------------------ |
| url | str | 直播流url | flv或m3u8格式<br />**注:带有转义** |
| length | num | 0 | 作用尚不明确 |
| order | num | 服务器线路序号 | |
| stream_type | num | 0 | 作用尚不明确 |
| p2p_type | num | 0 | 作用尚不明确 |
**示例:**
查询直播间`cid=14073662`的直播间信息
```shell
curl -G 'https://api.live.bilibili.com/room/v1/Room/playUrl' \
--data-urlencode 'cid=14073662' \
--data-urlencode 'qn=10000' \
--data-urlencode 'platform=web'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"current_quality": 3,
"accept_quality": [
"4",
"3",
"2"
],
"current_qn": 3,
"quality_description": [
{
"qn": 4,
"desc": "原画"
},
{
"qn": 3,
"desc": "高清"
},
{
"qn": 2,
"desc": "流畅"
}
],
"durl": [
{
"url": "https://d1--cn-gotcha04.bilivideo.com/live-bvc/601131/live_14073662_bs_3699814_1500.flv?cdn=cn-gotcha04&expires=1602496530&len=0&oi=1939228219&pt=&qn=150&trid=e6540d81a5d04c2ea459c46ebe77472a&sigparams=cdn,expires,len,oi,pt,qn,trid&sign=20e4ac695fbdd1d11d5dac4f93caa783&ptype=0&src=9&sl=1&order=1",
"length": 0,
"order": 1,
"stream_type": 0,
"p2p_type": 0
},
{
"url": "https://d1--cn-gotcha01.bilivideo.com/live-bvc/757951/live_14073662_bs_3699814_1500.flv?cdn=cn-gotcha01&expires=1602496530&len=0&oi=1939228219&pt=&qn=150&trid=e6540d81a5d04c2ea459c46ebe77472a&sigparams=cdn,expires,len,oi,pt,qn,trid&sign=9deea67bb9e9c1f0fa3886a34aa09473&ptype=0&src=9&sl=1&order=2",
"length": 0,
"order": 2,
"stream_type": 0,
"p2p_type": 0
},
{
"url": "https://d1--cn-gotcha04.bilivideo.com/live-bvc/982058/live_14073662_bs_3699814_1500.flv?cdn=cn-gotcha04&expires=1602496530&len=0&oi=1939228219&pt=&qn=150&trid=e6540d81a5d04c2ea459c46ebe77472a&sigparams=cdn,expires,len,oi,pt,qn,trid&sign=8753b270960034660184d975d86c0161&ptype=0&src=9&sl=1&order=3",
"length": 0,
"order": 3,
"stream_type": 0,
"p2p_type": 0
},
{
"url": "https://d1--cn-gotcha04.bilivideo.com/live-bvc/139554/live_14073662_bs_3699814_1500.flv?cdn=cn-gotcha04&expires=1602496530&len=0&oi=1939228219&pt=&qn=150&trid=e6540d81a5d04c2ea459c46ebe77472a&sigparams=cdn,expires,len,oi,pt,qn,trid&sign=cf93474e923c9ba8288c45d954f81045&ptype=0&src=9&sl=1&order=4",
"length": 0,
"order": 4,
"stream_type": 0,
"p2p_type": 0
}
]
}
}
```
</details>

266
docs/live/manage.md Normal file
View File

@@ -0,0 +1,266 @@
# 直播间管理
- [更新直播间标题](#更新直播间标题)
- [开始直播](#开始直播)
- [关闭直播](#关闭直播)
---
## 更新直播间标题
> https://api.live.bilibili.com/room/v1/Room/update
*请求方式POST*
认证方式CookieSESSDATA
鉴权方式Cookie中`bili_jct`的值正确并与`csrf`相同
**正文参数( application/x-www-form-urlencoded **
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------- | ---- | ------------------------ | ------ | -------------------- |
| room_id | num | 直播间id | 必要 | 必须为自己的直播间id |
| title | str | 直播间标题 | 必要 | 最大20字符 |
| csrf | str | CSRF Token位于cookie | 必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ------ | -------- | ------------------------------------------------------ |
| code | num | 返回值 | 0成功<br />65530token错误登录错误<br />1错误 |
| msg | str | 错误信息 | 默认为ok |
| message | str | 错误信息 | 默认为ok |
| data | array | 空 | |
**示例:**
修改直播间`10352053`标题为`测试`
```shell
curl 'https://api.live.bilibili.com/room/v1/Room/update' \
--data-urlencode 'room_id=10352053' \
--data-urlencode 'title=测试' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx;bili_jct=xx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"msg": "ok",
"message": "ok",
"data": []
}
```
</details>
## 开始直播
> https://api.live.bilibili.com/room/v1/Room/startLive
*请求方式POST*
认证方式CookieSESSDATA
鉴权方式Cookie中`bili_jct`的值正确并与`csrf`相同
开播时必须有分区选择,开播后返回推流地址
**正文参数( application/x-www-form-urlencoded **
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| -------- | ---- | ------------------------ | ------ | ----------------------------------- |
| room_id | num | 直播间id | 必要 | 必须为自己的直播间id |
| area_v2 | num | 直播分区id子分区id | 必要 | 详见[直播分区](live_area.md) |
| platform | str | 直播平台 | 必要 | web端<br />bililinkandroid_link |
| csrf | str | CSRF Token位于cookie | 必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | 0成功<br />65530token错误登录错误<br />1错误<br />60009分区不存在<br />**(其他错误码有待补充)** |
| msg | str | 错误信息 | 默认为空 |
| message | str | 错误信息 | 默认为空 |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| --------- | ----- | ---------------- | ---------------------- |
| change | num | 是否改变状态 | 0未改变<br />1改变 |
| status | str | LIVE | |
| room_type | num | 0 | 作用尚不明确 |
| rtmp | obj | RTMP推流地址信息 | |
| protocols | array | | 作用尚不明确 |
| try_time | str | | 作用尚不明确 |
| live_key | str | | 作用尚不明确 |
| notice | obj | | 作用尚不明确 |
`data`中的`rtmp`对象:
| 字段 | 类型 | 内容 | 备注 |
| -------- | ---- | -------------------------------- | ------------ |
| addr | str | RTMP推流发送地址 | **重要** |
| code | str | RTMP推流参数密钥 | **重要** |
| new_link | str | 获取CDN推流ip地址重定向信息的url | 没啥用 |
| provider | str | | 作用尚不明确 |
`data`中的`protocols`数组:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ------ | ------------ |
| 0 | obj | | 作用尚不明确 |
`data`中的`protocols`数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
| -------- | ---- | -------------------------------- | ------------ |
| protocol | str | rtmp | 作用尚不明确 |
| addr | str | RTMP推流发送地址 | |
| code | str | RTMP推流参数密钥 | |
| new_link | str | 获取CDN推流ip地址重定向信息的url | |
| provider | str | txy | 作用尚不明确 |
`data`中的`notice`对象:
| 字段 | 类型 | 内容 | 备注 |
| ----------- | ---- | ---- | ------------ |
| type | num | 1 | 作用尚不明确 |
| status | num | 0 | 作用尚不明确 |
| title | str | 空 | 作用尚不明确 |
| msg | str | 空 | 作用尚不明确 |
| button_text | str | 空 | 作用尚不明确 |
| button_url | str | 空 | 作用尚不明确 |
**示例:**
`27`作为分区id开播直播间`10352053`
其中`"data"."rtmp"."addr"`为推流地址
`"data"."rtmp"."code"`为推流参数
```shell
curl 'https://api.live.bilibili.com/room/v1/Room/startLive' \
--data-urlencode 'room_id=10352053' \
--data-urlencode 'area_v2=27' \
--data-urlencode 'platform=pc' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx;bili_jct=xx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"msg": "",
"message": "",
"data": {
"change": 1,
"status": "LIVE",
"room_type": 0,
"rtmp": {
"addr": "rtmp://txy.live-send.acg.tv/live-txy/",
"code": "?streamname=live_293793435_1567354&key=***",
"new_link": "http://tcdns.myqcloud.com:8086/bilibili_redirect?up_rtmp=txy.live-send.acg.tv%2Flive-txy%2F%3Fstreamname%3Dlive_293793435_1567354%26key%3D***",
"provider": "txy"
},
"protocols": [
{
"protocol": "rtmp",
"addr": "rtmp://txy.live-send.acg.tv/live-txy/",
"code": "?streamname=live_293793435_1567354&key=***",
"new_link": "http://tcdns.myqcloud.com:8086/bilibili_redirect?up_rtmp=txy.live-send.acg.tv%2Flive-txy%2F%3Fstreamname%3Dlive_293793435_1567354%26key%3D***",
"provider": "txy"
}
],
"try_time": "0000-00-00 00:00:00",
"live_key": "l:one:live:record:10352053:1589344980",
"notice": {
"type": 1,
"status": 0,
"title": "",
"msg": "",
"button_text": "",
"button_url": ""
}
}
}
```
</details>
## 关闭直播
> https://api.live.bilibili.com/room/v1/Room/stopLive
*请求方式POST*
认证方式CookieSESSDATA
鉴权方式Cookie中`bili_jct`的值正确并与`csrf`相同
**正文参数( application/x-www-form-urlencoded **
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------- | ---- | ------------------------ | ------ | -------------------- |
| room_id | num | 直播间id | 必要 | 必须为自己的直播间id |
| csrf | str | CSRF Token位于cookie | 必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | 0成功<br />65530token错误登录错误<br />-400没有权限<br />**(其他错误码有待补充)** |
| msg | str | 错误信息 | 默认为空 |
| message | str | 错误信息 | 默认为空 |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------ | ---- | ------------ | ---------------------- |
| change | num | 是否改变状态 | 0未改变<br />1改变 |
| status | str | PREPARING | |
**示例:**
关闭直播间`10352053`的直播
```shell
curl 'https://api.live.bilibili.com/room/v1/Room/stopLive' \
--data-urlencode 'room_id=10352053' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx;bili_jct=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"msg": "",
"message": "",
"data": {
"change": 1,
"status": "PREPARING"
}
}
```
</details>

2336
docs/live/message_stream.md Normal file

File diff suppressed because it is too large Load Diff

130
docs/live/redpocket.md Normal file
View File

@@ -0,0 +1,130 @@
# 直播间人气红包
- [获取指定直播间的红包信息](#获取指定直播间的红包信息)
---
## 获取指定直播间的红包信息
> https://api.live.bilibili.com/xlive/lottery-interface/v1/lottery/getLotteryInfoWeb
*请求方式GET*
认证方式可选CookieSESSDATA
如果不携带Cookie信息user_status将始终返回2未参与
如果所查询的直播间无红包popularity_red_pocket为null。
**url参数**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------- | ---- | ---------------- | ------ | ---- |
| roomid | str | 直播间id | 必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ------ | ---------- | ------------- |
| code | num | 返回值 | 0成功 |
| message | str | 错误信息 | 0成功 |
| ttl | num | TimeToLive | 正常为1 |
| data | object | 返回数据 | |
`data`对象:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ----------- | ---- |
| popularity_red_pocket | array | 人气红包信息 | |
| …… | ...... | …… | …… |
`popularity_red_pocket`数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | ---------- | ---- |
| lot_id | num | 红包id | |
| sender_uid | num | 红包发送者uid | |
| sender_name | str | 红包发送者昵称 | |
| sender_face | str | 红包发送者头像 | |
| join_requirement | num | 参与条件? | |
| danmu | str | 参与红包时自动发送的弹幕内容 | |
| awards | array | 红包内容 | |
| lot_status | num | 未知 | |
| h5_url | str | 红包界面 | |
| user_status | num | 用户是否已参与 | 1已参与 2未参与 |
| lot_config_id | num | 未知 | |
| total_price | num | 红包总计价格 | |
**示例:**
查询房间号为24146996的直播间红包信息
```shell
curl -G 'https://api.live.bilibili.com/xlive/lottery-interface/v1/lottery/getLotteryInfoWeb?roomid=24146996'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"pk": null,
"guard": null,
"gift": null,
"storm": null,
"silver": null,
"activity_box": {
"ACTIVITY_ID": 0,
"ACTIVITY_PIC": ""
},
"danmu": null,
"anchor": null,
"red_pocket": null,
"popularity_red_pocket": [{
"lot_id": 622474,
"sender_uid": 1651908873,
"sender_name": "九泽糖糖の小蘑菇",
"sender_face": "http://i0.hdslb.com/bfs/face/c932c5c8b1607fe2e1da22b9780af19662dac939.jpg",
"join_requirement": 1,
"danmu": "老板大气!点点红包抽礼物!",
"awards": [{
"gift_id": 31212,
"num": 2,
"gift_name": "打call",
"gift_pic": "https://s1.hdslb.com/bfs/live/f75291a0e267425c41e1ce31b5ffd6bfedc6f0b6.png"
}, {
"gift_id": 31214,
"num": 3,
"gift_name": "牛哇",
"gift_pic": "https://s1.hdslb.com/bfs/live/23475a7a6170e0d94ba52720e23060dc7604b735.png"
}, {
"gift_id": 31216,
"num": 3,
"gift_name": "i了i了",
"gift_pic": "https://s1.hdslb.com/bfs/live/1157a445487b39c0b7368d91b22290c60fa665b2.png"
}],
"start_time": 1645358104,
"end_time": 1645358284,
"last_time": 180,
"remove_time": 1645358299,
"replace_time": 1645358294,
"current_time": 1645358231,
"lot_status": 1,
"h5_url": "https://live.bilibili.com/p/html/live-app-red-envelope/popularity.html?is_live_half_webview=1\u0026hybrid_half_ui=1,5,100p,100p,000000,0,50,0,0,1;2,5,100p,100p,000000,0,50,0,0,1;3,5,100p,100p,000000,0,50,0,0,1;4,5,100p,100p,000000,0,50,0,0,1;5,5,100p,100p,000000,0,50,0,0,1;6,5,100p,100p,000000,0,50,0,0,1;7,5,100p,100p,000000,0,50,0,0,1;8,5,100p,100p,000000,0,50,0,0,1\u0026hybrid_rotate_d=1\u0026hybrid_biz=popularityRedPacket\u0026lotteryId=622474",
"user_status": 1,
"lot_config_id": 3,
"total_price": 1600
}],
"activity_box_info": null
}
}
```
</details>

363
docs/live/user.md Normal file
View File

@@ -0,0 +1,363 @@
# 直播间用户实用 API
- [直播间用户实用 API](#直播间用户实用-api)
- [获取用户持有的粉丝勋章信息](#获取用户持有的粉丝勋章信息)
- [佩戴勋章](#佩戴勋章)
- [直播签到](#直播签到)
- [本月直播签到信息](#本月直播签到信息)
- [上月直播签到信息](#上月直播签到信息)
---
## 获取用户持有的粉丝勋章信息
> ~~https://api.live.bilibili.com/fans_medal/v5/live_fans_medal/iApiMedal~~
>
> https://api.live.bilibili.com/xlive/app-ucenter/v1/user/GetMyMedals
_请求方式GET_
认证方式CookieSESSDATA或 APP
**url 参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| --------- | ---- | ------------ | ------ | ------------------------------------------------- |
| page_size | num | 每页的数量 | 必要 | 最大为 10超出 `1002002参数异常` |
| page | num | 返回结果页数 | 必要 | 两个参数不填返回空,只 page 不填或错误则 500 异常 |
**json 回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------- |
| code | num | 返回值 | 0成功<br>-1002002参数异常<br>-500服务器异常 |
| message | str | 错误信息 | 默认为 "0" |
| ttl | str | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| --------- | ----- | ---------------- | ---- |
| count | num | 勋章数量 | |
| items | array | 粉丝勋章信息本体 | |
| page_info | obj | 页码信息 | |
`items 数组内`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------------------ | ------ | -------------------- | -------------------------------------- |
| can_delete | bool | 可否删除 | |
| day_limit | num | 日经验上限(原力值) | eg: 1500 |
| guard_level | num | | |
| guard_medal_title | str | 加成状态 | |
| intimacy | num | 当前已得亲密度 | |
| is_lighted | num | 是否点亮 | 0未点亮<br>1点亮 |
| level | num | 勋章等级 | |
| medal_name | str | 勋章名 | |
| medal_color_border | num | 勋章边框颜色信息 | 颜色数值为 10 进制的 16 进制值(下同) |
| medal_color_start | num | 勋章起始颜色 | 从右往左渐变20 级+勋章) |
| medal_color_end | num | 勋章结束颜色 | 从右往左渐变20 级+勋章) |
| medal_id | num | 粉丝勋章 id | |
| next_intimacy | num | 升级所需经验 | |
| today_feed | num | 本日亲密度 | |
| roomid | num | 直播间房间号 | |
| status | num | | |
| target_id | number | up 主 mid | |
| target_name | str | up 主用户名 | |
| uname | str | up 主用户名 | |
`page_info`对象:
| 字段 | 类型 | 内容 | 备注 |
| ---------- | ---- | -------------- | ---- |
| total_page | num | 页码总长度 | |
| cur_page | num | 当前返回的页码 | |
**示例:**
```shell
curl https://api.live.bilibili.com/xlive/app-ucenter/v1/user/GetMyMedals?page=1&page_size=10 \
-b "SESSDATA=xxx"
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"items": [
{
"can_deleted": true,
"day_limit": 1500,
"guard_level": 0,
"guard_medal_title": "未开启加成",
"intimacy": 9617,
"is_lighted": 0,
"level": 11,
"medal_name": "锦依卫",
"medal_color_border": 12632256,
"medal_color_end": 12632256,
"medal_color_start": 12632256,
"medal_id": 29245,
"next_intimacy": 10000,
"today_feed": 0,
"roomid": 1546736,
"status": 0,
"target_id": 36081646,
"target_name": "洛天依",
"uname": "洛天依"
}
],
"page_info": {
"cur_page": 1,
"total_page": 1
},
"count": 1
}
}
```
</details>
## 佩戴勋章
> https://api.live.bilibili.com/xlive/web-room/v1/fansMedal/wear
_请求方式POST_
**表单参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ---------- | ---- | ----------------------- | ------ | ---- |
| medal_id | num | 勋章 id | 必要 | |
| csrf | num | cookie 中 bili_jct 字段 | 必要 | |
| csrf_token | num | 同上 | 必要 | |
**json 回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | -------------- |
| code | num | 返回值 | 0成功 |
| ttl | str | 1 | |
| message | str | 错误信息 | 默认为佩戴成功 |
| data | obj | 信息本体 | 默认为无 |
**示例:**
佩戴勋章 id 为 1 的勋章
```JavaScript
var madelForm = new FormData();
madelForm.append("medal_id", 1);
madelForm.append("csrf", bili_jct);
madelForm.append("csrf_token", bili_jct);
$.ajax({
url: "https://api.live.bilibili.com/xlive/web-room/v1/fansMedal/wear",
type: "POST",
data: madelForm,
dataType: "JSON",
processData: false,
contentType: false,
cache: false,
xhrFields: {
withCredentials: true
},
success: function (){
}
})
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "佩戴成功",
"ttl": 1,
"data": {}
}
```
</details>
## 直播签到
> https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/DoSign
_请求方式GET_
认证方式CookieSESSDATA或 APP
**json 回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ---------------------- |
| code | num | 返回值 | 0成功<br>1参数错误 |
| ttl | str | 1 | |
| message | str | 错误信息 | 默认为当日签到奖励内容 |
| data | obj | 信息本体 | 默认为空 |
## 本月直播签到信息
> https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/WebGetSignInfo
_请求方式GET_
认证方式CookieSESSDATA或 APP
**json 回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ---------------------- |
| code | num | 返回值 | 0成功 |
| ttl | str | 1 | |
| message | str | 错误信息 | 默认为0 |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ----------------- | ----- | ---------------------------- | ---------------------- |
| text | str | 今日签到奖励信息 | 默认为空 |
| specialText | str | 连续签到奖励信息 | 默认为空 |
| status | num | 签到状态 | 0未签到<br>1已签到 |
| allDays | num | 当月天数 | |
| curMonth | num | 当前月 | |
| curYear | num | 当前年 | |
| curDay | num | 当前日 | |
| curData | str | 当前日期(格式化) | eg: 2023-2-19 |
| hadSignDays | num | 当月已签到天数 | 默认为0 |
| newTask | num | 作用未知 | 默认为0 |
| signDaysList | array | 当月已签到日列表 | 默认为空 |
| signBonusDaysList | array | 当月已签到且有特殊奖励日列表 | 默认为空 |
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"text": "3000点用户经验,2根辣条",
"specialText": "再签到7天可以获得50根辣条",
"status": 1,
"allDays": 28,
"curMonth": 2,
"curYear": 2023,
"curDay": 19,
"curDate": "2023-2-19",
"hadSignDays": 13,
"newTask": 0,
"signDaysList": [
2,
3,
4,
5,
6,
7,
11,
13,
14,
15,
17,
18,
19
],
"signBonusDaysList": [
6
]
}
}
```
</details>
## 上月直播签到信息
> https://api.live.bilibili.com/sign/getLastMonthSignDays
_请求方式GET_
认证方式CookieSESSDATA或 APP
**json 回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ---------------------- |
| code | num | 返回值 | 0成功 |
| ttl | str | 1 | |
| message | str | 错误信息 | 默认为0 |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ----------------- | ----- | ---------------------------- | -------- |
| days | num | 上月天数 | |
| month | num | 上月月份值 | |
| hadSignDays | num | 上月已签到天数 | 默认为0 |
| signDaysList | array | 上月已签到日列表 | 默认为空 |
| signBonusDaysList | array | 上月已签到且有特殊奖励日列表 | 默认为空 |
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"month": 1,
"days": 31,
"hadSignDays": 20,
"signDaysList": [
1,
2,
3,
6,
7,
8,
10,
12,
13,
14,
15,
18,
20,
23,
24,
25,
26,
27,
30,
31
],
"signBonusDaysList": [
7,
31
]
}
}
```
</details>