` 要替换为标题主要内容而不是保留不动,切勿仅填写 `补充`、`修复`,形式良好的标题可以是 `[新增请求] 新增 xx 接口`、`[更新请求] xx 接口地址已失效`、`[更新请求] xx 接口的参数有变化`
+2. 正文请按照 Issue 模板进行填写,标明 API 来源(Web、Android、iOS、TV 等)、API 类型(REST、gRPC、WebSocket 等)、API 地址
+3. 详情描述需要提供该 API 的使用场景、请求及响应字段等,可附上原始抓包记录 (文本格式优先);在更新时还需指出原文档中与最新 API 行为不符之处,并附上已知的最新改动。例如:“在前端页面某地址 / APP 某界面访问某 API(标明地址),它的某参数与文档中不符(标明文档地址)”
+
+发起 Discussion 请遵守以下原则:
+
+1. 标题言简意骇,说明欲提出的问题要点,如 `如何通过 xx 接口获取 yy`、`关于 xx 字段意义的探讨`、`建议将 xx 加入 yy 分类` 等标题;切勿使用表意含糊不清或索取性的标题,如 `怎么解决风控`、`搜索的接口是什么`、`好兄弟有没有投稿的接口` 等标题
+2. Discussion 正文应对遇到的问题进行尽可能详细的描述,展开并聚焦有关的信息,例如: “按照文档中某位置的说明进行了某操作,为什么无法获得预期结果”、“请问某 API 的某字段的具体含义是什么”
+3. 提出问题时注意[提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md)并且[别像弱智一样提问](https://github.com/tangx/Stop-Ask-Questions-The-Stupid-Ways)
+
+同时,您还可以通过加入社群的方式参与讨论
+
+- QQ 交流群:[邀请链接](https://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ympvb3LAPT-Ulu3ezhGqbkJ8zXMKImOX&authKey=z1KdkOdKO3wytN43m9K6On9nBtnDL4pAoD6VQHCipFBb9TasNDKuDHCmOE6TF3uc&noverify=0&group_code=191187164)
+- Telegram 交流群:[@bilibili_API_collect_community](https://t.me/bilibili_API_collect_community)
+
+::: tip ✅提示
+
+QQ 交流群为综合技术交流群(兼 Owner 的粉丝群),可交流探讨任何技术,包括但不限于 [BAC 项目](https://github.com/SocialSisterYi/bilibili-API-collect)
+
+Telegram 交流群主要用作 [BAC 项目](https://github.com/SocialSisterYi/bilibili-API-collect)的 Github Bot 接收,也可以进行项目相关的讨论,但不建议在此讨论交流其他内容(公开群)
+
+:::
+
+::: warning ⚠️注意
+
+群内讨论同样需要遵守**公开交流**的原则,以及群内会定期清理不活跃成员。
+
+**QQ 交流群**的加群问题答案可以去 [Owner 的主页](https://github.com/SocialSisterYi) Contact 部分找到,如果您填写“我不知道,从 Github 来的”那么管理员将有理由禁止您进群讨论!
+
+:::
+
+::: danger 🈲禁止
+
+项目 Issue 及其相关社群中**禁止**询问讨论 风控解除、爬虫(采集)、破解、漏洞利用、买卖代码和账号 相关内容,抵制基于本项目进行的一切黑产行为!
+
+:::
+
+## 目录与路径结构
+
+### 目录
+
+文档目录以 **Markdown 无序列表**语法写在 [README.md](README.md) 中,使用缩进标识文档的层级,如 `视频` 下存在 `基本信息`、`快照`、`视频推荐`、`TAG` 等子分类,使用 **Markdown 复选框**语法该标注文档是否编写完成
+
+```markdown
+- [ ] 视频
+ - [x] 基本信息
+ - [x] 快照
+ - [x] 视频推荐
+ - [ ] TAG
+```
+
+### 路径
+
+路径层级应当与文档目录一致,以文件夹的形式存放在项目中的 `/docs` 路径下,命名统一使用英文小写,如 `video`、`danmaku`、`comment`, 不建议出现 `&` 等特殊字符
+
+二级、三级路径应当存在二级三级目录,可选添加 `README.md` 以描述该子目录
+
+### 文件
+
+各个子接口集整理为 Markdown (.md) 文件,命名统一使用英文小写,如 `info.md`、`action.md`、`list.md`
+
+文档文件中用于存放相关的接口的说明,如 `video/` 下的 `info.md`,存在 `查询视频基本信息`、`查询视频简介`、`查询视频分P列表` 等内容
+
+## Markdown 文档内容格式
+
+文档使用 [VuePress](https://vuepress.vuejs.org/) 生成,可以使用 [VuePress Markdown 扩展语法](https://vuepress.vuejs.org/guide/markdown.html)编写
+
+注:以下文档范式主要针对接口类文档, 可根据**实际情况**进行调整, 你也可以使用 [`json-apidoc-gen`](https://github.com/SessionHu/json-apidoc-gen) 工具直接生成模板自行填充内容. 非接口类文档, 如算法等, 可以参考已有的内容
+
+### 头部
+
+文档首行为**一级标签**格式标题,如 `# 用户基本信息`
+
+**文档头部不需要手写索引**,索引由 VuePress 自动生成
+
+### 接口说明
+
+文档中可存在多个接口说明,应当遵守同一范式,依次排列在文档中
+
+接口说明分为 `标题`、`地址`、`说明`、`请求参数`、`响应正文`、`示例` 这些部分
+
+接口标题为**二级以下**的标签,接口地址使用**引用**语法,地址只保留 REST API 路径,不应携带 query 等内容
+
+接口地址下方需要注明接口的请求方式,如 `GET`、`POST`、`PUT` 等,使用*斜体*语法
+
+若接口存在认证或鉴权,需要在说明中注明,如 `Cookie (SESSDATA)`、`APP`(认证是针对用户的,鉴权是针对接口使用的)
+
+其他使用说明也可写在这里,如 `限制游客访问的视频需要登录`
+
+e.g.:
+
+```markdown
+## 获取视频详细信息_web端
+
+> https://api.bilibili.com/x/web-interface/view
+
+*请求方式:GET*
+
+认证方式:Cookie (SESSDATA)
+
+限制游客访问的视频需要登录
+```
+
+**请求参数**应在**接口说明**的下方,应注明参数类型 url 参数或正文参数(正文参数应注明 content-type,如 `application/x-www-form-urlencoded` 或 `multipart/form-data`),使用**加粗**语法
+
+对象的字段及其含义使用**表格**进行整理,表头统一依次为 `参数名`、`类型`、`内容`、`必要性`、`备注`,类型为 `num`、`str`、`bool`、`nums`、`strs`、`file` 等 (未来可能会统一改为基于 TypeScript 的类型系统),必要性为 `必要`、`非必要`、`必要 (可选)` 等,表格内每个字段为一行
+
+e.g.:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | --------- | ----------- | ----------------- |
+| aid | num | 稿件 avid | 必要 (可选) | avid 与 bvid 任选 |
+| bvid | str | 稿件 bvid | 必要 (可选) | avid 与 bvid 任选 |
+
+**响应正文**应在**请求参数**的下方,接口响应的数据格式应标注,如 `JSON 回复`、`XML 回复`、`ProtoBuf 回复`,使用**加粗**语法
+
+JSON Object 或 ProtoBuf Message 应以对象的**表格**形式书写,表头为 `根对象` 或 `xx 中的 yy 对象` 或 `xx.yy.zz 对象`,若对象位于数组中则为 `xx 数组中的对象` 或 `xx[] 中的对象`
+
+表头统一依次为 `字段`、`类型`、`内容`、`备注`,类型为 JSON / Protobuf 的标准类型,如 `num`、`str`、`bool`、`obj`、`array`、`null` 等
+
+不明确定义的字段说明在内容的末尾添加问号,如 `播放数?`;定义尚未明确的字段使用 `(?)` 在内容中占位,并在备注中填写 `作用尚不明确`
+
+多个对象及数组,使用**遍历树**的顺序进行排列, 若数组中的每一项结构均相同也可以直接省略为像 `xxx 数组中的对象` 这样的格式
+
+e.g.:
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ----------- | ------------ |
+| bvid | str | 稿件 bvid | |
+| aid | num | 稿件 avid | |
+| videos | num | 稿件分P总数 | 默认为 1 |
+| tid | num | 分区 tid | |
+| no_cache | bool | (?) | 作用尚不明确 |
+
+Json Array 或 ProtoBuf Repeated 类型使用数组的**表格**形式书写,表头统一依次为 `项`、`类型`、`内容`、`备注`,无限长度数组表尾需要添加**省略号**
+
+数组每项内容若与实际数据有关联,`内容` 字段则可标为 `(n+1)P 视频内容` 这样的形式
+
+e.g.:
+
+`data` 中的 `pages` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ------------- |
+| 0 | obj | 1P 视频内容 | 无分 P 仅有此项 |
+| n | obj | (n+1)P 视频内容 | |
+| …… | obj | …… | …… |
+
+**示例**部分位于所有**响应正文**部分下方,需要**加粗**格式,分为请求命令示例与响应体示例两部分
+
+请求命令示例为一段可测试该接口的 cURL 命令或某种编程语言的代码,使用**代码块**语法书写,命令应当尽可能简短、便于使人阅读, 代码缩进为 **2** 个 **空格 (U+0020)**
+
+示例命令中的认证信息应做**脱敏处理**,如 Cookie、Token、access_key 等,可替换为 `xxx` 占位
+
+示例命令前后可以适当添加一些文字说明
+
+响应体示例为一段格式化后的 JSON 或 ProtoBuf Message,使用**代码块**语法书写,并使用 `` 标签进行折叠, 仍一律使用 **2** 个 **空格** 进行缩进
+
+e.g.:
+
+````markdown
+**示例:**
+
+获取视频 `av85440373` 的基本信息
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/view' \
+ --data-urlencode 'aid=85440373'
+```
+
+
+查看响应示例:
+
+```jsonc
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "bvid": "BV117411r7R1",
+ "aid": 85440373,
+ "videos": 1,
+ "tid": 28,
+ "tname": "原创音乐",
+ "copyright": 1,
+ // ...
+ }
+}
+```
+
+
+````
+
+### 枚举值与属性位
+
+接口返回或请求中若存在一些 enum 类型或二进制属性位,应当单独进行探讨,如视频的属性位 `attribute` 或视频清晰度 `qn`
+
+这些值及其说明使用**表格**进行整理,表头统一为 `位` / `代码` / `值`、`含义`、`备注`
+
+这些枚举值或属性位的用法应附加文字说明
+
+e.g.:
+
+| 值 | 含义 | 备注 |
+| ---- | ------------- | ------------------------------------------------------------ |
+| 6 | 240P 极速 | 仅 MP4 格式支持 仅 `platform=html5` 时有效 |
+| 16 | 360P 流畅 | |
+| 32 | 480P 清晰 | |
+| 64 | 720P 高清 | WEB 端默认值 B 站前端需要登录才能选择,但是直接发送请求可以不登录就拿到 720P 的取流地址 **无 720P 时则为 720P60** |
+| 74 | 720P60 高帧率 | 需要登录认证 |
+| 80 | 1080P 高清 | TV 端与 APP 端默认值 需要登录认证 |
+
+## Proto 定义格式
+
+proto 文件为 [Protocol Buffers](https://protobuf.dev/) 以及 [gRPC](https://grpc.io/docs/) 的数据结构体定义,多用于客户端的接口,本文档也做相关的收集
+
+存放于项目的 `/grpc_api` 路径下,使用包名进行路径层级的组织,如:
+
+```
+/grpc_api/bilibili/main/community/reply/v1/reply.proto
+/grpc_api/bilibili/app/archive/v1/archive.proto
+/grpc_api/bilibili/app/view/v1/view.proto
+```
+
+proto 文件内使用**单行注释**标注字段或对象的含义,如:
+
+```protobuf
+// UP主信息
+message Author {
+ // UP主mid
+ int64 mid = 1;
+ // UP主昵称
+ string name = 2;
+ // UP主头像url
+ string face = 3;
+}
+```
+
+## 文档提交
+
+### 拉取 (Pull) 与 提交 (Commit)
+
+本项目仓库仅托管于 GitHub, 使用 Git 作为版本控制系统, 你需要对两者有基础的了解
+
+请先 fork, 然后在自己的 fork 上进行修改
+
+提交的标题不要使用默认的 `Update xxx`, 建议遵循 [Conventional Commits (约定式提交) 规范](https://www.conventionalcommits.org/zh-hans/v1.0.0/), 标题语言可根据个人习惯
+
+当发现远程与本地仓库不一致时, 若你操作的 fork 的 branch 无打开的 PR, 建议使用变基拉取, 而不是生成一个额外的合并提交的合并拉取, 反之则相反
+
+移动文件请使用 `git mv`, 而不是删除并添加同一个文件于不同位置 (该问题在 VSCode 的 GUI 版 Git 中存在)
+
+### 拉取请求 (Pull Request)
+
+使用 拉取请求 (Pull Request, PR) 将修改后的文档提交到 `master` 分支,标题需写明修改或新增的内容, `gh_pages` 分支将在 PR 合并后自动更新
+
+如果你还没有完成计划的全部修改, 请创建 Draft Pull Request 表示你还没有做好被合并的准备 ~~(抢占先机, 精神可嘉, 值得鼓励)~~
+
+PR 正文使用 **无序列表** 写明更改的每一项内容, 可以使用复选框表明进度, 需要关闭的 Issue 请使用 `close #xxxx` 这样的格式一并包含在内
+
+如果内容包含代码, 请一并提供测试的输入与输出的文本或截图, 最好可以附上完整的测试环境及相关可执行文件等
+
+PR 合并后, 请及时删除或更新分支. 特别是在使用压缩合并或变基合并后, 请 `Discard changes` 或直接删除分支, 以免在下一次 PR 后出现重复相同提交的问题
diff --git a/README.md b/README.md
index 6fcc3d3..e74b089 100644
--- a/README.md
+++ b/README.md
@@ -1,243 +1,330 @@
-
+
-哔哩哔哩-API收集整理
-
-
-
+哔哩哔哩 - API 收集整理
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
+
+
+
-野生API文档
-不断更新中....
+
+
+
+
+
+野生 API 文档
+不断更新中....
-本项目旨在对 B 站 web 端、移动端以及 TV 端散落在世界各地的野生 api 进行收集整理,研究使用方法并对其进行说明,运用了黑箱法、控制变量法、js 逆向分析法、apk 拆包及反编译法、网络抓包法等研究办法
+本项目旨在对 B 站 WEB、APP、TV 等客户端中,散落在世界各地的野生 API 进行收集整理,研究使用方法并对其进行说明,运用了黑箱法、控制变量法、代码逆向分析、拆包及反编译法、网络抓包法等研究办法
-所有 rest api 均为标准 http 协议,请求数据大多为 url query 表单,返回数据大多为 json 或 protobuf
+本文档探讨的对象是主站业务接口,[官方开放平台](https://openhome.bilibili.com/doc) 和 [直播开放平台](https://open-live.bilibili.com/document/) 均不属于本项目范畴,请移步
-PS:所有 rest api 均可使用 https,文档中为了统一写作`http`,为了数据安全建议调用接口时使用 https
+B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC,少部分接口为 WebSocket;REST API 接口请求数据大多为 url query 表单或 JSON,返回数据大多为 JSON 或 Protobuf,强制使用 https 协议
-小小的 Demo:~~av583785685~~ [视频失效原因](https://shakaianee.top/archives/56/)([Youtube备链](https://www.youtube.com/watch?v=nfF91Z6fqGk))
+📖阅读地址:[Github Pages](https://socialsisteryi.github.io/bilibili-API-collect/)
-联动项目:[Hsury/Bilibili-Toolkit](https://github.com/Hsury/Bilibili-Toolkit)
+小小的 Demo:~~av583785685~~ [视频失效原因](https://shakaianee.top/archives/56/) ([Youtube 备链](https://www.youtube.com/watch?v=nfF91Z6fqGk))
----
-
-**声明**:
+::: warning ⚠️声明
1. 本项目遵守 CC-BY-NC 4.0 协议,禁止一切商业使用,如需转载请注明作者 ID
2. **请勿滥用,本项目仅用于学习和测试!请勿滥用,本项目仅用于学习和测试!请勿滥用,本项目仅用于学习和测试!**
3. 利用本项目提供的接口、文档等造成不良影响及后果与本人无关
4. 由于本项目的特殊性,可能随时停止开发或删档
5. 本项目为开源项目,不接受任何形式的催单和索取行为,更不容许存在付费内容
+6. **上传任何信息时请注意脱敏,删去账户密码、敏感 cookies 等可能泄漏个人信息的数据(例如 `SESSDATA`、`bili_jct` 之类的 cookies)**
----
+:::
-计划整理分类 & 目录:(文档已完结请选中 checkbox)二级目录正在建设中.....
+## 🌱参与贡献
-- [x] [API 签名](other/API_sign.md)
-- [ ] [公共错误码](other/errcode.md)
-- [x] [图片格式化](other/picture.md)
-- [x] [bvid 说明](other/bvid_desc.md)
+欢迎各位 dalao 对本项目做出贡献,也希望每个使用者都能提出宝贵的意见
+
+目前本项目存在的问题包括但不限于:
+
+1. 文档二级目录尚未完成
+2. 部分文档较旧,修改与更新没有跟进
+3. 目前文档使用 Markdown 语法编写,不易生成编程语言的 SDK,详见 [#604](https://github.com/SocialSisterYi/bilibili-API-collect/issues/604)
+
+更多信息请浏览 [贡献指南](CONTRIBUTING.md)
+
+## 🍴目录
+
+计划整理分类 & 目录:(文档已完结请选中 checkbox)
+
+- [ ] [接口签名与验证](docs/misc/sign)
+ - [x] [APP API 签名](docs/misc/sign/APP.md)(`appkey` 与 `sign`)
+ - [x] [已知的 APPKey](docs/misc/sign/APPKey.md)
+ - [x] [Wbi 签名](docs/misc/sign/wbi.md)(`wts`与`w_rid`)
+ - [ ] [bili_ticket](docs/misc/sign/bili_ticket.md)
+ - [ ] [v_voucher 验证](docs/misc/sign/v_voucher.md)
+- [ ] [杂项](docs/misc)
+ - [x] [获取当前时间戳](docs/misc/time_stamp.md)
+ - [x] [公共错误码](docs/misc/errcode.md)
+ - [x] [图片格式化](docs/misc/picture.md)
+ - [x] [bvid 说明](docs/misc/bvid_desc.md)
+ - [ ] [设备唯一标识 BUVID](docs/misc/device_identity.md)
+ - [ ] [获取 buvid3 / buvid4 / b_nut](docs/misc/buvid3_4.md)
+ - [ ] [b23.tv 短链](docs/misc/b23tv.md)
- [ ] [gRPC API 接口定义](grpc_api)
-- [ ] [登录](login)
- - [x] [登录操作(人机认证)](login/login_action)
- - [x] [短信登录](login/login_action/SMS.md)
- - [x] [密码登录](login/login_action/password.md)
- - [x] [二维码登录](login/login_action/QR.md)
- - [ ] SNS 登录(QQ & 微博)
- - [x] [登录基本信息](login/login_info.md)
- - [ ] [个人中心](login/member_center.md)
- - [ ] [注销登录](login/exit.md)
- - [x] [登录记录](login/login_notice.md)
-- [ ] [消息中心](message)
- - [ ] [通知类消息](message/msg.md)
- - [ ] [私信](message/private_msg.md)
- - [ ] [设置](message/config.md)
-- [ ] [用户](user)
- - [x] [基本信息](user/info.md)
- - [x] [状态数](user/status_number.md)
- - [x] [关系](user/relation.md)
- - [ ] [个人空间](user/space.md)
- - [x] [检查昵称是否可注册](user/check_nickname.md)
- - [x] [用户注册](user/register.md)
- - [x] [大会员福利兑换](user/vip.md)
-- [ ] [视频](video)
- - [x] [视频分区一览(分区代码)](video/video_zone.md)
- - [x] [基本信息](video/info.md)
- - [x] [状态数](video/status_number.md)
- - [x] [快照](video/snapshot.md)
- - [x] [点赞 & 投币 & 收藏](video/like_coin_fav.md)
- - [ ] [TAG](video/tags.md)
- - [x] [视频推荐](video/recommend.md)
- - [x] [播放&下载地址(视频流)](video/videostream_url.md)
- - [ ] [互动视频](video/interact_video.md)
- - [x] [高能进度条](video/pbp.md)
- - [ ] [信息上报(心跳及记录历史)](video/report.md)
- - [x] [视频属性数据](video/attribute_data.md)
- - [x] [视频在线人数](video/online.md)
-- [ ] [剧集(番剧、影视)](bangumi)
- - [ ] [基本信息](bangumi/info.md)
- - [ ] 状态数
- - [ ] 操作
-- [ ] [视频弹幕](danmaku)
- - [x] [protobuf 实时弹幕](danmaku/danmaku_proto.md)
- - [x] [protobuf 弹幕元数据(BAS 弹幕 / 互动弹幕)](danmaku/danmaku_view_proto.md)
- - [x] [xml 实时弹幕](danmaku/danmaku_xml.md)
- - [x] [历史弹幕](danmaku/history.md)
- - [x] [快照](danmaku/snapshot.md)
- - [ ] [弹幕操作](danmaku/action.md)
- - [ ] 高级弹幕
- - [ ] 屏蔽管理
- - [ ] 智能防挡弹幕
- - [x] [弹幕个人配置修改](danmaku/config.md)
- - [x] [名词解释](danmaku/buzzword.md)
-- [x] [视频笔记](note)
- - [x] [笔记列表](note/list.md)
- - [x] [笔记详细信息](note/info.md)
- - [x] [笔记操作](note/action.md)
-- [ ] [专栏](article)
- - [ ] 分区
- - [ ] [基本信息](article/info.md)
- - [ ] [点赞 & 投币 & 收藏 & 分享](article/like_coin_fav.md)
- - [ ] [文集基本信息](article/articles.md)
-- [ ] [音频](audio)
- - [x] [歌曲基本信息](audio/info.md)
- - [ ] [歌单 & 音频收藏夹详细信息](audio/music_list.md)
- - [ ] [状态数](audio/status_number.md)
- - [ ] [投币 & 收藏](audio/coin&fav.md)
- - [x] [播放 & 下载地址(音频流)](audio/musicstream_url.md)
- - [ ] 音频榜单
-- [ ] [排行榜 & 最新视频](ranking&dynamic)
- - [ ] [排行榜](ranking&dynamic/ranking.md)
- - [ ] [最新视频](ranking&dynamic/dynamic.md)
-- [ ] [搜索](search)
- - [x] [搜索请求](search/search_request.md)
- - [x] [搜索结果](search/search_response.md)
- - [x] [默认搜索 & 热搜](search/hot.md)
- - [x] [搜索建议](search/suggest.md)
-- [ ] [小黑屋](blackroom)
- - [ ] 基本信息
- - [x] [封禁公示](blackroom/banlist.md)
- - [x] [风纪委员及众裁案件相关](blackroom/jury)
- - [x] [风纪委员基本信息](blackroom/jury/base_info.md)
- - [x] [众裁案件基本信息](blackroom/jury/judgement_info.md)
- - [x] [裁决操作](blackroom/jury/action.md)
-- [x] [评论区](comment)
- - [x] [评论区明细](comment/list.md)
- - [x] [操作](comment/action.md)
-- [ ] [表情](emoji)
- - [x] [表情及表情包信息](emoji/list.md)
- - [x] [操作](emoji/action.md)
-- [ ] [创作中心](creativecenter)
- - [ ] [统计与数据](creativecenter/statistics&data.md)
- - [ ] 列表查询相关
- - [x] [电磁力数据](creativecenter/railgun.md)
-- [x] [实时广播(通讯协议)](broadcast)
- - [x] [视频内广播](broadcast/video_room.md)
-- [ ] [充电](electric)
- - [x] [B币方式](electric/Bcoin.md)
- - [x] [微信 & 支付宝方式](electric/WeChat&Alipay.md)
- - [x] [充电留言](electric/charge_msg.md)
- - [x] [充电列表](electric/charge_list.md)
-- [ ] [动态](dynamic)
- - [ ] [发送 & 转载动态](dynamic/publish.md)
- - [ ] [根据关键字搜索用户(at 别人时的填充列表)](dynamic/atlist.md)
- - [ ] [删除动态](dynamic/delete.md)
- - [ ] 动态列表
- - [x] [特定话题动态列表](/dynamic/tag_dynamics.md)
- - [ ] [动态内容](/dynamic/get_dynamic_detail.md)
- - [ ] 操作
-- [ ] [相簿](album)
- - [x] [基本信息](album/info.md)
- - [x] [相簿列表](album/list.md)
- - [x] [推荐作者](album/recommend_author.md)
- - [x] [活动列表](album/activity_list.md)
- - [x] [操作](album/action.md)
- - [ ] 投稿
-- [ ] [历史记录 & 稍后再看](history&toview)
- - [x] [历史记录](history&toview/history.md)
- - [x] [稍后再看](history&toview/toview.md)
-- [ ] [收藏夹](fav)
- - [x] [基本信息](fav/info.md)
- - [x] [收藏夹内容](fav/list.md)
- - [ ] [收藏夹操作](fav/action.md)
-- [ ] [课程](cheese)
- - [x] [课程基本信息](cheese/info.md)
- - [ ] 已购课程
- - [ ] 分区推荐列表
- - [ ] 操作
- - [x] [播放 & 下载地址(视频流)](cheese/videostream_url.md)
-- [ ] [直播](live)
- - [ ] [直播间基本信息](live/info.md)
- - [ ] [直播分区](live/live_area.md)
- - [ ] [直播间管理](live/manage.md)
- - [ ] 直播间操作
- - [ ] [直播视频流](live/live_stream.md)
- - [ ] [直播信息流](live/message_stream.md)
-- [ ] [转正答题](newbie_exam)
- - [x] [查询信息](newbie_exam/info.md)
- - [x] [拉取题目](newbie_exam/fetch.md)
- - [x] [操作](newbie_exam/action.md)
-- [ ] B币钱包
- - [ ] 基本信息
- - [ ] B币充值
- - [ ] 贝壳相关
-- [ ] [哔哩哔哩漫画](manga)
- - [x] [签到](manga/clockin.md)
- - [x] [积分商城](manga/point_shop.md)
-
+- [ ] [登录](docs/login)
+ - [x] [登录操作 (人机认证)](docs/login/login_action)
+ - [x] [短信登录](docs/login/login_action/SMS.md)
+ - [x] [密码登录](docs/login/login_action/password.md)
+ - [x] [二维码登录](docs/login/login_action/QR.md)
+ - [ ] SNS 登录 (QQ & 微信 & 微博)
+ - [x] [登录基本信息](docs/login/login_info.md)
+ - [ ] [个人中心](docs/login/member_center.md)
+ - [ ] [注销登录](docs/login/exit.md)
+ - [x] [登录记录](docs/login/login_notice.md)
+ - [x] [Web 端 Cookie 刷新](docs/login/cookie_refresh.md)
+- [ ] [消息中心](docs/message)
+ - [ ] [通知类消息](docs/message/msg.md)
+ - [x] [私信](docs/message/private_msg.md)
+ - [x] [私信消息类型、内容说明](docs/message/private_msg_content.md)
+ - [x] [设置](docs/message/settings.md)
+- [ ] [用户](docs/user)
+ - [x] [基本信息](docs/user/info.md)
+ - [x] [状态数](docs/user/status_number.md)
+ - [x] [关系](docs/user/relation.md)
+ - [ ] [个人空间](docs/user/space.md)
+ - [x] ~~[检查昵称是否可注册](docs/user/check_nickname.md)~~ (已失效)
+ - [x] [用户注册](docs/user/register.md)
+ - [x] [用户认证类型一览](docs/user/official_role.md)
+ - [ ] [加入老粉计划](docs/user/contract.md)
+ - [x] [所有粉丝勋章](docs/user/medals.md)
+- [ ] [大会员](docs/vip)
+ - [ ] [大会员基本信息](docs/vip/info.md)
+ - [ ] [大会员中心](docs/vip/center.md)
+ - [ ] [大会员签到](docs/vip/clockin.md)
+ - [ ] [大会员操作](docs/vip/action.md)
+- [ ] [视频](docs/video)
+ - [x] [视频分区一览 (分区代码)](docs/video/video_zone.md)
+ - [ ] [视频分区一览 (分区代码) (v2)](docs/video/video_zone_v2.md)
+ - [x] [基本信息](docs/video/info.md)
+ - [x] ~~[状态数](docs/video/status_number.md)~~ (已失效)
+ - [x] [快照](docs/video/snapshot.md)
+ - [x] [点赞 & 投币 & 收藏 & 分享](docs/video/action.md)
+ - [ ] [TAG](docs/video/tags.md)
+ - [x] [视频推荐](docs/video/recommend.md)
+ - [x] [播放 & 下载地址 (视频流)](docs/video/videostream_url.md)
+ - [ ] [互动视频](docs/video/interact_video.md)
+ - [x] [高能进度条](docs/video/pbp.md)
+ - [ ] [信息上报 (心跳及记录历史)](docs/video/report.md)
+ - [x] [视频属性数据](docs/video/attribute_data.md)
+ - [x] [视频在线人数](docs/video/online.md)
+ - [x] [视频 AI 摘要](docs/video/summary.md)
+ - [ ] [稿件投诉](docs/video/appeal.md)
+ - [ ] [视频合集](docs/video/collection.md)
+ - [ ] [播放器](docs/video/player.md)
+- [ ] [剧集 (番剧、影视)](docs/bangumi)
+ - [ ] [基本信息](docs/bangumi/info.md)
+ - [ ] [播放 & 下载地址(视频流)](docs/bangumi/videostream_url.md)
+ - [ ] [时间轴](docs/bangumi/timeline.md)
+ - [ ] [追番相关](docs/bangumi/follow.md)
+ - [ ] 状态数
+ - [ ] 操作
+- [ ] [视频弹幕](docs/danmaku)
+ - [x] [protobuf 实时弹幕](docs/danmaku/danmaku_proto.md)
+ - [x] [protobuf 弹幕元数据(BAS 弹幕 / 互动弹幕)](docs/danmaku/danmaku_view_proto.md)
+ - [x] [xml 实时弹幕](docs/danmaku/danmaku_xml.md)
+ - [x] [历史弹幕](docs/danmaku/history.md)
+ - [x] [快照](docs/danmaku/snapshot.md)
+ - [ ] [弹幕操作](docs/danmaku/action.md)
+ - [ ] 高级弹幕
+ - [ ] 屏蔽管理
+ - [ ] [智能防挡弹幕](docs/danmaku/webmask.md)
+ - [x] [弹幕个人配置修改](docs/danmaku/config.md)
+ - [x] [名词解释](docs/danmaku/buzzword.md)
+ - [x] [点赞查询](docs/danmaku/thumbup.md)
+- [x] [视频笔记](docs/note)
+ - [x] [笔记列表](docs/note/list.md)
+ - [x] [笔记详细信息](docs/note/info.md)
+ - [x] [笔记操作](docs/note/action.md)
+- [ ] [专栏](docs/article)
+ - [ ] [专栏分类](docs/article/category.md)
+ - [x] [基本信息](docs/article/info.md)
+ - [x] [点赞 & 投币 & 收藏 & 分享](docs/article/action.md)
+ - [x] [文集基本信息](docs/article/articles.md)
+ - [x] [删除](docs/article/delete.md)
+- [ ] [音频](docs/audio)
+ - [x] [歌曲基本信息](docs/audio/info.md)
+ - [ ] [歌单 & 音频收藏夹详细信息](docs/audio/music_list.md)
+ - [ ] [状态数](docs/audio/status_number.md)
+ - [ ] [投币 & 收藏](docs/audio/action.md)
+ - [x] [播放 & 下载地址(音频流)](docs/audio/musicstream_url.md)
+ - [x] [音频榜单](docs/audio/rank.md)
+- [ ] [排行榜 & 最新视频](docs/video_ranking)
+ - [ ] [排行榜](docs/video_ranking/ranking.md)
+ - [ ] [热门视频](docs/video_ranking/popular.md)
+ - [ ] [最新视频](docs/video_ranking/dynamic.md)
+ - [x] [入站必刷视频](docs/video_ranking/precious_videos.md)
+- [ ] [搜索](docs/search)
+ - [x] [搜索请求](docs/search/search_request.md)
+ - [x] [搜索结果](docs/search/search_response.md)
+ - [x] [默认搜索 & 热搜](docs/search/hot.md)
+ - [x] [搜索建议](docs/search/suggest.md)
+- [ ] [小黑屋](docs/blackroom)
+ - [ ] 基本信息
+ - [x] [封禁公示](docs/blackroom/banlist.md)
+ - [x] [风纪委员及众裁案件相关](docs/blackroom/jury)
+ - [x] [风纪委员基本信息](docs/blackroom/jury/base_info.md)
+ - [x] [众裁案件基本信息](docs/blackroom/jury/judgement_info.md)
+ - [x] [裁决操作](docs/blackroom/jury/action.md)
+- [x] [评论区](docs/comment)
+ - [x] [评论区明细](docs/comment/list.md)
+ - [x] [操作](docs/comment/action.md)
+- [ ] [表情](docs/emoji)
+ - [x] [表情及表情包信息](docs/emoji/list.md)
+ - [x] [操作](docs/emoji/action.md)
+- [ ] [创作中心](docs/creativecenter)
+ - [ ] [投稿](docs/creativecenter/upload.md)
+ - [ ] [统计与数据](docs/creativecenter/statistics&data.md)
+ - [ ] 列表查询相关
+ - [x] [电磁力数据](docs/creativecenter/railgun.md)
+ - [ ] [合集管理](docs/creativecenter/season.md)
+ - [ ] [视频相关杂项](docs/creativecenter/videos.md)
+- [x] [实时广播(通讯协议)](docs/broadcast)
+ - [x] [视频内广播](docs/broadcast/video_room.md)
+- [ ] [充电](docs/electric)
+ - [ ] [包月充电](docs/electric/monthly.md)
+ - [ ] 自定义充电
+ - [x] [B 币方式充电](docs/electric/Bcoin.md)
+ - [x] [微信 & 支付宝方式充电](docs/electric/WeChat&Alipay.md)
+ - [x] [充电留言](docs/electric/charge_msg.md)
+ - [x] [充电列表](docs/electric/charge_list.md)
+- [ ] [动态](docs/dynamic)
+ - [ ] [获取动态列表](docs/dynamic/all.md)
+ - [ ] [获取用户空间动态](docs/dynamic/space.md)
+ - [ ] [动态基本信息](docs/dynamic/basicInfo.md)
+ - [ ] [动态详细信息字段](docs/dynamic/card_info.md)
+ - [ ] [获取动态详情](docs/dynamic/detail.md)
+ - [ ] [动态类型对照](docs/dynamic/dynamic_enum.md)
+ - [ ] [动态信息](docs/dynamic/content.md)
+ - [ ] [话题搜索](docs/dynamic/topic.md)
+ - [ ] [发送 & 转载动态](docs/dynamic/publish.md)
+ - [ ] [根据关键字搜索用户(at 别人时的填充列表)](docs/dynamic/atlist.md)
+ - [ ] [操作](docs/dynamic/action.md)
+ - [ ] 动态列表
+ - [x] [特定话题动态列表](docs/dynamic/tag_dynamics.md)
+ - [ ] [动态内容](docs/dynamic/get_dynamic_detail.md)
+ - [ ] [导航栏动态](docs/dynamic/nav.md)
+- [ ] ~~[相簿](docs/album)~~ (已下线)
+ - [x] ~~[基本信息](docs/album/info.md)~~
+ - [x] ~~[相簿列表](docs/album/list.md)~~
+ - [x] ~~[推荐作者](docs/album/recommend_author.md)~~
+ - [x] ~~[活动列表](docs/album/activity_list.md)~~
+ - [x] ~~[操作](docs/album/action.md)~~
+ - [ ] ~~投稿~~
+- [ ] [历史记录 & 稍后再看](docs/historytoview)
+ - [x] [历史记录](docs/historytoview/history.md)
+ - [x] [稍后再看](docs/historytoview/toview.md)
+- [ ] [收藏夹](docs/fav)
+ - [x] [基本信息](docs/fav/info.md)
+ - [x] [收藏夹内容](docs/fav/list.md)
+ - [ ] [收藏夹操作](docs/fav/action.md)
+- [ ] [课程](docs/cheese)
+ - [x] [课程基本信息](docs/cheese/info.md)
+ - [ ] 已购课程
+ - [ ] 分区推荐列表
+ - [ ] 操作
+ - [x] [播放 & 下载地址(视频流)](docs/cheese/videostream_url.md)
+- [ ] [直播](docs/live)
+ - [ ] [直播间基本信息](docs/live/info.md)
+ - [ ] [直播推荐](docs/live/recommend.md)
+ - [ ] [直播分区](docs/live/live_area.md)
+ - [ ] [直播间管理](docs/live/manage.md)
+ - [ ] 直播间操作
+ - [ ] [直播视频流](docs/live/live_stream.md)
+ - [ ] [直播信息流](docs/live/message_stream.md)
+ - [ ] [直播红包](docs/live/redpocket.md)
+ - [ ] [直播间表情包](docs/live/emoticons.md)
+ - [ ] [直播间用户实用 API](docs/live/user.md)
+ - [x] [直播间禁言相关](docs/live/silent_user_manage.md)
+ - [ ] [关注UP直播情况](docs/live/follow_up_live.md)
+ - [ ] [直播心跳上报](docs/live/report.md)
+ - [ ] [直播间弹幕](docs/live/danmaku.md)
+- [ ] [活动](docs/activity)
+ - [ ] [活动列表](docs/activity/list.md)
+ - [ ] [活动主题信息](docs/activity/info.md)
+- [ ] [转正答题](docs/newbie_exam)
+ - [x] [查询信息](docs/newbie_exam/info.md)
+ - [x] [拉取题目](docs/newbie_exam/fetch.md)
+ - [x] [操作](docs/newbie_exam/action.md)
+- [ ] [青少年守护](docs/teenager/)
+ - [x] [青少年模式](docs/teenager/teenager_mode.md)
+ - [ ] 亲子平台
+ - [ ] 课堂模式
+- [ ] [B 币钱包](docs/wallet/)
+ - [ ] [基本信息](docs/wallet/info.md)
+ - [ ] B 币充值
+ - [ ] 贝壳相关
+- [ ] [哔哩哔哩漫画](docs/manga)
+ - [ ] 用户信息
+ - [x] [签到](docs/manga/ClockIn.md)
+ - [x] [积分商城](docs/manga/point_shop.md)
+ - [x] [漫画操作](docs/manga/Comic.md)
+ - [ ] [漫画任务操作](docs/manga/Activity.md)
+ - [x] [漫画赛季](docs/manga/Season.md)
+ - [x] [漫读券/已购相关](docs/manga/User.md)
+ - [x] [下载](docs/manga/Download.md)
+ - [x] [data.index 解析](docs/manga/index_file.md)
+ - [ ] [获取轻享卡信息](docs/manga/light_card.md)
- [ ] 哔哩哔哩游戏
-- [ ] 轻视频
-- [ ] [终端网络查询](clientinfo)
- - [x] [基于ip的地理位置查询](clientinfo/ip.md)
- - [x] [终端信息查询](clientinfo/client_info.md)
-- [ ] [其他](other)
- - [x] [获取当前时间戳](other/time_stamp.md)
-- [ ] [web端组件](web_widget)
- - [x] [分区当日投稿数](web_widget/zone_upload.md)
- - [x] [404 页漫画收集](web_widget/404_manga.md)
-- [ ] [APP端组件](APP_widget)
- - [x] [开屏图片](APP_widget/splash.md)
-- [ ] [个性装扮](garb)
- - [x] [APP 主题](garb/skin.md)
- - [x] [主题色](garb/color.md)
+- [ ] [终端网络查询](docs/clientinfo)
+ - [x] [基于 IP 的地理位置查询](docs/clientinfo/ip.md)
+- [ ] [客服中心](docs/customerservice)
+ - [ ] [客服消息](docs/customerservice/msg.md)
+- [ ] [web 端组件](docs/web_widget)
+ - [x] [分区当日投稿数](docs/web_widget/zone_upload.md)
+ - [x] [404 页漫画收集](docs/web_widget/404_manga.md)
+ - [ ] [首页横幅头图](docs/web_widget/header.md)
+- [ ] [APP 端组件](docs/APP_widget)
+ - [x] [开屏图片 + 恰饭珍贵录像](docs/APP_widget/splash.md)
+ - [ ] [获取最新 APP 版本](docs/APP_widget/ver.md)
+- [ ] [个性装扮](docs/garb)
+ - [x] [APP 主题](docs/garb/skin.md)
+ - [x] [主题色](docs/garb/color.md)
+ - [ ] [装扮/收藏集](docs/garb/lottery.md)
-B站专栏同步推出[《B站api研究记》](https://www.bilibili.com/read/readlist/rl207146)系列(更新状态:咕咕......),~~欢迎关注~~
+## ✨鸣谢
-**--Project_by [社会易姐QwQ](https://space.bilibili.com/293793435)**
+你们的存在,让社区更美好
-# 相关协议基础
+[](https://github.com/SocialSisterYi/bilibili-API-collect/graphs/contributors)
-http 协议:[传送门](https://www.cnblogs.com/an-wen/p/11180076.html)
+## 📖相关协议基础
-json 序列格式:[传送门](https://www.sojson.com/json/json_index.html)
+HTTP 协议:[传送门](https://www.cnblogs.com/an-wen/p/11180076.html)
-xml 序列格式:[传送门](https://www.w3school.com.cn/xml/xml_intro.asp)
+JSON 序列格式:[传送门](https://www.sojson.com/json/json_index.html)
-protobuf 序列格式:[传送门](https://www.jianshu.com/p/a24c88c0526a )
+XML 序列格式:[传送门](https://www.w3school.com.cn/xml/xml_intro.asp)
-# 交流
+ProtoBuf 序列格式:[传送门](https://www.jianshu.com/p/a24c88c0526a)
-
+## 💦交流
-QQ 粉丝交流群:[1136462265](https://jq.qq.com/?_wv=1027&k=s1M0LCcu)
+
-Telegram 讨论组:[@bilibili_API_collect_community](https://t.me/bilibili_API_collect_community)
+⚠注意:开源社群欢迎交流探讨,**拒绝**咨询、**不支持**合作,**黑产号**一经发现立即拉黑并举报相关 SRC
-B 站空间:
+- QQ 交流群:[邀请链接](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ympvb3LAPT-Ulu3ezhGqbkJ8zXMKImOX&authKey=z1KdkOdKO3wytN43m9K6On9nBtnDL4pAoD6VQHCipFBb9TasNDKuDHCmOE6TF3uc&noverify=0&group_code=191187164)
+- Telegram 交流群:[@bilibili_API_collect_community](https://t.me/bilibili_API_collect_community)
-个人博客:
-
-# 发电
+## 🧋发电
欢迎来~~交♂易~~,大家的支持就是我继续开发的动力!
@@ -245,50 +332,66 @@ B 站空间:
WeChat & Alipay:
-
+
-OR Aifadian:https://afdian.net/@ShakaiAneE
+OR Aifadian:[https://afdian.com/@ShakaiAneE](https://afdian.com/@ShakaiAneE)
-# 相关项目
+## 🔗相关项目推荐
-## 库及文档
+### 库及文档
- [jingyuexing/bilibiliAPI](https://github.com/jingyuexing/bilibiliAPI)
- [fython/BilibiliAPIDocs](https://github.com/fython/BilibiliAPIDocs)
- [czp3009/bilibili-api](https://github.com/czp3009/bilibili-api)
- [Vespa314/bilibili-api](https://github.com/Vespa314/bilibili-api)
-- [whjstc/openbilibili-go-common-1](https://github.com/whjstc/openbilibili-go-common-1)
-- [wnstar/bili-utils](https://github.com/wnstar/bili-utils)
-- [lovelyyoshino/Bilibili-Live-API](https://github.com/lovelyyoshino/Bilibili-Live-API)
-- [flaribbit/bilibili-manga-spider](https://github.com/flaribbit/bilibili-manga-spider)
-- [simon300000/bili-api](https://github.com/simon300000/bili-api)
-- [iyear/biligo](https://github.com/iyear/biligo) Bilibili API SDK in Golang
+- [Pengfei00/bili-utils](https://github.com/Pengfei00/bili-utils): bilibili 工具箱
+- [lovelyyoshino/Bilibili-Live-API](https://github.com/lovelyyoshino/Bilibili-Live-API): Bilibili 直播/番剧 API 文档
+- [flaribbit/bilibili-manga-spider](https://github.com/flaribbit/bilibili-manga-spider): Bilibili 漫画爬虫
+- [simon300000/bili-api](https://github.com/simon300000/bili-api): Bilibili Node.js API
+- [iyear/biligo](https://github.com/iyear/biligo): Bilibili API SDK in Golang
+- [bilibili-openplatform/demo](https://github.com/bilibili-openplatform/demo): 哔哩哔哩开放平台示例代码库
+- [ddiu8081/blive-message-listener](https://github.com/ddiu8081/blive-message-listener): Bilibili-live danmu listener with type. Bilibili 直播间弹幕监听库,支持类型输出。
+- [Nemo2011/bilibili-api](https://github.com/Nemo2011/bilibili-api): 哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。工具齐全。
+- [CuteReimu/bilibili](https://github.com/CuteReimu/bilibili): 哔哩哔哩API的Go版本SDK
-## 成品
+### 成品
-- [3Shain/BiliChat](https://github.com/3Shain/BiliChat) : 基于h5的B站直播弹幕姬
-- [AncientLysine/BiliLocal](https://github.com/AncientLysine/BiliLocal):本地弹幕播放器
-- [zyzsdy/biliroku](https://github.com/zyzsdy/biliroku):bilibili 生放送(直播)录制
-- [otakustay/danmaku-to-ass](https://github.com/otakustay/danmaku-to-ass):A站B站弹幕转字幕文件
-- [bilibili-helper/bilibili-helper-o](https://github.com/bilibili-helper/bilibili-helper-o):哔哩哔哩 (bilibili.com) 辅助工具,可以下载视频,查询弹幕发送人以及一些十分实用的直播区功能。
-- [apachecn/BiliDriveEx](https://github.com/apachecn/BiliDriveEx):基于B站相簿上传的文件分块索引存储器
-- [apachecn/CDNDrive](https://github.com/apachecn/CDNDrive):基于B站相簿上传的文件分块索引存储器
-- [Hsury/BiliDrive](https://github.com/Hsury/BiliDrive):基于B站相簿上传的文件分块索引存储器
-- [Tsuk1ko/bilibili-live-chat](https://github.com/Tsuk1ko/bilibili-live-chat):无后端的仿 YouTube Live Chat 风格的简易 Bilibili 弹幕姬
-- [ironmanic/crawler_target_users_good](https://github.com/ironmanic/crawler_target_users_good):搜索bilibili特定视频,为评论 点赞,关注,私信,一体化服务
-- [dd-center/DDatElectron](https://github.com/dd-center/DDatElectron):DD@Home 分布式项目, 桌面客户端
-- [dd-center/vtbs.moe](https://github.com/dd-center/vtbs.moe):B站VTB数据中心
-- [JunzhouLiu/BILIBILI-HELPER](https://github.com/JunzhouLiu/BILIBILI-HELPER):利用Linux Crontab定时任务,云函数,Docker等方式实现B站,哔哩哔哩(Bilibili)每日自动投币,签到,银瓜子兑换硬币,领取大会员福利,大会员月底给自己充电等。每天轻松获取65经验值。
-- [the1812/Bilibili-Evolved](https://github.com/the1812/Bilibili-Evolved):强大的哔哩哔哩增强脚本: 下载视频, 音乐, 封面, 弹幕 / 简化直播间, 评论区, 首页 / 自定义顶栏, 删除广告, 夜间模式 / 触屏设备支持
+- [NullPointerException/AnimePipe](https://codeberg.org/NullPointerException/AnimePipe): 功能完善的Android流媒体综合客户端,支持Bilibili, Youtube, NicoNico
+- [3Shain/Comen](https://github.com/3Shain/Comen): 基于h5的B站直播弹幕姬
+- [AncientLysine/BiliLocal](https://github.com/AncientLysine/BiliLocal): 本地弹幕播放器
+- [zyzsdy/biliroku](https://github.com/zyzsdy/biliroku): bilibili 生放送(直播)录制
+- [otakustay/danmaku-to-ass](https://github.com/otakustay/danmaku-to-ass): A站B站弹幕转字幕文件
+- [bilibili-helper/bilibili-helper-o](https://github.com/bilibili-helper/bilibili-helper-o): 哔哩哔哩 (bilibili.com) 辅助工具,可以下载视频,查询弹幕发送人以及一些十分实用的直播区功能。
+- [apachecn/CDNDrive](https://github.com/apachecn/CDNDrive): 基于B站相簿上传的文件分块索引存储器
+- [Hsury/BiliDrive](https://github.com/Hsury/BiliDrive): 基于B站相簿上传的文件分块索引存储器
+- [Tsuk1ko/bilibili-live-chat](https://github.com/Tsuk1ko/bilibili-live-chat): 无后端的仿 YouTube Live Chat 风格的简易 Bilibili 弹幕姬
+- [ironmanic/crawler_target_users_good](https://github.com/ironmanic/crawler_target_users_good): 搜索bilibili特定视频,为评论 点赞,关注,私信,一体化服务
+- [dd-center/DDatElectron](https://github.com/dd-center/DDatElectron): DD@Home 分布式项目, 桌面客户端
+- [dd-center/vtbs.moe](https://github.com/dd-center/vtbs.moe): B站VTB数据中心
+- [the1812/Bilibili-Evolved](https://github.com/the1812/Bilibili-Evolved): 强大的哔哩哔哩增强脚本: 下载视频、音乐、封面、弹幕 / 简化直播间、评论区、首页 / 自定义顶栏、删除广告、夜间模式 / 触屏设备支持
- [xlzy520/bili-short-url](https://github.com/xlzy520/bili-short-url): 哔哩哔哩短链生成器
- [zjkwdy/bili_app_splash](https://github.com/zjkwdy/bili_app_splash): B站壁纸娘和开屏图自动下载,每天使用Actions自动同步
- [Jannchie/BiliOB](https://github.com/Jannchie/BiliOB): BiliOB观测者是一个观测B站UP主及视频数据变化,并予以分析的Web应用程序
-- [biliob233/biliob233.github.io](https://github.com/biliob233/biliob233.github.io):~~无可奉告~~
+- [biliob233/biliob233.github.io](https://github.com/biliob233/biliob233.github.io): ~~无可奉告~~
+- [biliup/biliup](https://github.com/biliup/biliup): 全自动录播、投稿工具,支持录制直播弹幕,也支持Youtube、twitch直播回放列表自动搬运到B站
+- [ddiu8081/bilicli](https://github.com/ddiu8081/bilicli): Bilibili-live danmu dashboard in your terminal.
+- [MotooriKashin/Bilibili-Old](https://github.com/MotooriKashin/Bilibili-Old): 恢复旧版Bilibili页面,为了那些念旧的人。
+- [SocialSisterYi/bcut-asr](https://github.com/SocialSisterYi/bcut-asr): 使用必剪API的语音字幕识别
+- [CzJam/Bili_Realtime_Data](https://github.com/CzJam/Bili_Realtime_Data): Bilibili粉丝与视频实时数据统计
+- [kingwingfly/fav](https://github.com/kingwingfly/fav): 自动同步bili收藏夹、合集视频到本地的CLI工具(Rust实现,并提供一个文档测试完善的Rust风格的用于构建有状态爬虫的核心库)
+- [linyuye/Bilibili_crawler](https://github.com/linyuye/Bilibili_crawler): 基于bilibili懒加载api爬取b站动态,视频等评论区
+- [ouzexi/bilibili-hot-tags](https://github.com/ouzexi/bilibili-hot-tags): 一个B站热门视频标签检索统计小工具
-## 其他
+### 其他
-- [kuresaru/geetest-validator](https://github.com/kuresaru/geetest-validator):geetest调试器
+- [kuresaru/geetest-validator](https://github.com/kuresaru/geetest-validator): GeeTest 调试器
+- [bloomrpc/bloomrpc](https://github.com/bloomrpc/bloomrpc): GUI Client for GRPC Services
+- [grpc/grpc](https://github.com/grpc/grpc): The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
+- [glideapps/quicktype](https://github.com/glideapps/quicktype): quicktype generates strongly-typed models and serializers from JSON, JSON Schema, TypeScript, and GraphQL queries, making it a breeze to work with JSON type-safely in many programming languages. 一键生成多种语言的JSON反序列化所需类,以便于快速反序列化,有网页版
+- [SessionHu/json-apidoc-gen](https://github.com/SessionHu/json-apidoc-gen): Simple CLI tool for generating BAC document template
-- [uw-labs/bloomrpc](https://github.com/uw-labs/bloomrpc): GUI Client for GRPC Services
-
-- [grpc/grpc](https://github.com/grpc/grpc): The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
\ No newline at end of file
+
diff --git a/imgs/2233login.png b/assets/img/2233login.png
similarity index 100%
rename from imgs/2233login.png
rename to assets/img/2233login.png
diff --git a/imgs/activit.svg b/assets/img/activit.svg
similarity index 100%
rename from imgs/activit.svg
rename to assets/img/activit.svg
diff --git a/imgs/add.svg b/assets/img/add.svg
similarity index 100%
rename from imgs/add.svg
rename to assets/img/add.svg
diff --git a/assets/img/aiSummary.svg b/assets/img/aiSummary.svg
new file mode 100644
index 0000000..efa4420
--- /dev/null
+++ b/assets/img/aiSummary.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/imgs/akari.jpg b/assets/img/akari.jpg
similarity index 100%
rename from imgs/akari.jpg
rename to assets/img/akari.jpg
diff --git a/imgs/ban.png b/assets/img/ban.png
similarity index 100%
rename from imgs/ban.png
rename to assets/img/ban.png
diff --git a/imgs/battery-100.png b/assets/img/battery-100.png
similarity index 100%
rename from imgs/battery-100.png
rename to assets/img/battery-100.png
diff --git a/imgs/bilibili.svg b/assets/img/bilibili.svg
similarity index 100%
rename from imgs/bilibili.svg
rename to assets/img/bilibili.svg
diff --git a/imgs/blackroom.svg b/assets/img/blackroom.svg
similarity index 100%
rename from imgs/blackroom.svg
rename to assets/img/blackroom.svg
diff --git a/imgs/channel.svg b/assets/img/channel.svg
similarity index 100%
rename from imgs/channel.svg
rename to assets/img/channel.svg
diff --git a/imgs/class.svg b/assets/img/class.svg
similarity index 100%
rename from imgs/class.svg
rename to assets/img/class.svg
diff --git a/imgs/coin.svg b/assets/img/coin.svg
similarity index 100%
rename from imgs/coin.svg
rename to assets/img/coin.svg
diff --git a/imgs/collect.svg b/assets/img/collect.svg
similarity index 100%
rename from imgs/collect.svg
rename to assets/img/collect.svg
diff --git a/imgs/comment.svg b/assets/img/comment.svg
similarity index 100%
rename from imgs/comment.svg
rename to assets/img/comment.svg
diff --git a/imgs/delete.svg b/assets/img/delete.svg
similarity index 100%
rename from imgs/delete.svg
rename to assets/img/delete.svg
diff --git a/imgs/download.svg b/assets/img/download.svg
similarity index 100%
rename from imgs/download.svg
rename to assets/img/download.svg
diff --git a/imgs/fav.svg b/assets/img/fav.svg
similarity index 100%
rename from imgs/fav.svg
rename to assets/img/fav.svg
diff --git a/imgs/follow.svg b/assets/img/follow.svg
similarity index 100%
rename from imgs/follow.svg
rename to assets/img/follow.svg
diff --git a/imgs/history.png b/assets/img/history.png
similarity index 100%
rename from imgs/history.png
rename to assets/img/history.png
diff --git a/imgs/home.svg b/assets/img/home.svg
similarity index 100%
rename from imgs/home.svg
rename to assets/img/home.svg
diff --git a/imgs/like.svg b/assets/img/like.svg
similarity index 100%
rename from imgs/like.svg
rename to assets/img/like.svg
diff --git a/imgs/live.svg b/assets/img/live.svg
similarity index 100%
rename from imgs/live.svg
rename to assets/img/live.svg
diff --git a/imgs/loadTV.gif b/assets/img/loadTV.gif
similarity index 100%
rename from imgs/loadTV.gif
rename to assets/img/loadTV.gif
diff --git a/imgs/logo.png b/assets/img/logo.png
similarity index 100%
rename from imgs/logo.png
rename to assets/img/logo.png
diff --git a/assets/img/logo2.jpg b/assets/img/logo2.jpg
new file mode 100644
index 0000000..199eefc
Binary files /dev/null and b/assets/img/logo2.jpg differ
diff --git a/imgs/musicplus.svg b/assets/img/musicplus.svg
similarity index 100%
rename from imgs/musicplus.svg
rename to assets/img/musicplus.svg
diff --git a/imgs/ploading.gif b/assets/img/ploading.gif
similarity index 100%
rename from imgs/ploading.gif
rename to assets/img/ploading.gif
diff --git a/imgs/ranking.svg b/assets/img/ranking.svg
similarity index 100%
rename from imgs/ranking.svg
rename to assets/img/ranking.svg
diff --git a/imgs/read.svg b/assets/img/read.svg
similarity index 100%
rename from imgs/read.svg
rename to assets/img/read.svg
diff --git a/imgs/relation.svg b/assets/img/relation.svg
similarity index 100%
rename from imgs/relation.svg
rename to assets/img/relation.svg
diff --git a/imgs/share.svg b/assets/img/share.svg
similarity index 100%
rename from imgs/share.svg
rename to assets/img/share.svg
diff --git a/imgs/sponsorQR.jpg b/assets/img/sponsorQR.jpg
similarity index 100%
rename from imgs/sponsorQR.jpg
rename to assets/img/sponsorQR.jpg
diff --git a/imgs/sub.svg b/assets/img/sub.svg
similarity index 100%
rename from imgs/sub.svg
rename to assets/img/sub.svg
diff --git a/imgs/tebietuijian.svg b/assets/img/tebietuijian.svg
similarity index 100%
rename from imgs/tebietuijian.svg
rename to assets/img/tebietuijian.svg
diff --git a/imgs/topic.svg b/assets/img/topic.svg
similarity index 100%
rename from imgs/topic.svg
rename to assets/img/topic.svg
diff --git a/imgs/toview.png b/assets/img/toview.png
similarity index 100%
rename from imgs/toview.png
rename to assets/img/toview.png
diff --git a/imgs/tuiguang.svg b/assets/img/tuiguang.svg
similarity index 100%
rename from imgs/tuiguang.svg
rename to assets/img/tuiguang.svg
diff --git a/imgs/video_up.svg b/assets/img/video_up.svg
similarity index 100%
rename from imgs/video_up.svg
rename to assets/img/video_up.svg
diff --git a/imgs/zone/ad.svg b/assets/zone_icon/ad.svg
similarity index 100%
rename from imgs/zone/ad.svg
rename to assets/zone_icon/ad.svg
diff --git a/imgs/zone/animal.svg b/assets/zone_icon/animal.svg
similarity index 100%
rename from imgs/zone/animal.svg
rename to assets/zone_icon/animal.svg
diff --git a/imgs/zone/anime.svg b/assets/zone_icon/anime.svg
similarity index 100%
rename from imgs/zone/anime.svg
rename to assets/zone_icon/anime.svg
diff --git a/imgs/zone/car.svg b/assets/zone_icon/car.svg
similarity index 100%
rename from imgs/zone/car.svg
rename to assets/zone_icon/car.svg
diff --git a/imgs/zone/cinephile.svg b/assets/zone_icon/cinephile.svg
similarity index 100%
rename from imgs/zone/cinephile.svg
rename to assets/zone_icon/cinephile.svg
diff --git a/imgs/zone/comic.svg b/assets/zone_icon/comic.svg
similarity index 100%
rename from imgs/zone/comic.svg
rename to assets/zone_icon/comic.svg
diff --git a/imgs/zone/dance.svg b/assets/zone_icon/dance.svg
similarity index 100%
rename from imgs/zone/dance.svg
rename to assets/zone_icon/dance.svg
diff --git a/imgs/zone/digital.svg b/assets/zone_icon/digital.svg
similarity index 100%
rename from imgs/zone/digital.svg
rename to assets/zone_icon/digital.svg
diff --git a/imgs/zone/documentary.svg b/assets/zone_icon/documentary.svg
similarity index 100%
rename from imgs/zone/documentary.svg
rename to assets/zone_icon/documentary.svg
diff --git a/imgs/zone/douga.svg b/assets/zone_icon/douga.svg
similarity index 100%
rename from imgs/zone/douga.svg
rename to assets/zone_icon/douga.svg
diff --git a/imgs/zone/ent.svg b/assets/zone_icon/ent.svg
similarity index 100%
rename from imgs/zone/ent.svg
rename to assets/zone_icon/ent.svg
diff --git a/imgs/zone/fashion.svg b/assets/zone_icon/fashion.svg
similarity index 100%
rename from imgs/zone/fashion.svg
rename to assets/zone_icon/fashion.svg
diff --git a/imgs/zone/food.svg b/assets/zone_icon/food.svg
similarity index 100%
rename from imgs/zone/food.svg
rename to assets/zone_icon/food.svg
diff --git a/imgs/zone/game.svg b/assets/zone_icon/game.svg
similarity index 100%
rename from imgs/zone/game.svg
rename to assets/zone_icon/game.svg
diff --git a/imgs/zone/guochuang.svg b/assets/zone_icon/guochuang.svg
similarity index 100%
rename from imgs/zone/guochuang.svg
rename to assets/zone_icon/guochuang.svg
diff --git a/imgs/zone/information.svg b/assets/zone_icon/information.svg
similarity index 100%
rename from imgs/zone/information.svg
rename to assets/zone_icon/information.svg
diff --git a/imgs/zone/kichiku.svg b/assets/zone_icon/kichiku.svg
similarity index 100%
rename from imgs/zone/kichiku.svg
rename to assets/zone_icon/kichiku.svg
diff --git a/imgs/zone/knowledge.svg b/assets/zone_icon/knowledge.svg
similarity index 100%
rename from imgs/zone/knowledge.svg
rename to assets/zone_icon/knowledge.svg
diff --git a/imgs/zone/life.svg b/assets/zone_icon/life.svg
similarity index 100%
rename from imgs/zone/life.svg
rename to assets/zone_icon/life.svg
diff --git a/imgs/zone/movie.svg b/assets/zone_icon/movie.svg
similarity index 100%
rename from imgs/zone/movie.svg
rename to assets/zone_icon/movie.svg
diff --git a/imgs/zone/music.svg b/assets/zone_icon/music.svg
similarity index 100%
rename from imgs/zone/music.svg
rename to assets/zone_icon/music.svg
diff --git a/imgs/zone/sports.svg b/assets/zone_icon/sports.svg
similarity index 100%
rename from imgs/zone/sports.svg
rename to assets/zone_icon/sports.svg
diff --git a/imgs/zone/tech.svg b/assets/zone_icon/tech.svg
similarity index 100%
rename from imgs/zone/tech.svg
rename to assets/zone_icon/tech.svg
diff --git a/imgs/zone/teleplay.svg b/assets/zone_icon/teleplay.svg
similarity index 100%
rename from imgs/zone/teleplay.svg
rename to assets/zone_icon/teleplay.svg
diff --git a/assets/zone_v2_icon/ai.svg b/assets/zone_v2_icon/ai.svg
new file mode 100644
index 0000000..797fd6f
--- /dev/null
+++ b/assets/zone_v2_icon/ai.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/animal.svg b/assets/zone_v2_icon/animal.svg
new file mode 100644
index 0000000..74cb01e
--- /dev/null
+++ b/assets/zone_v2_icon/animal.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/car.svg b/assets/zone_v2_icon/car.svg
new file mode 100644
index 0000000..9dd5705
--- /dev/null
+++ b/assets/zone_v2_icon/car.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/cinephile.svg b/assets/zone_v2_icon/cinephile.svg
new file mode 100644
index 0000000..de746dc
--- /dev/null
+++ b/assets/zone_v2_icon/cinephile.svg
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/dance.svg b/assets/zone_v2_icon/dance.svg
new file mode 100644
index 0000000..1082252
--- /dev/null
+++ b/assets/zone_v2_icon/dance.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/douga.svg b/assets/zone_v2_icon/douga.svg
new file mode 100644
index 0000000..00a4f8c
--- /dev/null
+++ b/assets/zone_v2_icon/douga.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/emotion.svg b/assets/zone_v2_icon/emotion.svg
new file mode 100644
index 0000000..8ed2de6
--- /dev/null
+++ b/assets/zone_v2_icon/emotion.svg
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/entertainment.svg b/assets/zone_v2_icon/entertainment.svg
new file mode 100644
index 0000000..b69d02f
--- /dev/null
+++ b/assets/zone_v2_icon/entertainment.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/fashion.svg b/assets/zone_v2_icon/fashion.svg
new file mode 100644
index 0000000..5572bef
--- /dev/null
+++ b/assets/zone_v2_icon/fashion.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/food.svg b/assets/zone_v2_icon/food.svg
new file mode 100644
index 0000000..b9ada08
--- /dev/null
+++ b/assets/zone_v2_icon/food.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/game.svg b/assets/zone_v2_icon/game.svg
new file mode 100644
index 0000000..7fe5842
--- /dev/null
+++ b/assets/zone_v2_icon/game.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/gym.svg b/assets/zone_v2_icon/gym.svg
new file mode 100644
index 0000000..4b1e3a8
--- /dev/null
+++ b/assets/zone_v2_icon/gym.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/handmake.svg b/assets/zone_v2_icon/handmake.svg
new file mode 100644
index 0000000..96f3bcc
--- /dev/null
+++ b/assets/zone_v2_icon/handmake.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/health.svg b/assets/zone_v2_icon/health.svg
new file mode 100644
index 0000000..ee172e4
--- /dev/null
+++ b/assets/zone_v2_icon/health.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/home.svg b/assets/zone_v2_icon/home.svg
new file mode 100644
index 0000000..066b5dd
--- /dev/null
+++ b/assets/zone_v2_icon/home.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/information.svg b/assets/zone_v2_icon/information.svg
new file mode 100644
index 0000000..68a2917
--- /dev/null
+++ b/assets/zone_v2_icon/information.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/kichiku.svg b/assets/zone_v2_icon/kichiku.svg
new file mode 100644
index 0000000..a02252b
--- /dev/null
+++ b/assets/zone_v2_icon/kichiku.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/knowledge.svg b/assets/zone_v2_icon/knowledge.svg
new file mode 100644
index 0000000..154fe65
--- /dev/null
+++ b/assets/zone_v2_icon/knowledge.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/life_experience.svg b/assets/zone_v2_icon/life_experience.svg
new file mode 100644
index 0000000..2ef38e2
--- /dev/null
+++ b/assets/zone_v2_icon/life_experience.svg
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/life_joy.svg b/assets/zone_v2_icon/life_joy.svg
new file mode 100644
index 0000000..1b31b60
--- /dev/null
+++ b/assets/zone_v2_icon/life_joy.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/music.svg b/assets/zone_v2_icon/music.svg
new file mode 100644
index 0000000..10c5f58
--- /dev/null
+++ b/assets/zone_v2_icon/music.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/outdoors.svg b/assets/zone_v2_icon/outdoors.svg
new file mode 100644
index 0000000..0af234d
--- /dev/null
+++ b/assets/zone_v2_icon/outdoors.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/painting.svg b/assets/zone_v2_icon/painting.svg
new file mode 100644
index 0000000..2e0cd81
--- /dev/null
+++ b/assets/zone_v2_icon/painting.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/parenting.svg b/assets/zone_v2_icon/parenting.svg
new file mode 100644
index 0000000..719ea97
--- /dev/null
+++ b/assets/zone_v2_icon/parenting.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/rural.svg b/assets/zone_v2_icon/rural.svg
new file mode 100644
index 0000000..86890a6
--- /dev/null
+++ b/assets/zone_v2_icon/rural.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/shortplay.svg b/assets/zone_v2_icon/shortplay.svg
new file mode 100644
index 0000000..dae6736
--- /dev/null
+++ b/assets/zone_v2_icon/shortplay.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/sports.svg b/assets/zone_v2_icon/sports.svg
new file mode 100644
index 0000000..70f6360
--- /dev/null
+++ b/assets/zone_v2_icon/sports.svg
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/tech.svg b/assets/zone_v2_icon/tech.svg
new file mode 100644
index 0000000..9874d4e
--- /dev/null
+++ b/assets/zone_v2_icon/tech.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/travel.svg b/assets/zone_v2_icon/travel.svg
new file mode 100644
index 0000000..e2891a1
--- /dev/null
+++ b/assets/zone_v2_icon/travel.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/zone_v2_icon/vlog.svg b/assets/zone_v2_icon/vlog.svg
new file mode 100644
index 0000000..bb8343d
--- /dev/null
+++ b/assets/zone_v2_icon/vlog.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/audio/music_list.md b/audio/music_list.md
deleted file mode 100644
index 01c5503..0000000
--- a/audio/music_list.md
+++ /dev/null
@@ -1,300 +0,0 @@
-# 歌单&音频收藏夹详细信息
-
-- [歌单&音频收藏夹详细信息](#歌单音频收藏夹详细信息)
- - [查询自己创建的歌单](#查询自己创建的歌单)
- - [查询音频收藏夹(默认歌单)信息](#查询音频收藏夹默认歌单信息)
-
-- [歌单&音频收藏夹详细信息](#歌单音频收藏夹详细信息)
- - [查询自己创建的歌单](#查询自己创建的歌单)
- - [查询音频收藏夹(默认歌单)信息](#查询音频收藏夹默认歌单信息)
-
----
-
-## 查询自己创建的歌单
-
-> http://www.bilibili.com/audio/music-service-c/web/collections/list
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-鉴权方式:Cookie中`DedeUserID`存在且不为0
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | -------- | ------ | ---- |
-| pn | num | 页码 | 必要 | |
-| ps | num | 每页项数 | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ----------------------------- | -------- | ----------------------------------------------------- |
-| code | num | 返回值 | 0:成功 72000000:参数错误 72010002:未登录 |
-| msg | str | 错误信息 | 默认为success |
-| data | 正确时:obj 错误时:null | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------- | ------ | ------------ | ---- |
-| curPage | num | 当前页码 | |
-| pageCount | num | 总计页数 | |
-| totalSize | num | 总计收藏夹数 | |
-| pageSize | num | 当前页面项数 | |
-| data | array | 歌单列表 | |
-
-`data`中的`data`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ----------------- | ---- |
-| 0 | obj | 音频收藏夹mlid1 | |
-| n | obj | 音频收藏夹mlid(n+1) | |
-| …… | obj | …… | …… |
-
-`data`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------- | ------ | ------------------------ | -------------------------------- |
-| id | num | 音频收藏夹mlid | |
-| uid | num | 创建用户mid | |
-| uname | str | 创建用户昵称 | |
-| title | str | 歌单标题 | |
-| type | num | 收藏夹属性 | 0:普通收藏夹 1:默认收藏夹 |
-| published | num | 是否公开 | 0:不公开 1:公开 |
-| cover | str | 歌单封面图片url | |
-| ctime | num | 歌单创建时间 | 时间戳 |
-| song | num | 歌单中的音乐数量 | |
-| desc | str | 歌单备注信息 | |
-| sids | array | 歌单中的音乐 | |
-| menuId | num | 音频收藏夹对应的歌单amid | |
-| statistic | obj | 歌单状态数信息 | |
-
-`data`中的`sids`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------------- | ---------------- |
-| 0 | num | 收藏的音频auid1 | |
-| n | num | 收藏的音频auid(n+1) | 按照歌单顺序排列 |
-| …… | num | …… | …… |
-
-`data`中的`statistic`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | ------------------------ | ---- |
-| sid | num | 音频收藏夹对应的歌单amid | |
-| play | num | 播放次数 | |
-| collect | num | 点赞次数 | |
-| comment | null | - | |
-| share | num | 分享次数 | |
-
-**示例:**
-
-```shell
-curl -G 'http://www.bilibili.com/audio/music-service-c/web/collections/list' \
---data-urlencode 'ps=2' \
---data-urlencode 'pn=1' \
--b 'SESSDATA=xxx;DedeUserID=1;'
-```
-
-共计创建了两个歌单,如下
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "msg": "success",
- "data": {
- "curPage": 1,
- "pageCount": 1,
- "totalSize": 2,
- "pageSize": 2,
- "data": [
- {
- "id": 15967839,
- "uid": 293793435,
- "uname": "社会易姐QwQ",
- "title": "默认歌单",
- "type": 1,
- "published": 1,
- "cover": "http://i0.hdslb.com/bfs/music/1e079693701d2f525850c288fcc48fa4259a73f6.jpg",
- "ctime": 1519295502,
- "song": 13,
- "desc": "",
- "sids": [
- 11673,
- 276404,
- 15664,
- 737904,
- 108588,
- 1286999,
- 658085,
- 682118,
- 736952,
- 48716,
- 15711,
- 13598,
- 57744
- ],
- "menuId": 15958713,
- "statistic": {
- "sid": 15958713,
- "play": 0,
- "collect": 0,
- "comment": null,
- "share": 0
- }
- },
- {
- "id": 30894022,
- "uid": 293793435,
- "uname": "社会易姐QwQ",
- "title": "test",
- "type": 0,
- "published": 1,
- "cover": "",
- "ctime": 1590154346,
- "song": 0,
- "desc": "test1",
- "sids": [],
- "menuId": 30866686,
- "statistic": {
- "sid": 30866686,
- "play": 0,
- "collect": 0,
- "comment": 0,
- "share": 0
- }
- }
- ]
- }
-}
-```
-
-
-
-## 查询音频收藏夹(默认歌单)信息
-
-> http://www.bilibili.com/audio/music-service-c/web/collections/info
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-鉴权方式:Cookie中`DedeUserID`存在且不为0
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------ | ------ | ------------------ |
-| sid | num | 音频收藏夹mlid | 必要 | 必须为默认收藏夹mlid |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ----------------------------- | -------- | ----------------------------------------------------- |
-| code | num | 返回值 | 0:成功 72000000:参数错误 72010002:未登录 |
-| msg | str | 错误信息 | 默认为success |
-| data | 正确时:obj 错误时:null | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------- | ------ | ------------------------ | ---------------------- |
-| id | num | 音频收藏夹mlid | |
-| uid | num | 创建用户mid | |
-| uname | str | 创建用户昵称 | |
-| title | str | 默认歌单 | 恒为`默认歌单` |
-| type | num | 1 | 恒为`1` |
-| published | num | 是否公开 | 0:不公开 1:公开 |
-| cover | str | 歌单封面图片url | |
-| ctime | num | 歌单创建时间 | 时间戳 |
-| song | num | 歌单中的音乐数量 | |
-| desc | str | 空 | 恒为空 |
-| sids | array | 歌单中的音乐 | |
-| menuId | num | 音频收藏夹对应的歌单amid | 与普通歌单不同通用 |
-| statistic | obj | 歌单状态数信息 | |
-
-`data`中的`sids`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------------- | ---------------- |
-| 0 | num | 收藏的音频auid1 | |
-| n | num | 收藏的音频auid(n+1) | 按照歌单顺序排列 |
-| …… | num | …… | …… |
-
-`data`中的`statistic`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | ------------------------ | ---- |
-| sid | num | 音频收藏夹对应的歌单amid | |
-| play | num | 0 | |
-| collect | num | 0 | |
-| comment | null | - | |
-| share | num | 0 | |
-
-**示例:**
-
-查询我的默认歌单,id为` 15967839 `
-
-```shell
-curl -G 'http://www.bilibili.com/audio/music-service-c/web/collections/info' \
---data-urlencode 'sid=15967839 ' \
--b 'SESSDATA=xxx;DedeUserID=1;'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "msg": "success",
- "data": {
- "id": 15967839,
- "uid": 293793435,
- "uname": "社会易姐QwQ",
- "title": "默认歌单",
- "type": 1,
- "published": 1,
- "cover": "http://i0.hdslb.com/bfs/music/1e079693701d2f525850c288fcc48fa4259a73f6.jpg",
- "ctime": 1519295502,
- "song": 13,
- "desc": "",
- "sids": [
- 11673,
- 276404,
- 15664,
- 737904,
- 108588,
- 1286999,
- 658085,
- 682118,
- 736952,
- 48716,
- 15711,
- 13598,
- 57744
- ],
- "menuId": 15958713,
- "statistic": {
- "sid": 15958713,
- "play": 0,
- "collect": 0,
- "comment": null,
- "share": 0
- }
- }
-}
-```
-
-
-
-
diff --git a/bangumi/info.md b/bangumi/info.md
deleted file mode 100644
index 2f7fa5b..0000000
--- a/bangumi/info.md
+++ /dev/null
@@ -1,422 +0,0 @@
-# 剧集基本信息
-
-- [剧集基本信息(mdid方式)](#剧集基本信息(mdid方式))
-- [获取剧集明细(web端)(ssid/epid方式)](#获取剧集明细(web端)(ssid/epid方式))
-
----
-
-## 剧集基本信息(mdid方式)
-
-
-> http://api.bilibili.com/pgc/review/user
-
-*请求方式:GET*
-
-鉴权方式:Cookie(SESSDATA)或APP
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| -------- | ---- | -------- | ------ | ---- |
-| media_id | str | 剧集mdid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 -404:错误 |
-| message | str | 错误信息 | 默认为success |
-| result | obj | 信息本体 | |
-
-`result`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ---- | ------------ | ---------------- |
-| media | obj | 剧集信息 | |
-| review | obj | 用户操作信息 | 仅登录时存在此项 |
-
-`result`中的`media`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------- | ----- | -------------- | -------------------------- |
-| areas | array | 地区 | |
-| cover | str | 封面图片url | |
-| media_id | num | 剧集mdid | |
-| new_ep | obj | 最新一话信息 | |
-| rating | obj | 评分信息 | |
-| season_id | int | 剧集ssid | |
-| share_url | url | 剧集详情页连接 | |
-| title | str | 标题 | |
-| type_name | str | 剧集类型 | `番剧`、`国创`、`电影`等等 |
-
-`media`中的`areas`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | ---- |
-| 0 | obj | 地区信息1 | |
-| n | obj | 地区信息(n+1) | |
-| …… | obj | …… | |
-
-`areas`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------ | ------------------------------------------------------------ |
-| id | num | 所属地区编号 | 1:中国大陆 2:日本 3:美国 4:英国 6:中国香港 8:韩国 9:法国 10:泰国 13:西班牙 15:德国 35:意大利 39:新西兰 43:澳大利亚 |
-| name | str | 所属地区名称 | |
-
-`media`中的`new_ep`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ---- | ---------------- | -------------------------- |
-| id | int | 最新一话的epid | |
-| index | str | 最新一话名称 | |
-| index_show | str | 最新一话显示名称 | eg. `第1话`、`更新至第4话` |
-
-`media`中的`rating`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | ------------ | ---- |
-| count | num | 总计评分人数 | |
-| score | num | 评分 | |
-
-`result`中的`review`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | ---- | ------------ |
-| is_coin | num | 0 | 作用尚不明确 |
-| is_open | num | 1 | 作用尚不明确 |
-
-**示例:**
-
-查询剧集`md28220978`的基本信息
-
-```shell
-curl -G 'http://api.bilibili.com/pgc/review/user' \
---data-urlencode 'media_id=28220978' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "success",
- "result": {
- "media": {
- "areas": [
- {
- "id": 2,
- "name": "日本"
- }
- ],
- "cover": "http://i0.hdslb.com/bfs/bangumi/8aa0bfce050c72c6626b63d3093a88527c251026.jpg",
- "media_id": 28220978,
- "new_ep": {
- "id": 21278,
- "index": "14",
- "index_show": "全14话"
- },
- "rating": {
- "count": 53376,
- "score": 9.9
- },
- "season_id": 1172,
- "share_url": "https://www.bilibili.com/bangumi/media/md28220978",
- "title": "轻音少女 第一季",
- "type_name": "番剧"
- },
- "review": {
- "is_coin": 0,
- "is_open": 1
- }
- }
-}
-```
-
-
-
-## 获取剧集明细(web端)(ssid/epid方式)
-
-> http://api.bilibili.com/pgc/view/web/season
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| --------- | ---- | -------- | ------------ | ------------------------ |
-| season_id | num | 番剧ssid | 必要(可选) | season_id与ep_id任选其一 |
-| ep_id | num | 剧集epid | 必要(可选) | season_id与ep_id任选其一 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ----------------------- |
-| code | num | 返回值 | 0:成功 -404:错误 |
-| message | str | 错误信息 | 默认为success |
-| ttl | num | 1 | 作用尚不明确 |
-| result | obj | 信息本体 | |
-
-`result`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ------ | -------------------------- | ------------------------------------------ |
-| activity | obj | 参与的活动 | |
-| alias | str | 空 | 作用尚不明确 |
-| bkg_cover | str | 网页背景图片url | 无则为空 |
-| cover | str | 剧集封面图片url | |
-| episodes | array | 正片剧集列表 | |
-| evaluate | str | 简介 | |
-| jp_title | str | 空 | 作用尚不明确 |
-| link | str | 简介页面url | |
-| media_id | num | 剧集mdid | |
-| mode | num | 2 | 作用尚不明确 |
-| new_ep | obj | 更新信息 | |
-| payment | obj | 会员&付费信息 | 若无相关内容则无此项 |
-| positive | obj | | |
-| publish | obj | 发布信息 | |
-| rating | obj | 评分信息 | 若无相关内容则无此项 |
-| record | str | 备案号 | 无则为空 |
-| rights | obj | 属性标志信息 | |
-| season_id | num | 番剧ssid | |
-| season_title | str | 剧集标题 | |
-| seasons | array | 同系列所有季信息 | |
-| section | array | 花絮、PV、番外等非正片内容 | 若无相关内容则无此项 |
-| series | obj | 系列信息 | |
-| share_copy | str | 《{标题}》+{备注} | |
-| share_sub_title | str | 备注 | |
-| share_url | str | 番剧播放页面url | |
-| show | obj | 网页全屏标志 | |
-| square_cover | str | 方形封面图片url | |
-| stat | obj | 状态数 | |
-| status | num | | |
-| subtitle | str | 剧集副标题 | |
-| title | str | 剧集标题 | |
-| total | num | 总计正片集数 | 未完结:大多为-1 已完结:正整数 |
-| type | num | 剧集类型 | 1:番剧 2:电影 3:纪录片 4:国创 5:电视剧 7:综艺 |
-| up_info | obj | UP主信息 | 若无相关内容则无此项 |
-
-`result`中的`activity`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | -------- | ------------ |
-| head_bg_url | str | 空 | 作用尚不明确 |
-| id | num | 活动id | |
-| title | str | 活动标题 | |
-
-`result`中的`episodes`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | ------------ |
-| 0 | obj | 正片第1集 | |
-| n | obj | 正片第(n+1)集 | 按照顺序排列 |
-| …… | obj | | |
-
-`episodes`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------ | ---- | --------------------------------- | -------------------- |
-| aid | num | 单集稿件avid | |
-| badge | str | 标签文字 | 例如`会员`、`限免`等 |
-| badge_info | obj | | |
-| badge_type | num | | |
-| bvid | str | 单集稿件bvid | |
-| cid | num | 视频cid | |
-| cover | str | 单集封面url | |
-| dimension | obj | 分辨率信息 | |
-| from | str | | |
-| id | num | 单集epid | |
-| link | str | 单集网页url | |
-| long_title | str | 单集完整标题 | |
-| pub_time | num | 发布时间 | 时间戳 |
-| pv | num | 0 | 作用尚不明确 |
-| release_date | str | 空 | 作用尚不明确 |
-| rights | obj | | |
-| share_copy | str | 《{标题}》+第n话+{单集完整标题} | |
-| share_url | str | 单集网页url | |
-| short_link | str | 单集网页url短链接 | |
-| status | num | | |
-| subtitle | str | 单集副标题 | 观看次数文字 |
-| title | str | 单集标题 | |
-| vid | str | 单集vid | vupload_+{cid} |
-
-
-
-
-
-
-
-`result`中的`new_ep`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ---- | ------------ | ---------------- |
-| desc | str | 更新备注 | |
-| id | num | 最新一话epid | |
-| is_new | num | 是否最新发布 | 0:否 1:是 |
-| title | str | 最新一话标题 | |
-
-`result`中的`payment`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------------- | ---- | ---- | ---- |
-| discount | num | | |
-| pay_type | obj | | |
-| price | str | | |
-| promotion | str | | |
-| tip | str | | |
-| vip_discount | num | | |
-| vip_first_promotion | str | | |
-| vip_promotion | str | | |
-
-
-
-`result`中的`positive`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | ---- | ---- |
-| id | num | | |
-| title | str | | |
-
-`result`中的`publish`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ---- | ---------------- | ------------------------ |
-| is_finish | num | 完结状态 | 0:未完结 1:已完结 |
-| is_started | num | 是否发布 | 0:未发布 1:已发布 |
-| pub_time | str | 发布时间 | YYYY-MM-DDD hh:mm:ss |
-| pub_time_show | str | 发布时间文字介绍 | |
-| unknow_pub_date | num | 0 | 作用尚不明确 |
-| weekday | num | 0 | 作用尚不明确 |
-
-`result`中的`rating`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | ------------ | ---- |
-| count | num | 总计评分人数 | |
-| score | num | 评分 | |
-
-`result`中的`rights`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------------- | ---- | -------- | ------------------------------- |
-| allow_bp | num | | |
-| allow_bp_rank | num | | |
-| allow_download | num | | |
-| allow_review | num | | |
-| area_limit | num | | |
-| ban_area_show | num | | |
-| can_watch | num | | |
-| copyright | str | 版权标志 | bilibili:授权 dujia:独家 |
-| forbid_pre | num | | |
-| is_cover_show | num | | |
-| is_preview | num | | |
-| only_vip_download | num | | |
-| resource | str | | |
-| watch_platform | num | | |
-
-`result`中的`seasons`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ----------------- | ------------ |
-| 0 | obj | 同系列剧集1 | |
-| n | obj | 同系列剧集(n+1) | 按照顺序排列 |
-| …… | obj | | |
-
-`seasons`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------ | ---- | ---- | ---- |
-| badge | str | | |
-| badge_info | obj | | |
-| badge_type | num | | |
-| cover | str | | |
-| media_id | str | | |
-| new_ep | num | | |
-| season_id | obj | | |
-| season_title | num | | |
-| season_type | str | | |
-| stat | obj | | |
-
-
-
-
-
-
-
-
-
-`result`中的`section`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ----------------- | ------------ |
-| 0 | obj | 其他内容块1 | |
-| n | obj | 其他内容块(n+1) | 按照顺序排列 |
-| …… | obj | | |
-
-`section`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ----- | -------- | ---- |
-| episode_id | num | 0 | |
-| episodes | array | 板块内容 | |
-| id | num | 板块id? | |
-| title | str | 板块标题 | |
-| type | num | ? | |
-
-
-
-
-
-
-
-
-
-
-
-`result`中的`series`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------ | ---- | ------ | ---- |
-| series_id | num | 系列id | |
-| series_title | str | 系列名 | |
-
-`result`中的`show`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | -------- | -------------------- |
-| wide_screen | num | 是否全屏 | 0:正常 1:全屏 |
-
-`result`中的`stat`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------- | ---- | ------ | ---- |
-| coins | num | 投币数 | |
-| danmakus | num | 弹幕数 | |
-| favorites | num | 收藏数 | |
-| likes | num | 点赞数 | |
-| reply | num | 评论数 | |
-| share | num | 分享数 | |
-| views | num | 播放数 | |
-
-`result`中的`up_info`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | ----------- | ---- |
-| avatar | str | 头像图片url | |
-| follower | num | 粉丝数 | |
-| is_follow | num | 0 | |
-| mid | num | UP主mid | |
-| pendant | obj | | |
-| theme_type | num | 0 | |
-| uname | str | UP主昵称 | |
-| verify_type | num | | |
-| vip_status | num | | |
-| vip_type | num | | |
-
-##
diff --git a/blackroom/jury/base_info.md b/blackroom/jury/base_info.md
deleted file mode 100644
index 1646207..0000000
--- a/blackroom/jury/base_info.md
+++ /dev/null
@@ -1,254 +0,0 @@
-# 风纪委员会用户基本信息
-
-- [基本数据](#基本数据)
-- [统计信息](#统计信息)
-- [检查申请风纪委员会资格](#检查申请风纪委员会资格)
-
----
-
-## 基本数据
-
-> http://api.bilibili.com/x/credit/jury/jury
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | ---- |
-| access_key | str | APP登录Token | APP方式必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ------ | -------- | ----------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 |
-| message | str | 信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | object | 数据本体 | |
-
-`data` 对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ---- | -------------------- | ---------------------------- |
-| caseTotal | num | 总众裁数 | |
-| face | str | 用户头像url | |
-| restDays | num | 当前资格剩余天数 | |
-| rightRadio | num | 当前裁决正确率百分比 | 裁决数小于3时固定为50 |
-| status | num | 当前状态 | 1:具有资格 2:资格失效 |
-| uname | str | 用户昵称 | |
-
-**示例:**
-
-Cookie方式:
-
-```shell
-curl 'http://api.bilibili.com/x/credit/jury/jury' \
--b 'SESSDATA=xxx'
-```
-
-APP方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/credit/jury/jury' \
---data-urlencode 'access_key=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "caseTotal": 7,
- "face": "http://i1.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg",
- "restDays": 30,
- "rightRadio": 80,
- "status": 1,
- "uname": "社会易姐QwQ"
- }
-}
-```
-
-
-
-## 统计信息
-
-> http://api.bilibili.com/x/credit/jury/kpi
-
-*方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | ---- |
-| access_key | str | APP登录Token | APP方式必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ----- | -------- | ----------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 |
-| message | str | 信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | array | 数据本体 | |
-
-`data`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ----------------- | ---- |
-| 0 | obj | 第1个月统计 | |
-| n | obj | 第(n+1)个月统计 | |
-| …… | obj | …… | …… |
-
-`data` 数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | -------- | ---- |
-| id | num | 0 | |
-| mid | num | 用户id | |
-| number | num | 尚不明确 | |
-| day | num | 开始时间 | |
-| rate | num | 尚不明确 | |
-| rank | num | 尚不明确 | |
-| rankper | num | 尚不明确 | |
-| rankTotal | num | 尚不明确 | |
-| point | num | 32767 | |
-| activeDays | num | 活跃天数 | |
-| voteTotal | num | 投票总数 | |
-| voteRadio | num | 尚不明确 | |
-| blockedTotal | num | 尚不明确 | |
-| termStart | num | 尚不明确 | |
-| termEnd | num | 尚不明确 | |
-| opinion_likes | num | 观点获赞 | |
-
-**示例:**
-
-Cookie方式:
-
-```shell
-curl 'http://api.bilibili.com/x/credit/jury/kpi' \
--b 'SESSDATA=xxx'
-```
-
-APP方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/credit/jury/kpi' \
---data-urlencode 'access_key=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": [
- {
- "id": 0,
- "mid": 114343368,
- "number": 199046,
- "day": 1539792000,
- "rate": 1,
- "rank": 0,
- "rankper": 1,
- "rankTotal": 39584,
- "point": 32767,
- "activeDays": 23,
- "voteTotal": 422,
- "voteRadio": 0,
- "blockedTotal": 0,
- "termStart": 1537200000,
- "termEnd": 1539792000,
- "opinion_likes": 18
- }
- ]
-}
-```
-
-
-
-## 检查申请风纪委员会资格
-
-> http://api.bilibili.com/x/credit/jury/requirement
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-只有用户会员等级≥Lv4、90天内无违规、实名认证且非封禁状态才可以申请加入风纪委员会
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | ---- |
-| access_key | str | APP登录Token | APP方式必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ------ | -------- | ----------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 |
-| message | str | 信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | object | 数据本体 | |
-
-`data` 对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | ---------------- | ------------------------------------- |
-| blocked | bool | 是否被封禁 | true:是 false:否 **下同** |
-| cert | bool | 是否实名认证 | |
-| level | bool | 等级是否>=4 | |
-| rule | bool | 是否90天内无违规 | |
-
-**示例:**
-
-Cookie方式:
-
-```shell
-curl 'http://api.bilibili.com/x/credit/jury/requirement' \
--b 'SESSDATA=xxx'
-```
-
-APP方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/credit/jury/requirement' \
---data-urlencode 'access_key=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "blocked": false,
- "cert": true,
- "level": true,
- "rule": true
- }
-}
-```
-
-
diff --git a/clientinfo/client_info.md b/clientinfo/client_info.md
deleted file mode 100644
index a268a03..0000000
--- a/clientinfo/client_info.md
+++ /dev/null
@@ -1,95 +0,0 @@
-# 终端信息查询
-
-- [终端信息查询](#终端信息查询)
-
----
-
-## 终端信息查询
-
-> http://api.bilibili.com/client_info
-
-*请求方式:任意*
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------- |
-| code | num | 返回值 | 0:成功 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | -------- | ------------------- | ------------ |
-| country | str | 国家/地区名 | |
-| ip | str | 公网IP地址 | |
-| province | str | 省/州 | 非必须存在项 |
-| city | str | 城市 | 非必须存在项 |
-| district | district | ? | |
-| isp | str | 运营商名 | |
-| dns | str | dns服务器ip | |
-| dns_isp | str | dns服务器ip运营商名 | |
-| headers | obj | 头部字段 | |
-
-`data`中的`headers`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------------------------- | ---- | ----------------- | ---- |
-| HTTP_ACCEPT_ENCODING | str | | |
-| HTTP_X_CACHE_SERVER | str | CDN服务器名 | |
-| HTTP_X_CACHE_SERVER_ADDR | str | CDN服务器ip | |
-| HTTP_X_BACKEND_BILI_REAL_IP | str | 真实服务器ip | |
-| HTTP_X_BACKEND_BILI_REAL_IPPORT | str | 真实服务器端口 | |
-| HTTP_X_BACKEND_BILI_REAL_IP_CHAIN | str | 真实服务器ip+端口 | |
-| HTTP_X_SCHEME | str | 访问协议 | |
-| HTTP_HOST | str | 访问域名 | |
-| HTTP_USER_AGENT | str | 客户端UA | |
-| HTTP_ACCEPT | str | | |
-| HTTP_CACHE_CONTROL | str | | |
-
-**示例:**
-
-```shell
-curl 'http://api.bilibili.com/client_info'
-```
-
-
-查看响应示例:
-
-
-```json
-{
- "code": 0,
- "message": "ok",
- "data": {
- "country": "中国",
- "ip": "36.40.120.140",
- "province": "陕西",
- "city": "渭南",
- "district": null,
- "isp": "电信",
- "dns": null,
- "dns_isp": null,
- "headers": {
- "HTTP_ACCEPT_ENCODING": "gzip",
- "HTTP_X_CACHE_SERVER": "ks-bj-webcdn-07",
- "HTTP_X_CACHE_SERVER_ADDR": "10.33.2.170",
- "HTTP_X_BACKEND_BILI_REAL_IP": "36.40.120.140",
- "HTTP_X_BACKEND_BILI_REAL_IPPORT": "22058",
- "HTTP_X_BACKEND_BILI_REAL_IP_CHAIN": "36.40.120.140:22058",
- "HTTP_X_SCHEME": "https",
- "HTTP_HOST": "api.bilibili.com",
- "HTTP_USER_AGENT": "PostmanRuntime/7.26.8",
- "HTTP_ACCEPT": "*/*",
- "HTTP_CACHE_CONTROL": "no-cache"
- }
- }
-}
-```
-
-
-
diff --git a/clientinfo/ip.md b/clientinfo/ip.md
deleted file mode 100644
index b2add2b..0000000
--- a/clientinfo/ip.md
+++ /dev/null
@@ -1,66 +0,0 @@
-# 通过ip确定地理位置
-
-- [通过ip确定位置](#通过ip确定位置)
-
----
-
-## 通过ip确定位置
-
-> http://api.bilibili.com/x/web-interface/zone
-
-*请求方式:GET*
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------- |
-| code | num | 返回值 | 0:成功 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------ | ---- | ------------- | ------------ |
-| addr | str | 公网IP地址 | |
-| country | str | 国家/地区名 | |
-| province | str | 省/州 | 非必须存在项 |
-| city | str | 城市 | 非必须存在项 |
-| isp | str | 运营商名 | |
-| latitude | num | 纬度 | |
-| longitude | num | 经度 | |
-| zone_id | num | ip数据库id | |
-| country_code | num | 国家/地区代码 | |
-
-**示例:**
-
-```shell
-curl 'http://api.bilibili.com/x/web-interface/zone'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code":0,
- "message":"0",
- "ttl":1,
- "data":{
- "addr":"36.40.120.145",
- "country":"中国",
- "province":"陕西",
- "city":"渭南",
- "isp":"电信",
- "latitude":34.4995,
- "longitude":109.492821,
- "zone_id":4472912,
- "country_code":86
- }
-}
-```
-
-
diff --git a/danmaku/danmaku_proto.md b/danmaku/danmaku_proto.md
deleted file mode 100644
index f2b4625..0000000
--- a/danmaku/danmaku_proto.md
+++ /dev/null
@@ -1,107 +0,0 @@
-# protobuf弹幕
-
-2020年5月23日,哔哩哔哩网页端及移动端启用了新的默认弹幕api,网页端弹幕显示的上限变为原弹幕池上限的两倍。
-
-新的api是以6分钟为一个单位加载,即每次加载6分钟内的弹幕
-
-- [获取实时弹幕](#获取实时弹幕)
-
----
-
-## 获取实时弹幕
-
-> http://api.bilibili.com/x/v2/dm/web/seg.so (web端)
->
-> http://api.bilibili.com/x/v2/dm/list/seg.so (APP端)
->
-> http://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回复:**
-
-porto定义见:[bilibili.community.service.dm.v1.DmSegMobileReply](../grpc_api/bilibili/community/service/dm/v1.proto)
-
-消息`DmSegMobileReply`:
-
-| 名称 | 类型 | 含义 | 备注 |
-| ----- | -------------------- | -------- | ---- |
-| elems | repeated DanmakuElem | 弹幕条目 | |
-
-消息`DanmakuElem`:
-
-| 名称 | 类型 | 含义 | 备注 |
-| -------- | ------ | ------------------ | ------------------------------------------------------------ |
-| id | int64 | 弹幕dmid | 唯一 可用于操作参数 |
-| progress | int32 | 视频内弹幕出现时间 | 毫秒 |
-| mode | int32 | 弹幕类型 | 1 2 3:普通弹幕 4:底部弹幕 5:顶部弹幕 6:逆向弹幕 7:高级弹幕 8:代码弹幕 9:BAS弹幕(仅限于特殊弹幕专包) |
-| fontsize | int32 | 弹幕字号 | 18:小 25:标准 36:大 |
-| color | uint32 | 弹幕颜色 | 十进制RGB888值 |
-| midHash | string | 发送者mid的HASH | 用于屏蔽用户和查看用户发送的所有弹幕 也可反查用户id |
-| content | string | 弹幕内容 | utf-8编码 |
-| ctime | int64 | 弹幕发送时间 | 时间戳 |
-| weight | int32 | 权重 | 用于智能屏蔽,根据弹幕语义及长度通过AI识别得出 范围:[0-10] 值越大权重越高 |
-| action | string | 动作? | 作用尚不明确 |
-| pool | int32 | 弹幕池 | 0:普通池 1:字幕池 2:特殊池(代码/BAS弹幕) |
-| idStr | string | 弹幕dmid | 字串形式 唯一 可用于操作参数 |
-
-**示例:**
-
-获取视频`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 = 'http://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
-```
-
diff --git a/docs/APP_widget/splash.md b/docs/APP_widget/splash.md
new file mode 100644
index 0000000..2a3179c
--- /dev/null
+++ b/docs/APP_widget/splash.md
@@ -0,0 +1,567 @@
+# APP端开屏图片
+
+## 获取APP端开屏图片列表
+
+> https://app.bilibili.com/x/v2/splash/brand/list
+
+*请求方式:GET*
+
+鉴权方式:APP
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|--------|-----|-------|---------|-----|
+| appkey | str | APP密钥 | APP方式必要 | |
+| ts | num | 当前时间戳 | APP方式必要 | |
+| sign | str | APP签名 | APP方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|---------------------------------------|
+| code | num | 返回值 | 0:成功 -3:API校验密匙错误 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------------|-------|--------|--------|
+| pull_interval | num | 1800 | 作用尚不明确 |
+| forcibly | bool | false | 作用尚不明确 |
+| rule | str | order | 作用尚不明确 |
+| list | array | 开屏图片列表 | |
+| show | array | 默认显示项 | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|-----------|-----|
+| 0 | obj | 开屏图片1 | |
+| n | obj | 开屏图片(n+1) | |
+| …… | obj | …… | …… |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|----------|-----|---------------------|-----|
+| id | num | 开屏图片id | |
+| thumb | str | 开屏图片url | |
+| logo_url | str | “bilibili”logo图片url | |
+
+`data`中的`show`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|-------|-----|
+| 0 | obj | 套了个娃? | |
+
+`show`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------|-----|--------|--------|
+| id | num | 开屏图片id | |
+| begin_time | num | 起始时间? | 时间戳 |
+| end_time | num | 结束时间? | 时间戳 |
+| probability | num | 0 | 作用尚不明确 |
+| duration | num | 显示时间? | 单位为毫秒 |
+
+**示例:**
+
+```shell
+curl -G 'https://app.bilibili.com/x/v2/splash/brand/list' \
+--data-urlencode 'appkey=1d8b6e7d45233436' \
+--data-urlencode 'ts=0' \
+--data-urlencode 'sign=78a89e153cd6231a4a4d55013aa063ce'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "pull_interval": 1800,
+ "forcibly": false,
+ "rule": "order",
+ "list": [
+ {
+ "id": 10,
+ "thumb": "http://i0.hdslb.com/bfs/archive/e2d2f57e08b511d1a47203859f7bddb4ef9d4e16.png",
+ "logo_url": "http://i0.hdslb.com/bfs/archive/ecc9b29bb4b803daf2a46fe5ef71bf530300162c.png"
+ },
+ {
+ "id": 11,
+ "thumb": "http://i0.hdslb.com/bfs/archive/fe737da5cdedf9dad038e5fd30e957be8a063bc2.png",
+ "logo_url": "http://i0.hdslb.com/bfs/archive/ecc9b29bb4b803daf2a46fe5ef71bf530300162c.png"
+ },
+ {
+ "id": 12,
+ "thumb": "http://i0.hdslb.com/bfs/archive/574469a4a20f41ba4dc9ecd41d15f94eea875ed9.png",
+ "logo_url": "http://i0.hdslb.com/bfs/archive/ecc9b29bb4b803daf2a46fe5ef71bf530300162c.png"
+ },
+ {
+ "id": 13,
+ "thumb": "http://i0.hdslb.com/bfs/archive/af0f4f611faa34340bd4f91def1973ccbfb8fbb3.png",
+ "logo_url": "http://i0.hdslb.com/bfs/archive/ecc9b29bb4b803daf2a46fe5ef71bf530300162c.png"
+ },
+ {
+ "id": 14,
+ "thumb": "http://i0.hdslb.com/bfs/archive/1d40e975b09d5c87b11b3ae0c9ce6c6b82f63d9e.png",
+ "logo_url": "http://i0.hdslb.com/bfs/archive/ecc9b29bb4b803daf2a46fe5ef71bf530300162c.png"
+ }
+ ],
+ "show": [
+ {
+ "id": 12,
+ "begin_time": 1597564800,
+ "end_time": 1630753108,
+ "probability": 0,
+ "duration": 700
+ }
+ ]
+ }
+}
+```
+
+
+
+如id=11的图片为:
+
+
+
+
+## 获取APP端开屏幕广告信息
+
+> https://app.bilibili.com/x/v2/splash/list
+
+*请求方式: GET*
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|----------|-----|-----------------------|-----|-----|
+| build | int | 客户端内部版本号 | 必要 | |
+| mobi_app | str | android, iphone, ipad | 必要 | |
+| platform | str | android, ios | 必要 | |
+| height | int | 屏幕高度 | 必要 | |
+| width | int | 屏幕宽度 | 必要 | |
+| birth | str | 生日日期(四位数,例 0101) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|---------------------------------------|
+| code | num | 返回值 | 0:成功 -3:API校验密匙错误 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------------|--------|---------------------|---------|
+| splash_request_id | 当前请求id | 长度为33, 前13位是当前秒级时间戳 | |
+| max_time | int | 最长显示时间? | |
+| min_interval | int | 最少显示时间? | 千分之一秒单位 |
+| pull_interval | int | 显示时间? | |
+| keep_ids | int | 显示时间? | |
+| list | list | 广告 list | |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|----------------------------|-------|---------------|--------|
+| id | int | 广告id | |
+| type | int | 1 | |
+| card_type | int | 39 | |
+| duration | int | 持续时间? | |
+| begin_time | int | 开始展示时间 | 秒级时间戳 |
+| end_time | int | 停止展示时间 | 毫秒级时间戳 |
+| thumb | url | 广告图片 | |
+| hash | str | 作用尚不明确 | |
+| logo_url | str | 空值 | |
+| logo_hash | str | 空值 | |
+| skip | int | 是否跳转? | |
+| uri | str | 跳转的url | |
+| video_url | str | 视频url | |
+| video_hash | str | 视频hash | |
+| video_width | num | 视频宽度 | |
+| video_height | num | 视频高度 | |
+| uri_title | str | 空值 | |
+| source | int | 929 | |
+| cm_mark | int | 1 | |
+| ad_cb | str | 作用尚不明确 | |
+| resource_id | int | 926 | |
+| request_id | str | 作用尚不明确 | |
+| client_ip | str | 客户端IP | |
+| is_ad | bool | 作用尚不明确 | |
+| is_ad_loc | bool | 作用尚不明确 | |
+| schema_title | str | 滑动进入第三方应用 | |
+| schema_callup_white_list | array | 跳转的 APP 的白名单 | |
+| extra | obj | 显示信息? | |
+| enable_pre_download | bool | 是否可以当场下载 APP? | |
+| enable_background_download | bool | 是否可以静默下载 APP? | |
+| interact_type | int | 是否可以跳转(互动)? | |
+| interact_url | str | 跳转(互动) url | |
+| interact_distance | int | 作用尚不明确 | |
+| guide_button_list | array | 所有的按钮 | |
+| mark_with_skip_style | num | 作用尚不明确 | |
+| skip_button_height | num | 作用尚不明确 | |
+
+`extra`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|----------------------------|-------|-----|-----|
+| use_ad_web_v2 | bool | | |
+| show_urls | array | | |
+| click_urls | array | | |
+| show_1s_urls | array | | |
+| download_whitelist | array | | |
+| open_whitelist | array | | |
+| card | obj | | |
+| report_time | num | | |
+| sales_type | num | | |
+| special_industry | bool | | |
+| preload_landingpage | num | | |
+| share_info | obj | | |
+| upzone_entrance_type | num | | |
+| upzone_entrance_report_id | num | | |
+| topview_pic_url | str | | |
+| topview_video_url | str | | |
+| click_area | num | | |
+| shop_id | num | | |
+| up_mid | num | | |
+| track_id | str | | |
+| enable_store_direct_launch | int | | |
+| enable_double_jump | bool | | |
+| store_callup_card | bool | | |
+| enable_h5_alert | bool | | |
+| special_industry_style | num | | |
+| macro_replace_priority | num | | |
+| feedback_panel_style | num | | |
+| ad_content_type | num | | |
+| enable_h5_pre_load | num | | |
+| hot_activity_id | num | | |
+| product_id | num | | |
+| landingpage_download_style | num | | |
+
+`guide_button_list` 中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------------------------------|-------|-----|-------|
+| id | int | | |
+| x | int | | |
+| y | int | | |
+| bg_color | str | | |
+| bg_color_night | str | | |
+| text_color | str | | |
+| text_color_night | str | | |
+| guide_instructions | str | | |
+| guide_instructions_new | str | 空值 | |
+| width | str | | |
+| jump_url | str | | |
+| schema_package_name | str | | |
+| schema_title | str | | |
+| schema_title_new | str | 空值 | |
+| height | str | | |
+| slide_threshold_value | str | | |
+| slide_border_color | str | | |
+| guide_image_url | str | | |
+| guide_image_md5 | str | | |
+| interact_style | str | | |
+| jump_image_url | str | | |
+| jump_image_md5 | str | | |
+| schema_image_url | str | | |
+| schema_image_md5 | str | | |
+| click_expand_ratio | str | | |
+| logo_image_url | str | | |
+| logo_image_md5 | str | | |
+| related_ids | array | 空 | |
+| schema_list | array | 空 | |
+| font_ratio | num | | |
+| seq | num | | |
+| degrade_type | num | | |
+| twist_angle | num | | |
+| twist_speed | num | | |
+| secondary_guide_instructions | str | | |
+| secondary_font_ratio | num | | |
+| secondary_text_color | str | | |
+| secondary_text_color_night | str | | |
+| activity_time | num | | 秒级时间戳 |
+| time_show_type | num | | |
+
+**示例:**
+
+```shell
+curl -X GET 'https://app.bilibili.com/x/v2/splash/list' \
+ --data-urlencode 'build=999999999' \
+ --data-urlencode 'mobi_app=android' \
+ --data-urlencode 'platform=android' \
+ --data-urlencode 'height=1920' \
+ --data-urlencode 'width=1080' \
+ --data-urlencode 'birth=0101'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "max_time": 4,
+ "min_interval": 14400,
+ "pull_interval": 900,
+ "keep_ids": null,
+ "list": [
+ {
+ "id": 9460,
+ "type": 1,
+ "card_type": 39,
+ "duration": 5,
+ "begin_time": 1663689600,
+ "end_time": 1663775999,
+ "thumb": "https://i0.hdslb.com/bfs/sycp/creative_img/202208/cb001c291c6011940e29531dcce6b1e8.webp",
+ "hash": "712d3df973f99fdcd30c2419d19630dc",
+ "logo_url": "",
+ "logo_hash": "",
+ "skip": 1,
+ "uri": "https://market.m.taobao.com/app/mwdk-industry/mwdk-shopping-base/pages/peppa.html?disableNav=YES&merchantCode=HM&pageId=105240&path=%2Fact%2Frax%2Fmanual1455861656935693595&renderChannelCode=HM&siteCode=HM_8_7dd8299642994fa196f9a9aae4fd4391_3&spma=a225z&usePayment=alipayMiniApp&utm_campaign=dwlx&utm_source=1234&targetShopId=199273419",
+ "video_url": "http://upos-sz-static.bilivideo.com/ssaxcode/89/jl/n220831a21uql976d44zun4y0ykmjl89-1-SPLASH.mp4",
+ "video_hash": "ae10333c160452cc2755d079db10b597",
+ "video_width": 1080,
+ "video_height": 1920,
+ "uri_title": "",
+ "source": 929,
+ "cm_mark": 1,
+ "ad_cb": "COfrARC7jxUY9EkgADDWwCE4oQdCIDE2NjM2NDY2MzY1ODhxMTcyYTI2YTE5MmE5NnE1NDE0SKy0xMi1MFIG5aSp5rSlaP///////////wFw////////////AYABS4gB5+sBsgEg8mQFw0bBxGOGYE8OBhMOd3DE8OGFZXhookrFX4s3UrrwAruPFdgD9Ek=",
+ "resource_id": 926,
+ "request_id": "1663646636588q172a26a192a96q5414",
+ "client_ip": "117.14.146.37",
+ "is_ad": true,
+ "is_ad_loc": true,
+ "schema_title": "滑动进入第三方应用",
+ "schema_callup_white_list": [
+ "tmall",
+ "taobao",
+ "openapp.jdmobile",
+ "weixin",
+ "alipays",
+ "tbopen",
+ "eleme",
+ "qqmusic",
+ "pddopen",
+ "upwallet",
+ "yocial://plaza/?tab=0",
+ "hiapplink",
+ "meiju",
+ "midea-meiju",
+ "uclink",
+ "qklink",
+ "taobaolite",
+ "lazyaudio",
+ "meituanwaimai",
+ "baiduboxapp://",
+ "baiduboxapp",
+ "fleamarket",
+ "dewuapp",
+ "duappmoblink",
+ "cmblife",
+ "imeituan",
+ "vmall",
+ "music",
+ "pinduoduo"
+ ],
+ "extra": {
+ "use_ad_web_v2": true,
+ "show_urls": [
+ "https://g.cn.miaozhen.com/x/k=2315612&p=8EUuC&dx=__IPDX__&rt=2&pro=s&ns=__IP__&ni=__IESID__&v=__LOC__&xa=__ADPLATFORM__&tr=__REQUESTID__&vg=__AUTOPLAY__&nh=__AUTOREFRESH__&mo=__OS__&m0=__OPENUDID__&m0a=__DUID__&m1=__ANDROIDID1__&m1a=__ANDROIDID__&m2=__IMEI__&m4=__AAID__&m5=__IDFA__&m6=__MAC1__&m6a=__MAC__&m11=__OAID__&m14=__CAID__&m5a=__IDFV__&mn=__ANAME__&m5b=__IDFA1__&m11a=__OAID1__&m14a=__CAID1__&o="
+ ],
+ "click_urls": [
+ "https://e.cn.miaozhen.com/r/k=2315612&p=8EUuC&dx=__IPDX__&rt=2&pro=s&ns=__IP__&ni=__IESID__&v=__LOC__&xa=__ADPLATFORM__&tr=__REQUESTID__&mo=__OS__&m0=__OPENUDID__&m0a=__DUID__&m1=__ANDROIDID1__&m1a=__ANDROIDID__&m2=__IMEI__&m4=__AAID__&m5=__IDFA__&m6=__MAC1__&m6a=__MAC__&m11=__OAID__&m14=__CAID__&m5a=__IDFV__&mn=__ANAME__&m5b=__IDFA1__&m11a=__OAID1__&m14a=__CAID1__&o="
+ ],
+ "show_1s_urls": [],
+ "download_whitelist": [],
+ "open_whitelist": [
+ "tmall",
+ "taobao",
+ "openapp.jdmobile",
+ "weixin",
+ "alipays",
+ "tbopen",
+ "eleme",
+ "qqmusic",
+ "pddopen",
+ "upwallet",
+ "yocial://plaza/?tab=0",
+ "hiapplink",
+ "meiju",
+ "midea-meiju",
+ "uclink",
+ "qklink",
+ "taobaolite",
+ "lazyaudio",
+ "meituanwaimai",
+ "baiduboxapp://",
+ "baiduboxapp",
+ "fleamarket",
+ "dewuapp",
+ "duappmoblink",
+ "cmblife",
+ "imeituan",
+ "vmall",
+ "music",
+ "pinduoduo"
+ ],
+ "card": {
+ "card_type": 0,
+ "extreme_team_status": false,
+ "support_transition": false,
+ "under_player_interaction_style": 0,
+ "grade_denominator": 0,
+ "star_level": 0,
+ "live_booking_population_threshold": 0,
+ "ori_mark_hidden": 0,
+ "use_multi_cover": false,
+ "fold_time": 0,
+ "live_room_popularity": 0,
+ "live_tag_show": false,
+ "grade_level": 0
+ },
+ "report_time": 0,
+ "sales_type": 75,
+ "special_industry": false,
+ "preload_landingpage": 0,
+ "share_info": {},
+ "upzone_entrance_type": 0,
+ "upzone_entrance_report_id": 0,
+ "topview_pic_url": "",
+ "topview_video_url": "",
+ "click_area": 0,
+ "shop_id": 0,
+ "up_mid": 0,
+ "track_id": "pbaes.Y5ATuPVlG6ysPF6cvl6W8B-BYexhSJzrKH3NYfC3KIHDb9W5cxPA4_FTEPWYDED5DjfRwb3tcrLppYAqQ87SSg==",
+ "enable_store_direct_launch": 0,
+ "enable_double_jump": false,
+ "store_callup_card": false,
+ "enable_h5_alert": false,
+ "special_industry_style": 0,
+ "macro_replace_priority": 1,
+ "feedback_panel_style": 0,
+ "ad_content_type": 0,
+ "enable_h5_pre_load": 0,
+ "hot_activity_id": 0,
+ "product_id": 0,
+ "landingpage_download_style": 2
+ },
+ "enable_pre_download": true,
+ "enable_background_download": true,
+ "interact_type": 1,
+ "interact_url": "https://market.m.taobao.com/app/mwdk-industry/mwdk-shopping-base/pages/peppa.html?disableNav=YES&merchantCode=HM&pageId=105240&path=%2Fact%2Frax%2Fmanual1455861656935693595&renderChannelCode=HM&siteCode=HM_8_7dd8299642994fa196f9a9aae4fd4391_3&spma=a225z&usePayment=alipayMiniApp&utm_campaign=dwlx&utm_source=1234&targetShopId=199273419",
+ "interact_distance": 60,
+ "guide_button_list": [
+ {
+ "id": 49037,
+ "x": 50,
+ "y": 78,
+ "bg_color": "#80000000",
+ "bg_color_night": "#80000000",
+ "text_color": "#FFFFFFFF",
+ "text_color_night": "#FFFFFFFF",
+ "guide_instructions": "点击进入活动页",
+ "guide_instructions_new": "",
+ "width": 70,
+ "jump_url": "https://market.m.taobao.com/app/mwdk-industry/mwdk-shopping-base/pages/peppa.html?disableNav=YES&merchantCode=HM&pageId=105240&path=%2Fact%2Frax%2Fmanual1455861656935693595&renderChannelCode=HM&siteCode=HM_8_7dd8299642994fa196f9a9aae4fd4391_3&spma=a225z&usePayment=alipayMiniApp&utm_campaign=dwlx&utm_source=1234&targetShopId=199273419",
+ "schema_package_name": "",
+ "schema_title": "",
+ "schema_title_new": "",
+ "height": 7,
+ "slide_threshold_value": 5,
+ "slide_border_color": "#40FFFFFF",
+ "guide_image_url": "",
+ "guide_image_md5": "",
+ "interact_style": 6,
+ "jump_image_url": "https://i0.hdslb.com/bfs/sycp/creative_img/202208/f61a66cf54bc71d9bd1b81bde79c0140.json",
+ "jump_image_md5": "26d8b4b516f83a3f9b15fef643464cc6",
+ "schema_image_url": "https://i0.hdslb.com/bfs/sycp/creative_img/202208/f61a66cf54bc71d9bd1b81bde79c0140.json",
+ "schema_image_md5": "26d8b4b516f83a3f9b15fef643464cc6",
+ "click_expand_ratio": 100,
+ "logo_image_url": "https://i0.hdslb.com/bfs/sycp/mgk/img/202106/17006d50ec506813727b1cb5c6fc58b1.png",
+ "logo_image_md5": "86bc1b68ce4708d918cd4e01a975ca17",
+ "related_ids": [],
+ "schema_list": [],
+ "font_ratio": 0.23,
+ "seq": 0,
+ "degrade_type": 1,
+ "twist_angle": 0,
+ "twist_speed": -1,
+ "secondary_guide_instructions": "",
+ "secondary_font_ratio": 0,
+ "secondary_text_color": "",
+ "secondary_text_color_night": "",
+ "activity_time": 1662532059,
+ "time_show_type": 0
+ },
+ {
+ "id": 49040,
+ "x": 50,
+ "y": 83,
+ "bg_color": "#80000000",
+ "bg_color_night": "#80000000",
+ "text_color": "#FFFFFFFF",
+ "text_color_night": "#FFFFFFFF",
+ "guide_instructions": "即可前往 开吃新品",
+ "guide_instructions_new": "",
+ "width": 64,
+ "jump_url": "https://market.m.taobao.com/app/mwdk-industry/mwdk-shopping-base/pages/peppa.html?disableNav=YES&merchantCode=HM&pageId=105240&path=%2Fact%2Frax%2Fmanual1455861656935693595&renderChannelCode=HM&siteCode=HM_8_7dd8299642994fa196f9a9aae4fd4391_3&spma=a225z&usePayment=alipayMiniApp&utm_campaign=dwlx&utm_source=1234&targetShopId=199273419",
+ "schema_package_name": "",
+ "schema_title": "滑动进入第三方应用",
+ "schema_title_new": "",
+ "height": 3,
+ "slide_threshold_value": 5,
+ "slide_border_color": "#40FFFFFF",
+ "guide_image_url": "",
+ "guide_image_md5": "",
+ "interact_style": 3,
+ "jump_image_url": "https://i0.hdslb.com/bfs/sycp/creative_img/202208/f61a66cf54bc71d9bd1b81bde79c0140.json",
+ "jump_image_md5": "26d8b4b516f83a3f9b15fef643464cc6",
+ "schema_image_url": "https://i0.hdslb.com/bfs/sycp/creative_img/202208/f61a66cf54bc71d9bd1b81bde79c0140.json",
+ "schema_image_md5": "26d8b4b516f83a3f9b15fef643464cc6",
+ "click_expand_ratio": 100,
+ "logo_image_url": "https://i0.hdslb.com/bfs/sycp/mgk/img/202106/17006d50ec506813727b1cb5c6fc58b1.png",
+ "logo_image_md5": "86bc1b68ce4708d918cd4e01a975ca17",
+ "related_ids": [
+ 49037
+ ],
+ "schema_list": [],
+ "font_ratio": 0.23,
+ "seq": 99,
+ "degrade_type": 0,
+ "twist_angle": 0,
+ "twist_speed": -1,
+ "secondary_guide_instructions": "",
+ "secondary_font_ratio": 0,
+ "secondary_text_color": "",
+ "secondary_text_color_night": "",
+ "activity_time": 1662532059,
+ "time_show_type": 0
+ }
+ ],
+ "mark_with_skip_style": 0,
+ "skip_button_height": 0.0557
+ }
+ ],
+ "splash_request_id": "1663646636605q172a24a57a232q5796"
+ }
+}
+```
+
diff --git a/docs/APP_widget/ver.md b/docs/APP_widget/ver.md
new file mode 100644
index 0000000..3296c87
--- /dev/null
+++ b/docs/APP_widget/ver.md
@@ -0,0 +1,236 @@
+# 获取最新 APP 版本
+
+## 获取版本信息
+
+> https://app.bilibili.com/x/v2/version
+
+*请求方法: GET*
+
+
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --- | --- | --- | --- | --- |
+| mobi_app | str | 目标客户端类型 | 不必要 | 留空为最新有更新的平台 android: Android 版 iphone: iPhone 版 ipad: iPad HD 版 win: UWP 版 android_tv_yst: TV 版 android_car: 车机版 pc_client: PC 客户端 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | int | 返回值 | 0: 成功 |
+| message | str | 错误信息 | 默认为 `0` |
+| ttl | int | 1 | |
+| data | array | 版本信息列表 | |
+
+`data` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| plat | int | 平台 | 0: Android 1: iPhone 2: iPad HD 3: UWP 12: TV 版 35: 车机版 40: PC 客户端 |
+| desc | str | 版本描述 | |
+| version | str | 版本号 | |
+| build | int | 内部版本号 | |
+
+**示例:**
+
+```shell
+curl -G 'https://app.bilibili.com/x/v2/version' \
+--url-query'mobi_app=android'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [
+ {
+ "plat": 0,
+ "desc": "-修复了一些bug,切了个大西瓜~",
+ "version": "8.9.0",
+ "build": 8090300,
+ "ptime": 1723612377
+ },
+ // ...
+ {
+ "plat": 0,
+ "desc": "[修正]横屏状态下,视频列表加载失败的问题\n[修正]超过48kHz采样率的音频无法播放的问题\n[修正]部分系统黑屏的问题\nPS:帮下面的同学祈祷早日上架",
+ "version": "2.0.4",
+ "build": 0,
+ "ptime": 1382630400
+ }
+ ]
+}
+```
+
+
+
+## 版本升级
+
+> https://app.bilibili.com/x/v2/version/fawkes/upgrade
+
+*请求方式: GET*
+
+鉴权方式(非必须):[APP API 签名与鉴权](../misc/sign/APP.md)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| - | - | - | - | - |
+| abi | str | 设备 CPU ABI | 不必要 | 如 `arm64-v8a` |
+| appid | str | 客户端类型 | 不必要 | 如 `tv.danmaku.bili` |
+| brand | str | 设备品牌 | 不必要 | 如 `google` |
+| build | int | 当前 APP 版本号 | 必要 | 如 `8000200` |
+| channel | str | APP 分发渠道 | 必要 | 如 `master` |
+| deviceid | str | 设备唯一 ID | 不必要 | 即 XU-Prefixed BUVID,见 [device_identity](../misc/device_identity.md) |
+| env | str | APP 分发环境 | 不必要 | 默认 `prod` |
+| iv | int | 当前 APP innerVer | 不必要 | 如 `8000210` |
+| mobi_app | str | APP mobi_app | 必要 | 如 `android` |
+| model | str | 设备型号 | 不必要 | 如 `Pixel 2 XL` |
+| nt | str | - | 必要 | 默认 `1` |
+| ov | str | 设备 OS 版本 | 必要 | 安卓即 API Level,如 Android 11 为 `30` |
+| platform | str | 设备平台 | 不必要 | 如 `android` |
+| screen | str | 设备屏幕参数 | 不必要 | 如 `2712_1440@537.882_537.882`
+| sn | int | 当前 APP SN | 必要 | 如 `15088473` |
+| vn | str | 当前 APP 版本名称 | 必要 | 如 `8.0.0` |
+
+**标头参数(Headers):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| - | - | - | - | - |
+| app-key | str | APPKey 名称 | 必要 | 大体等同于 [`mobi_app`](../misc/sign/APPKey.md)。特别地:64 位版本粉版客户端应为 `android64` |
+| buvid | str | BUVID | 必要 | XU-Prefixed BUVID,见 [device_identity](../misc/device_identity.md) |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| code | int | 返回值 | 0: 成功 -304: 木有改动 -400: 请求异常 |
+| message | str | 错误信息 | 默认为 `0` |
+| ttl | int | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| title | str | 标题 | |
+| content | str | 内容 | |
+| version | str | 最新版本名称 | |
+| version_code | int | 最新版本号 | 即 `build` |
+| url | str | 下载地址 | |
+| size | int | 大小 | 单位字节 |
+| md5 | str | MD5 值 | |
+| silent | int | 是否静默安装? | |
+| upgrade_type | int | 升级类型? | |
+| cycle | int | 升级周期? | |
+| policy | int | 升级策略? | |
+| policy_url | str | 升级策略链接? | |
+| ptime | int | 发布时间 | |
+
+**示例:**
+
+```shell
+curl -G 'https://app.bilibili.com/x/v2/version/fawkes/upgrade' \
+--url-query 'build=1145141' \
+--url-query 'channel=apt' \
+--url-query 'mobi_app=android' \
+--url-query 'nt=awa' \
+--url-query 'ov=qwq' \
+--url-query 'platform=archlinux' \
+--url-query 'sn=919810' \
+--url-query 'vn=!!!'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "title": "升级提醒",
+ "content": "-修复了一些bug,并吃了一桶冰淇凌~\n-记得检查暑假作业哦!",
+ "version": "8.10.0",
+ "version_code": 8100300,
+ "url": "https://dl.hdslb.com/mobile/pack/android64/15793300/iBiliPlayer-apinkRelease-8.10.0-b15793300.apk",
+ "size": 132432843,
+ "md5": "f196c0ea68ff894dab0cf380cafad802",
+ "silent": 0,
+ "upgrade_type": 1,
+ "cycle": 4,
+ "policy": 0,
+ "policy_url": "",
+ "is_gray": 0,
+ "ptime": 1724207041
+ }
+}
+```
+
+
+
+## 拼接最新版本下载地址
+
+> https://api.bilibili.com/x/web-frontend/getappversion
+
+*请求方法: GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---- | ---- | ---- | ---- | ---- |
+| target | string | 目标平台 | 目测仅 `pc_electron`, 错误的值会导致返回 `HTTP 404` |
+| cdn_url | string | CDN URL | 任意字符串, 默认 `https://dl.hdslb.com/mobile/fixed/bili_win/bili_win-install.exe` |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| code | number | 返回值 | 0: 成功 -1: need target |
+| message | string | 错误消息 | 成功时无此项 |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| cdn_url | string | CDN URL | 内容同请求参数 `cdn_url` |
+| sole_cdn_url | string | 带版本的 CDN URL | `cdn_url + "?v=" + 最新版本` |
+
+**示例:**
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-frontend/getappversion' \
+--url-query 'target=pc_electron' \
+--url-query 'cdn_url=https://dl.hdslb.com/mobile/fixed/bili_win/bili_win-install.exe'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "data": {
+ "cdn_url": "https://dl.hdslb.com/mobile/fixed/bili_win/bili_win-install.exe",
+ "sole_cdn_url": "https://dl.hdslb.com/mobile/fixed/bili_win/bili_win-install.exe?v=1.16.1-2"
+ }
+}
+```
+
+
diff --git a/docs/activity/info.md b/docs/activity/info.md
new file mode 100644
index 0000000..ddf2f68
--- /dev/null
+++ b/docs/activity/info.md
@@ -0,0 +1,93 @@
+# 活动主题信息
+
+## 主题信息
+
+> https://api.bilibili.com/x/activity/subject/info
+
+*请求方式: GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| - | - | - | - | - |
+| sid | num | 活动 id | 必要 | |
+| bvid | str | 来源视频 bvid | 非必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| code | num | 返回值 | 0: 成功 -400: 请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| id | num | 活动 id | |
+| oid | num | 0 | |
+| type | num | 13 | |
+| state | num | 1 | |
+| stime | num | 开始时间 | UNIX 秒级时间戳 |
+| etime | num | 结束时间 | UNIX 秒级时间戳 |
+| ctime | num | 创建时间 | UNIX 秒级时间戳 |
+| mtime | num | 修改时间 | UNIX 秒级时间戳 |
+| name | str | 活动名称 | |
+| act_url | str | 活动链接 | |
+| lstime | num | ? | 作用尚不明确 |
+| letime | num | ? | 作用尚不明确 |
+| cover | str | 封面图片 | |
+| dic | str | 简介 | |
+| h5_cover | str | H5 封面 | |
+| android_url | str | Android 端活动链接 | |
+| ios_url | str | iOS 端活动链接 | |
+| child_sids | str | 子活动 id? | |
+| calendar | str | 日历? | 空 或 `{}`? |
+| lid | num | ? | 仅在传入 bvid 时存在 |
+
+**示例:**
+
+```shell
+curl -G --url 'https://api.bilibili.com/x/activity/subject/info' \
+--url-query 'sid=4017552' \
+--url-query 'bvid=BV1mKY4e8ELy'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "id": 4017552,
+ "oid": 0,
+ "type": 13,
+ "state": 1,
+ "stime": 1720540800,
+ "etime": 1728575999,
+ "ctime": 1720439769,
+ "mtime": 1720591285,
+ "name": "科技猎手2024第2季",
+ "act_url": "https://www.bilibili.com/blackboard/era/kejilieshou2PC.html",
+ "lstime": 1720540800,
+ "letime": 1728575999,
+ "cover": "https://i0.hdslb.com/bfs/activity-plat/static/98bc38873cc71e154019070975cd20a0/fLOEOStVUV.jpg",
+ "dic": "科技猎手召集中!投稿赢奖金>>",
+ "h5_cover": "https://i0.hdslb.com/bfs/activity-plat/static/98bc38873cc71e154019070975cd20a0/PTIFsXkV0o.jpg",
+ "android_url": "https://www.bilibili.com/blackboard/era/kejilieshou2H5.html",
+ "ios_url": "https://www.bilibili.com/blackboard/era/kejilieshou2H5.html",
+ "child_sids": "",
+ "calendar": "",
+ "lid": 294258214
+ }
+}
+```
+
+
diff --git a/docs/activity/list.md b/docs/activity/list.md
new file mode 100644
index 0000000..f187bd5
--- /dev/null
+++ b/docs/activity/list.md
@@ -0,0 +1,213 @@
+# 活动列表
+
+## 获取活动列表
+
+> https://api.bilibili.com/x/activity/page/list
+
+*请求方式: GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| plat | str | 活动平台类型? | 必要 | 可选范围 [1, 3], 以半角逗号分隔, 默认 `1,3` |
+| mold | int | 0 | 非必要 | |
+| http | int | 3 | 非必要 | |
+| pn | int | 目标页码 | 非必要 | 默认为 `1` |
+| ps | int | 每页条数 | 非必要 | 默认为 `15` |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| code | int | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | int | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| list | array | 活动列表 | |
+| num | int | 当前页码 | |
+| size | int | 每页条数 | |
+| total | int | 总条数 | |
+
+`list` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| id | int | 活动 ID | |
+| state | int | 1 | |
+| stime | int | 开始时间 | UNIX 秒级时间戳 |
+| etime | int | 结束时间 | UNIX 秒级时间戳 |
+| ctime | int | 创建时间? | UNIX 秒级时间戳, 可能为 0 |
+| mtime | int | 修改时间? | UNIX 秒级时间戳, 可能为 0 |
+| name | str | 活动名称 | |
+| author | str | 空 ||
+| pc_url | str | 空 ||
+| rank | int | 0 | |
+| h5_url | str | 活动链接 | |
+| pc_cover | str | 空 | |
+| h5_cover | str | 活动封面 | |
+| page_name | str | 页面名称 | |
+| plat | int | 活动平台类型? | 即 URL 中 `plat` 参数 |
+| desc | str | 活动描述 | |
+| click | int | 0 | |
+| type | int | 0 | |
+| mold | int | 0 | |
+| series | int | 0 | |
+| dept | int | 0 | |
+| reply_id | int | 0 | |
+| tp_id | int | 0 | |
+| ptime | int | 0 | |
+| catalog | int | 0 | |
+| creator | str | 空 | |
+| spm_id | str | 空 | |
+
+**示例:**
+
+```shell
+curl -G 'https://api.bilibili.com/x/activity/page/list' \
+--url-query 'plat=1,2,3' \
+--url-query 'ps=4'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "id": 207,
+ "state": 1,
+ "stime": 1723262400,
+ "etime": 1724774399,
+ "ctime": 0,
+ "mtime": 0,
+ "name": "原神fes2024",
+ "author": "",
+ "pc_url": "",
+ "rank": 0,
+ "h5_url": "https://www.bilibili.com/blackboard/era/DK8i0NS7fxwcLBgm.html",
+ "pc_cover": "",
+ "h5_cover": "https://i0.hdslb.com/bfs/activity-plat/static/d32c2bb79f59192cb072d7bf79b61c6d/In2tYOLFTZ.png",
+ "page_name": "原神fes2024",
+ "plat": 2,
+ "desc": "",
+ "click": 0,
+ "type": 0,
+ "mold": 0,
+ "series": 0,
+ "dept": 0,
+ "reply_id": 0,
+ "tp_id": 0,
+ "ptime": 0,
+ "catalog": 0,
+ "creator": "",
+ "spm_id": ""
+ },
+ {
+ "id": 210,
+ "state": 1,
+ "stime": 1723219200,
+ "etime": 1725983999,
+ "ctime": 0,
+ "mtime": 0,
+ "name": "暗区突围端游海外版全员夺金冲榜挑战赛",
+ "author": "",
+ "pc_url": "",
+ "rank": 0,
+ "h5_url": "https://www.bilibili.com/blackboard/era/UP8CZSTfboDVZuGr.html",
+ "pc_cover": "",
+ "h5_cover": "https://i0.hdslb.com/bfs/activity-plat/static/f9a67e268d55d029e6b27d81246fc59a/LPN9dlcRlW.png",
+ "page_name": "暗区突围端游海外版全员夺金冲榜挑战赛",
+ "plat": 2,
+ "desc": "",
+ "click": 0,
+ "type": 0,
+ "mold": 0,
+ "series": 0,
+ "dept": 0,
+ "reply_id": 0,
+ "tp_id": 0,
+ "ptime": 0,
+ "catalog": 0,
+ "creator": "",
+ "spm_id": ""
+ },
+ {
+ "id": 199,
+ "state": 1,
+ "stime": 1723089600,
+ "etime": 1725897599,
+ "ctime": 0,
+ "mtime": 0,
+ "name": "剑与远征:启程公测创作者激励",
+ "author": "",
+ "pc_url": "",
+ "rank": 0,
+ "h5_url": "https://www.bilibili.com/blackboard/era/HkHatvvW9nJZXEMh.html",
+ "pc_cover": "",
+ "h5_cover": "https://i0.hdslb.com/bfs/activity-plat/static/7785e7ecb0434c85530b92e3586f32ff/CgKENr0ftC.jpeg",
+ "page_name": "剑与远征:启程公测创作者激励",
+ "plat": 2,
+ "desc": "",
+ "click": 0,
+ "type": 0,
+ "mold": 0,
+ "series": 0,
+ "dept": 0,
+ "reply_id": 0,
+ "tp_id": 0,
+ "ptime": 0,
+ "catalog": 0,
+ "creator": "",
+ "spm_id": ""
+ },
+ {
+ "id": 203,
+ "state": 1,
+ "stime": 1723089600,
+ "etime": 1724255999,
+ "ctime": 0,
+ "mtime": 0,
+ "name": "王者荣耀新英雄少司缘创作激励",
+ "author": "",
+ "pc_url": "",
+ "rank": 0,
+ "h5_url": "https://www.bilibili.com/blackboard/era/g0gn2j4ZENrCLYLn.html",
+ "pc_cover": "",
+ "h5_cover": "https://i0.hdslb.com/bfs/activity-plat/static/a99ba278036e9fbfa81b9100d13d9e7e/9UHZg6r0Y5.jpg",
+ "page_name": "王者荣耀新英雄少司缘创作激励",
+ "plat": 2,
+ "desc": "",
+ "click": 0,
+ "type": 0,
+ "mold": 0,
+ "series": 0,
+ "dept": 0,
+ "reply_id": 0,
+ "tp_id": 0,
+ "ptime": 0,
+ "catalog": 0,
+ "creator": "",
+ "spm_id": ""
+ }
+ ],
+ "num": 1,
+ "size": 4,
+ "total": 5391
+ }
+}
+```
+
+
diff --git a/album/action.md b/docs/album/action.md
similarity index 90%
rename from album/action.md
rename to docs/album/action.md
index 79d6240..1d42821 100644
--- a/album/action.md
+++ b/docs/album/action.md
@@ -1,14 +1,11 @@
# 相簿操作
-- [点赞相簿](#点赞相簿)
-- [收藏相簿](#收藏相簿)
-- [取消收藏相簿](#取消收藏相簿)
+
+功能已下线
----
+## ~~点赞相簿~~
-## 点赞相簿
-
-> http://api.vc.bilibili.com/link_draw/v2/Vote/operate
+> https://api.vc.bilibili.com/link_draw/v2/Vote/operate
*请求方式:POST*
@@ -44,7 +41,7 @@
点赞相簿`id=99184721`
```shell
-curl 'http://api.vc.bilibili.com/link_draw/v2/Vote/operate' \
+curl 'https://api.vc.bilibili.com/link_draw/v2/Vote/operate' \
--data-urlencode 'doc_id=99184721' \
--data-urlencode 'type=1' \
--data-urlencode 'csrf_token=xxx' \
@@ -67,9 +64,9 @@ curl 'http://api.vc.bilibili.com/link_draw/v2/Vote/operate' \
-## 收藏相簿
+## ~~收藏相簿~~
-> http://api.vc.bilibili.com/user_plus/v1/Fav/add
+> https://api.vc.bilibili.com/user_plus/v1/Fav/add
*请求方式:POST*
@@ -99,7 +96,7 @@ curl 'http://api.vc.bilibili.com/link_draw/v2/Vote/operate' \
收藏相簿`id=99184721`
```shell
-curl 'http:///api.vc.bilibili.com/user_plus/v1/Fav/add' \
+curl 'https://api.vc.bilibili.com/user_plus/v1/Fav/add' \
--data-urlencode 'fav_id=99184721' \
--data-urlencode 'biz_type=2' \
--data-urlencode 'csrf_token=xxx' \
@@ -123,7 +120,7 @@ curl 'http:///api.vc.bilibili.com/user_plus/v1/Fav/add' \
## 取消收藏相簿
-> http://api.vc.bilibili.com/user_plus/v1/Fav/delete
+> https://api.vc.bilibili.com/user_plus/v1/Fav/delete
*请求方式:POST*
@@ -153,7 +150,7 @@ curl 'http:///api.vc.bilibili.com/user_plus/v1/Fav/add' \
取消收藏相簿`id=99184721`
```shell
-curl 'http://api.vc.bilibili.com/user_plus/v1/Fav/delete' \
+curl 'https://api.vc.bilibili.com/user_plus/v1/Fav/delete' \
--data-urlencode 'fav_id=99184721' \
--data-urlencode 'biz_type=2' \
--data-urlencode 'csrf_token=xxx' \
@@ -173,4 +170,5 @@ curl 'http://api.vc.bilibili.com/user_plus/v1/Fav/delete' \
}
```
-
\ No newline at end of file
+
+
diff --git a/album/activity_list.md b/docs/album/activity_list.md
similarity index 96%
rename from album/activity_list.md
rename to docs/album/activity_list.md
index 91c4c07..4c82f37 100644
--- a/album/activity_list.md
+++ b/docs/album/activity_list.md
@@ -1,12 +1,11 @@
# 相簿活动列表
-- [获取相簿热门活动列表](#获取相簿热门活动列表)
-
----
+
+功能已下线
## 获取相簿热门活动列表
-> http://api.vc.bilibili.com/photo_activity/v2/Activity/list
+> https://api.vc.bilibili.com/photo_activity/v2/Activity/list
*请求方式:GET*
@@ -65,7 +64,7 @@
获取`画友`分区,全部类型的5条活动
```shell
-curl -G 'http://api.vc.bilibili.com/photo_activity/v2/Activity/list' \
+curl -G 'https://api.vc.bilibili.com/photo_activity/v2/Activity/list' \
--data-urlencode 'type=0' \
--data-urlencode 'biz=1' \
--data-urlencode 'page_num=0' \
@@ -149,4 +148,5 @@ curl -G 'http://api.vc.bilibili.com/photo_activity/v2/Activity/list' \
}
```
-
\ No newline at end of file
+
+
diff --git a/album/info.md b/docs/album/info.md
similarity index 98%
rename from album/info.md
rename to docs/album/info.md
index ff9c529..5489857 100644
--- a/album/info.md
+++ b/docs/album/info.md
@@ -1,12 +1,11 @@
# 相簿基本信息
-- [获取相簿详细信息](#获取相簿详细信息)
-
----
+
+功能已下线
## 获取相簿详细信息
->http://api.vc.bilibili.com/link_draw/v1/doc/detail
+>https://api.vc.bilibili.com/link_draw/v1/doc/detail
*请求方式:GET*
@@ -143,7 +142,7 @@
查询相簿`id=99184721`的详细信息
```shell
-curl -G 'http://api.vc.bilibili.com/link_draw/v1/doc/detail' \
+curl -G 'https://api.vc.bilibili.com/link_draw/v1/doc/detail' \
--data-urlencode 'doc_id=99184721' \
-b 'SESSDATA=xxx'
```
@@ -246,4 +245,5 @@ curl -G 'http://api.vc.bilibili.com/link_draw/v1/doc/detail' \
}
```
-
\ No newline at end of file
+
+
diff --git a/album/list.md b/docs/album/list.md
similarity index 99%
rename from album/list.md
rename to docs/album/list.md
index 2b61886..44adb6f 100644
--- a/album/list.md
+++ b/docs/album/list.md
@@ -1,16 +1,11 @@
# 相簿列表
-- [获取画友首页列表](#获取画友首页列表)
-- [获取摄影首页列表](#获取摄影首页列表)
-- [获取画友列表](#获取画友列表)
-- [获取摄影列表](#获取摄影列表)
-- [获取指定用户的相簿列表](#获取指定用户的相簿列表)
-
----
+
+功能已下线
## 获取画友首页列表
-> http://api.vc.bilibili.com/link_draw/v2/Doc/index
+> https://api.vc.bilibili.com/link_draw/v2/Doc/index
*请求方式:GET*
@@ -99,7 +94,7 @@
用按热度排序方式获取画友首页列表
```shell
-curl -G 'http://api.vc.bilibili.com/link_draw/v2/Doc/index' \
+curl -G 'https://api.vc.bilibili.com/link_draw/v2/Doc/index' \
--data-urlencode 'type=hot' \
--data-urlencode 'page_num=1' \
--data-urlencode 'page_size=5' \
@@ -275,7 +270,7 @@ curl -G 'http://api.vc.bilibili.com/link_draw/v2/Doc/index' \
## 获取摄影首页列表
-> http://api.vc.bilibili.com/link_draw/v2/Photo/index
+> https://api.vc.bilibili.com/link_draw/v2/Photo/index
*请求方式:GET*
@@ -298,7 +293,7 @@ curl -G 'http://api.vc.bilibili.com/link_draw/v2/Doc/index' \
用推荐方式获取画友首页列表
```shell
-curl -G 'http://api.vc.bilibili.com/link_draw/v2/Photo/index' \
+curl -G 'https://api.vc.bilibili.com/link_draw/v2/Photo/index' \
--data-urlencode 'type=recommend' \
--data-urlencode 'page_num=1' \
--data-urlencode 'page_size=5' \
@@ -667,7 +662,7 @@ curl -G 'http://api.vc.bilibili.com/link_draw/v2/Photo/index' \
## 获取画友列表
-> http://api.vc.bilibili.com/link_draw/v2/Doc/list
+> https://api.vc.bilibili.com/link_draw/v2/Doc/list
*请求方式:GET*
@@ -691,7 +686,7 @@ curl -G 'http://api.vc.bilibili.com/link_draw/v2/Photo/index' \
用按热度排序方式获取`全部`类型的画友列表
```shell
-curl -G 'http://api.vc.bilibili.com/link_draw/v2/Doc/list' \
+curl -G 'https://api.vc.bilibili.com/link_draw/v2/Doc/list' \
--data-urlencode 'category=all' \
--data-urlencode 'type=hot' \
--data-urlencode 'page_num=1' \
@@ -941,7 +936,7 @@ curl -G 'http://api.vc.bilibili.com/link_draw/v2/Doc/list' \
## 获取摄影列表
-> http://api.vc.bilibili.com/link_draw/v2/Photo/list
+> https://api.vc.bilibili.com/link_draw/v2/Photo/list
*请求方式:GET*
@@ -965,7 +960,7 @@ curl -G 'http://api.vc.bilibili.com/link_draw/v2/Doc/list' \
用按热度排序方式获取`Cosplay`类型的摄影列表
```shell
-curl -G 'http://api.vc.bilibili.com/link_draw/v2/Photo/list' \
+curl -G 'https://api.vc.bilibili.com/link_draw/v2/Photo/list' \
--data-urlencode 'category=cos' \
--data-urlencode 'type=hot' \
--data-urlencode 'page_num=1' \
@@ -1329,7 +1324,7 @@ curl -G 'http://api.vc.bilibili.com/link_draw/v2/Photo/list' \
## 获取指定用户的相簿列表
-> http://api.vc.bilibili.com/link_draw/v1/doc/others
+> https://api.vc.bilibili.com/link_draw/v1/doc/others
*请求方式:GET*
@@ -1380,7 +1375,7 @@ curl -G 'http://api.vc.bilibili.com/link_draw/v2/Photo/list' \
获取用户` 1360010 `的所有类型相簿
```shell
-curl -G 'http://api.vc.bilibili.com/link_draw/v1/doc/others' \
+curl -G 'https://api.vc.bilibili.com/link_draw/v1/doc/others' \
--data-urlencode 'biz=0' \
--data-urlencode 'poster_uid=1360010' \
--data-urlencode 'page_num=1' \
@@ -2439,4 +2434,5 @@ curl -G 'http://api.vc.bilibili.com/link_draw/v1/doc/others' \
}
```
-
\ No newline at end of file
+
+
diff --git a/album/recommend_author.md b/docs/album/recommend_author.md
similarity index 92%
rename from album/recommend_author.md
rename to docs/album/recommend_author.md
index 4ed63b5..ba57f07 100644
--- a/album/recommend_author.md
+++ b/docs/album/recommend_author.md
@@ -1,13 +1,11 @@
# 相簿推荐作者
-- [获取摄影推荐作者](#获取摄影推荐作者)
-- [获取画友推荐作者](#获取画友推荐作者)
-
----
+
+功能已下线
## 获取摄影推荐作者
-> http://api.vc.bilibili.com/link_draw/v2/Photo/uper
+> https://api.vc.bilibili.com/link_draw/v2/Photo/uper
*请求方式:GET*
@@ -50,7 +48,7 @@
请求获取摄影推荐作者,数量为5
```shell
-curl -G 'http://api.vc.bilibili.com/link_draw/v2/Photo/uper' \
+curl -G 'https://api.vc.bilibili.com/link_draw/v2/Photo/uper' \
--data-urlencode 'num=5'
```
@@ -101,7 +99,7 @@ curl -G 'http://api.vc.bilibili.com/link_draw/v2/Photo/uper' \
## 获取画友推荐作者
-> http://api.vc.bilibili.com/link_draw/v2/Doc/drawer
+> https://api.vc.bilibili.com/link_draw/v2/Doc/drawer
*请求方式:GET*
@@ -120,7 +118,7 @@ curl -G 'http://api.vc.bilibili.com/link_draw/v2/Photo/uper' \
请求获取画友推荐作者,数量为5
```shell
-curl -G 'http://api.vc.bilibili.com/link_draw/v2/Doc/drawer' \
+curl -G 'https://api.vc.bilibili.com/link_draw/v2/Doc/drawer' \
--data-urlencode 'num=5'
```
@@ -168,4 +166,4 @@ curl -G 'http://api.vc.bilibili.com/link_draw/v2/Doc/drawer' \
```
-
+
diff --git a/article/like_coin_fav.md b/docs/article/action.md
similarity index 88%
rename from article/like_coin_fav.md
rename to docs/article/action.md
index fa8ca0f..c195594 100644
--- a/article/like_coin_fav.md
+++ b/docs/article/action.md
@@ -1,16 +1,10 @@
-# 专栏投币&点赞&收藏
-
-- [点赞文章](#点赞文章)
-- [投币文章](#投币文章)
-- [收藏文章](#收藏文章)
-
----
+# 专栏点赞&投币&收藏
## 点赞文章
-
+
-> http://api.bilibili.com/x/article/like
+> https://api.bilibili.com/x/article/like
*请求方式:POST*
@@ -39,7 +33,7 @@
为文章`cv5806746`点赞
```shell
-curl 'http://api.bilibili.com/x/article/like' \
+curl 'https://api.bilibili.com/x/article/like' \
--data-urlencode 'id=5806746' \
--data-urlencode 'type=1' \
--data-urlencode 'csrf=xxx' \
@@ -61,9 +55,9 @@ curl 'http://api.bilibili.com/x/article/like' \
## 投币文章
-
+
-> http://api.bilibili.com/x/web-interface/coin/add
+> https://api.bilibili.com/x/web-interface/coin/add
*请求方式:POST*
@@ -74,6 +68,7 @@ curl 'http://api.bilibili.com/x/article/like' \
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| -------- | ---- | ------------------- | ------ | ------- |
| aid | num | 文章cvid | 必要 | |
+| upid | num | 文章作者mid | 必要 | |
| multiply | num | 投币数量 | 必要 | 上限为2 |
| avtype | num | 2 | 必要 | 必须为2 |
| csrf | str | CSRF Token(位于cookie) | 必要 | |
@@ -100,8 +95,9 @@ data 对象:
为文章`cv5806746`投币1枚
```shell
-curl 'http://api.bilibili.com/x/web-interface/coin/add' \
+curl 'https://api.bilibili.com/x/web-interface/coin/add' \
--data-urlencode 'aid=5806746' \
+--data-urlencode 'upid=486980924' \
--data-urlencode 'multiply=1' \
--data-urlencode 'avtype=2' \
--data-urlencode 'csrf=xxx' \
@@ -126,9 +122,9 @@ curl 'http://api.bilibili.com/x/web-interface/coin/add' \
## 收藏文章
-
+
->http://api.bilibili.com/x/article/favorites/add
+>https://api.bilibili.com/x/article/favorites/add
*请求方式:POST*
@@ -156,7 +152,7 @@ curl 'http://api.bilibili.com/x/web-interface/coin/add' \
收藏文章`cv5806746`
```shell
-curl 'http://api.bilibili.com/x/article/favorites/add' \
+curl 'https://api.bilibili.com/x/article/favorites/add' \
--data-urlencode 'id=5806746' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
diff --git a/article/articles.md b/docs/article/articles.md
similarity index 98%
rename from article/articles.md
rename to docs/article/articles.md
index b1a80cb..0890ca9 100644
--- a/article/articles.md
+++ b/docs/article/articles.md
@@ -1,12 +1,8 @@
# 文集基本信息
-- [获取文集基本信息](#获取文集基本信息)
-
----
-
## 获取文集基本信息
-> http://api.bilibili.com/x/article/list/web/articles
+> https://api.bilibili.com/x/article/list/web/articles
*请求方式:GET*
@@ -111,7 +107,7 @@
查询文集`rl207146`的基本信息
```shell
-curl -G 'http://api.bilibili.com/x/article/list/web/articles' \
+curl -G 'https://api.bilibili.com/x/article/list/web/articles' \
--data-urlencode 'id=207146' \
-b 'SESSDATA=xxx'
```
diff --git a/docs/article/category.md b/docs/article/category.md
new file mode 100644
index 0000000..833fa40
--- /dev/null
+++ b/docs/article/category.md
@@ -0,0 +1,81 @@
+# 专栏分类
+
+## 游戏
+
+| id | parent_id | name |
+|-----|-----------|------|
+| 1 | 0 | 游戏 |
+| 6 | 1 | 单机游戏 |
+| 7 | 1 | 电子竞技 |
+| 8 | 1 | 手机游戏 |
+| 9 | 1 | 网络游戏 |
+| 10 | 1 | 桌游棋牌 |
+
+## 动画
+
+| id | parent_id | name |
+|-----|-----------|------|
+| 2 | 0 | 动画 |
+| 4 | 2 | 动漫杂谈 |
+| 5 | 2 | 动漫资讯 |
+| 31 | 2 | 动画技术 |
+
+## 生活
+
+| id | parent_id | name |
+|-----|-----------|------|
+| 3 | 0 | 生活 |
+| 13 | 3 | 美食 |
+| 14 | 3 | 时尚 |
+| 15 | 3 | 日常 |
+| 21 | 3 | 萌宠 |
+| 22 | 3 | 运动 |
+
+## 轻小说
+
+| id | parent_id | name |
+|-----|-----------|------|
+| 16 | 0 | 轻小说 |
+| 18 | 16 | 原创连载 |
+| 19 | 16 | 同人连载 |
+| 20 | 16 | 小说杂谈 |
+| 32 | 16 | 短篇小说 |
+
+## 科技
+
+| id | parent_id | name |
+|-----|-----------|------|
+| 17 | 0 | 科技 |
+| 25 | 17 | 人文历史 |
+| 26 | 17 | 数码 |
+| 27 | 17 | 汽车 |
+| 33 | 17 | 自然 |
+| 34 | 17 | 学习 |
+
+## 影视
+
+| id | parent_id | name |
+|-----|-----------|------|
+| 28 | 0 | 影视 |
+| 12 | 28 | 电影 |
+| 35 | 28 | 电视剧 |
+| 36 | 28 | 纪录片 |
+| 37 | 28 | 综艺 |
+
+## 兴趣
+
+| id | parent_id | name |
+|-----|-----------|------|
+| 29 | 0 | 兴趣 |
+| 11 | 29 | 模型手办 |
+| 23 | 29 | 绘画 |
+| 24 | 29 | 手工 |
+| 38 | 29 | 摄影 |
+| 39 | 29 | 音乐舞蹈 |
+
+## 笔记
+
+| id | parent_id | name |
+|-----|-----------|------|
+| 41 | 0 | 笔记 |
+| 42 | 41 | 全部笔记 |
diff --git a/docs/article/delete.md b/docs/article/delete.md
new file mode 100644
index 0000000..22e7a6e
--- /dev/null
+++ b/docs/article/delete.md
@@ -0,0 +1,46 @@
+# 删除专栏
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------------------ | ------ | ---- |
+| aid | num | 文章cvid | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 -404:无此项 37104:无权限操作他人专栏 |
+| message | str | 错误信息 | 默认为`0` |
+| ttl | num | 1 | |
+
+**示例:**
+
+```shell
+curl 'https://member.bilibili.com/x/web/article/delete' \
+ --data-urlencode 'aid=114514' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
diff --git a/article/info.md b/docs/article/info.md
similarity index 66%
rename from article/info.md
rename to docs/article/info.md
index b6bbbea..7e986f0 100644
--- a/article/info.md
+++ b/docs/article/info.md
@@ -1,12 +1,8 @@
# 专栏基本信息
-- [获取专栏文章基本信息](#获取专栏文章基本信息)
-
----
-
## 获取专栏文章基本信息
-> http://api.bilibili.com/x/article/viewinfo
+> https://api.bilibili.com/x/article/viewinfo
*请求方式:GET*
@@ -51,7 +47,9 @@
| in_list | bool | 是否收于文集 | false:否 true:是 |
| pre | num | 上一篇文章cvid | 无为0 |
| next | num | 下一篇文章cvid | 无为0 |
-| share_channels | array | 分享方式列表 | |
+| share_channels | array | 分享方式列表 | |
+| type | num | 文章类别 | 0:文章 2:笔记 |
+
`stats`对象:
@@ -101,7 +99,7 @@
查询文章`cv2`的基本信息
```shell
-curl -G 'http://api.bilibili.com/x/article/viewinfo' \
+curl -G 'https://api.bilibili.com/x/article/viewinfo' \
--data-urlencode 'id=2' \
-b 'SESSDATA=xxx'
```
@@ -111,59 +109,73 @@ curl -G 'http://api.bilibili.com/x/article/viewinfo' \
```json
{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "like": 1,
- "attention": true,
- "favorite": false,
- "coin": 0,
- "stats": {
- "view": 317712,
- "favorite": 3249,
- "like": 10176,
- "dislike": 0,
- "reply": 1333,
- "share": 302,
- "coin": 2002,
- "dynamic": 28
- },
- "title": "专栏行为准则 ",
- "banner_url": "https://i0.hdslb.com/bfs/article/131b1d41b857d5308f5bff36591d117bddc48d96.jpg@90p.webp",
- "mid": 144900660,
- "author_name": "专栏小天使",
- "is_author": true,
- "image_urls": ["https://i0.hdslb.com/bfs/article/0a72422ce8e77d8512f010d93b1b7f9bc4e64e52.jpg"],
- "origin_image_urls": ["https://i0.hdslb.com/bfs/article/131b1d41b857d5308f5bff36591d117bddc48d96.jpg"],
- "shareable": true,
- "show_later_watch": true,
- "show_small_window": true,
- "in_list": false,
- "pre": 115914,
- "next": 38575,
- "share_channels": [{
- "name": "QQ",
- "picture": "https://i0.hdslb.com/bfs/album/114ccfb3a999df9c4d11f274c8c61a804c8f8803.png",
- "share_channel": "QQ"
- }, {
- "name": "QQ空间",
- "picture": "https://i0.hdslb.com/bfs/album/30e9608bbce725bca45b5910866f60ab4d5e18b3.png",
- "share_channel": "QZONE"
- }, {
- "name": "微信",
- "picture": "https://i0.hdslb.com/bfs/album/658af3c22431cd78bb7c50be3394f7c032eba12c.png",
- "share_channel": "WEIXIN"
- }, {
- "name": "朋友圈",
- "picture": "https://i0.hdslb.com/bfs/album/c1ebcec8c5302f29f792d15f04e0d6dcef53ec27.png",
- "share_channel": "WEIXIN_MONMENT"
- }, {
- "name": "微博",
- "picture": "https://i0.hdslb.com/bfs/album/3707fc23f7d3e24022712320284b0de9aa78c87d.png",
- "share_channel": "SINA"
- }]
- }
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "like": 0,
+ "attention": false,
+ "favorite": false,
+ "coin": 0,
+ "stats": {
+ "view": 1072619,
+ "favorite": 5481,
+ "like": 16465,
+ "dislike": 0,
+ "reply": 1865,
+ "share": 351,
+ "coin": 3436,
+ "dynamic": 37
+ },
+ "title": "专栏行为准则 ",
+ "banner_url": "https://i0.hdslb.com/bfs/article/131b1d41b857d5308f5bff36591d117bddc48d96.jpg@90p.webp",
+ "mid": 144900660,
+ "author_name": "专栏小天使",
+ "is_author": true,
+ "image_urls": [
+ "https://i0.hdslb.com/bfs/article/0a72422ce8e77d8512f010d93b1b7f9bc4e64e52.jpg"
+ ],
+ "origin_image_urls": [
+ "https://i0.hdslb.com/bfs/article/131b1d41b857d5308f5bff36591d117bddc48d96.jpg"
+ ],
+ "shareable": true,
+ "show_later_watch": true,
+ "show_small_window": true,
+ "in_list": false,
+ "pre": 115914,
+ "next": 38575,
+ "share_channels": [
+ {
+ "name": "QQ",
+ "picture": "https://i0.hdslb.com/bfs/album/114ccfb3a999df9c4d11f274c8c61a804c8f8803.png",
+ "share_channel": "QQ"
+ },
+ {
+ "name": "QQ空间",
+ "picture": "https://i0.hdslb.com/bfs/album/30e9608bbce725bca45b5910866f60ab4d5e18b3.png",
+ "share_channel": "QZONE"
+ },
+ {
+ "name": "微信",
+ "picture": "https://i0.hdslb.com/bfs/album/658af3c22431cd78bb7c50be3394f7c032eba12c.png",
+ "share_channel": "WEIXIN"
+ },
+ {
+ "name": "朋友圈",
+ "picture": "https://i0.hdslb.com/bfs/album/c1ebcec8c5302f29f792d15f04e0d6dcef53ec27.png",
+ "share_channel": "WEIXIN_MONMENT"
+ },
+ {
+ "name": "微博",
+ "picture": "https://i0.hdslb.com/bfs/album/3707fc23f7d3e24022712320284b0de9aa78c87d.png",
+ "share_channel": "SINA"
+ }
+ ],
+ "type": 0,
+ "video_url": "",
+ "location": "",
+ "disable_share": false
+ }
}
```
diff --git a/audio/coin&fav.md b/docs/audio/action.md
similarity index 57%
rename from audio/coin&fav.md
rename to docs/audio/action.md
index 895fb54..8199f05 100644
--- a/audio/coin&fav.md
+++ b/docs/audio/action.md
@@ -1,13 +1,8 @@
# 音频投币&收藏
-- [查询音频收藏状态](#查询音频收藏状态)
-- [查询音频投币数](#查询音频投币数)
-
----
-
## 查询音频收藏状态
-> http://www.bilibili.com/audio/music-service-c/web/collections/songs-coll
+> https://www.bilibili.com/audio/music-service-c/web/collections/songs-coll
*请求方式:GET*
@@ -36,7 +31,7 @@
查询音频`au13598`的收藏状态
```shell
-curl -G 'http://www.bilibili.com/audio/music-service-c/web/collections/songs-coll' \
+curl -G 'https://www.bilibili.com/audio/music-service-c/web/collections/songs-coll' \
--data-urlencode 'sid=13598' \
-b 'SESSDATA=xxx;DedeUserID=1;'
```
@@ -56,7 +51,7 @@ curl -G 'http://www.bilibili.com/audio/music-service-c/web/collections/songs-col
## 查询音频投币数
-> http://www.bilibili.com/audio/music-service-c/web/coin/audio
+> https://www.bilibili.com/audio/music-service-c/web/coin/audio
*请求方式:GET*
@@ -85,7 +80,7 @@ curl -G 'http://www.bilibili.com/audio/music-service-c/web/collections/songs-col
查询音频`au13598`的投币数
```shell
-curl -G 'http://www.bilibili.com/audio/music-service-c/web/coin/audio' \
+curl -G 'https://www.bilibili.com/audio/music-service-c/web/coin/audio' \
--data-urlencode 'sid=15664' \
-b 'SESSDATA=xxx;DedeUserID=1;'
```
@@ -102,3 +97,52 @@ curl -G 'http://www.bilibili.com/audio/music-service-c/web/coin/audio' \
```
+
+## 投币音频
+
+> https://www.bilibili.com/audio/music-service-c/web/coin/add
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ------------------------- | ------ | ---- |
+| sid | num | 音频 auid | 必要 | |
+| multiply | num | 投币数量(最大为 2) | 必要 | |
+| csrf | str | CSRF Token(位于 cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 72000000:参数错误 72010002:账号未登陆 7201006:该音频不存在或已被下架 |
+| msg | str | 错误信息 | 默认为 0 |
+| data | str | 当前投币数量 | 0 为未投币,上限为 2 |
+
+**示例:**
+
+为音频`au13598`投币
+
+```shell
+curl -G 'https://www.bilibili.com/audio/music-service-c/web/coin/add' \
+--data-urlencode 'sid=15664' \
+-b 'SESSDATA=xxx;DedeUserID=1;'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "data": "1"
+}
+```
+
+
diff --git a/audio/info.md b/docs/audio/info.md
similarity index 95%
rename from audio/info.md
rename to docs/audio/info.md
index 17c8b9e..2b296ff 100644
--- a/audio/info.md
+++ b/docs/audio/info.md
@@ -1,15 +1,8 @@
# 歌曲基本信息
-- [查询歌曲基本信息](#查询歌曲基本信息)
-- [查询歌曲TAG](#查询歌曲TAG)
-- [查询歌曲创作成员列表](#查询歌曲创作成员列表)
-- [获取歌曲歌词](#获取歌曲歌词)
-
----
-
## 查询歌曲基本信息
-> http://www.bilibili.com/audio/music-service-c/web/song/info
+> https://www.bilibili.com/audio/music-service-c/web/song/info
*请求方式:GET*
@@ -93,7 +86,7 @@
查询音频`au13598`的基本信息
```shell
-curl -G 'http://www.bilibili.com/audio/music-service-c/web/song/info' \
+curl -G 'https://www.bilibili.com/audio/music-service-c/web/song/info' \
--data-urlencode 'sid=13598' \
-b 'SESSDATA=xxx'
```
@@ -152,7 +145,7 @@ curl -G 'http://www.bilibili.com/audio/music-service-c/web/song/info' \
## 查询歌曲TAG
-> http://www.bilibili.com/audio/music-service-c/web/tag/song
+> https://www.bilibili.com/audio/music-service-c/web/tag/song
*请求方式:GET*
@@ -194,7 +187,7 @@ curl -G 'http://www.bilibili.com/audio/music-service-c/web/song/info' \
查询音频`au15664`的TAG
```shell
-curl -G 'http://www.bilibili.com/audio/music-service-c/web/tag/song' \
+curl -G 'https://www.bilibili.com/audio/music-service-c/web/tag/song' \
--data-urlencode 'sid=15664'
```
@@ -250,7 +243,7 @@ curl -G 'http://www.bilibili.com/audio/music-service-c/web/tag/song' \
## 查询歌曲创作成员列表
-> http://www.bilibili.com/audio/music-service-c/web/member/song
+> https://www.bilibili.com/audio/music-service-c/web/member/song
*请求方式:GET*
@@ -306,7 +299,7 @@ curl -G 'http://www.bilibili.com/audio/music-service-c/web/tag/song' \
查询音频`au815861`的创作成员信息
```shell
-curl -G 'http://www.bilibili.com/audio/music-service-c/web/member/song' \
+curl -G 'https://www.bilibili.com/audio/music-service-c/web/member/song' \
--data-urlencode 'sid=815861'
```
@@ -386,7 +379,7 @@ curl -G 'http://www.bilibili.com/audio/music-service-c/web/member/song' \
## 获取歌曲歌词
-> http://www.bilibili.com/audio/music-service-c/web/song/lyric
+> https://www.bilibili.com/audio/music-service-c/web/song/lyric
*请求方式:GET*
@@ -413,7 +406,7 @@ curl -G 'http://www.bilibili.com/audio/music-service-c/web/member/song' \
获取音频`au15664`的歌词信息
```shell
-curl -G 'http://www.bilibili.com/audio/music-service-c/web/song/lyric' \
+curl -G 'https://www.bilibili.com/audio/music-service-c/web/song/lyric' \
--data-urlencode 'sid=15664' \
-b 'SESSDATA=xxx'
```
diff --git a/docs/audio/music_list.md b/docs/audio/music_list.md
new file mode 100644
index 0000000..8e8dff0
--- /dev/null
+++ b/docs/audio/music_list.md
@@ -0,0 +1,782 @@
+# 歌单&音频收藏夹详细信息
+
+## 查询自己创建的歌单
+
+> https://www.bilibili.com/audio/music-service-c/web/collections/list
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:Cookie中`DedeUserID`存在且不为0
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| pn | num | 页码 | 必要 | |
+| ps | num | 每页项数 | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ----------------------------- | -------- | ----------------------------------------------------- |
+| code | num | 返回值 | 0:成功 72000000:参数错误 72010002:未登录 |
+| msg | str | 错误信息 | 默认为success |
+| data | 正确时:obj 错误时:null | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ------ | ------------ | ---- |
+| curPage | num | 当前页码 | |
+| pageCount | num | 总计页数 | |
+| totalSize | num | 总计收藏夹数 | |
+| pageSize | num | 当前页面项数 | |
+| data | array | 歌单列表 | |
+
+`data`中的`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------------- | ---- |
+| 0 | obj | 音频收藏夹mlid1 | |
+| n | obj | 音频收藏夹mlid(n+1) | |
+| …… | obj | …… | …… |
+
+`data`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ------ | ------------------------ | -------------------------------- |
+| id | num | 音频收藏夹mlid | |
+| uid | num | 创建用户mid | |
+| uname | str | 创建用户昵称 | |
+| title | str | 歌单标题 | |
+| type | num | 收藏夹属性 | 0:普通收藏夹 1:默认收藏夹 |
+| published | num | 是否公开 | 0:不公开 1:公开 |
+| cover | str | 歌单封面图片url | |
+| ctime | num | 歌单创建时间 | 时间戳 |
+| song | num | 歌单中的音乐数量 | |
+| desc | str | 歌单备注信息 | |
+| sids | array | 歌单中的音乐 | |
+| menuId | num | 音频收藏夹对应的歌单amid | |
+| statistic | obj | 歌单状态数信息 | |
+
+`data`中的`sids`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------------- | ---------------- |
+| 0 | num | 收藏的音频auid1 | |
+| n | num | 收藏的音频auid(n+1) | 按照歌单顺序排列 |
+| …… | num | …… | …… |
+
+`data`中的`statistic`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ------------------------ | ---- |
+| sid | num | 音频收藏夹对应的歌单amid | |
+| play | num | 播放数 | |
+| collect | num | 收藏数 | |
+| comment | null | 评论数 | |
+| share | num | 分享数 | |
+
+**示例:**
+
+```shell
+curl -G 'https://www.bilibili.com/audio/music-service-c/web/collections/list' \
+--data-urlencode 'ps=2' \
+--data-urlencode 'pn=1' \
+-b 'SESSDATA=xxx;DedeUserID=1;'
+```
+
+共计创建了两个歌单,如下
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "success",
+ "data": {
+ "curPage": 1,
+ "pageCount": 1,
+ "totalSize": 2,
+ "pageSize": 2,
+ "data": [
+ {
+ "id": 15967839,
+ "uid": 293793435,
+ "uname": "社会易姐QwQ",
+ "title": "默认歌单",
+ "type": 1,
+ "published": 1,
+ "cover": "http://i0.hdslb.com/bfs/music/1e079693701d2f525850c288fcc48fa4259a73f6.jpg",
+ "ctime": 1519295502,
+ "song": 13,
+ "desc": "",
+ "sids": [
+ 11673,
+ 276404,
+ 15664,
+ 737904,
+ 108588,
+ 1286999,
+ 658085,
+ 682118,
+ 736952,
+ 48716,
+ 15711,
+ 13598,
+ 57744
+ ],
+ "menuId": 15958713,
+ "statistic": {
+ "sid": 15958713,
+ "play": 0,
+ "collect": 0,
+ "comment": null,
+ "share": 0
+ }
+ },
+ {
+ "id": 30894022,
+ "uid": 293793435,
+ "uname": "社会易姐QwQ",
+ "title": "test",
+ "type": 0,
+ "published": 1,
+ "cover": "",
+ "ctime": 1590154346,
+ "song": 0,
+ "desc": "test1",
+ "sids": [],
+ "menuId": 30866686,
+ "statistic": {
+ "sid": 30866686,
+ "play": 0,
+ "collect": 0,
+ "comment": 0,
+ "share": 0
+ }
+ }
+ ]
+ }
+}
+```
+
+
+
+## 查询音频收藏夹(默认歌单)信息
+
+> https://www.bilibili.com/audio/music-service-c/web/collections/info
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:Cookie中`DedeUserID`存在且不为0
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------ | ------ | ------------------ |
+| sid | num | 音频收藏夹mlid | 必要 | 必须为默认收藏夹mlid |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ----------------------------- | -------- | ----------------------------------------------------- |
+| code | num | 返回值 | 0:成功 72000000:参数错误 72010002:未登录 |
+| msg | str | 错误信息 | 默认为success |
+| data | 正确时:obj 错误时:null | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ------ | ------------------------ | ---------------------- |
+| id | num | 音频收藏夹mlid | |
+| uid | num | 创建用户mid | |
+| uname | str | 创建用户昵称 | |
+| title | str | 默认歌单 | 恒为`默认歌单` |
+| type | num | 1 | 恒为`1` |
+| published | num | 是否公开 | 0:不公开 1:公开 |
+| cover | str | 歌单封面图片url | |
+| ctime | num | 歌单创建时间 | 时间戳 |
+| song | num | 歌单中的音乐数量 | |
+| desc | str | 空 | 恒为空 |
+| sids | array | 歌单中的音乐 | |
+| menuId | num | 音频收藏夹对应的歌单amid | 与普通歌单不同通用 |
+| statistic | obj | 歌单状态数信息 | |
+
+`data`中的`sids`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------------- | ---------------- |
+| 0 | num | 收藏的音频auid1 | |
+| n | num | 收藏的音频auid(n+1) | 按照歌单顺序排列 |
+| …… | num | …… | …… |
+
+`data`中的`statistic`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ------------------------ | ---- |
+| sid | num | 音频收藏夹对应的歌单amid | |
+| play | num | 0 | |
+| collect | num | 0 | |
+| comment | null | - | |
+| share | num | 0 | |
+
+**示例:**
+
+查询我的默认歌单,id为` 15967839 `
+
+```shell
+curl -G 'https://www.bilibili.com/audio/music-service-c/web/collections/info' \
+--data-urlencode 'sid=15967839 ' \
+-b 'SESSDATA=xxx;DedeUserID=1;'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "success",
+ "data": {
+ "id": 15967839,
+ "uid": 293793435,
+ "uname": "社会易姐QwQ",
+ "title": "默认歌单",
+ "type": 1,
+ "published": 1,
+ "cover": "http://i0.hdslb.com/bfs/music/1e079693701d2f525850c288fcc48fa4259a73f6.jpg",
+ "ctime": 1519295502,
+ "song": 13,
+ "desc": "",
+ "sids": [
+ 11673,
+ 276404,
+ 15664,
+ 737904,
+ 108588,
+ 1286999,
+ 658085,
+ 682118,
+ 736952,
+ 48716,
+ 15711,
+ 13598,
+ 57744
+ ],
+ "menuId": 15958713,
+ "statistic": {
+ "sid": 15958713,
+ "play": 0,
+ "collect": 0,
+ "comment": null,
+ "share": 0
+ }
+ }
+}
+```
+
+
+
+
+## 查询热门歌单
+
+> https://www.bilibili.com/audio/music-service-c/web/menu/hit
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --- | --- | ---- | --- | --- |
+| pn | num | 页码 | 必要 | |
+| ps | num | 每页项数 | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | --------------------- | ---- | ----------------------------------------- |
+| code | num | 返回值 | 0:成功 72000000:参数错误 72010002:未登录 |
+| msg | str | 错误信息 | 默认为success |
+| data | 正确时:obj 错误时:null | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ----- | ------ | --- |
+| curPage | num | 当前页码 | |
+| pageCount | num | 总计页数 | |
+| totalSize | num | 总计收藏夹数 | |
+| pageSize | num | 当前页面项数 | |
+| data | array | 歌单列表 | |
+
+`data`中的`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| --- | --- | -------------- | --- |
+| 0 | obj | 音频收藏夹mlid1 | |
+| n | obj | 音频收藏夹mlid(n+1) | |
+| …… | obj | …… | …… |
+
+`data`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | --- | -------------- | ----------------------------- |
+| menuId | num | 音频收藏夹对应的歌单amid | |
+| uid | num | 创建用户mid | |
+| uname | str | 创建用户昵称 | |
+| title | str | 歌单标题 | |
+| cover | str | 歌单封面图片url | |
+| intro | str | 歌单介绍 | |
+| type | num | 歌单属性 | 1:普通歌单 2:置顶歌单 5:PGC歌单 |
+| off | num | 歌单是否公开 | 0:公开 1:私密 |
+| ctime | num | 歌单创建时间 | 时间戳 |
+| curtime | num | 当前时间 | 时间戳 |
+| statistic | obj | 歌单状态数信息 | |
+| snum | num | 歌单包含歌曲个数 | |
+
+`data`中的`statistic`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | --- | -------------- | --- |
+| sid | num | 音频收藏夹对应的歌单amid | |
+| play | num | 播放数 | |
+| collect | num | 收藏数 | |
+| comment | num | 评论数 | |
+| share | num | 分享数 | |
+
+**示例:**
+
+```shell
+curl -G 'https://www.bilibili.com/audio/music-service-c/web/menu/hit' \
+
+--data-urlencode 'ps=1' \
+
+--data-urlencode 'pn=6'
+```
+
+使用参数:`ps=1&qn=2`
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "success",
+ "data": {
+ "curPage": 1,
+ "pageCount": 1,
+ "totalSize": 11,
+ "pageSize": 3,
+ "data": [{
+ "menuId": 10624,
+ "uid": 32708543,
+ "uname": "大家的音乐姬",
+ "title": "新曲推荐",
+ "cover": "http://i0.hdslb.com/bfs/music/a32c1ed4f6ec3f74f8240f4486a750dda3a509e5.jpg",
+ "intro": "每天11:00更新,为你推送最新音乐",
+ "type": 2,
+ "off": 0,
+ "ctime": 1501209433,
+ "curtime": 1655712354,
+ "statistic": {
+ "sid": 10624,
+ "play": 2366255,
+ "collect": 20565,
+ "comment": 1104,
+ "share": 622
+ },
+ "snum": 16,
+ "attr": 0,
+ "isDefault": 0,
+ "collectionId": 0
+ }, {
+ "menuId": 125312,
+ "uid": 32708543,
+ "uname": "大家的音乐姬",
+ "title": "丧甜可口?你意想不到的软萌电音",
+ "cover": "http://i0.hdslb.com/bfs/music/04f6c29ed094368253bc05fecb7bf990cee2d3a3.jpg",
+ "intro": "这个化学反应是怦然心动?",
+ "type": 1,
+ "off": 0,
+ "ctime": 1533298738,
+ "curtime": 1655712354,
+ "statistic": {
+ "sid": 125312,
+ "play": 298018,
+ "collect": 9928,
+ "comment": 89,
+ "share": 239
+ },
+ "snum": 19,
+ "attr": 0,
+ "isDefault": 0,
+ "collectionId": 0
+ }, {
+ "menuId": 26241,
+ "uid": 32708543,
+ "uname": "大家的音乐姬",
+ "title": "那些听了会泪目的动漫歌曲",
+ "cover": "http://i0.hdslb.com/bfs/music/006832318fc85fdf287667d51d83dba3b78be808.jpg",
+ "intro": "那些年陪伴我们的动漫歌曲,你还记得吗?\n",
+ "type": 1,
+ "off": 0,
+ "ctime": 1509608572,
+ "curtime": 1655712354,
+ "statistic": {
+ "sid": 26241,
+ "play": 370120,
+ "collect": 8390,
+ "comment": 110,
+ "share": 131
+ },
+ "snum": 12,
+ "attr": 0,
+ "isDefault": 0,
+ "collectionId": 0
+ }]
+ }
+}
+```
+
+
+
+## 查询热门榜单
+
+> https://www.bilibili.com/audio/music-service-c/web/menu/rank
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --- | --- | ---- | --- | --- |
+| pn | num | 页码 | 必要 | |
+| ps | num | 每页项数 | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | --------------------- | ---- | ----------------------------------------- |
+| code | num | 返回值 | 0:成功 72000000:参数错误 72010002:未登录 |
+| msg | str | 错误信息 | 默认为success |
+| data | 正确时:obj 错误时:null | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ----- | ------ | --- |
+| curPage | num | 当前页码 | |
+| pageCount | num | 总计页数 | |
+| totalSize | num | 总计收藏夹数 | |
+| pageSize | num | 当前页面项数 | |
+| data | array | 歌单列表 | |
+
+`data`中的`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| --- | --- | -------------- | --- |
+| 0 | obj | 音频收藏夹mlid1 | |
+| n | obj | 音频收藏夹mlid(n+1) | |
+| …… | obj | …… | …… |
+
+`data`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ----- | -------------- | ----------------------------- |
+| menuId | num | 音频收藏夹对应的歌单amid | |
+| uid | num | 创建用户mid | |
+| uname | str | 创建用户昵称 | |
+| title | str | 歌单标题 | |
+| cover | str | 歌单封面图片url | |
+| intro | str | 歌单介绍 | |
+| type | num | 歌单属性 | 1:普通歌单 2:置顶歌单 5:PGC歌单 |
+| off | num | 歌单是否公开 | 0:公开 1:私密 |
+| ctime | num | 歌单创建时间 | 时间戳 |
+| curtime | num | 当前时间 | 时间戳 |
+| statistic | obj | 歌单状态数信息 | |
+| snum | num | 歌单包含歌曲个数 | |
+| audios | array | 歌单中的音乐信息(部分) | |
+
+`data`数组中的`statistic`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | --- | -------------- | --- |
+| sid | num | 音频收藏夹对应的歌单amid | |
+| play | num | 收藏数 | |
+| collect | num | 点赞数 | |
+| comment | num | 评论数 | |
+| share | num | 分享数 | |
+
+`data`数组中的`audios`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| --- | --- | ------- | --- |
+| 0 | obj | 音频1 | |
+| n | obj | 音频(n+1) | |
+| …… | obj | …… | …… |
+
+`audios`数组中的`audios`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | --- | ---- | ------- |
+| id | num | 音频id | |
+| title | str | 音频标题 | |
+| duration | num | 音频时长 | 单位:秒(s) |
+
+
+
+**示例:**
+
+```shell
+curl -G 'https://www.bilibili.com/audio/music-service-c/web/menu/rank' \
+
+--data-urlencode 'ps=1' \
+
+--data-urlencode 'pn=6'
+```
+
+使用参数:`ps=1&qn=6`
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "success",
+ "data": {
+ "curPage": 1,
+ "pageCount": 2,
+ "totalSize": 12,
+ "pageSize": 6,
+ "data": [{
+ "menuId": 10624,
+ "uid": 32708543,
+ "uname": "大家的音乐姬",
+ "title": "新曲推荐",
+ "cover": "http://i0.hdslb.com/bfs/music/a32c1ed4f6ec3f74f8240f4486a750dda3a509e5.jpg",
+ "intro": "每天11:00更新,为你推送最新音乐",
+ "type": 2,
+ "off": 0,
+ "ctime": 1501209433,
+ "curtime": 1655713346,
+ "statistic": {
+ "sid": 10624,
+ "play": 2366255,
+ "collect": 20565,
+ "comment": 1104,
+ "share": 622
+ },
+ "snum": 16,
+ "attr": 0,
+ "isDefault": 0,
+ "collectionId": 0,
+ "audios": [{
+ "id": 1572281,
+ "title": "【Mitchie M】Nechusho No!No! (feat. 初音未来 & MEIKO)",
+ "duration": 112
+ }, {
+ "id": 1551077,
+ "title": "【洛天依原创】双星伴生",
+ "duration": 197
+ }, {
+ "id": 1544428,
+ "title": "【小柔】寄り酔い(cover)",
+ "duration": 216
+ }]
+ }, {
+ "menuId": 10627,
+ "uid": 32708543,
+ "uname": "大家的音乐姬",
+ "title": "热歌榜(每日11:00更新)",
+ "cover": "http://i0.hdslb.com/bfs/music/bc735b32ab123f7ddc602b9194defae2cd66062f.jpg",
+ "intro": "每日上午11:00更新,精选三日内热门投稿作品。",
+ "type": 2,
+ "off": 0,
+ "ctime": 1501211353,
+ "curtime": 1655713346,
+ "statistic": {
+ "sid": 10627,
+ "play": 2289612,
+ "collect": 11437,
+ "comment": 434,
+ "share": 223
+ },
+ "snum": 20,
+ "attr": 0,
+ "isDefault": 0,
+ "collectionId": 0,
+ "audios": [{
+ "id": 1955567,
+ "title": "山海(原唱:草东没有派对)",
+ "duration": 215
+ }, {
+ "id": 923884,
+ "title": "platiunm",
+ "duration": 181
+ }, {
+ "id": 1954370,
+ "title": "Dark Dawn v1",
+ "duration": 200
+ }]
+ }, {
+ "menuId": 10628,
+ "uid": 32708543,
+ "uname": "大家的音乐姬",
+ "title": "原创榜(每日11:00更新)",
+ "cover": "http://i0.hdslb.com/bfs/music/58782504cefb307878d12422fd365ed7f971fad1.jpg",
+ "intro": "每日上午11:00更新,精选三日内原创投稿音乐。",
+ "type": 2,
+ "off": 0,
+ "ctime": 1501211627,
+ "curtime": 1655713346,
+ "statistic": {
+ "sid": 10628,
+ "play": 395817,
+ "collect": 2583,
+ "comment": 314,
+ "share": 88
+ },
+ "snum": 20,
+ "attr": 0,
+ "isDefault": 0,
+ "collectionId": 0,
+ "audios": [{
+ "id": 923884,
+ "title": "platiunm",
+ "duration": 181
+ }, {
+ "id": 1954370,
+ "title": "Dark Dawn v1",
+ "duration": 200
+ }, {
+ "id": 1954654,
+ "title": "张真源 - 你要快乐 (Live)",
+ "duration": 235
+ }]
+ }, {
+ "menuId": 10629,
+ "uid": 32708543,
+ "uname": "大家的音乐姬",
+ "title": "中文人声三日榜",
+ "cover": "http://i0.hdslb.com/bfs/music/f547e3b96d3f283eaa6a3a071de22092fb5101f8.jpg",
+ "intro": "每日上午11:00更新,精选三日内中文人声投稿音乐。",
+ "type": 2,
+ "off": 0,
+ "ctime": 1501211818,
+ "curtime": 1655713346,
+ "statistic": {
+ "sid": 10629,
+ "play": 842507,
+ "collect": 5102,
+ "comment": 362,
+ "share": 137
+ },
+ "snum": 20,
+ "attr": 0,
+ "isDefault": 0,
+ "collectionId": 0,
+ "audios": [{
+ "id": 1955567,
+ "title": "山海(原唱:草东没有派对)",
+ "duration": 215
+ }, {
+ "id": 1955546,
+ "title": "爱你",
+ "duration": 86
+ }, {
+ "id": 1954654,
+ "title": "张真源 - 你要快乐 (Live)",
+ "duration": 235
+ }]
+ }, {
+ "menuId": 10630,
+ "uid": 32708543,
+ "uname": "大家的音乐姬",
+ "title": "日文人声三日榜",
+ "cover": "http://i0.hdslb.com/bfs/music/7dd5d629f50481e22e2f5eced510f5fbd89f5233.jpg",
+ "intro": "每日上午11:00更新,精选三日内日文人声投稿音乐。",
+ "type": 2,
+ "off": 0,
+ "ctime": 1501211959,
+ "curtime": 1655713346,
+ "statistic": {
+ "sid": 10630,
+ "play": 891268,
+ "collect": 8671,
+ "comment": 601,
+ "share": 169
+ },
+ "snum": 20,
+ "attr": 0,
+ "isDefault": 0,
+ "collectionId": 0,
+ "audios": [{
+ "id": 1954053,
+ "title": "派对浪客诸葛孔明 插入歌『ChocoPate』久远七海 starring Lezel",
+ "duration": 117
+ }, {
+ "id": 1956316,
+ "title": "ただ君に晴れ(只给予你的晴天)",
+ "duration": 196
+ }, {
+ "id": 1956321,
+ "title": "うまぴょい伝説(马儿蹦跳传说)",
+ "duration": 262
+ }]
+ }, {
+ "menuId": 10631,
+ "uid": 32708543,
+ "uname": "大家的音乐姬",
+ "title": "VOCALOID三日榜",
+ "cover": "http://i0.hdslb.com/bfs/music/ce8b1646cbbd5513de7976ba81d0fd9c340c1899.jpg",
+ "intro": "每日上午11:00更新,精选三日内VOCALOID投稿音乐。",
+ "type": 2,
+ "off": 0,
+ "ctime": 1501212166,
+ "curtime": 1655713346,
+ "statistic": {
+ "sid": 10631,
+ "play": 170112,
+ "collect": 2900,
+ "comment": 528,
+ "share": 60
+ },
+ "snum": 10,
+ "attr": 0,
+ "isDefault": 0,
+ "collectionId": 0,
+ "audios": [{
+ "id": 1954717,
+ "title": "弦歌引-翻调",
+ "duration": 230
+ }, {
+ "id": 1956148,
+ "title": "告RADIO - 春色リップ",
+ "duration": 253
+ }, {
+ "id": 1954302,
+ "title": "susan说",
+ "duration": 195
+ }]
+ }]
+ }
+}
+```
+
+
diff --git a/audio/musicstream_url.md b/docs/audio/musicstream_url.md
similarity index 73%
rename from audio/musicstream_url.md
rename to docs/audio/musicstream_url.md
index 2a314a1..26f9c2c 100644
--- a/audio/musicstream_url.md
+++ b/docs/audio/musicstream_url.md
@@ -1,12 +1,8 @@
# 音频流URL
-
+
-- [获取音频流URL(无法获取付费音频)(web端)](#获取音频流URL(无法获取付费音频)(web端))
-- [获取音频流URL(可获取付费音频)(双端)](#获取音频流URL(可获取付费音频)(双端))
-- [音频流的获取](#音频流的获取)
-
----
+## 音质qn参数定义
音质`qn`参数:
@@ -17,9 +13,9 @@
| 2 | 高品质 320K |
| 3 | 无损 FLAC (大会员) |
-## 获取音频流URL(无法获取付费音频)(web端)
+## 获取音频流URL(web端)
-> http://www.bilibili.com/audio/music-service-c/web/url
+> https://www.bilibili.com/audio/music-service-c/web/url
*请求方式:GET*
@@ -32,6 +28,8 @@
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | -------- | ------ | ---- |
| sid | num | 音频auid | 必要 | |
+| quality | num | 2 | 不必要 | |
+| privilege | num | 2 | 不必要 | |
**json回复:**
@@ -39,8 +37,9 @@
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | -------- | ----------------------------------------------------------- |
-| code | num | 返回值 | 0:成功 7201006:未找到或已下架 72000000:请求错误 |
-| msg | str | 错误信息 | 默认为success |
+| code | num | 返回值 | 0: 成功 4511006: 已跳过无法播放的歌曲 7201006:未找到或已下架 72000000:请求错误 |
+| message | str | 返回值 | 字符串形式的 code |
+| msg | str | 返回信息 | 成功为 success |
| data | obj | 数据本体 | |
`data`对象:
@@ -49,27 +48,26 @@
| --------- | ----- | --------- | --------------------------------------- |
| sid | num | 音频auid | |
| type | num | 音质标识 | -1:试听片段(192K) 1:192K |
-| info | str | 空 | **作用尚不明确** |
+| info | str | 空 | |
| timeout | num | 有效时长 | 单位为秒 一般为3h |
| size | num | 文件大小 | 单位为字节 当`type`为-1时`size`为0 |
| cdns | array | 音频流url | |
-| qualities | null | - | |
-| title | null | - | |
-| cover | null | - | |
+| qualities | null | | |
+| title | str | 空 | |
+| cover | str | 空 | |
`data`对象的`cdns`数组:
-
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ------------- | ---- |
| 0 | str | 音频流url | |
-| 1 | str | 备用音频流url | |
+| 1 | str | 备用音频流url | 可能不存在 |
**示例:**
```shell
-curl -G 'http://www.bilibili.com/audio/music-service-c/web/url' \
---data-urlencode 'sid=sid=15664'
+curl -G 'https://www.bilibili.com/audio/music-service-c/web/url' \
+--data-urlencode 'sid=777180'
```
@@ -77,30 +75,30 @@ curl -G 'http://www.bilibili.com/audio/music-service-c/web/url' \
```json
{
- "code": 0,
- "msg": "success",
- "data": {
- "sid": 15664,
- "type": 1,
- "info": "",
- "timeout": 10800,
- "size": 4853263,
- "cdns": [
- "https://upos-sz-mirrorkodo.bilivideo.com/ugaxcode/7bf6a3a3e94421ccc653f005457b1e8c-192k.m4a?deadline=1595331310&gen=uga&os=kodobv&uparams=deadline,gen,os&upsig=0ecd3c7a8d9539f260239d8fa4c093db",
- "https://upos-sz-mirrorks3.bilivideo.com/ugaxcode/7bf6a3a3e94421ccc653f005457b1e8c-192k.m4a?deadline=1595331310&gen=uga&os=ks3bv&uparams=deadline,gen,os&upsig=f3fe53aff56655b1b7264ae4ab65872e"
- ],
- "qualities": null,
- "title": null,
- "cover": null
- }
+ "code": 0,
+ "data": {
+ "sid": 777180,
+ "title": "",
+ "cover": "",
+ "type": 1,
+ "info": "",
+ "timeout": 10800,
+ "size": 5579903,
+ "cdns": [
+ "https://upos-sz-mirrorcos.bilivideo.com/ugaxcode/m190314ws1dikiap1oivtapctuj1agjc-192k.m4a?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1725013547&gen=playurlv2&os=cosbv&oi=1746706124&trid=493923009cef4225ab8e1b9bda42c635B&mid=0&platform=pc&og=cos&upsig=043779511e2770cf6c3da04ed8a89f25&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&bvc=vod&nettype=0&orderid=0,1&logo=00000000"
+ ],
+ "qualities": null
+ },
+ "message": "0",
+ "msg": "success"
}
```
-## 获取音频流URL(可获取付费音频)(双端)
+## 获取音频流URL(可获取付费音频)
-> http://api.bilibili.com/audio/music-service-c/url
+> https://api.bilibili.com/audio/music-service-c/url
*请求方式:GET*
@@ -180,7 +178,7 @@ curl -G 'http://www.bilibili.com/audio/music-service-c/web/url' \
Cookie方式:
```shell
-curl -G 'http://api.bilibili.com/audio/music-service-c/url
+curl -G 'https://api.bilibili.com/audio/music-service-c/url' \
--data-urlencode 'songid=682118' \
--data-urlencode 'quality=3' \
--data-urlencode 'privilege=2' \
@@ -192,7 +190,7 @@ curl -G 'http://api.bilibili.com/audio/music-service-c/url
APP方式:
```shell
-curl -G 'http://api.bilibili.com/audio/music-service-c/url
+curl -G 'https://api.bilibili.com/audio/music-service-c/url' \
--data-urlencode 'access_key=xxx' \
--data-urlencode 'songid=682118' \
--data-urlencode 'quality=3' \
@@ -266,17 +264,16 @@ curl -G 'http://api.bilibili.com/audio/music-service-c/url
## 音频流的获取
-将`data`.`cdns`.`[0]`或`data`.`cdns`.`[1]`中的内容作为url进行GET操作
+将 `data.cdns[n]` 作为 URL 进行 GET 操作
-需要验证请求`user-agent` 不为空
+需要验证请求头 `User-Agent` 不为空且不含敏感字串, 且 `Referer` 必须在 `.bilibili.com` 下
-**user-agent错误并且referer不在`*.bilibili.com`域名下的情况下会导致403 Forbidden,故无法获取**
+**示例:**
-**以上述音频url为例:**
+使用 cURL + FFPlay 直接从音频流播放
```shell
-wget 'https://upos-sz-mirrorkodo.bilivideo.com/ugaxcode/m190102ws2pzf6jitbem841vq2x0du5x-flac.flac?deadline=1595332269&gen=uga&os=kodobv&uparams=deadline,gen,os&upsig=ac2284d97a61ef8758681eccf621c56d' \
--O 'Download_music.flac'
+curl -G "https://upos-sz-mirrorcos.bilivideo.com/ugaxcode/7bf6a3a3e94421ccc653f005457b1e8c-192k.m4a?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1725013121&gen=playurlv2&os=cosbv&oi=1823807031&trid=1a4703f1e7344bb891691c5857e8cfb9B&mid=0&platform=pc&og=cos&upsig=e3a9fba59b46ab2720c8b1807844e9f3&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&bvc=vod&nettype=0&orderid=0,1&logo=00000000" \
+--referer 'https://www.bilibili.com/' -A 'Mozilla/5.0' \
+--output - | ffplay -
```
-
-响应正文将返回一个flac文件
diff --git a/docs/audio/rank.md b/docs/audio/rank.md
new file mode 100644
index 0000000..ff2a809
--- /dev/null
+++ b/docs/audio/rank.md
@@ -0,0 +1,1160 @@
+# 音频榜单
+
+以下接口均来自页面 https://music.bilibili.com/pc/rank
+
+## 获取音频榜单每期列表
+
+> https://api.bilibili.com/x/copyright-music-publicity/toplist/all_period
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --------- | ---- | ------------------------ | ------ | ---------------------- |
+| list_type | num | 榜单类型 | 必要 | 1:热榜 2:原创榜 |
+| csrf | str | CSRF Token(位于cookie) | 非必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ---- |
+| list | obj | 年份索引 | |
+
+`data`中的`list`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ----- | ---------------------- | ---- |
+| {年份} | array | 对应年份索引的每期信息 | |
+| …… | array | …… | |
+
+`list`中的`{年份}`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---------------- | ---- |
+| 0 | obj | 该年中的单期数据 | |
+| …… | obj | …… | …… |
+
+`{年份}`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | -------- | -------- |
+| ID | num | 榜单 id | |
+| priod | num | 榜单期数 | |
+| publish_time | num | 发布时间 | 秒时间戳 |
+
+**示例:**
+
+```bash
+curl -G 'https://api.bilibili.com/x/copyright-music-publicity/toplist/all_period' \
+ --data-urlencode 'list_type=1'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": {
+ "2022": [
+ {
+ "ID": 38,
+ "priod": 29,
+ "publish_time": 1672394399
+ },
+ {
+ "ID": 36,
+ "priod": 28,
+ "publish_time": 1671789599
+ },
+ {
+ "ID": 34,
+ "priod": 27,
+ "publish_time": 1671184800
+ },
+ {
+ "ID": 32,
+ "priod": 26,
+ "publish_time": 1670579999
+ },
+ {
+ "ID": 30,
+ "priod": 25,
+ "publish_time": 1669976540
+ },
+ {
+ "ID": 28,
+ "priod": 24,
+ "publish_time": 1669370757
+ },
+ {
+ "ID": 26,
+ "priod": 23,
+ "publish_time": 1668766987
+ },
+ {
+ "ID": 22,
+ "priod": 22,
+ "publish_time": 1668163419
+ },
+ {
+ "ID": 21,
+ "priod": 21,
+ "publish_time": 1667558276
+ },
+ {
+ "ID": 20,
+ "priod": 20,
+ "publish_time": 1666951199
+ },
+ {
+ "ID": 19,
+ "priod": 19,
+ "publish_time": 1666346399
+ },
+ {
+ "ID": 18,
+ "priod": 18,
+ "publish_time": 1665741599
+ },
+ {
+ "ID": 17,
+ "priod": 17,
+ "publish_time": 1665136799
+ },
+ {
+ "ID": 16,
+ "priod": 16,
+ "publish_time": 1664531999
+ },
+ {
+ "ID": 15,
+ "priod": 15,
+ "publish_time": 1663927199
+ },
+ {
+ "ID": 14,
+ "priod": 14,
+ "publish_time": 1663322399
+ },
+ {
+ "ID": 13,
+ "priod": 13,
+ "publish_time": 1662717599
+ },
+ {
+ "ID": 12,
+ "priod": 12,
+ "publish_time": 1662113559
+ },
+ {
+ "ID": 11,
+ "priod": 11,
+ "publish_time": 1661508657
+ },
+ {
+ "ID": 10,
+ "priod": 10,
+ "publish_time": 1660903199
+ },
+ {
+ "ID": 9,
+ "priod": 9,
+ "publish_time": 1660298400
+ },
+ {
+ "ID": 8,
+ "priod": 8,
+ "publish_time": 1659693599
+ },
+ {
+ "ID": 7,
+ "priod": 7,
+ "publish_time": 1659088799
+ },
+ {
+ "ID": 6,
+ "priod": 6,
+ "publish_time": 1658483999
+ },
+ {
+ "ID": 5,
+ "priod": 5,
+ "publish_time": 1657879200
+ },
+ {
+ "ID": 4,
+ "priod": 4,
+ "publish_time": 1657274399
+ },
+ {
+ "ID": 3,
+ "priod": 3,
+ "publish_time": 1656669600
+ },
+ {
+ "ID": 2,
+ "priod": 2,
+ "publish_time": 1656064800
+ },
+ {
+ "ID": 1,
+ "priod": 1,
+ "publish_time": 1655460091
+ }
+ ],
+ "2023": [
+ {
+ "ID": 76,
+ "priod": 48,
+ "publish_time": 1683885696
+ },
+ {
+ "ID": 74,
+ "priod": 47,
+ "publish_time": 1683281010
+ },
+ {
+ "ID": 72,
+ "priod": 46,
+ "publish_time": 1682675999
+ },
+ {
+ "ID": 70,
+ "priod": 45,
+ "publish_time": 1682071442
+ },
+ {
+ "ID": 68,
+ "priod": 44,
+ "publish_time": 1681466400
+ },
+ {
+ "ID": 66,
+ "priod": 43,
+ "publish_time": 1680861599
+ },
+ {
+ "ID": 64,
+ "priod": 42,
+ "publish_time": 1680256799
+ },
+ {
+ "ID": 62,
+ "priod": 41,
+ "publish_time": 1679652088
+ },
+ {
+ "ID": 60,
+ "priod": 40,
+ "publish_time": 1679047199
+ },
+ {
+ "ID": 58,
+ "priod": 39,
+ "publish_time": 1678442399
+ },
+ {
+ "ID": 56,
+ "priod": 38,
+ "publish_time": 1677837600
+ },
+ {
+ "ID": 54,
+ "priod": 37,
+ "publish_time": 1677232800
+ },
+ {
+ "ID": 52,
+ "priod": 36,
+ "publish_time": 1676628000
+ },
+ {
+ "ID": 50,
+ "priod": 35,
+ "publish_time": 1676023199
+ },
+ {
+ "ID": 48,
+ "priod": 34,
+ "publish_time": 1675418399
+ },
+ {
+ "ID": 46,
+ "priod": 33,
+ "publish_time": 1674813599
+ },
+ {
+ "ID": 44,
+ "priod": 32,
+ "publish_time": 1674208799
+ },
+ {
+ "ID": 42,
+ "priod": 31,
+ "publish_time": 1673603999
+ },
+ {
+ "ID": 40,
+ "priod": 30,
+ "publish_time": 1672999199
+ }
+ ]
+ }
+ }
+}
+```
+
+
+
+## 查询音频榜单单期信息
+
+> https://api.bilibili.com/x/copyright-music-publicity/toplist/detail
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------- | ---- | ------------------------ | ------ | ------------------------------------------------ |
+| list_id | num | 榜单 id | 必要 | 见 [获取音频榜单每期列表](#获取音频榜单每期列表) |
+| csrf | str | CSRF Token(位于cookie) | 非必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ----------------------- | ------------------------------------------------------------ |
+| listen_fid | num | 畅听版歌单收藏夹原始 id | 非真实收藏夹 mlid 需要在后方拼接用户 mid 的后两位,如`16484498`->`1648449844` |
+| all_fid | num | 完整版歌单收藏夹原始 id | 非真实收藏夹 mlid 算法同上 |
+| fav_mid | num | 绑定收藏夹用户的 mid | 例如`1164440244`([音乐热榜bot](https://space.bilibili.com/1164440244)账号) |
+| cover_url | str | 榜单封面 url | |
+| is_subscribe | bool | 是否已订阅榜单 | `true`:已订阅 `false`:未订阅 需要登录(Cookie 或 APP),未登录恒为`false` |
+| listen_count | num | 平台有版权音频的数量 | |
+
+**示例:**
+
+查询 [第 48 期音频榜单](https://music.bilibili.com/pc/rank?list_id=76)(id=76) 信息
+
+```bash
+curl -G 'https://api.bilibili.com/x/copyright-music-publicity/toplist/detail' \
+ --data-urlencode 'list_id=76'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "listen_fid": 23317138,
+ "all_fid": 23672948,
+ "fav_mid": 1164440244,
+ "cover_url": "http://i0.hdslb.com/bfs/music-publicity/d8509dc6ee94dd5cc4658a2cbca4f525b4396df5.png",
+ "is_subscribe": false,
+ "listen_count": 5
+ }
+}
+```
+
+
+
+## 获取音频榜单单期内容
+
+> https://api.bilibili.com/x/copyright-music-publicity/toplist/music_list
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------- | ---- | ------------------------ | ------ | ------------------------------------------------ |
+| list_id | num | 榜单 id | 必要 | 见 [获取音频榜单每期列表](#获取音频榜单每期列表) |
+| csrf | str | CSRF Token(位于cookie) | 非必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ----- | -------- | ---- |
+| list | array | 内容列表 | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ---- |
+| 0 | obj | 榜单内容 1 | |
+| n | obj | 榜单内容 (n+1) | |
+| …… | obj | …… | …… |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ----- | ------------------ | ------------------------------------------- |
+| music_id | str | 音频 MAID | 例如`MA409252256362326366` |
+| music_title | str | 音频标题 | |
+| singer | str | 音频作者 | |
+| album | str | 音频专辑 | |
+| mv_aid | num | 音频 MV 的 avid | 若该音频无 MV 则该字段为 0 |
+| mv_bvid | str | 音频 MV 的 bvid | |
+| mv_cover | str | 音频封面 url | |
+| heat | num | 热度值 | |
+| rank | num | 排序值 | 1 为最高排序,DESC 方式 |
+| can_listen | bool | 平台是否有版权 | `true`:平台有版权 `false`:平台无版权 |
+| recommendation | str | (?) | |
+| creation_aid | num | 关联稿件 avid | |
+| creation_bvid | str | 关联稿件 bvid | |
+| creation_cover | str | 关联稿件封面 url | |
+| creation_title | str | 关联稿件标题 | |
+| creation_up | num | 关联稿件 UP 主 mid | |
+| creation_nickname | str | 关联稿件 UP 主昵称 | |
+| creation_duration | num | 关联稿件时长 | 单位为秒 |
+| creation_play | num | 关联稿件播放量 | |
+| creation_reason | str | 关联稿件二级分区名 | |
+| achievements | array | 获得成就 | |
+| material_id | num | (?) | |
+| material_use_num | num | (?) | |
+| material_duration | num | (?) | |
+| material_show | num | (?) | |
+| song_type | num | (?) | |
+
+`list`数组中的对象中的`achievements`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ---- |
+| 0 | str | 成就文案 1 | |
+| n | str | 成就文案 (n+1) | |
+| …… | str | …… | …… |
+
+**示例:**
+
+查询 [第 48 期音频榜单](https://music.bilibili.com/pc/rank?list_id=76)(id=76) 榜单内容列表
+
+```bash
+curl -G 'https://api.bilibili.com/x/copyright-music-publicity/toplist/music_list' \
+ --data-urlencode 'list_id=76'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "music_id": "MA409252256362326366",
+ "music_title": "極楽浄土",
+ "singer": "GARNiDELiA",
+ "album": "約束 -Promise code-",
+ "mv_aid": 28361833,
+ "mv_bvid": "BV1us41137Fd",
+ "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/07e0d9826c574e37df25387cab6df062.jpg",
+ "heat": 5328979,
+ "rank": 1,
+ "can_listen": true,
+ "recommendation": "",
+ "creation_aid": 910787823,
+ "creation_bvid": "BV1HM4y1b79Z",
+ "creation_cover": "http://i1.hdslb.com/bfs/archive/5780a05437ec9880301ed093537d6af97b0f8bdb.jpg",
+ "creation_title": "【MARiA】乘风2023初舞台!《极乐净土》,虽迟但到!",
+ "creation_up": 110352985,
+ "creation_nickname": "GARNiDELiA",
+ "creation_duration": 100,
+ "creation_play": 13487670,
+ "creation_reason": "官方现场",
+ "achievements": [
+ "重回榜单",
+ "最高排名1"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA456045402056087707",
+ "music_title": "アイドル",
+ "singer": "YOASOBI",
+ "album": "アイドル",
+ "mv_aid": 227499491,
+ "mv_bvid": "BV17h411u7sb",
+ "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/4bf2fe90e9d2361c3c4ddf59064c6e69.jpg",
+ "heat": 1856277,
+ "rank": 2,
+ "can_listen": false,
+ "recommendation": "",
+ "creation_aid": 952765045,
+ "creation_bvid": "BV1Ws4y1A7fS",
+ "creation_cover": "http://i0.hdslb.com/bfs/archive/8326350bab039ffee9274d7e1f94240d170fa096.jpg",
+ "creation_title": "【中文字幕】我推的孩子「アイドル」官方MV(4K 60帧/Hi-Res)",
+ "creation_up": 11585165,
+ "creation_nickname": "爱莉丝青贝尔克",
+ "creation_duration": 226,
+ "creation_play": 3742892,
+ "creation_reason": "音乐MV",
+ "achievements": [
+ "本期排名持平",
+ "最高排名1"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA458652518440821364",
+ "music_title": "野火wildfire",
+ "singer": "HOYO- Mix,Jonathan Steingard",
+ "album": "雪融于烬",
+ "mv_aid": 0,
+ "mv_bvid": "",
+ "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/e0825a2cfee22ce77f02d4d80826a1d9.jpg",
+ "heat": 1767135,
+ "rank": 3,
+ "can_listen": false,
+ "recommendation": "",
+ "creation_aid": 355732312,
+ "creation_bvid": "BV1ZX4y117Dx",
+ "creation_cover": "http://i0.hdslb.com/bfs/archive/c98bd629876e8b7b4c056d39bcfeaabe7327e996.jpg",
+ "creation_title": "这首“野火”神曲,我还能再听亿遍!!!",
+ "creation_up": 394861137,
+ "creation_nickname": "Hanserのcece",
+ "creation_duration": 219,
+ "creation_play": 2158925,
+ "creation_reason": "动画创作",
+ "achievements": [
+ "本期排名↑1",
+ "最高排名3"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA459088929228874460",
+ "music_title": "不问别离",
+ "singer": "指尖笑",
+ "album": "不问别离",
+ "mv_aid": 0,
+ "mv_bvid": "",
+ "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/b1507c1649500a0dcf0295b4b68e4b15.jpg",
+ "heat": 1576823,
+ "rank": 4,
+ "can_listen": false,
+ "recommendation": "",
+ "creation_aid": 740818022,
+ "creation_bvid": "BV1Sk4y1E7qH",
+ "creation_cover": "http://i2.hdslb.com/bfs/archive/5301b2fee7ad520c8946b5eb92888cf8be563a80.jpg",
+ "creation_title": "日推歌单 | \"我叹那春花秋月不问别离 长风起孤城笛声里全是你\" |《不问ciaga》",
+ "creation_up": 550445292,
+ "creation_nickname": "peach63",
+ "creation_duration": 164,
+ "creation_play": 274898,
+ "creation_reason": "音乐MV",
+ "achievements": [
+ "本期排名↑10",
+ "最高排名4"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA459819223808501000",
+ "music_title": "Spicy",
+ "singer": "aespa",
+ "album": "MY WORLD - The 3rd Mini Album",
+ "mv_aid": 570920682,
+ "mv_bvid": "BV1qz4y1a7m8",
+ "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/6455687e7d72dd838ffd2aa753fd7761.jpg",
+ "heat": 1441365,
+ "rank": 5,
+ "can_listen": false,
+ "recommendation": "",
+ "creation_aid": 570920682,
+ "creation_bvid": "BV1qz4y1a7m8",
+ "creation_cover": "http://i2.hdslb.com/bfs/archive/cd5456735bd645343a51b8df9b4a91236b08e657.jpg",
+ "creation_title": "aespa《Spicy》MV",
+ "creation_up": 3493085782739496,
+ "creation_nickname": "SMTOWN",
+ "creation_duration": 205,
+ "creation_play": 2363321,
+ "creation_reason": "官方MV",
+ "achievements": [
+ "新晋上榜",
+ "最高排名5"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA458946536466866804",
+ "music_title": "UNFORGIVEN (feat. Nile Rodgers)",
+ "singer": "LE SSERAFIM,Nile Rodgers",
+ "album": "UNFORGIVEN",
+ "mv_aid": 528370662,
+ "mv_bvid": "BV1LM41137Pc",
+ "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/47e6685cfe44185ec4daab5e765e3b26.jpg",
+ "heat": 1362593,
+ "rank": 6,
+ "can_listen": true,
+ "recommendation": "",
+ "creation_aid": 698312930,
+ "creation_bvid": "BV1wm4y1y76i",
+ "creation_cover": "http://i1.hdslb.com/bfs/archive/4f097f5067fc3408118f7d59b2c36d8278660dd9.jpg",
+ "creation_title": "假如让金采源唱全曲......",
+ "creation_up": 496743369,
+ "creation_nickname": "YuueFriloeyyy_",
+ "creation_duration": 183,
+ "creation_play": 319267,
+ "creation_reason": "歌曲演唱",
+ "achievements": [
+ "本期排名↑3",
+ "最高排名6"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA451591354456234292",
+ "music_title": "雪 Distance",
+ "singer": "Capper,罗言",
+ "album": "Uniconfication",
+ "mv_aid": 0,
+ "mv_bvid": "",
+ "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/5899008cea7ed157b8bdb6f9b89dd7ff.jpg",
+ "heat": 1233174,
+ "rank": 7,
+ "can_listen": false,
+ "recommendation": "",
+ "creation_aid": 355903423,
+ "creation_bvid": "BV1QX4y127jq",
+ "creation_cover": "http://i2.hdslb.com/bfs/archive/e3542cf8d7cf7cc58268c840d845bb12d4c52662.jpg",
+ "creation_title": "⚡️“可是雪啊,埋进土里”⚡️",
+ "creation_up": 22169833,
+ "creation_nickname": "寒了个羽",
+ "creation_duration": 158,
+ "creation_play": 2622705,
+ "creation_reason": "音乐创作",
+ "achievements": [
+ "本期排名↓1",
+ "最高排名3"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA460246447678301091",
+ "music_title": "Ghost Face (鬼脸) (LIVE版)",
+ "singer": "法老",
+ "album": "中国说唱巅峰对决2023 第一期",
+ "mv_aid": 0,
+ "mv_bvid": "",
+ "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/0d4050feb7cac1a568849832d5fa9f67.jpg",
+ "heat": 1163291,
+ "rank": 8,
+ "can_listen": false,
+ "recommendation": "",
+ "creation_aid": 355995337,
+ "creation_bvid": "BV1qX4y1y78r",
+ "creation_cover": "http://i0.hdslb.com/bfs/archive/f5e7a51dbe1f48441042dad1e45148c400a3f9fe.jpg",
+ "creation_title": "【法老Pharaoh】虽迟但到!说唱巅峰对决《Ghost Face》live",
+ "creation_up": 12807175,
+ "creation_nickname": "法老爷爷",
+ "creation_duration": 79,
+ "creation_play": 885856,
+ "creation_reason": "官方现场",
+ "achievements": [
+ "新晋上榜",
+ "最高排名8"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA458974797167092444",
+ "music_title": "F*ck My Life",
+ "singer": "SEVENTEEN",
+ "album": "SEVENTEEN 10th Mini Album 'FML'",
+ "mv_aid": 313423265,
+ "mv_bvid": "BV1tP41117mv",
+ "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/6723df38fcca9b2ab85b564e3809426e.jpg",
+ "heat": 735517,
+ "rank": 9,
+ "can_listen": true,
+ "recommendation": "",
+ "creation_aid": 313423265,
+ "creation_bvid": "BV1tP41117mv",
+ "creation_cover": "http://i1.hdslb.com/bfs/archive/38377552bd74cc32851d6466343dc3a26983c3b6.jpg",
+ "creation_title": "SEVENTEEN 'F*ck My Life' Official MV",
+ "creation_up": 692206640,
+ "creation_nickname": "SEVENTEEN",
+ "creation_duration": 220,
+ "creation_play": 1008830,
+ "creation_reason": "官方MV",
+ "achievements": [
+ "新晋上榜",
+ "最高排名9"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA460247474041267107",
+ "music_title": "Control's Wishes",
+ "singer": "Steven Grove,塞壬唱片-MSR",
+ "album": "孤星OST",
+ "mv_aid": 0,
+ "mv_bvid": "",
+ "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/6068f2c64c6796f68b8dae7772f891ac.jpg",
+ "heat": 628233,
+ "rank": 10,
+ "can_listen": false,
+ "recommendation": "",
+ "creation_aid": 740625544,
+ "creation_bvid": "BV1ck4y1E7KJ",
+ "creation_cover": "http://i1.hdslb.com/bfs/archive/11381997120391d655c91b19bc08e110ca8201e5.jpg",
+ "creation_title": "【小提琴/钢琴】明日方舟四周年孤星PV曲《Control's Wishes》",
+ "creation_up": 2016022052,
+ "creation_nickname": "-桑榆墨景-",
+ "creation_duration": 193,
+ "creation_play": 37881,
+ "creation_reason": "器乐演奏",
+ "achievements": [
+ "新晋上榜",
+ "最高排名10"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA459266635128138957",
+ "music_title": "花园种花(在小小的花园里种小小的花)",
+ "singer": "桃子老师花开富贵",
+ "album": "花园种花",
+ "mv_aid": 0,
+ "mv_bvid": "",
+ "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/fb1d6a44bb8337edf6c9d32c421e9c89.jpg",
+ "heat": 623604,
+ "rank": 11,
+ "can_listen": false,
+ "recommendation": "",
+ "creation_aid": 398216313,
+ "creation_bvid": "BV1uo4y1x7UF",
+ "creation_cover": "http://i0.hdslb.com/bfs/archive/9562b126010376f7dcfedf0397170696eb1a19c5.jpg",
+ "creation_title": "姬子老师:开拓者家长们,路上有点堵车,这节挖呀挖呀挖课来晚了",
+ "creation_up": 391636983,
+ "creation_nickname": "动漫跳舞姬",
+ "creation_duration": 33,
+ "creation_play": 566777,
+ "creation_reason": "动画创作",
+ "achievements": [
+ "新晋上榜",
+ "最高排名11"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA455203227252613620",
+ "music_title": "Cupid",
+ "singer": "FIFTY FIFTY",
+ "album": "The Beginning: Cupid",
+ "mv_aid": 226830843,
+ "mv_bvid": "BV1sh41137rs",
+ "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/e91891c4e2573f4d4ada329db9a86b30.jpg",
+ "heat": 562273,
+ "rank": 12,
+ "can_listen": false,
+ "recommendation": "",
+ "creation_aid": 485862497,
+ "creation_bvid": "BV19T411b7nE",
+ "creation_cover": "http://i2.hdslb.com/bfs/archive/ece27463e3eb13f9fbbcb799436375495a795e3c.jpg",
+ "creation_title": "挑战在cp29和一百位coser比心!",
+ "creation_up": 1477074,
+ "creation_nickname": "菌儿rikushi",
+ "creation_duration": 148,
+ "creation_play": 1216246,
+ "creation_reason": "COSPLAY创作",
+ "achievements": [
+ "重回榜单",
+ "最高排名12"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA457806074590836885",
+ "music_title": "星间旅行",
+ "singer": "HOYO-MiX,茶理理理子",
+ "album": "崩坏星穹铁道-星间旅行 Interstellar Journ",
+ "mv_aid": 612992200,
+ "mv_bvid": "BV1rh4y1n77f",
+ "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/20ddff696bbbd7f00fc8b76f7b5334f7.jpg",
+ "heat": 515238,
+ "rank": 13,
+ "can_listen": false,
+ "recommendation": "",
+ "creation_aid": 995418876,
+ "creation_bvid": "BV1vs4y197gt",
+ "creation_cover": "http://i0.hdslb.com/bfs/archive/2d6997320bd2bb20f50b363a894033f325fed871.jpg",
+ "creation_title": "《星穹铁道玩家现状》",
+ "creation_up": 551188239,
+ "creation_nickname": "企鹅带带北极熊",
+ "creation_duration": 88,
+ "creation_play": 1570181,
+ "creation_reason": "音乐创作",
+ "achievements": [
+ "本期排名↓10",
+ "最高排名2"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA434298821720206219",
+ "music_title": "可愛くてごめん (feat. かぴ)",
+ "singer": "HoneyWorks,かぴ",
+ "album": "告白実行委員会 -FLYING SONGS- 恋してる",
+ "mv_aid": 779733306,
+ "mv_bvid": "BV1iy4y1Z7Ri",
+ "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/45ce3f52d31386741589a3a5ca9a420c.jpg",
+ "heat": 438720,
+ "rank": 14,
+ "can_listen": true,
+ "recommendation": "",
+ "creation_aid": 862702118,
+ "creation_bvid": "BV1gG4y117nV",
+ "creation_cover": "http://i1.hdslb.com/bfs/archive/38d94515fe5f6294bf7712d8b26eb049ec3cf627.jpg",
+ "creation_title": "这么可爱真是抱歉!❤️(*/∇\*)天台宅舞",
+ "creation_up": 434476793,
+ "creation_nickname": "优联酱uu",
+ "creation_duration": 140,
+ "creation_play": 1199819,
+ "creation_reason": "舞蹈创作",
+ "achievements": [
+ "重回榜单",
+ "最高排名2"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA440555130794857381",
+ "music_title": "阳光开朗大男孩",
+ "singer": "卦者灵风",
+ "album": "阳光开朗大男孩",
+ "mv_aid": 421697247,
+ "mv_bvid": "BV1z341187Y9",
+ "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/220c674ca22acb91114f6e0705d0f426.jpg",
+ "heat": 371851,
+ "rank": 15,
+ "can_listen": true,
+ "recommendation": "",
+ "creation_aid": 995281134,
+ "creation_bvid": "BV1as4y1d7QR",
+ "creation_cover": "http://i0.hdslb.com/bfs/archive/4628837eb5baf879a2be79b16836c90e0466dd6c.jpg",
+ "creation_title": "【灵能手书】阳光开朗大男孩",
+ "creation_up": 8504036,
+ "creation_nickname": "kipoki",
+ "creation_duration": 81,
+ "creation_play": 627123,
+ "creation_reason": "动画创作",
+ "achievements": [
+ "重回榜单",
+ "最高排名1"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA406539170333366962",
+ "music_title": "此生不换",
+ "singer": "青鸟飞鱼",
+ "album": "仙剑奇侠传三 电视剧原声带",
+ "mv_aid": 0,
+ "mv_bvid": "",
+ "mv_cover": "http://i0.hdslb.com/bfs/station_src/music_metadata/450bd04688ef6a691b1adb816ace6155.jpg",
+ "heat": 361410,
+ "rank": 16,
+ "can_listen": false,
+ "recommendation": "",
+ "creation_aid": 545438082,
+ "creation_bvid": "BV1Cq4y1J7Ge",
+ "creation_cover": "http://i1.hdslb.com/bfs/archive/1b8b80f7ba9dccaf648cfb641b40e1d38965a4a4.jpg",
+ "creation_title": "开口爷青回!男生宿舍回忆向翻唱仙剑3插曲《此生不换》|我和室友的翻唱日常.",
+ "creation_up": 346782115,
+ "creation_nickname": "陈家淇_B11",
+ "creation_duration": 258,
+ "creation_play": 2976435,
+ "creation_reason": "歌曲演唱",
+ "achievements": [
+ "重回榜单",
+ "最高排名15"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA444928930235832050",
+ "music_title": "太空电梯",
+ "singer": "阿鲲",
+ "album": "流浪地球2电影原声大碟",
+ "mv_aid": 0,
+ "mv_bvid": "",
+ "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/c64c10b911ace04ae45b3172abe3a1d8.jpg",
+ "heat": 352572,
+ "rank": 17,
+ "can_listen": false,
+ "recommendation": "",
+ "creation_aid": 269421756,
+ "creation_bvid": "BV1ic41157cc",
+ "creation_cover": "http://i0.hdslb.com/bfs/archive/39a27b9d804750325b260f6bc69a3afa8c01a1dc.jpg",
+ "creation_title": "都说是涂装问题了,看,这战斗力不就上来了吗!",
+ "creation_up": 478832800,
+ "creation_nickname": "大刀王五EP",
+ "creation_duration": 87,
+ "creation_play": 706377,
+ "creation_reason": "动画创作",
+ "achievements": [
+ "重回榜单",
+ "最高排名1"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA400017093531020491",
+ "music_title": "兰亭序",
+ "singer": "周杰伦",
+ "album": "魔杰座",
+ "mv_aid": 0,
+ "mv_bvid": "",
+ "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/a03f7d174c3b01e4c6b3907a115c5434.jpg",
+ "heat": 347017,
+ "rank": 18,
+ "can_listen": false,
+ "recommendation": "",
+ "creation_aid": 825572396,
+ "creation_bvid": "BV1kg4y1L7v6",
+ "creation_cover": "http://i0.hdslb.com/bfs/archive/59e8436511ff45402e3d5dcf2c01feeb94897103.jpg",
+ "creation_title": "无关风月我题序等你回《兰亭序》",
+ "creation_up": 628615890,
+ "creation_nickname": "qqq还在梦里",
+ "creation_duration": 125,
+ "creation_play": 522133,
+ "creation_reason": "歌曲演唱",
+ "achievements": [
+ "重回榜单",
+ "最高排名6"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA457811156946443719",
+ "music_title": "I'll Do It",
+ "singer": "Heidi Montag",
+ "album": "Superficial",
+ "mv_aid": 0,
+ "mv_bvid": "",
+ "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/e1d95f62257da69db1dc36e949f789f5.jpg",
+ "heat": 345773,
+ "rank": 19,
+ "can_listen": false,
+ "recommendation": "",
+ "creation_aid": 313275936,
+ "creation_bvid": "BV1XP411y7UD",
+ "creation_cover": "http://i1.hdslb.com/bfs/archive/c42e54074a50ee1eaddbd5495091c2152aad8ecf.jpg",
+ "creation_title": "“嗨,老婆” 【崩坏星穹铁道】",
+ "creation_up": 14158002,
+ "creation_nickname": "Ishi丶",
+ "creation_duration": 61,
+ "creation_play": 103542,
+ "creation_reason": "动画创作",
+ "achievements": [
+ "本期排名↓12",
+ "最高排名6"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ },
+ {
+ "music_id": "MA409255441550338398",
+ "music_title": "失恋阵线联盟",
+ "singer": "草蜢",
+ "album": "失恋阵线联盟",
+ "mv_aid": 0,
+ "mv_bvid": "",
+ "mv_cover": "https://i0.hdslb.com/bfs/station_src/music_metadata/5d6b27035d5f7c0e7781b779871aca04.jpg",
+ "heat": 337176,
+ "rank": 20,
+ "can_listen": false,
+ "recommendation": "",
+ "creation_aid": 415864088,
+ "creation_bvid": "BV1QV411b7CT",
+ "creation_cover": "http://i1.hdslb.com/bfs/archive/8735563d73f86ef7073ed580a41e12c409bd2a5b.jpg",
+ "creation_title": "年会舞蹈《失恋阵线联盟》完整版",
+ "creation_up": 451425930,
+ "creation_nickname": "舞大师舞蹈工作室",
+ "creation_duration": 135,
+ "creation_play": 5336890,
+ "creation_reason": "舞蹈创作",
+ "achievements": [
+ "重回榜单",
+ "最高排名20"
+ ],
+ "material_id": 0,
+ "material_use_num": 0,
+ "material_duration": 0,
+ "material_show": 1,
+ "song_type": 2
+ }
+ ]
+ }
+}
+```
+
+
+
+## 订阅或退订榜单
+
+> https://api.bilibili.com/x/copyright-music-publicity/toplist/subscribe/update
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------- | ---- | ------------------------ | --------------- | ------------------------------------------------ |
+| state | num | 操作代码 | 必要 | 1:订阅 2:退订 |
+| list_id | num | 榜单 id | 非必要 | 见 [获取音频榜单每期列表](#获取音频榜单每期列表) |
+| csrf | str | CSRF Token(位于cookie) | Cookie 方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf 验证失败 400:请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+```bash
+curl 'https://api.bilibili.com/x/copyright-music-publicity/toplist/subscribe/update' \
+ --data-urlencode 'state=1' \
+ --data-urlencode 'state=76' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
diff --git a/audio/status_number.md b/docs/audio/status_number.md
similarity index 87%
rename from audio/status_number.md
rename to docs/audio/status_number.md
index a5ca235..62621c1 100644
--- a/audio/status_number.md
+++ b/docs/audio/status_number.md
@@ -1,12 +1,8 @@
# 音频状态数
-- [歌曲状态数](#歌曲状态数)
-
----
-
## 歌曲状态数
->http://www.bilibili.com/audio/music-service-c/web/stat/song
+>https://www.bilibili.com/audio/music-service-c/web/stat/song
*请求方式:GET*
@@ -43,7 +39,7 @@
查询歌曲`au15664`的状态数
```shell
-curl -G 'http://www.bilibili.com/audio/music-service-c/web/stat/song' \
+curl -G 'https://www.bilibili.com/audio/music-service-c/web/stat/song' \
--data-urlencode 'sid=15664'
```
diff --git a/docs/bangumi/follow.md b/docs/bangumi/follow.md
new file mode 100644
index 0000000..a614e27
--- /dev/null
+++ b/docs/bangumi/follow.md
@@ -0,0 +1,124 @@
+# 追番相关
+
+## 追番
+> https://api.bilibili.com/pgc/web/follow/add
+
+*请求方式:POST*
+
+鉴权方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|----------|-----|--------|-----|-----|
+| season_id | str | 剧集ssid | 必要 | |
+| csrf | str | csrf token(位于cookies中的bili_jct) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ------ | ------------------------------- |
+| code | num | 返回值 | 0:成功 -111:csrf校验失败 |
+| message | str | 信息 | 成功时:success |
+| result | obj |见下表| |
+
+根对象中的`result`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ---------- | ---- |
+| fmid | num | 0 | |
+| relation | bool | false | |
+| status | num | 2 | |
+| toast | str | 自己追的番就要好好看完哟^o^ | |
+
+**示例:**
+
+追番`ssid=41410`的番剧
+
+```shell
+curl -G 'https://api.bilibili.com/pgc/web/follow/add' \
+--data-urlencode 'season_id=41410' \
+--data-urlencode 'csrf=xxx' \
+```
+
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "success",
+ "result": {
+ "fmid": 0,
+ "relation": false,
+ "status": 2,
+ "toast": "自己追的番就要好好看完哟^o^"
+ }
+}
+```
+
+
+## 取消追番
+
+> https://api.bilibili.com/pgc/web/follow/del
+
+*请求方式:POST*
+
+鉴权方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --------- | ---- | ----------------------------------- | ------ | ---- |
+| season_id | str | 剧集ssid | 必要 | |
+| csrf | str | csrf token(位于cookies中的bili_jct) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ------ | ------------------------------- |
+| code | num | 返回值 | 0:成功 -111:csrf校验失败 |
+| message | str | 信息 | 成功时:success |
+| result | obj | 见下表 | |
+
+根对象中的`result`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ---------- | ---- |
+| fmid | num | 0 | |
+| relation | bool | true | |
+| status | num | 0 | |
+| toast | str | 已取消追番 | |
+
+**示例:**
+
+取消`ssid=41410`的追番
+
+```shell
+curl -G 'https://api.bilibili.com/pgc/web/follow/del' \
+--data-urlencode 'season_id=41410' \
+--data-urlencode 'csrf=xxx' \
+```
+
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "success",
+ "result": {
+ "fmid": 0,
+ "relation": false,
+ "status": 0,
+ "toast": "已取消追番"
+ }
+}
+```
+
diff --git a/docs/bangumi/info.md b/docs/bangumi/info.md
new file mode 100644
index 0000000..6857cd3
--- /dev/null
+++ b/docs/bangumi/info.md
@@ -0,0 +1,1033 @@
+# 剧集基本信息
+
+## 剧集基本信息(mdid方式)
+
+> https://api.bilibili.com/pgc/review/user
+
+*请求方式:GET*
+
+鉴权方式:Cookie(SESSDATA)或APP
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|----------|-----|--------|-----|-----|
+| media_id | str | 剧集mdid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|----------------------------------|
+| code | num | 返回值 | 0:成功 -400:请求错误 -404:错误 |
+| message | str | 错误信息 | 默认为success |
+| result | obj | 信息本体 | |
+
+`result`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------|-----|--------|----------|
+| media | obj | 剧集信息 | |
+| review | obj | 用户操作信息 | 仅登录时存在此项 |
+
+`result`中的`media`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------------------|-------|-----------|--------------------------------------------------------------|
+| areas | array | 地区 | |
+| cover | str | 封面图片url | |
+| horizontal_picture | str | 横板封面图片url | |
+| media_id | num | 剧集mdid | |
+| new_ep | obj | 最新一话信息 | |
+| rating | obj | 评分信息 | |
+| season_id | num | 剧集ssid | |
+| share_url | url | 剧集详情页连接 | |
+| title | str | 标题 | |
+| type | num | 剧集类型id | 1:番剧 2:电影 3:纪录片 4:国创 5:电视剧 6:漫画 7:综艺 |
+| type_name | str | 剧集类型 | |
+
+`media`中的`areas`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|-----------|-----|
+| 0 | obj | 地区信息1 | |
+| n | obj | 地区信息(n+1) | |
+| …… | obj | …… | |
+
+`areas`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------|-----|--------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| id | num | 所属地区编号 | 1:中国大陆 2:日本 3:美国 4:英国 5:加拿大 6:中国香港 7:中国台湾 8:韩国 9:法国 10:泰国 12:新加坡 13:西班牙 14:俄罗斯 15:德国 16:其他 17:丹麦 18:乌克兰 19:以色列 20:伊朗 24:匈牙利 22:克罗地亚 23:冰岛 24:匈牙利 25:南非 26:印尼 27:印度 30:土耳其 31:墨西哥 32:委内瑞拉 33:巴西 34:希腊 35:意大利 36:挪威 37:捷克 39:新西兰 40:智利 41:比利时 42:波兰 43:澳大利亚 44:爱尔兰 45:瑞典 46:瑞士 47:芬兰 48:苏联 49:荷兰 51:阿根廷 53:古巴 54:菲律宾 55:哈萨克斯坦 |
+| name | str | 所属地区名称 | |
+
+`media`中的`new_ep`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------------|-----|-----------|--------------------|
+| id | num | 最新一话的epid | |
+| index | str | 最新一话名称 | |
+| index_show | str | 最新一话显示名称 | eg. `第1话`、`更新至第4话` |
+
+`media`中的`rating`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------|-----|--------|-----|
+| count | num | 总计评分人数 | |
+| score | num | 评分 | |
+
+`result`中的`review`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|-----|--------|
+| is_coin | num | 0 | 作用尚不明确 |
+| is_open | num | 1 | 作用尚不明确 |
+
+**示例:**
+
+查询剧集`md28220978`的基本信息
+
+```shell
+curl -G 'https://api.bilibili.com/pgc/review/user' \
+--data-urlencode 'media_id=28220978' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "success",
+ "result": {
+ "media": {
+ "areas": [
+ {
+ "id": 2,
+ "name": "日本"
+ }
+ ],
+ "cover": "http://i0.hdslb.com/bfs/bangumi/8aa0bfce050c72c6626b63d3093a88527c251026.jpg",
+ "horizontal_picture": "http://i0.hdslb.com/bfs/bangumi/8aa0bfce050c72c6626b63d3093a88527c251026.jpg",
+ "media_id": 28220978,
+ "new_ep": {
+ "id": 21278,
+ "index": "14",
+ "index_show": "全14话"
+ },
+ "rating": {
+ "count": 80693,
+ "score": 9.9
+ },
+ "season_id": 1172,
+ "share_url": "https://www.bilibili.com/bangumi/media/md28220978",
+ "title": "轻音少女 第一季",
+ "type": 1,
+ "type_name": "番剧"
+ }
+ }
+}
+```
+
+
+
+## 获取剧集明细(web端)(ssid/epid方式)
+
+> https://api.bilibili.com/pgc/view/web/season
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --------- | ---- | -------- | ------------ | ------------------------ |
+| season_id | num | 番剧ssid | 必要(可选) | season_id与ep_id任选其一 |
+| ep_id | num | 剧集epid | 必要(可选) | season_id与ep_id任选其一 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------- |
+| code | num | 返回值 | 0:成功 -404:错误 |
+| message | str | 错误信息 | 默认为success |
+| ttl | num | 1 | 作用尚不明确 |
+| result | obj | 信息本体 | |
+
+`result`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ------ | -------------------------- | ------------------------------------------ |
+| activity | obj | 参与的活动 | |
+| alias | str | 空 | 作用尚不明确 |
+| bkg_cover | str | 网页背景图片url | 无则为空 |
+| cover | str | 剧集封面图片url | |
+| episodes | array | 正片剧集列表 | |
+| evaluate | str | 简介 | |
+| jp_title | str | 空 | 作用尚不明确 |
+| link | str | 简介页面url | |
+| media_id | num | 剧集mdid | |
+| mode | num | 2 | 作用尚不明确 |
+| new_ep | obj | 更新信息 | |
+| payment | obj | 会员&付费信息 | 若无相关内容则无此项 |
+| positive | obj | | |
+| publish | obj | 发布信息 | |
+| rating | obj | 评分信息 | 若无相关内容则无此项 |
+| record | str | 备案号 | 无则为空 |
+| rights | obj | 属性标志信息 | |
+| season_id | num | 番剧ssid | |
+| season_title | str | 剧集标题 | |
+| seasons | array | 同系列所有季信息 | |
+| section | array | 花絮、PV、番外等非正片内容 | 若无相关内容则无此项 |
+| series | obj | 系列信息 | |
+| share_copy | str | 《{标题}》+{备注} | |
+| share_sub_title | str | 备注 | |
+| share_url | str | 番剧播放页面url | |
+| show | obj | 网页全屏标志 | |
+| square_cover | str | 方形封面图片url | |
+| stat | obj | 状态数 | |
+| status | num | | |
+| subtitle | str | 剧集副标题 | |
+| title | str | 剧集标题 | |
+| total | num | 总计正片集数 | 未完结:大多为-1 已完结:正整数 |
+| type | num | 剧集类型 | 1:番剧 2:电影 3:纪录片 4:国创 5:电视剧 7:综艺 |
+| up_info | obj | UP主信息 | 若无相关内容则无此项 |
+
+`result`中的`activity`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | -------- | ------------ |
+| head_bg_url | str | 空 | 作用尚不明确 |
+| id | num | 活动id | |
+| title | str | 活动标题 | |
+
+`result`中的`episodes`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ------------ |
+| 0 | obj | 正片第1集 | |
+| n | obj | 正片第(n+1)集 | 按照顺序排列 |
+| …… | obj | | |
+
+`episodes`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | --------------------------------- | -------------------- |
+| aid | num | 单集稿件avid | |
+| badge | str | 标签文字 | 例如`会员`、`限免`等 |
+| badge_info | obj | | |
+| badge_type | num | | |
+| bvid | str | 单集稿件bvid | |
+| cid | num | 视频cid | |
+| cover | str | 单集封面url | |
+| dimension | obj | 分辨率信息 | |
+| from | str | | |
+| id | num | 单集epid | |
+| link | str | 单集网页url | |
+| long_title | str | 单集完整标题 | |
+| pub_time | num | 发布时间 | 时间戳 |
+| pv | num | 0 | 作用尚不明确 |
+| release_date | str | 空 | 作用尚不明确 |
+| rights | obj | | |
+| share_copy | str | 《{标题}》+第n话+{单集完整标题} | |
+| share_url | str | 单集网页url | |
+| short_link | str | 单集网页url短链接 | |
+| status | num | | |
+| subtitle | str | 单集副标题 | 观看次数文字 |
+| title | str | 单集标题 | |
+| vid | str | 单集vid | vupload_+{cid} |
+
+`result`中的`new_ep`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | ------------ | ---------------- |
+| desc | str | 更新备注 | |
+| id | num | 最新一话epid | |
+| is_new | num | 是否最新发布 | 0:否 1:是 |
+| title | str | 最新一话标题 | |
+
+`result`中的`payment`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------- | ---- | ------------ | -------- |
+| discount | num | 折扣 | 100为原价 |
+| pay_type | obj | 支付相关 | |
+| price | str | 售价 | |
+| promotion | str | 推广信息 | |
+| vip_discount | num | 大会员折扣 | |
+| vip_first_promotion | str | | |
+| vip_price | str | 大会员售价 | |
+| vip_promotion | str | 大会员推广信息 | |
+
+`payment`中的`pay_type`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------- | ---- | ------------- | ------------------------- |
+| allow_discount | num | 启用折扣 | 0:否 1:是 下同 |
+| allow_pack | num | | |
+| allow_ticket | num | 启用票券 | |
+| allow_time_limit | num | 启用时间限制 | |
+| allow_vip_discount | num | 启用大会员折扣 | |
+| forbid_bb | num | 禁止使用B币券 | |
+
+`result`中的`positive`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | ---- | ---- |
+| id | num | | |
+| title | str | | |
+
+`result`中的`publish`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ---- | ---------------- | ------------------------ |
+| is_finish | num | 完结状态 | 0:未完结 1:已完结 |
+| is_started | num | 是否发布 | 0:未发布 1:已发布 |
+| pub_time | str | 发布时间 | YYYY-MM-DDD hh:mm:ss |
+| pub_time_show | str | 发布时间文字介绍 | |
+| unknow_pub_date | num | 0 | 作用尚不明确 |
+| weekday | num | 0 | 作用尚不明确 |
+
+`result`中的`rating`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | ------------ | ---- |
+| count | num | 总计评分人数 | |
+| score | num | 评分 | |
+
+`result`中的`rights`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ---- | -------- | ------------------------------- |
+| allow_bp | num | | |
+| allow_bp_rank | num | | |
+| allow_download | num | | |
+| allow_review | num | | |
+| area_limit | num | | |
+| ban_area_show | num | | |
+| can_watch | num | | |
+| copyright | str | 版权标志 | bilibili:授权 dujia:独家 |
+| forbid_pre | num | | |
+| is_cover_show | num | | |
+| is_preview | num | | |
+| only_vip_download | num | | |
+| resource | str | | |
+| watch_platform | num | | |
+
+`result`中的`seasons`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------------- | ------------ |
+| 0 | obj | 同系列剧集1 | |
+| n | obj | 同系列剧集(n+1) | 按照顺序排列 |
+| …… | obj | | |
+
+`seasons`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ---- | ---- |
+| badge | str | | |
+| badge_info | obj | | |
+| badge_type | num | | |
+| cover | str | | |
+| media_id | str | | |
+| new_ep | num | | |
+| season_id | obj | | |
+| season_title | num | | |
+| season_type | str | | |
+| stat | obj | | |
+
+`result`中的`section`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------------- | ------------ |
+| 0 | obj | 其他内容块1 | |
+| n | obj | 其他内容块(n+1) | 按照顺序排列 |
+| …… | obj | | |
+
+`section`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | -------- | ---- |
+| episode_id | num | 0 | |
+| episodes | array | 板块内容 | |
+| id | num | 板块id? | |
+| title | str | 板块标题 | |
+| type | num | ? | |
+
+`result`中的`series`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ------ | ---- |
+| series_id | num | 系列id | |
+| series_title | str | 系列名 | |
+
+`result`中的`show`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | -------- | -------------------- |
+| wide_screen | num | 是否全屏 | 0:正常 1:全屏 |
+
+`result`中的`stat`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------ | ---- |
+| coins | num | 投币数 | |
+| danmakus | num | 弹幕数 | |
+| favorites | num | 收藏数 | |
+| likes | num | 点赞数 | |
+| reply | num | 评论数 | |
+| share | num | 分享数 | |
+| views | num | 播放数 | |
+
+`result`中的`up_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ----------- | ---- |
+| avatar | str | 头像图片url | |
+| follower | num | 粉丝数 | |
+| is_follow | num | 0 | |
+| mid | num | UP主mid | |
+| pendant | obj | | |
+| theme_type | num | 0 | |
+| uname | str | UP主昵称 | |
+| verify_type | num | | |
+| vip_status | num | | |
+| vip_type | num | | |
+
+# 获取剧集分集信息
+
+> https://api.bilibili.com/pgc/web/season/section
+
+*请求方式:GET*
+
+鉴权方式:Cookie(SESSDATA)或APP
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|-----------|-----|--------|-----|-----|
+| season_id | str | 剧集ssid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|-------------------|
+| code | num | 返回值 | 0:成功 -404:错误 |
+| message | str | 错误信息 | 默认为success |
+| result | obj | 信息本体 | |
+
+`result`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------------|-------|--------|-----|
+| main_section | obj | 正片信息 | |
+| section | array | 花絮、PV等 | |
+
+`result`中的`main_section`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|----------|-------|------------------------------|-----|
+| episodes | array | 分集信息 | |
+| id | num | 分组id | |
+| type | num | 0:正片 1:PV&其他 2:OP&ED | |
+| title | str | | |
+
+`episodes`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------|-----|----------|-----|
+| aid | num | 视频av号 | |
+| badge | str | | |
+| badge_info | obj | | |
+| badge_type | num | 0 | |
+| cid | num | 分集cid | |
+| cover | str | 分集封面 | |
+| from | str | bangumi | |
+| id | num | 分集epId | |
+| is_premiere | num | 0 | |
+| long_title | str | 长标题 | |
+| share_url | str | 分集播放页url | |
+| status | num | 2 | |
+| title | str | 短标题 | |
+| vid | str | | |
+
+`badge_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|----------------|-----|-----|-----|
+| bg_color | str | | |
+| bg_color_night | str | | |
+| text | str | | |
+
+`section`数组中的对象:
+
+**同`main_section`对象**
+
+**示例:**
+
+```shell
+curl -L -X GET 'https://api.bilibili.com/pgc/web/season/section?season_id=42290'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "success",
+ "result": {
+ "main_section": {
+ "episodes": [
+ {
+ "aid": 300876247,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 772096113,
+ "cover": "http://i0.hdslb.com/bfs/archive/c09aec64c1787e287b0187498a4443177cc2112c.jpg",
+ "from": "bangumi",
+ "id": 606591,
+ "is_premiere": 0,
+ "long_title": "瞒天过海!罪犯新选组",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep606591",
+ "status": 2,
+ "title": "1",
+ "vid": ""
+ },
+ {
+ "aid": 555940678,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 779868818,
+ "cover": "http://i0.hdslb.com/bfs/archive/52ccef75fc179c7f8a4f2ff989a1249c78f564e0.jpg",
+ "from": "bangumi",
+ "id": 606592,
+ "is_premiere": 0,
+ "long_title": "光芒四射!遗物日本刀",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep606592",
+ "status": 2,
+ "title": "2",
+ "vid": ""
+ },
+ {
+ "aid": 216208730,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 779450100,
+ "cover": "http://i0.hdslb.com/bfs/archive/7eee64ff758fb426b6cd16bc7d525f4de98fd4dc.jpg",
+ "from": "bangumi",
+ "id": 606596,
+ "is_premiere": 0,
+ "long_title": "乔装打扮!潜入花街",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep606596",
+ "status": 2,
+ "title": "3",
+ "vid": ""
+ },
+ {
+ "aid": 386385026,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 786667756,
+ "cover": "http://i0.hdslb.com/bfs/archive/6851be597e1fa496a8b1486000e83654c2fac45c.jpg",
+ "from": "bangumi",
+ "id": 606597,
+ "is_premiere": 0,
+ "long_title": "一探究竟!神秘妖刀",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep606597",
+ "status": 2,
+ "title": "4",
+ "vid": ""
+ },
+ {
+ "aid": 729094525,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 793386614,
+ "cover": "http://i0.hdslb.com/bfs/archive/5dfa30d48188b26c616a05745132a59f6823dade.jpg",
+ "from": "bangumi",
+ "id": 606598,
+ "is_premiere": 0,
+ "long_title": "展现无遗!和尚与医生的决心",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep606598",
+ "status": 2,
+ "title": "5",
+ "vid": ""
+ },
+ {
+ "aid": 599314561,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 798315932,
+ "cover": "http://i0.hdslb.com/bfs/archive/3daae9ee434d335ff9e5a9d8244bc1e6b7ffa8d0.jpg",
+ "from": "bangumi",
+ "id": 606599,
+ "is_premiere": 0,
+ "long_title": "直捣敌巢!败德白川屋",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep606599",
+ "status": 2,
+ "title": "6",
+ "vid": ""
+ },
+ {
+ "aid": 259686552,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 807199844,
+ "cover": "http://i0.hdslb.com/bfs/archive/9ff73932c210abe64373be6f3959c2eee6c7470b.jpg",
+ "from": "bangumi",
+ "id": 606600,
+ "is_premiere": 0,
+ "long_title": "全力阻止!新选组解散",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep606600",
+ "status": 2,
+ "title": "7",
+ "vid": ""
+ },
+ {
+ "aid": 514942530,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 814175863,
+ "cover": "http://i0.hdslb.com/bfs/archive/31a19bf3af61e58f1e8c4a387779fc3272cb47a7.jpg",
+ "from": "bangumi",
+ "id": 606601,
+ "is_premiere": 0,
+ "long_title": "激烈战斗!池田屋事件",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep606601",
+ "status": 2,
+ "title": "8",
+ "vid": ""
+ },
+ {
+ "aid": 515024193,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 819960797,
+ "cover": "http://i0.hdslb.com/bfs/archive/68a0a12a74e99b6cd85cfa0fb7be70d82d8b6558.jpg",
+ "from": "bangumi",
+ "id": 606602,
+ "is_premiere": 0,
+ "long_title": "真心炸裂!人之思绪 鬼之念想",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep606602",
+ "status": 2,
+ "title": "9",
+ "vid": ""
+ },
+ {
+ "aid": 430293537,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 827739564,
+ "cover": "http://i0.hdslb.com/bfs/archive/6411f71c947ba9b011ca0fe2891334147ef1e14d.jpg",
+ "from": "bangumi",
+ "id": 606603,
+ "is_premiere": 0,
+ "long_title": "全力守护!美利坚黑船",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep606603",
+ "status": 2,
+ "title": "10",
+ "vid": ""
+ },
+ {
+ "aid": 858116183,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 833436271,
+ "cover": "http://i0.hdslb.com/bfs/archive/48736284b5cf0f3515cddb95f1c1b8658ec6c5ff.jpg",
+ "from": "bangumi",
+ "id": 606604,
+ "is_premiere": 0,
+ "long_title": "勇往直前!京都大决战",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep606604",
+ "status": 2,
+ "title": "11",
+ "vid": ""
+ },
+ {
+ "aid": 773279679,
+ "badge": "会员",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": "会员"
+ },
+ "badge_type": 0,
+ "cid": 840839493,
+ "cover": "http://i0.hdslb.com/bfs/archive/316f7c8a750699bf53ee44d43669fabb0271be86.jpg",
+ "from": "bangumi",
+ "id": 606605,
+ "is_premiere": 0,
+ "long_title": "替身传说!罪犯新选组",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep606605",
+ "status": 13,
+ "title": "12",
+ "vid": ""
+ }
+ ],
+ "id": 81861,
+ "title": "正片",
+ "type": 0
+ },
+ "section": [
+ {
+ "episodes": [
+ {
+ "aid": 898153042,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 766274696,
+ "cover": "http://i0.hdslb.com/bfs/archive/ac27ed20081e99fc36720ef0714f81d8df2c279a.png",
+ "from": "bangumi",
+ "id": 576387,
+ "is_premiere": 0,
+ "long_title": "",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep576387",
+ "status": 2,
+ "title": "PV",
+ "vid": ""
+ },
+ {
+ "aid": 215937670,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 773008915,
+ "cover": "http://i0.hdslb.com/bfs/archive/0a6b589e9175dfee1d9699fb55c5c0677941994a.png",
+ "from": "bangumi",
+ "id": 606995,
+ "is_premiere": 0,
+ "long_title": "",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep606995",
+ "status": 2,
+ "title": "西川贵教",
+ "vid": ""
+ },
+ {
+ "aid": 813460609,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 773007362,
+ "cover": "http://i0.hdslb.com/bfs/archive/6c8f4136731c1c2f8171f5c006f79f0603d11bdf.png",
+ "from": "bangumi",
+ "id": 606998,
+ "is_premiere": 0,
+ "long_title": "",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep606998",
+ "status": 2,
+ "title": "幕末替身声优采访",
+ "vid": ""
+ },
+ {
+ "aid": 556287340,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 785468206,
+ "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png",
+ "from": "bangumi",
+ "id": 660464,
+ "is_premiere": 0,
+ "long_title": "",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep660464",
+ "status": 2,
+ "title": "声优对谈 01",
+ "vid": ""
+ },
+ {
+ "aid": 984099086,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 792637456,
+ "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png",
+ "from": "bangumi",
+ "id": 669591,
+ "is_premiere": 0,
+ "long_title": "",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep669591",
+ "status": 2,
+ "title": "声优对谈 02",
+ "vid": ""
+ },
+ {
+ "aid": 259364452,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 798995285,
+ "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png",
+ "from": "bangumi",
+ "id": 670446,
+ "is_premiere": 0,
+ "long_title": "",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep670446",
+ "status": 2,
+ "title": "声优对谈 03",
+ "vid": ""
+ },
+ {
+ "aid": 772146427,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 808201440,
+ "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png",
+ "from": "bangumi",
+ "id": 672539,
+ "is_premiere": 0,
+ "long_title": "",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep672539",
+ "status": 2,
+ "title": "声优对谈 04",
+ "vid": ""
+ },
+ {
+ "aid": 687381109,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 814826609,
+ "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png",
+ "from": "bangumi",
+ "id": 676133,
+ "is_premiere": 0,
+ "long_title": "",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep676133",
+ "status": 2,
+ "title": "声优对谈 05",
+ "vid": ""
+ },
+ {
+ "aid": 730289528,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 826951152,
+ "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png",
+ "from": "bangumi",
+ "id": 676134,
+ "is_premiere": 0,
+ "long_title": "",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep676134",
+ "status": 2,
+ "title": "声优对谈 07",
+ "vid": ""
+ },
+ {
+ "aid": 602813211,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 826951370,
+ "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png",
+ "from": "bangumi",
+ "id": 676135,
+ "is_premiere": 0,
+ "long_title": "",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep676135",
+ "status": 2,
+ "title": "声优对谈 08",
+ "vid": ""
+ },
+ {
+ "aid": 515295782,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 826951255,
+ "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png",
+ "from": "bangumi",
+ "id": 676137,
+ "is_premiere": 0,
+ "long_title": "",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep676137",
+ "status": 2,
+ "title": "声优对谈 09",
+ "vid": ""
+ },
+ {
+ "aid": 815269384,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 826951558,
+ "cover": "http://i0.hdslb.com/bfs/archive/77564ca30f1a4d3a64cfc292a7fd989c09a30027.png",
+ "from": "bangumi",
+ "id": 676138,
+ "is_premiere": 0,
+ "long_title": "",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep676138",
+ "status": 2,
+ "title": "声优对谈 10",
+ "vid": ""
+ }
+ ],
+ "id": 82126,
+ "title": "PV&其他",
+ "type": 1
+ },
+ {
+ "episodes": [
+ {
+ "aid": 556712105,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 794382832,
+ "cover": "http://i0.hdslb.com/bfs/archive/1f4ab8b9af0689900e7c486c4e676e27988091be.png",
+ "from": "bangumi",
+ "id": 670062,
+ "is_premiere": 0,
+ "long_title": "",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep670062",
+ "status": 2,
+ "title": "NCOP",
+ "vid": ""
+ },
+ {
+ "aid": 259129266,
+ "badge": "",
+ "badge_info": {
+ "bg_color": "#FB7299",
+ "bg_color_night": "#BB5B76",
+ "text": ""
+ },
+ "badge_type": 0,
+ "cid": 794382772,
+ "cover": "http://i0.hdslb.com/bfs/archive/d08738a452187a0229c3b99beaf1cb4ff868a030.png",
+ "from": "bangumi",
+ "id": 670063,
+ "is_premiere": 0,
+ "long_title": "",
+ "share_url": "https://www.bilibili.com/bangumi/play/ep670063",
+ "status": 2,
+ "title": "NCED",
+ "vid": ""
+ }
+ ],
+ "id": 85065,
+ "title": "OP&ED",
+ "type": 2
+ }
+ ]
+ }
+}
+```
+
+
diff --git a/docs/bangumi/timeline.md b/docs/bangumi/timeline.md
new file mode 100644
index 0000000..6742cb7
--- /dev/null
+++ b/docs/bangumi/timeline.md
@@ -0,0 +1,799 @@
+# 番剧或影视时间线
+
+## 获取番剧或影视时间线
+
+> https://api.bilibili.com/pgc/web/timeline
+*请求方式:GET*
+
+鉴权方式:Cookie(SESSDATA)或APP
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ------------ | ------ | ----------------------------- |
+| types | str | 类别 | 必要 | 1:`番剧` 3:`电影` 4:`国创` |
+| before | num | 开始于前几日 | 必要 | ∈N∩[0,7] |
+| after | num | 结束于后几日 | 必要 | ∈N∩[0,7] |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----- | -------- | ------------------------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 -404:错误 |
+| message | str | 错误信息 | 默认为success |
+| result | array | 信息本体 | |
+
+`result`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------------------- | ---- |
+| 0 | obj | `before`天前信息 | |
+| n | obj | 从`before`天前开始第n天信息 | |
+| …… | obj | …… | |
+
+`result`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ----- | -------------- | ----------------- |
+| date | str | 当日日期 | |
+| date_ts | num | 当日日期时间戳 | |
+| day_of_week | num | 一周中第几天 | ∈N∩[1,7] |
+| episodes | array | 剧集列表 | |
+| is_today | num | 是否今日 | |
+
+`result`数组中的对象中的`episodes`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------- | ---- |
+| 0 | obj | 剧集1 | |
+| n | obj | 剧集(n+1) | |
+| …… | obj | …… | |
+
+`episodes`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | -------------- | --------------- |
+| cover | str | 封面图url | |
+| delay | num | 是否推迟 | |
+| delay_id | num | 推迟一话epid | |
+| delay_index | str | 推迟一话名称 | |
+| delay_reason | str | 推迟原因 | |
+| ep_cover | str | 最新一话图url | |
+| episode_id | num | 最新一话的epid | |
+| pub_index | str | 最新一话名称 | |
+| pub_time | str | 发布时间 | |
+| pub_ts | num | 发布时间戳 | |
+| published | num | 是否已发布 | |
+| follows | str | - | |
+| plays | str | - | |
+| season_id | num | 剧集ssid | |
+| square_cover | str | 缩略图url | |
+| title | str | 剧集标题 | |
+
+**示例:**
+
+查询从`3`天前到`7`天后的`番剧`时间轴
+
+```shell
+curl -G 'https://api.bilibili.com/pgc/web/timeline' \
+--data-urlencode 'types=1' \
+--data-urlencode 'before=3' \
+--data-urlencode 'after=7' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "success",
+ "result": [
+ {
+ "date": "5-15",
+ "date_ts": 1652544000,
+ "day_of_week": 7,
+ "episodes": [
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/9918f6e67c26d6bd1ddad8dab70bcc7af3bfae9b.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/archive/0067a09911e2fa252a3ef5126d8dc5392189dd8a.jpg",
+ "episode_id": 508403,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第3话",
+ "pub_time": "01:30",
+ "pub_ts": 1652549400,
+ "published": 1,
+ "season_id": 41416,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/926fd09277605204c2f7c94b322de3156ef9da52.png",
+ "title": "式守同学不只可爱而已"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/3a9815ca239735c51fc7daf2399c3721bbe00160.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/archive/56e8d4b13dac855c51060dcda286be049fde4a46.png",
+ "episode_id": 466766,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第6话",
+ "pub_time": "11:00",
+ "pub_ts": 1652583600,
+ "published": 1,
+ "season_id": 41005,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/b3dd92da1ca35758f329fa5aa649991b118a98ca.png",
+ "title": "鬼灭之刃 无限列车篇 中配版"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/71d54cae830d32a5af776dcc46632146fbdba868.jpg",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/archive/00c1dff8457183671f0402e0a2826313a1994a9b.jpg",
+ "episode_id": 480434,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第240话",
+ "pub_time": "17:30",
+ "pub_ts": 1652607000,
+ "published": 1,
+ "season_id": 5978,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/3121473d5dd03a9bcccb8490034207e724e731b3.jpg",
+ "title": "博人传 火影忍者新时代"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/91e75030be41d67b9f19b96bb512b0c98ae781bd.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/archive/e701f39cef52e6b0737e3463faf7cb0cee61e935.jpg",
+ "episode_id": 510647,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第4话",
+ "pub_time": "20:00",
+ "pub_ts": 1652616000,
+ "published": 1,
+ "season_id": 41557,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/4329384cba4ab0390eae1a84a719e4649bf61cfb.png",
+ "title": "这个治疗有点烦"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/c9723d8c77d881a8debba2852d580e97826b43d0.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/archive/2a01ab590fd8b1331096b94cc6fc09dbdad1bbec.png",
+ "episode_id": 478918,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第7话",
+ "pub_time": "21:00",
+ "pub_ts": 1652619600,
+ "published": 1,
+ "season_id": 41591,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/1ffa24e100583c3aa96812dea680943291c5c384.jpg",
+ "title": "恋爱游戏世界对路人角色很不友好"
+ }
+ ],
+ "is_today": 0
+ },
+ {
+ "date": "5-16",
+ "date_ts": 1652630400,
+ "day_of_week": 1,
+ "episodes": [
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/e468c854628b97b5373baaf4c43e1346a9806baa.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/archive/219161297558531d2475da73e863dc237e83baa1.png",
+ "episode_id": 511342,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第1话",
+ "pub_time": "20:00",
+ "pub_ts": 1652702400,
+ "published": 1,
+ "season_id": 41419,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/75a291010c128ce2de17267fd2a4842d19898236.png",
+ "title": "魔法使黎明期"
+ }
+ ],
+ "is_today": 0
+ },
+ {
+ "date": "5-17",
+ "date_ts": 1652716800,
+ "day_of_week": 2,
+ "episodes": [
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/4e6c505b1b1631c542ea76c3da1ce08bb43faad6.jpg",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/archive/bf37e15c52889a7a9dca16346354bb7c6663c899.png",
+ "episode_id": 510132,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第146话",
+ "pub_time": "18:00",
+ "pub_ts": 1652781600,
+ "published": 1,
+ "season_id": 23841,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/5c2f289eac0ec49bc5e6b9483f4191c42ffa2254.jpg",
+ "title": "美妙☆频道"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/9eef1df9ab157be52d2c4d70d3500442f00cafc3.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/archive/d9831c3170bcbba38edc2204ee5059f583823913.png",
+ "episode_id": 509043,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第11话",
+ "pub_time": "18:00",
+ "pub_ts": 1652781600,
+ "published": 1,
+ "season_id": 38950,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/13fd7c96659a20c61409e155a2a913a59348d122.png",
+ "title": "魔法纪录 魔法少女小圆外传 第二季"
+ }
+ ],
+ "is_today": 0
+ },
+ {
+ "date": "5-18",
+ "date_ts": 1652803200,
+ "day_of_week": 3,
+ "episodes": [
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/fba0229f1a6eec6ed692b7ae91c634d5cbde0727.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/0ebefe529449ff98d544395d1576402bb0d0ae5b.png",
+ "episode_id": 510498,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第7话",
+ "pub_time": "21:00",
+ "pub_ts": 1652878800,
+ "published": 0,
+ "season_id": 41413,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/247f8326019e035338529306e94baea3336c43b4.png",
+ "title": "盾之勇者成名录 第二季"
+ }
+ ],
+ "is_today": 1
+ },
+ {
+ "date": "5-19",
+ "date_ts": 1652889600,
+ "day_of_week": 4,
+ "episodes": [
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/99277ce3f41d1cb4dcda9f6010ebe9c9e6d345e5.jpg",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/c989d496e3a075e8bc134b0d4d53d6ca5c2ae634.jpg",
+ "episode_id": 510760,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第2话",
+ "pub_time": "12:00",
+ "pub_ts": 1652932800,
+ "published": 0,
+ "season_id": 41417,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/ef45828cb99309169e95d1bf54ec833d7968bf22.png",
+ "title": "夏日重现"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/1cd26af47cf9d9ca045ec36f56ce14a66867438d.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/3dc8d348937528779b7ad9a3070d37276518080f.png",
+ "episode_id": 399655,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第50话",
+ "pub_time": "18:00",
+ "pub_ts": 1652954400,
+ "published": 0,
+ "season_id": 38353,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/4bd7b0a4c270ce62ca2adf3e18487a96e4fde92e.png",
+ "title": "通灵王"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/5f5b16bc8edd1310fbf0ac8bce04a11144dc858e.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/aed167a32445ed294ea75ed674442c766d56cb2a.png",
+ "episode_id": 511494,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第4话",
+ "pub_time": "23:00",
+ "pub_ts": 1652972400,
+ "published": 0,
+ "season_id": 41422,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/924c550415ccdd142145dbf102bd81fcbb018ffd.png",
+ "title": "骸骨骑士大人奇幻世界冒险中"
+ }
+ ],
+ "is_today": 0
+ },
+ {
+ "date": "5-20",
+ "date_ts": 1652976000,
+ "day_of_week": 5,
+ "episodes": [
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/a29f3b00a94d1b4a029054f72963cc10d98bae99.jpg",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/4b9b98677b039b9126614f5a5259aa1484cea227.jpg",
+ "episode_id": 510757,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第2话",
+ "pub_time": "01:28",
+ "pub_ts": 1652981280,
+ "published": 0,
+ "season_id": 41520,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/2a0ca7be587039eef380f802f8ae71bd21d2ea2c.png",
+ "title": "街角魔族 第二季"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/ecb52c79def9f5a6099c5a0770f56e20479fb008.jpg",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/36d3079e1b24395b07f9f95128adc9568459c3e5.png",
+ "episode_id": 478238,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第17话",
+ "pub_time": "02:25",
+ "pub_ts": 1652984700,
+ "published": 0,
+ "season_id": 40873,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/13f437706d3f27dee7566a5e489928605663e40f.png",
+ "title": "川尻小玉的懒散生活"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/a7517ca25c5c7a132a16f589e3a3c4d9f49af196.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/17f34f6c51b8b9371af1998f0612d51f0ba03df2.png",
+ "episode_id": 508842,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第6话",
+ "pub_time": "07:00",
+ "pub_ts": 1653001200,
+ "published": 0,
+ "season_id": 41534,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/3267da68f7f832ccfc7eaa77c6ab3fb806d2de98.png",
+ "title": "银河英雄传说:全新命题 激战"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/fecb68763f24d371167389abedf05742b0bf024f.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/f4116e5dcc44d6104cd72d9e0e833cde3959a835.png",
+ "episode_id": 476164,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第32话",
+ "pub_time": "18:25",
+ "pub_ts": 1653042300,
+ "published": 0,
+ "season_id": 38366,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/56b8e4369871fc0c55bfa9df3f3f8002d40f0691.png",
+ "title": "妖怪手表"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/81c9dc929e6071a2d42f1b5a207bbcef4a1aead7.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/7c62ad9f559ee6b0fafc1c08d990636c21c4fa8d.png",
+ "episode_id": 510653,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第7话",
+ "pub_time": "21:30",
+ "pub_ts": 1653053400,
+ "published": 0,
+ "season_id": 41432,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/930ae7ff644dc31ada9abcb3ea30fee5fbc6f397.png",
+ "title": "约会大作战 第四季"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/d464543dd6720efd43e5487acee74b646423b4d1.jpg",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/ca7a19d51feb54162d8f286af416aa5a804e72c4.png",
+ "episode_id": 511497,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第7话",
+ "pub_time": "22:00",
+ "pub_ts": 1653055200,
+ "published": 0,
+ "season_id": 41418,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/ab50117450baffba62c71c80052ecbad1842a1f3.png",
+ "title": "恋爱要在世界征服后"
+ }
+ ],
+ "is_today": 0
+ },
+ {
+ "date": "5-21",
+ "date_ts": 1653062400,
+ "day_of_week": 6,
+ "episodes": [
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/68aee547fc85b1eab8be3d5c7e946276e4252b79.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/75583ce830522c6fd391cd6ffac31e3ab96db50e.png",
+ "episode_id": 510568,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第8话",
+ "pub_time": "00:30",
+ "pub_ts": 1653064200,
+ "published": 0,
+ "season_id": 39725,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/a4fa3f4ecaa4efc883aa1ef2ca7ed736edb38b8c.png",
+ "title": "理科生坠入情网,故尝试证明。 第二季"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/f711a34e0f18293ba5068fd85d8de891bb01c2be.jpg",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/aa3e0fc7ecb422c7c8ed107267befaa18f6dcf89.png",
+ "episode_id": 510935,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第8话",
+ "pub_time": "00:30",
+ "pub_ts": 1653064200,
+ "published": 0,
+ "season_id": 41506,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/d2dea82606b8dd0ee7934c62dbc7016b0a17255f.png",
+ "title": "处刑少女的生存之道"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/91ec1f4bc4af307dbfbd68c9ba6d838b27adee0f.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/6d9499e4e5453e5e353939980524102c3b707edb.png",
+ "episode_id": 477129,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第8话",
+ "pub_time": "01:25",
+ "pub_ts": 1653067500,
+ "published": 0,
+ "season_id": 39180,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/f23cf19d1d6068e83edfd6b3d207ce692ef58ef3.png",
+ "title": "测不准的阿波连同学"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/bad807ac5a8d4094ead26c08ec2d9b97dbb8c4a1.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/8e563a29a9fb6b91df791a12eb5f869d038fc1e9.png",
+ "episode_id": 510677,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第2话",
+ "pub_time": "02:00",
+ "pub_ts": 1653069600,
+ "published": 0,
+ "season_id": 41533,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/4ef341fa95646a7c2549e08ba00358b411fba0ee.png",
+ "title": "舞动不止"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/4ab5cf1efbd1c5883b8f0580cb0304f5452c4665.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/8ea1f90444d04a0b989584df9f18e59a824b0e90.png",
+ "episode_id": 341403,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第71话",
+ "pub_time": "09:30",
+ "pub_ts": 1653096600,
+ "published": 0,
+ "season_id": 34425,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/ae36d43ebe7ea7176d18bab794de3d8930284feb.png",
+ "title": "勇者斗恶龙 达伊的大冒险"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/23f393513ab8fdfbb351aa80e8b7423e7361ad98.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/d470a1bf53c96210f2238024dc1947f52cb58f3a.png",
+ "episode_id": 510681,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第2话",
+ "pub_time": "18:00",
+ "pub_ts": 1653127200,
+ "published": 0,
+ "season_id": 41535,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/f3f69f8747e8464ba46b9bbe24678966809c8021.png",
+ "title": "Love All Play热血羽毛球"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/38e2a273f528fd01c34f1fc4df0f69c64487efad.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/6c108526eade13d04882b803f1d1e0dfe2a1886e.png",
+ "episode_id": 459329,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第1101话",
+ "pub_time": "19:30",
+ "pub_ts": 1653132600,
+ "published": 0,
+ "season_id": 33378,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/ecc9a64f3f43eb00ee2bf1549b6ab76182cf5f8b.png",
+ "title": "名侦探柯南"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/f641f81aa1933d73c91d5ef76b525acbcdbcf3e7.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/c7ccf71fcf65b4e5655403b01a7af3529d2891e8.png",
+ "episode_id": 510754,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第10话",
+ "pub_time": "20:00",
+ "pub_ts": 1653134400,
+ "published": 0,
+ "season_id": 39433,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/1b4cc42a3909ad2d03563d3163b105c6cad80d20.png",
+ "title": "鬼灭之刃 游郭篇"
+ }
+ ],
+ "is_today": 0
+ },
+ {
+ "date": "5-22",
+ "date_ts": 1653148800,
+ "day_of_week": 7,
+ "episodes": [
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/3a9815ca239735c51fc7daf2399c3721bbe00160.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/30908825b7c8076b9d7b58d8cd949a87f48866e6.png",
+ "episode_id": 466767,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第7话",
+ "pub_time": "11:00",
+ "pub_ts": 1653188400,
+ "published": 0,
+ "season_id": 41005,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/b3dd92da1ca35758f329fa5aa649991b118a98ca.png",
+ "title": "鬼灭之刃 无限列车篇 中配版"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/71d54cae830d32a5af776dcc46632146fbdba868.jpg",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/3baf5335e3f1df882b54d69c0c6c9ffa76069eef.png",
+ "episode_id": 480435,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第241话",
+ "pub_time": "17:30",
+ "pub_ts": 1653211800,
+ "published": 0,
+ "season_id": 5978,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/3121473d5dd03a9bcccb8490034207e724e731b3.jpg",
+ "title": "博人传 火影忍者新时代"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/91e75030be41d67b9f19b96bb512b0c98ae781bd.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/cff6617c1c7e28f8cd9db3d33d5366a5029e3aa9.png",
+ "episode_id": 510648,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第5话",
+ "pub_time": "20:00",
+ "pub_ts": 1653220800,
+ "published": 0,
+ "season_id": 41557,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/4329384cba4ab0390eae1a84a719e4649bf61cfb.png",
+ "title": "这个治疗有点烦"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/c9723d8c77d881a8debba2852d580e97826b43d0.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/c91b2b96c272eb28aa3dd74aa58fc272fc62d577.png",
+ "episode_id": 478919,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第8话",
+ "pub_time": "21:00",
+ "pub_ts": 1653224400,
+ "published": 0,
+ "season_id": 41591,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/1ffa24e100583c3aa96812dea680943291c5c384.jpg",
+ "title": "恋爱游戏世界对路人角色很不友好"
+ }
+ ],
+ "is_today": 0
+ },
+ {
+ "date": "5-23",
+ "date_ts": 1653235200,
+ "day_of_week": 1,
+ "episodes": [
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/e468c854628b97b5373baaf4c43e1346a9806baa.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/26f87214a2481680a93bfda294ac080c0b336a40.png",
+ "episode_id": 511343,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第2话",
+ "pub_time": "20:00",
+ "pub_ts": 1653307200,
+ "published": 0,
+ "season_id": 41419,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/75a291010c128ce2de17267fd2a4842d19898236.png",
+ "title": "魔法使黎明期"
+ }
+ ],
+ "is_today": 0
+ },
+ {
+ "date": "5-24",
+ "date_ts": 1653321600,
+ "day_of_week": 2,
+ "episodes": [
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/4e6c505b1b1631c542ea76c3da1ce08bb43faad6.jpg",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/4e6c505b1b1631c542ea76c3da1ce08bb43faad6.jpg",
+ "episode_id": 510133,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第147话",
+ "pub_time": "18:00",
+ "pub_ts": 1653386400,
+ "published": 0,
+ "season_id": 23841,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/5c2f289eac0ec49bc5e6b9483f4191c42ffa2254.jpg",
+ "title": "美妙☆频道"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/9eef1df9ab157be52d2c4d70d3500442f00cafc3.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/a651c55bb430cdea19d5f4253969d1f7b83567c7.png",
+ "episode_id": 509044,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第12话",
+ "pub_time": "18:00",
+ "pub_ts": 1653386400,
+ "published": 0,
+ "season_id": 38950,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/13fd7c96659a20c61409e155a2a913a59348d122.png",
+ "title": "魔法纪录 魔法少女小圆外传 第二季"
+ }
+ ],
+ "is_today": 0
+ },
+ {
+ "date": "5-25",
+ "date_ts": 1653408000,
+ "day_of_week": 3,
+ "episodes": [
+ {
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/fba0229f1a6eec6ed692b7ae91c634d5cbde0727.png",
+ "delay": 0,
+ "delay_id": 0,
+ "delay_index": "",
+ "delay_reason": "",
+ "ep_cover": "http://i0.hdslb.com/bfs/bangumi/image/0ebefe529449ff98d544395d1576402bb0d0ae5b.png",
+ "episode_id": 510499,
+ "follows": "-",
+ "plays": "-",
+ "pub_index": "第8话",
+ "pub_time": "21:00",
+ "pub_ts": 1653483600,
+ "published": 0,
+ "season_id": 41413,
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/247f8326019e035338529306e94baea3336c43b4.png",
+ "title": "盾之勇者成名录 第二季"
+ }
+ ],
+ "is_today": 0
+ }
+ ]
+}
+```
+
+
\ No newline at end of file
diff --git a/docs/bangumi/videostream_url.md b/docs/bangumi/videostream_url.md
new file mode 100644
index 0000000..e8a53da
--- /dev/null
+++ b/docs/bangumi/videostream_url.md
@@ -0,0 +1,359 @@
+# 视频流URL
+
+
+
+B站的番剧视频为http流媒体,需要对应的api以视频id获取取流url,并进行取流
+
+## qn视频清晰度标识
+
+**注:该值在dash模式且非下载模式时无效**
+
+| 值 | 含义 | 备注 |
+|-----|-------------|-----------------------------------------------------------------------------|
+| 6 | 240P 极速 | 仅mp4方式支持 |
+| 16 | 360P 流畅 | |
+| 32 | 480P 清晰 | |
+| 64 | 720P 高清 | web端默认值 B站前端需要登录才能选择,但是直接发送请求可以不登录就拿到720P的取流地址 **无720P时则为720P60** |
+| 74 | 720P60 高帧率 | 需要认证登录账号 |
+| 80 | 1080P 高清 | TV端与APP端默认值 需要认证登录账号 |
+| 100 | 智能修复 | 仅支持dash方式 需要`fnval&12240=12240` 需要认证登录账号 |
+| 112 | 1080P+ 高码率 | 大多情况需求认证大会员账号 |
+| 116 | 1080P60 高帧率 | 大多情况需求认证大会员账号 |
+| 120 | 4K 超清 | 需要`fnval&128=128`且`fourk=1` 大多情况需求认证大会员账号 |
+| 125 | HDR 真彩色 | 仅支持dash方式 需要`fnval&64=64` 大多情况需求认证大会员账号 |
+| 126 | 杜比视界 | 仅支持dash方式 需要`fnval&512=512` 大多情况需求认证大会员账号 |
+| 127 | 8K 超高清 | 仅支持dash方式 需要`fnval&1024=1024` 大多情况需求认证大会员账号 |
+
+例如:请求1080P+的视频,则`qn=112`
+
+## fnver视频流版本标识
+
+目前该值恒为0,即`fnver=0`
+
+## fnval视频流格式标识
+
+该代码为二进制属性位,如需组合功能需要使用`OR`运算结合一下数值
+
+| 值 | 含义 | 备注 |
+|------|-------------|-------------------------------------------------------------|
+| 0 | flv格式 | 仅H.264编码 部分老视频存在分段现象 与mp4格式及dash格式互斥 |
+| 1 | mp4格式 | 仅H.264编码 不存在视频分段 与flv格式及dash格式互斥 |
+| 16 | dash格式 | H.264编码或H.265编码 部分老视频的清晰度上限低于flv格式 与mp4格式及flv格式互斥 |
+| 64 | 是否需求 HDR 视频 | 必须为dash格式 需要`qn=125` 大多情况需求认证大会员账号 |
+| 128 | 是否需求 4K 分辨率 | 该值与`fourk`字段协同作用 需要`qn=120` 大多情况需求认证大会员账号 |
+| 256 | 是否需求杜比音频 | 必须为dash格式 大多情况需求认证大会员账号 |
+| 512 | 是否需求杜比视界 | 必须为dash格式 大多情况需求认证大会员账号 |
+| 1024 | 是否需求 8K 分辨率 | 必须为dash格式 需要`qn=127` 大多情况需求认证大会员账号 |
+| 2048 | 是否需求 av1 编码 | 必须为dash格式 |
+| 12240 | 是否需求智能修复 | 必须为dash格式 需要认证大会员账号 |
+
+例如:请求dash格式且需要HDR的视频流,则`fnval=16|64=80`
+
+## 视频编码代码
+
+| 值 | 含义 | 备注 |
+|-----|--------|----------|
+| 7 | AVC编码 | 8K视频无此格式 |
+| 12 | HEVC编码 | |
+| 13 | AV1编码 | |
+
+## 视频伴音音质代码
+
+| 值 | 含义 |
+|-------|------|
+| 30216 | 64K |
+| 30232 | 132K |
+| 30280 | 192K |
+
+## 获取番剧视频流URL
+
+> https://api.bilibili.com/pgc/player/web/playurl
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+---
+
+关于视频流会员鉴权:
+
+- 获取480P及以上清晰度视频时需要登录(Cookie)
+
+- 获取高帧率(1080P60)/高码率(1080P+)视频时需要有大会员的账号登录(Cookie)
+
+- 获取会员专属番剧视频时需要登录(Cookie)
+
+---
+
+获取的url有效时间为120min,超时失效需要重新获取
+
+**部分视频**会有**分段**,需要特别注意
+
+若视频有分P,仅为单P的视频的url,换P则需更换cid重新获取
+
+需要设置Referer为`https://www.bilibili.com`,否则无法获取1080清晰度以上的流信息。
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|---------------|-----|----------|--------|--------------------------------------------------------------------------------------------------|
+| avid | num | 稿件avid | 非必要 | |
+| bvid | str | 稿件bvid | 非必要 | |
+| ep_id | num | 稿件epid | 必要(可选) | ep_id与cid任选一个 |
+| cid | num | 视频cid | 必要(可选) | ep_id与cid任选一个 |
+| qn | num | 视频清晰度选择 | 非必要 | 未登录默认32(480P) 登录默认64(720P) **值含义见上表** 注:dash方式无效 |
+| fnval | num | 视频获取方式选择 | 非必要 | 默认为0 0 2:flv方式(可能会有分段) 1:低清mp4方式(仅240P与360P,且限速65K/s) 16 80:dash方式(音视频分流,支持H.265) |
+| fnver | num | 0 | 非必要 | 固定为0 |
+| fourk | num | 是否允许4K视频 | 非必要 | 默认为0 画质最高1080P:0 画质最高4K:1 |
+| session | str | | 非必要 | 从视频播放页的网页源码中获取 |
+| from_client | str | BROWSER | 非必要 | |
+| drm_tech_type | num | 2 | 非必要 | |
+
+
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----------------------|------|------------------------------------|
+| code | num | 返回值 | 0:成功 -400:请求错误 -404:无视频 |
+| message | str | 错误信息 | 成功为success |
+| result | 有效时:obj 无效时:null | 数据本体 | |
+
+`result`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------------------|-------|-----------------------------------|----------------------------|
+| code | num | 0 | 作用尚不明确 |
+| is_preview | num | 0 | 作用尚不明确 |
+| fnver | num | 请求时提供的fnver | |
+| fnval | num | 请求时提供的fnval | |
+| video_project | bool | true | |
+| type | str | 视频流类型(DASH、FLV、MP4) | DASH |
+| bp | num | 是否可以承包 | 0 |
+| vip_type | num | 当前用户大会员类型 | |
+| vip_status | num | 当前用户大会员状态 | |
+| is_drm | bool | false | |
+| no_rexcode | num | 0 | |
+| has_paid | bool | false | |
+| status | num | 2 | |
+| from | str | local | 作用尚不明确 |
+| result | str | suee | 作用尚不明确 |
+| message | str | 空 | 作用尚不明确 |
+| quality | num | 当前的视频分辨率代码 | **值含义见上表** |
+| format | str | 视频格式 | |
+| timelength | num | 视频长度 | 单位为毫秒 不同分辨率/格式可能有略微差异 |
+| accept_format | str | 视频支持的全部格式 | 每项用`,`分隔 |
+| accept_description | array | 视频支持的分辨率列表 | |
+| accept_quality | array | 视频支持的分辨率代码列表 | **值含义见上表** |
+| video_codecid | num | 默认选择视频流的编码id | 见**视频编码代码** |
+| seek_param | str | 固定值:start | 作用尚不明确 |
+| seek_type | str | offset(dash、flv) second(mp4) | 作用尚不明确 |
+| durl | array | 视频分段 | **注:仅flv/mp4存在此项** |
+| dash | obj | dash音视频流信息 | **注:仅dash存在此项** |
+| support_formats | array | 支持格式的详细信息 | |
+| clip_info_list | array | | 空,待补充 |
+| record_info | obj | 备案登记信息 | |
+
+`result`中的`accept_description`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|------------|-----|
+| 0 | str | 分辨率名称1 | |
+| n | str | 分辨率名称(n+1) | |
+| …… | str | …… | |
+
+`result`中的`accept_quality`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|------------|-----|
+| 0 | str | 分辨率代码1 | |
+| n | str | 分辨率代码(n+1) | |
+| …… | str | …… | |
+
+`result`中的`support_formats`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|---------------|-----|
+| 0 | obj | 播放格式详细信息1 | |
+| n | obj | 播放格式详细信息(n+1) | |
+| …… | obj | …… | |
+
+`support_formats`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-----------------|-------|---------|-----|
+| quality | num | 视频清晰度代码 | |
+| format | str | 视频格式 | |
+| new_description | str | 格式描述 | |
+| description | str | 格式描述 | |
+| display_desc | str | 格式描述 | |
+| superscript | str | (?) | |
+| codecs | array | 编码格式列表 | |
+| need_login | bool | 需要登录 | |
+| need_vip | bool | 需要大会员 | |
+
+`support_formats`中的`codecs`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|------|-----------------------------|
+| 0 | str | 编码格式 | 如:avc1.640032,意为AVC编码 |
+| 1 | str | 编码格式 | 如:hev1.1.6.L153.90,意为HEVC编码 |
+
+`result`中的`record_info`对象:
+
+| 项 | 类型 | 内容 | 备注 |
+|-------------|-----|------|-----------------------|
+| record_icon | str | 空串 | |
+| record | str | 显示文案 | 登记号:10417060172092207 |
+
+---
+
+**flv/mp4方式:**
+
+`result`中的`durl`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|-------------|------------------|
+| 0 | obj | 视频分段1信息 | **注:仅flv方式具有分段** |
+| n | obj | 视频分段(n+1)信息 | |
+| …… | obj | …… | |
+
+`durl`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------------|-------|--------|-----------------------------------|
+| order | num | 视频分段序号 | 某些视频会分为多个片段(从1顺序增长) |
+| length | num | 视频长度 | 单位为毫秒 |
+| size | num | 视频大小 | 单位为Byte |
+| vhead | str | 空 | 作用尚不明确 |
+| url | str | 视频流url | **注:url内容存在转义符** 有效时间为120min |
+| backup_url | array | 备用视频流 | |
+
+`durl`数组中的对象中的`backup_url`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|----------------|-----------------------------------|
+| 0 | str | 备用视频流url 1 | **注:url内容存在转义符** 有效时间为120min |
+| n | str | 备用视频流url (n+1) | |
+| …… | str | …… | |
+
+**示例:**
+
+**视频无分段时:**
+
+获取视频`ep85046`/`av2325306`中的1P(cid=`3629601`)的视频流url,清晰度为480p,使用flv方式获取
+
+avid/epid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/pgc/player/web/playurl' \
+--data-urlencode 'avid=2325306' \
+--data-urlencode 'cid=3629601' \
+--data-urlencode 'ep_id=85046' \
+-b 'SESSDATA=xxx'
+```
+https://api.bilibili.com/pgc/player/web/playurl?avid=2325306&cid=3629601&ep_id=85046
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "success",
+ "result": {
+ "accept_format": "flv480,mp4",
+ "code": 0,
+ "seek_param": "start",
+ "is_preview": 0,
+ "fnval": 0,
+ "video_project": true,
+ "fnver": 0,
+ "type": "FLV",
+ "bp": 0,
+ "result": "suee",
+ "seek_type": "offset",
+ "from": "local",
+ "video_codecid": 7,
+ "record_info": {
+ "record_icon": "",
+ "record": ""
+ },
+ "durl": [
+ {
+ "size": 111138876,
+ "ahead": "",
+ "length": 1394090,
+ "vhead": "",
+ "backup_url": [
+ "https://upos-sz-mirrorcoso1.bilivideo.com/upgcxcode/01/96/3629601/3629601_da8-1-32.flv?e=ig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1656098195&gen=playurlv2&os=coso1bv&oi=2946990771&trid=a1db84b216ea45dd89225f02a09093fdp&mid=0&platform=pc&upsig=878be08cc0e6bdea705952529e7e6785&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&agrr=1&bw=79726&logo=40000000",
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/01/96/3629601/3629601_da8-1-32.flv?e=ig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1656098195&gen=playurlv2&os=cosbv&oi=2946990771&trid=a1db84b216ea45dd89225f02a09093fdp&mid=0&platform=pc&upsig=8c31064c84d8e981704815992cfe315c&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&agrr=1&bw=79726&logo=40000000"
+ ],
+ "url": "https://cn-lnsy-cu-v-02.bilivideo.com/upgcxcode/01/96/3629601/3629601_da8-1-32.flv?e=ig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1656098195&gen=playurlv2&os=bcache&oi=2946990771&trid=0000a1db84b216ea45dd89225f02a09093fdp&mid=0&platform=pc&upsig=7a5c4f25b9056359127191390a73bedc&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&cdnid=3281&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=79726&logo=80000000",
+ "order": 1,
+ "md5": ""
+ }
+ ],
+ "no_rexcode": 0,
+ "format": "flv480",
+ "support_formats": [
+ {
+ "display_desc": "480P",
+ "superscript": "",
+ "codecs": [ ],
+ "format": "flv480",
+ "description": "清晰 480P",
+ "quality": 32,
+ "new_description": "480P 清晰"
+ },
+ {
+ "display_desc": "360P",
+ "superscript": "",
+ "codecs": [ ],
+ "format": "mp4",
+ "description": "流畅 360P",
+ "quality": 16,
+ "new_description": "360P 流畅"
+ }
+ ],
+ "message": "",
+ "accept_quality": [
+ 32,
+ 16
+ ],
+ "quality": 32,
+ "timelength": 1394090,
+ "has_paid": false,
+ "clip_info_list": [ ],
+ "accept_description": [
+ "清晰 480P",
+ "流畅 360P"
+ ],
+ "status": 2
+ }
+}
+```
+
+
+
+## 视频的取流(web端及APP端)
+
+**注意:**
+
+1. 如flv模式则可能产生分段情况,将`$.data.durl[1-n].url`或`$.data.durl[1-n].backup_url[0]`中的内容作为url进行GET操作, 如果有多个视频, 需要手动合并处理
+2. 如mp4模式则需要获取对应的视频流(方法同上)
+3. 如dash模式则需要同时获取对应的视频流和伴音流(方法同上)
+4. web端取流需要验证防盗链,即`referer`为 `.bilibili.com`域名下且UA不能为空;app端也需要验证防盗链,即UA需要含有`Mozilla/5.0 BiliDroid/*.*.* (bbcallen@gmail.com)`(*为版本);如`referer`或UA错误的情况会被判定为盗链,返回403 Forbidden故无法取流
+5. **注意unicode转义符**
+
+以上述视频流url为例:
+
+```shell
+wget 'https://upos-sz-mirrorhwo1.bilivideo.com/upgcxcode/01/96/3629601/3629601_da8-1-32.flv?e=ig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1656098026&gen=playurlv2&os=hwo1bv&oi=0&trid=f0a1d2d854264369803462f3dd524154p&mid=0&platform=pc&upsig=76c1438153942fda51fbf4eb07e6e5a1&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=0,2&agrr=1&bw=79726&logo=80000000' \
+--referer 'https://www.bilibili.com' \
+-O 'Download_video.flv'
+```
+
+响应正文将返回一个flv文件
diff --git a/blackroom/banlist.md b/docs/blackroom/banlist.md
similarity index 59%
rename from blackroom/banlist.md
rename to docs/blackroom/banlist.md
index c1a8945..9895a0c 100644
--- a/blackroom/banlist.md
+++ b/docs/blackroom/banlist.md
@@ -1,11 +1,8 @@
# 封禁公示
-- [获取封禁用户公示列表](#获取封禁用户公示列表)
-- [封禁处理公示详情](#封禁处理公示详情)
+## Enum类型代码
----
-
-**已知的违规类型代码总览:**
+### 表1:已知的封禁原因类型代码总览
| 代码 | 含义 |
| ---- | -------------------- |
@@ -42,10 +39,11 @@
| 31 | 发布违规抽奖 |
| 32 | 恶意冒充他人 |
-**已知的违规来源代码:**
+### 表2:已知的违规类型代码
| 代码 | 含义 |
| ---- | -------- |
+| 0 | 全部类型 |
| 1 | 评论 |
| 2 | 弹幕 |
| 3 | 私信 |
@@ -58,7 +56,7 @@
## 获取封禁用户公示列表
-> http://api.bilibili.com/x/credit/blocked/list
+> https://api.bilibili.com/x/credit/blocked/list
*请求方式:GET*
@@ -66,11 +64,11 @@
**url参数:**
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | -------- | ------ | ---------------------------------------------- |
-| btype | num | 来源筛选 | 非必要 | 空:全部类型 0:系统封禁 1:风纪仲裁 |
-| otype | num | 类型筛选 | 非必要 | **见上表** **0:全部类型** |
-| pn | num | 页码 | 非必要 | 默认为1 |
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ------------------------------------------------------------ |
+| btype | num | 来源筛选 | 非必要 | 空:全部类型 `0`:系统封禁 `1`:风纪仲裁(仲裁系统升级后此类型已不再更新) |
+| otype | num | 类型筛选 | 非必要 | **见[表2](#表2已知的违规类型代码)** 默认为`0`:全部类型 |
+| pn | num | 页码 | 非必要 | 默认为`1` |
**json回复:**
@@ -78,55 +76,55 @@
| 字段 | 类型 | 内容 | 备注 |
| ------- | ------ | -------- | ------------ |
-| code | num | 返回值 | 0:成功 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
+| code | num | 返回值 | `0`:成功 |
+| message | str | 错误信息 | 默认为`0` |
+| ttl | num | `1` | |
| data | array | 公示列表 | |
`data`数组:
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | ---- |
-| 0 | obj | 封禁公示1 | |
-| n | obj | 封禁公示(n+1) | |
-| …… | obj | …… | …… |
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ------ | --------------- | ---- |
+| 0 | object | 封禁公示1 | |
+| n | object | 封禁公示(n+1) | |
+| …… | object | …… | …… |
`data`数组中的对象:
-| 字段 | 类型 | 内容 | 备注 |
-| ------------------- | ---- | --------------- | ---------------------------- |
-| id | num | 封禁公示id | |
-| uname | str | 对象用户名 | |
-| face | str | 对象用户头像url | |
-| uid | num | 对象用户mid | |
-| originTitle | str | 来源标题 | |
-| blockedRemark | str | | |
-| originUrl | str | 来源url | |
-| originContentModify | str | 裁决正文 | |
-| originType | num | 来源类型 | **见上表** |
-| originTypeName | str | 来源名 | |
-| punishTitle | str | 公示标题 | |
-| punishTime | num | 处罚时间 | 时间戳 |
-| punishType | num | 处理手段类型 | 2:封禁 3:永久封禁 |
-| punishTypeName | str | 处理手段名 | |
-| moralNum | num | 0 | 作用尚不明确 |
-| blockedDays | num | 封禁天数 | 永封为0 |
-| publishStatus | num | 1 | 作用尚不明确 |
-| blockedType | num | 处理来源 | 0:系统封禁 1:风纪仲裁 |
-| blockedForever | num | 是否永封 | 0:非永封 1:永封 |
-| reasonType | num | 违规类型 | **见上表** |
-| reasonTypeName | str | 违规类型名称 | |
-| operatorName | str | 空 | 作用尚不明确 |
-| caseId | num | 仲裁信息id | 系统封禁时固定为0 |
-| ctime | num | 创建时间 | 时间戳 |
-| commentSum | num | 该条目评论数 | |
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------- | ---- | ---------------- | ------------------------------------------- |
+| id | num | 封禁公示id | |
+| uname | str | 对象用户名 | |
+| face | str | 对象用户头像url | |
+| uid | num | 对象用户mid | |
+| originTitle | str | 来源标题 | |
+| blockedRemark | str | | |
+| originUrl | str | 来源url | |
+| originContentModify | str | 裁决正文 | |
+| originType | num | 来源类型 | **见[表2](#表2已知的违规类型代码)** |
+| originTypeName | str | 来源名 | |
+| punishTitle | str | 公示标题 | |
+| punishTime | num | 处罚时间 | 时间戳 |
+| punishType | num | 处理手段类型 | `2`:封禁 `3`:永久封禁 |
+| punishTypeName | str | 处理手段名 | |
+| moralNum | num | `0`节操值 | 被封禁用户节操值均为`0` |
+| blockedDays | num | 封禁天数 | 永封为`0` |
+| publishStatus | num | `1` | 作用尚不明确 |
+| blockedType | num | 处理来源 | `0`:系统封禁 1:风纪仲裁 |
+| blockedForever | num | 是否永封 | `0`:非永封 `1`:永封 |
+| reasonType | num | 封禁原因类型 | **见[表1](#表1已知的封禁原因类型代码总览)** |
+| reasonTypeName | str | 封禁原因类型名称 | |
+| operatorName | str | 空 | 作用尚不明确 |
+| caseId | num | 仲裁信息id | 系统封禁时固定为0 |
+| ctime | num | 创建时间 | 时间戳 |
+| commentSum | num | 该条目评论数 | |
**示例:**
查询所有类型,所有来源的第1页的封禁公示列表
```shell
-curl -G 'http://api.bilibili.com/x/credit/blocked/list' \
+curl -G 'https://api.bilibili.com/x/credit/blocked/list' \
--data-urlencode 'btype=' \
--data-urlencode 'otype=0' \
--data-urlencode 'pn=1'
@@ -202,7 +200,7 @@ curl -G 'http://api.bilibili.com/x/credit/blocked/list' \
## 封禁处理公示详情
-> http://api.bilibili.com/x/credit/blocked/info
+> https://api.bilibili.com/x/credit/blocked/info
*请求方式:GET*
@@ -219,46 +217,46 @@ curl -G 'http://api.bilibili.com/x/credit/blocked/list' \
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ----------------------------------------------- |
| code | num | 返回值 | 0:成功 -400:请求错误 -404:无此信息 |
-| message | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为`0` |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
-| 字段 | 类型 | 内容 | 备注 |
-| ------------------- | ---- | --------------- | ---------------------------- |
-| id | num | 封禁公示id | |
-| uname | str | 对象用户名 | |
-| face | str | 对象用户头像url | |
-| uid | num | 对象用户mid | |
-| originTitle | str | 来源标题 | |
-| blockedRemark | str | | |
-| originUrl | str | 来源url | |
-| originContentModify | str | 裁决正文 | |
-| originType | num | 来源类型 | **见上表** |
-| originTypeName | str | 来源名 | |
-| punishTitle | str | 公示标题 | |
-| punishTime | num | 处罚时间 | 时间戳 |
-| punishType | num | 处理手段类型 | 2:封禁 3:永久封禁 |
-| punishTypeName | str | 处理手段名 | |
-| moralNum | num | 0 | 作用尚不明确 |
-| blockedDays | num | 封禁天数 | 永封为0 |
-| publishStatus | num | 1 | 作用尚不明确 |
-| blockedType | num | 处理来源 | 0:系统封禁 1:风纪仲裁 |
-| blockedForever | num | 是否永封 | 0:非永封 1:永封 |
-| reasonType | num | 违规类型 | **违规类型见表** |
-| reasonTypeName | str | 违规类型名称 | |
-| operatorName | str | 空 | 作用尚不明确 |
-| caseId | num | 仲裁信息 | 系统封禁时固定为0 |
-| ctime | num | 创建时间 | 时间戳 |
-| commentSum | num | 该条目评论数 | |
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------- | ---- | ---------------- | ------------------------------------------- |
+| id | num | 封禁公示id | |
+| uname | str | 对象用户名 | |
+| face | str | 对象用户头像url | |
+| uid | num | 对象用户mid | |
+| originTitle | str | 来源标题 | |
+| blockedRemark | str | | |
+| originUrl | str | 来源url | |
+| originContentModify | str | 裁决正文 | |
+| originType | num | 来源类型 | **见[表2](#表2已知的违规类型代码)** |
+| originTypeName | str | 来源名 | |
+| punishTitle | str | 公示标题 | |
+| punishTime | num | 处罚时间 | 时间戳 |
+| punishType | num | 处理手段类型 | `2`:封禁 `3`:永久封禁 |
+| punishTypeName | str | 处理手段名 | |
+| moralNum | num | `0`节操值 | 被封禁用户节操值均为`0` |
+| blockedDays | num | 封禁天数 | 永封为`0` |
+| publishStatus | num | `1` | 作用尚不明确 |
+| blockedType | num | 处理来源 | `0`:系统封禁 `1`:风纪仲裁 |
+| blockedForever | num | 是否永封 | `0`:非永封 `1`:永封 |
+| reasonType | num | 封禁原因类型 | **见[表1](#表1已知的封禁原因类型代码总览)** |
+| reasonTypeName | str | 封禁原因类型名称 | |
+| operatorName | str | 空 | 作用尚不明确 |
+| caseId | num | 仲裁信息id | 系统封禁时固定为0 |
+| ctime | num | 创建时间 | 时间戳 |
+| commentSum | num | 该条目评论数 | |
**示例:**
查询公示id为`1091621`的公示详情
```shell
-curl -G 'http://api.bilibili.com/x/credit/blocked/info' \
+curl -G 'https://api.bilibili.com/x/credit/blocked/info' \
--data-urlencode 'id=1091621'
```
diff --git a/blackroom/jury/action.md b/docs/blackroom/jury/action.md
similarity index 54%
rename from blackroom/jury/action.md
rename to docs/blackroom/jury/action.md
index 5b26b7a..700fed3 100644
--- a/blackroom/jury/action.md
+++ b/docs/blackroom/jury/action.md
@@ -1,14 +1,53 @@
# 仲裁操作
-- [申请加入风纪委员会](#申请加入风纪委员会)
-- [拉取新案件](#拉取新案件)
-- [进行仲裁投票](#进行仲裁投票)
-
----
-
## 申请加入风纪委员会
-> http://api.bilibili.com/x/credit/jury/apply
+> https://api.bilibili.com/x/credit/v2/jury/apply
+
+*请求方式:POST*
+
+认证方式:Cookie
+
+只有用户会员90天内无违规、实名认证且非封禁状态才可以申请加入风纪委员会
+
+
+申请成功后可获得30天资格
+
+**正文参数( application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 |
+| ------ | ---- | ---------------------- | ------ |
+| csrf | str | cookie中`bili_jct`的值 | 必要 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ------ | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf 校验失败 25001:申请等级限制(会员等级<3) 25002:没有实名认证 25003:90天内有封禁记录 25013:不能重复申请风纪委资格 25016:当日风纪委员名额已发完 |
+| message | str | 信息 | 默认为0 |
+| ttl | num | 1 | |
+
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+#### 旧API
+
+查看旧版API:
+
+> https://api.bilibili.com/x/credit/jury/apply
*请求方式:POST*
@@ -42,7 +81,7 @@
Cookie方式:
```shell
-curl 'http://api.bilibili.com/x/credit/jury/apply' \
+curl 'https://api.bilibili.com/x/credit/jury/apply' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
```
@@ -50,7 +89,7 @@ curl 'http://api.bilibili.com/x/credit/jury/apply' \
APP方式:
```shell
-curl 'http://api.bilibili.com/x/credit/jury/apply' \
+curl 'https://api.bilibili.com/x/credit/jury/apply' \
--data-urlencode 'access_key=xxx'
```
@@ -64,11 +103,71 @@ curl 'http://api.bilibili.com/x/credit/jury/apply' \
}
```
+
## 拉取新案件
-> http://api.bilibili.com/x/credit/jury/caseObtain
+> https://api.bilibili.com/x/credit/v2/jury/case/next
+
+*请求方式:GET*
+
+认证方式:Cookie
+
+**标头参数(Headers):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------ | ------ | ---- |
+| Cookie | str | Cookie | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------ | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 25006:风纪委员资格已过期 25008:没有案件 25014:已审满 |
+| message | str | 信息 | 默认为0,当code不为0时,显示错误信息 |
+| ttl | num | 1 | 作用尚不明确 |
+| data | object | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ---------- | ---- |
+| case_id | str | 仲裁案件id | |
+
+**示例:**
+
+Cookie方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/credit/v2/jury/case/next' \
+--header 'cookie: XXXXX'
+```
+
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "case_id": "AC2m4HlrIrHv"
+ }
+}
+```
+
+
+
+#### 旧API
+
+查看旧版API:
+
+> https://api.bilibili.com/x/credit/jury/caseObtain
*请求方式:POST*
@@ -103,7 +202,7 @@ curl 'http://api.bilibili.com/x/credit/jury/apply' \
Cookie方式:
```shell
-curl 'http://api.bilibili.com/x/credit/jury/caseObtain' \
+curl 'https://api.bilibili.com/x/credit/jury/caseObtain' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
```
@@ -111,7 +210,7 @@ curl 'http://api.bilibili.com/x/credit/jury/caseObtain' \
APP方式:
```shell
-curl 'http://api.bilibili.com/x/credit/jury/caseObtain' \
+curl 'https://api.bilibili.com/x/credit/jury/caseObtain' \
--data-urlencode 'access_key=xxx'
```
@@ -130,10 +229,56 @@ curl 'http://api.bilibili.com/x/credit/jury/caseObtain' \
```
+
+
## 进行仲裁投票
-> http://api.bilibili.com/x/credit/jury/vote
+> https://api.bilibili.com/x/credit/v2/jury/vote
+
+*请求方式:POST*
+
+认证方式:Cookie
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --------- | ---- | ---------------------- | ------ | ----------------------------------------------------- |
+| case_id | str | 案件id | 必要 | |
+| vote | num | 投票类型 | 必要 | 见「[众裁信息](judgement_info.md)」中表 |
+| insiders | num | 是否观看此类视频 | 非必要 | 默认值为0 见「[众裁信息](judgement_info.md)」中表 |
+| content | str | 理由 | 非必要 | |
+| anonymous | num | 是否匿名 | 非必要 | 默认值为0 0:不匿名 1:匿名 |
+| csrf | str | cookie中`bili_jct`的值 | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ------ | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:未登录 -111:csrf 错误 -400:请求错误(投票类型错误) 25005:不是风纪委员 25011:投票类型错误 25018:不能进行此操作 *注:新版本对于一个不存在的`case_id`,不会报错。* |
+| message | str | 信息 | 默认为0 |
+| ttl | num | 1 | 作用尚不明确 |
+
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+#### 旧API
+
+查看旧版API:
+> https://api.bilibili.com/x/credit/jury/vote
*请求方式:POST*
@@ -171,7 +316,7 @@ curl 'http://api.bilibili.com/x/credit/jury/caseObtain' \
Cookie方式:
```shell
-curl 'http://api.bilibili.com/x/credit/jury/vote' \
+curl 'https://api.bilibili.com/x/credit/jury/vote' \
--data-urlencode 'cid=2333' \
--data-urlencode 'vote=1' \
--data-urlencode 'content=' \
@@ -188,7 +333,7 @@ curl 'http://api.bilibili.com/x/credit/jury/vote' \
APP方式:
```shell
-curl 'http://api.bilibili.com/x/credit/jury/vote' \
+curl 'https://api.bilibili.com/x/credit/jury/vote' \
--data-urlencode 'access_key=xxx' \
--data-urlencode 'cid=2333' \
--data-urlencode 'vote=1' \
@@ -213,3 +358,4 @@ curl 'http://api.bilibili.com/x/credit/jury/vote' \
```
+
\ No newline at end of file
diff --git a/docs/blackroom/jury/base_info.md b/docs/blackroom/jury/base_info.md
new file mode 100644
index 0000000..c86c9fc
--- /dev/null
+++ b/docs/blackroom/jury/base_info.md
@@ -0,0 +1,331 @@
+# 风纪委员会用户基本信息
+
+## 基本数据
+
+> https://api.bilibili.com/x/credit/v2/jury/jury
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**url 参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | ---- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+
+**json 回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------ | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| message | str | 信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | object | 数据本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ------------ | -------------------------------------------------------------------------------------------------- |
+| allow_apply | bool | true | 尚不明确(用户从未担任风纪委员时也为 true) |
+| apply_status | num | 任期审核状态 | -1 资格失效,且未申请 0 刚申请连任时 5 申请后,等待审核 3 申请连任成功,status 为 1 |
+| case_total | num | 总众裁数 | |
+| err_msg | str | 空 | 尚不明确 |
+| face | str | 用户头像 url | |
+| status | num | 当前资格状态 | 0 未曾拥有资格 1 任期内 2 资格失效 |
+| term_end | num | 任期结束时间 | 时间戳(秒级),无任期时为 0 |
+| uname | str | 用户昵称 | |
+
+## 基本数据(旧API)
+
+部分字段信息停留在 2021 年 10 月。
+
+
+查看折叠内容:
+
+> https://api.bilibili.com/x/credit/jury/jury
+
+根数据与新 API 一致,`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | -------------------- | ---------------------------- |
+| caseTotal | num | 总众裁数 | |
+| face | str | 用户头像 url | |
+| restDays | num | 当前资格剩余天数 | 自 2021 年 10 月起,固定为 0 |
+| rightRadio | num | 当前裁决正确率百分比 | 裁决数小于 3 时固定为 50 |
+| status | num | 当前状态 | 1:具有资格 2:资格失效 |
+| uname | str | 用户昵称 | |
+
+
+
+## 统计信息
+
+新API(2021年10月任期之后)
+
+>https://api.bilibili.com/x/credit/v2/jury/kpi
+
+*方式:GET*
+
+认证方式:Cookie
+
+**备注**:该api只收录2021年10月开始,风纪委员改版之后的数据,且每次只返回一次任期的数据。
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------- | ---- | ------- | ------------ | -------------------------------------- |
+| term_id | num | 任期 id | 可不传此参数或将值留空或设为`0` | 未传参或留空时,**只**返回最近一次已结束的任期的数据 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------ | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 25018:不能进行此操作(还没有成为新风纪委员,或传入了不属于你的`term_id`) |
+| message | str | 信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | object | 数据本体 | |
+
+`data` 对象:
+
+| 项 | 类型 | 内容 | 备注 |
+| --------------- | ------ | ------------------ | ------------------------------------------------------------ |
+| mid | num | 用户 UID | |
+| uname | str | 留空 | |
+| face | str | 留空 | |
+| term_id | num | 任期 ID | 未传入`term_id`时,返回的是最近一次已结束的任期的id |
+| term_start | num | 任期开始时间 | 时间戳,精确到秒 |
+| term_end | num | 任期结束时间 | 时间戳,精确到秒 |
+| case_total | num | 任内总投票数 | |
+| active_days | num | 活跃天数 | |
+| like_num | num | 发表观点,被点赞数 | |
+| accuracy_rate | num | 投中率 | 所选观点与大多数风纪委员一致,记为一次“投中” |
+| pass | num | 任期是否合格 | 0 不合格 1 合格 |
+| status | num | 当前资格状态 | 0 未曾拥有资格 1 任期内 2 资格失效 |
+| apply_status | num | 当前资格申请状态 | -1 资格失效,且未申请 0 刚申请连任时 5 申请后,等待审核 3 申请连任成功,status 为 1 |
+| prev_term_id | num | 上一任期的任期 ID | 新版风纪委员启用后的第一个任期,此项的值为 0 |
+| next_term_id | num | 下一任期的任期 ID | 若当前任期尚未结束,此项的值为 0 |
+| rewards | object | 任期奖励 | 有`pendant`和`coin`两个子项 |
+| rewards.pendant | num | 头像挂件礼包 ID | 合格后一般为 1,不合格为 0 |
+| rewards.coin | num | 硬币礼包 ID | 合格后一般为 3,不合格为 0 |
+
+
+查看响应示例:
+
+注:本示例未传入`term_id`,返回的是最近一次已结束任期的统计结果
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "mid": 10001,
+ "uname": "",
+ "face": "",
+ "term_id": 300009,
+ "term_start": 1669100000,
+ "term_end": 1671690000,
+ "case_total": 591,
+ "active_days": 30,
+ "like_num": 0,
+ "accuracy_rate": 74,
+ "pass": 1,
+ "status": 1,
+ "apply_status": 3,
+ "prev_term_id": 300007,
+ "next_term_id": 0,
+ "rewards": {
+ "pendant": 1,
+ "coin": 3
+ }
+ }
+}
+```
+
+
+## 统计信息(旧API)
+
+
+查看折叠内容:
+
+> https://api.bilibili.com/x/credit/jury/kpi
+
+*方式:GET*
+
+认证方式:Cookie(SESSDATA)或APP
+
+**备注**:该api只统计到2021年9月任期,风纪委员改版之前。风纪委员改版之后的数据未收录
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------ | ----------- | ---- |
+| access_key | str | APP登录Token | APP方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----- | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| message | str | 信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | array | 数据本体 | |
+
+`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------------- | ---- |
+| 0 | obj | 第1个月统计 | |
+| n | obj | 第(n+1)个月统计 | |
+| …… | obj | …… | …… |
+
+`data` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | -------------------------------- | --------------------- |
+| id | num | 0 | |
+| mid | num | 用户id | |
+| number | num | 风纪委员编号 | |
+| day | num | 数据生成时间(也是任期结束时间) | 时间戳,精确到秒 |
+| rate | num | 任期完成度 | 1=A;2=S;3=S+;4=S++ |
+| rank | num | 尚不明确 | |
+| rankper | num | 尚不明确 | |
+| rankTotal | num | 尚不明确 | |
+| point | num | 32767 | |
+| activeDays | num | 活跃天数 | |
+| voteTotal | num | 投票总数 | |
+| voteRadio | num | 投中率 | |
+| blockedTotal | num | 尚不明确 | |
+| termStart | num | 任期开始时间 | 时间戳,精确到秒 |
+| termEnd | num | 任期结束时间(数据生成时间一致) | 时间戳,精确到秒 |
+| opinion_likes | num | 观点获赞 | |
+
+**示例:**
+
+Cookie方式:
+
+```shell
+curl 'https://api.bilibili.com/x/credit/jury/kpi' \
+-b 'SESSDATA=xxx'
+```
+
+APP方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/credit/jury/kpi' \
+--data-urlencode 'access_key=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [
+ {
+ "id": 0,
+ "mid": 114343368,
+ "number": 199046,
+ "day": 1539792000,
+ "rate": 1,
+ "rank": 0,
+ "rankper": 1,
+ "rankTotal": 39584,
+ "point": 32767,
+ "activeDays": 23,
+ "voteTotal": 422,
+ "voteRadio": 0,
+ "blockedTotal": 0,
+ "termStart": 1537200000,
+ "termEnd": 1539792000,
+ "opinion_likes": 18
+ }
+ ]
+}
+```
+
+
+
+
+## 检查申请风纪委员会资格
+
+> ~~https://api.bilibili.com/x/credit/jury/requirement~~ (旧版)
+
+> https://api.bilibili.com/x/credit/v2/jury/requirement (新版)
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或APP
+
+新版 api 与旧版的区别仅在新版没有 `level` 字段(新版风纪委员没有等级限制)。
+
+只有用户~~会员等级≥Lv4、~~ 90 天内无违规、实名认证且非封禁状态才可以申请加入风纪委员会。
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------ | ----------- | ---- |
+| access_key | str | APP登录Token | APP方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------ | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| message | str | 信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | object | 数据本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ---------------- | ------------------------------------- |
+| blocked | bool | 是否被封禁 | true:是 false:否 **下同** |
+| cert | bool | 是否实名认证 | |
+| level | bool | 等级是否>=4 | 新版无该字段 |
+| rule | bool | 是否90天内无违规 | |
+
+**示例:**
+
+Cookie方式:
+
+```shell
+curl 'https://api.bilibili.com/x/credit/v2/jury/requirement' \
+-b 'SESSDATA=xxx'
+```
+
+APP方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/credit/v2/jury/requirement' \
+--data-urlencode 'access_key=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "blocked": false,
+ "cert": true,
+ "rule": true
+ }
+}
+```
+
+
diff --git a/blackroom/jury/judgement_info.md b/docs/blackroom/jury/judgement_info.md
similarity index 50%
rename from blackroom/jury/judgement_info.md
rename to docs/blackroom/jury/judgement_info.md
index c07a686..9b2d9d3 100644
--- a/blackroom/jury/judgement_info.md
+++ b/docs/blackroom/jury/judgement_info.md
@@ -1,25 +1,259 @@
# 众裁信息
-- [查询投票过的单个案件](#查询投票过的单个案件)
-- [查询案件众裁信息](#查询案件众裁信息)
-- [查询我的众裁记录](#查询我的众裁记录)
-- [获取众议观点](#获取众议观点)
+## Enum类型代码
----
-
-投票类型码总览:
+### 投票类型码总览
| 代码 | 含义 |
-| - | ---- |
-| 0 | 未投票 |
-| 1 | 封禁 |
-| 2 | 否 |
-| 3 | 弃权 |
-| 4 | 删除 |
+| ---- | --- |
+| 0 | 未投票 |
+| 1 | 封禁 |
+| 2 | 否 |
+| 3 | 弃权 |
+| 4 | 删除 |
-## 查询投票过的单个案件
+### 投票选项码总览
-> http://api.bilibili.com/x/credit/jury/juryCase
+
+
+ 任务类型
+ 代码
+ 含义
+
+
+ 单条评论(弹幕)
+ 1
+ 合适
+
+
+ 2
+ 一般
+
+
+ 3
+ 不合适
+
+
+ 4
+ 无法判断
+
+
+ 评论(弹幕)氛围
+ 11
+ 好
+
+
+ 12
+ 一般
+
+
+ 13
+ 差
+
+
+ 14
+ 无法判断
+
+
+
+
+
+## 获取单个案件信息
+
+> https://api.bilibili.com/x/credit/v2/jury/case/info
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或APP
+
+可查询任意案件,无论自己是否参与投票。
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ------------ | ------ | ------------- | ------------- |
+| access_key | str | APP登录Token | APP方式必要 | |
+| case_id | str | 案件id | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------ | -------- | ------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| message | str | 信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | object | 数据本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ------ | -------------------------------- | -------------------------------------------------------------- |
+| case_id | str | 案件id | |
+| case_type | num | 任务类型 | 1:单条评论 2:评论氛围 3:单条弹幕 4:弹幕氛围 |
+| jury_state | num | `1` | 改版后未见过其它值 |
+| participate | num | 是否投票 | 0:未投票 1:已投票 |
+| vote_items | object | 投票选项 | 见开头「投票选项码总览」 |
+| default_vote | num | 默认投票选项 | `4` 或 `14` 即 `无法判断` |
+| status | num | 裁决状态(新版) | 0:进行中 1:已结束 |
+| origin_start | num | 案件关联视频,播放进度条起始坐标 | 单位:`秒` |
+| avid | num | 视频av号 | |
+| cid | num | 弹幕 dmid | |
+| vote_cd | num | `-1` | 暂不明确 |
+| result | num | 众议结论 | 见开头「投票选项码总览」 |
+| result_text | str | 众议结论文本 | 见开头「投票选项码总览」 |
+| title | str | 视频标题 | |
+| case_info | object | 案件信息 | |
+| my_point | object | 我的观点 | 仅自己投过票才有该字段 |
+| vote_info | object | 投票信息 | |
+
+`data` 对象下的`case_info`对象
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ------ | ------------ | ----------------------------------------------- |
+| comment | object | 单条评论信息 | 仅当`case_type`为`1`有值。见「对象:评论信息」 |
+| danmu_img | str | 弹幕截图 | 仅当`case_type`为`4`有值,截图URL |
+| comments | object | 若干条评论 | 仅当`case_type`为`2`有值。见「对象:评论信息」 |
+| single_danmu | str | 单条弹幕信息 | 仅当`case_type`为`3`有值。见「对象:评论信息)」 |
+
+
+对象:评论信息
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | ------ | ------------------------ | -------------------------------------------------------------- |
+| mid | num | 用户uid | |
+| uname | str | 用户名 | |
+| face | str | 用户头像 | 头像URL |
+| content | str | 评论内容 | |
+| child_comments | object | 子评论(对该评论的回复) | 见「对象:评论信息」,单条评论和子评论下无`child_comments`字段 |
+
+
+对象:弹幕信息
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | -------- | ------- |
+| id_str | str | 弹幕dmid | |
+| content | str | 弹幕内容 | |
+| progress | num | | 尚不明确 |
+
+`data` 对象下的`my_point`对象
+
+记录了自己的投票(观点)信息,仅当自己投过票才有该字段。
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ---------------- | ------------------------------------------------------------ |
+| opid | num | 观点编号 | 每当某个一个风纪委员给某个仲裁案件发表观点,就+1 |
+| mid | num | 风纪委员用户ID | |
+| uname | str | 风纪委员用户名 | 风纪委勾选匿名投票则显示“匿名用户” |
+| face | str | 头像URL | 头像 |
+| vote | num | 投票选项 | “合适题”分别为 `1` 或者 `2` 或者 `3` 或者 `4`, 对应:“合适”、“一般”、“不合适”、“无法判断” “氛围题”分别为 `11` 或者 `12` 或者 `13` 或者 `14`, 对应:“好”、“一般”、“差”、“无法判断” 注释 合适题:“单条弹幕(评论)是否合适?” 氛围题:“弹幕(评论区)氛围如何” |
+| vote_text | | 内容为空 | *现在系统已不再展示其他风纪委所投的票* |
+| content | str | 观点内容 | 该风纪委员所发表的观点内容 |
+| anonymous | num | 0 | 尚不明确 |
+| like | num | 被点赞数量 | |
+| hate | num | 被点踩数量 | |
+| like_status | num | 点赞(踩)状态 | 本账号是否给该条评论点赞: 0:没做操作;1:给评论点赞;2:给评论点踩 |
+| vote_time | num | 投票时间 | 时间戳,精确到秒 |
+| insiders | num | 是否观看此类视频 | 1:平时观看此类视频;0:平时不观看此类视频 |
+
+`data` 对象下的`vote_info`对象
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ----- | -------- | -------------------------------------------- |
+| all_count | num | 总投票数 | |
+| counts | array | 观点分布 | 格式:`[合适, 一般, 不合适, 无法判断]` |
+| insiders_counts | array | 行为分布 | 格式:`[平时会看此类视频, 平时不看此类视频]` |
+
+**示例:**
+
+```shell
+curl -G 'https://api.bilibili.com/x/credit/v2/jury/case/info' \
+ --data-urlencode 'case_id=AC2SiaD8jlrL' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "case_id": "AC2SiaD8jlrL",
+ "case_type": 3,
+ "jury_state": 1,
+ "participate": 1,
+ "vote_items": [
+ {
+ "vote": 1,
+ "vote_text": "合适"
+ },
+ {
+ "vote": 2,
+ "vote_text": "一般"
+ },
+ {
+ "vote": 3,
+ "vote_text": "不合适"
+ },
+ {
+ "vote": 4,
+ "vote_text": "无法判断"
+ }
+ ],
+ "default_vote": 4,
+ "status": 1,
+ "origin_start": 0,
+ "avid": 727792866,
+ "cid": 756815216,
+ "vote_cd": -1,
+ "result": 3,
+ "result_text": "不合适",
+ "title": "“国家队”守门员和朋友打赌,谁能在湿滑的地面踢进足球就送美刀",
+ "case_info": {
+ "comment": null,
+ "danmu_img": "",
+ "comments": null,
+ "single_danmu": {
+ "id_str": "1086612690354524160",
+ "content": "这守门员干啥呢?给块骨头我家狗都比他防的好",
+ "progress": 27859
+ }
+ },
+ "my_point": {
+ "opid": 10001,
+ "mid": 10001,
+ "uname": "风纪委员用户名",
+ "face": "http://i0.hdslb.com/bfs/face/e48952d599dbf011c2235239fafa2bf0deccef5a.jpg",
+ "vote": 3,
+ "vote_text": "不合适",
+ "content": "",
+ "anonymous": 0,
+ "like": 0,
+ "hate": 0,
+ "like_status": 0,
+ "vote_time": 1663655000,
+ "insiders": 1
+ },
+ "vote_info": {
+ "all_count": 306,
+ "counts": [90, 33, 177, 6],
+ "insiders_counts": [245, 61]
+ }
+ }
+}
+```
+
+
+**旧 api:**
+
+
+查看旧 api:
+
+> https://api.bilibili.com/x/credit/jury/juryCase
*请求方式:GET*
@@ -43,7 +277,7 @@
| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 25010:没有权限查看案件 |
| message | str | 信息 | 默认为0 |
| ttl | num | 1 | |
-| data | obj | 数据本体 | |
+| data | object | 数据本体 | |
`data` 对象:
@@ -83,7 +317,7 @@
Cookie方式:
```shell
-curl -G 'http://api.bilibili.com/x/credit/jury/juryCase' \
+curl -G 'https://api.bilibili.com/x/credit/jury/juryCase' \
--data-urlencode 'cid=1239790' \
-b 'SESSDATA=xxx'
```
@@ -91,7 +325,7 @@ curl -G 'http://api.bilibili.com/x/credit/jury/juryCase' \
APP方式:
```shell
-curl -G 'http://api.bilibili.com/x/credit/jury/juryCase' \
+curl -G 'https://api.bilibili.com/x/credit/jury/juryCase' \
--data-urlencode 'access_key=xxx' \
--data-urlencode 'cid=1239790' \
```
@@ -135,11 +369,15 @@ curl -G 'http://api.bilibili.com/x/credit/jury/juryCase' \
}
```
+
## 查询案件众裁信息
-> http://api.bilibili.com/x/credit/jury/caseInfo
+注:这是一个旧版的API,暂未找到对应的新版API。
+
+展开:
+> https://api.bilibili.com/x/credit/jury/caseInfo
*请求方式:GET*
@@ -155,12 +393,12 @@ curl -G 'http://api.bilibili.com/x/credit/jury/juryCase' \
根对象:
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ----------------------------- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | 有效时:obj 无效时:null | 数据本体 | |
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | -------------------------------- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | 有效时:object 无效时:null | 数据本体 | |
`data` 对象:
@@ -196,7 +434,7 @@ curl -G 'http://api.bilibili.com/x/credit/jury/juryCase' \
查询案件`1239790`的信息
```shell
-curl -G 'http://api.bilibili.com/x/credit/jury/juryCase' \
+curl -G 'https://api.bilibili.com/x/credit/jury/juryCase' \
--data-urlencode 'cid=1239790'
```
@@ -236,12 +474,94 @@ curl -G 'http://api.bilibili.com/x/credit/jury/juryCase' \
}
}
```
-
+
## 查询我的众裁记录
-> http://api.bilibili.com/x/credit/jury/caseList
+> https://api.bilibili.com/x/credit/v2/jury/case/list
+
+*请求方式:GET*
+
+认证方式:Cookie
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------ | ----------- | -------------------- |
+| pn | num | 页码 | 非必要 | 默认为1 |
+| ps | num | 每页显示数量 | 非必要 | 默认为30 最大30 |
+
+**Headers参数**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ---- | ------ | ---- |
+| cookie | str | | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ------ | ------------ | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| message | str | 信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | object | 数据本体 | |
+| data.total | num | 仲裁案例数 | |
+| data.list | array | 仲裁记录列表 | |
+
+`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ------ | --------------- | ------------ |
+| 0 | object | 仲裁记录1 | |
+| n | object | 仲裁记录(n+1) | 按照时间顺序 |
+| …… | object | …… | …… |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | ------------------------------------------------------------ |
+| case_id | str | 案件id | |
+| case_type | num | 案件类型 | 1:单条评论 2:评论氛围 3:单条弹幕 4:弹幕氛围 |
+| status | num | 裁决状态 | 0:投票中 1:已结束 |
+| vote | num | 投票选项 | “单条评论(弹幕)”分别为 `1` 或者 `2` 或者 `3` 或者 `4`, 对应:“合适”、“一般”、“不合适”、“无法判断” “评论(弹幕)氛围”分别为 `11` 或者 `12` 或者 `13` 或者 `14`, 对应:“好”、“一般”、“差”、“无法判断” |
+| vote_text | str | 投票选项文本 | *参考上条* |
+| vote_time | num | 投票时间 | 时间戳,精确到秒 |
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "total": 5428,
+ "list": [
+ {
+ "case_id": "AC2sOiNenwj1",
+ "case_type": 4,
+ "status": 1,
+ "vote": 11,
+ "vote_text": "好",
+ "vote_time": 1662700609
+ }
+ ]
+ }
+}
+```
+
+
+
+## 查询案件众裁信息(旧 api)
+
+
+查看旧版API:
+
+> https://api.bilibili.com/x/credit/jury/caseList
*请求方式:GET*
@@ -268,11 +588,11 @@ curl -G 'http://api.bilibili.com/x/credit/jury/juryCase' \
`data`数组:
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | ------------ |
-| 0 | obj | 仲裁记录1 | |
-| n | obj | 仲裁记录(n+1) | 按照时间顺序 |
-| …… | obj | …… | …… |
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ------ | --------------- | ------------ |
+| 0 | object | 仲裁记录1 | |
+| n | object | 仲裁记录(n+1) | 按照时间顺序 |
+| …… | object | …… | …… |
`data`数组中的对象:
@@ -312,7 +632,7 @@ curl -G 'http://api.bilibili.com/x/credit/jury/juryCase' \
Cookie方式:
```shell
-curl -G 'http://api.bilibili.com/x/credit/jury/caseList' \
+curl -G 'https://api.bilibili.com/x/credit/jury/caseList' \
--data-urlencode 'ps=1' \
--data-urlencode 'pn=1' \
-b 'SESSDATA=xxx'
@@ -320,7 +640,7 @@ curl -G 'http://api.bilibili.com/x/credit/jury/caseList' \
APP方式:
```shell
-curl -G 'http://api.bilibili.com/x/credit/jury/caseList' \
+curl -G 'https://api.bilibili.com/x/credit/jury/caseList' \
--data-urlencode 'access_key=xxx' \
--data-urlencode 'ps=1' \
--data-urlencode 'pn=1'
@@ -367,11 +687,117 @@ curl -G 'http://api.bilibili.com/x/credit/jury/caseList' \
}
```
+
## 获取众议观点
-> http://api.bilibili.com/x/credit/jury/case/opinion
+> https://api.bilibili.com/x/credit/v2/jury/case/opinion
+
+*请求方式:GET*
+
+认证方式:Cookie
+
+**标头参数(Headers):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------ | ------ | ---- |
+| Cookie | str | Cookie | 必要 | |
+
+**URL参数(Query Params):**
+
+| 参数名 | 类型 | 内容 | 备注 |
+| ------- | ---- | ---------- | ------------------------------------------- |
+| case_id | str | 仲裁案件id | **必填** |
+| pn | num | | 显示第x页(default = 1) |
+| ps | num | | 每页显示y条观点(Max = 20)(default = 10) |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------ | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功; -400:`ps`参数大于可允许的最大值`20` |
+| message | str | 信息 | 默认为0 |
+| ttl | num | 1 | 作用尚不明确 |
+| data | object | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ----- | -------------------------- | ---- |
+| total | num | 当前案件众议观点总数 | |
+| list | array | 无数据时是一个空数组:“[]” | |
+
+`data.list`对象是一个数组,里面包含`ps`个object(参数`ps`见上文,object结构见「[附表4](#附表4data-对象下的my_point对象)」)
+
+**示例:**
+
+查看案件`AC1xx411c7ac`的众议观点,每页`2`项,查看第`1`页
+
+```shell
+curl -G 'https://api.bilibili.com/x/credit/v2/jury/case/opinion' \
+--data-urlencode 'case_id=AC1xx411c7ac' \
+--data-urlencode 'pn=1' \
+--data-urlencode 'ps=2' \
+--header 'cookie: xxxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "total": 48,
+ "list": [
+ {
+ "opid": 46087379,
+ "mid": 22006415,
+ "uname": "匿名用户",
+ "face": "http://i0.hdslb.com/bfs/face/e48952d599dbf011c2235239fafa2bf0deccef5a.jpg",
+ "vote": 11,
+ "vote_text": "",
+ "content": "正常评论",
+ "anonymous": 1,
+ "like": 0,
+ "hate": 0,
+ "like_status": 0,
+ "vote_time": 1661430391,
+ "insiders": 1
+ },
+ {
+ "opid": 46087280,
+ "mid": 19243907,
+ "uname": "匿名用户",
+ "face": "http://i0.hdslb.com/bfs/face/e85d7ab3425d3dd0f0796bd7f945b47ac27ca82a.jpg",
+ "vote": 11,
+ "vote_text": "",
+ "content": "并未发现明显问题。",
+ "anonymous": 1,
+ "like": 0,
+ "hate": 0,
+ "like_status": 0,
+ "vote_time": 1661430337,
+ "insiders": 0
+ }
+ ]
+ }
+}
+```
+
+
+
+**旧 api**
+
+
+查看旧版API:
+
+> https://api.bilibili.com/x/credit/jury/case/opinion
*请求方式:GET*
@@ -392,7 +818,7 @@ curl -G 'http://api.bilibili.com/x/credit/jury/caseList' \
| code | num | 返回值 | 0:成功 -400:请求错误 |
| message | str | 信息 | 默认为0 |
| ttl | num | 1 | |
-| data | obj | 数据本体 | |
+| data | object | 数据本体 | |
`data` 对象:
@@ -403,11 +829,11 @@ curl -G 'http://api.bilibili.com/x/credit/jury/caseList' \
`data` 中的`opinion` 数组:
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ----------- | ------------ |
-| 0 | obj | 观点1 | |
-| n | obj | 观点(n+1) | 按照时间顺序 |
-| …… | obj | …… | …… |
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ------ | ----------- | ------------ |
+| 0 | object | 观点1 | |
+| n | object | 观点(n+1) | 按照时间顺序 |
+| …… | object | …… | …… |
`opinion` 数组中的对象:
@@ -428,7 +854,7 @@ curl -G 'http://api.bilibili.com/x/credit/jury/caseList' \
查看案件`1239790`的众议观点,每页10项,查看第一页
```shell
-curl -G 'http://api.bilibili.com/x/credit/jury/case/opinion' \
+curl -G 'https://api.bilibili.com/x/credit/jury/case/opinion' \
--data-urlencode 'cid=1239790' \
--data-urlencode 'ps=10' \
--data-urlencode 'pn=1' \
@@ -548,4 +974,5 @@ curl -G 'http://api.bilibili.com/x/credit/jury/case/opinion' \
}
```
-
\ No newline at end of file
+
+
diff --git a/broadcast/readme.md b/docs/broadcast/readme.md
similarity index 94%
rename from broadcast/readme.md
rename to docs/broadcast/readme.md
index e625bb0..a99fedd 100644
--- a/broadcast/readme.md
+++ b/docs/broadcast/readme.md
@@ -1,12 +1,8 @@
# 全站广播
-可用的广播服务:
-
-- [视频实时信息](video_room.md)√
-
## 获取广播服务器地址
-> http://api.bilibili.com/x/web-interface/broadcast/servers
+> https://api.bilibili.com/x/web-interface/broadcast/servers
*请求方式:GET*
@@ -62,7 +58,7 @@
当`platform`=`web`时,不显示节点ip
```shell
-curl -G 'http://api.bilibili.com/x/web-interface/broadcast/servers' \
+curl -G 'https://api.bilibili.com/x/web-interface/broadcast/servers' \
--data-urlencode 'platform=web'
```
@@ -97,7 +93,7 @@ curl -G 'http://api.bilibili.com/x/web-interface/broadcast/servers' \
当`platform`=其他时,显示节点ip
```shell
-curl -G 'http://api.bilibili.com/x/web-interface/broadcast/servers' \
+curl -G 'https://api.bilibili.com/x/web-interface/broadcast/servers' \
--data-urlencode 'platform=1'
```
diff --git a/broadcast/video_room.md b/docs/broadcast/video_room.md
similarity index 93%
rename from broadcast/video_room.md
rename to docs/broadcast/video_room.md
index c4ae9ff..b0dd551 100644
--- a/broadcast/video_room.md
+++ b/docs/broadcast/video_room.md
@@ -1,13 +1,5 @@
# 视频实时信息
-- [认证包(上行)](#认证包(上行))
-- [认证包回复(下行)](#认证包回复(下行))
-- [心跳包(上行)](#心跳包(上行))
-- [心跳包回复(实时观看数)(下行)](#心跳包回复(实时观看数)(下行))
-- [普通包(实时弹幕)(下行)](#普通包(实时弹幕)(下行))
-
----
-
## 认证包(上行)
**正文内容json:**
diff --git a/cheese/info.md b/docs/cheese/info.md
similarity index 98%
rename from cheese/info.md
rename to docs/cheese/info.md
index a1c6e4b..b3f0b89 100644
--- a/cheese/info.md
+++ b/docs/cheese/info.md
@@ -1,10 +1,5 @@
# 课程基本信息
-- [获取课程基本信息](#获取课程基本信息)
-- [获取课程分集列表](#获取课程分集列表)
-
----
-
课程ssid与epid和番剧不互通
课程avid与普通视频绝大部分api接口不能互通,少部分互通接口如下:
@@ -19,7 +14,7 @@
## 获取课程基本信息
-> http://api.bilibili.com/pugv/view/web/season
+> https://api.bilibili.com/pugv/view/web/season
*请求方式:GET*
@@ -251,7 +246,7 @@
ssid方式:
```shell
-curl -G 'http://api.bilibili.com/pugv/view/web/season' \
+curl -G 'https://api.bilibili.com/pugv/view/web/season' \
--data-urlencode 'season_id=61' \
-b 'SESSDATA=xxx' \
-e 'https://www.bilibili.com'
@@ -260,7 +255,7 @@ curl -G 'http://api.bilibili.com/pugv/view/web/season' \
epid方式:
```shell
-curl -G 'http://api.bilibili.com/pugv/view/web/season' \
+curl -G 'https://api.bilibili.com/pugv/view/web/season' \
--data-urlencode 'ep_id=790' \
-b 'SESSDATA=xxx' \
-e 'https://www.bilibili.com'
@@ -466,7 +461,7 @@ curl -G 'http://api.bilibili.com/pugv/view/web/season' \
## 获取课程分集列表
-> http://api.bilibili.com/pugv/view/web/ep/list
+> https://api.bilibili.com/pugv/view/web/ep/list
*请求方式:GET*
@@ -539,7 +534,7 @@ curl -G 'http://api.bilibili.com/pugv/view/web/season' \
按照每页5项查询课程`ss61`的分集列表第1页
```shell
-curl -G 'http://api.bilibili.com/pugv/view/web/ep/list' \
+curl -G 'https://api.bilibili.com/pugv/view/web/ep/list' \
--data-urlencode 'season_id=61' \
--data-urlencode 'ps=5 ' \
--data-urlencode 'pn=1' \
diff --git a/cheese/videostream_url.md b/docs/cheese/videostream_url.md
similarity index 97%
rename from cheese/videostream_url.md
rename to docs/cheese/videostream_url.md
index 22733f2..fee29dd 100644
--- a/cheese/videostream_url.md
+++ b/docs/cheese/videostream_url.md
@@ -1,14 +1,10 @@
# 课程视频流URL
-- [获取课程视频流URL(web端)](#获取课程视频流URL(web端))
-
----
-
-
+
## 获取课程视频流URL(web端)
-> http://api.bilibili.com/pugv/player/web/playurl
+> https://api.bilibili.com/pugv/player/web/playurl
*请求方式:GET*
@@ -123,7 +119,7 @@
获取课程`ep790`(cid=`132105993`,avid=`76973173`)的视频流url,清晰度为1080P60
```shell
-curl -G 'http://api.bilibili.com/pugv/player/web/playurl' \
+curl -G 'https://api.bilibili.com/pugv/player/web/playurl' \
--data-urlencode 'ep_id=790' \
--data-urlencode 'avid=76973173' \
--data-urlencode 'cid=132105993' \
diff --git a/docs/clientinfo/ip.md b/docs/clientinfo/ip.md
new file mode 100644
index 0000000..841f3c3
--- /dev/null
+++ b/docs/clientinfo/ip.md
@@ -0,0 +1,155 @@
+# 通过ip确定地理位置
+
+## 根据请求IP确定属地
+
+> https://api.bilibili.com/x/web-interface/zone
+>
+> https://api.live.bilibili.com/xlive/web-room/v1/index/getIpInfo
+
+*请求方式:GET*
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ------------- | ------------ |
+| addr | str | 公网IP地址 | |
+| country | str | 国家/地区名 | |
+| province | str | 省/州 | 非必须存在项 |
+| city | str | 城市 | 非必须存在项 |
+| isp | str | 运营商名 | |
+| latitude | num | 纬度 | |
+| longitude | num | 经度 | |
+| zone_id | num | ip数据库id | 第二个接口无 |
+| country_code | num | 国家/地区代码 | 第二个接口无 |
+
+**示例:**
+
+```shell
+curl 'https://api.bilibili.com/x/web-interface/zone'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code":0,
+ "message":"0",
+ "ttl":1,
+ "data":{
+ "addr":"36.40.120.145",
+ "country":"中国",
+ "province":"陕西",
+ "city":"渭南",
+ "isp":"电信",
+ "latitude":34.4995,
+ "longitude":109.492821,
+ "zone_id":4472912,
+ "country_code":86
+ }
+}
+```
+
+
+
+## 查询任意 IP 地址的归属地
+
+> https://api.live.bilibili.com/ip_service/v1/ip_service/get_ip_addr
+> https://api.live.bilibili.com/client/v1/Ip/getInfoNew
+
+注: 以上接口等效
+
+*请求方式:GET*
+
+**URL参数:**
+
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| ip | str | IP地址 | 不必要 | IPv4或IPv6地址不限, 留空与[根据请求IP确定地理位置](#根据请求ip确定地理位置)基本相同 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------- |
+| code | num | 返回值 | 0: 成功 |
+| message | str | 错误信息 | 默认为空 |
+| msg | str | 错误信息 | 同message |
+| data | obj | 信息本体 | 出错时为空数组 |
+
+`data`对象:
+
+与[根据请求IP确定地理位置](#根据请求ip确定地理位置)回复的`data`对象基本相同, 但无 `zone_id` `country_code` 字段
+
+**示例:**
+
+查询请求IP地址的归属地:
+
+```shell
+curl -G 'https://api.live.bilibili.com/client/v1/Ip/getInfoNew'
+```
+
+
+查看响应示例:
+
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "message": "",
+ "data": {
+ "addr": "104.28.156.113",
+ "country": "新加坡",
+ "province": "新加坡",
+ "city": "",
+ "isp": "cloudflare.com",
+ "latitude": "1.352083",
+ "longitude": "103.819836"
+ }
+}
+```
+
+
+
+查询IP地址`8.8.8.8`的归属地:
+
+```shell
+curl -G 'https://api.live.bilibili.com/ip_service/v1/ip_service/get_ip_addr' \
+--data-urlencode 'ip=8.8.8.8'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "message": "",
+ "data": {
+ "addr": "8.8.8.8",
+ "country": "GOOGLE.COM",
+ "province": "GOOGLE.COM",
+ "city": "",
+ "isp": "level3.com",
+ "latitude": "",
+ "longitude": ""
+ }
+}
+```
+
+
diff --git a/comment/action.md b/docs/comment/action.md
similarity index 90%
rename from comment/action.md
rename to docs/comment/action.md
index b04bb1a..a0f4823 100644
--- a/comment/action.md
+++ b/docs/comment/action.md
@@ -1,17 +1,8 @@
# 评论区操作
-- [发表评论](#发表评论)
-- [点赞评论](#点赞评论)
-- [点踩评论](#点踩评论)
-- [删除评论](#删除评论)
-- [置顶评论](#置顶评论)
-- [举报评论](#举报评论)
-
----
-
## 发表评论
-> http://api.bilibili.com/x/v2/reply/add
+> https://api.bilibili.com/x/v2/reply/add
*请求方式:POST*
@@ -34,12 +25,12 @@
根对象:
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -102:账号被封停 -111:csrf校验失败 -400:请求错误 -404:无此项 -509:请求过于频繁 12001:已经存在评论主题 12002:评论区已关闭 12003:禁止回复 12006:没有该评论 12009:评论主体的type不合法 12015:需要评论验证码 12016:评论内容包含敏感信息 12025:评论字数过多 12035:该账号被UP主列入评论黑名单 12051:重复评论,请勿刷屏 **(其他错误码有待补充)** |
-| message | str | 错误信息 | |
-| ttl | num | 1 | |
-| data | obj | 数据本体 | |
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| code | num | 返回值 | 0:成功 -101:账号未登录 -102:账号被封停 -111:csrf校验失败 -400:请求错误 -404:无此项 -509:请求过于频繁 12001:已经存在评论主题 12002:评论区已关闭 12003:禁止回复 12006:没有该评论 12009:评论主体的type不合法 12015:需要评论验证码 12016:评论内容包含敏感信息 12025:评论字数过多 12035:该账号被UP主列入评论黑名单 12051:重复评论,请勿刷屏 12052:评论区已关闭 12045:购买后即可发表评论 **(其他错误码有待补充)** |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
`data`对象:
@@ -65,7 +56,7 @@
给视频`av243322853`发送内容为`测试test[泠鸢yousa_awsl]`的评论(带有表情转义符),平台标识为1(web端)
```shell
-curl 'http://api.bilibili.com/x/v2/reply/add' \
+curl 'https://api.bilibili.com/x/v2/reply/add' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=243322853' \
--data-urlencode 'message=测试test[泠鸢yousa_awsl]' \
@@ -235,7 +226,7 @@ curl 'http://api.bilibili.com/x/v2/reply/add' \
## 点赞评论
-> http://api.bilibili.com/x/v2/reply/action
+> https://api.bilibili.com/x/v2/reply/action
*请求方式:POST*
@@ -269,7 +260,7 @@ curl 'http://api.bilibili.com/x/v2/reply/add' \
点赞视频`av243322853`下评论`rpid=3039053308`
```shell
-curl 'http://api.bilibili.com/x/v2/reply/action' \
+curl 'https://api.bilibili.com/x/v2/reply/action' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=243322853' \
--data-urlencode 'rpid=3039053308' \
@@ -293,7 +284,7 @@ curl 'http://api.bilibili.com/x/v2/reply/action' \
## 点踩评论
-> http://api.bilibili.com/x/v2/reply/hate
+> https://api.bilibili.com/x/v2/reply/hate
*请求方式:POST*
@@ -327,7 +318,7 @@ curl 'http://api.bilibili.com/x/v2/reply/action' \
点踩视频`av243322853`下评论`rpid=3039053308`
```shell
-curl 'http://api.bilibili.com/x/v2/reply/hate' \
+curl 'https://api.bilibili.com/x/v2/reply/hate' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=243322853' \
--data-urlencode 'rpid=3039053308' \
@@ -351,7 +342,7 @@ curl 'http://api.bilibili.com/x/v2/reply/hate' \
## 删除评论
-> http://api.bilibili.com/x/v2/reply/del
+> https://api.bilibili.com/x/v2/reply/del
*请求方式:POST*
@@ -384,7 +375,7 @@ curl 'http://api.bilibili.com/x/v2/reply/hate' \
删除`av243322853`下评论`rpid=3039053308`
```shell
-curl 'http://api.bilibili.com/x/v2/reply/del' \
+curl 'https://api.bilibili.com/x/v2/reply/del' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=243322853' \
--data-urlencode 'rpid=3039053308' \
@@ -407,7 +398,7 @@ curl 'http://api.bilibili.com/x/v2/reply/del' \
## 置顶评论
-> http://api.bilibili.com/x/v2/reply/top
+> https://api.bilibili.com/x/v2/reply/top
*请求方式:POST*
@@ -441,7 +432,7 @@ curl 'http://api.bilibili.com/x/v2/reply/del' \
置顶视频`av243322853`下评论`rpid=2940645593`
```shell
-curl 'http://api.bilibili.com/x/v2/reply/top' \
+curl 'https://api.bilibili.com/x/v2/reply/top' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=243322853' \
--data-urlencode 'rpid=2940645593' \
@@ -465,7 +456,7 @@ curl 'http://api.bilibili.com/x/v2/reply/top' \
## 举报评论
-> http://api.bilibili.com/x/v2/reply/report
+> https://api.bilibili.com/x/v2/reply/report
*请求方式:POST*
@@ -512,7 +503,7 @@ curl 'http://api.bilibili.com/x/v2/reply/top' \
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -102:账号被封停 -111:csrf校验失败 -400:请求错误 -403:权限不足 -404:无此项 -500:服务器错误 -509:请求过于频繁 12002:评论区已关闭 12006:没有该评论 12008:已经举报过了 12009:评论主体的type不合法 12019:举报过于频繁 **(其他错误码有待补充)** |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -102:账号被封停 -111:csrf校验失败 -400:请求错误 -403:权限不足 -404:无此项 -500:服务器错误 -509:请求过于频繁 12002:评论区已关闭 12006:没有该评论 12008:已经举报过了 12009:评论主体的type不合法 12019:举报过于频繁 12077:其他举报理由过长或过短 **(其他错误码有待补充)** |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
@@ -521,7 +512,7 @@ curl 'http://api.bilibili.com/x/v2/reply/top' \
举报视频` av752881391 `下评论`rpid=3062537442`,理由是`引战`
```shell
-curl 'http://api.bilibili.com/x/v2/reply/report' \
+curl 'https://api.bilibili.com/x/v2/reply/report' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=752881391' \
--data-urlencode 'rpid=3062537442' \
diff --git a/comment/list.md b/docs/comment/list.md
similarity index 50%
rename from comment/list.md
rename to docs/comment/list.md
index 35724f0..e371a4e 100644
--- a/comment/list.md
+++ b/docs/comment/list.md
@@ -1,18 +1,8 @@
# 评论区明细
-- [获取评论区明细_翻页加载](#获取评论区明细_翻页加载)
-- [获取评论区明细_懒加载](#获取评论区明细_懒加载)
-- [获取指定评论的回复](#获取指定评论的回复)
-- [获取指定评论对话树](获取指定评论对话树)
-- [获取评论区热评](#获取评论区热评)
-- [获取指定评论信息](#获取指定评论信息)
-- [获取评论区评论总数](#获取评论区评论总数)
-
----
-
## 获取评论区明细_翻页加载
-> http://api.bilibili.com/x/v2/reply
+> https://api.bilibili.com/x/v2/reply
*请求方式:GET*
@@ -27,7 +17,7 @@
| oid | num | 目标评论区 id | 必要 | |
| sort | num | 排序方式 | 非必要 | 默认为0 0:按时间 1:按点赞数 2:按回复数 |
| nohot | num | 是否不显示热评 | 非必要 | 默认为0 1:不显示 0:显示 |
-| ps | num | 每页项数 | 非必要 | 默认为20 定义域:1-49 |
+| ps | num | 每页项数 | 非必要 | 默认为20 定义域:1-20 |
| pn | num | 页码 | 非必要 | 默认为1 |
**json回复:**
@@ -47,8 +37,8 @@
| ------------ | -------------------------------- | -------- | ---------------- |
| page | obj | 页信息 | |
| config | obj | 评论区显示控制 | |
-| replies | 禁用时:null 正常时:array | 评论列表 | |
-| hots | 禁用时:null 正常时:array | 热评列表 | |
+| replies | 禁用时:null 正常时:array | 评论列表 | |
+| hots | 禁用时:null 正常时:array | 热评列表 | |
| upper | obj | 置顶评论 | |
| top | null | (?) | |
| notice | 无效时:null 有效时:obj | 评论区公告信息 | |
@@ -128,7 +118,7 @@
| 字段 | 类型 | 内容 | 备注 |
| ------------------------ | ---- | ------------------ | ----------------------------------- |
-| input_disable | bool | 禁止输入? | |
+| input_disable | bool | 是否禁止新增评论 | 用户涉及合约争议,锁定该用户所有稿件、动态的评论区,不允许新增评论,`root_input_text`和`child_input_text`值为“当前评论区不可新增评论” |
| root_input_text | str | 评论框文字 | |
| child_input_text | str | 评论框文字 | |
| bg_text | str | 空评论区文字 | |
@@ -143,7 +133,7 @@
获取视频`av2`的评论区明细,不显示热评,按照热度排序,每页5项,查看第1页
```shell
-curl -G 'http://api.bilibili.com/x/v2/reply' \
+curl -G 'https://api.bilibili.com/x/v2/reply' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=2' \
--data-urlencode 'sort=1' \
@@ -866,11 +856,15 @@ curl -G 'http://api.bilibili.com/x/v2/reply' \
## 获取评论区明细_懒加载
-> http://api.bilibili.com/x/v2/reply/main
+> https://api.bilibili.com/x/v2/reply/wbi/main
+
+> ~~https://api.bilibili.com/x/v2/reply/main~~
*请求方式:GET*
-认证方式:Cookie(SESSDATA)或APP
+鉴权方式:[Wbi 签名](../misc/sign/wbi.md)
+
+注: Wbi 签名错误时返回 -403 而非 -352
**url参数:**
@@ -880,8 +874,39 @@ curl -G 'http://api.bilibili.com/x/v2/reply' \
| type | num | 评论区类型代码 | 必要 | [类型代码见表](readme.md#评论区类型代码) |
| oid | num | 目标评论区 id | 必要 | |
| mode | num | 排序方式 | 非必要 | 默认为 3 0 3:仅按热度 1:按热度+按时间 2:仅按时间 |
-| next | num | 评论页选择 | 非必要 | 按热度时:热度顺序页码(0 为第一页) 按时间时:时间倒序楼层号 默认为 0 |
-| ps | num | 每页项数 | 非必要 | 默认为 20 定义域:1-30 |
+| next | num | 翻页 | 非必要 | 不推荐, 已弃用, 优先级比 `pagination_str` 高 |
+| pagination_str | obj | 分页信息 | 非必要 | 见下 |
+| plat | num | 平台类型 | 非必要 | 如 `1` |
+| seek_rpid | str | 空 | 非必要 | 当获取第一页评论时存在 |
+| web_location | str | 1315875 | 非必要 | |
+
+`pagination_str`:
+
+| 参数名 | 类型 | 内容 | 备注 |
+| ----- | - | ------|------|
+| offset | str | 一个套着字符串皮的 JSON Object | 上次响应 `data.cursor.pagination_reply.next_offset` 的值, 获取第一页时为空, 其余见下参考 |
+
+`pagination_str` 中的 `offset`:
+
+| 参数名 | 类型 | 内容 | 备注 |
+| ----- | ---- | -- | - |
+| type | num | 类型 | 当 URL 参数 mode 为 2 时, 此项为 3 当 URL 参数 mode 为 3 时, 此项为 1 |
+| direction | num | 方向 | 1: 正序(默认) 2: 倒序 |
+| data | obj | 分页数据 | 当 type 为 1 时存在 |
+| Data | obj | 分页数据 | 当 type 为 3 时存在 |
+
+
+`offset` 中的 `data` (type=1):
+
+| 参数名 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| pn | num | 页码 (上次响应 `data.cursor.next` 的值) | |
+
+`offset` 中的 `Data` (type=3):
+
+| 参数名 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| cursor | num | 上次响应 `data.cursor.next` 的值 | |
**json回复:**
@@ -918,6 +943,10 @@ curl -G 'http://api.bilibili.com/x/v2/reply' \
| upper | obj | UP主信息 | |
| show_bvid | bool | 显示 bvid? | |
| control | obj | 评论区输入属性 | |
+| note | num | 1 | |
+| esports_grade_card | null | | |
+| callbacks | null | | |
+| context_feature | str | | |
`data`中的`cursor`对象:
@@ -929,9 +958,17 @@ curl -G 'http://api.bilibili.com/x/v2/reply' \
| next | num | 下页页码 | |
| is_end | bool | 是否为最后页 | false:否 true:是 |
| mode | num | 排序方式 | |
-| show_type | num | (?) | |
| support_mode | array | 支持的排序方式 | |
| name | str | 评论区类型名 | |
+| pagination_reply | str | 用于下一次请求的偏移信息 | |
+| session_id | str | 空 | |
+
+`cursor`中的`pagination_reply`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -- | - |
+| next_offset | str | 用于下一次请求的偏移信息 | |
+| prev_offset | str | 用于本次请求的偏移信息 | |
`data`中的`config`对象:
@@ -1008,2687 +1045,512 @@ curl -G 'http://api.bilibili.com/x/v2/reply' \
**示例:**
-获取视频`av2`的评论区明细,按照热度排序,每页5项,查看第1页
+获取视频`av2`的评论区明细, 按时间排序, 第一页
```shell
-curl -G 'http://api.bilibili.com/x/v2/reply/main' \
---data-urlencode 'type=1' \
+curl -G 'https://api.bilibili.com/x/v2/reply/wbi/main' \
--data-urlencode 'oid=2' \
---data-urlencode 'mode=3' \
---data-urlencode 'next=0' \
---data-urlencode 'ps=5' \
--b 'SESSDATA=xxx'
+--data-urlencode 'type=1' \
+--data-urlencode 'mode=2' \
+--data-urlencode 'w_rid=xxx' \
+--data-urlencode 'wts=xxx'
```
查看响应示例:
-```json
+```jsonc
{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "cursor": {
- "all_count": 76793,
- "is_begin": true,
- "prev": 1,
- "next": 2,
- "is_end": false,
- "mode": 3,
- "show_type": 1,
- "support_mode": [
- 1,
- 2,
- 3
- ],
- "name": "热门评论"
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "cursor": {
+ "is_begin": true,
+ "prev": 71880,
+ "next": 71859,
+ "is_end": false,
+ "mode": 2,
+ "mode_text": "",
+ "all_count": 86234,
+ "support_mode": [
+ 2,
+ 3
+ ],
+ "name": "最新评论",
+ "pagination_reply": {
+ "next_offset": "{\"type\":3,\"direction\":1,\"Data\":{\"cursor\":71859}}"
+ },
+ "session_id": ""
+ },
+ "replies": [
+ {
+ "rpid": 237740291920,
+ "oid": 2,
+ "type": 1,
+ "mid": 1201423076,
+ "root": 0,
+ "parent": 0,
+ "dialog": 0,
+ "count": 0,
+ "rcount": 0,
+ "state": 0,
+ "fansgrade": 0,
+ "attr": 0,
+ "ctime": 1723639342,
+ "mid_str": "1201423076",
+ "oid_str": "2",
+ "rpid_str": "237740291920",
+ "root_str": "0",
+ "parent_str": "0",
+ "dialog_str": "0",
+ "like": 0,
+ "action": 0,
+ "member": {
+ "mid": "1201423076",
+ "uname": "天堂いyoulin",
+ "sex": "保密",
+ "sign": "",
+ "avatar": "https://i2.hdslb.com/bfs/face/d0925e782198cadc0c400a3ed4fbdf94142357fb.jpg",
+ "rank": "10000",
+ "face_nft_new": 0,
+ "is_senior_member": 0,
+ "senior": {},
+ "level_info": {
+ "current_level": 4,
+ "current_min": 0,
+ "current_exp": 0,
+ "next_exp": 0
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0
+ },
+ "nameplate": {
+ "nid": 0,
+ "name": "",
+ "image": "",
+ "image_small": "",
+ "level": "",
+ "condition": ""
+ },
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 0,
+ "vipDueDate": 0,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 0,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": "",
+ "use_img_label": true,
+ "img_label_uri_hans": "",
+ "img_label_uri_hant": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png"
+ },
+ "avatar_subscript": 0,
+ "nickname_color": ""
+ },
+ "fans_detail": null,
+ "user_sailing": {
+ "pendant": null,
+ "cardbg": null,
+ "cardbg_with_focus": null
+ },
+ "user_sailing_v2": {},
+ "is_contractor": false,
+ "contract_desc": "",
+ "nft_interaction": null,
+ "avatar_item": {
+ "container_size": {
+ "width": 1.8,
+ "height": 1.8
+ },
+ "fallback_layers": {
+ "layers": [
+ {
+ "visible": true,
+ "general_spec": {
+ "pos_spec": {
+ "coordinate_pos": 2,
+ "axis_x": 0.9,
+ "axis_y": 0.9
+ },
+ "size_spec": {
+ "width": 1,
+ "height": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "AVATAR_LAYER": {}
+ },
+ "is_critical": true,
+ "layer_mask": {
+ "general_spec": {
+ "pos_spec": {
+ "coordinate_pos": 2,
+ "axis_x": 0.9,
+ "axis_y": 0.9
+ },
+ "size_spec": {
+ "width": 1,
+ "height": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ }
+ },
+ "mask_src": {
+ "src_type": 3,
+ "draw": {
+ "draw_type": 1,
+ "fill_mode": 1,
+ "color_config": {
+ "day": {
+ "argb": "#FF000000"
+ }
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_type": 3,
+ "res_image": {
+ "image_src": {
+ "src_type": 1,
+ "placeholder": 6,
+ "remote": {
+ "url": "https://i2.hdslb.com/bfs/face/d0925e782198cadc0c400a3ed4fbdf94142357fb.jpg",
+ "bfs_style": "widget-layer-avatar"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "is_critical_group": true
+ },
+ "mid": "1201423076"
+ }
},
- "hots": null,
- "notice": null,
- "replies": [
- {
- "rpid": 476670,
- "oid": 2,
- "type": 1,
- "mid": 58426,
- "root": 0,
- "parent": 0,
- "dialog": 0,
- "count": 2733,
- "rcount": 2608,
- "state": 0,
- "fansgrade": 0,
- "attr": 0,
- "ctime": 1291350931,
- "rpid_str": "476670",
- "root_str": "0",
- "parent_str": "0",
- "like": 90419,
- "action": 0,
- "member": {
- "mid": "58426",
- "uname": "残星什么的就是残星",
- "sex": "男",
- "sign": "少说话多做事 _微博@残星",
- "avatar": "http://i1.hdslb.com/bfs/face/56ac36b37662e3746228f30eb4acf2cd332b66a5.jpg",
- "rank": "20000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 6,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 30,
- "name": "字幕君",
- "image": "http://i1.hdslb.com/bfs/face/383c3fed3dc162c93a8d616a272693f6650e98f1.png",
- "image_small": "http://i2.hdslb.com/bfs/face/7ad18084e40b725210e22696e0efdae408cd378c.png",
- "level": "稀有勋章",
- "condition": "弹幕大赛获得"
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 2,
- "vipDueDate": 1710777600000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 1,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "年度大会员",
- "label_theme": "annual_vip",
- "text_color": "#FFFFFF",
- "bg_style": 1,
- "bg_color": "#FB7299",
- "border_color": ""
- },
- "avatar_subscript": 1,
- "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png",
- "nickname_color": "#FB7299"
- },
- "fans_detail": null,
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": null,
- "cardbg": null,
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "貌似没人来",
- "plat": 0,
- "device": "",
- "members": [],
- "jump_url": {},
- "max_line": 6
- },
- "replies": [
- {
- "rpid": 214198733,
- "oid": 2,
- "type": 1,
- "mid": 18370638,
- "root": 476670,
- "parent": 476670,
- "dialog": 214198733,
- "count": 0,
- "rcount": 0,
- "state": 0,
- "fansgrade": 0,
- "attr": 0,
- "ctime": 1488888369,
- "rpid_str": "214198733",
- "root_str": "476670",
- "parent_str": "476670",
- "like": 1958,
- "action": 0,
- "member": {
- "mid": "18370638",
- "uname": "初音ハク",
- "sex": "保密",
- "sign": "我是艾尔的利刃",
- "avatar": "http://i0.hdslb.com/bfs/face/71b838cc7c69dc16e0ad49fa4e6f84a2fe2eaadb.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 5,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 74,
- "name": "大会员2018年度勋章",
- "image": "http://i0.hdslb.com/bfs/face/421179426c929dfeaed4117461c83f5d07ffb148.png",
- "image_small": "http://i2.hdslb.com/bfs/face/682001c2e1c2ae887bdf2a0e18eef61180c48f84.png",
- "level": "稀有勋章",
- "condition": "2018.6.26-7.8某一天是年度大会员"
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 2,
- "vipDueDate": 1654790400000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 1,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "年度大会员",
- "label_theme": "annual_vip",
- "text_color": "#FFFFFF",
- "bg_style": 1,
- "bg_color": "#FB7299",
- "border_color": ""
- },
- "avatar_subscript": 1,
- "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png",
- "nickname_color": "#FB7299"
- },
- "fans_detail": null,
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": null,
- "cardbg": null,
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "划了4千多条评论找到的啊ε=ε=(ノ≧∇≦)ノ",
- "plat": 0,
- "device": "",
- "members": [],
- "jump_url": {},
- "max_line": 999
- },
- "replies": null,
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": ""
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "time_desc": "1821天前发布"
- }
- },
- {
- "rpid": 568785293,
- "oid": 2,
- "type": 1,
- "mid": 52987877,
- "root": 476670,
- "parent": 476670,
- "dialog": 568785293,
- "count": 0,
- "rcount": 0,
- "state": 0,
- "fansgrade": 0,
- "attr": 0,
- "ctime": 1514903586,
- "rpid_str": "568785293",
- "root_str": "476670",
- "parent_str": "476670",
- "like": 6534,
- "action": 0,
- "member": {
- "mid": "52987877",
- "uname": "Mr-Shadow",
- "sex": "男",
- "sign": "重灾区话题回避",
- "avatar": "http://i2.hdslb.com/bfs/face/dc679f8221b27e2056c1ad018d168402d80d98d5.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 6,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 2511,
- "name": "初音未来13周年",
- "image": "http://i2.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png",
- "expire": 0,
- "image_enhance": "http://i2.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp",
- "image_enhance_frame": "http://i2.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png"
- },
- "nameplate": {
- "nid": 61,
- "name": "有爱楷模",
- "image": "http://i2.hdslb.com/bfs/face/5a90f715451325c642a6ac39e01195cb6d075734.png",
- "image_small": "http://i0.hdslb.com/bfs/face/5bfc1b4fb3f4b411495dddb0b2127ad80f6fbcac.png",
- "level": "普通勋章",
- "condition": "当前持有粉丝勋章最高等级>=10级"
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 2,
- "vipDueDate": 1666281600000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 1,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "年度大会员",
- "label_theme": "annual_vip",
- "text_color": "#FFFFFF",
- "bg_style": 1,
- "bg_color": "#FB7299",
- "border_color": ""
- },
- "avatar_subscript": 1,
- "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png",
- "nickname_color": "#FB7299"
- },
- "fans_detail": null,
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": {
- "id": 2511,
- "name": "初音未来13周年",
- "image": "http://i0.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png",
- "jump_url": "",
- "type": "suit",
- "image_enhance": "http://i0.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp",
- "image_enhance_frame": "http://i0.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png"
- },
- "cardbg": {
- "id": 2528,
- "name": "初音未来13周年",
- "image": "http://i0.hdslb.com/bfs/garb/item/7dbd22f700e0a7fe0c0d0da7b1a54241626bf1cd.png",
- "jump_url": "https://www.bilibili.com/h5/mall/fans/recommend/2554?navhide=1&mid=52987877&from=reply",
- "fan": {
- "is_fan": 1,
- "number": 94388,
- "color": "#07b6d5",
- "name": "初音未来周年纪念",
- "num_desc": "094388"
- },
- "type": "suit"
- },
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "你可能抢到了整个b站最难抢到的沙发(`・ω・´)",
- "plat": 0,
- "device": "",
- "members": [],
- "jump_url": {},
- "max_line": 999
- },
- "replies": null,
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": ""
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "time_desc": "1520天前发布"
- }
- },
- {
- "rpid": 2237449754,
- "oid": 2,
- "type": 1,
- "mid": 400121455,
- "root": 476670,
- "parent": 568785293,
- "dialog": 568785293,
- "count": 0,
- "rcount": 0,
- "state": 0,
- "fansgrade": 0,
- "attr": 0,
- "ctime": 1578311878,
- "rpid_str": "2237449754",
- "root_str": "476670",
- "parent_str": "568785293",
- "like": 194,
- "action": 0,
- "member": {
- "mid": "400121455",
- "uname": "TxAY丶",
- "sex": "保密",
- "sign": "6月后有空做视频 | 星火工作室后期、CM拜年祭制作成员",
- "avatar": "http://i1.hdslb.com/bfs/face/ce011d50196afd8fedc45240f6aebab061aee524.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 5,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 4,
- "name": "青铜殿堂",
- "image": "http://i2.hdslb.com/bfs/face/2879cd5fb8518f7c6da75887994c1b2a7fe670bd.png",
- "image_small": "http://i1.hdslb.com/bfs/face/6707c120e00a3445933308fd9b7bd9fad99e9ec4.png",
- "level": "普通勋章",
- "condition": "单个自制视频总播放数>=1万"
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 1,
- "vipDueDate": 1626364800000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "",
- "label_theme": "",
- "text_color": "",
- "bg_style": 0,
- "bg_color": "",
- "border_color": ""
- },
- "avatar_subscript": 0,
- "nickname_color": ""
- },
- "fans_detail": null,
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": null,
- "cardbg": null,
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "回复 @Mr-Shadow :你可能抢到了整个b站最难抢到的热评的热评",
- "plat": 0,
- "device": "",
- "members": [],
- "jump_url": {},
- "max_line": 999
- },
- "replies": null,
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": ""
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "time_desc": "786天前发布"
- }
- }
- ],
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": "https://www.bilibili.com/blackboard/foldingreply.html"
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": true,
- "invisible": false,
- "reply_control": {
- "sub_reply_entry_text": "共2608条回复",
- "sub_reply_title_text": "相关回复共2608条",
- "time_desc": "4107天前发布"
- }
- },
- {
- "rpid": 917945205,
- "oid": 2,
- "type": 1,
- "mid": 34762090,
- "root": 0,
- "parent": 0,
- "dialog": 0,
- "count": 461,
- "rcount": 365,
- "state": 0,
- "fansgrade": 1,
- "attr": 0,
- "ctime": 1532071373,
- "rpid_str": "917945205",
- "root_str": "0",
- "parent_str": "0",
- "like": 29793,
- "action": 0,
- "member": {
- "mid": "34762090",
- "uname": "某不科学的瓜皮",
- "sex": "男",
- "sign": "持杯拱天,谓无言,静沉眠",
- "avatar": "http://i1.hdslb.com/bfs/face/cc61140c64409a3f5793207f3c866555e8638ab5.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 5,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 4,
- "name": "青铜殿堂",
- "image": "http://i0.hdslb.com/bfs/face/2879cd5fb8518f7c6da75887994c1b2a7fe670bd.png",
- "image_small": "http://i2.hdslb.com/bfs/face/6707c120e00a3445933308fd9b7bd9fad99e9ec4.png",
- "level": "普通勋章",
- "condition": "单个自制视频总播放数>=1万"
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 1,
- "vipDueDate": 1631980800000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "",
- "label_theme": "",
- "text_color": "",
- "bg_style": 0,
- "bg_color": "",
- "border_color": ""
- },
- "avatar_subscript": 0,
- "nickname_color": ""
- },
- "fans_detail": {
- "uid": 34762090,
- "medal_id": 29058,
- "medal_name": "逸国",
- "score": 0,
- "level": 1,
- "intimacy": 0,
- "master_status": 1,
- "is_receive": 1,
- "medal_color": 643602062,
- "medal_color_end": 643602062,
- "medal_color_border": 4284257934,
- "medal_color_name": 4284257934,
- "medal_color_level": 4284257934,
- "guard_level": 0
- },
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": null,
- "cardbg": null,
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "7.20日,站长被封7天\n\n历史性留名[2233娘_卖萌]",
- "plat": 0,
- "device": "",
- "members": [],
- "emote": {
- "[2233娘_卖萌]": {
- "id": 140,
- "package_id": 6,
- "state": 0,
- "type": 2,
- "attr": 0,
- "text": "[2233娘_卖萌]",
- "url": "http://i0.hdslb.com/bfs/emote/ea893aa25355de95ab4f03c2dad3f0c58d0c159e.png",
- "meta": {
- "size": 2
- },
- "mtime": 1626664892,
- "jump_title": "卖萌"
- }
- },
- "jump_url": {},
- "max_line": 6
- },
- "replies": [
- {
- "rpid": 1781253749,
- "oid": 2,
- "type": 1,
- "mid": 34762090,
- "root": 917945205,
- "parent": 917945205,
- "dialog": 1781253749,
- "count": 0,
- "rcount": 0,
- "state": 0,
- "fansgrade": 1,
- "attr": 0,
- "ctime": 1563598609,
- "rpid_str": "1781253749",
- "root_str": "917945205",
- "parent_str": "917945205",
- "like": 1224,
- "action": 0,
- "member": {
- "mid": "34762090",
- "uname": "某不科学的瓜皮",
- "sex": "男",
- "sign": "持杯拱天,谓无言,静沉眠",
- "avatar": "http://i1.hdslb.com/bfs/face/cc61140c64409a3f5793207f3c866555e8638ab5.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 5,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 4,
- "name": "青铜殿堂",
- "image": "http://i0.hdslb.com/bfs/face/2879cd5fb8518f7c6da75887994c1b2a7fe670bd.png",
- "image_small": "http://i2.hdslb.com/bfs/face/6707c120e00a3445933308fd9b7bd9fad99e9ec4.png",
- "level": "普通勋章",
- "condition": "单个自制视频总播放数>=1万"
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 1,
- "vipDueDate": 1631980800000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "",
- "label_theme": "",
- "text_color": "",
- "bg_style": 0,
- "bg_color": "",
- "border_color": ""
- },
- "avatar_subscript": 0,
- "nickname_color": ""
- },
- "fans_detail": {
- "uid": 34762090,
- "medal_id": 29058,
- "medal_name": "逸国",
- "score": 0,
- "level": 1,
- "intimacy": 0,
- "master_status": 1,
- "is_receive": 1,
- "medal_color": 643602062,
- "medal_color_end": 643602062,
- "medal_color_border": 4284257934,
- "medal_color_name": 4284257934,
- "medal_color_level": 4284257934,
- "guard_level": 0
- },
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": null,
- "cardbg": null,
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "站长被封一周年 [小电视_笑]",
- "plat": 0,
- "device": "",
- "members": [],
- "emote": {
- "[小电视_笑]": {
- "id": 121,
- "package_id": 5,
- "state": 0,
- "type": 2,
- "attr": 0,
- "text": "[小电视_笑]",
- "url": "http://i0.hdslb.com/bfs/emote/f80d384875183dfe2e24be13011c595c0210d273.png",
- "meta": {
- "size": 2
- },
- "mtime": 1628587688,
- "jump_title": "笑"
- }
- },
- "jump_url": {},
- "max_line": 999
- },
- "replies": null,
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": ""
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "time_desc": "956天前发布"
- }
- },
- {
- "rpid": 1781556726,
- "oid": 2,
- "type": 1,
- "mid": 417437969,
- "root": 917945205,
- "parent": 1781253749,
- "dialog": 1781253749,
- "count": 0,
- "rcount": 0,
- "state": 0,
- "fansgrade": 0,
- "attr": 0,
- "ctime": 1563605321,
- "rpid_str": "1781556726",
- "root_str": "917945205",
- "parent_str": "1781253749",
- "like": 372,
- "action": 0,
- "member": {
- "mid": "417437969",
- "uname": "理查奈德",
- "sex": "男",
- "sign": "欲雷普琪露诺的各种小圈子小鬼",
- "avatar": "http://i2.hdslb.com/bfs/face/6923f6414503413f292a1cfad13ac483683a77d6.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 5,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 0,
- "name": "",
- "image": "",
- "image_small": "",
- "level": "",
- "condition": ""
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 0,
- "vipDueDate": 0,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "",
- "label_theme": "",
- "text_color": "",
- "bg_style": 0,
- "bg_color": "",
- "border_color": ""
- },
- "avatar_subscript": 0,
- "nickname_color": ""
- },
- "fans_detail": null,
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": null,
- "cardbg": null,
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "回复 @某不科学的瓜皮 :这是件值得庆祝的日子啊(滑稽保命)[滑稽]",
- "plat": 0,
- "device": "",
- "members": [],
- "emote": {
- "[滑稽]": {
- "id": 27,
- "package_id": 1,
- "state": 0,
- "type": 1,
- "attr": 0,
- "text": "[滑稽]",
- "url": "http://i0.hdslb.com/bfs/emote/d15121545a99ac46774f1f4465b895fe2d1411c3.png",
- "meta": {
- "size": 1
- },
- "mtime": 1645206695,
- "jump_title": "滑稽"
- }
- },
- "jump_url": {},
- "max_line": 999
- },
- "replies": null,
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": ""
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "time_desc": "956天前发布"
- }
- },
- {
- "rpid": 2254034005,
- "oid": 2,
- "type": 1,
- "mid": 435781129,
- "root": 917945205,
- "parent": 917945205,
- "dialog": 2254034005,
- "count": 0,
- "rcount": 0,
- "state": 0,
- "fansgrade": 0,
- "attr": 0,
- "ctime": 1578829367,
- "rpid_str": "2254034005",
- "root_str": "917945205",
- "parent_str": "917945205",
- "like": 137,
- "action": 0,
- "member": {
- "mid": "435781129",
- "uname": "yourmumdie",
- "sex": "保密",
- "sign": "签名不能留八个字",
- "avatar": "http://i1.hdslb.com/bfs/face/77489a807c616304cef9ac446b8bed2528de4e25.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 5,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 0,
- "name": "",
- "image": "",
- "image_small": "",
- "level": "",
- "condition": ""
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 1,
- "vipDueDate": 1644249600000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "",
- "label_theme": "",
- "text_color": "",
- "bg_style": 0,
- "bg_color": "",
- "border_color": ""
- },
- "avatar_subscript": 0,
- "nickname_color": ""
- },
- "fans_detail": null,
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": null,
- "cardbg": null,
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "av7",
- "plat": 0,
- "device": "",
- "members": [],
- "jump_url": {
- "av7": {
- "title": "2012地球便当之日宣传片",
- "state": 0,
- "prefix_icon": "https://i0.hdslb.com/bfs/activity-plat/static/20201110/4c8b2dbaded282e67c9a31daa4297c3c/AeQJlYP7e.png",
- "app_url_schema": "",
- "app_name": "",
- "app_package_name": "",
- "click_report": "7",
- "is_half_screen": false,
- "exposure_report": ""
- }
- },
- "max_line": 999
- },
- "replies": null,
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": ""
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "time_desc": "780天前发布"
- }
- }
- ],
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": "https://www.bilibili.com/blackboard/foldingreply.html"
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": true,
- "invisible": false,
- "reply_control": {
- "sub_reply_entry_text": "共365条回复",
- "sub_reply_title_text": "相关回复共365条",
- "time_desc": "1321天前发布"
- }
- },
- {
- "rpid": 2576184175,
- "oid": 2,
- "type": 1,
- "mid": 24512285,
- "root": 0,
- "parent": 0,
- "dialog": 0,
- "count": 1066,
- "rcount": 1000,
- "state": 0,
- "fansgrade": 0,
- "attr": 0,
- "ctime": 1584945297,
- "rpid_str": "2576184175",
- "root_str": "0",
- "parent_str": "0",
- "like": 44307,
- "action": 0,
- "member": {
- "mid": "24512285",
- "uname": "艾斯黛斯T",
- "sex": "男",
- "sign": "飞飞飞",
- "avatar": "http://i2.hdslb.com/bfs/face/e2176a16d749fdb720d4181309d4075c91db7952.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 6,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 4104,
- "name": "良辰美景·不问天",
- "image": "http://i2.hdslb.com/bfs/garb/item/4dbf08aae75f9479a21db2bb289229b8d71631e1.png",
- "expire": 0,
- "image_enhance": "http://i2.hdslb.com/bfs/garb/item/253bf41272ddef301c1f6a0361abd49d772bfafc.webp",
- "image_enhance_frame": "http://i2.hdslb.com/bfs/garb/item/c4934a1ffdb3865fe79b319de439af3973b53ec9.png"
- },
- "nameplate": {
- "nid": 58,
- "name": "收集达人",
- "image": "http://i0.hdslb.com/bfs/face/3f5539e1486303422ffc8595862ccb6606e0b745.png",
- "image_small": "http://i0.hdslb.com/bfs/face/cf85e7908095d256e595ec9759f4e7795f23bc22.png",
- "level": "普通勋章",
- "condition": "同时拥有粉丝勋章>=15个"
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 2,
- "vipDueDate": 1646236800000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 1,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "年度大会员",
- "label_theme": "annual_vip",
- "text_color": "#FFFFFF",
- "bg_style": 1,
- "bg_color": "#FB7299",
- "border_color": ""
- },
- "avatar_subscript": 1,
- "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png",
- "nickname_color": "#FB7299"
- },
- "fans_detail": null,
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": {
- "id": 4104,
- "name": "良辰美景·不问天",
- "image": "http://i0.hdslb.com/bfs/garb/item/4dbf08aae75f9479a21db2bb289229b8d71631e1.png",
- "jump_url": "",
- "type": "suit",
- "image_enhance": "http://i0.hdslb.com/bfs/garb/item/253bf41272ddef301c1f6a0361abd49d772bfafc.webp",
- "image_enhance_frame": "http://i0.hdslb.com/bfs/garb/item/c4934a1ffdb3865fe79b319de439af3973b53ec9.png"
- },
- "cardbg": {
- "id": 4123,
- "name": "良辰美景·不问天",
- "image": "http://i0.hdslb.com/bfs/garb/item/f251c507a2b09605d414c9107ffe2073bbf65735.png",
- "jump_url": "https://www.bilibili.com/h5/mall/fans/recommend/4019?navhide=1&mid=24512285&from=reply",
- "fan": {
- "is_fan": 1,
- "number": 70746,
- "color": "#fe7491",
- "name": "良辰美景·不问天",
- "num_desc": "070746"
- },
- "type": "suit"
- },
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "人类最古のav号(挂了的不算)也变成bv了[大哭][大哭][大哭]青春结束了",
- "plat": 0,
- "device": "",
- "members": [],
- "emote": {
- "[大哭]": {
- "id": 5,
- "package_id": 1,
- "state": 0,
- "type": 1,
- "attr": 0,
- "text": "[大哭]",
- "url": "http://i0.hdslb.com/bfs/emote/2caafee2e5db4db72104650d87810cc2c123fc86.png",
- "meta": {
- "size": 1
- },
- "mtime": 1597738918,
- "jump_title": "大哭"
- }
- },
- "jump_url": {},
- "max_line": 6
- },
- "replies": [
- {
- "rpid": 2578082161,
- "oid": 2,
- "type": 1,
- "mid": 407225717,
- "root": 2576184175,
- "parent": 2576184175,
- "dialog": 2578082161,
- "count": 0,
- "rcount": 0,
- "state": 0,
- "fansgrade": 0,
- "attr": 0,
- "ctime": 1584964926,
- "rpid_str": "2578082161",
- "root_str": "2576184175",
- "parent_str": "2576184175",
- "like": 2030,
- "action": 0,
- "member": {
- "mid": "407225717",
- "uname": "白月魁单推人",
- "sex": "保密",
- "sign": "",
- "avatar": "http://i2.hdslb.com/bfs/face/57899fca9856acfb2f92fdabf00e655a74aeae67.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 5,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 0,
- "name": "",
- "image": "",
- "image_small": "",
- "level": "",
- "condition": ""
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 1,
- "vipDueDate": 1626364800000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "",
- "label_theme": "",
- "text_color": "",
- "bg_style": 0,
- "bg_color": "",
- "border_color": ""
- },
- "avatar_subscript": 0,
- "nickname_color": ""
- },
- "fans_detail": null,
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": null,
- "cardbg": null,
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "先留个名,估计以后av会被当成冷知识放出来[大哭]",
- "plat": 0,
- "device": "",
- "members": [],
- "emote": {
- "[大哭]": {
- "id": 5,
- "package_id": 1,
- "state": 0,
- "type": 1,
- "attr": 0,
- "text": "[大哭]",
- "url": "http://i0.hdslb.com/bfs/emote/2caafee2e5db4db72104650d87810cc2c123fc86.png",
- "meta": {
- "size": 1
- },
- "mtime": 1597738918,
- "jump_title": "大哭"
- }
- },
- "jump_url": {},
- "max_line": 999
- },
- "replies": null,
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": ""
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "time_desc": "709天前发布"
- }
- },
- {
- "rpid": 2579961512,
- "oid": 2,
- "type": 1,
- "mid": 329965337,
- "root": 2576184175,
- "parent": 2576184175,
- "dialog": 2579961512,
- "count": 0,
- "rcount": 0,
- "state": 0,
- "fansgrade": 0,
- "attr": 0,
- "ctime": 1584982846,
- "rpid_str": "2579961512",
- "root_str": "2576184175",
- "parent_str": "2576184175",
- "like": 248,
- "action": 0,
- "member": {
- "mid": "329965337",
- "uname": "积极发言的刘同学",
- "sex": "男",
- "sign": "Hi这里是刘同学,一个业余的校园摄影及公路自行车骑手,同时也是在校高中生(有时穿穿dk)",
- "avatar": "http://i2.hdslb.com/bfs/face/3b586d7dbe8c2dba32b213e0a474fe6d86921b85.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 5,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 0,
- "name": "",
- "image": "",
- "image_small": "",
- "level": "",
- "condition": ""
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 1,
- "vipDueDate": 1585324800000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "",
- "label_theme": "",
- "text_color": "",
- "bg_style": 0,
- "bg_color": "",
- "border_color": ""
- },
- "avatar_subscript": 0,
- "nickname_color": ""
- },
- "fans_detail": null,
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": null,
- "cardbg": null,
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "10个小时就有6500多赞?你是魔鬼?",
- "plat": 0,
- "device": "",
- "members": [],
- "jump_url": {},
- "max_line": 999
- },
- "replies": null,
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": ""
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "time_desc": "708天前发布"
- }
- },
- {
- "rpid": 2596150498,
- "oid": 2,
- "type": 1,
- "mid": 426825448,
- "root": 2576184175,
- "parent": 2578082161,
- "dialog": 2578082161,
- "count": 0,
- "rcount": 0,
- "state": 0,
- "fansgrade": 0,
- "attr": 0,
- "ctime": 1585211858,
- "rpid_str": "2596150498",
- "root_str": "2576184175",
- "parent_str": "2578082161",
- "like": 605,
- "action": 0,
- "member": {
- "mid": "426825448",
- "uname": "TrueBinger",
- "sex": "男",
- "sign": "这个人不懒,但是什么都没有留下。",
- "avatar": "http://i1.hdslb.com/bfs/face/4bcc2120e3cb0ce855de6500a9bc422e981ced32.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 5,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 62,
- "name": "有爱大佬",
- "image": "http://i0.hdslb.com/bfs/face/a10ee6b613e0d68d2dfdac8bbf71b94824e10408.png",
- "image_small": "http://i2.hdslb.com/bfs/face/54f4c31ab9b1f1fa2c29dbbc967f66535699337e.png",
- "level": "普通勋章",
- "condition": "当前持有粉丝勋章最高等级>=15级"
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 1,
- "vipDueDate": 1592668800000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "",
- "label_theme": "",
- "text_color": "",
- "bg_style": 0,
- "bg_color": "",
- "border_color": ""
- },
- "avatar_subscript": 0,
- "nickname_color": ""
- },
- "fans_detail": null,
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": null,
- "cardbg": null,
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "回复 @渣男5107号 :哈喽各位小伙伴们大家好,众所周知,世界第一大视频网站bilibili的视频采用bv号来标记视频,可小伙伴们知道吗,其实在2020.3之前,bv一直都是av哦!这已经是100000年前的事了,小伙伴们知道了吗[滑稽]",
- "plat": 0,
- "device": "",
- "members": [],
- "emote": {
- "[滑稽]": {
- "id": 27,
- "package_id": 1,
- "state": 0,
- "type": 1,
- "attr": 0,
- "text": "[滑稽]",
- "url": "http://i0.hdslb.com/bfs/emote/d15121545a99ac46774f1f4465b895fe2d1411c3.png",
- "meta": {
- "size": 1
- },
- "mtime": 1645206695,
- "jump_title": "滑稽"
- }
- },
- "jump_url": {},
- "max_line": 999
- },
- "replies": null,
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": ""
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "time_desc": "706天前发布"
- }
- }
- ],
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": "https://www.bilibili.com/blackboard/foldingreply.html"
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": true,
- "invisible": false,
- "reply_control": {
- "sub_reply_entry_text": "共1000条回复",
- "sub_reply_title_text": "相关回复共1000条",
- "time_desc": "709天前发布"
- }
- },
- {
- "rpid": 495059,
- "oid": 2,
- "type": 1,
- "mid": 2,
- "root": 0,
- "parent": 0,
- "dialog": 0,
- "count": 898,
- "rcount": 838,
- "state": 2,
- "fansgrade": 0,
- "attr": 0,
- "ctime": 1291918239,
- "rpid_str": "495059",
- "root_str": "0",
- "parent_str": "0",
- "like": 34223,
- "action": 0,
- "member": {
- "mid": "2",
- "uname": "碧诗",
- "sex": "男",
- "sign": "kami.im 直男过气网红 # av362830 “We Are Star Dust”",
- "avatar": "http://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg",
- "rank": "20000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 6,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 10,
- "name": "见习偶像",
- "image": "http://i2.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png",
- "image_small": "http://i1.hdslb.com/bfs/face/275b468b043ec246737ab8580a2075bee0b1263b.png",
- "level": "普通勋章",
- "condition": "所有自制视频总播放数>=10万"
- },
- "official_verify": {
- "type": 0,
- "desc": "bilibili创始人(站长)"
- },
- "vip": {
- "vipType": 2,
- "vipDueDate": 3901881600000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 1,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "十年大会员",
- "label_theme": "ten_annual_vip",
- "text_color": "#FFFFFF",
- "bg_style": 1,
- "bg_color": "#FB7299",
- "border_color": ""
- },
- "avatar_subscript": 1,
- "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png",
- "nickname_color": "#FB7299"
- },
- "fans_detail": null,
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": null,
- "cardbg": {
- "id": 3865,
- "name": "2021拜年纪",
- "image": "http://i0.hdslb.com/bfs/garb/item/e2c4d4ba094ddb98c1f72114a12081b4eca7ed88.png",
- "jump_url": "https://www.bilibili.com/h5/mall/fans/recommend/3898?navhide=1&mid=2&from=reply",
- "fan": {
- "is_fan": 1,
- "number": 21206,
- "color": "#ec3d39",
- "name": "2021拜年纪",
- "num_desc": "021206"
- },
- "type": "suit"
- },
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "wwwww",
- "plat": 0,
- "device": "",
- "members": [],
- "jump_url": {},
- "max_line": 6
- },
- "replies": [
- {
- "rpid": 164517433,
- "oid": 2,
- "type": 1,
- "mid": 3476504,
- "root": 495059,
- "parent": 495059,
- "dialog": 164517433,
- "count": 0,
- "rcount": 0,
- "state": 0,
- "fansgrade": 0,
- "attr": 0,
- "ctime": 1479570959,
- "rpid_str": "164517433",
- "root_str": "495059",
- "parent_str": "495059",
- "like": 478,
- "action": 0,
- "member": {
- "mid": "3476504",
- "uname": "MaskQwQ麦斯科",
- "sex": "保密",
- "sign": "重拾过去。。",
- "avatar": "http://i2.hdslb.com/bfs/face/7bf954d807cbda4de4221d78f3b425534042ac02.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 6,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 194,
- "name": "黑白无双",
- "image": "http://i2.hdslb.com/bfs/face/89b25cad74abd9e42a94b11e456bc21fe36b8763.png",
- "expire": 0,
- "image_enhance": "http://i2.hdslb.com/bfs/face/89b25cad74abd9e42a94b11e456bc21fe36b8763.png",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 74,
- "name": "大会员2018年度勋章",
- "image": "http://i0.hdslb.com/bfs/face/421179426c929dfeaed4117461c83f5d07ffb148.png",
- "image_small": "http://i1.hdslb.com/bfs/face/682001c2e1c2ae887bdf2a0e18eef61180c48f84.png",
- "level": "稀有勋章",
- "condition": "2018.6.26-7.8某一天是年度大会员"
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 2,
- "vipDueDate": 1771344000000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 1,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "年度大会员",
- "label_theme": "annual_vip",
- "text_color": "#FFFFFF",
- "bg_style": 1,
- "bg_color": "#FB7299",
- "border_color": ""
- },
- "avatar_subscript": 1,
- "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png",
- "nickname_color": "#FB7299"
- },
- "fans_detail": null,
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": {
- "id": 194,
- "name": "黑白无双",
- "image": "http://i0.hdslb.com/bfs/face/89b25cad74abd9e42a94b11e456bc21fe36b8763.png",
- "jump_url": "",
- "type": "vip",
- "image_enhance": "http://i0.hdslb.com/bfs/face/89b25cad74abd9e42a94b11e456bc21fe36b8763.png",
- "image_enhance_frame": ""
- },
- "cardbg": null,
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "拉了半天总算是见了底",
- "plat": 0,
- "device": "",
- "members": [],
- "jump_url": {},
- "max_line": 999
- },
- "replies": null,
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": ""
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "time_desc": "1928天前发布"
- }
- },
- {
- "rpid": 464424502,
- "oid": 2,
- "type": 1,
- "mid": 37145412,
- "root": 495059,
- "parent": 495059,
- "dialog": 464424502,
- "count": 0,
- "rcount": 0,
- "state": 0,
- "fansgrade": 1,
- "attr": 0,
- "ctime": 1509257961,
- "rpid_str": "464424502",
- "root_str": "495059",
- "parent_str": "495059",
- "like": 298,
- "action": 0,
- "member": {
- "mid": "37145412",
- "uname": "边走边发呆",
- "sex": "男",
- "sign": "这个人懒死了,什么都不发=_= 头像是素晴日",
- "avatar": "http://i0.hdslb.com/bfs/face/4dfe0f1b0bfc9b1afea9e3bacbc5a92221fe9b09.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 6,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 60,
- "name": "有爱萌新",
- "image": "http://i1.hdslb.com/bfs/face/51ca16136e570938450bca360f28761ceb609f33.png",
- "image_small": "http://i2.hdslb.com/bfs/face/9abfa4769357f85937782c2dbc40fafda4f57217.png",
- "level": "普通勋章",
- "condition": "当前持有粉丝勋章最高等级>=5级"
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 1,
- "vipDueDate": 1559836800000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "",
- "label_theme": "",
- "text_color": "",
- "bg_style": 0,
- "bg_color": "",
- "border_color": ""
- },
- "avatar_subscript": 0,
- "nickname_color": ""
- },
- "fans_detail": {
- "uid": 37145412,
- "medal_id": 29058,
- "medal_name": "逸国",
- "score": 0,
- "level": 7,
- "intimacy": 0,
- "master_status": 1,
- "is_receive": 1,
- "medal_color": 643660702,
- "medal_color_end": 643660702,
- "medal_color_border": 6126494,
- "medal_color_name": 6126494,
- "medal_color_level": 6126494,
- "guard_level": 0
- },
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": null,
- "cardbg": null,
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "5000多楼6225评论(;¬_¬)手有点酸,如果不是特殊方法进来的话是要大会员吧(● ̄(エ) ̄●)",
- "plat": 0,
- "device": "",
- "members": [],
- "jump_url": {},
- "max_line": 999
- },
- "replies": null,
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": ""
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "time_desc": "1585天前发布"
- }
- },
- {
- "rpid": 4002945120,
- "oid": 2,
- "type": 1,
- "mid": 282146749,
- "root": 495059,
- "parent": 464424502,
- "dialog": 464424502,
- "count": 0,
- "rcount": 0,
- "state": 0,
- "fansgrade": 0,
- "attr": 0,
- "ctime": 1611588059,
- "rpid_str": "4002945120",
- "root_str": "495059",
- "parent_str": "464424502",
- "like": 107,
- "action": 0,
- "member": {
- "mid": "282146749",
- "uname": "能天使exia",
- "sex": "女",
- "sign": "电子学会评测师,脑机非技术研究学者,黑客网络贴吧二周目群管,明日方舟三服,三崩子团长,公主焊接会长,红三圈模组收集者,游戏尝鲜人,随心情更新",
- "avatar": "http://i1.hdslb.com/bfs/face/f6ec44a9d2785783fa6b1b2dd4b7ad7b17e7cbb9.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 5,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 3508,
- "name": "总之就是非常可爱",
- "image": "http://i1.hdslb.com/bfs/garb/item/2c63178e3fcce804a851ef510e03c2b0e91a61e0.png",
- "expire": 0,
- "image_enhance": "http://i1.hdslb.com/bfs/garb/item/2c63178e3fcce804a851ef510e03c2b0e91a61e0.png",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 72,
- "name": "风纪元老",
- "image": "http://i0.hdslb.com/bfs/face/032bce9fd6dcb562d83b60f8a8719362b18a0afb.png",
- "image_small": "http://i2.hdslb.com/bfs/face/2930b8bf5d7c68e1961d81ed3a59783af9d639a2.png",
- "level": "稀有勋章",
- "condition": "风纪委员连任期数 >= 12"
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 2,
- "vipDueDate": 1727280000000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 1,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "年度大会员",
- "label_theme": "annual_vip",
- "text_color": "#FFFFFF",
- "bg_style": 1,
- "bg_color": "#FB7299",
- "border_color": ""
- },
- "avatar_subscript": 1,
- "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png",
- "nickname_color": "#FB7299"
- },
- "fans_detail": null,
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": {
- "id": 3508,
- "name": "总之就是非常可爱",
- "image": "http://i0.hdslb.com/bfs/garb/item/2c63178e3fcce804a851ef510e03c2b0e91a61e0.png",
- "jump_url": "",
- "type": "suit",
- "image_enhance": "http://i0.hdslb.com/bfs/garb/item/2c63178e3fcce804a851ef510e03c2b0e91a61e0.png",
- "image_enhance_frame": ""
- },
- "cardbg": {
- "id": 5323,
- "name": "明日方舟音律系列",
- "image": "http://i0.hdslb.com/bfs/garb/item/e62b17700b3c1bc981606905f85615363c183105.png",
- "jump_url": "https://www.bilibili.com/h5/mall/fans/recommend/5359?navhide=1&mid=282146749&from=reply",
- "fan": {
- "is_fan": 1,
- "number": 11418,
- "color": "#ffb628",
- "name": "明日方舟音律联觉",
- "num_desc": "011418"
- },
- "type": "suit"
- },
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "回复 @边走边发呆 :拜登时代洛阳铲,带人,食大便了,现在的b站没有楼层了[牛年]",
- "plat": 0,
- "device": "",
- "members": [
- {
- "mid": "37145412",
- "uname": "边走边发呆",
- "sex": "男",
- "sign": "这个人懒死了,什么都不发=_= 头像是素晴日",
- "avatar": "http://i0.hdslb.com/bfs/face/4dfe0f1b0bfc9b1afea9e3bacbc5a92221fe9b09.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 6,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 60,
- "name": "有爱萌新",
- "image": "http://i1.hdslb.com/bfs/face/51ca16136e570938450bca360f28761ceb609f33.png",
- "image_small": "http://i2.hdslb.com/bfs/face/9abfa4769357f85937782c2dbc40fafda4f57217.png",
- "level": "普通勋章",
- "condition": "当前持有粉丝勋章最高等级>=5级"
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 1,
- "vipDueDate": 1559836800000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "",
- "label_theme": "",
- "text_color": "",
- "bg_style": 0,
- "bg_color": "",
- "border_color": ""
- },
- "avatar_subscript": 0,
- "nickname_color": ""
- }
- }
- ],
- "emote": {
- "[牛年]": {
- "id": 3146,
- "package_id": 1,
- "state": 0,
- "type": 1,
- "attr": 0,
- "text": "[牛年]",
- "url": "http://i0.hdslb.com/bfs/emote/9275275ff1f2659310648221107d20bc4970f106.png",
- "meta": {
- "size": 1
- },
- "mtime": 1611200715,
- "jump_title": "牛年"
- }
- },
- "jump_url": {},
- "max_line": 999
- },
- "replies": null,
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": ""
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "time_desc": "400天前发布"
- }
- }
- ],
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": "https://www.bilibili.com/blackboard/foldingreply.html"
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "sub_reply_entry_text": "共838条回复",
- "sub_reply_title_text": "相关回复共838条",
- "time_desc": "4100天前发布"
- }
- },
- {
- "rpid": 646408628,
- "oid": 2,
- "type": 1,
- "mid": 33066927,
- "root": 0,
- "parent": 0,
- "dialog": 0,
- "count": 173,
- "rcount": 160,
- "state": 0,
- "fansgrade": 1,
- "attr": 0,
- "ctime": 1519135750,
- "rpid_str": "646408628",
- "root_str": "0",
- "parent_str": "0",
- "like": 7197,
- "action": 0,
- "member": {
- "mid": "33066927",
- "uname": "冰魂喵丶",
- "sex": "男",
- "sign": "反正不要钱,多少关注下?\n等我有时间,就把你们全吃了",
- "avatar": "http://i0.hdslb.com/bfs/face/f60445649445f69db7293f1cb611f6c0dcdd9a21.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 5,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 71,
- "name": "资深委员",
- "image": "http://i1.hdslb.com/bfs/face/5beecb936bd7422a5ac11c9c5c8df56f334b2a65.png",
- "image_small": "http://i0.hdslb.com/bfs/face/9f8e0d5cd0201cf7177199d9365be562be1deb05.png",
- "level": "高级勋章",
- "condition": "风纪委员连任期数 >= 6"
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 1,
- "vipDueDate": 1620748800000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "",
- "label_theme": "",
- "text_color": "",
- "bg_style": 0,
- "bg_color": "",
- "border_color": ""
- },
- "avatar_subscript": 0,
- "nickname_color": ""
- },
- "fans_detail": {
- "uid": 33066927,
- "medal_id": 29058,
- "medal_name": "逸国",
- "score": 0,
- "level": 1,
- "intimacy": 0,
- "master_status": 1,
- "is_receive": 1,
- "medal_color": 643602062,
- "medal_color_end": 643602062,
- "medal_color_border": 4284257934,
- "medal_color_name": 4284257934,
- "medal_color_level": 4284257934,
- "guard_level": 0
- },
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": null,
- "cardbg": {
- "id": 32680,
- "name": "坎公骑冠剑",
- "image": "http://i0.hdslb.com/bfs/garb/item/e861ec7f80f9725fbed51bbfc51ade4c083ddedc.png",
- "jump_url": "https://www.bilibili.com/h5/mall/fans/recommend/32658?navhide=1&mid=33066927&from=reply",
- "fan": {
- "is_fan": 1,
- "number": 16578,
- "color": "#f7b130",
- "name": "坎公骑冠剑",
- "num_desc": "016578"
- },
- "type": "suit"
- },
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "第一首:来夢緑 - kagome-kagome ~ 月の眷属達カラオケ\n第二首:dBu music - 千年幻想郷 -Aurora sky edition-\n第三首:Sensitive Heart - 千年幻想郷 ~ History of the Moon\n第四首:Yellow-Zebra - 月の律动~Rhythm of the moon~(东方永夜抄 “千年幻想郷 ~ History of the Moon”)\n第五首:工藤舞 - D.S.F.S(ヴォヤージュ1969)\n第六首:Angelic Quasar - かの郷は永き幻の\n第七首:東方永夜抄 - 黒髪のアマンダ\n第八首:君の美術館 - 千年幻想郷 ~ History of the Moon\n\n------------------------\n这些是av:2出现的音乐,应该不会缺少的喵~。(笑) 如果有需要有兴趣的话欢迎复制喵~~(`・ω・´)\n复制的9818楼的\n前排提示:本视频只有大会员能看",
- "plat": 0,
- "device": "",
- "members": [],
- "jump_url": {},
- "max_line": 6
- },
- "replies": [
- {
- "rpid": 646507261,
- "oid": 2,
- "type": 1,
- "mid": 11531860,
- "root": 646408628,
- "parent": 646408628,
- "dialog": 646507261,
- "count": 0,
- "rcount": 0,
- "state": 0,
- "fansgrade": 0,
- "attr": 0,
- "ctime": 1519138195,
- "rpid_str": "646507261",
- "root_str": "646408628",
- "parent_str": "646408628",
- "like": 140,
- "action": 0,
- "member": {
- "mid": "11531860",
- "uname": "方圆十里有名的俊后生",
- "sex": "男",
- "sign": "",
- "avatar": "http://i0.hdslb.com/bfs/baselabs/fab0bf0029e891eed162175c73473003528a5f22.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 1,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 6,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 0,
- "name": "",
- "image": "",
- "image_small": "",
- "level": "",
- "condition": ""
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 1,
- "vipDueDate": 1647619200000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 1,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "大会员",
- "label_theme": "vip",
- "text_color": "#FFFFFF",
- "bg_style": 1,
- "bg_color": "#FB7299",
- "border_color": ""
- },
- "avatar_subscript": 1,
- "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png",
- "nickname_color": ""
- },
- "fans_detail": null,
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": null,
- "cardbg": null,
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "车万大法好",
- "plat": 0,
- "device": "",
- "members": [],
- "jump_url": {},
- "max_line": 999
- },
- "replies": null,
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": ""
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "time_desc": "1471天前发布"
- }
- },
- {
- "rpid": 1601887431,
- "oid": 2,
- "type": 1,
- "mid": 341470991,
- "root": 646408628,
- "parent": 646408628,
- "dialog": 1601887431,
- "count": 0,
- "rcount": 0,
- "state": 0,
- "fansgrade": 0,
- "attr": 0,
- "ctime": 1557745446,
- "rpid_str": "1601887431",
- "root_str": "646408628",
- "parent_str": "646408628",
- "like": 94,
- "action": 0,
- "member": {
- "mid": "341470991",
- "uname": "飞行科",
- "sex": "保密",
- "sign": "",
- "avatar": "http://i2.hdslb.com/bfs/face/327188d3f35510699e54a65a65b2fba95dd6ded2.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 5,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 0,
- "name": "",
- "image": "",
- "image_small": "",
- "level": "",
- "condition": ""
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 1,
- "vipDueDate": 1626364800000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "",
- "label_theme": "",
- "text_color": "",
- "bg_style": 0,
- "bg_color": "",
- "border_color": ""
- },
- "avatar_subscript": 0,
- "nickname_color": ""
- },
- "fans_detail": null,
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": null,
- "cardbg": null,
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "东方不能沉",
- "plat": 0,
- "device": "",
- "members": [],
- "jump_url": {},
- "max_line": 999
- },
- "replies": null,
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": ""
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "time_desc": "1024天前发布"
- }
- },
- {
- "rpid": 1627517285,
- "oid": 2,
- "type": 1,
- "mid": 244446278,
- "root": 646408628,
- "parent": 646408628,
- "dialog": 1627517285,
- "count": 0,
- "rcount": 0,
- "state": 0,
- "fansgrade": 0,
- "attr": 0,
- "ctime": 1558630445,
- "rpid_str": "1627517285",
- "root_str": "646408628",
- "parent_str": "646408628",
- "like": 75,
- "action": 0,
- "member": {
- "mid": "244446278",
- "uname": "KRHX",
- "sex": "男",
- "sign": "自由的明天仍在前方\n如繁星般闪烁着光芒\n即便只是缥缈的愿景\n也要朝着那黎明迈向\n哪怕路途艰辛\n哪怕前途渺茫\n世间进步仍未停息\n向那理想的彼方",
- "avatar": "http://i2.hdslb.com/bfs/face/df0e691dd30d84f9c5224dbb7820b03953c7e6de.jpg",
- "rank": "10000",
- "DisplayRank": "0",
- "face_nft_new": 0,
- "is_senior_member": 0,
- "level_info": {
- "current_level": 5,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 0,
- "name": "",
- "image": "",
- "image_small": "",
- "level": "",
- "condition": ""
- },
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 2,
- "vipDueDate": 1647446400000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 1,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": "",
- "text": "年度大会员",
- "label_theme": "annual_vip",
- "text_color": "#FFFFFF",
- "bg_style": 1,
- "bg_color": "#FB7299",
- "border_color": ""
- },
- "avatar_subscript": 1,
- "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png",
- "nickname_color": "#FB7299"
- },
- "fans_detail": null,
- "following": 0,
- "is_followed": 0,
- "user_sailing": {
- "pendant": null,
- "cardbg": null,
- "cardbg_with_focus": null
- },
- "is_contractor": false,
- "contract_desc": ""
- },
- "content": {
- "message": "东方不能沉啊",
- "plat": 0,
- "device": "",
- "members": [],
- "jump_url": {},
- "max_line": 999
- },
- "replies": null,
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": ""
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "time_desc": "1013天前发布"
- }
- }
- ],
- "assist": 0,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": "https://www.bilibili.com/blackboard/foldingreply.html"
- },
- "up_action": {
- "like": false,
- "reply": false
- },
- "show_follow": false,
- "invisible": false,
- "reply_control": {
- "sub_reply_entry_text": "共160条回复",
- "sub_reply_title_text": "相关回复共160条",
- "time_desc": "1471天前发布"
- }
+ "content": {
+ "message": "好多20年和18年的[辣眼睛]",
+ "members": [],
+ "emote": {
+ "[辣眼睛]": {
+ "id": 2374,
+ "package_id": 1,
+ "state": 0,
+ "type": 1,
+ "attr": 0,
+ "text": "[辣眼睛]",
+ "url": "https://i0.hdslb.com/bfs/emote/35d62c496d1e4ea9e091243fa812866f5fecc101.png",
+ "meta": {
+ "size": 1,
+ "suggest": [
+ ""
+ ]
+ },
+ "mtime": 1668688325,
+ "jump_title": "辣眼睛"
}
- ],
- "top": {
- "admin": null,
- "upper": null,
- "vote": null
- },
- "top_replies": null,
- "lottery_card": null,
- "folder": {
- "has_folded": false,
- "is_folded": false,
- "rule": "https://www.bilibili.com/blackboard/foldingreply.html"
- },
- "up_selection": {
- "pending_count": 0,
- "ignore_count": 0
- },
- "cm": {},
- "cm_info": {
- "ads": null
- },
- "effects": {
- "preloading": ""
+ },
+ "jump_url": {},
+ "max_line": 6
},
+ "replies": [],
"assist": 0,
- "blacklist": 0,
- "vote": 0,
- "lottery": 0,
- "config": {
- "showadmin": 1,
- "showentry": 1,
- "showfloor": 0,
- "showtopic": 1,
- "show_up_flag": true,
- "read_only": false,
- "show_del_log": true
+ "up_action": {
+ "like": false,
+ "reply": false
},
- "upper": {
- "mid": 2
+ "invisible": false,
+ "reply_control": {
+ "max_line": 6,
+ "time_desc": "21分钟前发布",
+ "location": "IP属地:河北"
},
- "show_bvid": false,
- "control": {
- "input_disable": false,
- "root_input_text": "发一条友善的评论",
- "child_input_text": "",
- "giveup_input_text": "不发没关系,请继续友善哦~",
- "bg_text": "看看下面~来发评论吧",
- "web_selection": false,
- "answer_guide_text": "需要升级成为lv2会员后才可以评论,先去答题转正吧!",
- "answer_guide_icon_url": "http://i0.hdslb.com/bfs/emote/96940d16602cacbbac796245b7bb99fa9b5c970c.png",
- "answer_guide_ios_url": "https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=12",
- "answer_guide_android_url": "https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=6",
- "show_type": 1,
- "show_text": "",
- "disable_jump_emote": false
+ "folder": {
+ "has_folded": false,
+ "is_folded": false,
+ "rule": ""
},
- "note": 1,
- "callbacks": null
- }
+ "dynamic_id_str": "0",
+ "note_cvid_str": "0",
+ "track_info": ""
+ },
+ // ...
+ {
+ "rpid": 237689432448,
+ "oid": 2,
+ "type": 1,
+ "mid": 1647250883,
+ "root": 0,
+ "parent": 0,
+ "dialog": 0,
+ "count": 0,
+ "rcount": 0,
+ "state": 0,
+ "fansgrade": 0,
+ "attr": 0,
+ "ctime": 1723624563,
+ "mid_str": "1647250883",
+ "oid_str": "2",
+ "rpid_str": "237689432448",
+ "root_str": "0",
+ "parent_str": "0",
+ "dialog_str": "0",
+ "like": 1,
+ "action": 0,
+ "member": {
+ "mid": "1647250883",
+ "uname": "小烟同学424",
+ "sex": "保密",
+ "sign": "墓前玩使命,墓前暑假",
+ "avatar": "https://i2.hdslb.com/bfs/face/930661ca1bcacf8005efcca499b7380dcd4c2716.jpg",
+ "rank": "10000",
+ "face_nft_new": 0,
+ "is_senior_member": 0,
+ "senior": {},
+ "level_info": {
+ "current_level": 5,
+ "current_min": 0,
+ "current_exp": 0,
+ "next_exp": 0
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0
+ },
+ "nameplate": {
+ "nid": 0,
+ "name": "",
+ "image": "",
+ "image_small": "",
+ "level": "",
+ "condition": ""
+ },
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 0,
+ "vipDueDate": 0,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 0,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": "",
+ "use_img_label": true,
+ "img_label_uri_hans": "",
+ "img_label_uri_hant": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png"
+ },
+ "avatar_subscript": 0,
+ "nickname_color": ""
+ },
+ "fans_detail": null,
+ "user_sailing": {
+ "pendant": null,
+ "cardbg": null,
+ "cardbg_with_focus": null
+ },
+ "user_sailing_v2": {},
+ "is_contractor": false,
+ "contract_desc": "",
+ "nft_interaction": null,
+ "avatar_item": {
+ "container_size": {
+ "width": 1.8,
+ "height": 1.8
+ },
+ "fallback_layers": {
+ "layers": [
+ {
+ "visible": true,
+ "general_spec": {
+ "pos_spec": {
+ "coordinate_pos": 2,
+ "axis_x": 0.9,
+ "axis_y": 0.9
+ },
+ "size_spec": {
+ "width": 1,
+ "height": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "AVATAR_LAYER": {}
+ },
+ "is_critical": true,
+ "layer_mask": {
+ "general_spec": {
+ "pos_spec": {
+ "coordinate_pos": 2,
+ "axis_x": 0.9,
+ "axis_y": 0.9
+ },
+ "size_spec": {
+ "width": 1,
+ "height": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ }
+ },
+ "mask_src": {
+ "src_type": 3,
+ "draw": {
+ "draw_type": 1,
+ "fill_mode": 1,
+ "color_config": {
+ "day": {
+ "argb": "#FF000000"
+ }
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_type": 3,
+ "res_image": {
+ "image_src": {
+ "src_type": 1,
+ "placeholder": 6,
+ "remote": {
+ "url": "https://i2.hdslb.com/bfs/face/930661ca1bcacf8005efcca499b7380dcd4c2716.jpg",
+ "bfs_style": "widget-layer-avatar"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "is_critical_group": true
+ },
+ "mid": "1647250883"
+ }
+ },
+ "content": {
+ "message": "还。。。有人吗?",
+ "members": [],
+ "jump_url": {},
+ "max_line": 6
+ },
+ "replies": [],
+ "assist": 0,
+ "up_action": {
+ "like": false,
+ "reply": false
+ },
+ "invisible": false,
+ "reply_control": {
+ "max_line": 6,
+ "time_desc": "4小时前发布",
+ "location": "IP属地:陕西"
+ },
+ "folder": {
+ "has_folded": false,
+ "is_folded": false,
+ "rule": ""
+ },
+ "dynamic_id_str": "0",
+ "note_cvid_str": "0",
+ "track_info": ""
+ }
+ ],
+ "top": {
+ "admin": null,
+ "upper": null,
+ "vote": null
+ },
+ "top_replies": [],
+ "up_selection": {
+ "pending_count": 0,
+ "ignore_count": 0
+ },
+ "effects": {
+ "preloading": ""
+ },
+ "assist": 0,
+ "blacklist": 0,
+ "vote": 0,
+ "config": {
+ "showtopic": 1,
+ "show_up_flag": true,
+ "read_only": false
+ },
+ "upper": {
+ "mid": 2
+ },
+ "control": {
+ "input_disable": false,
+ "root_input_text": "你渴望拥有力量吗?评论让力量更强大",
+ "child_input_text": "你渴望拥有力量吗?评论让力量更强大",
+ "giveup_input_text": "不发没关系,请继续友善哦~",
+ "screenshot_icon_state": 1,
+ "upload_picture_icon_state": 1,
+ "answer_guide_text": "需要升级成为lv2会员后才可以评论,先去答题转正吧!",
+ "answer_guide_icon_url": "http://i0.hdslb.com/bfs/emote/96940d16602cacbbac796245b7bb99fa9b5c970c.png",
+ "answer_guide_ios_url": "https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=12",
+ "answer_guide_android_url": "https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=6",
+ "bg_text": "",
+ "empty_page": null,
+ "show_type": 1,
+ "show_text": "",
+ "web_selection": false,
+ "disable_jump_emote": false,
+ "enable_charged": false,
+ "enable_cm_biz_helper": false,
+ "preload_resources": null
+ },
+ "note": 1,
+ "esports_grade_card": null,
+ "callbacks": null,
+ "context_feature": ""
+ }
}
```
@@ -3696,7 +1558,7 @@ curl -G 'http://api.bilibili.com/x/v2/reply/main' \
## 获取指定评论的回复
-> http://api.bilibili.com/x/v2/reply/reply
+> https://api.bilibili.com/x/v2/reply/reply
*请求方式:GET*
@@ -3712,7 +1574,7 @@ curl -G 'http://api.bilibili.com/x/v2/reply/main' \
| type | num | 评论区类型代码 | 必要 | [类型代码见表](readme.md#评论区类型代码) |
| oid | num | 目标评论区 id | 必要 | |
| root | num | 根回复 rpid | 必要 | |
-| ps | num | 每页项数 | 非必要 | 默认为20 定义域:1-49 |
+| ps | num | 每页项数 | 非必要 | 默认为20 定义域:1-49 但 data_replies 的最大内容数为20,因此设置为49其实也只会有20条回复被返回 |
| pn | num | 页码 | 非必要 | 默认为1 |
**json回复:**
@@ -3733,7 +1595,7 @@ curl -G 'http://api.bilibili.com/x/v2/reply/main' \
| config | obj | 评论区显示控制 | |
| control | obj | 评论区输入属性 | |
| page | obj | 页面信息 | |
-| replies | array | 评论对话树列表 | |
+| replies | array | 评论对话树列表 | 最大内容数为20 |
| root | obj | 根评论信息 | [对象定义见表](readme.md#评论条目对象) |
| show_bvid | bool | 显示 bvid? | |
| show_text | str | (?) | |
@@ -3793,7 +1655,7 @@ curl -G 'http://api.bilibili.com/x/v2/reply/main' \
获取视频`av201022189`下评论`rpid=3030790837`的回复,每页5项,获取第1页
```shell
-curl -G 'http://api.bilibili.com/x/v2/reply/reply' \
+curl -G 'https://api.bilibili.com/x/v2/reply/reply' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=201022189' \
--data-urlencode 'root=3030790837' \
@@ -4582,7 +2444,7 @@ curl -G 'http://api.bilibili.com/x/v2/reply/reply' \
## 获取指定评论对话树
-> http://api.bilibili.com/x/v2/reply/dialog/cursor
+> https://api.bilibili.com/x/v2/reply/dialog/cursor
*请求方式:GET*
@@ -4690,7 +2552,7 @@ curl -G 'http://api.bilibili.com/x/v2/reply/reply' \
获取视频`av201022189`下评论`rpid=3030790837`的对话`rpid=3030978856`,每页最大5项
```shell
-curl -G 'http://api.bilibili.com/x/v2/reply/dialog/cursor' \
+curl -G 'https://api.bilibili.com/x/v2/reply/dialog/cursor' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=201022189' \
--data-urlencode 'root=3030790837' \
@@ -5346,7 +3208,7 @@ curl -G 'http://api.bilibili.com/x/v2/reply/dialog/cursor' \
## 获取评论区热评
-> http://api.bilibili.com/x/v2/reply/hot
+> https://api.bilibili.com/x/v2/reply/hot
*请求方式:GET*
@@ -5405,7 +3267,7 @@ curl -G 'http://api.bilibili.com/x/v2/reply/dialog/cursor' \
获取视频`av2`的评论区热评,每页5项,查看第1页
```shell
-curl -G 'http://api.bilibili.com/x/v2/reply/hot' \
+curl -G 'https://api.bilibili.com/x/v2/reply/hot' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=2' \
--data-urlencode 'ps=5' \
@@ -5643,7 +3505,12 @@ curl -G 'http://api.bilibili.com/x/v2/reply/hot' \
## 获取指定评论信息
-> http://api.bilibili.com/x/v2/reply/info
+该接口已经弃用
+
+
+点击展开折叠内容:
+
+> https://api.bilibili.com/x/v2/reply/info
*请求方式:GET*
@@ -5671,7 +3538,7 @@ curl -G 'http://api.bilibili.com/x/v2/reply/hot' \
获取视频`av379743801`评论区下`rpid=95737567200`的信息
```bash
-curl -G 'http://api.bilibili.com/x/v2/reply/info' \
+curl -G 'https://api.bilibili.com/x/v2/reply/info' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=379743801' \
--data-urlencode 'rpid=95737567200' \
@@ -5795,9 +3662,11 @@ curl -G 'http://api.bilibili.com/x/v2/reply/info' \
+
+
## 获取评论区评论总数
-> http://api.bilibili.com/x/v2/reply/count
+> https://api.bilibili.com/x/v2/reply/count
*请求方式:GET*
@@ -5830,7 +3699,7 @@ curl -G 'http://api.bilibili.com/x/v2/reply/info' \
获取视频`av2`的评论区总计评论条数
```shell
-curl -G 'http://api.bilibili.com/x/v2/reply/count' \
+curl -G 'https://api.bilibili.com/x/v2/reply/count' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=2'
```
diff --git a/comment/readme.md b/docs/comment/readme.md
similarity index 89%
rename from comment/readme.md
rename to docs/comment/readme.md
index 77a2da1..4670158 100644
--- a/comment/readme.md
+++ b/docs/comment/readme.md
@@ -1,6 +1,6 @@
# 评论区
-
+
评论系统为全站通用,且APP与web端接口共用,以type标明对象类型,以oid指向响应的对象id
@@ -54,7 +54,7 @@
| count | num | 二级评论条数 | |
| rcount | num | 回复评论条数 | |
| floor | num | 评论楼层号 | **注:若不支持楼层则无此项** |
-| state | num | (?) | |
+| state | num | 评论状态 | 0: 正常 17: 被阿瓦隆系统隐藏 (无法被别人看到, 只能自己看到) |
| fansgrade | num | 是否具有粉丝标签 | 0:无 1:有 |
| attr | num | 某属性位? | |
| ctime | num | 评论发送时间 | 时间戳 |
@@ -70,7 +70,8 @@
| folder | obj | 折叠信息 | |
| up_action | obj | 评论 UP 主操作信息 | |
| show_follow | bool | (?) | |
-| invisible | bool | | |
+| invisible | bool | 评论是否被隐藏 | |
+| card_label | obj | 右上角卡片标签信息 | |
| reply_control | obj | 评论提示文案信息 | |
`评论条目`中的`member`对象:
@@ -131,7 +132,7 @@
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | -------- | ---------------------------------------- |
-| type | num | 是否认证 | -1:无 0:个人认证 1:机构认证 |
+| type | num | 认证类型 | -1:无 0:个人认证 1:机构认证 |
| desc | str | 认证信息 | 无为空 |
`member`中的`vip`对象:
@@ -227,6 +228,7 @@
| emote | obj | 需要渲染的表情转义 | 评论内容无表情则无此项 |
| jump_url | obj | 需要高亮的超链转义 | |
| max_line | num | 6 | 收起最大行数 |
+| pictures | array | 评论图片数组 | |
`content`中的`members`数组:
@@ -284,6 +286,15 @@
| appPackageName | str | (?) | |
| clickReport | str | 上报 id | |
+`content`中的`pictures`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | -------- | -------- |
+| img_src | str | 图片地址 | |
+| img_width | num | 图片宽度 | |
+| img_height | num | 图片高度 | |
+| img_size | num | 图片大小 | 单位KB |
+
`评论条目`中的`replies`数组:
| 项 | 类型 | 内容 | 备注 |
@@ -307,10 +318,30 @@
| like | bool | 是否UP主觉得很赞 | false:否 true:是 |
| reply | bool | 是否被UP主回复 | false:否 true:是 |
+`评论条目`中的`card_label`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------------- | ---- | ------------ | ----------------------------- |
+| rpid | num | 评论 rpid | |
+| text_content | str | 标签文本 | 已知有`妙评` |
+| text_color_day | str | 日间文本颜色 | 十六进制颜色值,下同 |
+| text_color_night | str | 夜间文本颜色 | |
+| label_color_day | str | 日间标签颜色 | |
+| label_color_night | str | 夜间标签颜色 | |
+| image | str | | 作用不明 |
+| type | str | 1 | 作用不明 |
+| background | str | 背景图片 url | |
+| background_width | num | 背景图片宽度 | |
+| background_height | num | 背景图片高度 | |
+| jump_url | str | 跳转链接 | |
+| effect | num | 0 | 作用不明,可能用于控制动画,下同 |
+| effect_start_time | num | 0 | |
+
`评论条目`中的`reply_control`对象:
| 字段 | 类型 | 内容 | 备注 |
| -------------------- | ---- | -------- | -------------------- |
| sub_reply_entry_text | str | 回复提示 | `共 xx 条回复` |
| sub_reply_title_text | str | 回复提示 | `相关回复共有 xx 条` |
-| time_desc | str | 时间提示 | `xx 天/小时 前发布` |
\ No newline at end of file
+| time_desc | str | 时间提示 | `xx 天/小时 前发布` |
+| location | str | IP属地 | `IP属地:xx` 评论者发送评论时的IP地址属地 仅对2022-07-25 11:00及以后发布的评论有效 需要登录|
diff --git a/creativecenter/railgun.md b/docs/creativecenter/railgun.md
similarity index 87%
rename from creativecenter/railgun.md
rename to docs/creativecenter/railgun.md
index 2e1d70b..8b171bb 100644
--- a/creativecenter/railgun.md
+++ b/docs/creativecenter/railgun.md
@@ -1,16 +1,10 @@
# 电磁力相关
-- [获取电磁力等级(web端)](#获取电磁力等级(web端))
-- [获取电磁力详细数值(双端)](#获取电磁力详细数值(双端))
-- [获取电磁力数值历史变化(双端)](#获取电磁力数值历史变化(双端))
-
----
-
电磁力每周日下午刷新
## 获取电磁力等级(web端)
-> http://member.bilibili.com/x/web/elec/user
+> https://api.bilibili.com/studio/up-rating/v3/rating/info
*请求方式:GET*
@@ -32,13 +26,15 @@
| 字段 | 类型 | 内容 | 备注 |
| ------ | ---- | ----------- | ---------------- |
| mid | num | 当前用户mid | |
-| state | num | 电磁力等级 | |
-| reason | str | 空 | **作用尚不明确** |
+| level | num | 电磁力等级 | |
+| score | num | 电磁力分数 | |
+| credit | num | 信用分 | |
+| state | num | ? | 一直是2 |
**示例:**
```shell
-curl 'http://member.bilibili.com/x/web/elec/user' \
+curl 'https://member.bilibili.com/x/web/elec/user' \
-b 'SESSDATA=xxx'
```
@@ -51,18 +47,21 @@ curl 'http://member.bilibili.com/x/web/elec/user' \
"message": "0",
"ttl": 1,
"data": {
- "mid": 293793435,
+ "mid": ***,
+ "level": 4,
+ "score": 326,
+ "credit": 100,
"state": 2,
- "reason": ""
+ "update_date": 1694966400
}
}
```
-## 获取电磁力详细数值(双端)
+## (失效)获取电磁力详细数值(双端)
-> http://api.bilibili.com/studio/up-rating/rating/summary
+> https://api.bilibili.com/studio/up-rating/rating/summary
*请求方式:GET*
@@ -109,14 +108,14 @@ curl 'http://member.bilibili.com/x/web/elec/user' \
Cookie方式:
```shell
-curl 'http://api.bilibili.com/studio/up-rating/rating/summary' \
+curl 'https://api.bilibili.com/studio/up-rating/rating/summary' \
-b 'SESSDATA=xxx'
```
APP方式:
```shell
-curl -G 'http://api.bilibili.com/studio/up-rating/rating/summary' \
+curl -G 'https://api.bilibili.com/studio/up-rating/rating/summary' \
--data-urlencode 'access_key=xxx'
```
@@ -162,7 +161,7 @@ curl -G 'http://api.bilibili.com/studio/up-rating/rating/summary' \
## 获取电磁力数值历史变化(双端)
-> http://api.bilibili.com/studio/up-rating/rating/history
+> https://api.bilibili.com/studio/up-rating/rating/history
*请求方式:GET*
@@ -226,7 +225,7 @@ curl -G 'http://api.bilibili.com/studio/up-rating/rating/summary' \
Cookie方式:
```shell
-curl -G 'http://api.bilibili.com/studio/up-rating/rating/history' \
+curl -G 'https://api.bilibili.com/studio/up-rating/rating/history' \
--data-urlencode 'type=1' \
-b 'SESSDATA=xxx'
```
@@ -234,7 +233,7 @@ curl -G 'http://api.bilibili.com/studio/up-rating/rating/history' \
APP方式:
```shell
-curl -G 'http://api.bilibili.com/studio/up-rating/rating/history' \
+curl -G 'https://api.bilibili.com/studio/up-rating/rating/history' \
--data-urlencode 'type=1' \
--data-urlencode 'access_key=xxx'
```
diff --git a/docs/creativecenter/season.md b/docs/creativecenter/season.md
new file mode 100644
index 0000000..472ce32
--- /dev/null
+++ b/docs/creativecenter/season.md
@@ -0,0 +1,918 @@
+# 合集管理
+
+关于用户空间的合集及视频列表参见 [合集和视频列表信息](../video/collection.md)
+
+## 获取合集列表
+
+> https://member.bilibili.com/x2/creative/web/seasons
+
+*请求方式: GET*
+
+认证方式: Cookie (SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | --------- | ----------- | ----------------- |
+| pn | num | 页码 | 必要 | 默认为 1 |
+| ps | num | 每页数量 | 必要 | 默认为 30 |
+| order | str | 排序方式 | 不必要 | 创建时间: ctime 修改时间: mtime |
+| sort | str | 排序方式 | 不必要 | 创建时间: asc 修改时间: desc |
+| draft | num | 1 | 不必要 | 作用尚不明确 |
+
+**JSON回复:**
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | ---- |
+| seasons | arr | 合集列表 | |
+| tip | obj | 内容 `title` `url` 均为空 | |
+| total | num | 合集总数 | |
+| play_type | num | 1 | 作用尚不明确 |
+
+`seasons`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | ---- |
+| season | obj | 合集信息 | |
+| course | null | | |
+| checkin | obj | 审核信息? | |
+| seasonStat | obj | 合集统计信息 | |
+| sections | obj | 小节列表 | |
+| part_episodes | arr | 合集视频列表 | |
+
+`seasons`数组中的对象中的`season`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | ---- |
+| id | num | 合集 ID | |
+| title | str | 合集标题 | |
+| desc | str | 合集描述 | |
+| cover | str | 合集封面 URL | |
+| isEnd | num | 是否已完结? | 0: 未完结 |
+| mid | num | 合集作者 ID | |
+| isAct | num | 是否为活动合集? | 0: 否 |
+| is_pay | num | 是否付费? | 0: 否 |
+| state | num | 合集状态? | 0: 正常显示 -6: 正在审核 |
+| partState | num | 合集分段状态? | 0 |
+| signState | num | 合集签名状态? | 0 |
+| rejectReason | str | 合集拒绝原因? | |
+| ctime | num | 创建时间 | |
+| mtime | num | 修改时间 | |
+| no_section | num | 是否设小节 | 1: 不设小节 |
+| forbid | num | 合集是否禁止? | 0: 否 |
+| protocol_id | str | 空 | |
+| ep_num | num | 0 | |
+| season_price | num | 合集价格? | 0: 免费 |
+| is_opened | num | 是否公开? | 1: 公开 |
+| has_charging_pay | num | 是否充电付费? | 0: 否 |
+
+`seasons`数组中的对象中的`checkin`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | ---- |
+| status | num | 状态? | 0: 正常显示 |
+| status_reason | str | 状态原因? | |
+| season_status | num | 合集审核状态? | 1: 审核通过 |
+
+`seasons`数组中的对象中的`seasonStat`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | ---- |
+| view | num | 播放量 | |
+| danmaku | num | 弹幕数 | |
+| reply | num | 评论数 | |
+| fav | num | 收藏数 | |
+| coin | num | 硬币数 | |
+| share | num | 分享数 | |
+| nowRank | num | 当前排名? | |
+| hisRank | num | 历史最高排名? | |
+| like | num | 点赞数 | |
+| subscription | num | 订阅数 | |
+| vt | num | 0 | |
+
+`seasons`数组中的对象中的`sections`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | ---- |
+| sections | arr | 小节列表 | 套了个娃 |
+
+`seasons`数组中的对象中的`sections`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | ---- |
+| id | num | 小节 ID | |
+| type | num | 1 | |
+| seasonId | num | 合集 ID | |
+| title | str | 小节标题 | |
+| order | num | 排序 | |
+| state | num | 状态? | 0: 正常 |
+| partState | num | 合集分段状态? | 0: 正常 |
+| rejectReason | str | 拒绝原因? | |
+| ctime | num | 创建时间 | |
+| mtime | num | 修改时间 | |
+| epCount | num | 视频数量 | |
+| cover | str | 封面 URL | |
+| has_charging_pay | num | 是否充电付费? | 0: 否 |
+| Episodes | null | | |
+
+`seasons`数组中的对象中的`part_episodes`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | ---- |
+| id | num | 合集内视频 ID | |
+| title | str | 视频标题 | |
+| aid | num | 视频 aid | |
+| bvid | str | 视频 bvid | |
+| cid | num | 视频 cid | |
+| seasonId | num | 合集 ID | |
+| sectionId | num | 小节 ID | |
+| order | num | 排序编号 | |
+| videoTitle | str | 空 | |
+| archiveTitle | str | 空 | |
+| archiveState | num | 0 | |
+| rejectReason | str | 拒绝理由? | |
+| state | num | 0 | |
+| cover | str | 封面 URL | |
+| is_free | num | 是否免费? | 0: 免费 |
+| aid_owner | bool | false | |
+| charging_pay | num | 充电付费? | 0: 否 |
+
+**示例:**
+
+```shell
+curl -G 'https://member.bilibili.com/x2/creative/web/seasons' \
+--data-urlencode 'pn=1' \
+--data-urlencode 'ps=30' \
+-b "SESSDATA=xxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "seasons": [
+ {
+ "season": {
+ "id": 3541247,
+ "title": "🍥Debian",
+ "desc": "这里是泽生折腾 Debian GNU/Linux 的珍贵影像记录喵~",
+ "cover": "https://archive.biliimg.com/bfs/archive/ec51de61b53159c5e2430cf963f5f97e692baeaf.jpg",
+ "isEnd": 0,
+ "mid": 645769214,
+ "isAct": 0,
+ "is_pay": 0,
+ "state": 0,
+ "partState": 0,
+ "signState": 0,
+ "rejectReason": "",
+ "ctime": 1722573640,
+ "mtime": 1722577206,
+ "no_section": 1,
+ "forbid": 0,
+ "protocol_id": "",
+ "ep_num": 0,
+ "season_price": 0,
+ "is_opened": 1,
+ "has_charging_pay": 0
+ },
+ "course": null,
+ "checkin": {
+ "status": 0,
+ "status_reason": "",
+ "season_status": 1
+ },
+ "seasonStat": {
+ "view": 6793,
+ "danmaku": 21,
+ "reply": 93,
+ "fav": 64,
+ "coin": 26,
+ "share": 12,
+ "nowRank": 0,
+ "hisRank": 0,
+ "like": 141,
+ "subscription": 0,
+ "vt": 0
+ },
+ "sections": {
+ "sections": [
+ {
+ "id": 3954033,
+ "type": 1,
+ "seasonId": 3541247,
+ "title": "正片",
+ "order": 1,
+ "state": 0,
+ "partState": 0,
+ "rejectReason": "",
+ "ctime": 1722573640,
+ "mtime": 1722577206,
+ "epCount": 2,
+ "cover": "http://i2.hdslb.com/bfs/archive/b76c0b574862f5a8e8eb133f5f33fcbcd602401a.jpg",
+ "has_charging_pay": 0,
+ "Episodes": null
+ }
+ ]
+ },
+ "part_episodes": [
+ {
+ "id": 77260687,
+ "title": "Linux小寄巧: 原地卸载内核然后尝试救活!",
+ "aid": 1906473802,
+ "bvid": "BV1MU411S7iJ",
+ "cid": 1625992822,
+ "seasonId": 3541247,
+ "sectionId": 3954033,
+ "order": 1,
+ "videoTitle": "",
+ "archiveTitle": "",
+ "archiveState": 0,
+ "rejectReason": "",
+ "state": 0,
+ "cover": "http://i2.hdslb.com/bfs/archive/b76c0b574862f5a8e8eb133f5f33fcbcd602401a.jpg",
+ "is_free": 0,
+ "aid_owner": false,
+ "charging_pay": 0
+ },
+ {
+ "id": 77260688,
+ "title": "十多年前的电脑运行Debian12的启动过程",
+ "aid": 1956170305,
+ "bvid": "BV1Ay411i7Ph",
+ "cid": 1607067247,
+ "seasonId": 3541247,
+ "sectionId": 3954033,
+ "order": 2,
+ "videoTitle": "",
+ "archiveTitle": "",
+ "archiveState": 0,
+ "rejectReason": "",
+ "state": 0,
+ "cover": "http://i0.hdslb.com/bfs/archive/0bff6624fdfcbf3326fba1837fef093d455c846a.jpg",
+ "is_free": 0,
+ "aid_owner": false,
+ "charging_pay": 0
+ }
+ ]
+ },
+ {
+ "season": {
+ "id": 3541327,
+ "title": "BACollect",
+ "desc": "",
+ "cover": "https://archive.biliimg.com/bfs/archive/77906db03b1eefac02613de184afad03f7bc58d7.jpg",
+ "isEnd": 0,
+ "mid": 645769214,
+ "isAct": 0,
+ "is_pay": 0,
+ "state": 0,
+ "partState": 0,
+ "signState": 0,
+ "rejectReason": "",
+ "ctime": 1722574656,
+ "mtime": 1722574658,
+ "no_section": 1,
+ "forbid": 0,
+ "protocol_id": "",
+ "ep_num": 0,
+ "season_price": 0,
+ "is_opened": 1,
+ "has_charging_pay": 0
+ },
+ "course": null,
+ "checkin": {
+ "status": 0,
+ "status_reason": "",
+ "season_status": 0
+ },
+ "seasonStat": {
+ "view": 0,
+ "danmaku": 0,
+ "reply": 0,
+ "fav": 0,
+ "coin": 0,
+ "share": 0,
+ "nowRank": 0,
+ "hisRank": 0,
+ "like": 0,
+ "subscription": 0,
+ "vt": 0
+ },
+ "sections": {
+ "sections": [
+ {
+ "id": 3954127,
+ "type": 1,
+ "seasonId": 3541327,
+ "title": "正片",
+ "order": 1,
+ "state": 0,
+ "partState": 0,
+ "rejectReason": "",
+ "ctime": 1722574656,
+ "mtime": 1722574656,
+ "epCount": 0,
+ "cover": "http://static.hdslb.com/images/transparent.gif",
+ "has_charging_pay": 0,
+ "Episodes": null
+ }
+ ]
+ },
+ "part_episodes": null
+ }
+ ],
+ "tip": {
+ "title": "",
+ "url": ""
+ },
+ "total": 2,
+ "play_type": 1
+ }
+}
+```
+
+
+
+## 创建合集
+
+> ttps://member.bilibili.com/x2/creative/web/season/add
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+注: 有人工审核
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| title | str | 合集标题 | 必要 | |
+| desc | str | 合集简介 | 不必要 | |
+| cover | str | 封面图 | 必要 | 从 [上传封面](upload.md#上传封面) 处获取 |
+| season_price | num | 0 | 不必要 | 作用尚不明确 |
+| csrf | str | CSRF Token (即 Cookies 中 bili_jct ) | 必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+| data | num | 合集 ID | |
+
+**示例:**
+
+```shell
+curl -X POST 'https://member.bilibili.com/x2/creative/web/season/add' \
+--data-urlencode 'title=🍥Debian' \
+--data-urlencode 'desc=这里是泽生折腾 Debian GNU/Linux 的珍贵影像记录喵~' \
+--data-urlencode 'cover=https://archive.biliimg.com/bfs/archive/ec51de61b53159c5e2430cf963f5f97e692baeaf.jpg' \
+--data-urlencode 'season_price=0' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx; bili_jct=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": 3541247
+}
+```
+
+
+
+## 添加视频到合集
+
+> https://member.bilibili.com/x2/creative/web/season/section/episodes/add
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| csrf | str | CSRF Token (即 Cookies 中 bili_jct ) | 必要 | |
+
+**正文参数 (application/json):**
+
+根对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| episode | array | 视频列表 | 必要 | |
+| section_id | num | 合集小节 ID | 必要 | |
+
+`episode` 数组中的对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | --- | ---- | ----- | --- |
+| aid | num | 视频 aid | 必要 | |
+| cid | num | 稿件 cid | 必要 | |
+| title | str | 合集内单集标题 | 必要 | |
+| charging_pay | num | 0 | 不必要 | 作用尚不明确 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+
+**示例:**
+
+假设您已经把请求有效荷载放在 `payload.json` 文件中:
+
+```json
+{
+ "sectionId": 3954033,
+ "episodes": [
+ {
+ "title": "Linux小寄巧: 原地卸载内核然后尝试救活!",
+ "aid": 1906473802,
+ "cid": 1625992822,
+ "charging_pay": 0
+ },
+ {
+ "title": "十多年前的电脑运行Debian12的启动过程",
+ "aid": 1956170305,
+ "cid": 1607067247,
+ "charging_pay": 0
+ }
+ ]
+}
+```
+
+```shell
+curl -X POST --url 'https://member.bilibili.com/x2/creative/web/season/section/episodes/add' \
+--url-query 'csrf=xxx' \
+-H 'Content-Type: application/json' \
+--data-binary @payload.json \
+-b 'SESSDATA=xxx; bili_jct=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+## 编辑合集小节
+
+> https://member.bilibili.com/x2/creative/web/season/section/edit
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| csrf | str | CSRF Token (即 Cookies 中 bili_jct) | 必要 | |
+
+**正文参数 (application/json):**
+
+根对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| section | obj | 小节信息 | 必要 | |
+| sorts | array | 排序列表 | 必要 | |
+
+`section` 对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| id | num | 小节 ID | 必要 | |
+| seasonId | num | 合集 ID | 必要 | |
+| title | str | 小节标题 | 必要 | |
+| type | num | 1 | 必要 | |
+
+`sorts` 数组中的对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| id | num | 合集内视频 ID | 必要 | |
+| order | num | 排序位置 | 必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+
+**示例:**
+
+假设您已经把请求有效荷载放在 `payload.json` 文件中:
+
+```json
+{
+ "section": {
+ "id": 3954033,
+ "type": 1,
+ "seasonId": 3541247,
+ "title": "正片"
+ },
+ "sorts": [
+ {
+ "id": 77260687,
+ "sort": 1
+ },
+ {
+ "id": 77260688,
+ "sort": 2
+ }
+ ]
+}
+```
+
+```shell
+curl -X POST --url 'https://member.bilibili.com/x2/creative/web/season/section/edit' \
+--url-query 'csrf=xxx' \
+-H 'Content-Type: application/json' \
+--data-binary @payload.json \
+-b 'SESSDATA=xxx; bili_jct=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+## 编辑合集信息
+
+> https://member.bilibili.com/x2/creative/web/season/edit
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+注: 也有人工审核
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| csrf | str | CSRF Token (即 Cookies 中 bili_jct) | 必要 | |
+
+**正文参数 (application/json):**
+
+根对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| season | obj | 合集信息 | 必要 | |
+| sorts | array | 排序列表 | 必要 | |
+
+`season` 对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| id | num | 合集 ID | 必要 | |
+| title | str | 合集标题 | 必要 | |
+| cover | str | 封面图 | 必要 | 从 [上传封面](upload.md#上传封面) 处获取 |
+| desc | str | 合集简介 | 不必要 | |
+| season_price | num | 0 | 不必要 | 作用尚不明确 |
+| isEnd | num | 是否完结 | 不必要 | 0:未完结 1:完结 |
+
+`sorts` 数组中的对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| id | num | 小节 ID | 必要 | |
+| sort | num | 排序位置 | 必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+
+**示例:**
+
+假设您已经把请求有效荷载放在 `payload.json` 文件中:
+
+```json
+{
+ "season": {
+ "cover": "https://archive.biliimg.com/bfs/archive/77906db03b1eefac02613de184afad03f7bc58d7.jpg",
+ "id": 3541327,
+ "title": "IWILLBEDEL"
+ },
+ "sorts": [
+ {
+ "id": 3954127,
+ "sort": 1
+ }
+ ]
+}
+```
+
+```shell
+curl -X POST --url 'https://member.bilibili.com/x2/creative/web/season/edit' \
+--url-query 'csrf=xxx' \
+-H 'Content-Type: application/json' \
+--data-binary @payload.json \
+-b 'SESSDATA=xxx; bili_jct=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+## 删除合集
+
+> https://member.bilibili.com/x2/creative/web/season/del
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | --- | ---- | ----- | --- |
+| id | num | 合集 ID | 必要 | |
+| csrf | str | CSRF Token (即 Cookie 中 bili_jct) | 必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+
+**示例:**
+
+删除合集 `id=3541327`
+
+```shell
+curl -X POST 'https://member.bilibili.com/x2/creative/web/season/del' \
+--data-urlencode 'id=3541327' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx; bili_jct=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+## 获取合集小节中的视频
+
+> https://member.bilibili.com/x2/creative/web/season/section
+
+*请求方法: GET*
+
+认证方式: Cookie (SESSDATA)
+
+可以在给合集排序时使用, 可以获取别人的
+
+**URL 参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | --- | ---- | ----- | --- |
+| id | num | 合集 ID | 必要 | |
+
+**JSON 回复:**
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | ---- |
+| section | obj | 小节信息 | |
+| episodes | arr | 小节中的视频 | |
+
+`data` 对象中的 `section` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | ---- |
+| id | num | 小节 ID | |
+| type | num | 小节类型 | |
+| seasonId | num | 合集 ID | |
+| title | str | 小结标题 | |
+| order | str | 排序编号? | |
+| isEnd | num | 是否已完结? | 0: 未完结 |
+| state | num | 合集状态? | 0: 正常显示 -6: 正在审核 |
+| partState | num | 合集分段状态? | 0 |
+| rejectReason | str | 合集拒绝原因? | |
+| ctime | num | 创建时间 | |
+| mtime | num | 修改时间 | |
+| epCount | num | 小节视频总数 | |
+| cover | num | 合集封面 | |
+| show | num | 是否公开? | 1: 公开 |
+| has_charging_pay | num | 是否充电付费? | 0: 否 |
+| Episodes | null | | |
+| has_pugv_pay | num | 是否 PUGV 付费? | 0: 否 |
+
+`data` 对象中的 `episodes`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | ---- |
+| id | num | 合集内视频 ID | |
+| title | str | 视频标题 | |
+| aid | num | 视频 aid | |
+| bvid | str | 视频 bvid | |
+| cid | num | 视频 cid | |
+| seasonId | num | 合集 ID | |
+| sectionId | num | 小节 ID | |
+| order | num | 排序编号 | |
+| videoTitle | str | 视频标题 | |
+| archiveTitle | str | 看起来也是标题 | |
+| archiveState | num | 0 | |
+| rejectReason | str | 拒绝理由? | |
+| state | num | 0 | |
+| cover | str | 封面 URL | |
+| is_free | num | 是否免费? | 0: 免费 |
+| aid_owner | bool | 是否视频所有者 | true:是所有者 |
+| charging_pay | num | 充电付费? | 0: 否 |
+
+
+**示例:**
+
+获取合集小节 176088 的视频
+
+```shell
+curl -G --url 'https://member.bilibili.com/x2/creative/web/season/section' \
+--url-query 'id=176088' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+会返回全部的,由于很长,这里只保留三个作为例子
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "section": {
+ "id": 176088,
+ "type": 1,
+ "seasonId": 152812,
+ "title": "正片",
+ "order": 1,
+ "state": 0,
+ "partState": 0,
+ "rejectReason": "",
+ "ctime": 1643250822,
+ "mtime": 1739466002,
+ "epCount": 112,
+ "cover": "http://i1.hdslb.com/bfs/archive/4439a182b142d92a169609e6e14e7217b3e14e0d.jpg",
+ "has_charging_pay": 0,
+ "Episodes": null,
+ "show": 1,
+ "has_pugv_pay": 0
+ },
+ "episodes": [
+ {
+ "id": 109100674,
+ "title": "「开箱评测」三星Note8 EMR2笔对比公版Wacom笔 套娃笔首选 10寸 RK PX30 Wacom 电子书 天喻墨学 M2 M3",
+ "aid": 113997323963614,
+ "bvid": "BV14BNfeSE5c",
+ "cid": 28376042631,
+ "seasonId": 152812,
+ "sectionId": 176088,
+ "order": 1,
+ "videoTitle": "「开箱评测」三星Note8 EMR2笔对比公版Wacom笔 套娃笔首选 10寸 RK PX30 Wacom 电子书 天喻墨学 M2 M3",
+ "archiveTitle": "「开箱评测」三星Note8 EMR2笔对比公版Wacom笔 套娃笔首选 10寸 RK PX30 Wacom 电子书 天喻墨学 M2 M3",
+ "archiveState": 0,
+ "rejectReason": "",
+ "state": 0,
+ "cover": "",
+ "is_free": 0,
+ "aid_owner": true,
+ "charging_pay": 0,
+ "member_first": 0,
+ "pugv_pay": 0
+ },
+ {
+ "id": 108733886,
+ "title": "「开箱评测」拆解 椭圆形的第三方AirTag GRTSZ S2 Tag",
+ "aid": 113982291576104,
+ "bvid": "BV1YyNvetEbX",
+ "cid": 28325121446,
+ "seasonId": 152812,
+ "sectionId": 176088,
+ "order": 2,
+ "videoTitle": "「开箱评测」拆解 椭圆形的第三方AirTag GRTSZ S2 Tag",
+ "archiveTitle": "「开箱评测」拆解 椭圆形的第三方AirTag GRTSZ S2 Tag",
+ "archiveState": 0,
+ "rejectReason": "",
+ "state": 0,
+ "cover": "",
+ "is_free": 0,
+ "aid_owner": true,
+ "charging_pay": 0,
+ "member_first": 0,
+ "pugv_pay": 0
+ },
+ {
+ "id": 106045797,
+ "title": "「开箱评测」这帕姆怎么射不出来呢! 星穹铁道 KFC联动 财神帕姆 太可爱了",
+ "aid": 113892936122993,
+ "bvid": "BV1ZFFKeTEkr",
+ "cid": 28087484764,
+ "seasonId": 152812,
+ "sectionId": 176088,
+ "order": 3,
+ "videoTitle": "「开箱评测」这帕姆怎么射不出来呢! 星穹铁道 KFC联动 财神帕姆 太可爱了",
+ "archiveTitle": "「开箱评测」这帕姆怎么射不出来呢! 星穹铁道 KFC联动 财神帕姆 太可爱了",
+ "archiveState": 0,
+ "rejectReason": "",
+ "state": 0,
+ "cover": "",
+ "is_free": 0,
+ "aid_owner": true,
+ "charging_pay": 0,
+ "member_first": 0,
+ "pugv_pay": 0
+ }
+ ]
+ }
+}
+```
+
+
+
diff --git a/creativecenter/statistics&data.md b/docs/creativecenter/statistics&data.md
similarity index 81%
rename from creativecenter/statistics&data.md
rename to docs/creativecenter/statistics&data.md
index 90a0873..bfaef6f 100644
--- a/creativecenter/statistics&data.md
+++ b/docs/creativecenter/statistics&data.md
@@ -1,20 +1,10 @@
# 统计与数据
-- [UP主视频状态数据](#UP主视频状态数据)
-- [UP主专栏状态数据](#UP主专栏状态数据)
-- [视频数据增量趋势](#视频数据增量趋势)
-- [专栏数据增量趋势](#专栏数据增量趋势)
-- [稿件操作来源占比情况](#稿件操作来源占比情况)
-- [播放来源占比情况(平台及方式)](#播放来源占比情况(平台及方式))
-- [播放分布情况(粉丝与路人)](#播放分布情况(粉丝与路人))
-
----
-
统计与数据次日中午12刷新
## UP主视频状态数据
-> http://member.bilibili.com/x/web/index/stat
+> https://member.bilibili.com/x/web/index/stat
*请求方式:GET*
@@ -35,7 +25,6 @@
| 字段 | 类型 | 内容 | 备注 |
| ----------------- | ---- | -------------- | ---- |
-| fan_recent_thirty | obj | 粉丝数变化情况 | |
| inc_coin | num | 新增投币数 | |
| inc_elec | num | 新增充电数 | |
| inc_fav | num | 新增收藏数 | |
@@ -55,31 +44,10 @@
| total_reply | num | 总计评论数 | |
| total_share | num | 总计分享数 | |
-`data`中的`fan_recent_thirty`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ---- | -------- | ---- |
-| follow | obj | 涨粉情况 | |
-| unfollow | obj | 掉粉情况 | |
-
-`fan_recent_thirty`中的`follow`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------ | ---- | ------ | ---------------- |
-| {YYYYMMDD} | num | 涨粉数 | 字段名为日期 |
-| …… | num | …… | 近30天的涨粉情况 |
-
-`fan_recent_thirty`中的`unfollow`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------ | ---- | ------ | ---------------- |
-| {YYYYMMDD} | num | 掉粉数 | 字段名为日期 |
-| …… | num | …… | 近30天的掉粉情况 |
-
**示例:**
```shell
-curl 'http://member.bilibili.com/x/web/index/stat' \
+curl 'https://member.bilibili.com/x/web/index/stat' \
-b 'SESSDATA=xxx'
```
@@ -88,93 +56,126 @@ curl 'http://member.bilibili.com/x/web/index/stat' \
```json
{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "fan_recent_thirty": {
- "follow": {
- "20200304": 0,
- "20200305": 1,
- "20200307": 1,
- "20200308": 0,
- "20200309": 1,
- "20200310": 6,
- "20200311": 0,
- "20200313": 0,
- "20200314": 0,
- "20200316": 3,
- "20200317": 0,
- "20200318": 1,
- "20200319": 2,
- "20200320": 0,
- "20200321": 0,
- "20200322": 2,
- "20200323": 5,
- "20200324": 4,
- "20200325": 2,
- "20200326": 2,
- "20200327": 3,
- "20200328": 1,
- "20200329": 1,
- "20200331": 1,
- "20200401": 2
- },
- "unfollow": {
- "20200304": 1,
- "20200305": 0,
- "20200307": 0,
- "20200308": 0,
- "20200309": 2,
- "20200310": 1,
- "20200311": 1,
- "20200313": 2,
- "20200314": 1,
- "20200316": 0,
- "20200317": 1,
- "20200318": 1,
- "20200319": 0,
- "20200320": 1,
- "20200321": 1,
- "20200322": 1,
- "20200323": 1,
- "20200324": 0,
- "20200325": 1,
- "20200326": 0,
- "20200327": 0,
- "20200328": 0,
- "20200329": 0,
- "20200331": 0,
- "20200401": 1
- }
- },
- "inc_coin": 0,
- "inc_elec": 0,
- "inc_fav": 0,
- "inc_like": 2,
- "inc_share": 0,
- "incr_click": 62,
- "incr_dm": 1,
- "incr_fans": 2,
- "incr_reply": 2,
- "total_click": 31059,
- "total_coin": 440,
- "total_dm": 522,
- "total_elec": 90,
- "total_fans": 390,
- "total_fav": 557,
- "total_like": 729,
- "total_reply": 405,
- "total_share": 254
- }
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "inc_coin": 0,
+ "inc_elec": 0,
+ "inc_fav": 0,
+ "inc_like": 0,
+ "inc_share": 0,
+ "incr_click": 0,
+ "incr_dm": 0,
+ "incr_fans": 1,
+ "incr_reply": 0,
+ "total_click": 9,
+ "total_coin": 1,
+ "total_dm": 0,
+ "total_elec": 0,
+ "total_fans": 29,
+ "total_fav": 1,
+ "total_like": 1,
+ "total_reply": 0,
+ "total_share": 0
+ }
}
```
+## 新版UP主视频数据比较
+
+> https://member.bilibili.com/x/web/data/archive_diagnose/compare
+
+*请求方式:GET*
+
+认证方式:仅可Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------ | ------ | -------------- |
+| t | num | 时间戳 | 可选 | |
+| size | num | 比较最近的N条视频 | 可选,默认5 | 似乎没有最大值,或者最大值很大 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | 作用尚不明确 |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ---------- | ---- |
+| list | list | 最近的视频 | |
+
+`data`中的`list`项:
+> [!TIP]
+> 这里的数字一般都是百分比,小数点后保留两位,100代表1%,10000代表100%
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ---------- | ---- |
+| aid | num | av号 | |
+| bvid | str | bv号 | |
+| cover | str | 封面url | |
+|title| str|标题|
+|pubtime|num|发布时间|
+|duration|num|视频长度(秒)|
+|play|num|播放数||
+|vt|num|未知
+|like|num|点赞数
+|comment|num|评论数
+|dm|num|弹幕数
+|fav|num|收藏数|
+|coin|num|投币数
+|share|num|分享数
+|full_play_ratio|num|完播比,用户平均在百分之多少退出
+|play_viewer_rate|num|游客播放数,这个视频有多少是游客播放
+|active_fans_rate|num|粉丝观看率,多少粉丝看了这个视频
+|active_fans_med|num|?
+|tm_rate|num|封标点击率
+|tm_rate_med|num|你自己平均封标点击率
+|tm_fan_simi_rate_med|num|同类up粉丝封标点击率
+|tm_viewer_simi_rate_med|num|同类up游客封标点击率
+|tm_fan_rate|num|粉丝封标点击率
+|tm_viewer_rate|num|游客封标点击率
+|tm_pass_rate|num|封标点击率超过n%同类稿件
+|tm_fan_pass_rate|num|粉丝封标点击率超过n%同类稿件
+|tm_viewer_pass_rate|num|游客封标点击率超过n%同类稿件
+|crash_rate|num|3秒退出率
+|crash_rate_med|num|?
+|crash_fan_simi_rate_med|num|同类up粉丝3秒退出率
+|crash_viewer_simi_rate_med|num|同类up游客3秒退出率
+|crash_fan_rate|num|粉丝3秒退出率
+|crash_viewer_rate|num|游客3秒退出率
+|interact_rate|num|互动率
+|interact_rate_med|num|
+|interact_fan_simi_rate_med|num|同类up粉丝互动率
+|interact_viewer_simi_rate_med|num|同类up游客互动率
+|interact_fan_rate|num|粉丝互动率
+|interact_viewer_rate|num|游客互动率
+|avg_play_time|num|平均播放时间|注意:此字段总是0,可能b站正在写代码,或者和播放量改播放时长有关?
+|total_new_attention_cnt|num|涨粉
+|play_trans_fan_rate|num|播转粉率
+|play_trans_fan_rate_med|num|其他up平均播转粉率
+
+**示例:**
+
+```shell
+curl 'https://member.bilibili.com/x/web/data/archive_diagnose/compare?size=10' \
+-b 'SESSDATA=xxx'
+```
+
## UP主专栏状态数据
-> http://member.bilibili.com/x/web/data/article
+> https://member.bilibili.com/x/web/data/article
*请求方式:GET*
@@ -211,7 +212,7 @@ curl 'http://member.bilibili.com/x/web/index/stat' \
**示例:**
```shell
-curl 'http://member.bilibili.com/x/web/data/article' \
+curl 'https://member.bilibili.com/x/web/data/article' \
-b 'SESSDATA=xxx'
```
@@ -244,7 +245,7 @@ curl 'http://member.bilibili.com/x/web/data/article' \
## 视频数据增量趋势
-> http://member.bilibili.com/x/web/data/article/thirty
+> https://member.bilibili.com/x/web/data/pandect
*请求方式:GET*
@@ -303,7 +304,7 @@ curl 'http://member.bilibili.com/x/web/data/article' \
查询30天前的视频播放增量趋势,可知`2020-04-05`的播放增量为`46`,`2020-04-04`的播放增量为`58`
```shell
-curl -G 'http://member.bilibili.com/x/web/data/pandect' \
+curl -G 'https://member.bilibili.com/x/web/data/pandect' \
--data-urlencode 'type=1' \
-b 'SESSDATA=xxx'
```
@@ -344,7 +345,7 @@ curl -G 'http://member.bilibili.com/x/web/data/pandect' \
## 专栏数据增量趋势
-> http://member.bilibili.com/x/web/data/article/thirty
+> https://member.bilibili.com/x/web/data/article/thirty
*请求方式:GET*
@@ -401,7 +402,7 @@ curl -G 'http://member.bilibili.com/x/web/data/pandect' \
查询30天前的文章阅读增量趋势,可知`2020-04-05`的阅读增量为`6`,`2020-04-04`的阅读增量为`6`
```shell
-curl -G 'http://member.bilibili.com/x/web/data/article/thirty' \
+curl -G 'https://member.bilibili.com/x/web/data/article/thirty' \
--data-urlencode 'type=1' \
-b 'SESSDATA=xxx'
```
@@ -439,7 +440,7 @@ curl -G 'http://member.bilibili.com/x/web/data/article/thirty' \
## 稿件操作来源占比情况
-> http://member.bilibili.com/x/web/data/survey
+> https://member.bilibili.com/x/web/data/survey
*请求方式:GET*
@@ -523,7 +524,7 @@ curl -G 'http://member.bilibili.com/x/web/data/article/thirty' \
查询我的稿件来源占比情况
```shell
-curl -G 'http://member.bilibili.com/x/web/data/survey' \
+curl -G 'https://member.bilibili.com/x/web/data/survey' \
--data-urlencode 'type=1' \
-b 'SESSDATA=xxx'
```
@@ -580,7 +581,7 @@ curl -G 'http://member.bilibili.com/x/web/data/survey' \
## 播放来源占比情况(平台及方式)
-> http://member.bilibili.com/x/web/data/playsource
+> https://member.bilibili.com/x/web/data/playsource
*请求方式:GET*
@@ -628,7 +629,7 @@ curl -G 'http://member.bilibili.com/x/web/data/survey' \
**示例:**
```shell
-curl 'http://member.bilibili.com/x/web/data/playsource' \
+curl 'https://member.bilibili.com/x/web/data/playsource' \
-b 'SESSDATA=xxx'
```
@@ -664,7 +665,7 @@ curl 'http://member.bilibili.com/x/web/data/playsource' \
## 播放分布情况(粉丝与路人)
-> http://member.bilibili.com/x/web/data/base
+> https://member.bilibili.com/x/web/data/base
*请求方式:GET*
@@ -763,7 +764,7 @@ curl 'http://member.bilibili.com/x/web/data/playsource' \
**示例:**
```shell
-curl 'http://member.bilibili.com/x/web/data/base' \
+curl 'https://member.bilibili.com/x/web/data/base' \
-b 'SESSDATA=xxx'
```
diff --git a/docs/creativecenter/upload.md b/docs/creativecenter/upload.md
new file mode 100644
index 0000000..42abd30
--- /dev/null
+++ b/docs/creativecenter/upload.md
@@ -0,0 +1,1087 @@
+# 投稿
+
+## 上传封面
+
+> https://member.bilibili.com/x/vu/web/cover/up
+
+*请求方式: POST*
+
+认证方式:Cookie(SESSDATA)
+
+注: 目前看来上传的图片似乎不会自动删除
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| ts | num | 当前时间 | 不必要 | UNIX 毫秒时间戳 |
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| csrf | str | CSRF Token (位于 Cookie 中 bili_jct) | 必要 | |
+| cover | base64 | 视频封面 | 必要 | 经过 base64 编码的图片数据 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----- |
+| code | num | 返回值 | 0: 成功 -400: 请求错误 -111: csrf 校验失败 -101: 账号未登录 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ---- |
+| url | str | 封面 URL | |
+
+**示例:**
+
+假设已经把需要发送的数据进行编码存放在文件 `./b64` 中:
+
+```text
+csrf=xxxxxxxxxxxx&cover=data%3Aimage%2Fjpeg%3Bbase64%2C%2F9j%2F4AAQSkZJRgABA...
+```
+
+发送请求:
+
+```shell
+curl -X POST --url "https://member.bilibili.com/x/vu/web/cover/up" \
+--url-query "ts=$(date +%s%3N)" \
+--data-binary @b64 \
+-b "SESSDATA=xxxxxx; bili_jct=xxxxxx"
+```
+
+JavaScript (Node.js) 请求[示例](https://gist.github.com/SessionHu/5e47a3a1a351ac5486c87e3d63930e7a)
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "url": "https://archive.biliimg.com/bfs/archive/77906db03b1eefac02613de184afad03f7bc58d7.jpg"
+ }
+}
+```
+
+
+
+## 预测稿件类型
+
+> https://member.bilibili.com/x/vupre/web/archive/types/predict
+
+*请求方式: POST*
+
+认证方式: Cookie(SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| ts | num | 当前时间 | 不必要 | UNIX 毫秒时间戳 |
+| csrf | str | CSRF Token (位于 Cookie 中 bili_jct) | 必要 | |
+
+**正文参数(multipart/form-data):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| filename | str | 视频文件名 | 必要 | 从视频上传接口获取, 无后缀名, 可为空 |
+| title | str | 视频标题 | 不必要 ||
+| upload_id | str | 上传 ID | 不必要 | 如 `616368979_1723455540876_8794` |
+
+**JSON回复:**
+
+根对象:
+
+|字段|类型|内容|备注|
+|---|-|-|---|
+|code|num|返回值|0: 成功 -400: 请求错误 -111: csrf 校验失败 -101: 账号未登录|
+|message|str|错误信息|默认为 0|
+|ttl|num|1||
+|data|array|信息本体||
+
+`data` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ---- |
+| 0 | obj | 视频类型 1 | |
+| 1 | obj | 视频类型 2 | |
+| …… | obj | …… | |
+| n | obj | 视频类型 (n+1) | |
+
+`data` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ---- |
+| id | num | 子分区 ID | |
+| parent | num | 总分区 ID | |
+| parent_name | str | 总分区名称 | |
+| name | str | 子分区名称 | |
+| description | str | 子分区描述 | |
+| desc | str | 子分区描述 | 同 `description` |
+| intro_original | str | 原创简介说明 | |
+| intro_copy | str | 转载简介说明 | |
+| notice | str | 注意事项 | |
+| copy_right | num | 版权信息? | 0 |
+| show | bool | 是否显示? | true |
+| rank | num | 排序权重? | |
+| max_video_count | num | 最大视频数量? | |
+| request_id | str | 空 | |
+
+**示例:**
+
+```shell
+curl -X POST --url 'https://member.bilibili.com/x/vupre/web/archive/types/predict' \
+--url-query 'csrf=d51eadf05ba3bc6c5f76def7fbcc0185' \
+--data-urlencode 'filename=' \
+-b 'SESSDATA=xxx; bili_jct=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [
+ {
+ "id": 122,
+ "parent": 36,
+ "parent_name": "知识",
+ "name": "野生技能协会",
+ "description": "技能展示或技能教学分享类视频",
+ "desc": "技能展示或技能教学分享类视频",
+ "intro_original": "可对视频内容进行补充说明,并对所使用的视频素材进行标明。\n如是系列,也可附带上期视频地址。\n请勿加入涉政或具较大争议性的文字简介,否则将做打回处理。",
+ "intro_copy": "转载稿件需标明出处,请注明原作者、原作者频道名或原作者投稿地址。\n可对相关内容进行补充说明。\n请勿加入涉政或具较大争议性的文字简介,否则将做打回处理。\n如是系列,也可附带上期视频地址。",
+ "notice": "清晰明了表明内容亮点的标题会更受观众欢迎哟!",
+ "copy_right": 0,
+ "show": true,
+ "rank": 75,
+ "max_video_count": 100,
+ "request_id": ""
+ },
+ {
+ "id": 21,
+ "parent": 160,
+ "parent_name": "生活",
+ "name": "日常",
+ "description": "一般日常向的生活类视频",
+ "desc": "一般日常向的生活类视频",
+ "intro_original": "能够选择自制的必须是up主个人或工作室自己制作剪辑的视频,除此之外的搬运视频字幕制作,对于视频进行加速、慢放等简易二次创作,在视频中添加前后贴片或者打水印等行为均不被认作自制",
+ "intro_copy": "转载需写明请注明转载作品详细信息原作者、原标题及出处(需为该视频最原始出处,如所标注明显为非原始出处的话会被打回)",
+ "notice": "",
+ "copy_right": 0,
+ "show": true,
+ "rank": 4,
+ "max_video_count": 50,
+ "request_id": ""
+ },
+ {
+ "id": 242,
+ "parent": 5,
+ "parent_name": "娱乐",
+ "name": "娱乐粉丝创作",
+ "description": "粉丝向创作视频",
+ "desc": "粉丝向创作视频",
+ "intro_original": "",
+ "intro_copy": "",
+ "notice": "清晰明了表明内容亮点的标题会更受观众欢迎哟!",
+ "copy_right": 0,
+ "show": true,
+ "rank": 40,
+ "max_video_count": 50,
+ "request_id": ""
+ },
+ {
+ "id": 65,
+ "parent": 4,
+ "parent_name": "游戏",
+ "name": "网络游戏",
+ "description": "多人在线游戏为主要内容的相关视频",
+ "desc": "多人在线游戏为主要内容的相关视频",
+ "intro_original": "建议在简介和TAG中添加正确的游戏名,以便在分区和搜索中得到更好的展示。\n录制他人直播(包括授权转载、授权录制)不属于自制内容,请选转载。",
+ "intro_copy": "建议在简介和TAG中添加正确的游戏名。\n搬运转载内容请添加原作者、原链接地址信息。录制他人直播内容请添加原主播信息、直播时间。\n未添加正确转载、录播信息的稿件可能被打回。",
+ "notice": "【UP主/节目名】+《游戏名》+主要标题+期号",
+ "copy_right": 0,
+ "show": true,
+ "rank": 30,
+ "max_video_count": 50,
+ "request_id": ""
+ },
+ {
+ "id": 138,
+ "parent": 160,
+ "parent_name": "生活",
+ "name": "搞笑",
+ "description": "搞笑挑战、剪辑、表演、配音以及各类日常沙雕视频",
+ "desc": "搞笑挑战、剪辑、表演、配音以及各类日常沙雕视频",
+ "intro_original": "能够选择自制的必须是up主个人或工作室自己制作剪辑的视频,除此之外的搬运视频字幕制作,对于视频进行加速、慢放等简易二次创作,在视频中添加前后贴片或者打水印等行为均不被认作自制",
+ "intro_copy": "转载需写明请注明转载作品详细信息原作者、原标题及出处(需为该视频最原始出处,如所标注明显为非原始出处的话会被打回)",
+ "notice": "",
+ "copy_right": 0,
+ "show": true,
+ "rank": 30,
+ "max_video_count": 50,
+ "request_id": ""
+ }
+ ]
+}
+```
+
+
+
+## 预测稿件标签
+
+> https://member.bilibili.com/x/vupre/web/tag/recommend
+
+*请求方式: GET*
+
+认证方式: Cookie(SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| upload_id | str | 同 [预测稿件类型](#预测稿件类型) 的 `upload_id` | 不必要 | |
+| subtype_id | int | 子分区 ID | 不必要 | |
+| title | str | 视频标题 | 不必要 | |
+| filename | str | 同 [预测稿件类型](#预测稿件类型) 的 `filename` | 不必要 | |
+| description | str | 视频简介 | 不必要 | |
+| cover_url | str | 视频封面 URL | 不必要 | 不含 `https:` 或 `http:` 字串 |
+| t | int | 当前 UNIX 毫秒时间戳 | 不必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| code | int | 返回值 | 0: 成功 -101: 账号未登录 |
+| data | array | 标签信息 | |
+| message | str | 错误信息 | 默认为 0 |
+| request_id | str | 请求 ID | |
+
+`data` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ---- |
+| 0 | obj | 标签 1 | |
+| 1 | obj | 标签 2 | |
+| …… | obj | …… | |
+| n | obj | 标签 (n+1) | |
+
+`data` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ---- |
+| tag | str | 标签名称 | |
+| checked | int | 0 | |
+| request_id | str | 请求 ID | 同根对象 |
+
+**示例:**
+
+```shell
+curl -G 'https://member.bilibili.com/x/vupre/web/tag/recommend' \
+--url-query 'subtype_id=122' \
+--url-query 'title=Telnet手打HTTP' \
+--url-query 'description=测试用 Telnet 手打 HTTP/1.x 协议访问本地服务器, 无 SSL/TLS 支持'
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "data": [
+ {
+ "tag": "学习",
+ "checked": 0,
+ "request_id": "TAG_1723543336295_3371"
+ },
+ {
+ "tag": "编程",
+ "checked": 0,
+ "request_id": ""
+ },
+ {
+ "tag": "课程",
+ "checked": 0,
+ "request_id": ""
+ },
+ {
+ "tag": "学习心得",
+ "checked": 0,
+ "request_id": ""
+ },
+ {
+ "tag": "经验分享",
+ "checked": 0,
+ "request_id": ""
+ }
+ ],
+ "message": "0",
+ "request_id": "TAG_1723543336295_3371"
+}
+```
+
+
+
+## 投递视频稿件
+
+> https://member.bilibili.com/x/vu/web/add/v3
+
+*请求方式: POST*
+
+认证方式:Cookie(SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| ts | num | 当前时间 | 不必要 | UNIX 毫秒时间戳 |
+| csrf | str | CSRF Token (位于 Cookie 中 bili_jct) | 必要 | |
+
+**正文参数(application/json):**
+
+根对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| videos | array | 视频信息 | 必要 | 若为分 P 视频, 请注意数组元素顺序 |
+| cover | str | 视频封面 URL | 必要 | 参见[上传视频封面](#上传视频封面) |
+| cover43 | str | 视频封面 URL (比例为 4:3) | 必要 | 可为空 |
+| title | str | 视频标题 | 必要 | 最多 80 字 |
+| copyright | num | 1: 自制 2: 转载 | 必要 | |
+| tid | num | 分类 ID | 必要 | |
+| tag | str | 视频标签 | 必要 | 多个标签用 `,` 分隔, 最多 10 个 |
+| desc_format_id | num | 简介格式 ID? | 必要 | 9999: 纯文本 |
+| desc | str | 视频简介 | 必要 | 最多 2000 字 |
+| recreate | num | 是否允许二创 | 必要 | -1: 允许(默认) 1: 不允许 |
+| dynamic | str | 粉丝动态 | 必要 | |
+| interactive | num | 互动视频? | 必要 | 0: 否 |
+| act_reserve_create | num | 活动预约? | 必要 | 0: 否 |
+| no_disturbance | num | 勿扰模式? | 必要 | 0: 否 |
+| no_reprint | num | 是否允许转载 | 必要 | 1: 允许 0: 不允许 |
+| subtitle | obj | 字幕信息 | 必要 | |
+| dolby | num | 杜比音效 | 必要 | 0: 否(默认) 1: 是 |
+| lossless_music | num | 无损音乐 | 必要 | 0: 否(默认) 1: 是 |
+| up_selection_reply | bool | 精选评论 | 必要 | |
+| up_close_reply | bool | 关闭评论 | 必要 | |
+| up_close_danmu | bool | 关闭弹幕 | 必要 | |
+| web_os | num | 平台类型? | 必要 | 3 |
+
+`videos` 数组中的对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| filename | str | 视频文件名 | 必要 | 从视频上传接口获取, 无后缀名 |
+| title | str | 分 P 标题 | 必要 | |
+| desc | str | 分 P 简介 | 必要 | |
+| cid | num | 分 P cid | 必要 | 从视频上传接口获取, 即 `biz_id` |
+
+`subtitle` 对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| open | num | 是否启用字幕投稿 | 必要 | 0: 启用(默认) 1: 不启用 |
+| lan | str | 字幕投稿语言 | 必要 | 可为空 |
+
+**示例:**
+
+假设已经把需要发送的数据存放在文件 `./data.json` 中:
+
+```json
+{
+ "videos": [
+ {
+ "filename": "n240728ad33h52yqhxbtw51cb06sq9gx",
+ "title": "Telnet手打HTTP",
+ "desc": "",
+ "cid": 500001629877726
+ }
+ ],
+ "cover": "https://archive.biliimg.com/bfs/archive/85447ea20431ef799382c403c84b4bfb82a41053.jpg",
+ "cover43": "",
+ "title": "Telnet手打HTTP",
+ "copyright": 1,
+ "tid": 122,
+ "tag": "telnet,socket,tcp,linux,http",
+ "desc_format_id": 9999,
+ "desc": "测试用 Telnet 手打 HTTP/1.x 协议访问本地服务器, 无 SSL/TLS 支持",
+ "recreate": -1,
+ "dynamic": "for testing",
+ "interactive": 0,
+ "act_reserve_create": 0,
+ "no_disturbance": 0,
+ "no_reprint": 1,
+ "subtitle": {
+ "open": 0,
+ "lan": ""
+ },
+ "dolby": 0,
+ "lossless_music": 0,
+ "up_selection_reply": false,
+ "up_close_reply": false,
+ "up_close_danmu": false,
+ "web_os": 3,
+ "csrf": "xxxxxxxxxxxxxxxxxxxxxxxx"
+}
+```
+
+发送请求:
+
+```shell
+curl -X POST --url "https://member.bilibili.com/x/vu/web/add/v3" \
+--url-query "ts=$(date +%s%3N)" \
+--url-query "csrf=xxxxxxxxxxxxxxxxxxxxxxxx" \
+-H "Content-Type: application/json; charset=utf-8" \
+--data @data.json \
+-b "SESSDATA=xxxxxx; bili_jct=xxxxxxxxxxxxxxxxxxxxxxxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "aid": 112861976201494,
+ "bvid": "BV181vnexEmB"
+ }
+}
+```
+
+
+
+## 上传视频文件
+
+注: 目前看来上传的视频文件似乎不会自动删除, 而且似乎不是视频也可以上传的样子, 但是下载认证字段有效期只有 5 天
+
+### 上传流程
+
+整个上传流程较为复杂, 详细参见[Demo](#Demo)
+
+1. `GET` `preupload` 接口, [获取上传元数据](#获取上传元数据-预上传)
+
+2. `POST` 第 1 步得到的地址, [上传视频元数据](#上传视频元数据)
+
+3. `PUT` 第 1 步得到的地址, [分片上传视频文件](#分片上传视频文件)
+
+4. `POST` 第 1 步得到的地址, [结束上传视频文件](#结束上传视频文件)
+
+5. `GET` 第 1 步得到的地址, [下载已上传的视频文件](#下载已上传的视频文件) , 确认上传成功 (可选)
+
+### 上传接口
+
+#### 获取上传元数据 (预上传)
+
+> https://member.bilibili.com/preupload
+
+*请求方式: GET*
+
+认证方式:Cookie(SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| name | str | 文件名 | 必要 | 会影响返回的上传地址 |
+| r | str | 上传区域? | 必要 | upos |
+| profile | str | 上传配置? | 必要 | 普通视频: ugcfx/bup 提交反馈: feedback/bup |
+| probe_version | num | 上传版本? | 不必要 | 20221109 |
+| upcdn | str | 上传 CDN? | 不必要 | txa |
+| zone | str | 上传区域? | 不必要 | cs |
+| ssl | num | 是否使用 SSL? | 不必要 | 0 |
+| version | str | 上传版本? | 不必要 | 2.14.0.0 |
+| build | str | 上传版本? | 不必要 | 2140000 |
+| size | num | 文件大小 | 不必要 | 视频文件大小, 单位 字节 |
+| webVersion | str | 上传版本? | 不必要 | 2.13.0 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----- |
+| OK | num | 1 | |
+| auth | str | 上传凭证 | 作为后面请求中请求头, 有效期 5 天 |
+| biz_id | num | 业务 ID? | |
+| chunk_retry | num | 重试次数? | |
+| chunk_retry_delay | num | 重试延迟? | |
+| chunk_size | num | 分块大小 | 后面要用 |
+| endpoint | str | 上传节点 | 后面要用 |
+| endpoints | array | 上传节点列表 | |
+| expose_params | null | | |
+| put_query | str | 上传参数? | |
+| threads | num | 上传线程数 | |
+| timeout | num | 超时时间? | |
+| uip | str | 你的 IP | |
+| upos_uri | str | 上传地址 | 后面要用 |
+
+`endpoints` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ----- |
+| 0 | str | 上传节点1 | |
+| …… | str | …… | |
+| n | str | 上传节点n | |
+
+**示例:**
+
+假设视频文件名为 `2024-07-28_15-37-50.mkv`, 视频大小为 `305333744` 字节
+
+```shell
+curl -G "https://member.bilibili.com/preupload" \
+--data-urlencode "name=2024-07-28_15-37-50.mkv" \
+--data-urlencode "r=upos" \
+--data-urlencode "profile=ugcfx/bup" \
+-b "SESSDATA=xxxxxxxxxxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "OK": 1,
+ "auth": "ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=b6c5cc520a281200906aea97e190b098×tamp=1722155211.324&uid=616368979&uip=108.181.24.77&uport=52096&use_dqp=0",
+ "biz_id": 500001630152509,
+ "chunk_retry": 10,
+ "chunk_retry_delay": 3,
+ "chunk_size": 10485760,
+ "endpoint": "//upos-cs-upcdntxa.bilivideo.com",
+ "endpoints": [
+ "//upos-cs-upcdntxa.bilivideo.com",
+ "//upos-cs-upcdnalia.bilivideo.com"
+ ],
+ "expose_params": null,
+ "put_query": "os=upos&profile=ugcfx%2Fbup",
+ "threads": 3,
+ "timeout": 1200,
+ "uip": "108.181.24.77",
+ "upos_uri": "upos://ugcfx2lf/n240728ad1p51if4g3ke4s3o95sznogy.mkv"
+}
+```
+
+
+
+#### 上传视频元数据
+
+> URL 拼接格式: `"https"` + [上一个接口](#获取上传元数据-预上传)的`endpoint` + 上一个接口的`upos_uri`去掉协议名
+> JavaScript 模板字符串: `https:${preupload.endpoint}/${endpoint.upos_uri.replace("upos://", "")}`
+
+*请求方式: POST*
+
+认证方式:请求头 `X-Upos-Auth` 为上一接口得到的 `auth`
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| uploads | str | 留空 | 必要 | 留空 |
+| output | str | 输出格式 | 不必要 | 默认为 json(推荐), 留空为 xml |
+| profile | str | 上传配置? | 必要 | 与上一个接口保持相同 |
+| filesize | num | 文件大小 | 必要 | 视频文件大小, 单位 字节 feedback/bup 不必要 |
+| partsize | num | 分块大小 | 必要 | 上一个接口返回, 且后面要用 feedback/bup 不必要 |
+| biz_id | num | 业务 ID? | 必要 | 上一个接口返回, 且后面要用 feedback/bup 不必要 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----- |
+| OK | num | 1 | |
+| bucket | str | 空间名? | |
+| key | str | 文件名? | |
+| upload_id | str | 上传 ID | 后面要用 |
+
+**示例:**
+
+假设上一接口返回的
+`auth` 为 `ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=4004b35628e982bc90b59cec86f8c441×tamp=1722173443.298&uid=616368979&uip=104.28.153.18&uport=44282&use_dqp=0`,
+`biz_id` 为`500001630454700`,
+`endpoint` 为 `//upos-cs-upcdntxa.bilivideo.com`,
+`upos_uri` 为 `upos://ugcfx2lf/n240728adhejliqv0kqyg2s5n6huv501.mkv`,
+`chunk_size` 为 `10485760`.
+视频文件大小为 `305333744` 字节.
+
+```shell
+curl -X POST --url "https://upos-cs-upcdntxa.bilivideo.com/ugcfx2lf/n240728adhejliqv0kqyg2s5n6huv501.mkv` \
+--url-query "uploads=" \
+--url-query "output=json" \
+--url-query "profile=ugcfx/bup" \
+--url-query "filesize=305333744" \
+--url-query "partsize=10485760" \
+--url-query "biz_id=500001630454700" \
+-H "X-Upos-Auth: ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=4004b35628e982bc90b59cec86f8c441×tamp=1722173443.298&uid=616368979&uip=104.28.153.18&uport=44282&use_dqp=0" \
+-b "SESSDATA=xxxxxxxxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "OK": 1,
+ "bucket": "ugcfx2lf",
+ "key": "/n240728adhejliqv0kqyg2s5n6huv501.mkv",
+ "upload_id": "26c674b4-0dce-45f5-a9cd-a199d9c982bf"
+}
+```
+
+
+
+#### 分片上传视频文件
+
+> URL 同 [上一个接口](#上传视频元数据)
+
+*请求方式: PUT*
+
+认证方式:请求头 `X-Upos-Auth` 为上上一接口得到的 `auth`
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| partNumber | num | 分块序号 | 必要 | 从 1 开始 |
+| uploadId | str | 上传 ID | 必要 | 上一个接口返回 |
+| chunk | num | 分块序号 | 必要 | 从 0 开始 |
+| chunks | num | 分块总数 | 必要 | 自行计算: 文件大小除以分块大小并向上取整 |
+| size | num | 该分块大小 | 必要 | 该实际上传字节数 |
+| start | num | 该分块开始位置 | 必要 | 已实际上传字节数 |
+| end | num | 该分块结束位置 | 必要 | 该分块上传结束后实际上传总字节数 |
+| total | num | 总大小 | 必要 | 视频文件大小, 单位 字节 |
+
+**正文参数(application/octet-stream):**
+
+视频文件在该分块的字节流
+
+**纯文本回复:**
+
+```text
+MULTIPART_PUT_SUCCESS
+```
+
+**示例:**
+
+假设上上一接口返回的
+`auth` 为 `ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=911dd5b995895805d785aa607b4153b6×tamp=1722212776.333&uid=616368979&uip=108.181.24.77&uport=36044&use_dqp=0`,
+`endpoint` 为 `//upos-cs-upcdntxa.bilivideo.com`,
+`upos_uri` 为 `upos://ugcfx2lf/n240729ad7gxi43yaoml312h2nbt2pnf.xz`,
+`chunk_size` 为 `10485760`.
+
+上一接口返回的
+`upload_id` 为 `8130090a-16f7-4fe6-8a29-198f5abce913`.
+
+视频文件名为 `20240724-remove-linux-then-install.tar.xz`, 文件大小为 `278255704` 字节.
+
+假设您要上传的分块序号为 `1`,
+该分块大小为 `10485760`,
+该分块开始位置为 `0`,
+该分块结束位置为 `10485760`,
+该分块实际上传字节数为 `10485760`,
+您已将文件分块存放至 `part01.tar.xz`, `part02.tar.xz`, ..., `part27.tar.xz`.
+
+```shell
+curl -X PUT --url "https://upos-cs-upcdntxa.bilivideo.com/ugcfx2lf/n240729ad7gxi43yaoml312h2nbt2pnf.xz" \
+--url-query "partNumber=1" \
+--url-query "uploadId=8130090a-16f7-4fe6-8a29-198f5abce913" \
+--url-query "chunk=0" \
+--url-query "chunks=27" \
+--url-query "size=10485760" \
+--url-query "start=0" \
+--url-query "end=10485760" \
+--url-query "total=278255704" \
+-H "X-Upos-Auth: ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=911dd5b995895805d785aa607b4153b6×tamp=1722212776.333&uid=616368979&uip=108.181.24.77&uport=36044&use_dqp=0" \
+-H "Content-Type: application/octet-stream" \
+--data-binary @part01.tar.xz \
+-b "SESSDATA=xxxxxxxxx"
+```
+
+
+查看响应示例:
+
+```text
+MULTIPART_PUT_SUCCESS
+```
+
+
+
+#### 结束上传视频文件
+
+> URL 同 [上一个接口](#分片上传视频文件)
+
+*请求方式: POST*
+
+认证方式:请求头 `X-Upos-Auth` 为上上上一接口得到的 `auth`
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| output | str | 输出格式 | 不必要 | 默认为 json(推荐), 留空为 xml |
+| name | str | 文件名 | 必要 | 视频文件名 |
+| profile | str | 上传配置? | 必要 | 与上一个接口相同, 普通视频: ugcfx/bup |
+| uploadId | str | 上传 ID | 必要 | 与上一个接口相同 |
+| biz_id | num | 业务 ID? | 必要 | 与上上一个接口相同 |
+
+**正文参数(application/json):**
+
+根对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ---- | ------ | ---- |
+| parts | array | 各分块信息 | 必要 | 按实际上传顺序而不是分块序号顺序 |
+
+`parts` 数组:
+
+| 项 | 类型 | 内容 | 必要性 | 备注 |
+| --- | ---- | ---- | ------ | ---- |
+| 0 | obj | 分块信息1 | 必要 | 按实际上传顺序而不是分块序号顺序 |
+| 1 | obj | 分块信息2 | 必要 | |
+| …… | obj | …… | | |
+| n | obj | 分块信息n | 必要 | |
+
+`parts` 数组中的对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ---- | ------ | ---- |
+| partNumber | num | 分块序号 | 必要 | 从 1 开始 |
+| eTag | str | `etag` | 必要 | |
+
+**JSON回复:**
+
+与 [上上一个接口](#上传视频元数据) 相同
+
+**示例:**
+
+假设上上上一接口返回的
+`auth` 为 `ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=911dd5b995895805d785aa607b4153b6×tamp=1722212776.333&uid=616368979&uip=108.181.24.77&uport=36044&use_dqp=0`,
+`endpoint` 为 `//upos-cs-upcdntxa.bilivideo.com`,
+`upos_uri` 为 `upos://ugcfx2lf/n240729ad7gxi43yaoml312h2nbt2pnf.xz`,
+`biz_id` 为 `500001630826789`.
+
+上上一接口返回的
+`upload_id` 为 `8130090a-16f7-4fe6-8a29-198f5abce913`.
+
+视频文件名为 `20240724-remove-linux-then-install.tar.xz`, 文件大小为 `278255704` 字节.
+
+假设您已经全部上传完毕, 共上传 `27` 个分块, 本次请求上传的的内容存放在 `body.json` 文件中.
+
+```shell
+curl -X PUT --url "https://upos-cs-upcdntxa.bilivideo.com/ugcfx2lf/n240729ad7gxi43yaoml312h2nbt2pnf.xz" \
+--url-query "output=json" \
+--url-query "name=20240724-remove-linux-then-install.tar.xz" \
+--url-query "profile=ugcfx%2Fbup" \
+--url-query "uploadId=8130090a-16f7-4fe6-8a29-198f5abce913" \
+--url-query "biz_id=500001630826789" \
+-H "X-Upos-Auth: ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=911dd5b995895805d785aa607b4153b6×tamp=1722212776.333&uid=616368979&uip=108.181.24.77&uport=36044&use_dqp=0" \
+-H "Content-Type: application/json" \
+--data-binary @body.json \
+-b "SESSDATA=xxxxxxxxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "OK": 1,
+ "location": "ugcfx2lf/n240729ad7gxi43yaoml312h2nbt2pnf.xz",
+ "bucket": "ugcfx2lf",
+ "key": "/n240729ad7gxi43yaoml312h2nbt2pnf.xz"
+}
+```
+
+
+
+#### 下载已上传的视频文件
+
+> URL 同 [上一个接口](#结束上传视频文件)
+
+*请求方式: GET*
+
+认证方式:请求头 `X-Upos-Auth` 为上上上上一接口得到的 `auth`
+
+注: 由于 `X-Upos-Auth` 有效期只有 5 天, 过期请求将返回 HTTP 403 如下
+
+```http
+HTTP/1.1 403 Forbidden
+Bili-Trace-Id: 3e3f2db61366adbf
+Server: upos@hcsgw@jscs-bvc-hcsgw-public-02
+X-Bili-Trace-Id: 0d8ca1af6d3510253e3f2db61366adbf
+X-Upos-Auth: AUTH_TS_GT_5DAY AUTH=ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=911dd5b995895805d785aa607b4153b6×tamp=1722212776.333&uid=616368979&uip=108.181.24.77&uport=36044&use_dqp=0 Now=1722662669 DURATION=449893
+Content-Length: 0
+Connection: keep-alive
+Date: Sat, 03 Aug 2024 05:24:29 GMT
+EO-LOG-UUID: 4296647794590631154
+EO-Cache-Status: MISS
+```
+
+**字节流回复:**
+
+视频文件字节流
+
+**示例:**
+
+假设请求上一接口时的 URL 为 `https://upos-cs-upcdntxa.bilivideo.com/ugcfx2lf/n240729ad7gxi43yaoml312h2nbt2pnf.xz`,
+请求头的 `X-Upos-Auth` 为 `ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=911dd5b995895805d785aa607b4153b6×tamp=1722212776.333&uid=616368979&uip=108.181.24.77&uport=36044&use_dqp=0`,
+您想要下载到运行目录下的 `file.tar.xz` 文件
+
+```shell
+curl -G "https://upos-cs-upcdntxa.bilivideo.com/ugcfx2lf/n240729ad7gxi43yaoml312h2nbt2pnf.xz" \
+-H "X-Upos-Auth: ak=1494471752&cdn=%2F%2Fupos-cs-upcdntxa.bilivideo.com&os=upos&sign=911dd5b995895805d785aa607b4153b6×tamp=1722212776.333&uid=616368979&uip=108.181.24.77&uport=36044&use_dqp=0" \
+--output file.tar.xz
+```
+
+
+查看检查示例:
+
+```text
+ % Total % Received % Xferd Average Speed Time Time Time Current
+ Dload Upload Total Spent Left Speed
+100 265M 100 265M 0 0 9493k 0 0:00:28 0:00:28 --:--:-- 10.3M
+$ sha512sum file.tar.xz
+abfbedf1ac4f251c81103beb4d5406af1e0b64b9d54e99bfc77d2a8a9c4913a9fd2f1751828ace8aac036f6385609d99e251437b07a0491caca2ad7069a57003 file.tar.xz
+$ sha512sum ~/Documents/video-proj/20240724-remove-linux-then-install.tar.xz
+abfbedf1ac4f251c81103beb4d5406af1e0b64b9d54e99bfc77d2a8a9c4913a9fd2f1751828ace8aac036f6385609d99e251437b07a0491caca2ad7069a57003 /home/sess/Documents/video-proj/20240724-remove-linux-then-install.tar.xz
+```
+
+
+
+### Demo
+
+#### Java
+
+注: 需要 Gson 依赖, Java 8+, 单线程上传, 无异常处理, 仅供参考
+
+```java
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URI;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.StringJoiner;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonSyntaxException;
+
+/**
+ * A demo class for uploading videos to Bilibili.
+ *
+ * @author SessX6cf
+ */
+public class BiliVideoUploader {
+
+ private static String SESSDATA;
+ private static File VIDEO_FILE;
+
+ public static void main(String[] args) throws IOException {
+ long ts = System.currentTimeMillis();
+ if (args.length < 2) {
+ System.out.println("Usage: java BiliVideoUploader ");
+ return;
+ } else {
+ VIDEO_FILE = new File(args[0]);
+ if (!VIDEO_FILE.isFile()) {
+ System.out.println("It is not a file!");
+ return;
+ } else if (!VIDEO_FILE.canRead()) {
+ System.out.println("Cannot read the file!");
+ return;
+ } else if (VIDEO_FILE.isDirectory()) {
+ System.out.println("You can play a directory?!");
+ return;
+ }
+ SESSDATA = args[1];
+ }
+ // step 1: preupload video
+ System.out.println("step 1: preupload video");
+ JsonObject preuploadVideo = preuploadVideo();
+ // step 2: post video meta
+ System.out.println("step 2: post video meta");
+ JsonObject postVideoMeta = postVideoMeta(preuploadVideo);
+ // step 3: upload video
+ System.out.println("step 3: upload video");
+ int chunks = uploadVideo(preuploadVideo, postVideoMeta);
+ // step 4: end upload
+ System.out.println("step 4: end upload");
+ endupload(preuploadVideo, postVideoMeta, chunks);
+ // finished
+ System.out.println("finished (" + (System.currentTimeMillis() - ts) + "ms)");
+ }
+
+ private static String querypart(String key, String value) throws IOException {
+ return key + "=" + URLEncoder.encode(value, "UTF-8");
+ }
+
+ private static HttpURLConnection conn(String url, String method) throws IOException {
+ HttpURLConnection conn;
+ try {
+ conn = (HttpURLConnection) new URI(url).toURL().openConnection();
+ } catch (java.net.URISyntaxException e) {
+ throw new IOException(e);
+ }
+ conn.setRequestMethod(method);
+ // conn.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0");
+ if (url.contains("bilibili.com")) conn.setRequestProperty("Cookie", "SESSDATA=" + SESSDATA);
+ return conn;
+ }
+
+ private static byte[] inputStreamToString(HttpURLConnection conn) throws IOException {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ InputStream in;
+ in = conn.getInputStream();
+ int b;
+ while ((b = in.read()) != -1) {
+ baos.write(b);
+ }
+ in.close();
+ return baos.toByteArray();
+ }
+
+ private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
+
+ private static JsonObject preuploadVideo() throws IOException {
+ StringJoiner url = new StringJoiner("&", "https://member.bilibili.com/preupload?", "");
+ url.add(querypart("name", VIDEO_FILE.getName()));
+ // url.add(querypart("size", String.valueOf(VIDEO_FILE.length())));
+ url.add(querypart("r", "upos"));
+ url.add(querypart("profile", "ugcfx/bup"));
+ HttpURLConnection conn = conn(url.toString(), "GET");
+ System.out.println("GET " + url.toString());
+ String response = new String(inputStreamToString(conn), StandardCharsets.UTF_8);
+ try {
+ JsonObject json = GSON.fromJson(response, JsonObject.class);
+ System.out.println(GSON.toJson(json));
+ return json;
+ } catch (JsonSyntaxException e) {
+ System.out.println(response);
+ throw e;
+ }
+ }
+
+ private static JsonObject postVideoMeta(JsonObject preuploadVideo) throws IOException {
+ String schemeandhost = "https:" + preuploadVideo.get("endpoint").getAsString();
+ String path = preuploadVideo.get("upos_uri").getAsString().replaceFirst("upos:/", "");
+ StringJoiner url = new StringJoiner("&", schemeandhost + path + "?", "");
+ url.add(querypart("uploads", "")); // WARNING: this is not a typo, it's required, or 404
+ url.add(querypart("output", "json"));
+ url.add(querypart("profile", "ugcfx/bup"));
+ url.add(querypart("filesize", String.valueOf(VIDEO_FILE.length())));
+ url.add(querypart("partsize", preuploadVideo.get("chunk_size").getAsString()));
+ url.add(querypart("biz_id", preuploadVideo.get("biz_id").getAsString()));
+ HttpURLConnection conn = conn(url.toString(), "POST");
+ conn.setRequestProperty("X-Upos-Auth", preuploadVideo.get("auth").getAsString()); // 403 without it
+ System.out.println("POST " + url.toString());
+ String response = new String(inputStreamToString(conn), StandardCharsets.UTF_8);
+ try {
+ JsonObject json = GSON.fromJson(response, JsonObject.class);
+ System.out.println(GSON.toJson(json));
+ return json;
+ } catch (JsonSyntaxException e) {
+ System.out.println(response);
+ throw e;
+ }
+ }
+
+ private static int uploadVideo(JsonObject preuploadVideo, JsonObject postVideoMeta) throws IOException {
+ long startts = System.currentTimeMillis() - 1;
+ String schemeandhost = "https:" + preuploadVideo.get("endpoint").getAsString();
+ String path = preuploadVideo.get("upos_uri").getAsString().replaceFirst("upos:/", "");
+ String urlp = schemeandhost + path + "?";
+ long length = VIDEO_FILE.length();
+ byte[] buffer = new byte[preuploadVideo.get("chunk_size").getAsInt()];
+ int size = 0;
+ int chunks = (int) Math.ceil(length / (double) buffer.length);
+ InputStream in = new FileInputStream(VIDEO_FILE);
+ for (int chunk = 0; chunk < chunks; chunk++) {
+ System.out.println("speed: " + (chunk * buffer.length) / (System.currentTimeMillis() - startts) + "bytes/s");
+ System.out.println("chunk: " + (chunk + 1) + "/" + chunks);
+ size = in.read(buffer, 0, buffer.length);
+ if (size == -1) {
+ break;
+ }
+ StringJoiner url = new StringJoiner("&", urlp, "");
+ url.add(querypart("partNumber", String.valueOf(chunk + 1)));
+ url.add(querypart("uploadId", postVideoMeta.get("upload_id").getAsString()));
+ url.add(querypart("chunk", String.valueOf(chunk)));
+ url.add(querypart("chunks", String.valueOf(chunks)));
+ url.add(querypart("size", String.valueOf(size)));
+ url.add(querypart("start", String.valueOf(chunk * buffer.length)));
+ url.add(querypart("end", String.valueOf((chunk) * buffer.length + size)));
+ url.add(querypart("total", String.valueOf(length)));
+ HttpURLConnection conn = conn(url.toString(), "PUT");
+ conn.setRequestProperty("X-Upos-Auth", preuploadVideo.get("auth").getAsString());
+ conn.setRequestProperty("Content-Type", "application/octet-stream");
+ conn.setRequestProperty("Content-Length", String.valueOf(size));
+ conn.setDoOutput(true);
+ conn.getOutputStream().write(buffer, 0, size);
+ System.out.println("PUT " + url.toString());
+ String response = new String(inputStreamToString(conn), StandardCharsets.UTF_8);
+ System.out.println(response);
+ }
+ in.close();
+ return chunks;
+ }
+
+ private static void endupload(JsonObject preuploadVideo, JsonObject postVideoMeta, int chunks) throws IOException {
+ String schemeandhost = "https:" + preuploadVideo.get("endpoint").getAsString();
+ String path = preuploadVideo.get("upos_uri").getAsString().replaceFirst("upos:/", "");
+ StringJoiner url = new StringJoiner("&", schemeandhost + path + "?", "");
+ url.add(querypart("output", "json"));
+ url.add(querypart("name", VIDEO_FILE.getName()));
+ url.add(querypart("profile", "ugcfx/bup"));
+ url.add(querypart("uploadId", postVideoMeta.get("upload_id").getAsString()));
+ url.add(querypart("biz_id", preuploadVideo.get("biz_id").getAsString()));
+ JsonArray parts = new JsonArray();
+ for (int i = 1; i <= chunks; i++) {
+ JsonObject part = new JsonObject();
+ part.addProperty("partNumber", i);
+ part.addProperty("eTag", "etag");
+ parts.add(part);
+ }
+ JsonObject body = new JsonObject();
+ body.add("parts", parts);
+ HttpURLConnection conn = conn(url.toString(), "POST");
+ conn.setRequestProperty("X-Upos-Auth", preuploadVideo.get("auth").getAsString());
+ conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
+ conn.setDoOutput(true);
+ conn.getOutputStream().write(body.toString().getBytes(StandardCharsets.UTF_8));
+ System.out.println("POST " + url.toString());
+ String response = new String(inputStreamToString(conn), StandardCharsets.UTF_8);
+ try {
+ JsonObject json = GSON.fromJson(response, JsonObject.class);
+ System.out.println(GSON.toJson(json));
+ } catch (JsonSyntaxException e) {
+ System.out.println(response);
+ throw e;
+ }
+ }
+
+}
+```
diff --git a/docs/creativecenter/videos.md b/docs/creativecenter/videos.md
new file mode 100644
index 0000000..6a800fd
--- /dev/null
+++ b/docs/creativecenter/videos.md
@@ -0,0 +1,555 @@
+# 视频相关杂项
+
+## 获取稿件列表
+
+> https://member.bilibili.com/x2/creative/web/archives/sp
+
+*请求方式: GET*
+
+认证方式: Cookie (SESSDATA)
+
+注: 该接口返回内容大多为无实际意义的空值, 具体内容建议通过常规接口获取
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | --------- | ----------- | ----------------- |
+| pn | num | 页码 | 必要 | 默认为 1 |
+| ps | num | 每页数量 | 必要 | 默认为 10, 留空为 100 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ------------ | ---- |
+| class | null | 作用尚不明确 | |
+| arc_audits | array | 稿件列表 | |
+| page | obj | 分页信息 | |
+| play_type | num | 1 | |
+
+`arc_audits` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| Archive | obj | 稿件信息 | |
+| Videos | null | | |
+| stat | obj | 稿件统计信息 | |
+| state_panel | num | 0 | |
+| parent_tname | str | 空 | |
+| typename | str | 空 | |
+| open_appeal | num | 0 | |
+| activity | null | | |
+| season_add_state | num | 是否可加入合集 | 0: 可以 1: 不可以 |
+
+`Archive` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| aid | num | av 号 | |
+| bvid | str | bv 号 | |
+| mid | num | 0 | |
+| tid | num | 0 | |
+| tp_info | null | | |
+| title | str | 稿件标题 | |
+| author | str | 空 | |
+| cover | str | 封面图 | 位于 bfs 需要自行拼接 URL |
+| reject_reason | str | 空 | |
+| reject_reason_url | str | 空 | |
+| tag | str | 空 | |
+| duration | num | 0 | |
+| copyright | num | 0 | |
+| no_reprint | num | 0 | |
+| ugcpay | num | 0 | |
+| order_id | num | 0 | |
+| order_name | str | 空 | |
+| adorder_id | num | 0 | |
+| adorder_name | str | 空 | |
+| adorder_no | str | 空 | |
+| online_time | num | 0 | |
+| new_adorder_info | null | | |
+| desc | str | 稿件简介 | |
+| mission_id | num | 0 | |
+| mission_name | str | 空 | |
+| attribute | num | 0 | |
+| state | num | 0 | |
+| state_desc | str | 空 | |
+| state_panel | num | 0 | |
+| source | str | 空 | |
+| desc_format_id | num | 0 | |
+| attrs | null | | |
+| porder | null | | |
+| dynamic | str | 空 | |
+| poi_object | null | | |
+| dtime | num | 0 | |
+| ptime | num | 0 | |
+| ctime | num | 0 | |
+| ugcpay_info | null | | |
+| staffs | null | | |
+| vote | null | | |
+| activity | null | | |
+| interactive | num | 0 | |
+| hl | null | | |
+| no_background | num | 0 | |
+| dynamic_video | num | 0 | |
+| no_public | num | 0 | |
+| is_360 | num | 0 | |
+| is_dolby | num | 0 | |
+| lossless_music | num | 0 | |
+| bs_editor | num | 0 | |
+| up_from | num | 0 | |
+| desc_v2 | null | | |
+| dynamic_v2 | null | | |
+| topic_id | num | 0 | |
+| topic_name | str | 空 | |
+| topic_stat | num | 0 | |
+| premiere | num | 0 | |
+| is_ugcpay_v2 | num | 0 | |
+| recreate | null | | |
+| charging_pay | num | 0 | |
+| neutral_mark | str | 空 | |
+| preview | null | | |
+| upower_level | null | | |
+| cover43 | str | 空 | |
+| had_passed | bool | false | |
+| is_staff | num | 0 | |
+| is_pugv | num | 0 | |
+| upower_mode | num | 0 | |
+| upower_unit_price | num | 0 | |
+
+`stat` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| aid | num | av 号 | |
+| view | num | 播放量 | |
+| danmaku | num | 弹幕数 | |
+| reply | num | 评论数 | |
+| favorite | num | 收藏数 | |
+| coin | num | 硬币数 | |
+| share | num | 分享数 | |
+| now_rank | num | 0 | 当前排名 |
+| his_rank | num | 0 | 历史最高排名 |
+| like | num | 点赞数 | |
+| dislike | num | 点踩数 | 恒为 0 |
+| vt | num | 0 | |
+| vv | num | 播放量 | |
+
+**示例:**
+
+```shell
+curl -G "https://member.bilibili.com/x2/creative/web/archives/sp" \
+--data-urlencode "pn=1" \
+--data-urlencode "ps=3" \
+-b "SESSDATA=xxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "class": null,
+ "arc_audits": [
+ {
+ "Archive": {
+ "aid": 1906473802,
+ "bvid": "BV1MU411S7iJ",
+ "mid": 0,
+ "tid": 0,
+ "tp_info": null,
+ "title": "Linux小寄巧: 原地卸载内核然后尝试救活!",
+ "author": "",
+ "cover": "/bfs/archive/b76c0b574862f5a8e8eb133f5f33fcbcd602401a.jpg",
+ "reject_reason": "",
+ "reject_reason_url": "",
+ "tag": "",
+ "duration": 0,
+ "copyright": 0,
+ "no_reprint": 0,
+ "ugcpay": 0,
+ "order_id": 0,
+ "order_name": "",
+ "adorder_id": 0,
+ "adorder_name": "",
+ "adorder_no": "",
+ "online_time": 0,
+ "new_adorder_info": null,
+ "desc": "",
+ "mission_id": 0,
+ "mission_name": "",
+ "attribute": 0,
+ "state": 0,
+ "state_desc": "",
+ "state_panel": 0,
+ "source": "",
+ "desc_format_id": 0,
+ "attrs": null,
+ "porder": null,
+ "dynamic": "",
+ "poi_object": null,
+ "dtime": 0,
+ "ptime": 0,
+ "ctime": 0,
+ "ugcpay_info": null,
+ "staffs": null,
+ "vote": null,
+ "activity": null,
+ "interactive": 0,
+ "hl": null,
+ "no_background": 0,
+ "dynamic_video": 0,
+ "no_public": 0,
+ "is_360": 0,
+ "is_dolby": 0,
+ "lossless_music": 0,
+ "bs_editor": 0,
+ "up_from": 0,
+ "desc_v2": null,
+ "dynamic_v2": null,
+ "topic_id": 0,
+ "topic_name": "",
+ "topic_stat": 0,
+ "premiere": 0,
+ "is_ugcpay_v2": 0,
+ "recreate": null,
+ "political_media": 0,
+ "political_editable": 0,
+ "charging_pay": 0,
+ "neutral_mark": "",
+ "preview": null,
+ "upower_level": null,
+ "cover43": "",
+ "had_passed": false,
+ "is_staff": 0,
+ "is_pugv": 0,
+ "upower_mode": 0,
+ "upower_unit_price": 0
+ },
+ "Videos": null,
+ "stat": {
+ "aid": 1906473802,
+ "view": 4036,
+ "danmaku": 8,
+ "reply": 56,
+ "favorite": 53,
+ "coin": 12,
+ "share": 8,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 99,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 4036
+ },
+ "state_panel": 0,
+ "parent_tname": "",
+ "typename": "",
+ "open_appeal": 0,
+ "activity": null,
+ "season_add_state": 0
+ },
+ {
+ "Archive": {
+ "aid": 1956170305,
+ "bvid": "BV1Ay411i7Ph",
+ "mid": 0,
+ "tid": 0,
+ "tp_info": null,
+ "title": "十多年前的电脑运行Debian12的启动过程",
+ "author": "",
+ "cover": "/bfs/archive/0bff6624fdfcbf3326fba1837fef093d455c846a.jpg",
+ "reject_reason": "",
+ "reject_reason_url": "",
+ "tag": "",
+ "duration": 0,
+ "copyright": 0,
+ "no_reprint": 0,
+ "ugcpay": 0,
+ "order_id": 0,
+ "order_name": "",
+ "adorder_id": 0,
+ "adorder_name": "",
+ "adorder_no": "",
+ "online_time": 0,
+ "new_adorder_info": null,
+ "desc": "",
+ "mission_id": 0,
+ "mission_name": "",
+ "attribute": 0,
+ "state": 0,
+ "state_desc": "",
+ "state_panel": 0,
+ "source": "",
+ "desc_format_id": 0,
+ "attrs": null,
+ "porder": null,
+ "dynamic": "",
+ "poi_object": null,
+ "dtime": 0,
+ "ptime": 0,
+ "ctime": 0,
+ "ugcpay_info": null,
+ "staffs": null,
+ "vote": null,
+ "activity": null,
+ "interactive": 0,
+ "hl": null,
+ "no_background": 0,
+ "dynamic_video": 0,
+ "no_public": 0,
+ "is_360": 0,
+ "is_dolby": 0,
+ "lossless_music": 0,
+ "bs_editor": 0,
+ "up_from": 0,
+ "desc_v2": null,
+ "dynamic_v2": null,
+ "topic_id": 0,
+ "topic_name": "",
+ "topic_stat": 0,
+ "premiere": 0,
+ "is_ugcpay_v2": 0,
+ "recreate": null,
+ "political_media": 0,
+ "political_editable": 0,
+ "charging_pay": 0,
+ "neutral_mark": "",
+ "preview": null,
+ "upower_level": null,
+ "cover43": "",
+ "had_passed": false,
+ "is_staff": 0,
+ "is_pugv": 0,
+ "upower_mode": 0,
+ "upower_unit_price": 0
+ },
+ "Videos": null,
+ "stat": {
+ "aid": 1956170305,
+ "view": 2747,
+ "danmaku": 13,
+ "reply": 37,
+ "favorite": 11,
+ "coin": 14,
+ "share": 4,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 42,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 2747
+ },
+ "state_panel": 0,
+ "parent_tname": "",
+ "typename": "",
+ "open_appeal": 0,
+ "activity": null,
+ "season_add_state": 0
+ },
+ {
+ "Archive": {
+ "aid": 910326709,
+ "bvid": "BV1GM4y1a7Vn",
+ "mid": 0,
+ "tid": 0,
+ "tp_info": null,
+ "title": "Minecraft终末之诗,但是谷歌翻译20遍",
+ "author": "",
+ "cover": "/bfs/archive/09b7f2542f3e66973ec7de1a3c806cdd45b95426.jpg",
+ "reject_reason": "",
+ "reject_reason_url": "",
+ "tag": "",
+ "duration": 0,
+ "copyright": 0,
+ "no_reprint": 0,
+ "ugcpay": 0,
+ "order_id": 0,
+ "order_name": "",
+ "adorder_id": 0,
+ "adorder_name": "",
+ "adorder_no": "",
+ "online_time": 0,
+ "new_adorder_info": null,
+ "desc": "原内容来源:Minecraft Wiki\n使用的工具:Google Translate\n视频仅供娱乐,请勿当真",
+ "mission_id": 0,
+ "mission_name": "",
+ "attribute": 0,
+ "state": 0,
+ "state_desc": "",
+ "state_panel": 0,
+ "source": "",
+ "desc_format_id": 0,
+ "attrs": null,
+ "porder": null,
+ "dynamic": "",
+ "poi_object": null,
+ "dtime": 0,
+ "ptime": 0,
+ "ctime": 0,
+ "ugcpay_info": null,
+ "staffs": null,
+ "vote": null,
+ "activity": null,
+ "interactive": 0,
+ "hl": null,
+ "no_background": 0,
+ "dynamic_video": 0,
+ "no_public": 0,
+ "is_360": 0,
+ "is_dolby": 0,
+ "lossless_music": 0,
+ "bs_editor": 0,
+ "up_from": 0,
+ "desc_v2": null,
+ "dynamic_v2": null,
+ "topic_id": 0,
+ "topic_name": "",
+ "topic_stat": 0,
+ "premiere": 0,
+ "is_ugcpay_v2": 0,
+ "recreate": null,
+ "political_media": 0,
+ "political_editable": 0,
+ "charging_pay": 0,
+ "neutral_mark": "",
+ "preview": null,
+ "upower_level": null,
+ "cover43": "",
+ "had_passed": false,
+ "is_staff": 0,
+ "is_pugv": 0,
+ "upower_mode": 0,
+ "upower_unit_price": 0
+ },
+ "Videos": null,
+ "stat": {
+ "aid": 910326709,
+ "view": 533,
+ "danmaku": 6,
+ "reply": 4,
+ "favorite": 15,
+ "coin": 13,
+ "share": 4,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 29,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 533
+ },
+ "state_panel": 0,
+ "parent_tname": "",
+ "typename": "",
+ "open_appeal": 0,
+ "activity": null,
+ "season_add_state": 0
+ }
+ ],
+ "page": {
+ "pn": 1,
+ "ps": 3,
+ "count": 32
+ },
+ "play_type": 1
+ }
+}
+```
+
+
+
+## 视频基础信息
+
+> https://member.bilibili.com/x/web/archive/videos
+
+*请求方式: GET*
+
+认证方式: Cookie (SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---- | ---- | ---- | ---- | ---- |
+| aid | num | av 号 | 必要 | |
+
+**JSON回复:**
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| archive | obj | 稿件信息 | |
+| videos | array | 视频信息 | |
+
+`archive` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| aid | num | av 号 | |
+| bvid | str | bvid | |
+| title | str | 标题 | |
+
+`videos` 数组:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | -- | --- |
+| cid | num | 分P cid | |
+| index | num | 分P 序号 | |
+| title | str | 分P 标题 | |
+| duration | num | 0 | |
+
+**示例:**
+
+```shell
+curl -G "https://member.bilibili.com/x/web/archive/videos" \
+--data-urlencode "aid=1906473802" \
+-b "SESSDATA=xxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "archive": {
+ "aid": 1906473802,
+ "bvid": "BV1MU411S7iJ",
+ "title": "Linux小寄巧: 原地卸载内核然后尝试救活!"
+ },
+ "videos": [
+ {
+ "cid": 1625992822,
+ "index": 1,
+ "title": "Linux小寄巧: 原地卸载内核然后尝试救活!",
+ "duration": 0
+ }
+ ]
+ }
+}
+```
+
+
diff --git a/docs/customerservice/msg.md b/docs/customerservice/msg.md
new file mode 100644
index 0000000..06b5645
--- /dev/null
+++ b/docs/customerservice/msg.md
@@ -0,0 +1,115 @@
+# 客服消息
+
+## 心跳
+
+> https://customerservice.bilibili.com/x/custom/session_svr/v1/heart_beat
+
+*请求方式: GET*
+
+认证方式: Cookie (SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| shop_id | num | 0 | 非必要 | |
+| shop_father_id | num | 0 | 非必要 | |
+| build | num | 客户端版本 | 非必要 | web: 0 |
+| mobi_app | str | 客户端类型 | 非必要 | 如 `web` |
+
+**JSON回复:**
+
+|字段|类型|内容|备注|
+|-|-|-|-|
+|code|num|返回值|0: 成功|
+|msg|str|`ok`|失败时不存在|
+|message|str|错误信息|成功时为 `ok`|
+|ttl|num|1||
+
+**示例:**
+
+```shell
+curl -G "https://customerservice.bilibili.com/x/custom/session_svr/v1/heart_beat" \
+-b "SESSDATA=xxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "ok",
+ "message": "ok",
+ "ttl": 1
+}
+```
+
+
+
+## 上传文件
+
+> https://customerservice.bilibili.com/x/custom/msg_svr/v1/upload
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+注: 上传的文件 15 分钟内有效, 过期后下载会返回 HTTP 403
+
+**正文参数 (multipart/form-data):**
+
+|参数名|类型|内容|必要性|备注|
+|-|-|-|-|-|
+|file|file|文件内容|必要||
+|filename|str|文件名|必要||
+|mid|num|用户 mid|必要||
+|csrf|str|CSRF Token (位于 Cookie 中 bili_jct)|必要||
+
+**JSON回复:**
+
+根对象:
+
+|字段|类型|内容|备注|
+|-|-|-|-|
+|code|num|返回值|0: 成功 1000011: 仅支持上传300M内的文件 1200201: 获取用户信息失败|
+|message|str|错误信息|成功时为 `ok`|
+|ttl|num|1||
+|data|obj|上传结果||
+
+`data` 对象:
+
+|字段|类型|内容|备注|
+|-|-|-|-|
+|key|str|文件名||
+|url|str|文件 URL|注意转义|
+
+**示例:**
+
+上传文件 `./headers/xx-out.xcf`, 文件名 `ihavenoname`
+
+```shell
+curl -X POST "https://customerservice.bilibili.com/x/custom/msg_svr/v1/upload" \
+-F 'file=@./headers/xx-out.xcf' \
+-F 'filename=ihavenoname' \
+-F 'mid=1070915568' \
+-F 'csrf=xxx' \
+-b 'SESSDATA=xxx; bili_jct=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "ok",
+ "ttl": 1,
+ "data": {
+ "key": "1a0c88d240852155a111e4cc6893be39.xcf",
+ "url": "https://jssz-boss.hdslb.com/customer-video-upload/1a0c88d240852155a111e4cc6893be39.xcf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=f9TxwsagojnE1DWM%2F20240803%2Fjssz%2Fs3%2Faws4_request&X-Amz-Date=20240803T115447Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=cef962c8e503c6ff564fd485bdef1079df1b4a7e38f4fbd9c21a5667207f406e"
+ }
+}
+```
+
+
diff --git a/danmaku/action.md b/docs/danmaku/action.md
similarity index 71%
rename from danmaku/action.md
rename to docs/danmaku/action.md
index e1d4757..95e34c4 100644
--- a/danmaku/action.md
+++ b/docs/danmaku/action.md
@@ -1,21 +1,8 @@
# 弹幕操作
-- [发送视频弹幕](#发送视频弹幕)
-- [发送互动弹幕](#发送互动弹幕)
-- [撤回弹幕](#撤回弹幕)
-- [购买高级弹幕发送权限](#购买高级弹幕发送权限)
-- [检测高级弹幕发送权限](#检测高级弹幕发送权限)
-- [查询弹幕点赞数](#查询弹幕点赞数)
-- [点赞弹幕](#点赞弹幕)
-- [举报弹幕](#举报弹幕)
-- [保护&删除弹幕](#保护&删除弹幕)
-- [修改字幕池](#修改字幕池)
-
----
-
## 发送视频弹幕
-> http://api.bilibili.com/x/v2/dm/post
+> https://api.bilibili.com/x/v2/dm/post
*请求方式:POST*
@@ -25,23 +12,34 @@
`mode=6`的逆向弹幕与`mode=8`的代码弹幕不可发送
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --- | --- | --- | --- | --- |
+| web_location | str | 普通视频: 1315873 | 不必要 | |
+| csrf | str | CSRF Token (即 Cookie 中 bili_jct) | Cookie 方式必要 | |
+| w_rid | str | Wbi 签名 | 必要 | 参见 [Wbi 签名](../misc/sign/wbi.md) |
+| wts | str | UNIX 秒级时间戳 | 必要 | 参见 [Wbi 签名](../misc/sign/wbi.md) |
+
**正文参数( application/x-www-form-urlencoded ):**
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ |
-| access_key | str | APP登录Token | APP方式必要 | |
-| type | num | 弹幕类选择 | 必要 | 1:视频弹幕 |
-| oid | num | 视频cid | 必要 | |
-| msg | str | 弹幕内容 | 必要 | 长度小于100字符 |
-| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
-| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
-| progress | num | 弹幕出现在视频内的时间 | 非必要 | 单位为毫秒 默认为0 |
-| color | num | 弹幕颜色设置 | 非必要 | 十进制RGB888值 默认为16777215(#FFFFFF)白色 |
-| fontsize | num | 弹幕字号设置 | 非必要 | 默认为25 极小:12 超小:16 小:18 标准:25 大:36 超大:45 极大:64 |
-| pool | num | 弹幕池选择 | 非必要 | 0:普通池 1:字幕池 2:特殊池(代码/BAS弹幕) 默认为0 |
-| mode | num | 弹幕类型选择 | 必要 | 1:普通弹幕 4:底部弹幕 5:顶部弹幕 7:高级弹幕 9:BAS弹幕(`pool`必须为2) |
-| rnd | num | 当前时间戳*1000000 | 非必要 | **若无此项,则发送弹幕冷却时间限制为90s** 若有此项,则发送弹幕冷却时间限制为5s |
-| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------- | ---- | ------------------------- | --------------- | ------------------------------------------------------------ |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| type | num | 弹幕类选择 | 必要 | 1:视频弹幕 2:漫画弹幕 |
+| oid | num | 视频 cid | 必要 | |
+| msg | str | 弹幕内容 | 必要 | 长度小于 100 字符 |
+| bvid | str | 稿件 bvid | 必要(可选) | avid 与 bvid 任选一个 |
+| aid | num | 稿件 avid | 必要(可选) | avid 与 bvid 任选一个 |
+| progress | num | 弹幕出现在视频内的时间 | 非必要 | 单位为毫秒 默认为0 |
+| color | num | 弹幕颜色设置 | 非必要 | 十进制 RGB888 值 如`16777215`为 #FFFFFF 即白色 |
+| fontsize | num | 弹幕字号设置 | 非必要 | 默认为 25 极小:12 超小:16 小:18 标准:25 大:36 超大:45 极大:64 |
+| pool | num | 弹幕池选择 | 非必要 | 0:普通池 1:字幕池 2:特殊池(代码/BAS弹幕) 默认为0 |
+| mode | num | 弹幕类型选择 | 必要 | 1:普通弹幕 4:底部弹幕 5:顶部弹幕 7:高级弹幕 9:BAS弹幕(`pool`必须为2) |
+| rnd | num | 当前时间戳*1000000 | 非必要 | **若无此项,则发送弹幕冷却时间限制为90s** 若有此项,则发送弹幕冷却时间限制为5s |
+| colorful | num | 彩色弹幕 | 非必要 | 60001:专属渐变彩色(需要会员) |
+| checkbox_type | num | 是否带 UP 身份标识 | 非必要 | 0:普通 4:带有标识 |
+| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | |
**json回复:**
@@ -49,38 +47,48 @@
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -102:账号被封停 -111:csrf校验失败 -400:请求错误 -404:无此项 36700:系统升级中 36701:弹幕包含被禁止的内容 36702:弹幕长度大于100 36703:发送频率过快 36704:禁止向未审核的视频发送弹幕 36705:您的等级不足,不能发送弹幕 36706:您的等级不足,不能发送顶端弹幕 36707:您的等级不足,不能发送底端弹幕 36708:您的等级不足,不能发送彩色弹幕 36709:您的等级不足,不能发送高级弹幕 36710:您的权限不足,不能发送这种样式的弹幕 36711:该视频禁止发送弹幕 36712:level 1用户发送弹幕的最大长度为20 36713:稿件未付费 36714:弹幕发送时间不合法 36715:当日操作数量超过上限 |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -102:账号被封停 -111:csrf校验失败 -400:请求错误 -404:无此项 36700:系统升级中 36701:弹幕包含被禁止的内容 36702:弹幕长度大于100 36703:发送频率过快 36704:禁止向未审核的视频发送弹幕 36705:您的等级不足,不能发送弹幕 36706:您的等级不足,不能发送顶端弹幕 36707:您的等级不足,不能发送底端弹幕 36708:您的等级不足,不能发送彩色弹幕 36709:您的等级不足,不能发送高级弹幕 36710:您的权限不足,不能发送这种样式的弹幕 36711:该视频禁止发送弹幕 36712:level 1用户发送弹幕的最大长度为20 36713:稿件未付费 36714:弹幕发送时间不合法 36715:当日操作数量超过上限 36718:目前您不是大会员,无法使用会员权益 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ---- | -------- | ------------ |
-| action | str | 空 | 作用尚不明确 |
-| dmid | num | 弹幕dmid | |
-| dmid_str | str | 弹幕dmid | 字串形式 |
-| visible | bool | true | 作用尚不明确 |
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---------- | ------------------ | -------------------------------- |
+| action | str | (?) | |
+| animation | str | 弹幕样式 Json? | |
+| colorful_src | str 或 obj | 渐变彩色样式信息? | 当请求参数`colorful=60001`时有效 |
+| dm_content | str | (?) | |
+| dmid | num | 弹幕 dmid | |
+| dmid_str | str | 弹幕 dmid | 字串形式 |
+| visible | bool | (?) | |
+
+`data`中的`colorful_src`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------------- | ---- |
+| type | num | 60001 | |
+| src | str | 渐变色样式 Json? | |
**示例:**
-为视频`av2`/`BV1xx411c7mD`(cid为`62131`)的5000ms位置发送一条弹幕`前来考古`(颜色为#FFFFFF,字号25,普通弹幕,游动弹幕)
+为视频`av2`/`BV1xx411c7mD`(cid为`62131`)的 5000ms 位置发送一条弹幕`前来考古`(颜色为 #FFFFFF,字号 25,普通弹幕,游动弹幕)
```shell
-curl 'http://api.bilibili.com/x/v2/dm/post' \
---data-urlencode 'type=1' \
---data-urlencode 'oid=62131' \
---data-urlencode 'msg=前来考古' \
---data-urlencode 'aid=2' \
---data-urlencode 'progress=5000' \
---data-urlencode 'color=16777215' \
---data-urlencode 'fontsize=25' \
---data-urlencode 'pool=0' \
---data-urlencode 'mode=1' \
---data-urlencode 'rnd=3456789987654321' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
+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'
```
@@ -104,7 +112,7 @@ curl 'http://api.bilibili.com/x/v2/dm/post' \
## 发送互动弹幕
-> http://api.bilibili.com/x/v2/dm/command/post
+> https://api.bilibili.com/x/v2/dm/command/post
*请求方式:POST*
@@ -211,7 +219,7 @@ curl 'http://api.bilibili.com/x/v2/dm/post' \
为视频`av201947622`(cid为`230709860`)的5000ms位置发送一条UP主头像弹幕`test`
```shell
-curl 'http://api.bilibili.com/x/v2/dm/command/post' \
+curl 'https://api.bilibili.com/x/v2/dm/command/post' \
--data-urlencode 'type=1' \
--data-urlencode 'aid=201947622' \
--data-urlencode 'cid=230709860' \
@@ -248,7 +256,7 @@ curl 'http://api.bilibili.com/x/v2/dm/command/post' \
为视频`av201947622`(cid为`230709860`)的5000ms位置发送一条发送关联视频弹幕`测试1234`关联视频为`BV1kz4y1X7XP`
```shell
-curl 'http://api.bilibili.com/x/v2/dm/command/post' \
+curl 'https://api.bilibili.com/x/v2/dm/command/post' \
--data-urlencode 'type=2' \
--data-urlencode 'aid=201947622' \
--data-urlencode 'cid=230709860' \
@@ -287,7 +295,7 @@ curl 'http://api.bilibili.com/x/v2/dm/command/post' \
为视频`av201947622`(cid为`230709860`)的5000ms位置发送视频内嵌引导关注按钮,X坐标为118,Y坐标为82,持续时间为5000ms
```shell
-curl 'http://api.bilibili.com/x/v2/dm/command/post' \
+curl 'https://api.bilibili.com/x/v2/dm/command/post' \
--data-urlencode 'type=5' \
--data-urlencode 'aid=201947622' \
--data-urlencode 'cid=230709860' \
@@ -321,10 +329,88 @@ curl 'http://api.bilibili.com/x/v2/dm/command/post' \
+## 发送打分弹幕
+
+> https://api.bilibili.com/x/v2/dm/command/grade/post
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ---- | ------ | ---- |
+| aid | num | 稿件 aid | 必要 | |
+| cid | num | 分 P cid | 必要 | |
+| progress | num | 播放进度 | 必要 | 单位为毫秒 |
+| grade_id | num | 打分 id | 必要 | |
+| grade_score | num | 分数 | 偶数, 最大 10 |
+| polaris_app_id | num | 100 | 不必要 |
+| polaris_platfrom | num | 5 | 不必要 | |
+| spmid | str | 333.788.0.0 | 不必要 | |
+| from_spmid | str | 来源 spmid | 不必要 | |
+| csrf | str | CSRF Token (即 Cookie 中的 bili_jct) | 必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| code | num | 返回值 | 0: 成功 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| dmid | num | 弹幕dmid | |
+| dmid_str | str | 弹幕dmid | 字串形式 |
+| visible | bool | 是否可见 | |
+| action | str | 动作 | `"grade:"` + (请求的分数 / 2) |
+
+**示例:**
+
+```shell
+curl -X POST 'https://api.bilibili.com/x/v2/dm/command/grade/post' \
+--data-urlencode 'aid=112861976201494' \
+--data-urlencode 'cid=500001629877726' \
+--data-urlencode 'progress=32000' \
+--data-urlencode 'grade_id=3651137' \
+--data-urlencode 'grade_score=10' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "dmid": 1651556419721443584,
+ "dmidStr": "1651556419721443584",
+ "visible": true,
+ "action": "grade:5"
+ }
+}
+```
+
+
## 撤回弹幕
-> http://api.bilibili.com/x/dm/recall
+> https://api.bilibili.com/x/dm/recall
*请求方式:POST*
@@ -356,7 +442,7 @@ curl 'http://api.bilibili.com/x/v2/dm/command/post' \
撤回`cid=168901231`下的弹幕`32310301474947077`的弹幕
```shell
-curl 'http://api.bilibili.com/x/dm/recall' \
+curl 'https://api.bilibili.com/x/dm/recall' \
--data-urlencode 'cid=168901231' \
--data-urlencode 'dmid=32310301474947077' \
--data-urlencode 'csrf=xxx' \
@@ -377,7 +463,7 @@ curl 'http://api.bilibili.com/x/dm/recall' \
## 购买高级弹幕发送权限
-> http://api.bilibili.com/x/dm/adv/buy
+> https://api.bilibili.com/x/dm/adv/buy
*请求方式:POST*
@@ -409,7 +495,7 @@ curl 'http://api.bilibili.com/x/dm/recall' \
购买视频cid为`168901231`的高级弹幕发送权限
```shell
-curl 'http://api.bilibili.com/x/dm/adv/buy' \
+curl 'https://api.bilibili.com/x/dm/adv/buy' \
--data-urlencode 'cid=168901231' \
--data-urlencode 'mode=sp' \
--data-urlencode 'csrf=xxx' \
@@ -430,7 +516,7 @@ curl 'http://api.bilibili.com/x/dm/adv/buy' \
## 检测高级弹幕发送权限
-> http://api.bilibili.com/x/dm/adv/state
+> https://api.bilibili.com/x/dm/adv/state
*请求方式:GET*
@@ -471,7 +557,7 @@ curl 'http://api.bilibili.com/x/dm/adv/buy' \
当前状态为已购买且同意
```shell
-curl -G 'http://api.bilibili.com/x/dm/adv/state' \
+curl -G 'https://api.bilibili.com/x/dm/adv/state' \
--data-urlencode 'cid=168901231' \
--data-urlencode 'mode=sp' \
-b 'SESSDATA=xxx'
@@ -496,129 +582,49 @@ curl -G 'http://api.bilibili.com/x/dm/adv/state' \
-## 查询弹幕点赞数
-
-> http://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:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ---- | ---------------- | --------------------------------- |
-| {弹幕id} | obj | 弹幕id对应的信息 | id分别对应请求参数中的`ids`,下同 |
-| …… | obj | 弹幕id对应的信息 | |
-
-`{弹幕id}`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------- | ---- | -------- | ------------------------------------------------------------ |
-| likes | num | 点赞数 | |
-| user_like | num | 是否点赞 | 0:未点赞 1:已点赞 需要登录(Cookie或APP) 未登录恒为0 |
-| id_str | str | 弹幕dmid | |
-
-**示例**
-
-查询`cid=236871317`下的弹幕`35600074482384899`、`38880975220375559`、`39052528418553863`点赞数
-
-```shell
-curl -G 'http://api.bilibili.com/x/v2/dm/thumbup/stats' \
---data-urlencode 'oid=236871317' \
---data-urlencode 'ids=39019145405661191,38880975220375559,39052528418553863' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```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"
- }
- }
-}
-```
-
-
-
## 点赞弹幕
-> http://api.bilibili.com/x/v2/dm/thumbup/add
+> https://api.bilibili.com/x/v2/dm/thumbup/add
*请求方式:POST*
认证方式:Cookie(SESSDATA)或APP
+查询指定弹幕点赞状态参阅文档 [弹幕点赞查询](thumbup.md)
+
**正文参数( application/x-www-form-urlencoded ):**
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------------------ | -------------- | ------------------------ |
-| access_key | str | APP登录Token | APP方式必要 | |
-| dmid | num | 弹幕dmid | 必要 | |
-| oid | num | 视频cid | 必要 | |
-| op | num | 操作 | 必要 | 1:点赞 2:取消点赞 |
-| platform | str | 平台 | 非必要 | |
-| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------- | --------------- | ------------------------------------------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| dmid | num | 目标弹幕 dmid | 必要 | |
+| oid | num | 目标弹幕所在视频 cid | 必要 | |
+| op | num | 操作 | 必要 | 1:点赞 2:取消点赞 |
+| platform | str | 平台标识 | 非必要 | web_player:web 播放器 android:安卓端 |
+| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | |
**json回复:**
根对象:
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf 校验失败 -400:请求错误 65004:取消赞失败 未点赞过 65006:已赞过 |
-| message | str | 错误信息 | 默认为0 |
-| tll | num | 1 | |
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|------------------------------------------------------------------------------------------------------------------------------------|
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf 校验失败 -400:请求错误 36106:该弹幕已被删除 36805:该视频禁止点赞弹幕 65004:取消赞失败 未点赞过 65006:已赞过 |
+| message | str | 错误信息 | 默认为0 |
+| tll | num | 1 | |
**示例**
为`cid=145928946`下的弹幕`35600074482384899`点赞
```shell
-curl 'http://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'
+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'
```
@@ -636,7 +642,7 @@ curl 'http://api.bilibili.com/x/v2/dm/thumbup/add' \
## 举报弹幕
-> http://api.bilibili.com/x/dm/report/add
+> https://api.bilibili.com/x/dm/report/add
*请求方式:POST*
@@ -685,7 +691,7 @@ curl 'http://api.bilibili.com/x/v2/dm/thumbup/add' \
举报`cid=145928946`下的弹幕`35600074482384899`,理由是`引战`
```shell
-curl 'http://api.bilibili.com/x/dm/report/add' \
+curl 'https://api.bilibili.com/x/dm/report/add' \
--data-urlencode 'cid=145928946' \
--data-urlencode 'dmid=35600074482384899' \
--data-urlencode 'reason=7' \
@@ -707,7 +713,7 @@ curl 'http://api.bilibili.com/x/dm/report/add' \
## 保护&删除弹幕
-> http://api.bilibili.com/x/v2/dm/edit/state
+> https://api.bilibili.com/x/v2/dm/edit/state
*请求方式:POST*
@@ -741,7 +747,7 @@ curl 'http://api.bilibili.com/x/dm/report/add' \
删除`cid=145928946`下的弹幕`35600074482384899`、`39067304918515717`、`39082777041174531`
```shell
-curl 'http://api.bilibili.com/x/v2/dm/edit/state' \
+curl 'https://api.bilibili.com/x/v2/dm/edit/state' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=145928946' \
--data-urlencode 'dmids=35600074482384899,39067304918515717,39082777041174531' \
@@ -765,7 +771,7 @@ curl 'http://api.bilibili.com/x/v2/dm/edit/state' \
## 修改字幕池
-> http://api.bilibili.com/x/v2/dm/edit/pool
+> https://api.bilibili.com/x/v2/dm/edit/pool
*请求方式:POST*
@@ -799,7 +805,7 @@ curl 'http://api.bilibili.com/x/v2/dm/edit/state' \
将`cid=145928946`下的弹幕`35600074482384899`、`39067304918515717`、`39082777041174531`移入字幕池
```shell
-curl 'http://api.bilibili.com/x/v2/dm/edit/state' \
+curl 'https://api.bilibili.com/x/v2/dm/edit/state' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=145928946' \
--data-urlencode 'pool=1' \
diff --git a/danmaku/buzzword.md b/docs/danmaku/buzzword.md
similarity index 98%
rename from danmaku/buzzword.md
rename to docs/danmaku/buzzword.md
index 98338c9..5f65356 100644
--- a/danmaku/buzzword.md
+++ b/docs/danmaku/buzzword.md
@@ -6,14 +6,9 @@
可使用页面 https://www.bilibili.com/blackboard/activity-WroMZNunfa.html?id=1 查看名词解释详情
-- [拉取名词解释列表](#拉取名词解释列表)
-- [查询名词解释详情](#查询名词解释详情)
-
----
-
## 拉取名词解释列表
-> http://api.bilibili.com/x/v2/dm/buzzword/list
+> https://api.bilibili.com/x/v2/dm/buzzword/list
*请求方式:GET*
@@ -91,7 +86,7 @@
拉取对应`哔哩哔哩热词图鉴`的名词列表,以20项为一页拉取第1页
```bash
-curl -G 'http://api.bilibili.com/x/v2/dm/buzzword/list' \
+curl -G 'https://api.bilibili.com/x/v2/dm/buzzword/list' \
--data-urlencode 'type_id=4' \
--data-urlencode 'ps=10' \
--data-urlencode 'pn=1'
@@ -241,7 +236,7 @@ curl -G 'http://api.bilibili.com/x/v2/dm/buzzword/list' \
## 查询名词解释详情
-> http://api.bilibili.com/x/v2/dm/buzzword/detail
+> https://api.bilibili.com/x/v2/dm/buzzword/detail
*请求方式:GET*
@@ -419,7 +414,7 @@ curl -G 'http://api.bilibili.com/x/v2/dm/buzzword/list' \
查询名词`kksk`的详情
```bash
-curl -G 'http://api.bilibili.com/x/v2/dm/buzzword/detail' \
+curl -G 'https://api.bilibili.com/x/v2/dm/buzzword/detail' \
--data-urlencode 'id=1'
```
diff --git a/danmaku/config.md b/docs/danmaku/config.md
similarity index 96%
rename from danmaku/config.md
rename to docs/danmaku/config.md
index 4e5dbc3..9cd760f 100644
--- a/danmaku/config.md
+++ b/docs/danmaku/config.md
@@ -1,12 +1,8 @@
# 弹幕个人配置修改
-- [修改弹幕个人配置(web端)](#修改弹幕个人配置(web端))
-
----
-
## 修改弹幕个人配置(web端)
-> http://api.bilibili.com/x/v2/dm/web/config
+> https://api.bilibili.com/x/v2/dm/web/config
*请求方式:POST*
@@ -55,7 +51,7 @@
关闭弹幕
```shell
-curl 'http://api.bilibili.com/x/v2/dm/web/config' \
+curl 'https://api.bilibili.com/x/v2/dm/web/config' \
--data-urlencode 'dm_switch=false' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
diff --git a/docs/danmaku/danmaku_proto.md b/docs/danmaku/danmaku_proto.md
new file mode 100644
index 0000000..b21bd32
--- /dev/null
+++ b/docs/danmaku/danmaku_proto.md
@@ -0,0 +1,115 @@
+# protobuf弹幕
+
+2020年5月23日,哔哩哔哩网页端及移动端启用了新的默认弹幕 API,网页端弹幕显示的上限变为原弹幕池上限的两倍。
+
+新的 API 是以 6min 为一个单位加载,即每次加载 6min 内的弹幕
+
+## 获取实时弹幕
+
+> https://api.bilibili.com/x/v2/dm/web/seg.so (web端)
+>
+> https://api.bilibili.com/x/v2/dm/wbi/web/seg.so (web 端新接口,需要 wbi 认证)
+>
+> https://api.bilibili.com/x/v2/dm/list/seg.so (APP端)
+>
+> https://i0.hdslb.com/bfs/dm/{data}.bin (BAS/代码弹幕专包)
+
+*请求方式:GET*
+*认证方式:半匿名(部分视频在无 Cookie: SESSDATA 时只返回部分弹幕)*
+
+此接口与漫画弹幕相同
+
+只能返回普通弹幕(`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:视频弹幕 2:漫画弹幕 |
+| oid | num | 视频 cid | 必要 | |
+| pid | num | 稿件 avid | 非必要 | |
+| segment_index | num | 分包 | 必要 | 6min 一包 |
+| pull_mode | num | (?) | 非必要 | |
+| ps | num | (?) | 非必要 | |
+| pe | num | (?) | 非必要 | |
+
+**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:普通弹幕 4:底部弹幕 5:顶部弹幕 6:逆向弹幕 7:高级弹幕 8:代码弹幕 9:BAS 弹幕(仅限于特殊弹幕专包) |
+| fontsize | int32 | 弹幕字号 | 18:小 25:标准 36:大 |
+| color | uint32 | 弹幕颜色 | 十进制 RGB888 值 |
+| midHash | string | 发送者 mid 的 HASH | 用于屏蔽用户和查看用户发送的所有弹幕,也可反查用户id |
+| content | string | 弹幕内容 | utf-8编码 |
+| ctime | int64 | 弹幕发送时间 | 时间戳 |
+| weight | int32 | 权重 | 用于智能屏蔽,根据弹幕语义及长度通过AI识别得出 范围:[0-10] 值越大权重越高 |
+| action | string | 动作? | |
+| pool | int32 | 弹幕池 | 0:普通池 1:字幕池 2:特殊池(代码/BAS弹幕) |
+| idStr | string | 弹幕 dmid | 字串形式 唯一 可用于操作参数 |
+| attr | int32 | 弹幕属性位 | bit0:保护 bit1:直播 bit2:高赞 |
+| animation | string | 动画? | |
+
+**示例:**
+
+获取视频`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
+```
+
diff --git a/danmaku/danmaku_view_proto.md b/docs/danmaku/danmaku_view_proto.md
similarity index 92%
rename from danmaku/danmaku_view_proto.md
rename to docs/danmaku/danmaku_view_proto.md
index 03624f0..4c761e3 100644
--- a/danmaku/danmaku_view_proto.md
+++ b/docs/danmaku/danmaku_view_proto.md
@@ -4,22 +4,12 @@
详情见:
-[【客户端更新】6.10版本更新!UP主支持发布关联视频弹幕]( https://www.bilibili.com/read/cv7728299 )
-
- [引导关注卡片](https://www.bilibili.com/blackboard/activity-c8a0iDRQy.html )
-
----
-
-- [获取弹幕个人配置与互动弹幕及BAS(代码)弹幕专包(web端)](#获取弹幕个人配置与互动弹幕及BAS(代码)弹幕专包(web端))
-- [实例](#实例)
- - [获取互动弹幕](#获取互动弹幕)
- - [获取BAS(代码)弹幕专包](#获取BAS(代码)弹幕专包)
-
----
+- [【客户端更新】6.10版本更新!UP主支持发布关联视频弹幕]( https://www.bilibili.com/read/cv7728299 )
+- [引导关注卡片](https://www.bilibili.com/blackboard/activity-c8a0iDRQy.html )
## 获取弹幕个人配置与互动弹幕及BAS(代码)弹幕专包(web端)
-> http://api.bilibili.com/x/v2/dm/web/view
+> https://api.bilibili.com/x/v2/dm/web/view
*请求方式:GET*
@@ -105,7 +95,7 @@
| posX | num | X坐标 | 区间:[118-549] |
| posY | num | Y坐标 | 区间:[82-293] |
| icon | str | 按钮图片url | 不应该是关注按钮吗,但这个是圆形的 |
-| type | num | 关注按钮类型 | 0:仅关注 1:仅三联 2:关注+三联 |
+| type | num | 关注按钮类型 | 0:仅关注 1:仅三连 2:关注+三连 |
消息`dmSetting`:
@@ -209,7 +199,7 @@ message DmWebViewReply {
获取视频`av797164471(cid=236871317)`的弹幕元数据
```shell
-curl -G 'http://api.bilibili.com/x/v2/dm/web/view' \
+curl -G 'https://api.bilibili.com/x/v2/dm/web/view' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=236871317' \
--data-urlencode 'pid=797164471' \
@@ -231,7 +221,7 @@ import requests
AVID = 797164471
CID = 236871317
-url = f'http://api.bilibili.com/x/v2/dm/web/view?type=1&oid={CID}&pid={AVID}'
+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()
@@ -261,7 +251,7 @@ for i in target.commandDms:
---弹幕指令=#UP#
---弹幕文字=这个视频没有恰饭!别紧张!
---弹幕出现时间=157818
----弹幕负载数据={"icon":"http://i1.hdslb.com/bfs/face/559abe31f561f71f3106d8ee7b2065cac50c1235.jpg"}
+---弹幕负载数据={"icon":"https://i1.hdslb.com/bfs/face/559abe31f561f71f3106d8ee7b2065cac50c1235.jpg"}
---弹幕ID(字串)=38469676112019463
```
@@ -277,7 +267,7 @@ import requests
AVID = 2
CID = 62131
-url = f'http://api.bilibili.com/x/v2/dm/web/view?type=1&oid={CID}&pid={AVID}'
+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()
@@ -292,7 +282,7 @@ for i in target.specialDms:
```
特殊弹幕包数=1
-特殊弹幕包url=http://i0.hdslb.com/bfs/dm/b0d5f08c12be59292aa0d4e09b6dd8e54c2ba886.bin
+特殊弹幕包url=https://i0.hdslb.com/bfs/dm/b0d5f08c12be59292aa0d4e09b6dd8e54c2ba886.bin
```
使用[普通分段包弹幕](danmaku_proto.md#获取实时弹幕)的proto结构体反序列化此bin数据
diff --git a/danmaku/danmaku_xml.md b/docs/danmaku/danmaku_xml.md
similarity index 65%
rename from danmaku/danmaku_xml.md
rename to docs/danmaku/danmaku_xml.md
index 412a6d4..a5ea9ca 100644
--- a/danmaku/danmaku_xml.md
+++ b/docs/danmaku/danmaku_xml.md
@@ -2,17 +2,9 @@
实时弹幕池容量有限(根据视频类型500-8000条不等),占满后再发送会使实时弹幕池底部的弹幕压入历史弹幕池(类似于堆栈)
----
-
-- [获取实时弹幕1](#获取实时弹幕1)
-- [获取实时弹幕2](#获取实时弹幕2)
-- [弹幕格式](#弹幕格式)
-
----
-
## 获取实时弹幕1
-> http://api.bilibili.com/x/v1/dm/list.so
+> https://api.bilibili.com/x/v1/dm/list.so
*请求方式:GET*
@@ -27,14 +19,14 @@
**示例:**
```shell
-curl -G 'http://api.bilibili.com/x/v1/dm/list.so' \
+curl -G 'https://api.bilibili.com/x/v1/dm/list.so' \
--data-urlencode 'oid=144541892' \
--compressed -o 'danmaku.xml'
```
## 获取实时弹幕2
-> http://comment.bilibili.com/{cid}.xml
+> https://comment.bilibili.com/{cid}.xml
*请求方式:GET*
@@ -51,7 +43,7 @@ curl -G 'http://api.bilibili.com/x/v1/dm/list.so' \
**示例:**
```shell
-curl 'http://comment.bilibili.com/144541892.xml'
+curl 'https://comment.bilibili.com/144541892.xml'
--compressed -o 'danmaku.xml'
```
@@ -118,7 +110,7 @@ curl 'http://comment.bilibili.com/144541892.xml'
| 2 | 弹幕字号 | int32 | 18:小 25:标准 36:大 |
| 3 | 弹幕颜色 | int32 | 十进制RGB888值 |
| 4 | 弹幕发送时间 | int32 | 时间戳 |
-| 5 | 弹幕池类型 | int32 | 0:普通池 1:字幕池 2:特殊池(代码/BAS弹幕) |
+| 5 | 弹幕池类型 | int32 | 0: 普通池 1: 字幕池 2: 特殊池 (代码/BAS弹幕) 3: 互动池?|
| 6 | 发送者mid的HASH | string | 用于屏蔽用户和查看用户发送的所有弹幕 也可反查用户id |
| 7 | 弹幕dmid | int64 | 唯一 可用于操作参数 |
| 8 | 弹幕的屏蔽等级 | int32 | 0-10,低于用户设定等级的弹幕将被屏蔽 (新增,下方样例未包含) |
@@ -135,19 +127,19 @@ curl 'http://comment.bilibili.com/144541892.xml'
弹幕的颜色属性使用**十进制RGB888**值
-| 颜色 | HEX(RGB888) | DEC(RGB888) |
-| --------------------------------- | ----------------------------------- | ------------------------------------- |
-| 红色 | FE0302 | 16646914 |
-| 橘红 | FF7204 | 16740868 |
-| 橘黄 | FFAA02 | 16755202 |
-| 淡黄 | FFD302 | 16765698 |
-| 黄色 | FFFF00 | 16776960 |
-| 草绿 | A0EE00 | 10546688 |
-| 绿色 | 00CD00 | 52480 |
-| 墨绿 | 019899 | 104601 |
-| 紫色 | 4266BE | 4351678 |
-| 青色 | 89D5FF | 9022215 |
-| 品红 | CC0273 | 13369971 |
-| 黑色 | 222222 | 2236962 |
-| 灰色 | 9B9B9B | 10197915 |
-| 白色 | FFFFFF | 16777215 |
+| 颜色 | HEX(RGB888) | DEC(RGB888) |
+| -------------------------------------- | ----------------------------------------- | ------------------------------------------- |
+| 红色 | FE0302 | 16646914 |
+| 橘红 | FF7204 | 16740868 |
+| 橘黄 | FFAA02 | 16755202 |
+| 淡黄 | FFD302 | 16765698 |
+| 黄色 | FFFF00 | 16776960 |
+| 草绿 | A0EE00 | 10546688 |
+| 绿色 | 00CD00 | 52480 |
+| 墨绿 | 019899 | 104601 |
+| 紫色 | 4266BE | 4351678 |
+| 青色 | 89D5FF | 9022215 |
+| 品红 | CC0273 | 13369971 |
+| 黑色 | 222222 | 2236962 |
+| 灰色 | 9B9B9B | 10197915 |
+| 白色 | FFFFFF | 16777215 |
diff --git a/danmaku/history.md b/docs/danmaku/history.md
similarity index 91%
rename from danmaku/history.md
rename to docs/danmaku/history.md
index b69fb6a..a20f15a 100644
--- a/danmaku/history.md
+++ b/docs/danmaku/history.md
@@ -2,15 +2,9 @@
**注:历史弹幕的xml接口已经失效,现已改为protobuf接口**
-- [查询历史弹幕日期](#查询历史弹幕日期)
-- [获取历史弹幕protobuf接口](#获取历史弹幕protobuf接口)
-- [~~获取历史弹幕xml接口~~](#获取历史弹幕xml接口)
-
----
-
## 查询历史弹幕日期
-> http://api.bilibili.com/x/v2/dm/history/index
+> https://api.bilibili.com/x/v2/dm/history/index
*请求方式:GET*
@@ -50,7 +44,7 @@
查询了cid为144541892的视频位于2020年1月中有历史弹幕记录的日期
```shell
-curl -G 'http://api.bilibili.com/x/v2/dm/history/index' \
+curl -G 'https://api.bilibili.com/x/v2/dm/history/index' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=144541892' \
--data-urlencode 'month=2020-01' \
@@ -86,7 +80,7 @@ curl -G 'http://api.bilibili.com/x/v2/dm/history/index' \
返回结果的 `data` 项说明这些日期有弹幕发送。若查询的月份中视频无弹幕,则 `data` 项为 `null`
```shell
-curl -G 'http://api.bilibili.com/x/v2/dm/history/index' \
+curl -G 'https://api.bilibili.com/x/v2/dm/history/index' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=144541892' \
--data-urlencode 'month=2019-12' \
@@ -109,7 +103,7 @@ curl -G 'http://api.bilibili.com/x/v2/dm/history/index' \
## 获取历史弹幕protobuf接口
-> http://api.bilibili.com/x/v2/dm/web/history/seg.so
+> https://api.bilibili.com/x/v2/dm/web/history/seg.so
*请求方式:GET*
@@ -125,7 +119,7 @@ curl -G 'http://api.bilibili.com/x/v2/dm/history/index' \
**proto回复:**
-porto定义见:[bilibili.community.service.dm.v1.DmSegMobileReply](../grpc_api/bilibili/community/service/dm/v1.proto)
+porto定义见:[bilibili.community.service.dm.v1.DmSegMobileReply](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/grpc_api/bilibili/community/service/dm/v1/dm.proto)
详细说明见[protobuf弹幕](danmaku_proto.md)
@@ -138,7 +132,7 @@ import requests
import google.protobuf.text_format as text_format
import bilibili.community.service.dm.v1_pb2 as Danmaku
-url = 'http://api.bilibili.com/x/v2/dm/web/history/seg.so'
+url = 'https://api.bilibili.com/x/v2/dm/web/history/seg.so'
params = {
'type':1, #弹幕类型
'oid':144541892, #cid
@@ -175,7 +169,7 @@ idStr: "27532611677585408"
查看折叠内容:
-> http://api.bilibili.com/x/v2/dm/history
+> https://api.bilibili.com/x/v2/dm/history
*请求方式:GET*
@@ -200,7 +194,7 @@ idStr: "27532611677585408"
获取视频`av84271171(cid=144541892)`2020-01-21的历史弹幕
```shell
-curl -G 'http://api.bilibili.com/x/v2/dm/history' \
+curl -G 'https://api.bilibili.com/x/v2/dm/history' \
--data-urlencode 'type=1' \
--data-urlencode 'oid=144541892' \
--data-urlencode 'date=2020-01-21' \
@@ -243,4 +237,4 @@ curl -G 'http://api.bilibili.com/x/v2/dm/history' \
-
\ No newline at end of file
+
diff --git a/danmaku/snapshot.md b/docs/danmaku/snapshot.md
similarity index 92%
rename from danmaku/snapshot.md
rename to docs/danmaku/snapshot.md
index c1d88b0..69f098b 100644
--- a/danmaku/snapshot.md
+++ b/docs/danmaku/snapshot.md
@@ -1,12 +1,8 @@
# 弹幕快照
-- [获取弹幕快照](#获取弹幕快照)
-
----
-
## 获取弹幕快照
-> http://api.bilibili.com/x/v2/dm/ajax
+> https://api.bilibili.com/x/v2/dm/ajax
*请求方式:GET*
@@ -45,14 +41,14 @@
avid方式:
```shell
-curl -G 'http://api.bilibili.com/x/v2/dm/ajax' \
+curl -G 'https://api.bilibili.com/x/v2/dm/ajax' \
--data-urlencode 'aid=43337021'
```
bvid方式:
```shell
-curl -G 'http://api.bilibili.com/x/v2/dm/ajax' \
+curl -G 'https://api.bilibili.com/x/v2/dm/ajax' \
--data-urlencode 'aid=BV1rb411m7gE'
```
diff --git a/docs/danmaku/thumbup.md b/docs/danmaku/thumbup.md
new file mode 100644
index 0000000..0d59ff9
--- /dev/null
+++ b/docs/danmaku/thumbup.md
@@ -0,0 +1,104 @@
+# 弹幕点赞查询
+
+## 查询指定dmid的点赞数
+
+> https://api.bilibili.com/x/v2/dm/thumbup/stats
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------------- | ------ | --------------------- |
+| oid | num | 视频 cid | 必要 | |
+| ids | nums | 欲查询的弹幕 dmid | 必要 | 多个 id 之间用`,`分隔 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------------------------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 弹幕 id 与之对应数据的 Map | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | -------------------------- | ---- |
+| {弹幕 dmid} | obj | {弹幕 dmid} 对应的点赞信息 | |
+
+`{弹幕 dmid}`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------------- | ---- | ---------------------- | ------------------------------------------------------- |
+| likes | num | 对应弹幕所获得的点赞数 | |
+| user_like | num | 当前用户是否点赞 | 0:未点赞 1:已点赞 需要登录(Cookie 或 APP) |
+| id_str | str | 弹幕 dmid 字符串形式 | |
+| show_threshold | num | (?) | |
+| reply_count | num | (?) | |
+| gray_release_control | obj | (?) | |
+
+`gray_release_control`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | ------ | ---- |
+| show_dm_reply | bool | (?) | |
+
+**示例:**
+
+获取视频 BV1AP411d7Qa 1P(cid=1131648710)下的几个弹幕 dmid`1318231376180646144,1318231518484950784,1318231736680887808`
+
+```bash
+curl -G 'https://api.bilibili.com/x/v2/dm/thumbup/stats' \
+ --data-urlencode 'oid=1131648710' \
+ --data-urlencode 'ids=1318231376180646144,1318231518484950784,1318231736680887808' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "1318231376180646144": {
+ "likes": 0,
+ "user_like": 0,
+ "id_str": "1318231376180646144",
+ "show_threshold": 10,
+ "reply_count": 0,
+ "gray_release_control": {
+ "show_dm_reply": false
+ }
+ },
+ "1318231518484950784": {
+ "likes": 0,
+ "user_like": 0,
+ "id_str": "1318231518484950784",
+ "show_threshold": 10,
+ "reply_count": 0,
+ "gray_release_control": {
+ "show_dm_reply": false
+ }
+ },
+ "1318231736680887808": {
+ "likes": 0,
+ "user_like": 0,
+ "id_str": "1318231736680887808",
+ "show_threshold": 10,
+ "reply_count": 0,
+ "gray_release_control": {
+ "show_dm_reply": false
+ }
+ }
+ }
+}
+```
+
+
diff --git a/docs/danmaku/webmask.md b/docs/danmaku/webmask.md
new file mode 100644
index 0000000..ab0fff8
--- /dev/null
+++ b/docs/danmaku/webmask.md
@@ -0,0 +1,80 @@
+# 智能防挡弹幕
+
+B 站部分视频提供“智能防挡弹幕”功能,其原理是提供了一个 webmask 二进制文件,其中保存了视频中各个位置的 svg 格式蒙版。
+
+首先需要获取 webmask 资源的地址。
+
+## 获取 webmask 资源地址
+
+通过 [web 播放器资源接口](../video/player.md) 获取 webmask 二进制文件的地址。
+
+
+## webmask 资源
+
+获取的 url 没有权鉴,不需要后面的参数也可以获取。
+
+示例:
+
+```shell
+curl -G https://upos-sz-staticcos-cmask.bilivideo.com/cmaskboss/825851971_30_0.webmask >> 825851971_30_0.webmask
+```
+
+下载后是二进制文件。
+
+
+## webmask 二进制读取
+
+参考:[andrewvy/webmask-renderer](https://github.com/andrewvy/webmask-renderer)
+
+name | offset | length | type | desc
+--- | ------ | ------ | ---- | ----
+mask | 0 | 4 | char | 'MASK' 文件头
+version| 4 | 4 | int | 是1
+vU | 8 | 4 | ? | 不知道是干什么的
+Ly | 12 | 4 | int | 后续数据的段数
+time_1 | 16 | 8 | long | 第一段对应视频开始时间
+offset_1 | 24 | 8 | long | 第一段蒙版信息开始处对应二进制偏移
+...|...|...|...|...
+time_{Ly} |16+(Ly-1)*16| 8 | long | 第 `Ly` 段对应视频开始时间
+offset_{Ly} |24+(Ly-1)*16| 8 | long | 第 `Ly` 段蒙版信息开始处对应二进制偏移
+segments_1| 由前面offset_1提供 | 由 `offset_2-offset_1` 计算得到 | binary | 蒙版信息块,使用 gzip 压缩
+...|...|...|...|...
+
+
+蒙版信息块是经过 gzip 压缩文本得到的二进制。解压缩后得到一个字节串。
+
+前 16 字节是两个 long,记为 `left` 和 `right`,暂时不清楚其作用。`left` 似乎和平均每张蒙版的时间有关。`right` 总是 `i*10000`,`i` 是从 0 开始数的数据段次序。
+
+后面是各个 svg 文本直接拼起来,可以直接通过 svg 格式头 `data:image/svg+xml;base64,` 分开。
+
+
+Python 示例:
+```python
+from struct import unpack
+import gzip
+
+f = open('你的 webmask', 'rb')
+buf = f.read()
+_Ly = buf[12:16]
+Ly = unpack('>i', _Ly)[0] # 大端序 int
+
+times = []
+offsets = []
+for idx in range(Ly):
+ op = 16 + idx * 16 # 个人习惯,我算偏移时喜欢用 `op` 和 `ed` 作为开始和结束的名字。
+ time = unpack('>q', buf[op: op+8])[0]
+ offset = unpack('>q', buf[op+8: op+16])[0]
+ times.append(time)
+ offsets.append(offset)
+
+frames = []
+for idx in range(Ly):
+ op = offsets[idx]
+ if idx == Ly - 1: ed = len(buf)
+ else: ed = offsets[idx+1]
+ ba = buf[op: ed]
+ bad = gzip.decompress(ba)
+ badl = bad.split(b'data:image/svg+xml;base64,')
+ # badl[0]是16字节,`left` 和 `right`
+ frames.append(badl[1: ])
+```
diff --git a/docs/dynamic/action.md b/docs/dynamic/action.md
new file mode 100644
index 0000000..66cfff1
--- /dev/null
+++ b/docs/dynamic/action.md
@@ -0,0 +1,113 @@
+# 动态操作
+
+## 删除动态
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数(multipart/form-data):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------ | ------ | ---- |
+| dynamic_id | num | 动态id | 必要 | |
+| csrf_token | str | csrf | 必要 | |
+| csrf | str | csrf | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------------------------------------------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 500404:已经删除过该动态 500406:动态不是自己的 |
+| msg | str | 错误信息 | 成功时为空文本 |
+| message | str | 错误信息 | 同`msg` |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ---- | ---------------- |
+| \_gt\_ | num | 0 | **作用尚不明确** |
+
+**示例:**
+
+删除动态`dynamic_id=588320531406678918`
+
+```shell
+curl 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/rm_dynamic' \
+ --data-urlencode 'dynamic_id=588320531406678918' \
+ --data-urlencode 'csrf_token=xxx' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "message": "",
+ "data": {
+ "_gt_": 0
+ }
+}
+```
+
+
+
+## 删除定时发布动态
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------ | ---- |
+| draft_id | num | 定时发布动态id | 必要 | |
+| csrf_token | str | csrf | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------ |
+| code | num | 返回值 | 0:成功 4120015:系统异常 |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | 空对象,即`{}` |
+
+**示例:**
+
+删除定时发布动态`draft_id=755409289278914611`
+
+```shell
+curl 'https://api.vc.bilibili.com/dynamic_draft/v1/dynamic_draft/rm_draft' \
+ --data-urlencode 'draft_id=755409289278914611' \
+ --data-urlencode 'csrf=xxxx'
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
diff --git a/docs/dynamic/all.md b/docs/dynamic/all.md
new file mode 100644
index 0000000..c0d700e
--- /dev/null
+++ b/docs/dynamic/all.md
@@ -0,0 +1,7949 @@
+# 获取动态列表
+
+## 获取全部动态列表
+
+> https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all
+
+*请求方式: GET*
+
+认证方式: Cookie (SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 必要性 | 内容 | 备注 |
+| --- | --- | --- | --- | --- |
+| timezone_offset | str | 非必要 | `-480` | 新版无 |
+| type | str | 非必要 | 分类 | 新版无, `all`:全部(默认) `video`:视频投稿 `pgc`:追番追剧 `article`:专栏 |
+| host_mid | num | 非必要 | UP主UID | 仅新版, 如 `293793435` |
+| offset | num | 非必要 | 分页偏移量 | 默认为空, 翻页时使用 |
+| update_baseline | str | 非必要 | 更新基线 | 获取新动态时使用 |
+| page | num | 非必要 | 页数 | 无效参数 |
+| platform | str | 非必要 | 平台 | 仅新版, 如 `web` |
+| features | str | 非必要 | 功能开关? | 旧版 `itemOpusStyle,listOnlyfans` 新版 `itemOpusStyle,listOnlyfans,opusBigCover,onlyfansVote,decorationCard,onlyfansAssetsV2,forwardListHidden,ugcDelete` |
+| web_location | str | 非必要 | 333.1365 | 仅新版存在 |
+
+**JSON回复:**
+
+根:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 响应码 | 0:成功 -101:账号未登录 |
+| message | str | | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| has_more | bool | 是否有更多数据 | |
+| items | array | 数据数组 | |
+| offset | str | 偏移量 | 等于`items`中最后一条记录的id 获取下一页时使用 |
+| update_baseline | str | 更新基线 | 等于`items`中第一条记录的id |
+| update_num | num | 本次获取获取到了多少条新动态 | 在更新基线以上的动态条数 |
+
+`data.items[n]`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| basic | obj | | |
+| id_str | str | 动态id | |
+| modules | obj | 动态信息 | |
+| type | str | 动态类型 | [动态类型](./dynamic_enum.md#动态类型) |
+| visible | bool | 是否显示 | `true`:正常显示 `false`:折叠动态 |
+| orig | obj | 原动态信息 | 仅动态类型为`DYNAMIC_TYPE_FORWARD`的情况下存在 |
+
+`data.items[n].basic`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| comment_id_str | str | 见 [动态类型](./dynamic_enum.md#动态类型) |
+| comment_type | num | | 见 [动态类型](./dynamic_enum.md#动态类型) |
+| like_icon | obj | | 见下 |
+| rid_str | str | | 见 [动态类型](./dynamic_enum.md#动态类型) |
+
+`data.items[n].basic.like_icon`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| action_url | str | `空串` | |
+| end_url | str | `空串` | |
+| id | num | `0` | |
+| start_url | str | `空串` | |
+
+`data.items[n].modules`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| module_author | obj | UP主信息 | |
+| module_dynamic | obj | 动态内容信息 | |
+| module_more | obj | 动态右上角三点菜单 | |
+| module_stat | obj | 动态统计数据 | |
+| module_interaction | obj | 热度评论 | |
+| module_fold | obj | 动态折叠信息 | |
+| module_dispute | obj | 争议小黄条 | |
+| module_tag | obj | 置顶信息 | |
+
+`data.items[n].modules.module_author`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| avater | obj | 头像信息 | 主要用于网页渲染, 若感兴趣可参考 [图片格式化](../misc/picture.md) |
+| face | str | 头像 URL | |
+| face_nft | bool | 是否为NFT头像 | |
+| following | bool | 是否关注此UP主 | 自己的动态为`null` |
+| jump_url | str | 跳转链接 | |
+| label | str | 名称前标签 | `合集` `电视剧` `番剧` |
+| mid | num | UP主UID 剧集SeasonId | |
+| name | str | UP主名称 剧集名称 合集名称 | |
+| official_verify | obj | UP主认证信息 | |
+| pendant | obj | UP主头像框 | |
+| pub_action | str | 更新动作描述 | `投稿了视频` `直播了` `投稿了文章` `更新了合集` `与他人联合创作` `发布了动态视频` `投稿了直播回放` |
+| pub_location_text | str | 空 | |
+| pub_time | str | 更新时间 | `x分钟前` `x小时前` `昨天` |
+| pub_ts | num | 更新时间戳 | UNIX 秒级时间戳 |
+| type | str | 作者类型 | [作者类型](./dynamic_enum.md#作者类型) |
+| vip | obj | UP主大会员信息 | |
+| decorate | obj | 装扮信息 | |
+| nft_info | obj | NFT头像信息 | |
+
+`data.items[n].modules.module_author.official_verify`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| desc | str | 认证说明 | |
+| type | num | 认证类型 | |
+
+`data.items[n].modules.module_author.pendant`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| expire | num | 过期时间 | 此接口返回恒为`0` |
+| image | str | 头像框图片url | |
+| image_enhance | str | 头像框图片url | |
+| image_enhance_frame | str | 头像框图片逐帧序列url | |
+| name | str | 头像框名称 | |
+| pid | num | 头像框id | |
+| n_pid | num | 同 pid | |
+
+`data.items[n].modules.module_author.vip`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| avatar_subscript | num | 是否显示角标 | 0:不显示 1:显示 |
+| avatar_subscript_url | str | `空串` | |
+| due_date | num | 大会员过期时间戳 | UNIX 毫秒时间戳 |
+| label | obj | 大会员标签 | |
+| nickname_color | str | 名字显示颜色 | 大会员:`#FB7299` |
+| status | num | 大会员状态 | 0:无 1:有 2:封禁? |
+| theme_type | num | `0` | |
+| type | num | 大会员类型 | 0:无 1:月大会员 2:年度及以上大会员 |
+
+`data.items[n].modules.module_author.vip.label`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| bg_color | str | 会员标签背景颜色 | `#FB7299` |
+| bg_style | num | `0` `1` | |
+| border_color | str | 空 | |
+| img_label_uri_hans | str | 大会员牌子图片 | 动态版 简体版 |
+| img_label_uri_hans_static | str | 大会员牌子图片 | 静态版 简体版 |
+| img_label_uri_hant | str | 大会员牌子图片 | 动态版 繁体版 |
+| img_label_uri_hant_static | str | 大会员牌子图片 | 静态版 繁体版 |
+| label_theme | str | 会员标签 | vip:大会员 annual_vip:年度大会员 ten_annual_vip:十年大会员 hundred_annual_vip:百年大会员 fools_day_hundred_annual_vip:最强绿鲤鱼 |
+| path | str | 空 | |
+| text | str | 会员类型文案 | `大会员` `年度大会员` `十年大会员` `百年大会员` `最强绿鲤鱼` |
+| text_color | str | 用户名文字颜色 | |
+| use_img_label | bool | `true` | |
+
+`data.items[n].modules.module_author.decorate`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| card_url | str | 动态卡片小图标图片URL | |
+| fan | obj | 粉丝装扮信息 | |
+| id | num | 装扮ID | |
+| jump_url | str | 跳转URL | |
+| name | str | 装扮名称 | |
+| type | num | `1` `2` `3` | |
+
+`data.items[n].modules.module_author.decorate.fan`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| color | str | 编号颜色 | |
+| color_format | obj | 颜色格式 | |
+| is_fan | bool | 是否是粉丝装扮 | |
+| num_str | str | 装扮编号前缀 | 如 `NO.` |
+| number | num | 装扮编号 | |
+
+`data.items[n].modules.module_author.decorate.fan.color_format`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| colors | array | 颜色 | 带 `#` 前缀的 16 进制颜色代码 |
+| end_point | str| 端点 | `0,100` |
+| gradients | array | 渐变 | 内容 [0, 100] |
+| start_point | str | 起点 | `0,0` |
+
+`data.items[n].modules.module_author.nft_info`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| region_icon | str | NFT头像角标URL | 类型1:https://i0.hdslb.com/bfs/activity-plat/static/20220506/334553dd7c506a92b88eaf4d59ac8b4d/j8AeXAkEul.gif 类型2:https://i0.hdslb.com/bfs/activity-plat/static/20220506/334553dd7c506a92b88eaf4d59ac8b4d/IOHoVs1ebP.gif |
+| region_type | num | NFT头像角标类型 | 1,2 |
+| show_status | num | `1` | |
+
+`data.items[n].modules.module_dynamic`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| additional | obj | 相关内容卡片信息 | |
+| desc | obj | 动态文字内容 |其他动态时为null |
+| major | obj | 动态主体对象 |转发动态时为null |
+| topic | obj | 话题信息 | |
+
+`data.items[n].modules.module_dynamic.additional`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| common | obj | 一般类型 | `ADDITIONAL_TYPE_COMMON`类型独有 |
+| type | str | 卡片类型 | [相关内容卡片类型](./dynamic_enum.md#相关内容卡片类型) |
+| reserve | obj | 预约信息 | `ADDITIONAL_TYPE_RESERVE`类型独有 |
+| goods | obj | 商品内容 | `ADDITIONAL_TYPE_GOODS`类型独有 |
+| vote | obj | 投票信息 | `ADDITIONAL_TYPE_VOTE`类型独有 |
+| ugc | obj | 视频信息 | `ADDITIONAL_TYPE_UGC`类型独有 |
+
+`data.items[n].modules.module_dynamic.additional.common`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| button | obj | 按钮内容 | |
+| cover | str | 左侧封面图 | |
+| desc1 | str | 描述1 | |
+| desc2 | str | 描述2 | |
+| head_text | str | 卡片头文本 | |
+| id_str | str | 相关id | |
+| jump_url | str | 跳转URL | |
+| style | num | `1` | |
+| sub_type | str | 子类型 | `game` `decoration` `ogv` |
+| title | str | 卡片标题 | |
+
+`data.items[n].modules.module_dynamic.additional.common.button`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| jump_style | obj | 跳转类型 | `game`和`decoration`类型特有 |
+| jump_url | str | 跳转URL | |
+| type | num | | 1:`game`和`decoration`类型 2:`ogv`类型 |
+| check | obj | | `ogv`类型特有 |
+| status | num | `1` | |
+| uncheck | obj | | `ogv`类型特有 |
+
+`data.items[n].modules.module_dynamic.additional.common.button.jump_style`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| icon_url | str | `空串` | |
+| text | str | 按钮显示文案 | game:`进入` decoration:`去看看` |
+
+`data.items[n].modules.module_dynamic.additional.common.button.check`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| icon_url | str | 按钮图片URL | |
+| text | str | 按钮显示文案 | `ogv`:已追剧 |
+
+`data.items[n].modules.module_dynamic.additional.common.button.uncheck`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| icon_url | str | 按钮图片URL | |
+| text | str | 按钮显示文案 | `ogv`:追剧 |
+
+`data.items[n].modules.module_dynamic.additional.reserve`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| button | obj | 按钮信息 | |
+| desc1 | obj | 预约时间 | |
+| desc2 | obj | 预约观看量 | |
+| jump_url | str | 跳转URL | |
+| reserve_total | num | 预约人数 | |
+| rid | num | | |
+| state | num | `0` | |
+| stype | num | `1` `2` | |
+| title | str | 预约标题 | |
+| up_mid | num | 预约发起人UID | |
+| desc3 | obj | 预约有奖信息 | |
+
+`data.items[n].modules.module_dynamic.additional.reserve.button`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| check | obj | 已预约状态显示内容 | |
+| status | num | 预约状态 | 1:未预约,使用`uncheck` 2:已预约,使用`check` |
+| type | num | 类型 | 1:视频预约,使用`jump_style` 2:直播预约,使用`check`和`uncheck` |
+| uncheck | obj | 未预约状态显示内容 | |
+| jump_style | obj | 跳转按钮 | |
+| jump_url | str | 跳转URL | |
+
+`data.items[n].modules.module_dynamic.additional.reserve.button.check`对象"
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| icon_url | str | `空串` | |
+| text | str | 按钮显示文案 | `已预约` |
+
+`data.items[n].modules.module_dynamic.additional.reserve.button.uncheck`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| icon_url | str | 显示图标URL | |
+| text | str | 按钮显示文案 | |
+| toast | str | 预约成功显示提示文案 | |
+| disable | num | 是否不可预约 | 1:是 |
+
+`data.items[n].modules.module_dynamic.additional.reserve.button.jump_style`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| icon_url | str | `空串` | |
+| text | str | 按钮显示文案 | `去观看` |
+
+`data.items[n].modules.module_dynamic.additional.reserve.desc1`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| style | num | 类型 | 0:`视频预约` `11-05 20:00 直播` `预计今天 17:05发布` 1:`直播中` |
+| text | str | 显示文案 | |
+
+`data.items[n].modules.module_dynamic.additional.reserve.desc2`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| style | num | `0` | |
+| text | str | 显示文案 | `2人预约` `743观看` `1.0万人看过` `2151人气` |
+| visible | bool | 是否显示 | true:显示文案 false:显示已结束 |
+
+`data.items[n].modules.module_dynamic.additional.reserve.desc3`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| jump_url | str | 开奖信息跳转URL | |
+| style | num | `1` | |
+| text | str | 奖品信息显示文案 | |
+
+`data.items[n].modules.module_dynamic.additional.goods`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| head_icon | str | `空串` | |
+| head_text | str | 卡片头显示文案 | |
+| items | array | 商品信息列表 | |
+| jump_url | str | `空串` | |
+
+`data.items[n].modules.module_dynamic.additional.goods.items`数组中的:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| brief | str | 商品副标题 | |
+| cover | str | 商品封面 | |
+| id | str | 商品ID | |
+| jump_desc | str | 跳转按钮显示文案 | |
+| jump_url | str | 跳转URL | |
+| name | str | 商品名称 | |
+| price | str | 商品价格 | |
+
+`data.items[n].modules.module_dynamic.additional.vote`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| choice_cnt | num | `1` | |
+| default_share | num | 是否默认勾选`同时分享至动态` | 1:勾选 |
+| desc | str | 投票标题 | |
+| end_time | num | 剩余时间 | 单位:秒 |
+| join_num | num | 已参与人数 | |
+| status | num | `1` | |
+| type | null | `null` | |
+| uid | num | 发起人UID | |
+| vote_id | num | 投票ID | |
+
+`data.items[n].modules.module_dynamic.additional.ugc`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cover | str | 封面 | |
+| desc_second | str | 播放量与弹幕数 | |
+| duration | str | 视频长度 | |
+| head_text | str | `空串` | |
+| id_str | str | 视频AV号 | |
+| jump_url | str | 视频跳转URL | |
+| multi_line | bool | `true` | |
+| title | str | 视频标题 | |
+
+`data.items[n].modules.module_dynamic.desc`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| rich_text_nodes | array | 富文本节点列表 | [富文本节点类型](./dynamic_enum.md#富文本节点类型) |
+| text | str | 动态的文字内容 | |
+
+`data.items[n].modules.module_dynamic.desc.rich_text_nodes[o]`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| orig_text | str | 原始文本 | |
+| text | str | 替换后的文本 | |
+| type | str | 节点类型 | [富文本节点类型](./dynamic_enum.md#富文本节点类型) |
+| emoji | obj | 表情信息 | |
+| jump_url | str | 跳转URL | |
+| rid | str | 关联id | |
+| goods | obj | 商品信息 | |
+| icon_name | str | 图标名称 | `taobao` |
+
+`data.items[n].modules.module_dynamic.desc.rich_text_nodes[o].emoji`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| icon_url | str | 表情图片URL | |
+| size | num | 表情尺寸 | `1` `2` |
+| text | str | 表情的文字代码 | |
+| type | num | 表情类型 | `1` `2` `3` |
+
+`data.items[n].modules.module_dynamic.desc.rich_text_nodes[o].goods`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| jump_url | str | 跳转URL | |
+| type | num | `1` | |
+
+`data.items[n].modules.module_dynamic.major`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| type | str | 动态主体类型 | [动态主体类型](./dynamic_enum.md#动态主体类型) |
+| ugc_season | obj | 合集信息 | `MAJOR_TYPE_UGC_SEASON` |
+| article | obj | 专栏类型 | `MAJOR_TYPE_ARTICLE` |
+| draw | obj | 带图动态 | `MAJOR_TYPE_DRAW` |
+| archive | obj | 视频信息 | `MAJOR_TYPE_ARCHIVE` |
+| live_rcmd | obj | 直播状态 | `MAJOR_TYPE_LIVE_RCMD` |
+| common | obj | 一般类型 | `MAJOR_TYPE_COMMON` |
+| pgc | obj | 剧集信息 | `MAJOR_TYPE_PGC` |
+| courses | obj | 课程信息 | `MAJOR_TYPE_COURSES` |
+| music | obj | 音频信息 | `MAJOR_TYPE_MUSIC` |
+| opus | obj | 图文动态 | `MAJOR_TYPE_OPUS` |
+| live | obj | | |
+| none | obj | 动态失效 | `MAJOR_TYPE_NONE` |
+
+`data.items[n].modules.module_dynamic.major.ugc_season`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| aid | num | 视频AV号 | |
+| badge | obj | 角标信息 | |
+| cover | str | 视频封面 | |
+| desc | str | 视频简介 | |
+| disable_preview | num | `0` | |
+| duration_text | str | 时长 | |
+| jump_url | str | 跳转URL | |
+| stat | obj | 统计信息 | |
+| title | str | 视频标题 | |
+
+`data.items[n].modules.module_dynamic.major.ugc_season.badge`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| bg_color | str | 背景颜色 | |
+| color | str | 字体颜色 | |
+| text | str | 角标文案 | |
+
+`data.items[n].modules.module_dynamic.major.ugc_season.stat`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| danmaku | str | 弹幕数 | |
+| play | str | 播放数 | |
+
+`data.items[n].modules.module_dynamic.major.article`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| covers | array | 封面图数组 | 最多三张 |
+| desc | str | 文章摘要 | |
+| id | num | 文章CV号 | |
+| jump_url | str | 文章跳转地址 | |
+| label | str | 文章阅读量 | |
+| title | str | 文章标题 | |
+
+`data.items[n].modules.module_dynamic.major.draw`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| id | num | 对应相簿id | |
+| items | array | 图片信息列表 | |
+
+`data.items[n].modules.module_dynamic.major.draw.items[o]`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| height | num | 图片高度 | |
+| size | num | 图片大小 | 单位KB |
+| src | str | 图片URL | |
+| tags | array | | |
+| width | num | 图片宽度 | |
+
+`data.items[n].modules.module_dynamic.major.archive`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| aid | str | 视频AV号 | |
+| badge | obj | 角标信息 | |
+| bvid | str | 视频BVID | |
+| cover | str | 视频封面 | |
+| desc | str | 视频简介 | |
+| disable_preview | num | `0` | |
+| duration_text | str | 视频长度 | |
+| jump_url | str | 跳转URL | |
+| stat | obj | 统计信息 | |
+| title | str | 视频标题 | |
+| type | num | `1` | |
+
+`data.items[n].modules.module_dynamic.major.archive.badge`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| bg_color | str | 背景颜色 | |
+| color | str | 字体颜色 | |
+| text | str | 角标文案 | |
+
+`data.items[n].modules.module_dynamic.major.archive.stat`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| danmaku | str | 弹幕数 | |
+| play | str | 播放数 | |
+
+`data.items[n].modules.module_dynamic.major.live_rcmd`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| content | str | 直播间内容JSON | |
+| reserve_type | num | `0` | |
+
+`data.items[n].modules.module_dynamic.major.common`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| badge | obj | 角标信息 | |
+| biz_type | num | `0` | |
+| cover | str | 左侧图片封面 | |
+| desc | str | 右侧描述信息 | |
+| id | str | | |
+| jump_url | str | 跳转地址 | |
+| label | str | `空串` | |
+| sketch_id | str | | |
+| style | num | `1` | |
+| title | str | 右侧标题 | |
+
+`data.items[n].modules.module_dynamic.major.common.badge`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| bg_color | str | `空串` | |
+| color | str | `空串` | |
+| text | str | `空串` | |
+
+`data.items[n].modules.module_dynamic.major.pgc`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| badge | obj | 角标信息 | |
+| cover | str | 视频封面 | |
+| epid | num | 分集EpId | |
+| jump_url | str | 跳转URL | |
+| season_id | num | 剧集SeasonId | |
+| stat | obj | 统计信息 | |
+| sub_type | num | 剧集类型 | 1:番剧 2:电影 3:纪录片 4:国创 5:电视剧 6:漫画 7:综艺 |
+| title | str | 视频标题 | |
+| type | num | `2` | |
+
+`data.items[n].modules.module_dynamic.major.pgc.badge`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| bg_color | str | 背景颜色 | |
+| color | str | 字体颜色 | |
+| text | str | 角标文案 | |
+
+`data.items[n].modules.module_dynamic.major.pgc.stat`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| danmaku | str | 弹幕数 | |
+| play | str | 播放数 | |
+
+`data.items[n].modules.module_dynamic.major.courses`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| badge | obj | 角标信息 | |
+| cover | str | 封面图URL | |
+| desc | str | 更新状态描述 | |
+| id | num | 课程id | |
+| jump_url | str | 跳转URL | |
+| sub_title | str | 课程副标题 | |
+| title | str | 课程标题 | |
+
+`data.items[n].modules.module_dynamic.major.courses.badge`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| bg_color | str | 背景颜色 | |
+| color | str | 字体颜色 | |
+| text | str | 角标文案 | |
+
+`data.items[n].modules.module_dynamic.major.music`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cover | str | 音频封面 | |
+| id | num | 音频AUID | |
+| jump_url | str | 跳转URL | |
+| label | str | 音频分类 | |
+| title | str | 音频标题 | |
+
+`data.items[n].modules.module_dynamic.major.opus`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| fold_action | array | 展开收起 | |
+| jump_url | str | 跳转URL | |
+| pics | array | 图片信息 | |
+| summary | obj | 动态内容 | |
+| title | str | 动态标题 | 没有标题时为null |
+
+`data.items[n].modules.module_dynamic.major.opus.summary`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| rich_text_nodes | array | 富文本节点列表 | 和`desc`对象中的`rich_text_nodes`数组结构一样 |
+| text | str | 评论内容 | |
+
+`data.items[n].modules.module_dynamic.major.live`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| badge | obj | 角标信息 | |
+| cover | str | 直播封面 | |
+| desc_first | str | 直播主分区名称 | |
+| desc_second | str | 观看人数 | |
+| id | num | 直播间id | |
+| jump_url | str | 直播间跳转URL | |
+| live_state | num | 直播状态 | 0:直播结束 1:正在直播 |
+| reserve_type | num | `0` | |
+| title | str | 直播间标题 | |
+
+`data.items[n].modules.module_dynamic.major.live.badge`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| bg_color | str | 背景颜色 | |
+| color | str | 字体颜色 | |
+| text | str | 角标文案 | |
+
+`data.items[n].modules.module_dynamic.major.none`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| tips | str | 动态失效显示文案 | deprecated? |
+
+`data.items[n].modules.module_dynamic.topic`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| id | num | 话题id | |
+| jump_url | str | 跳转URL | |
+| name | str | 话题名称 | |
+
+`data.items[n].modules.module_more`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| three_point_items | array | 右上角三点菜单 | |
+
+`data.items[n].modules.module_more.three_point_items[o]`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| label | str | 显示文本 | |
+| type | str | 类型 | 参见 [动态主体类型](dynamic_enum.md#动态主体类型) |
+| modal | obj | 弹出框信息 | 删除动态时弹出 |
+| params | obj | 参数 | 置顶/取消置顶时使用 |
+
+`data.items[n].modules.module_more.three_point_items[o].modal`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cancel | str | 取消按钮 | `我点错了` |
+| confirm | str | 确认按钮 | `删除` |
+| content | str | 提示内容 | `确定要删除此条动态吗?` |
+| title | str | 标题 | `删除动态` |
+
+`data.items[n].modules.module_more.three_point_items[o].params`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| dynamic_id | str | 当前动态ID | deprecated? |
+| status | bool | 当前动态是否处于置顶状态 | deprecated? |
+
+`data.items[n].modules.module_stat`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| comment | obj | 评论数据 | |
+| forward | obj | 转发数据 | |
+| like | obj | 点赞数据 | |
+
+`data.items[n].modules.module_stat.comment`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| count | num | 评论数 | |
+| forbidden | bool | `false` | |
+| hidden | bool | 是否隐藏 | 直播类型动态会隐藏回复功能 |
+
+`data.items[n].modules.module_stat.forward`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| count | num | 转发数 | |
+| forbidden | bool | `false` | |
+
+`data.items[n].modules.module_stat.like`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| count | num | 点赞数 | |
+| forbidden | bool | `false` | |
+| status | bool | 当前用户是否点赞 | |
+
+`data.items[n].modules.module_interaction`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| items | array | 信息列表 | |
+
+`data.items[n].modules.module_interaction.items`数组中的:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| desc | obj | 点赞/评论信息 | |
+| type | num | 类型 | 0:点赞信息 1:评论信息 |
+
+`data.items[n].modules.module_interaction.items[o].desc`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| rich_text_nodes | array | 富文本节点列表 | [富文本节点类型](./dynamic_enum.md#富文本节点类型) |
+| text | str | 评论内容 | |
+
+`data.items[n].modules.module_interaction.items[o].desc.rich_text_nodes`数组中的:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| orig_text | str | 原始文本 | |
+| rid | str | 关联ID | 用户UID |
+| text | str | 替换后文本 | |
+| type | str | 富文本节点类型 | [富文本节点类型](./dynamic_enum.md#富文本节点类型) |
+| emoji | obj | 表情信息 | |
+
+`data.items[n].modules.module_interaction.items[o].desc.rich_text_nodes[n].emoji`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| icon_url | str | 表情图片URL | |
+| size | num | 表情尺寸 | `1` `2` |
+| text | str | 表情的文字代码 | |
+| type | num | 表情类型 | `1` `2` `3` |
+
+`data.items[n].modules.module_fold`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| ids | array | 被折叠的动态id列表 | |
+| statement | str | 显示文案 | 例:展开x条相关动态 |
+| type | num | `1` | |
+| users | array | `空数组` | |
+
+`data.items[n].modules.module_dispute`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| desc | str | | |
+| jump_url | str | | |
+| title | str | 提醒文案 | 例:视频内含有危险行为,请勿模仿 |
+
+`data.items[n].modules.module_tag`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| text | str | '置顶' | 置顶动态出现这个对象,否则没有 |
+
+**示例:**
+
+```shell
+curl -L -X GET 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?type=all' \
+-H 'Cookie: SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "has_more": true,
+ "items": [
+ {
+ "basic": {
+ "comment_id_str": "112981396619958",
+ "comment_type": 1,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "112981396619958"
+ },
+ "id_str": "966887968322093078",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.35,
+ "width": 1.35
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.675,
+ "axis_y": 0.675,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1,
+ "width": 1
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i2.hdslb.com/bfs/face/b1c15dd8814d79e648008815517aa5ef50a2fb9c.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "3546730050096047"
+ },
+ "face": "https://i2.hdslb.com/bfs/face/b1c15dd8814d79e648008815517aa5ef50a2fb9c.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/3546730050096047/dynamic",
+ "label": "",
+ "mid": 3546730050096047,
+ "name": "青岛LUCIFER",
+ "official_verify": {
+ "desc": "",
+ "type": -1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0,
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "投稿了视频",
+ "pub_location_text": "",
+ "pub_time": "刚刚",
+ "pub_ts": 1723959548,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 0,
+ "avatar_subscript_url": "",
+ "due_date": 0,
+ "label": {
+ "bg_color": "",
+ "bg_style": 0,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png",
+ "label_theme": "",
+ "path": "",
+ "text": "",
+ "text_color": "",
+ "use_img_label": true
+ },
+ "nickname_color": "",
+ "status": 0,
+ "theme_type": 0,
+ "type": 0
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": null,
+ "major": {
+ "archive": {
+ "aid": "112981396619958",
+ "badge": {
+ "bg_color": "#FB7299",
+ "color": "#FFFFFF",
+ "icon_url": null,
+ "text": "投稿视频"
+ },
+ "bvid": "BV1oeWNebEv2",
+ "cover": "http://i2.hdslb.com/bfs/archive/0e3d26d90eb0642d90c7552e63ce690e2fe7f8ce.jpg",
+ "desc": "给老板娘贴睫毛贴了半天,老登眼皮总动,夹睫毛疼了还骂我,不开心哈哈哈。",
+ "disable_preview": 0,
+ "duration_text": "00:16",
+ "jump_url": "//www.bilibili.com/video/BV1oeWNebEv2/",
+ "stat": {
+ "danmaku": "0",
+ "play": "0"
+ },
+ "title": "老板娘今天是可爱鬼呀!",
+ "type": 1
+ },
+ "type": "MAJOR_TYPE_ARCHIVE"
+ },
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 0,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 0,
+ "forbidden": false
+ },
+ "like": {
+ "count": 0,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_AV",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "1756441068",
+ "comment_type": 1,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "1756441068"
+ },
+ "id_str": "966873782060843027",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.35,
+ "width": 1.35
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.675,
+ "axis_y": 0.675,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1,
+ "width": 1
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/face/726060100f7b80f3ab17889aa9fb8f380a53b9da.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.8000000000000002,
+ "axis_y": 0.8000000000000002,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 3,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "266765166"
+ },
+ "face": "https://i0.hdslb.com/bfs/face/726060100f7b80f3ab17889aa9fb8f380a53b9da.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/266765166/dynamic",
+ "label": "",
+ "mid": 266765166,
+ "name": "漫士沉思录",
+ "official_verify": {
+ "desc": "",
+ "type": 0
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0,
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "投稿了视频",
+ "pub_location_text": "",
+ "pub_time": "55分钟前",
+ "pub_ts": 1723956245,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 0,
+ "avatar_subscript_url": "",
+ "due_date": 0,
+ "label": {
+ "bg_color": "",
+ "bg_style": 0,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png",
+ "label_theme": "",
+ "path": "",
+ "text": "",
+ "text_color": "",
+ "use_img_label": true
+ },
+ "nickname_color": "",
+ "status": 0,
+ "theme_type": 0,
+ "type": 0
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": null,
+ "major": {
+ "archive": {
+ "aid": "1756441068",
+ "badge": {
+ "bg_color": "#FB7299",
+ "color": "#FFFFFF",
+ "icon_url": null,
+ "text": "投稿视频"
+ },
+ "bvid": "BV1d4421Z7nW",
+ "cover": "http://i1.hdslb.com/bfs/archive/df067c178714da9b511f10bde11e1bc75ea676d9.jpg",
+ "desc": "使用3b1b开发的manim引擎制作",
+ "disable_preview": 0,
+ "duration_text": "14:25",
+ "jump_url": "//www.bilibili.com/video/BV1d4421Z7nW/",
+ "stat": {
+ "danmaku": "217",
+ "play": "1.4万"
+ },
+ "title": "【漫士科普】如何最简单且本质地理解欧拉公式?",
+ "type": 1
+ },
+ "type": "MAJOR_TYPE_ARCHIVE"
+ },
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 142,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 6,
+ "forbidden": false
+ },
+ "like": {
+ "count": 1959,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_AV",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "325833790",
+ "comment_type": 11,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "325833790"
+ },
+ "id_str": "966831498138222598",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.375,
+ "width": 1.375
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.787,
+ "width": 0.787
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1.375,
+ "width": 1.375
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "PENDENT_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/garb/item/fe1267f786bf69f1471aff715f8d38ec0e486df5.png"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.7560000000000001,
+ "axis_y": 0.7726666666666667,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 4,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "layers": [
+ {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.787,
+ "width": 0.787
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ {
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1.375,
+ "width": 1.375
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "PENDENT_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_animation": {
+ "webp_src": {
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/garb/item/0aa9fd33133ed3fd9f11c857cc6ca848d6804113.webp"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 4
+ },
+ "visible": true
+ }
+ ]
+ },
+ {
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.7560000000000001,
+ "axis_y": 0.7726666666666667,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 4,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "mid": "233114659"
+ },
+ "decorate": {
+ "card_url": "https://i0.hdslb.com/bfs/garb/bb140043341137b879e957d09b649ce7c3257820.png",
+ "fan": {
+ "color": "#903AC2",
+ "color_format": {
+ "colors": [
+ "#903AC2FF",
+ "#903AC2FF"
+ ],
+ "end_point": "0,100",
+ "gradients": [
+ 0,
+ 100
+ ],
+ "start_point": "0,0"
+ },
+ "is_fan": true,
+ "num_prefix": "NO.",
+ "num_str": "000001",
+ "number": 1
+ },
+ "id": 1706163888001,
+ "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=1706163888001\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=233114659\u0026native.theme=1\u0026navhide=1",
+ "name": "龙腾啾跃-动态卡片粉丝",
+ "type": 3
+ },
+ "face": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/233114659/dynamic",
+ "label": "",
+ "mid": 233114659,
+ "name": "碧蓝航线",
+ "official_verify": {
+ "desc": "",
+ "type": 1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "https://i1.hdslb.com/bfs/garb/item/fe1267f786bf69f1471aff715f8d38ec0e486df5.png",
+ "image_enhance": "https://i1.hdslb.com/bfs/garb/item/0aa9fd33133ed3fd9f11c857cc6ca848d6804113.webp",
+ "image_enhance_frame": "https://i1.hdslb.com/bfs/garb/item/3052b412defbbc7704e887fefde8de539e8027c5.png",
+ "n_pid": 1987,
+ "name": "碧蓝航线2020",
+ "pid": 1987
+ },
+ "pub_action": "",
+ "pub_location_text": "",
+ "pub_time": "3小时前",
+ "pub_ts": 1723946400,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1729526400000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": {
+ "common": {
+ "button": {
+ "jump_style": {
+ "icon_url": "",
+ "text": "进入"
+ },
+ "jump_url": "https://www.biligame.com/detail?id=97\u0026sourceFrom=1005",
+ "type": 1
+ },
+ "cover": "https://i0.hdslb.com/bfs/game/b141a7690c226a0eae66518c713d3af62613b21d.png",
+ "desc1": "养成",
+ "desc2": "指挥官,欢迎回港",
+ "head_text": "相关游戏",
+ "id_str": "97",
+ "jump_url": "https://www.biligame.com/detail?id=97\u0026sourceFrom=1005",
+ "style": 1,
+ "sub_type": "game",
+ "title": "碧蓝航线"
+ },
+ "type": "ADDITIONAL_TYPE_COMMON"
+ },
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "jump_url": "//search.bilibili.com/all?keyword=%E7%A2%A7%E8%93%9D%E8%88%AA%E7%BA%BF",
+ "orig_text": "#碧蓝航线#",
+ "text": "#碧蓝航线#",
+ "type": "RICH_TEXT_NODE_TYPE_TOPIC"
+ },
+ {
+ "orig_text": " ",
+ "text": " ",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "jump_url": "//search.bilibili.com/all?keyword=%E7%A2%A7%E8%93%9D%E8%88%AA%E7%BA%BF%E6%BC%AB%E5%B1%95",
+ "orig_text": "#碧蓝航线漫展#",
+ "text": "#碧蓝航线漫展#",
+ "type": "RICH_TEXT_NODE_TYPE_TOPIC"
+ },
+ {
+ "orig_text": " ",
+ "text": " ",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "jump_url": "//search.bilibili.com/all?keyword=2024%E6%B8%AF%E5%8C%BA%E7%9B%9B%E5%A4%8F%E6%B8%85%E5%87%89%E8%8A%82",
+ "orig_text": "#2024港区盛夏清凉节#",
+ "text": "#2024港区盛夏清凉节#",
+ "type": "RICH_TEXT_NODE_TYPE_TOPIC"
+ },
+ {
+ "orig_text": "\n◆ 「港区盛夏清凉节」长沙站·街区快闪 DAY1 现场直击!◆ \n\n城市街巷,专属惊喜,\n绘就绚丽夏日!\n和少女们一同记录这场特别邂逅吧!\n\n◆ 互动游戏开放时间:2024年8月17日~8月18日,每日10:00~12:00及14:00~19:00\n◆ 街区快闪体验地址:湖南省长沙市开福区潮宗街历史文化街区\n◆ 参与方式:无需预约,前往现场即可参与体验~\n◆ 体验须知:\n※8月17日~8月18日期间,指挥官可前往潮宗街历史文化街区现场参与体验。\n※指挥官关注《碧蓝航线》官方B站账号后,可参与互动游戏,集章兑换周边礼品哟!\n※兑换周边每日数量有限,兑完即止。\n※天气炎热,请指挥官做好防暑准备,出行注意安全哟。",
+ "text": "\n◆ 「港区盛夏清凉节」长沙站·街区快闪 DAY1 现场直击!◆ \n\n城市街巷,专属惊喜,\n绘就绚丽夏日!\n和少女们一同记录这场特别邂逅吧!\n\n◆ 互动游戏开放时间:2024年8月17日~8月18日,每日10:00~12:00及14:00~19:00\n◆ 街区快闪体验地址:湖南省长沙市开福区潮宗街历史文化街区\n◆ 参与方式:无需预约,前往现场即可参与体验~\n◆ 体验须知:\n※8月17日~8月18日期间,指挥官可前往潮宗街历史文化街区现场参与体验。\n※指挥官关注《碧蓝航线》官方B站账号后,可参与互动游戏,集章兑换周边礼品哟!\n※兑换周边每日数量有限,兑完即止。\n※天气炎热,请指挥官做好防暑准备,出行注意安全哟。",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "#碧蓝航线# #碧蓝航线漫展# #2024港区盛夏清凉节#\n◆ 「港区盛夏清凉节」长沙站·街区快闪 DAY1 现场直击!◆ \n\n城市街巷,专属惊喜,\n绘就绚丽夏日!\n和少女们一同记录这场特别邂逅吧!\n\n◆ 互动游戏开放时间:2024年8月17日~8月18日,每日10:00~12:00及14:00~19:00\n◆ 街区快闪体验地址:湖南省长沙市开福区潮宗街历史文化街区\n◆ 参与方式:无需预约,前往现场即可参与体验~\n◆ 体验须知:\n※8月17日~8月18日期间,指挥官可前往潮宗街历史文化街区现场参与体验。\n※指挥官关注《碧蓝航线》官方B站账号后,可参与互动游戏,集章兑换周边礼品哟!\n※兑换周边每日数量有限,兑完即止。\n※天气炎热,请指挥官做好防暑准备,出行注意安全哟。"
+ },
+ "major": {
+ "draw": {
+ "id": 325833790,
+ "items": [
+ {
+ "height": 4000,
+ "size": 16103.947,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/31b32e6dcf2f1a6328552f0fa666302d233114659.jpg",
+ "tags": [],
+ "width": 6000
+ },
+ {
+ "height": 3905,
+ "size": 16620.71,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/e507c60207f486824708a5850d07d1bb233114659.jpg",
+ "tags": [],
+ "width": 5858
+ },
+ {
+ "height": 4000,
+ "size": 16195.393,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/7a7ef9513bb32edc3de887d787a4df43233114659.jpg",
+ "tags": [],
+ "width": 6000
+ },
+ {
+ "height": 4672,
+ "size": 11758.82,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/a21461b944e10306e68672df3e92c1b9233114659.jpg",
+ "tags": [],
+ "width": 7008
+ },
+ {
+ "height": 4672,
+ "size": 3962.4902,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/b2c4baa47b4999cabb9c8c338c2da36c233114659.jpg",
+ "tags": [],
+ "width": 7008
+ },
+ {
+ "height": 4672,
+ "size": 11276.51,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/8cf06e142fce875d2c3b83961abbc668233114659.jpg",
+ "tags": [],
+ "width": 7008
+ },
+ {
+ "height": 3735,
+ "size": 13969.533,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/c56cd277f281ba8cc4a395dbe5d9fa54233114659.jpg",
+ "tags": [],
+ "width": 5603
+ },
+ {
+ "height": 3106,
+ "size": 12942.339,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/9049a5c39ebafdd1cb488b26da4f99da233114659.jpg",
+ "tags": [],
+ "width": 4659
+ },
+ {
+ "height": 3802,
+ "size": 18643.953,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/564e469ba092d2381b23547da37ca3c0233114659.jpg",
+ "tags": [],
+ "width": 5703
+ }
+ ]
+ },
+ "type": "MAJOR_TYPE_DRAW"
+ },
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 151,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 31,
+ "forbidden": false
+ },
+ "like": {
+ "count": 2827,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_DRAW",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "37231101",
+ "comment_type": 12,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "37231101"
+ },
+ "id_str": "966827503780888593",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.35,
+ "width": 1.35
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.675,
+ "axis_y": 0.675,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1,
+ "width": 1
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/face/978ea07f22e54c2e62f01def8e815b59adacc5d0.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.8000000000000002,
+ "axis_y": 0.8000000000000002,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 4,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "407045223"
+ },
+ "decorate": {
+ "card_url": "https://i0.hdslb.com/bfs/vip/a9e3d993c7a15e88ce0bf714a142f7d2b44121e2.png",
+ "fan": {
+ "color": "",
+ "color_format": null,
+ "is_fan": false,
+ "num_prefix": "",
+ "num_str": "",
+ "number": 0
+ },
+ "id": 28,
+ "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=28\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=407045223\u0026native.theme=1\u0026navhide=1",
+ "name": "2233娘",
+ "type": 1
+ },
+ "face": "https://i0.hdslb.com/bfs/face/978ea07f22e54c2e62f01def8e815b59adacc5d0.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/407045223/dynamic",
+ "label": "",
+ "mid": 407045223,
+ "name": "二次元的中科院物理所",
+ "official_verify": {
+ "desc": "",
+ "type": 1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0,
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "投稿了文章",
+ "pub_location_text": "",
+ "pub_time": "3小时前",
+ "pub_ts": 1723945470,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1745769600000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": null,
+ "major": {
+ "article": {
+ "covers": [
+ "https://i0.hdslb.com/bfs/article/f59f635a3784c49eb174da7d589c4e75407045223.jpg"
+ ],
+ "desc": "西游记中,孙悟空为了保护师傅,在地上画了一个圈,由此便可限制住妖怪。今天小编带大家布置法术场地,只需在上面画出图案,便可控制水滴的行动!实验器材火柴、蜡烛、空易拉罐、所标杯、细竹签实验步骤安全提示:本实验有明火,请小朋友在家长的陪同下完成,或在空旷的地方进行,避免着火,注意安全。第一步:首先布置施法场地,通过蜡烛将易拉罐底部附着满炭黑。注意此步骤中应保持易拉罐内含一定水分,否则会产生烫伤等风险!第二步:向施法场地滴入水滴,观察场地效果。可以看到水滴在场地内不收约束,自由滑行第三步:当用细竹签等在场地中画出",
+ "id": 37231101,
+ "jump_url": "//www.bilibili.com/read/cv37231101/",
+ "label": "12万阅读",
+ "title": "带你在家里学会孙悟空的“画地为牢” 丨正经玩"
+ },
+ "type": "MAJOR_TYPE_ARTICLE"
+ },
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 9,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 2,
+ "forbidden": false
+ },
+ "like": {
+ "count": 583,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_ARTICLE",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "1306462278",
+ "comment_type": 1,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "1306462278"
+ },
+ "id_str": "966792134707380227",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.375,
+ "width": 1.375
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.787,
+ "width": 0.787
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_animation": {
+ "webp_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 4
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1.375,
+ "width": 1.375
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "PENDENT_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.7560000000000001,
+ "axis_y": 0.7726666666666667,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 3,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "686127"
+ },
+ "face": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/686127/dynamic",
+ "label": "",
+ "mid": 686127,
+ "name": "籽岷",
+ "official_verify": {
+ "desc": "",
+ "type": 0
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png",
+ "image_enhance": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png",
+ "image_enhance_frame": "",
+ "n_pid": 2066,
+ "name": "百年大会员",
+ "pid": 2066
+ },
+ "pub_action": "投稿了视频",
+ "pub_location_text": "",
+ "pub_time": "6小时前",
+ "pub_ts": 1723937235,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 4845196800000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/c16005a5b39164b3536cbd45618a5edd597a1c51.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/Pzrd8zmpQD.png",
+ "label_theme": "hundred_annual_vip",
+ "path": "",
+ "text": "百年大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": null,
+ "major": {
+ "archive": {
+ "aid": "1306462278",
+ "badge": {
+ "bg_color": "#FB7299",
+ "color": "#FFFFFF",
+ "icon_url": null,
+ "text": "投稿视频"
+ },
+ "bvid": "BV14M4m1175k",
+ "cover": "http://i1.hdslb.com/bfs/archive/7f8060fe1669b1a0a980844bb90e8150a859499c.jpg",
+ "desc": "https://www.curseforge.com/minecraft/mc-mods/desert-behemoths-sandworms/",
+ "disable_preview": 0,
+ "duration_text": "04:24",
+ "jump_url": "//www.bilibili.com/video/BV14M4m1175k/",
+ "stat": {
+ "danmaku": "297",
+ "play": "10.1万"
+ },
+ "title": "我的世界 巨大沙虫",
+ "type": 1
+ },
+ "type": "MAJOR_TYPE_ARCHIVE"
+ },
+ "topic": null
+ },
+ "module_interaction": {
+ "items": [
+ {
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "bili_49990770610:",
+ "rid": "3546583341730698",
+ "text": "bili_49990770610:",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ },
+ {
+ "emoji": {
+ "icon_url": "https://i0.hdslb.com/bfs/emote/1597302b98827463f5b75c7cac1f29ea6ce572c4.png",
+ "size": 1,
+ "text": "[给心心]",
+ "type": 1
+ },
+ "orig_text": "[给心心]",
+ "text": "[给心心]",
+ "type": "RICH_TEXT_NODE_TYPE_EMOJI"
+ }
+ ],
+ "text": "[给心心]"
+ },
+ "type": 1
+ }
+ ]
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 248,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 10,
+ "forbidden": false
+ },
+ "like": {
+ "count": 10276,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_AV",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "325813964",
+ "comment_type": 11,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "325813964"
+ },
+ "id_str": "966695334756483089",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.375,
+ "width": 1.375
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.787,
+ "width": 0.787
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1.375,
+ "width": 1.375
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "PENDENT_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.7560000000000001,
+ "axis_y": 0.7726666666666667,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 1,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "layers": [
+ {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.787,
+ "width": 0.787
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ {
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1.375,
+ "width": 1.375
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "PENDENT_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_animation": {
+ "webp_src": {
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 4
+ },
+ "visible": true
+ }
+ ]
+ },
+ {
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.7560000000000001,
+ "axis_y": 0.7726666666666667,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 1,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "mid": "293793435"
+ },
+ "decorate": {
+ "card_url": "https://i0.hdslb.com/bfs/garb/item/c0cf2235089ed314d92f30efa855c9b5611fa2cd.png",
+ "fan": {
+ "color": "#07b6d5",
+ "color_format": {
+ "colors": [
+ "#07b6d5FF",
+ "#07b6d5FF"
+ ],
+ "end_point": "0,100",
+ "gradients": [
+ 0,
+ 100
+ ],
+ "start_point": "0,0"
+ },
+ "is_fan": true,
+ "num_prefix": "NO.",
+ "num_str": "005638",
+ "number": 5638
+ },
+ "id": 2513,
+ "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=2513\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=293793435\u0026native.theme=1\u0026navhide=1",
+ "name": "初音未来粉丝专属",
+ "type": 3
+ },
+ "face": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/293793435/dynamic",
+ "label": "",
+ "mid": 293793435,
+ "name": "社会易姐QwQ",
+ "official_verify": {
+ "desc": "",
+ "type": -1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "https://i0.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png",
+ "image_enhance": "https://i0.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp",
+ "image_enhance_frame": "https://i0.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png",
+ "n_pid": 2511,
+ "name": "初音未来13周年",
+ "pid": 2511
+ },
+ "pub_action": "",
+ "pub_location_text": "",
+ "pub_time": "12小时前",
+ "pub_ts": 1723914697,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1739116800000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "非常好冰箱贴,爱来自硬先生😋😋",
+ "text": "非常好冰箱贴,爱来自硬先生😋😋",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "orig_text": "@硬核拆解 ",
+ "rid": "427494870",
+ "text": "@硬核拆解 ",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ }
+ ],
+ "text": "非常好冰箱贴,爱来自硬先生😋😋@硬核拆解 "
+ },
+ "major": {
+ "draw": {
+ "id": 325813964,
+ "items": [
+ {
+ "height": 1277,
+ "size": 98.36,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/60d92e9e0d89a5394a2da69aba6f9710293793435.jpg",
+ "tags": [],
+ "width": 958
+ },
+ {
+ "height": 1080,
+ "size": 905.82,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/0f9bff1938d824ce206a569d539455df293793435.jpg",
+ "tags": [],
+ "width": 1440
+ },
+ {
+ "height": 1080,
+ "size": 693.59,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/ab3332061b793361ec08901ace1782db293793435.jpg",
+ "tags": [],
+ "width": 1440
+ },
+ {
+ "height": 1080,
+ "size": 988.15,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/8e62512db6d04b381dae3814adb95d5e293793435.jpg",
+ "tags": [],
+ "width": 1440
+ }
+ ]
+ },
+ "type": "MAJOR_TYPE_DRAW"
+ },
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 0,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 0,
+ "forbidden": false
+ },
+ "like": {
+ "count": 11,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_DRAW",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "966692349750018048",
+ "comment_type": 17,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "966692349750018048"
+ },
+ "id_str": "966692349750018048",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.375,
+ "width": 1.375
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.787,
+ "width": 0.787
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/face/78cdc5ba930ab171ebfe1ecc848cabcd4b0e0974.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1.375,
+ "width": 1.375
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "PENDENT_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/garb/open/aafcb0ea3a0bc237634240f98bf93b3b6ac2d337.png"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.7560000000000001,
+ "axis_y": 0.7726666666666667,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 3,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "36081646"
+ },
+ "decorate": {
+ "card_url": "https://i0.hdslb.com/bfs/garb/item/684f6dc32decd32fe9db901b81b83b9a1fe39574.png",
+ "fan": {
+ "color": "",
+ "color_format": null,
+ "is_fan": false,
+ "num_prefix": "",
+ "num_str": "",
+ "number": 0
+ },
+ "id": 49922,
+ "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=49922\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=36081646\u0026native.theme=1\u0026navhide=1",
+ "name": "古色花香洛天依",
+ "type": 1
+ },
+ "face": "https://i1.hdslb.com/bfs/face/78cdc5ba930ab171ebfe1ecc848cabcd4b0e0974.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/36081646/dynamic",
+ "label": "",
+ "mid": 36081646,
+ "name": "洛天依",
+ "official_verify": {
+ "desc": "",
+ "type": 0
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "https://i1.hdslb.com/bfs/garb/open/aafcb0ea3a0bc237634240f98bf93b3b6ac2d337.png",
+ "image_enhance": "https://i1.hdslb.com/bfs/garb/open/aafcb0ea3a0bc237634240f98bf93b3b6ac2d337.png",
+ "image_enhance_frame": "",
+ "n_pid": 1720437918001,
+ "name": "洛天依心律共鸣头像框",
+ "pid": -1843967695
+ },
+ "pub_action": "",
+ "pub_location_text": "",
+ "pub_time": "12小时前",
+ "pub_ts": 1723914002,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1764777600000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "恭喜",
+ "text": "恭喜",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "orig_text": "@从一到无穷大Infinity",
+ "rid": "697565874",
+ "text": "@从一到无穷大Infinity",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ },
+ {
+ "orig_text": "@qwq啊啊啊啊啊噜",
+ "rid": "189799722",
+ "text": "@qwq啊啊啊啊啊噜",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ },
+ {
+ "orig_text": "@有时名字不能取太长",
+ "rid": "3546388151405126",
+ "text": "@有时名字不能取太长",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ },
+ {
+ "orig_text": "等5位同学中奖,已私信通知,详情请点击抽奖查看。",
+ "text": "等5位同学中奖,已私信通知,详情请点击抽奖查看。",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "恭喜@从一到无穷大Infinity@qwq啊啊啊啊啊噜@有时名字不能取太长等5位同学中奖,已私信通知,详情请点击抽奖查看。"
+ },
+ "major": null,
+ "topic": null
+ },
+ "module_interaction": {
+ "items": [
+ {
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "明ちゃん王:",
+ "rid": "1280664625",
+ "text": "明ちゃん王:",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ },
+ {
+ "orig_text": "哇,非常不错呢,跟天依挺搭配的",
+ "text": "哇,非常不错呢,跟天依挺搭配的",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "emoji": {
+ "icon_url": "https://i0.hdslb.com/bfs/emote/63c9d1a31c0da745b61cdb35e0ecb28635675db2.png",
+ "size": 1,
+ "text": "[星星眼]",
+ "type": 1
+ },
+ "orig_text": "[星星眼]",
+ "text": "[星星眼]",
+ "type": "RICH_TEXT_NODE_TYPE_EMOJI"
+ }
+ ],
+ "text": "哇,非常不错呢,跟天依挺搭配的[星星眼]"
+ },
+ "type": 1
+ }
+ ]
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 88,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 12,
+ "forbidden": false
+ },
+ "like": {
+ "count": 3088,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "orig": {
+ "basic": {
+ "comment_id_str": "",
+ "comment_type": 0,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": ""
+ },
+ "id_str": "939874290505875465",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.375,
+ "width": 1.375
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.787,
+ "width": 0.787
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/face/78cdc5ba930ab171ebfe1ecc848cabcd4b0e0974.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1.375,
+ "width": 1.375
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "PENDENT_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/garb/open/aafcb0ea3a0bc237634240f98bf93b3b6ac2d337.png"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.7560000000000001,
+ "axis_y": 0.7726666666666667,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 3,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "36081646"
+ },
+ "decorate": {
+ "card_url": "https://i0.hdslb.com/bfs/garb/item/684f6dc32decd32fe9db901b81b83b9a1fe39574.png",
+ "fan": {
+ "color": "",
+ "color_format": null,
+ "is_fan": false,
+ "num_prefix": "",
+ "num_str": "",
+ "number": 0
+ },
+ "id": 49922,
+ "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=49922\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=36081646\u0026native.theme=1\u0026navhide=1",
+ "name": "古色花香洛天依",
+ "type": 1
+ },
+ "face": "https://i1.hdslb.com/bfs/face/78cdc5ba930ab171ebfe1ecc848cabcd4b0e0974.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/36081646/dynamic",
+ "label": "",
+ "mid": 36081646,
+ "name": "洛天依",
+ "official_verify": {
+ "desc": "",
+ "type": 0
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "https://i1.hdslb.com/bfs/garb/open/aafcb0ea3a0bc237634240f98bf93b3b6ac2d337.png",
+ "image_enhance": "https://i1.hdslb.com/bfs/garb/open/aafcb0ea3a0bc237634240f98bf93b3b6ac2d337.png",
+ "image_enhance_frame": "",
+ "n_pid": 1720437918001,
+ "name": "洛天依心律共鸣头像框",
+ "pid": -1843967695
+ },
+ "pub_action": "",
+ "pub_time": "",
+ "pub_ts": 1717669936,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1764777600000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": {
+ "goods": {
+ "head_icon": "",
+ "head_text": "UP主的推荐",
+ "items": [
+ {
+ "brief": "",
+ "cover": "https://i0.hdslb.com/bfs/mall/mall/ef/9d/2cb00b3649bcb232f62b3169be95407d.png",
+ "id": "901140704120020992",
+ "jump_desc": "去看看",
+ "jump_url": "https://mall.bilibili.com/neul-next/detailuniversal/detail.html?isMerchant=1\u0026page=detailuniversal_detail\u0026saleType=0\u0026itemsId=10406556\u0026loadingShow=1\u0026noTitleBar=1\u0026msource=cps_Mdynamic_36081646\u0026from=\u0026contentId=\u0026track_id=__BGMT__",
+ "name": "天羽川 洛天依 短袖水手服纯色裙长短袜套装",
+ "price": "¥49"
+ }
+ ],
+ "jump_url": ""
+ },
+ "type": "ADDITIONAL_TYPE_GOODS"
+ },
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "互动抽奖",
+ "rid": "301330",
+ "text": "互动抽奖",
+ "type": "RICH_TEXT_NODE_TYPE_LOTTERY"
+ },
+ {
+ "orig_text": "洛天依X",
+ "text": "洛天依X",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "orig_text": "@天羽川JK ",
+ "rid": "394187581",
+ "text": "@天羽川JK ",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ },
+ {
+ "orig_text": "联名水手服\u0026长短袜套装 新品预售即将开启啦!\n转发关注天依,揪5位小伙伴送出联名款长短袜1双~",
+ "text": "联名水手服\u0026长短袜套装 新品预售即将开启啦!\n转发关注天依,揪5位小伙伴送出联名款长短袜1双~",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "emoji": {
+ "icon_url": "http://i0.hdslb.com/bfs/emote/9826fb4f77944387767a37552143fbec40159fa5.png",
+ "size": 2,
+ "text": "[洛天依_礼物]",
+ "type": 3
+ },
+ "orig_text": "[洛天依_礼物]",
+ "text": "[洛天依_礼物]",
+ "type": "RICH_TEXT_NODE_TYPE_EMOJI"
+ },
+ {
+ "orig_text": "\n\n❀联名服饰\n-洛天依联名款水手服\n-洛天依还原款长短袜\n\n❀预售时间\n6月8日20:00 起\n\n日常\u0026cos皆宜,大家有没有发现结合了天依的哪些元素呀?",
+ "text": "\n\n❀联名服饰\n-洛天依联名款水手服\n-洛天依还原款长短袜\n\n❀预售时间\n6月8日20:00 起\n\n日常\u0026cos皆宜,大家有没有发现结合了天依的哪些元素呀?",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "emoji": {
+ "icon_url": "https://i0.hdslb.com/bfs/emote/8034b3cb55370d19b1683eb38e7747c5c6c5dba6.png",
+ "size": 2,
+ "text": "[洛天依蝶变_星星眼]",
+ "type": 3
+ },
+ "orig_text": "[洛天依蝶变_星星眼]",
+ "text": "[洛天依蝶变_星星眼]",
+ "type": "RICH_TEXT_NODE_TYPE_EMOJI"
+ },
+ {
+ "orig_text": "\n",
+ "text": "\n",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "互动抽奖洛天依X@天羽川JK 联名水手服\u0026长短袜套装 新品预售即将开启啦!\n转发关注天依,揪5位小伙伴送出联名款长短袜1双~[洛天依_礼物]\n\n❀联名服饰\n-洛天依联名款水手服\n-洛天依还原款长短袜\n\n❀预售时间\n6月8日20:00 起\n\n日常\u0026cos皆宜,大家有没有发现结合了天依的哪些元素呀?[洛天依蝶变_星星眼]\n"
+ },
+ "major": {
+ "draw": {
+ "id": 318324614,
+ "items": [
+ {
+ "height": 1280,
+ "size": 662.59,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/1f23b61786eadb8c3e3f4c137730715036081646.jpg",
+ "tags": [],
+ "width": 904
+ },
+ {
+ "height": 1280,
+ "size": 614.83,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/7d679216308bb7c65aeba38b4eafdd8936081646.jpg",
+ "tags": [],
+ "width": 904
+ }
+ ]
+ },
+ "type": "MAJOR_TYPE_DRAW"
+ },
+ "topic": {
+ "id": 1156147,
+ "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1156147\u0026topic_name=%E5%A4%A9%E4%BE%9D%E7%9A%84%E5%91%A8%E8%BE%B9",
+ "name": "天依的周边"
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_DRAW",
+ "visible": true
+ },
+ "type": "DYNAMIC_TYPE_FORWARD",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "325807840",
+ "comment_type": 11,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "325807840"
+ },
+ "id_str": "966677390370537527",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.35,
+ "width": 1.35
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.675,
+ "axis_y": 0.675,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1,
+ "width": 1
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/face/2b9ee4a9c99f1006f3c800c1317f7850ad6f3d0d.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.8000000000000002,
+ "axis_y": 0.8000000000000002,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 4,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "485703766"
+ },
+ "face": "https://i1.hdslb.com/bfs/face/2b9ee4a9c99f1006f3c800c1317f7850ad6f3d0d.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/485703766/dynamic",
+ "label": "",
+ "mid": 485703766,
+ "name": "英伟达GeForce",
+ "official_verify": {
+ "desc": "",
+ "type": 1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0,
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "",
+ "pub_location_text": "",
+ "pub_time": "13小时前",
+ "pub_ts": 1723910520,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 2000563200000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/adb599797dd171e2d3d6d012f448b49679258344.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/sGu57N6pgK.png",
+ "label_theme": "ten_annual_vip",
+ "path": "",
+ "text": "十年大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "直面天命,还有 2 天!\nRTX. ON!\n\n投稿来自于:Bilibili",
+ "text": "直面天命,还有 2 天!\nRTX. ON!\n\n投稿来自于:Bilibili",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "orig_text": "@祗殁",
+ "rid": "12299496",
+ "text": "@祗殁",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ }
+ ],
+ "text": "直面天命,还有 2 天!\nRTX. ON!\n\n投稿来自于:Bilibili@祗殁"
+ },
+ "major": {
+ "draw": {
+ "id": 325807840,
+ "items": [
+ {
+ "height": 1073,
+ "size": 66.29785,
+ "src": "https://i0.hdslb.com/bfs/new_dyn/b47b271135c7c496923d76c6b794e596485703766.png",
+ "tags": [],
+ "width": 1213
+ }
+ ]
+ },
+ "type": "MAJOR_TYPE_DRAW"
+ },
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 105,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 7,
+ "forbidden": false
+ },
+ "like": {
+ "count": 872,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_DRAW",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "1606450518",
+ "comment_type": 1,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "1606450518"
+ },
+ "id_str": "966647978674618373",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.35,
+ "width": 1.35
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.675,
+ "axis_y": 0.675,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1,
+ "width": 1
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/face/bb23fb77a033759a145f8eda7b5e3a15386f637c.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.8000000000000002,
+ "axis_y": 0.8000000000000002,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 3,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "1503187"
+ },
+ "decorate": {
+ "card_url": "https://i0.hdslb.com/bfs/archive/e495de36cab75f9a610fb6f2d0ba29a87b794cc6.png",
+ "fan": {
+ "color": "#BFC8D2",
+ "color_format": {
+ "colors": [
+ "#B8C7D0FF",
+ "#A2A7B0FF"
+ ],
+ "end_point": "100,100",
+ "gradients": [
+ 0,
+ 100
+ ],
+ "start_point": "0,0"
+ },
+ "is_fan": true,
+ "num_prefix": "NO.",
+ "num_str": "002484",
+ "number": 2484
+ },
+ "id": 66898,
+ "jump_url": "https://www.bilibili.com/h5/mall/digital-card/home?act_id=108\u0026from=post\u0026f_source=garb\u0026-Abrowser=live\u0026hybrid_set_header=2\u0026navhide=1\u0026anchor_task=1",
+ "name": "BLG 信念干杯勋章",
+ "type": 3
+ },
+ "face": "https://i1.hdslb.com/bfs/face/bb23fb77a033759a145f8eda7b5e3a15386f637c.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/1503187/dynamic",
+ "label": "",
+ "mid": 1503187,
+ "name": "和谐号舰长",
+ "official_verify": {
+ "desc": "",
+ "type": 0
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0,
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "投稿了视频",
+ "pub_location_text": "",
+ "pub_time": "昨天 22:07",
+ "pub_ts": 1723903670,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1732204800000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": null,
+ "major": {
+ "archive": {
+ "aid": "1606450518",
+ "badge": {
+ "bg_color": "#FB7299",
+ "color": "#FFFFFF",
+ "icon_url": null,
+ "text": "投稿视频"
+ },
+ "bvid": "BV152421Z7bV",
+ "cover": "http://i1.hdslb.com/bfs/archive/e87786447779ff1a4fb2d941a3321f9750a65300.jpg",
+ "desc": "多来点这样的更新,太快乐了",
+ "disable_preview": 0,
+ "duration_text": "03:39",
+ "jump_url": "//www.bilibili.com/video/BV152421Z7bV/",
+ "stat": {
+ "danmaku": "406",
+ "play": "6.6万"
+ },
+ "title": "官方:矿车怎么就不能是飞船?",
+ "type": 1
+ },
+ "type": "MAJOR_TYPE_ARCHIVE"
+ },
+ "topic": null
+ },
+ "module_interaction": {
+ "items": [
+ {
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "吉吉国民开水儿:",
+ "rid": "43514654",
+ "text": "吉吉国民开水儿:",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ },
+ {
+ "orig_text": "致敬传奇宰人航空大师张泰玩",
+ "text": "致敬传奇宰人航空大师张泰玩",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "致敬传奇宰人航空大师张泰玩"
+ },
+ "type": 1
+ }
+ ]
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 218,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 15,
+ "forbidden": false
+ },
+ "like": {
+ "count": 5694,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_AV",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "1506427569",
+ "comment_type": 1,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "1506427569"
+ },
+ "id_str": "966629209415876628",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.35,
+ "width": 1.35
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.675,
+ "axis_y": 0.675,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1,
+ "width": 1
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/face/978ea07f22e54c2e62f01def8e815b59adacc5d0.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.8000000000000002,
+ "axis_y": 0.8000000000000002,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 4,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "407045223"
+ },
+ "decorate": {
+ "card_url": "https://i0.hdslb.com/bfs/vip/a9e3d993c7a15e88ce0bf714a142f7d2b44121e2.png",
+ "fan": {
+ "color": "",
+ "color_format": null,
+ "is_fan": false,
+ "num_prefix": "",
+ "num_str": "",
+ "number": 0
+ },
+ "id": 28,
+ "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=28\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=407045223\u0026native.theme=1\u0026navhide=1",
+ "name": "2233娘",
+ "type": 1
+ },
+ "face": "https://i0.hdslb.com/bfs/face/978ea07f22e54c2e62f01def8e815b59adacc5d0.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/407045223/dynamic",
+ "label": "",
+ "mid": 407045223,
+ "name": "二次元的中科院物理所",
+ "official_verify": {
+ "desc": "",
+ "type": 1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0,
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "投稿了视频",
+ "pub_location_text": "",
+ "pub_time": "昨天 20:55",
+ "pub_ts": 1723899301,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1745769600000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "光是什么?光是我们看到的五彩斑斓的世界,光是自然界能量的来源,光是一种电磁波。我们利用光可以做些什么?如何收集太阳的能量?如何产生光?让我们在本集课程中寻找这些问题的答案~ 错过直播的小伙伴可以来这里补课~",
+ "text": "光是什么?光是我们看到的五彩斑斓的世界,光是自然界能量的来源,光是一种电磁波。我们利用光可以做些什么?如何收集太阳的能量?如何产生光?让我们在本集课程中寻找这些问题的答案~ 错过直播的小伙伴可以来这里补课~",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "光是什么?光是我们看到的五彩斑斓的世界,光是自然界能量的来源,光是一种电磁波。我们利用光可以做些什么?如何收集太阳的能量?如何产生光?让我们在本集课程中寻找这些问题的答案~ 错过直播的小伙伴可以来这里补课~"
+ },
+ "major": {
+ "archive": {
+ "aid": "1506427569",
+ "badge": {
+ "bg_color": "#FB7299",
+ "color": "#FFFFFF",
+ "icon_url": null,
+ "text": "投稿视频"
+ },
+ "bvid": "BV1uS42197b5",
+ "cover": "http://i1.hdslb.com/bfs/archive/e13db3349cdc91a00041be9730bbbe42c3e8df55.jpg",
+ "desc": "光是什么?光是我们看到的五彩斑斓的世界,光是自然界能量的来源,光是一种电磁波。我们利用光可以做些什么?如何收集太阳的能量?如何产生光?让我们在本集课程中寻找这些问题的答案~",
+ "disable_preview": 0,
+ "duration_text": "44:45",
+ "jump_url": "//www.bilibili.com/video/BV1uS42197b5/",
+ "stat": {
+ "danmaku": "1",
+ "play": "3364"
+ },
+ "title": "光照下多姿多彩的世界——光化学和我们的生活【中国科学院科学公开课S06E15】",
+ "type": 1
+ },
+ "type": "MAJOR_TYPE_ARCHIVE"
+ },
+ "topic": {
+ "id": 1073121,
+ "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1073121\u0026topic_name=%E4%B8%AD%E5%9B%BD%E7%A7%91%E5%AD%A6%E9%99%A2%E7%A7%91%E5%AD%A6%E5%85%AC%E5%BC%80%E8%AF%BE",
+ "name": "中国科学院科学公开课"
+ }
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 3,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 2,
+ "forbidden": false
+ },
+ "like": {
+ "count": 741,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_AV",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "325765582",
+ "comment_type": 11,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "325765582"
+ },
+ "id_str": "966583356402696224",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.35,
+ "width": 1.35
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.675,
+ "axis_y": 0.675,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1,
+ "width": 1
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/face/c1733474892caa45952b2c09a89323157df7129a.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.8000000000000002,
+ "axis_y": 0.8000000000000002,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 3,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "946974"
+ },
+ "face": "https://i0.hdslb.com/bfs/face/c1733474892caa45952b2c09a89323157df7129a.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/946974/dynamic",
+ "label": "",
+ "mid": 946974,
+ "name": "影视飓风",
+ "official_verify": {
+ "desc": "",
+ "type": 0
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0,
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "",
+ "pub_location_text": "",
+ "pub_time": "昨天 17:57",
+ "pub_ts": 1723888625,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1975248000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "https://i0.hdslb.com/bfs/activity-plat/static/20220608/e369244d0b14644f5e1a06431e22a4d5/wltavwHAkL.gif",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/802418ff03911645648b63aa193ba67997b5a0bc.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/8u7iRTPE7N.png",
+ "label_theme": "ten_annual_vip",
+ "path": "",
+ "text": "十年大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": {
+ "reserve": {
+ "button": {
+ "check": {
+ "icon_url": "",
+ "text": "已预约"
+ },
+ "status": 1,
+ "type": 2,
+ "uncheck": {
+ "icon_url": "https://i0.hdslb.com/bfs/album/1d6af68e116985828780dd843ef435ccd6307e63.png",
+ "text": "预约"
+ }
+ },
+ "desc1": {
+ "style": 0,
+ "text": "今天 20:00 直播"
+ },
+ "desc2": {
+ "style": 0,
+ "text": "4153人预约",
+ "visible": true
+ },
+ "jump_url": "",
+ "reserve_total": 4153,
+ "rid": 4003487,
+ "state": 0,
+ "stype": 2,
+ "title": "直播预约:飓风商店夏促来了!",
+ "up_mid": 946974
+ },
+ "type": "ADDITIONAL_TYPE_RESERVE"
+ },
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "飓风商店夏季活动来啦!\n8月18日周日晚20:00,直播间每15分钟天选抽送【热升华键帽】!\n\n👇新品看这边\n呼声超高的mini托特挂件、防泼水拎包、新版车贴,首发好价!\n👇福利看这边\n经典热销款全场9折,夏秋两季可穿,硬件同享折扣!\n\n总之,记得预约!",
+ "text": "飓风商店夏季活动来啦!\n8月18日周日晚20:00,直播间每15分钟天选抽送【热升华键帽】!\n\n👇新品看这边\n呼声超高的mini托特挂件、防泼水拎包、新版车贴,首发好价!\n👇福利看这边\n经典热销款全场9折,夏秋两季可穿,硬件同享折扣!\n\n总之,记得预约!",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "飓风商店夏季活动来啦!\n8月18日周日晚20:00,直播间每15分钟天选抽送【热升华键帽】!\n\n👇新品看这边\n呼声超高的mini托特挂件、防泼水拎包、新版车贴,首发好价!\n👇福利看这边\n经典热销款全场9折,夏秋两季可穿,硬件同享折扣!\n\n总之,记得预约!"
+ },
+ "major": {
+ "draw": {
+ "id": 325765582,
+ "items": [
+ {
+ "height": 9829,
+ "size": 5198.785,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/9d690134c84c03f6bacf83cf4d21bd73946974.jpg",
+ "tags": [],
+ "width": 2251
+ }
+ ]
+ },
+ "type": "MAJOR_TYPE_DRAW"
+ },
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 3104,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 154,
+ "forbidden": false
+ },
+ "like": {
+ "count": 4703,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_DRAW",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "325753910",
+ "comment_type": 11,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "325753910"
+ },
+ "id_str": "966552037496979456",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.375,
+ "width": 1.375
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.787,
+ "width": 0.787
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_animation": {
+ "webp_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 4
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1.375,
+ "width": 1.375
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "PENDENT_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.7560000000000001,
+ "axis_y": 0.7726666666666667,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 3,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "686127"
+ },
+ "face": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/686127/dynamic",
+ "label": "",
+ "mid": 686127,
+ "name": "籽岷",
+ "official_verify": {
+ "desc": "",
+ "type": 0
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png",
+ "image_enhance": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png",
+ "image_enhance_frame": "",
+ "n_pid": 2066,
+ "name": "百年大会员",
+ "pid": 2066
+ },
+ "pub_action": "",
+ "pub_location_text": "",
+ "pub_time": "昨天 15:55",
+ "pub_ts": 1723881333,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 4845196800000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/c16005a5b39164b3536cbd45618a5edd597a1c51.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/Pzrd8zmpQD.png",
+ "label_theme": "hundred_annual_vip",
+ "path": "",
+ "text": "百年大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": {
+ "type": "ADDITIONAL_TYPE_UPOWER_LOTTERY",
+ "upower_lottery": {
+ "button": {
+ "jump_style": {
+ "icon_url": "",
+ "text": "6元充电"
+ },
+ "jump_url": "https://www.bilibili.com/h5/upower/index?mid=686127\u0026default_level=10\u0026levels=10\u0026navhide=1\u0026lotteryId=313280\u0026businessId=966552037496979456\u0026prePage=lotteryCard",
+ "type": 1
+ },
+ "desc": {
+ "jump_url": "https://www.bilibili.com/h5/lottery/result?business_id=966552037496979456\u0026business_type=12",
+ "style": 1,
+ "text": "【籽岷定制手偶】*10份"
+ },
+ "hint": {
+ "style": 0,
+ "text": "加入当前UP主的「6元档包月充电」即可参与"
+ },
+ "jump_url": "https://www.bilibili.com/h5/lottery/result?business_id=966552037496979456\u0026business_type=12",
+ "rid": 313280,
+ "state": 0,
+ "title": "石粒专属抽奖",
+ "up_mid": 686127,
+ "upower_action_state": 2,
+ "upower_level": 10
+ }
+ },
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "emoji": {
+ "icon_url": "https://i0.hdslb.com/bfs/garb/ebeae1235fa9397e6e5598ce1e5e2955bb345a8b.png",
+ "size": 2,
+ "text": "[UPOWER_686127_闪亮登场]",
+ "type": 11
+ },
+ "orig_text": "[UPOWER_686127_闪亮登场]",
+ "text": "[UPOWER_686127_闪亮登场]",
+ "type": "RICH_TEXT_NODE_TYPE_EMOJI"
+ },
+ {
+ "orig_text": "今天给大家奉上一波新福利,抽10人(籽岷定制手偶)~\n感谢一直为我包月充电的观众们~\n活动开奖时间为8月21日23点59分,大家快来抽奖吧~",
+ "text": "今天给大家奉上一波新福利,抽10人(籽岷定制手偶)~\n感谢一直为我包月充电的观众们~\n活动开奖时间为8月21日23点59分,大家快来抽奖吧~",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "[UPOWER_686127_闪亮登场]今天给大家奉上一波新福利,抽10人(籽岷定制手偶)~\n感谢一直为我包月充电的观众们~\n活动开奖时间为8月21日23点59分,大家快来抽奖吧~"
+ },
+ "major": {
+ "draw": {
+ "id": 325753910,
+ "items": [
+ {
+ "height": 800,
+ "size": 596.8096,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/1b03b7888b105765d985f3093e5d6e4a686127.png",
+ "tags": [],
+ "width": 800
+ },
+ {
+ "height": 800,
+ "size": 393.75098,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/b69ee39531bf8864471ec9fbc7de4402686127.png",
+ "tags": [],
+ "width": 800
+ },
+ {
+ "height": 800,
+ "size": 364.8711,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/0c3fb5268abe60023b0053902bccde66686127.png",
+ "tags": [],
+ "width": 800
+ },
+ {
+ "height": 800,
+ "size": 198.65234,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/693a40f83d2ac6a4952c9541365e1265686127.png",
+ "tags": [],
+ "width": 800
+ }
+ ]
+ },
+ "type": "MAJOR_TYPE_DRAW"
+ },
+ "topic": {
+ "id": 1006239,
+ "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1006239\u0026topic_name=%E7%B1%BD%E5%B2%B7%E5%93%81%E9%89%B4%E5%9B%A2",
+ "name": "籽岷品鉴团"
+ }
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 28,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 2,
+ "forbidden": false
+ },
+ "like": {
+ "count": 2686,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_DRAW",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "1456450441",
+ "comment_type": 1,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "1456450441"
+ },
+ "id_str": "966513421411418114",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.35,
+ "width": 1.35
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.675,
+ "axis_y": 0.675,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1,
+ "width": 1
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/face/94183796acd85f2e80f3dca740bc1c3d5cae6410.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.8000000000000002,
+ "axis_y": 0.8000000000000002,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 1,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "3493131246897478"
+ },
+ "face": "https://i1.hdslb.com/bfs/face/94183796acd85f2e80f3dca740bc1c3d5cae6410.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/3493131246897478/dynamic",
+ "label": "",
+ "mid": 3493131246897478,
+ "name": "电解碳酸钠",
+ "official_verify": {
+ "desc": "",
+ "type": -1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0,
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "投稿了视频",
+ "pub_location_text": "",
+ "pub_time": "昨天 13:25",
+ "pub_ts": 1723872342,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1744732800000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "给脚专用的“按键” 我觉得他不应该这么贵",
+ "text": "给脚专用的“按键” 我觉得他不应该这么贵",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "给脚专用的“按键” 我觉得他不应该这么贵"
+ },
+ "major": {
+ "archive": {
+ "aid": "1456450441",
+ "badge": {
+ "bg_color": "#FB7299",
+ "color": "#FFFFFF",
+ "icon_url": null,
+ "text": "投稿视频"
+ },
+ "bvid": "BV1Yi421a7FC",
+ "cover": "http://i1.hdslb.com/bfs/archive/b56700e0a1d28ecff2ff135a7cc51e9b09cace79.jpg",
+ "desc": "用到的配件:\n·带有热插拔轴体功能的任何全新\u0026二手键盘 只要功能正常即可\n·追求极致性价比的 可以直接买剪线键盘进行改造\n·TFS-1脚踏脚踩开关(我买的3.2一个)\n要注意这些脚踏开关有可能是3线 分为常闭和常开\n对于这个型号的开关 我接的是红线+白线 为踩下触发\n·焊油(推荐针管式单手操作)",
+ "disable_preview": 0,
+ "duration_text": "06:01",
+ "jump_url": "//www.bilibili.com/video/BV1Yi421a7FC/",
+ "stat": {
+ "danmaku": "149",
+ "play": "2.7万"
+ },
+ "title": "商家别看!脚踩键盘DIY超值方案?市场售价凭啥那么贵!",
+ "type": 1
+ },
+ "type": "MAJOR_TYPE_ARCHIVE"
+ },
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 161,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 17,
+ "forbidden": false
+ },
+ "like": {
+ "count": 2699,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_AV",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "966495069003579398",
+ "comment_type": 17,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "966495069003579398"
+ },
+ "id_str": "966495069003579398",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.35,
+ "width": 1.35
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.675,
+ "axis_y": 0.675,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1,
+ "width": 1
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/face/c1733474892caa45952b2c09a89323157df7129a.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.8000000000000002,
+ "axis_y": 0.8000000000000002,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 3,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "946974"
+ },
+ "face": "https://i0.hdslb.com/bfs/face/c1733474892caa45952b2c09a89323157df7129a.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/946974/dynamic",
+ "label": "",
+ "mid": 946974,
+ "name": "影视飓风",
+ "official_verify": {
+ "desc": "",
+ "type": 0
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0,
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "",
+ "pub_location_text": "",
+ "pub_time": "昨天 12:14",
+ "pub_ts": 1723868069,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1975248000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "https://i0.hdslb.com/bfs/activity-plat/static/20220608/e369244d0b14644f5e1a06431e22a4d5/wltavwHAkL.gif",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/802418ff03911645648b63aa193ba67997b5a0bc.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/8u7iRTPE7N.png",
+ "label_theme": "ten_annual_vip",
+ "path": "",
+ "text": "十年大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "周末啦,希望大家喜欢这期科普分享!我们的官网也加上了电影节的科普和信息汇总,欢迎大家取用~",
+ "text": "周末啦,希望大家喜欢这期科普分享!我们的官网也加上了电影节的科普和信息汇总,欢迎大家取用~",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "周末啦,希望大家喜欢这期科普分享!我们的官网也加上了电影节的科普和信息汇总,欢迎大家取用~"
+ },
+ "major": null,
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 101,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 7,
+ "forbidden": false
+ },
+ "like": {
+ "count": 5247,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "orig": {
+ "basic": {
+ "comment_id_str": "",
+ "comment_type": 0,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": ""
+ },
+ "id_str": "966197633939931139",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.35,
+ "width": 1.35
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.675,
+ "axis_y": 0.675,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1,
+ "width": 1
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/face/c1733474892caa45952b2c09a89323157df7129a.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.8000000000000002,
+ "axis_y": 0.8000000000000002,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 3,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "946974"
+ },
+ "face": "https://i0.hdslb.com/bfs/face/c1733474892caa45952b2c09a89323157df7129a.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/946974/dynamic",
+ "label": "",
+ "mid": 946974,
+ "name": "影视飓风",
+ "official_verify": {
+ "desc": "",
+ "type": 0
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0,
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "投稿了视频",
+ "pub_time": "",
+ "pub_ts": 1723798817,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1975248000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "https://i0.hdslb.com/bfs/activity-plat/static/20220608/e369244d0b14644f5e1a06431e22a4d5/wltavwHAkL.gif",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/802418ff03911645648b63aa193ba67997b5a0bc.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/8u7iRTPE7N.png",
+ "label_theme": "ten_annual_vip",
+ "path": "",
+ "text": "十年大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "挺久没有更新的看懂电影系列!",
+ "text": "挺久没有更新的看懂电影系列!",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "挺久没有更新的看懂电影系列!"
+ },
+ "major": {
+ "archive": {
+ "aid": "1506437840",
+ "badge": {
+ "bg_color": "#FB7299",
+ "color": "#FFFFFF",
+ "icon_url": null,
+ "text": "投稿视频"
+ },
+ "bvid": "BV13S42197ja",
+ "cover": "http://i1.hdslb.com/bfs/archive/50d4705b2d804a76f3c19af269dd7804479aa94e.jpg",
+ "desc": "国内外总共有3000多个大大小小的电影节。那么,短片可以参加电影节吗?什么时候投递获奖概率才大一些?这次我们想和你分享一些投递和参加电影节的门道。我们还整理了一份有关电影节的科普文档,可以来我们的官网看看:https://filmfestival.ysjf.com/。\n如果你喜欢这期视频,请多多支持我们,并将视频分享给其他朋友一起看看!",
+ "disable_preview": 0,
+ "duration_text": "10:55",
+ "jump_url": "//www.bilibili.com/video/BV13S42197ja/",
+ "stat": {
+ "danmaku": "2067",
+ "play": "64.1万"
+ },
+ "title": "全世界3000多个电影节,都在办些啥?",
+ "type": 1
+ },
+ "type": "MAJOR_TYPE_ARCHIVE"
+ },
+ "topic": null
+ }
+ },
+ "type": "DYNAMIC_TYPE_AV",
+ "visible": true
+ },
+ "type": "DYNAMIC_TYPE_FORWARD",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "37185041",
+ "comment_type": 12,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "37185041"
+ },
+ "id_str": "966484129969340422",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.35,
+ "width": 1.35
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.675,
+ "axis_y": 0.675,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1,
+ "width": 1
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/face/978ea07f22e54c2e62f01def8e815b59adacc5d0.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.8000000000000002,
+ "axis_y": 0.8000000000000002,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 4,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "407045223"
+ },
+ "decorate": {
+ "card_url": "https://i0.hdslb.com/bfs/vip/a9e3d993c7a15e88ce0bf714a142f7d2b44121e2.png",
+ "fan": {
+ "color": "",
+ "color_format": null,
+ "is_fan": false,
+ "num_prefix": "",
+ "num_str": "",
+ "number": 0
+ },
+ "id": 28,
+ "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=28\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=407045223\u0026native.theme=1\u0026navhide=1",
+ "name": "2233娘",
+ "type": 1
+ },
+ "face": "https://i0.hdslb.com/bfs/face/978ea07f22e54c2e62f01def8e815b59adacc5d0.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/407045223/dynamic",
+ "label": "",
+ "mid": 407045223,
+ "name": "二次元的中科院物理所",
+ "official_verify": {
+ "desc": "",
+ "type": 1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0,
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "投稿了文章",
+ "pub_location_text": "",
+ "pub_time": "昨天 11:32",
+ "pub_ts": 1723865522,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1745769600000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": null,
+ "major": {
+ "article": {
+ "covers": [
+ "https://i0.hdslb.com/bfs/article/708ab38ac38df8fe7851a63c0258fa64407045223.jpg"
+ ],
+ "desc": "经历过密码解锁和手势解锁后 真感慨指纹解锁是天才的创造 可惜遇到湿手油手经常失效 甚至擦干了还是这样 这是为什么呢问答导航Q1 鸡蛋在母鸡体内有气室吗?Q2 为什么弹簧是螺旋型的?Q3 闪电为什么总是自上而下,有没有自下而上的闪电呢?Q4 当一束光使电子发生了能级跃迁,原先的光子去哪儿了,消失了吗?Q5 为什么有茶叶的水在转时茶叶会趋向中间而不是两边呢?Q6 为什么塑料相比于其它物质,更容易起静电?Q7 为什么会有空集?空集的存在有什么物理意义? Q8 为什么有纹理的木擦了木蜡油之后会纹理变深,更容易被看",
+ "id": 37185041,
+ "jump_url": "//www.bilibili.com/read/cv37185041/",
+ "label": "16.3万阅读",
+ "title": "手指沾水擦干但是指纹识别还是失败,这是什么原因?| No.422"
+ },
+ "type": "MAJOR_TYPE_ARTICLE"
+ },
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 23,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 7,
+ "forbidden": false
+ },
+ "like": {
+ "count": 727,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_ARTICLE",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "966475883631083553",
+ "comment_type": 17,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "966475883631083553"
+ },
+ "id_str": "966475883631083553",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.375,
+ "width": 1.375
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.787,
+ "width": 0.787
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1.375,
+ "width": 1.375
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "PENDENT_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/garb/item/fe1267f786bf69f1471aff715f8d38ec0e486df5.png"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.7560000000000001,
+ "axis_y": 0.7726666666666667,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 4,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "layers": [
+ {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.787,
+ "width": 0.787
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ {
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1.375,
+ "width": 1.375
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "PENDENT_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_animation": {
+ "webp_src": {
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/garb/item/0aa9fd33133ed3fd9f11c857cc6ca848d6804113.webp"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 4
+ },
+ "visible": true
+ }
+ ]
+ },
+ {
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.7560000000000001,
+ "axis_y": 0.7726666666666667,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 4,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "mid": "233114659"
+ },
+ "decorate": {
+ "card_url": "https://i0.hdslb.com/bfs/garb/bb140043341137b879e957d09b649ce7c3257820.png",
+ "fan": {
+ "color": "#903AC2",
+ "color_format": {
+ "colors": [
+ "#903AC2FF",
+ "#903AC2FF"
+ ],
+ "end_point": "0,100",
+ "gradients": [
+ 0,
+ 100
+ ],
+ "start_point": "0,0"
+ },
+ "is_fan": true,
+ "num_prefix": "NO.",
+ "num_str": "000001",
+ "number": 1
+ },
+ "id": 1706163888001,
+ "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=1706163888001\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=233114659\u0026native.theme=1\u0026navhide=1",
+ "name": "龙腾啾跃-动态卡片粉丝",
+ "type": 3
+ },
+ "face": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/233114659/dynamic",
+ "label": "",
+ "mid": 233114659,
+ "name": "碧蓝航线",
+ "official_verify": {
+ "desc": "",
+ "type": 1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "https://i1.hdslb.com/bfs/garb/item/fe1267f786bf69f1471aff715f8d38ec0e486df5.png",
+ "image_enhance": "https://i1.hdslb.com/bfs/garb/item/0aa9fd33133ed3fd9f11c857cc6ca848d6804113.webp",
+ "image_enhance_frame": "https://i1.hdslb.com/bfs/garb/item/3052b412defbbc7704e887fefde8de539e8027c5.png",
+ "n_pid": 1987,
+ "name": "碧蓝航线2020",
+ "pid": 1987
+ },
+ "pub_action": "",
+ "pub_location_text": "",
+ "pub_time": "昨天 11:00",
+ "pub_ts": 1723863602,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1729526400000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "恭喜",
+ "text": "恭喜",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "orig_text": "@两百斤的橘猫猫0w0",
+ "rid": "8391364",
+ "text": "@两百斤的橘猫猫0w0",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ },
+ {
+ "orig_text": "@一位隐身的Z23厨",
+ "rid": "382382091",
+ "text": "@一位隐身的Z23厨",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ },
+ {
+ "orig_text": "@默涛默随波",
+ "rid": "230373473",
+ "text": "@默涛默随波",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ },
+ {
+ "orig_text": "等8位同学中奖,已私信通知,详情请点击抽奖查看。",
+ "text": "等8位同学中奖,已私信通知,详情请点击抽奖查看。",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "恭喜@两百斤的橘猫猫0w0@一位隐身的Z23厨@默涛默随波等8位同学中奖,已私信通知,详情请点击抽奖查看。"
+ },
+ "major": null,
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 227,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 20,
+ "forbidden": false
+ },
+ "like": {
+ "count": 3126,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "orig": {
+ "basic": {
+ "comment_id_str": "",
+ "comment_type": 0,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": ""
+ },
+ "id_str": "963893770559946786",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.375,
+ "width": 1.375
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.787,
+ "width": 0.787
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1.375,
+ "width": 1.375
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "PENDENT_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/garb/item/fe1267f786bf69f1471aff715f8d38ec0e486df5.png"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.7560000000000001,
+ "axis_y": 0.7726666666666667,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 4,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "layers": [
+ {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.787,
+ "width": 0.787
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ {
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1.375,
+ "width": 1.375
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "PENDENT_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_animation": {
+ "webp_src": {
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/garb/item/0aa9fd33133ed3fd9f11c857cc6ca848d6804113.webp"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 4
+ },
+ "visible": true
+ }
+ ]
+ },
+ {
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.7560000000000001,
+ "axis_y": 0.7726666666666667,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 4,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "mid": "233114659"
+ },
+ "decorate": {
+ "card_url": "https://i0.hdslb.com/bfs/garb/bb140043341137b879e957d09b649ce7c3257820.png",
+ "fan": {
+ "color": "#903AC2",
+ "color_format": {
+ "colors": [
+ "#903AC2FF",
+ "#903AC2FF"
+ ],
+ "end_point": "0,100",
+ "gradients": [
+ 0,
+ 100
+ ],
+ "start_point": "0,0"
+ },
+ "is_fan": true,
+ "num_prefix": "NO.",
+ "num_str": "000001",
+ "number": 1
+ },
+ "id": 1706163888001,
+ "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=1706163888001\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=233114659\u0026native.theme=1\u0026navhide=1",
+ "name": "龙腾啾跃-动态卡片粉丝",
+ "type": 3
+ },
+ "face": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/233114659/dynamic",
+ "label": "",
+ "mid": 233114659,
+ "name": "碧蓝航线",
+ "official_verify": {
+ "desc": "",
+ "type": 1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "https://i1.hdslb.com/bfs/garb/item/fe1267f786bf69f1471aff715f8d38ec0e486df5.png",
+ "image_enhance": "https://i1.hdslb.com/bfs/garb/item/0aa9fd33133ed3fd9f11c857cc6ca848d6804113.webp",
+ "image_enhance_frame": "https://i1.hdslb.com/bfs/garb/item/3052b412defbbc7704e887fefde8de539e8027c5.png",
+ "n_pid": 1987,
+ "name": "碧蓝航线2020",
+ "pid": 1987
+ },
+ "pub_action": "",
+ "pub_time": "",
+ "pub_ts": 1723262407,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1729526400000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": {
+ "common": {
+ "button": {
+ "jump_style": {
+ "icon_url": "",
+ "text": "进入"
+ },
+ "jump_url": "https://www.biligame.com/detail?id=97\u0026sourceFrom=1005",
+ "type": 1
+ },
+ "cover": "https://i0.hdslb.com/bfs/game/b141a7690c226a0eae66518c713d3af62613b21d.png",
+ "desc1": "养成",
+ "desc2": "指挥官,欢迎回港",
+ "head_text": "相关游戏",
+ "id_str": "97",
+ "jump_url": "https://www.biligame.com/detail?id=97\u0026sourceFrom=1005",
+ "style": 1,
+ "sub_type": "game",
+ "title": "碧蓝航线"
+ },
+ "type": "ADDITIONAL_TYPE_COMMON"
+ },
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "jump_url": "//search.bilibili.com/all?keyword=%E7%A2%A7%E8%93%9D%E8%88%AA%E7%BA%BF",
+ "orig_text": "#碧蓝航线#",
+ "text": "#碧蓝航线#",
+ "type": "RICH_TEXT_NODE_TYPE_TOPIC"
+ },
+ {
+ "orig_text": " ",
+ "text": " ",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "orig_text": "互动抽奖",
+ "rid": "312103",
+ "text": "互动抽奖",
+ "type": "RICH_TEXT_NODE_TYPE_LOTTERY"
+ },
+ {
+ "orig_text": " \n兰夜放灯祈相守,\n纤手弄糕思今宵。\n\n关注",
+ "text": " \n兰夜放灯祈相守,\n纤手弄糕思今宵。\n\n关注",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "orig_text": "@碧蓝航线",
+ "rid": "233114659",
+ "text": "@碧蓝航线",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ },
+ {
+ "orig_text": " 并转发该内容,我们将于8月17日抽取3位指挥官送出【JUUs时间 花园Q版手办】,抽取5位指挥官送出【心智魔方-系列浴球(随机一款)】。\n\n金风玉露,值此良宵,愿与君共度~",
+ "text": " 并转发该内容,我们将于8月17日抽取3位指挥官送出【JUUs时间 花园Q版手办】,抽取5位指挥官送出【心智魔方-系列浴球(随机一款)】。\n\n金风玉露,值此良宵,愿与君共度~",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "#碧蓝航线# 互动抽奖 \n兰夜放灯祈相守,\n纤手弄糕思今宵。\n\n关注@碧蓝航线 并转发该内容,我们将于8月17日抽取3位指挥官送出【JUUs时间 花园Q版手办】,抽取5位指挥官送出【心智魔方-系列浴球(随机一款)】。\n\n金风玉露,值此良宵,愿与君共度~"
+ },
+ "major": {
+ "draw": {
+ "id": 324938558,
+ "items": [
+ {
+ "height": 3038,
+ "size": 2025.2646,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/b0068d1603aee2849ca46a58642fa99e233114659.jpg",
+ "tags": [],
+ "width": 5400
+ },
+ {
+ "height": 5063,
+ "size": 7377.1143,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/c047aafcf90a48b578a63c3e1b86c1de233114659.jpg",
+ "tags": [],
+ "width": 9000
+ }
+ ]
+ },
+ "type": "MAJOR_TYPE_DRAW"
+ },
+ "topic": null
+ }
+ },
+ "type": "DYNAMIC_TYPE_DRAW",
+ "visible": true
+ },
+ "type": "DYNAMIC_TYPE_FORWARD",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "1456253104",
+ "comment_type": 1,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "1456253104"
+ },
+ "id_str": "966374603744083976",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.375,
+ "width": 1.375
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.787,
+ "width": 0.787
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_animation": {
+ "webp_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 4
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1.375,
+ "width": 1.375
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "PENDENT_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.7560000000000001,
+ "axis_y": 0.7726666666666667,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 3,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "686127"
+ },
+ "face": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/686127/dynamic",
+ "label": "",
+ "mid": 686127,
+ "name": "籽岷",
+ "official_verify": {
+ "desc": "",
+ "type": 0
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png",
+ "image_enhance": "https://i0.hdslb.com/bfs/garb/item/0dcf03aa499a64524fe25871d26d95f49f880928.png",
+ "image_enhance_frame": "",
+ "n_pid": 2066,
+ "name": "百年大会员",
+ "pid": 2066
+ },
+ "pub_action": "投稿了视频",
+ "pub_location_text": "",
+ "pub_time": "昨天 04:27",
+ "pub_ts": 1723840021,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 4845196800000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/c16005a5b39164b3536cbd45618a5edd597a1c51.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/Pzrd8zmpQD.png",
+ "label_theme": "hundred_annual_vip",
+ "path": "",
+ "text": "百年大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": null,
+ "major": {
+ "archive": {
+ "aid": "1456253104",
+ "badge": {
+ "bg_color": "#FB7299",
+ "color": "#FFFFFF",
+ "icon_url": null,
+ "text": "投稿视频"
+ },
+ "bvid": "BV1ai421h7nT",
+ "cover": "http://i1.hdslb.com/bfs/archive/0245f30593e2963b883cd5953881034ad033fbd5.jpg",
+ "desc": "https://www.minecraft.net/en-us/article/minecraft-snapshot-24w33a",
+ "disable_preview": 0,
+ "duration_text": "16:22",
+ "jump_url": "//www.bilibili.com/video/BV1ai421h7nT/",
+ "stat": {
+ "danmaku": "2149",
+ "play": "24.5万"
+ },
+ "title": "收纳袋、红石、矿车大改 我的世界新版本介绍 1.21.2 24w33a",
+ "type": 1
+ },
+ "type": "MAJOR_TYPE_ARCHIVE"
+ },
+ "topic": {
+ "id": 1028161,
+ "jump_url": "https://m.bilibili.com/topic-detail?topic_id=1028161\u0026topic_name=%E6%95%B4%E7%82%B9%E7%94%B5%E5%AD%90%E6%A6%A8%E8%8F%9C",
+ "name": "整点电子榨菜"
+ }
+ },
+ "module_interaction": {
+ "items": [
+ {
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "名字永远是个谜:",
+ "rid": "2022349482",
+ "text": "名字永远是个谜:",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ },
+ {
+ "orig_text": "我们轨道交通圈有福了啊啊啊啊啊啊啊!",
+ "text": "我们轨道交通圈有福了啊啊啊啊啊啊啊!",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "我们轨道交通圈有福了啊啊啊啊啊啊啊!"
+ },
+ "type": 1
+ }
+ ]
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 921,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 51,
+ "forbidden": false
+ },
+ "like": {
+ "count": 23138,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_AV",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "325694432",
+ "comment_type": 11,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "325694432"
+ },
+ "id_str": "966306597269667840",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.35,
+ "width": 1.35
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.675,
+ "axis_y": 0.675,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1,
+ "width": 1
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/face/2b9ee4a9c99f1006f3c800c1317f7850ad6f3d0d.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.8000000000000002,
+ "axis_y": 0.8000000000000002,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 4,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "485703766"
+ },
+ "face": "https://i1.hdslb.com/bfs/face/2b9ee4a9c99f1006f3c800c1317f7850ad6f3d0d.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/485703766/dynamic",
+ "label": "",
+ "mid": 485703766,
+ "name": "英伟达GeForce",
+ "official_verify": {
+ "desc": "",
+ "type": 1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0,
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "",
+ "pub_location_text": "",
+ "pub_time": "昨天 00:03",
+ "pub_ts": 1723824187,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 2000563200000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/adb599797dd171e2d3d6d012f448b49679258344.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/sGu57N6pgK.png",
+ "label_theme": "ten_annual_vip",
+ "path": "",
+ "text": "十年大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "直面天命,还有 3 天!\nRTX. ON!\n\n投稿来自于:Bilibili",
+ "text": "直面天命,还有 3 天!\nRTX. ON!\n\n投稿来自于:Bilibili",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "orig_text": "@祗殁 ",
+ "rid": "12299496",
+ "text": "@祗殁 ",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ }
+ ],
+ "text": "直面天命,还有 3 天!\nRTX. ON!\n\n投稿来自于:Bilibili@祗殁 "
+ },
+ "major": {
+ "draw": {
+ "id": 325694432,
+ "items": [
+ {
+ "height": 1280,
+ "size": 59.246094,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/2e42c52d5e1383fe443f0984a41a9624485703766.jpg",
+ "tags": [],
+ "width": 1282
+ }
+ ]
+ },
+ "type": "MAJOR_TYPE_DRAW"
+ },
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 115,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 3,
+ "forbidden": false
+ },
+ "like": {
+ "count": 876,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_DRAW",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "325690655",
+ "comment_type": 11,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "325690655"
+ },
+ "id_str": "966298866306515029",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.375,
+ "width": 1.375
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.787,
+ "width": 0.787
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1.375,
+ "width": 1.375
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "PENDENT_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/garb/item/fe1267f786bf69f1471aff715f8d38ec0e486df5.png"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.7560000000000001,
+ "axis_y": 0.7726666666666667,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 4,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "layers": [
+ {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.787,
+ "width": 0.787
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ {
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.6875,
+ "axis_y": 0.6875,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1.375,
+ "width": 1.375
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "PENDENT_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_animation": {
+ "webp_src": {
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/garb/item/0aa9fd33133ed3fd9f11c857cc6ca848d6804113.webp"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 4
+ },
+ "visible": true
+ }
+ ]
+ },
+ {
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.7560000000000001,
+ "axis_y": 0.7726666666666667,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 4,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ }
+ ],
+ "mid": "233114659"
+ },
+ "decorate": {
+ "card_url": "https://i0.hdslb.com/bfs/garb/bb140043341137b879e957d09b649ce7c3257820.png",
+ "fan": {
+ "color": "#903AC2",
+ "color_format": {
+ "colors": [
+ "#903AC2FF",
+ "#903AC2FF"
+ ],
+ "end_point": "0,100",
+ "gradients": [
+ 0,
+ 100
+ ],
+ "start_point": "0,0"
+ },
+ "is_fan": true,
+ "num_prefix": "NO.",
+ "num_str": "000001",
+ "number": 1
+ },
+ "id": 1706163888001,
+ "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=1706163888001\u0026isdiy=0\u0026part=card\u0026from=post\u0026f_source=garb\u0026vmid=233114659\u0026native.theme=1\u0026navhide=1",
+ "name": "龙腾啾跃-动态卡片粉丝",
+ "type": 3
+ },
+ "face": "https://i1.hdslb.com/bfs/face/1fd5b43d5f619e6df8c8adcf13c962a3e80ee971.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/233114659/dynamic",
+ "label": "",
+ "mid": 233114659,
+ "name": "碧蓝航线",
+ "official_verify": {
+ "desc": "",
+ "type": 1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "https://i1.hdslb.com/bfs/garb/item/fe1267f786bf69f1471aff715f8d38ec0e486df5.png",
+ "image_enhance": "https://i1.hdslb.com/bfs/garb/item/0aa9fd33133ed3fd9f11c857cc6ca848d6804113.webp",
+ "image_enhance_frame": "https://i1.hdslb.com/bfs/garb/item/3052b412defbbc7704e887fefde8de539e8027c5.png",
+ "n_pid": 1987,
+ "name": "碧蓝航线2020",
+ "pid": 1987
+ },
+ "pub_action": "",
+ "pub_location_text": "",
+ "pub_time": "2天前",
+ "pub_ts": 1723822387,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1729526400000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": {
+ "common": {
+ "button": {
+ "jump_style": {
+ "icon_url": "",
+ "text": "进入"
+ },
+ "jump_url": "https://www.biligame.com/detail?id=97\u0026sourceFrom=1005",
+ "type": 1
+ },
+ "cover": "https://i0.hdslb.com/bfs/game/b141a7690c226a0eae66518c713d3af62613b21d.png",
+ "desc1": "养成",
+ "desc2": "指挥官,欢迎回港",
+ "head_text": "相关游戏",
+ "id_str": "97",
+ "jump_url": "https://www.biligame.com/detail?id=97\u0026sourceFrom=1005",
+ "style": 1,
+ "sub_type": "game",
+ "title": "碧蓝航线"
+ },
+ "type": "ADDITIONAL_TYPE_COMMON"
+ },
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "jump_url": "//search.bilibili.com/all?keyword=%E7%A2%A7%E8%93%9D%E8%88%AA%E7%BA%BF",
+ "orig_text": "#碧蓝航线#",
+ "text": "#碧蓝航线#",
+ "type": "RICH_TEXT_NODE_TYPE_TOPIC"
+ },
+ {
+ "orig_text": " ",
+ "text": " ",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "jump_url": "//search.bilibili.com/all?keyword=%E7%A2%A7%E8%93%9D%E8%88%AA%E7%BA%BF%E6%BC%AB%E5%B1%95",
+ "orig_text": "#碧蓝航线漫展#",
+ "text": "#碧蓝航线漫展#",
+ "type": "RICH_TEXT_NODE_TYPE_TOPIC"
+ },
+ {
+ "orig_text": " ",
+ "text": " ",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "jump_url": "//search.bilibili.com/all?keyword=2024%E6%B8%AF%E5%8C%BA%E7%9B%9B%E5%A4%8F%E6%B8%85%E5%87%89%E8%8A%82",
+ "orig_text": "#2024港区盛夏清凉节#",
+ "text": "#2024港区盛夏清凉节#",
+ "type": "RICH_TEXT_NODE_TYPE_TOPIC"
+ },
+ {
+ "orig_text": "\n◆ 「港区盛夏清凉节」长沙站·街区快闪 到达!◆ \n\n碧蓝夏日,映照专属的街景~\n街区快闪即将开启,\n与少女们一同踏上这场特别的城市漫步之旅吧!\n\n◆ 互动游戏开放时间:2024年8月17日~8月18日,每日10:00~12:00及14:00~19:00\n◆ 街区快闪体验地址:湖南省长沙市开福区潮宗街历史文化街区\n◆ 参与方式:无需预约,前往现场即可参与体验~\n◆ 体验须知:\n※8月17日~8月18日期间,指挥官可前往潮宗街历史文化街区现场参与体验。\n※指挥官关注《碧蓝航线》官方B站账号后,可参与互动游戏,集章兑换周边礼品哟!\n※兑换周边每日数量有限,兑完即止。\n※天气炎热,请指挥官做好防暑准备,出行注意安全哟。",
+ "text": "\n◆ 「港区盛夏清凉节」长沙站·街区快闪 到达!◆ \n\n碧蓝夏日,映照专属的街景~\n街区快闪即将开启,\n与少女们一同踏上这场特别的城市漫步之旅吧!\n\n◆ 互动游戏开放时间:2024年8月17日~8月18日,每日10:00~12:00及14:00~19:00\n◆ 街区快闪体验地址:湖南省长沙市开福区潮宗街历史文化街区\n◆ 参与方式:无需预约,前往现场即可参与体验~\n◆ 体验须知:\n※8月17日~8月18日期间,指挥官可前往潮宗街历史文化街区现场参与体验。\n※指挥官关注《碧蓝航线》官方B站账号后,可参与互动游戏,集章兑换周边礼品哟!\n※兑换周边每日数量有限,兑完即止。\n※天气炎热,请指挥官做好防暑准备,出行注意安全哟。",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "#碧蓝航线# #碧蓝航线漫展# #2024港区盛夏清凉节#\n◆ 「港区盛夏清凉节」长沙站·街区快闪 到达!◆ \n\n碧蓝夏日,映照专属的街景~\n街区快闪即将开启,\n与少女们一同踏上这场特别的城市漫步之旅吧!\n\n◆ 互动游戏开放时间:2024年8月17日~8月18日,每日10:00~12:00及14:00~19:00\n◆ 街区快闪体验地址:湖南省长沙市开福区潮宗街历史文化街区\n◆ 参与方式:无需预约,前往现场即可参与体验~\n◆ 体验须知:\n※8月17日~8月18日期间,指挥官可前往潮宗街历史文化街区现场参与体验。\n※指挥官关注《碧蓝航线》官方B站账号后,可参与互动游戏,集章兑换周边礼品哟!\n※兑换周边每日数量有限,兑完即止。\n※天气炎热,请指挥官做好防暑准备,出行注意安全哟。"
+ },
+ "major": {
+ "draw": {
+ "id": 325690655,
+ "items": [
+ {
+ "height": 6000,
+ "size": 2737.6729,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/722dc5e7eba3c3f6861b294f6bf3020c233114659.jpg",
+ "tags": [],
+ "width": 4000
+ },
+ {
+ "height": 4000,
+ "size": 4852.4023,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/b04110f894184880666ee8b204000846233114659.jpg",
+ "tags": [],
+ "width": 6000
+ },
+ {
+ "height": 4000,
+ "size": 3941.9678,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/8ce3c1e6f2d33a47d42f35193b9e5f55233114659.jpg",
+ "tags": [],
+ "width": 6000
+ },
+ {
+ "height": 4000,
+ "size": 4461.9707,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/ab9a5bf2215f88fed6026d67d98ec901233114659.jpg",
+ "tags": [],
+ "width": 6000
+ },
+ {
+ "height": 4000,
+ "size": 3137.0205,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/18e62cf8ebc7c07b99e042ac4cdeeaaa233114659.jpg",
+ "tags": [],
+ "width": 6000
+ },
+ {
+ "height": 4000,
+ "size": 9561.615,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/1036f447fcbec195e717e2a5b3091a73233114659.jpg",
+ "tags": [],
+ "width": 6000
+ }
+ ]
+ },
+ "type": "MAJOR_TYPE_DRAW"
+ },
+ "topic": null
+ },
+ "module_interaction": {
+ "items": [
+ {
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "豌豆羹:",
+ "rid": "3493280973064560",
+ "text": "豌豆羹:",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ },
+ {
+ "orig_text": "大帝皮肤加彩蛋!",
+ "text": "大帝皮肤加彩蛋!",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "大帝皮肤加彩蛋!"
+ },
+ "type": 1
+ }
+ ]
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 446,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 47,
+ "forbidden": false
+ },
+ "like": {
+ "count": 4352,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_DRAW",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "966281785469042740",
+ "comment_type": 17,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "966281785469042740"
+ },
+ "id_str": "966281785469042740",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.35,
+ "width": 1.35
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.675,
+ "axis_y": 0.675,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1,
+ "width": 1
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i1.hdslb.com/bfs/face/21426275f3d3149b96b88783275205ba574c09e3.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.8000000000000002,
+ "axis_y": 0.8000000000000002,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 3,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "178429408"
+ },
+ "face": "https://i1.hdslb.com/bfs/face/21426275f3d3149b96b88783275205ba574c09e3.jpg",
+ "face_nft": false,
+ "following": true,
+ "jump_url": "//space.bilibili.com/178429408/dynamic",
+ "label": "",
+ "mid": 178429408,
+ "name": "老弟一号",
+ "official_verify": {
+ "desc": "",
+ "type": 0
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0,
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "",
+ "pub_location_text": "",
+ "pub_time": "2天前",
+ "pub_ts": 1723818410,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1728576000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "https://i0.hdslb.com/bfs/activity-plat/static/20220608/e369244d0b14644f5e1a06431e22a4d5/0DFy9BHgwE.gif",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d7e624d13d3e134251e4174a7318c19a8edbd71.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/uckjAv3Npy.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "不管怎么样,我先把香槟开了",
+ "text": "不管怎么样,我先把香槟开了",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "emoji": {
+ "icon_url": "https://i0.hdslb.com/bfs/emote/bf7e00ecab02171f8461ee8cf439c73db9797748.png",
+ "size": 1,
+ "text": "[脱单doge]",
+ "type": 1
+ },
+ "orig_text": "[脱单doge]",
+ "text": "[脱单doge]",
+ "type": "RICH_TEXT_NODE_TYPE_EMOJI"
+ },
+ {
+ "orig_text": "要是褒姒,直播抽一百个爵柏电源",
+ "text": "要是褒姒,直播抽一百个爵柏电源",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "不管怎么样,我先把香槟开了[脱单doge]要是褒姒,直播抽一百个爵柏电源"
+ },
+ "major": null,
+ "topic": null
+ },
+ "module_interaction": {
+ "items": [
+ {
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "芊芊老猫的日常:",
+ "rid": "1284100140",
+ "text": "芊芊老猫的日常:",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ },
+ {
+ "orig_text": "还是好人多啊",
+ "text": "还是好人多啊",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "emoji": {
+ "icon_url": "https://i0.hdslb.com/bfs/emote/4683fd9ffc925fa6423110979d7dcac5eda297f4.png",
+ "size": 1,
+ "text": "[OK]",
+ "type": 1
+ },
+ "orig_text": "[OK]",
+ "text": "[OK]",
+ "type": "RICH_TEXT_NODE_TYPE_EMOJI"
+ }
+ ],
+ "text": "还是好人多啊[OK]"
+ },
+ "type": 1
+ }
+ ]
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "取消关注",
+ "type": "THREE_POINT_FOLLOWING"
+ },
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 156,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 1,
+ "forbidden": false
+ },
+ "like": {
+ "count": 1367,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "orig": {
+ "basic": {
+ "comment_id_str": "",
+ "comment_type": 0,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": ""
+ },
+ "id_str": "966274874613956608",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.35,
+ "width": 1.35
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.675,
+ "axis_y": 0.675,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1,
+ "width": 1
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i2.hdslb.com/bfs/face/4c9095a6fc7d6ef7bf97ee1c65767f537763c60c.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ },
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.8000000000000002,
+ "axis_y": 0.8000000000000002,
+ "coordinate_pos": 1
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 0.41666666666666663,
+ "width": 0.41666666666666663
+ }
+ },
+ "layer_config": {
+ "tags": {
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "background-color": "rgb(255,255,255)",
+ "border": "2px solid rgba(255,255,255,1)",
+ "borderRadius": "50%",
+ "boxSizing": "border-box"
+ }
+ }
+ },
+ "ICON_LAYER": {}
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "local": 4,
+ "src_type": 2
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "652239032"
+ },
+ "face": "https://i2.hdslb.com/bfs/face/4c9095a6fc7d6ef7bf97ee1c65767f537763c60c.jpg",
+ "face_nft": false,
+ "following": null,
+ "jump_url": "//space.bilibili.com/652239032/dynamic",
+ "label": "",
+ "mid": 652239032,
+ "name": "IGN中国",
+ "official_verify": {
+ "desc": "",
+ "type": 1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0,
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "投稿了视频",
+ "pub_time": "",
+ "pub_ts": 1723816801,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 0,
+ "avatar_subscript_url": "",
+ "due_date": 0,
+ "label": {
+ "bg_color": "",
+ "bg_style": 0,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png",
+ "label_theme": "",
+ "path": "",
+ "text": "",
+ "text_color": "",
+ "use_img_label": true
+ },
+ "nickname_color": "",
+ "status": 0,
+ "theme_type": 0,
+ "type": 0
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "《黑神话:悟空》绝对可以说是一座中国游戏行业的里程碑,它所呈现的优秀品质对得起这四年来它背负的所有期待,这是真正意义上放在全球市场也是极具竞争力的国产游戏,而游戏科学也将在此役之后毫无疑问成为全球顶尖ARPG游戏开发商之一。",
+ "text": "《黑神话:悟空》绝对可以说是一座中国游戏行业的里程碑,它所呈现的优秀品质对得起这四年来它背负的所有期待,这是真正意义上放在全球市场也是极具竞争力的国产游戏,而游戏科学也将在此役之后毫无疑问成为全球顶尖ARPG游戏开发商之一。",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "《黑神话:悟空》绝对可以说是一座中国游戏行业的里程碑,它所呈现的优秀品质对得起这四年来它背负的所有期待,这是真正意义上放在全球市场也是极具竞争力的国产游戏,而游戏科学也将在此役之后毫无疑问成为全球顶尖ARPG游戏开发商之一。"
+ },
+ "major": {
+ "archive": {
+ "aid": "1456400345",
+ "badge": {
+ "bg_color": "#FB7299",
+ "color": "#FFFFFF",
+ "icon_url": null,
+ "text": "投稿视频"
+ },
+ "bvid": "BV1Ti421a7dv",
+ "cover": "http://i2.hdslb.com/bfs/archive/fd87a4e75738b0de1388df60f5e4ce5011b1367a.jpg",
+ "desc": "《黑神话:悟空》绝对可以说是一座中国游戏行业的里程碑,它所呈现的优秀品质对得起这四年来它背负的所有期待,这是真正意义上放在全球市场也是极具竞争力的国产游戏,我相信它会成为今年年度游戏的有力竞争者,而游戏科学也将在此役之后毫无疑问成为全球顶尖ARPG游戏开发商之一。",
+ "disable_preview": 0,
+ "duration_text": "10:00",
+ "jump_url": "//www.bilibili.com/video/BV1Ti421a7dv/",
+ "stat": {
+ "danmaku": "4.6万",
+ "play": "595.1万"
+ },
+ "title": "【IGN】10分,《黑神话:悟空》评测:踏平坎坷成大道",
+ "type": 1
+ },
+ "type": "MAJOR_TYPE_ARCHIVE"
+ },
+ "topic": null
+ }
+ },
+ "type": "DYNAMIC_TYPE_AV",
+ "visible": true
+ },
+ "type": "DYNAMIC_TYPE_FORWARD",
+ "visible": true
+ }
+ ],
+ "offset": "966281785469042740",
+ "update_baseline": "966888011247648768",
+ "update_num": 5
+ }
+}
+```
+
+
+
+## 检测是否有新动态
+
+> https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all/update
+
+*请求方式:GET*
+
+认证方式: Cookie (SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| - | - | - | - | - |
+| type | str | 动态类型 | 不必要 | 默认为 `all` |
+| update_baseline | id | 更新基线 | 必要 | 用于检测是否有新动态, 默认为上次请求 [获取全部动态列表](#获取全部动态列表) 返回的 `update_baseline`, 实测填 `0` 也可正常获取 |
+| web_location | str | 333.1365 | 不必要 | |
+
+**JSON回复:**
+
+根:
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| code | num | 返回值 | 0: 成功 -101: 账号未登录 -400: 请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` :
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| update_num | num | 有新动态的数量 | |
+
+**示例:**
+
+```shell
+curl -G 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all/update' \
+--data-urlencode 'update_baseline=114514' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "update_num": 9
+ }
+}
+```
+
+
\ No newline at end of file
diff --git a/docs/dynamic/atlist.md b/docs/dynamic/atlist.md
new file mode 100644
index 0000000..a73734f
--- /dev/null
+++ b/docs/dynamic/atlist.md
@@ -0,0 +1,238 @@
+# 根据关键字搜索用户 (at别人时的填充列表)
+
+**注意关键字不一定顺序匹配,如最后示例**
+
+> https://api.bilibili.com/x/polymer/web-dynamic/v1/mention/search
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------- | ---- | ---------- | ------ | ---------------------------------- |
+| keyword | str | 搜索关键字 | 非必要 | 若无此项,则返回所有关注用户的信息 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| message | str | 错误信息 | 成功时为 `0` |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ----- | -------- | ---------------------------------------------- |
+| groups | array | 用户分组 | 根据是否关注该用户来分组,未找到用户时为空数组 |
+
+`groups`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---- |
+| 0 | obj | 分组1 | |
+| n | obj | 分组(n+1) | |
+| …… | obj | …… | …… |
+
+`groups`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | ---------------- | ------------------------ |
+| group_name | str | 分组名称 | `我的关注`或`其他` |
+| group_type | num | 分组类型 | 2:我的关注 4:其他 |
+| items | array | 搜索到的用户信息 | 按照认证状态与粉丝数排序 |
+
+`items`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---- |
+| 0 | obj | 用户1 | |
+| n | obj | 用户(n+1) | |
+| …… | obj | …… | …… |
+
+`items`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------------- | ---- | ------------ | ---------------------------------------- |
+| face | str | 用户头像url | |
+| fans | num | 用户粉丝数 | |
+| name | str | 用户昵称 | |
+| official_verify_type | num | 用户认证状态 | -1:无 0:个人认证 1:机构认证 |
+| uid | str | 用户mid | |
+
+**示例:**
+
+搜索关键字为`社会易`的用户
+
+```shell
+curl -G 'https://api.bilibili.com/x/polymer/web-dynamic/v1/mention/search' \
+--data-urlencode 'keyword=社会易' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "groups": [
+ {
+ "group_name": "我的关注",
+ "group_type": 2,
+ "items": [
+ {
+ "face": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg",
+ "fans": 3613,
+ "name": "社会易姐QwQ",
+ "official_verify_type": -1,
+ "uid": "293793435"
+ }
+ ]
+ },
+ {
+ "group_name": "其他",
+ "group_type": 4,
+ "items": [
+ {
+ "face": "https://i0.hdslb.com/bfs/face/dbc456bdec5e7a4806c9d0311d95ebcc6be674cf.jpg",
+ "fans": 23464,
+ "name": "社会易老师",
+ "official_verify_type": -1,
+ "uid": "484031754"
+ },
+ {
+ "face": "https://i1.hdslb.com/bfs/face/5497859a550a017d0a51c640d232c539c2f48991.jpg",
+ "fans": 11,
+ "name": "栄禧貿易株式会社",
+ "official_verify_type": -1,
+ "uid": "4991467"
+ },
+ {
+ "face": "https://i2.hdslb.com/bfs/face/311cecf9298158b8a5f47ed3e641328ab5c0cfcd.jpg",
+ "fans": 10,
+ "name": "社会李易儒",
+ "official_verify_type": -1,
+ "uid": "442101413"
+ },
+ {
+ "face": "https://i2.hdslb.com/bfs/face/2dad05e4748b5e91e1ec5d3c5d4f0904a5bcdaf0.jpg",
+ "fans": 8,
+ "name": "日本国立貿易株式会社",
+ "official_verify_type": -1,
+ "uid": "3546589855484501"
+ },
+ {
+ "face": "http://i0.hdslb.com/bfs/face/2ae12d7f71173baa8e00c4cfe97acb5a3de31566.jpg",
+ "fans": 6,
+ "name": "社会小伙肖子易",
+ "official_verify_type": -1,
+ "uid": "250129011"
+ },
+ {
+ "face": "https://i2.hdslb.com/bfs/face/1ebb0d4aa8e2c4b532f82983503ec38b62a1820f.jpg",
+ "fans": 4,
+ "name": "社会主义接班人小易",
+ "official_verify_type": -1,
+ "uid": "486568790"
+ },
+ {
+ "face": "http://i0.hdslb.com/bfs/face/dccb52f3c15ba1bb99aac3c86e9825842cc95295.jpg",
+ "fans": 2,
+ "name": "社会你易易",
+ "official_verify_type": -1,
+ "uid": "497214639"
+ },
+ {
+ "face": "https://i1.hdslb.com/bfs/face/1902cc0b07ab4a5de6110f5adb2691cbf7051f2b.jpg",
+ "fans": 1,
+ "name": "社会打工不容易",
+ "official_verify_type": -1,
+ "uid": "3546742186314202"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/19ee1b5975969a47ba085cd1f628d86a479b9950.jpg",
+ "fans": 0,
+ "name": "社会交易",
+ "official_verify_type": -1,
+ "uid": "3493291412687622"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/de6afbda484e114b7cedeb621c3cbbaef7800988.jpg",
+ "fans": 0,
+ "name": "不谦易会社恐",
+ "official_verify_type": -1,
+ "uid": "1602175830"
+ },
+ {
+ "face": "http://i0.hdslb.com/bfs/face/member/noface.jpg",
+ "fans": 8,
+ "name": "社会易总",
+ "official_verify_type": -1,
+ "uid": "155817540"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/member/noface.jpg",
+ "fans": 0,
+ "name": "社会存在与社会易逝",
+ "official_verify_type": -1,
+ "uid": "3546578331634371"
+ },
+ {
+ "face": "http://i0.hdslb.com/bfs/face/member/noface.jpg",
+ "fans": 0,
+ "name": "社会易姐QAQ",
+ "official_verify_type": -1,
+ "uid": "1983403996"
+ },
+ {
+ "face": "http://i1.hdslb.com/bfs/face/510cde8f4e3eb27aa50177d619a4200bb501797b.jpg",
+ "fans": 0,
+ "name": "社会易大佬人狠话不多",
+ "official_verify_type": -1,
+ "uid": "408471763"
+ },
+ {
+ "face": "http://i1.hdslb.com/bfs/face/7324adb53362527a1bf5f20141a6ae4307011ea7.jpg",
+ "fans": 0,
+ "name": "社会易轩",
+ "official_verify_type": -1,
+ "uid": "384672256"
+ },
+ {
+ "face": "http://i0.hdslb.com/bfs/face/member/noface.jpg",
+ "fans": 0,
+ "name": "社会易哥",
+ "official_verify_type": -1,
+ "uid": "284984452"
+ },
+ {
+ "face": "http://i0.hdslb.com/bfs/face/member/noface.jpg",
+ "fans": 0,
+ "name": "社会易姐",
+ "official_verify_type": -1,
+ "uid": "249112673"
+ },
+ {
+ "face": "http://i0.hdslb.com/bfs/face/member/noface.jpg",
+ "fans": 0,
+ "name": "社会易大佬",
+ "official_verify_type": -1,
+ "uid": "167967213"
+ }
+ ]
+ }
+ ]
+ }
+}
+```
+
+
\ No newline at end of file
diff --git a/docs/dynamic/basicInfo.md b/docs/dynamic/basicInfo.md
new file mode 100644
index 0000000..b4b836a
--- /dev/null
+++ b/docs/dynamic/basicInfo.md
@@ -0,0 +1,1581 @@
+# 动态基本信息
+
+## 动态转发列表
+
+> https://api.vc.bilibili.com/dynamic_repost/v1/dynamic_repost/repost_detail
+
+请求方式:GET
+
+==Attention: 转发列表总计超过550部分继续获取可能被限制。==
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| :--------: | :--: | :----: | :----: | :--: |
+| dynamic_id | id | 动态id | 必要 | |
+| offset | - | - | 非必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | -------- |
+| code | num | 返回值 | 0:成功 |
+| data | obj | 信息本体 | |
+| message | str | 错误信息 | 默认为空 |
+| msg | num | 空 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | -------------- | ------------ |
+| has_more | bool | 是否还有下一页 | 每页最多20条 |
+| total | int | 总计包含 | 不超过20条 |
+| _gt_ | num | 0 | 作用尚不明确 |
+
+`data`中的`items`对象:
+
+由于参数过多,这里不一一列举,请自行参阅其他文件理解。
+
+**示例:**
+
+获取`哔哩哔哩弹幕网`的动态id为`669016644742283288`动态
+
+```shell
+curl -G 'https://api.vc.bilibili.com/dynamic_repost/v1/dynamic_repost/repost_detail' \
+--data-urlencode 'dynamic_id=669016644742283288'
+```
+
+
+查看响应示例
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "message": "",
+ "data": {
+ "has_more": 0,
+ "total": 3,
+ "items": [
+ {
+ "desc": {
+ "uid": 478909651,
+ "type": 1,
+ "rid": 669023160171702063,
+ "acl": 0,
+ "view": 0,
+ "repost": 0,
+ "like": 0,
+ "is_liked": 0,
+ "dynamic_id": 669023160201379864,
+ "timestamp": 1654607493,
+ "pre_dy_id": 669016644742283288,
+ "orig_dy_id": 669007814298959974,
+ "orig_type": 2,
+ "user_profile": {
+ "info": {
+ "uid": 478909651,
+ "uname": "-牛马之玉",
+ "face": "http://i0.hdslb.com/bfs/face/member/noface.jpg",
+ "face_nft": 0
+ },
+ "card": {
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ }
+ },
+ "vip": {
+ "vipType": 0,
+ "vipDueDate": 0,
+ "vipStatus": 0,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "role": 0,
+ "avatar_subscript_url": ""
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "rank": "10000",
+ "sign": "",
+ "level_info": {
+ "current_level": 2
+ }
+ },
+ "uid_type": 1,
+ "stype": 0,
+ "r_type": 1,
+ "inner_id": 0,
+ "status": 1,
+ "dynamic_id_str": "669023160201379864",
+ "pre_dy_id_str": "669016644742283288",
+ "orig_dy_id_str": "669007814298959974",
+ "rid_str": "669023160171702063",
+ "origin": {
+ "uid": 392836434,
+ "type": 2,
+ "rid": 196658860,
+ "acl": 1024,
+ "view": 46111,
+ "repost": 1446,
+ "like": 0,
+ "dynamic_id": 669007814298959974,
+ "timestamp": 1654603920,
+ "pre_dy_id": 0,
+ "orig_dy_id": 0,
+ "uid_type": 1,
+ "stype": 0,
+ "r_type": 0,
+ "inner_id": 0,
+ "status": 1,
+ "dynamic_id_str": "669007814298959974",
+ "pre_dy_id_str": "0",
+ "orig_dy_id_str": "0",
+ "rid_str": "196658860"
+ },
+ "previous": {
+ "uid": 9617619,
+ "type": 1,
+ "rid": 669016644698939384,
+ "acl": 1024,
+ "view": 1381,
+ "repost": 3,
+ "like": 0,
+ "dynamic_id": 669016644742283288,
+ "timestamp": 1654605976,
+ "pre_dy_id": 669007814298959974,
+ "orig_dy_id": 669007814298959974,
+ "uid_type": 1,
+ "stype": 0,
+ "r_type": 1,
+ "inner_id": 0,
+ "status": 1,
+ "dynamic_id_str": "669016644742283288",
+ "pre_dy_id_str": "669007814298959974",
+ "orig_dy_id_str": "669007814298959974",
+ "rid_str": "669016644698939384"
+ }
+ },
+ "card": "{ \"user\": { \"uid\": 478909651, \"uname\": \"-牛马之玉\", \"face\": \"http:\\/\\/i0.hdslb.com\\/bfs\\/face\\/member\\/noface.jpg\" }, \"item\": { \"rp_id\": 669023160171702063, \"uid\": 478909651, \"content\": \"\\/\\/@哔哩哔哩直播:6月8日KPL首届夏季赛火热开赛,明星主播花式解说!开赛首日直播间礼品...\", \"ctrl\": \"[{\\\"location\\\":2,\\\"length\\\":7,\\\"data\\\":\\\"9617619\\\",\\\"type\\\":1}]\", \"orig_dy_id\": 669007814298959974, \"pre_dy_id\": 669016644742283288, \"timestamp\": 0, \"at_uids\": [ 9617619 ], \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"location\\\\\\\":0,\\\\\\\"length\\\\\\\":4,\\\\\\\"data\\\\\\\":\\\\\\\"4\\\\\\\",\\\\\\\"type\\\\\\\":2}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"互动抽奖 【上B站,看KPL】\\\\r\\\\nKPL首届夏季赛即将来袭,6月8日15:00B站55官方直播间等你来看!你最期待哪场对决呢?更有多位明星主播陪你观赛,趣味吐槽花式解说开赛首日~\\\\r\\\\n\\\\r\\\\n55直播间马超-无双飞将皮肤助力金撒不停,赛事全程天选好礼每局掉落,观赛还能领取游戏内道具!APP端参与直播间【热议】讨论,更有机会获超多奖励。\\\\r\\\\n\\\\r\\\\nKPL赛事征稿开赛日同步上线,带#KPL激励计划#话题投稿,瓜分30万奖金~\\\\r\\\\n战火将燃,谁将勇夺开门红,让我们拭目以待! [打call]\\\\n\\\\n直播间TP:https:\\\\\\/\\\\\\/live.bilibili.com\\\\\\/55 \\\\n赛事预测:https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/v\\\\\\/game\\\\\\/match\\\\\\/competition?spm_id_from=444.42.0.0 \\\\n更多比赛:https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/v\\\\\\/game\\\\\\/match\\\\\\/schedule?mid=0&gid=0&tid=0&time=1639785600000&spm_id_from=444.42.0.0\\\",\\\"id\\\":196658860,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":6758,\\\"img_size\\\":4693.3251953125,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/d4fd33fe00c80938daf6f14641f15901bc4a0d17.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080}],\\\"pictures_count\\\":1,\\\"reply\\\":128,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1654603920},\\\"user\\\":{\\\"head_url\\\":\\\"http:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/50de7906e50260c0e596d54ca51687e58ed7a9ba.jpg\\\",\\\"name\\\":\\\"哔哩哔哩王者荣耀赛事\\\",\\\"uid\\\":392836434,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1661097600000,\\\"label\\\":{\\\"label_theme\\\":\\\"annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"年度大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"lottery_id\\\":96074}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"4\\\",\\\"length\\\":4,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"create.dynamic.web\\\",\\\"verify\\\":{\\\"aegis_enable\\\":true,\\\"asw\\\":{},\\\"cc\\\":{},\\\"csw\\\":{},\\\"dc\\\":{},\\\"gc\\\":{},\\\"ra\\\":{},\\\"sp\\\":{},\\\"sw\\\":{},\\\"ur\\\":{},\\\"verify_first\\\":true}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"lottery_id\\\":96074},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 392836434, \"uname\": \"哔哩哔哩王者荣耀赛事\", \"face\": \"http:\\/\\/i0.hdslb.com\\/bfs\\/face\\/50de7906e50260c0e596d54ca51687e58ed7a9ba.jpg\", \"face_nft\": 0 }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩王者荣耀赛事官方帐号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1661097600000, \"vipStatus\": 1, \"themeType\": 0, \"label\": { \"path\": \"\", \"text\": \"年度大会员\", \"label_theme\": \"annual_vip\", \"text_color\": \"#FFFFFF\", \"bg_style\": 1, \"bg_color\": \"#FB7299\", \"border_color\": \"\" }, \"avatar_subscript\": 1, \"nickname_color\": \"#FB7299\", \"role\": 3, \"avatar_subscript_url\": \"http:\\/\\/i0.hdslb.com\\/bfs\\/vip\\/icon_Certification_big_member_22_3x.png\" }, \"pendant\": { \"pid\": 0, \"name\": \"\", \"image\": \"\", \"expire\": 0, \"image_enhance\": \"\", \"image_enhance_frame\": \"\" }, \"rank\": \"10000\", \"sign\": \"哔哩哔哩王者荣耀赛事官方账号\", \"level_info\": { \"current_level\": 6 } } }",
+ "extend_json": "{\"\":{\"at_mids\":[{\"at_type\":2,\"mid_list\":[9617619]}],\"content\":\"\\/\\/@哔哩哔哩直播:6月8日KPL首届夏季赛火热开赛,明星主播花式解说!开赛首日直播间礼品...\",\"data_type\":2,\"need_send_msg\":true,\"publisher\":478909651},\"ctrl\":[{\"data\":\"9617619\",\"length\":7,\"location\":2,\"type\":1}],\"from\":{\"emoji_type\":1,\"from\":\"create.fast_repost\",\"verify\":{\"aegis_enable\":true,\"asw\":{},\"cc\":{},\"csw\":{},\"dc\":{},\"gc\":{},\"ra\":{},\"sp\":{},\"sw\":{},\"ur\":{}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"}}",
+ "display": {
+ "origin": {
+ "emoji_info": {
+ "emoji_details": [
+ {
+ "emoji_name": "[打call]",
+ "id": 510,
+ "package_id": 1,
+ "state": 0,
+ "type": 1,
+ "attr": 0,
+ "text": "[打call]",
+ "url": "http://i0.hdslb.com/bfs/emote/431432c43da3ee5aab5b0e4f8931953e649e9975.png",
+ "meta": {
+ "size": 1
+ },
+ "mtime": 1648834168
+ }
+ ]
+ },
+ "relation": {
+ "status": 1,
+ "is_follow": 0,
+ "is_followed": 0
+ }
+ },
+ "relation": {
+ "status": 1,
+ "is_follow": 0,
+ "is_followed": 0
+ }
+ }
+ },
+ {
+ "desc": {
+ "uid": 37906788,
+ "type": 1,
+ "rid": 669022472968542526,
+ "acl": 0,
+ "view": 0,
+ "repost": 0,
+ "like": 0,
+ "is_liked": 0,
+ "dynamic_id": 669022473022341136,
+ "timestamp": 1654607333,
+ "pre_dy_id": 669016644742283288,
+ "orig_dy_id": 669007814298959974,
+ "orig_type": 2,
+ "user_profile": {
+ "info": {
+ "uid": 37906788,
+ "uname": "整天就想吃桃子",
+ "face": "http://i0.hdslb.com/bfs/face/388f29bb0e426d625378b99eec690775467ebb00.jpg",
+ "face_nft": 0
+ },
+ "card": {
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ }
+ },
+ "vip": {
+ "vipType": 2,
+ "vipDueDate": 1712073600000,
+ "vipStatus": 1,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "年度大会员",
+ "label_theme": "annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "rank": "10000",
+ "sign": "",
+ "level_info": {
+ "current_level": 5
+ }
+ },
+ "uid_type": 1,
+ "stype": 0,
+ "r_type": 1,
+ "inner_id": 0,
+ "status": 1,
+ "dynamic_id_str": "669022473022341136",
+ "pre_dy_id_str": "669016644742283288",
+ "orig_dy_id_str": "669007814298959974",
+ "rid_str": "669022472968542526",
+ "origin": {
+ "uid": 392836434,
+ "type": 2,
+ "rid": 196658860,
+ "acl": 1024,
+ "view": 46111,
+ "repost": 1446,
+ "like": 0,
+ "dynamic_id": 669007814298959974,
+ "timestamp": 1654603920,
+ "pre_dy_id": 0,
+ "orig_dy_id": 0,
+ "uid_type": 1,
+ "stype": 0,
+ "r_type": 0,
+ "inner_id": 0,
+ "status": 1,
+ "dynamic_id_str": "669007814298959974",
+ "pre_dy_id_str": "0",
+ "orig_dy_id_str": "0",
+ "rid_str": "196658860"
+ },
+ "previous": {
+ "uid": 9617619,
+ "type": 1,
+ "rid": 669016644698939384,
+ "acl": 1024,
+ "view": 1381,
+ "repost": 3,
+ "like": 0,
+ "dynamic_id": 669016644742283288,
+ "timestamp": 1654605976,
+ "pre_dy_id": 669007814298959974,
+ "orig_dy_id": 669007814298959974,
+ "uid_type": 1,
+ "stype": 0,
+ "r_type": 1,
+ "inner_id": 0,
+ "status": 1,
+ "dynamic_id_str": "669016644742283288",
+ "pre_dy_id_str": "669007814298959974",
+ "orig_dy_id_str": "669007814298959974",
+ "rid_str": "669016644698939384"
+ }
+ },
+ "card": "{ \"user\": { \"uid\": 37906788, \"uname\": \"整天就想吃桃子\", \"face\": \"http:\\/\\/i0.hdslb.com\\/bfs\\/face\\/388f29bb0e426d625378b99eec690775467ebb00.jpg\" }, \"item\": { \"rp_id\": 669022472968542526, \"uid\": 37906788, \"content\": \"\\/\\/@哔哩哔哩直播:6月8日KPL首届夏季赛火热开赛,明星主播花式解说!开赛首日直播间礼品不定时掉...\", \"ctrl\": \"[{\\\"location\\\":2,\\\"length\\\":7,\\\"data\\\":\\\"9617619\\\",\\\"type\\\":1}]\", \"orig_dy_id\": 669007814298959974, \"pre_dy_id\": 669016644742283288, \"timestamp\": 0, \"at_uids\": [ 9617619 ], \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"location\\\\\\\":0,\\\\\\\"length\\\\\\\":4,\\\\\\\"data\\\\\\\":\\\\\\\"4\\\\\\\",\\\\\\\"type\\\\\\\":2}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"互动抽奖 【上B站,看KPL】\\\\r\\\\nKPL首届夏季赛即将来袭,6月8日15:00B站55官方直播间等你来看!你最期待哪场对决呢?更有多位明星主播陪你观赛,趣味吐槽花式解说开赛首日~\\\\r\\\\n\\\\r\\\\n55直播间马超-无双飞将皮肤助力金撒不停,赛事全程天选好礼每局掉落,观赛还能领取游戏内道具!APP端参与直播间【热议】讨论,更有机会获超多奖励。\\\\r\\\\n\\\\r\\\\nKPL赛事征稿开赛日同步上线,带#KPL激励计划#话题投稿,瓜分30万奖金~\\\\r\\\\n战火将燃,谁将勇夺开门红,让我们拭目以待! [打call]\\\\n\\\\n直播间TP:https:\\\\\\/\\\\\\/live.bilibili.com\\\\\\/55 \\\\n赛事预测:https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/v\\\\\\/game\\\\\\/match\\\\\\/competition?spm_id_from=444.42.0.0 \\\\n更多比赛:https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/v\\\\\\/game\\\\\\/match\\\\\\/schedule?mid=0&gid=0&tid=0&time=1639785600000&spm_id_from=444.42.0.0\\\",\\\"id\\\":196658860,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":6758,\\\"img_size\\\":4693.3251953125,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/d4fd33fe00c80938daf6f14641f15901bc4a0d17.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080}],\\\"pictures_count\\\":1,\\\"reply\\\":128,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1654603920},\\\"user\\\":{\\\"head_url\\\":\\\"http:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/50de7906e50260c0e596d54ca51687e58ed7a9ba.jpg\\\",\\\"name\\\":\\\"哔哩哔哩王者荣耀赛事\\\",\\\"uid\\\":392836434,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1661097600000,\\\"label\\\":{\\\"label_theme\\\":\\\"annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"年度大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"lottery_id\\\":96074}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"4\\\",\\\"length\\\":4,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"create.dynamic.web\\\",\\\"verify\\\":{\\\"aegis_enable\\\":true,\\\"asw\\\":{},\\\"cc\\\":{},\\\"csw\\\":{},\\\"dc\\\":{},\\\"gc\\\":{},\\\"ra\\\":{},\\\"sp\\\":{},\\\"sw\\\":{},\\\"ur\\\":{},\\\"verify_first\\\":true}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"lottery_id\\\":96074},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 392836434, \"uname\": \"哔哩哔哩王者荣耀赛事\", \"face\": \"http:\\/\\/i0.hdslb.com\\/bfs\\/face\\/50de7906e50260c0e596d54ca51687e58ed7a9ba.jpg\", \"face_nft\": 0 }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩王者荣耀赛事官方帐号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1661097600000, \"vipStatus\": 1, \"themeType\": 0, \"label\": { \"path\": \"\", \"text\": \"年度大会员\", \"label_theme\": \"annual_vip\", \"text_color\": \"#FFFFFF\", \"bg_style\": 1, \"bg_color\": \"#FB7299\", \"border_color\": \"\" }, \"avatar_subscript\": 1, \"nickname_color\": \"#FB7299\", \"role\": 3, \"avatar_subscript_url\": \"http:\\/\\/i0.hdslb.com\\/bfs\\/vip\\/icon_Certification_big_member_22_3x.png\" }, \"pendant\": { \"pid\": 0, \"name\": \"\", \"image\": \"\", \"expire\": 0, \"image_enhance\": \"\", \"image_enhance_frame\": \"\" }, \"rank\": \"10000\", \"sign\": \"哔哩哔哩王者荣耀赛事官方账号\", \"level_info\": { \"current_level\": 6 } } }",
+ "extend_json": "{\"\":{\"at_mids\":[{\"at_type\":2,\"mid_list\":[9617619]}],\"content\":\"\\/\\/@哔哩哔哩直播:6月8日KPL首届夏季赛火热开赛,明星主播花式解说!开赛首日直播间礼品不定时掉...\",\"data_type\":2,\"need_send_msg\":true,\"publisher\":37906788},\"ctrl\":[{\"data\":\"9617619\",\"length\":7,\"location\":2,\"type\":1}],\"from\":{\"emoji_type\":1,\"from\":\"create.fast_repost\",\"verify\":{\"aegis_enable\":true,\"asw\":{},\"cc\":{},\"csw\":{},\"dc\":{},\"gc\":{},\"ra\":{},\"sp\":{},\"sw\":{},\"ur\":{}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"}}",
+ "display": {
+ "origin": {
+ "emoji_info": {
+ "emoji_details": [
+ {
+ "emoji_name": "[打call]",
+ "id": 510,
+ "package_id": 1,
+ "state": 0,
+ "type": 1,
+ "attr": 0,
+ "text": "[打call]",
+ "url": "http://i0.hdslb.com/bfs/emote/431432c43da3ee5aab5b0e4f8931953e649e9975.png",
+ "meta": {
+ "size": 1
+ },
+ "mtime": 1648834168
+ }
+ ]
+ },
+ "relation": {
+ "status": 1,
+ "is_follow": 0,
+ "is_followed": 0
+ }
+ },
+ "relation": {
+ "status": 1,
+ "is_follow": 0,
+ "is_followed": 0
+ }
+ }
+ },
+ {
+ "desc": {
+ "uid": 586724890,
+ "type": 1,
+ "rid": 669019754258423810,
+ "acl": 0,
+ "view": 0,
+ "repost": 0,
+ "like": 0,
+ "is_liked": 0,
+ "dynamic_id": 669019754292314181,
+ "timestamp": 1654606700,
+ "pre_dy_id": 669016644742283288,
+ "orig_dy_id": 669007814298959974,
+ "orig_type": 2,
+ "user_profile": {
+ "info": {
+ "uid": 586724890,
+ "uname": "雪羽枭白",
+ "face": "http://i1.hdslb.com/bfs/face/a270f0df9a621d6d7f05a0ff94c64bad5fcb6964.jpg",
+ "face_nft": 0
+ },
+ "card": {
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ }
+ },
+ "vip": {
+ "vipType": 0,
+ "vipDueDate": 0,
+ "vipStatus": 0,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "role": 0,
+ "avatar_subscript_url": ""
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "rank": "10000",
+ "sign": "芜湖,起飞~",
+ "level_info": {
+ "current_level": 4
+ }
+ },
+ "uid_type": 1,
+ "stype": 0,
+ "r_type": 1,
+ "inner_id": 0,
+ "status": 1,
+ "dynamic_id_str": "669019754292314181",
+ "pre_dy_id_str": "669016644742283288",
+ "orig_dy_id_str": "669007814298959974",
+ "rid_str": "669019754258423810",
+ "origin": {
+ "uid": 392836434,
+ "type": 2,
+ "rid": 196658860,
+ "acl": 1024,
+ "view": 46111,
+ "repost": 1446,
+ "like": 0,
+ "dynamic_id": 669007814298959974,
+ "timestamp": 1654603920,
+ "pre_dy_id": 0,
+ "orig_dy_id": 0,
+ "uid_type": 1,
+ "stype": 0,
+ "r_type": 0,
+ "inner_id": 0,
+ "status": 1,
+ "dynamic_id_str": "669007814298959974",
+ "pre_dy_id_str": "0",
+ "orig_dy_id_str": "0",
+ "rid_str": "196658860"
+ },
+ "previous": {
+ "uid": 9617619,
+ "type": 1,
+ "rid": 669016644698939384,
+ "acl": 1024,
+ "view": 1381,
+ "repost": 3,
+ "like": 0,
+ "dynamic_id": 669016644742283288,
+ "timestamp": 1654605976,
+ "pre_dy_id": 669007814298959974,
+ "orig_dy_id": 669007814298959974,
+ "uid_type": 1,
+ "stype": 0,
+ "r_type": 1,
+ "inner_id": 0,
+ "status": 1,
+ "dynamic_id_str": "669016644742283288",
+ "pre_dy_id_str": "669007814298959974",
+ "orig_dy_id_str": "669007814298959974",
+ "rid_str": "669016644698939384"
+ }
+ },
+ "card": "{ \"user\": { \"uid\": 586724890, \"uname\": \"雪羽枭白\", \"face\": \"http:\\/\\/i1.hdslb.com\\/bfs\\/face\\/a270f0df9a621d6d7f05a0ff94c64bad5fcb6964.jpg\" }, \"item\": { \"rp_id\": 669019754258423810, \"uid\": 586724890, \"content\": \"\\/\\/@哔哩哔哩直播:6月8日KPL首届夏季赛火热开赛,明星主播花式解说!开赛首日直播间礼品不定时掉落,记得好好蹲守哦~明天15点,2022KPL夏季赛我们不见不散>>>网页链接\", \"ctrl\": \"[{\\\"location\\\":2,\\\"length\\\":7,\\\"data\\\":\\\"9617619\\\",\\\"type\\\":1}]\", \"orig_dy_id\": 669007814298959974, \"pre_dy_id\": 669016644742283288, \"timestamp\": 0, \"at_uids\": [ 9617619 ], \"orig_type\": 2 }, \"origin\": \"{\\\"item\\\":{\\\"at_control\\\":\\\"[{\\\\\\\"location\\\\\\\":0,\\\\\\\"length\\\\\\\":4,\\\\\\\"data\\\\\\\":\\\\\\\"4\\\\\\\",\\\\\\\"type\\\\\\\":2}]\\\",\\\"category\\\":\\\"daily\\\",\\\"description\\\":\\\"互动抽奖 【上B站,看KPL】\\\\r\\\\nKPL首届夏季赛即将来袭,6月8日15:00B站55官方直播间等你来看!你最期待哪场对决呢?更有多位明星主播陪你观赛,趣味吐槽花式解说开赛首日~\\\\r\\\\n\\\\r\\\\n55直播间马超-无双飞将皮肤助力金撒不停,赛事全程天选好礼每局掉落,观赛还能领取游戏内道具!APP端参与直播间【热议】讨论,更有机会获超多奖励。\\\\r\\\\n\\\\r\\\\nKPL赛事征稿开赛日同步上线,带#KPL激励计划#话题投稿,瓜分30万奖金~\\\\r\\\\n战火将燃,谁将勇夺开门红,让我们拭目以待! [打call]\\\\n\\\\n直播间TP:https:\\\\\\/\\\\\\/live.bilibili.com\\\\\\/55 \\\\n赛事预测:https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/v\\\\\\/game\\\\\\/match\\\\\\/competition?spm_id_from=444.42.0.0 \\\\n更多比赛:https:\\\\\\/\\\\\\/www.bilibili.com\\\\\\/v\\\\\\/game\\\\\\/match\\\\\\/schedule?mid=0&gid=0&tid=0&time=1639785600000&spm_id_from=444.42.0.0\\\",\\\"id\\\":196658860,\\\"is_fav\\\":0,\\\"pictures\\\":[{\\\"img_height\\\":6758,\\\"img_size\\\":4693.3251953125,\\\"img_src\\\":\\\"https:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/album\\\\\\/d4fd33fe00c80938daf6f14641f15901bc4a0d17.jpg\\\",\\\"img_tags\\\":null,\\\"img_width\\\":1080}],\\\"pictures_count\\\":1,\\\"reply\\\":128,\\\"role\\\":[],\\\"settings\\\":{\\\"copy_forbidden\\\":\\\"0\\\"},\\\"source\\\":[],\\\"title\\\":\\\"\\\",\\\"upload_time\\\":1654603920},\\\"user\\\":{\\\"head_url\\\":\\\"http:\\\\\\/\\\\\\/i0.hdslb.com\\\\\\/bfs\\\\\\/face\\\\\\/50de7906e50260c0e596d54ca51687e58ed7a9ba.jpg\\\",\\\"name\\\":\\\"哔哩哔哩王者荣耀赛事\\\",\\\"uid\\\":392836434,\\\"vip\\\":{\\\"avatar_subscript\\\":1,\\\"due_date\\\":1661097600000,\\\"label\\\":{\\\"label_theme\\\":\\\"annual_vip\\\",\\\"path\\\":\\\"\\\",\\\"text\\\":\\\"年度大会员\\\"},\\\"nickname_color\\\":\\\"#FB7299\\\",\\\"status\\\":1,\\\"theme_type\\\":0,\\\"type\\\":2,\\\"vip_pay_type\\\":0}}}\", \"origin_extension\": { \"lott\": \"{\\\"lottery_id\\\":96074}\" }, \"origin_extend_json\": \"{\\\"ctrl\\\":[{\\\"data\\\":\\\"4\\\",\\\"length\\\":4,\\\"location\\\":0,\\\"type\\\":2}],\\\"from\\\":{\\\"emoji_type\\\":1,\\\"from\\\":\\\"create.dynamic.web\\\",\\\"verify\\\":{\\\"aegis_enable\\\":true,\\\"asw\\\":{},\\\"cc\\\":{},\\\"csw\\\":{},\\\"dc\\\":{},\\\"gc\\\":{},\\\"ra\\\":{},\\\"sp\\\":{},\\\"sw\\\":{},\\\"ur\\\":{},\\\"verify_first\\\":true}},\\\"like_icon\\\":{\\\"action\\\":\\\"\\\",\\\"action_url\\\":\\\"\\\",\\\"end\\\":\\\"\\\",\\\"end_url\\\":\\\"\\\",\\\"start\\\":\\\"\\\",\\\"start_url\\\":\\\"\\\"},\\\"lott\\\":{\\\"lottery_id\\\":96074},\\\"topic\\\":{\\\"is_attach_topic\\\":1}}\", \"origin_user\": { \"info\": { \"uid\": 392836434, \"uname\": \"哔哩哔哩王者荣耀赛事\", \"face\": \"http:\\/\\/i0.hdslb.com\\/bfs\\/face\\/50de7906e50260c0e596d54ca51687e58ed7a9ba.jpg\", \"face_nft\": 0 }, \"card\": { \"official_verify\": { \"type\": 1, \"desc\": \"哔哩哔哩王者荣耀赛事官方帐号\" } }, \"vip\": { \"vipType\": 2, \"vipDueDate\": 1661097600000, \"vipStatus\": 1, \"themeType\": 0, \"label\": { \"path\": \"\", \"text\": \"年度大会员\", \"label_theme\": \"annual_vip\", \"text_color\": \"#FFFFFF\", \"bg_style\": 1, \"bg_color\": \"#FB7299\", \"border_color\": \"\" }, \"avatar_subscript\": 1, \"nickname_color\": \"#FB7299\", \"role\": 3, \"avatar_subscript_url\": \"http:\\/\\/i0.hdslb.com\\/bfs\\/vip\\/icon_Certification_big_member_22_3x.png\" }, \"pendant\": { \"pid\": 0, \"name\": \"\", \"image\": \"\", \"expire\": 0, \"image_enhance\": \"\", \"image_enhance_frame\": \"\" }, \"rank\": \"10000\", \"sign\": \"哔哩哔哩王者荣耀赛事官方账号\", \"level_info\": { \"current_level\": 6 } } }",
+ "extend_json": "{\"\":{\"at_mids\":[{\"at_type\":2,\"mid_list\":[9617619]}],\"content\":\"\\/\\/@哔哩哔哩直播:6月8日KPL首届夏季赛火热开赛,明星主播花式解说!开赛首日直播间礼品不定时掉落,记得好好蹲守哦~明天15点,2022KPL夏季赛我们不见不散>>>网页链接\",\"data_type\":2,\"need_send_msg\":true,\"publisher\":586724890},\"ctrl\":[{\"data\":\"9617619\",\"length\":7,\"location\":2,\"type\":1}],\"from\":{\"emoji_type\":1,\"from\":\"create.dynamic.web\",\"verify\":{\"aegis_enable\":true,\"asw\":{},\"cc\":{},\"csw\":{},\"dc\":{},\"gc\":{},\"ra\":{},\"sp\":{},\"sw\":{},\"ur\":{}}},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"}}",
+ "display": {
+ "origin": {
+ "emoji_info": {
+ "emoji_details": [
+ {
+ "emoji_name": "[打call]",
+ "id": 510,
+ "package_id": 1,
+ "state": 0,
+ "type": 1,
+ "attr": 0,
+ "text": "[打call]",
+ "url": "http://i0.hdslb.com/bfs/emote/431432c43da3ee5aab5b0e4f8931953e649e9975.png",
+ "meta": {
+ "size": 1
+ },
+ "mtime": 1648834168
+ }
+ ]
+ },
+ "relation": {
+ "status": 1,
+ "is_follow": 0,
+ "is_followed": 0
+ }
+ },
+ "relation": {
+ "status": 1,
+ "is_follow": 0,
+ "is_followed": 0
+ }
+ }
+ }
+ ],
+ "_gt_": 0
+ }
+}
+```
+
+
+
+## 动态点赞列表
+
+> https://api.vc.bilibili.com/dynamic_like/v1/dynamic_like/spec_item_likes
+
+请求方式:GET
+
+==Attention: 点赞列表总计超过25K部分继续获取可能被限制。==
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----------- | ---- | ------ | ------- | ---- |
+|dynamic_id|int64 | 动态id | 必须 | |
+|pn|int64 | 页码 | 非必须 | |
+|ps|int64 | 每页数量 | 非必须 |该值不得大于20 |
+
+**json回复:**
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | -------- |
+| code | num | 返回值 | 0:成功 |
+| data | obj | 信息本体 | |
+| message | str | 错误信息 | 默认为空 |
+| msg | num | 空 | |
+
+`data`对象:
+
+| 字段 | 类型 | 用途 | 备注 |
+| -------- | ---- | -------------- | ------------ |
+|item_likes|list |点赞信息列表主体 | |
+| has_more | bool | 是否还有下一页 | 每页最多20条 |
+| total_count | int | 总计点赞数 | |
+| _gt_ | num | 0 | 作用尚不明确 |
+
+`data`中的`item_likes`对象:
+
+由于参数过多,这里不一一列举,请自行参阅其他文件理解。
+
+**示例:**
+
+获取`哔哩哔哩弹幕网`的动态id为`669016644742283288`动态
+```shell
+curl -G 'https://api.vc.bilibili.com/dynamic_like/v1/dynamic_like/spec_item_likes' \
+--data-urlencode 'dynamic_id=669016644742283288'
+```
+
+
+查看响应示例
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "message": "",
+ "data": {
+ "item_likes": [
+ {
+ "uid": 660169578,
+ "time": 1654946013,
+ "face_url": "http://i0.hdslb.com/bfs/face/346ce28e99cc0a7d9cc05b0c0951957445cbcb61.jpg",
+ "uname": "空蓝奇观",
+ "user_info": {
+ "uid": 660169578,
+ "uname": "空蓝奇观",
+ "face": "http://i0.hdslb.com/bfs/face/346ce28e99cc0a7d9cc05b0c0951957445cbcb61.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1656604800000,
+ "vipStatus": 1,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "大会员",
+ "label_theme": "vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "",
+ "role": 1,
+ "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "sign": "。。。",
+ "level_info": {
+ "current_level": 4
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 522318130,
+ "time": 1654901839,
+ "face_url": "http://i1.hdslb.com/bfs/face/3159660d82bf0ffc878265cd11f7bb55122848a8.jpg",
+ "uname": "114514号饼干机器人",
+ "user_info": {
+ "uid": 522318130,
+ "uname": "114514号饼干机器人",
+ "face": "http://i1.hdslb.com/bfs/face/3159660d82bf0ffc878265cd11f7bb55122848a8.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1655740800000,
+ "vipStatus": 1,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "大会员",
+ "label_theme": "vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "",
+ "role": 1,
+ "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "sign": "",
+ "level_info": {
+ "current_level": 4
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 473098535,
+ "time": 1654874055,
+ "face_url": "http://i2.hdslb.com/bfs/face/ae37c4c8a7512322186eaf1c1cb170362c604215.jpg",
+ "uname": "花式送人头的感觉",
+ "user_info": {
+ "uid": 473098535,
+ "uname": "花式送人头的感觉",
+ "face": "http://i2.hdslb.com/bfs/face/ae37c4c8a7512322186eaf1c1cb170362c604215.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1626451200000,
+ "vipStatus": 0,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "role": 0,
+ "avatar_subscript_url": ""
+ },
+ "pendant": {
+ "pid": 32446,
+ "name": "EDG战队",
+ "image": "http://i2.hdslb.com/bfs/garb/item/422c8bd354989845bd9ed64bd00cfa1048e92580.png",
+ "expire": 0,
+ "image_enhance": "http://i2.hdslb.com/bfs/garb/item/422c8bd354989845bd9ed64bd00cfa1048e92580.png",
+ "image_enhance_frame": ""
+ },
+ "sign": "",
+ "level_info": {
+ "current_level": 4
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 297957406,
+ "time": 1654870870,
+ "face_url": "http://i1.hdslb.com/bfs/face/c28b431177fa6faffc4b928b9506a7057f002f73.jpg",
+ "uname": "冷水ensq",
+ "user_info": {
+ "uid": 297957406,
+ "uname": "冷水ensq",
+ "face": "http://i1.hdslb.com/bfs/face/c28b431177fa6faffc4b928b9506a7057f002f73.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 2,
+ "vipDueDate": 1657036800000,
+ "vipStatus": 1,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "年度大会员",
+ "label_theme": "annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "sign": "这个人很神秘,只写了这么点东西",
+ "level_info": {
+ "current_level": 5
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 384080149,
+ "time": 1654869742,
+ "face_url": "http://i1.hdslb.com/bfs/face/74efb9ca3fc68679cb3ddbf331ceffc246f13929.jpg",
+ "uname": "嵇獬",
+ "user_info": {
+ "uid": 384080149,
+ "uname": "嵇獬",
+ "face": "http://i1.hdslb.com/bfs/face/74efb9ca3fc68679cb3ddbf331ceffc246f13929.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1583942400000,
+ "vipStatus": 0,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "role": 0,
+ "avatar_subscript_url": ""
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "sign": "这个人很懒,也不知道写什么\n我会一直做自己",
+ "level_info": {
+ "current_level": 5
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 666484726,
+ "time": 1654867375,
+ "face_url": "http://i1.hdslb.com/bfs/face/8e7c02c5d98d8ee52d0643227aed59b4fca1420d.jpg",
+ "uname": "未未成年累月",
+ "user_info": {
+ "uid": 666484726,
+ "uname": "未未成年累月",
+ "face": "http://i1.hdslb.com/bfs/face/8e7c02c5d98d8ee52d0643227aed59b4fca1420d.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1626624000000,
+ "vipStatus": 0,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "role": 0,
+ "avatar_subscript_url": ""
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "sign": "",
+ "level_info": {
+ "current_level": 3
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 298557818,
+ "time": 1654865058,
+ "face_url": "http://i2.hdslb.com/bfs/face/b3bea3c029e4a35788625228a8ffbcec6c00eaea.jpg",
+ "uname": "爱吃星河的饼干",
+ "user_info": {
+ "uid": 298557818,
+ "uname": "爱吃星河的饼干",
+ "face": "http://i2.hdslb.com/bfs/face/b3bea3c029e4a35788625228a8ffbcec6c00eaea.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1603209600000,
+ "vipStatus": 0,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "role": 0,
+ "avatar_subscript_url": ""
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "sign": "规矩,既是束缚,也是保护。",
+ "level_info": {
+ "current_level": 5
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 431901641,
+ "time": 1654845296,
+ "face_url": "http://i2.hdslb.com/bfs/face/88bf1a1c0cbbdf39032fa766e0b2324716b5315e.jpg",
+ "uname": "水粉墨殇",
+ "user_info": {
+ "uid": 431901641,
+ "uname": "水粉墨殇",
+ "face": "http://i2.hdslb.com/bfs/face/88bf1a1c0cbbdf39032fa766e0b2324716b5315e.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 2,
+ "vipDueDate": 1655740800000,
+ "vipStatus": 1,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "年度大会员",
+ "label_theme": "annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
+ },
+ "pendant": {
+ "pid": 5305,
+ "name": "明日方舟音律系列",
+ "image": "http://i2.hdslb.com/bfs/garb/item/615a1653281141ddf64cbb98c792ddaee78f7f40.png",
+ "expire": 0,
+ "image_enhance": "http://i2.hdslb.com/bfs/garb/item/516ecdf2d495a62f1bac31497c831b711823140c.webp",
+ "image_enhance_frame": "http://i2.hdslb.com/bfs/garb/item/c0751afbf950373c260254d02768eabf30ff3906.png"
+ },
+ "sign": "",
+ "level_info": {
+ "current_level": 5
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 670417135,
+ "time": 1654833667,
+ "face_url": "http://i1.hdslb.com/bfs/face/f8fddf339016be034736c45714b52fbb148d5252.jpg",
+ "uname": "阿布不喜欢我",
+ "user_info": {
+ "uid": 670417135,
+ "uname": "阿布不喜欢我",
+ "face": "http://i1.hdslb.com/bfs/face/f8fddf339016be034736c45714b52fbb148d5252.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1626451200000,
+ "vipStatus": 0,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "role": 0,
+ "avatar_subscript_url": ""
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "sign": "",
+ "level_info": {
+ "current_level": 4
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 339203848,
+ "time": 1654798783,
+ "face_url": "http://i1.hdslb.com/bfs/face/6bead07c483681db51d519aed8b8d00de265e8ae.jpg",
+ "uname": "XD君233",
+ "user_info": {
+ "uid": 339203848,
+ "uname": "XD君233",
+ "face": "http://i1.hdslb.com/bfs/face/6bead07c483681db51d519aed8b8d00de265e8ae.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1620748800000,
+ "vipStatus": 0,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "role": 0,
+ "avatar_subscript_url": ""
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "sign": "大爱火柴人,我的世界和一些求生枪战游戏",
+ "level_info": {
+ "current_level": 5
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 199624899,
+ "time": 1654792330,
+ "face_url": "http://i0.hdslb.com/bfs/face/59526a5bfbe6985a0741ddaacffaee3c90c5e34a.jpg",
+ "uname": "猛Pink",
+ "user_info": {
+ "uid": 199624899,
+ "uname": "猛Pink",
+ "face": "http://i0.hdslb.com/bfs/face/59526a5bfbe6985a0741ddaacffaee3c90c5e34a.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1598112000000,
+ "vipStatus": 0,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "role": 0,
+ "avatar_subscript_url": ""
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "sign": "这个人很神秘,什么都看不了=●ω●=",
+ "level_info": {
+ "current_level": 5
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 451151619,
+ "time": 1654791995,
+ "face_url": "http://i0.hdslb.com/bfs/face/9322b5a5802b5c831b2382afed073f5290be6e38.jpg",
+ "uname": "七城关",
+ "user_info": {
+ "uid": 451151619,
+ "uname": "七城关",
+ "face": "http://i0.hdslb.com/bfs/face/9322b5a5802b5c831b2382afed073f5290be6e38.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 2,
+ "vipDueDate": 1655827200000,
+ "vipStatus": 1,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "年度大会员",
+ "label_theme": "annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
+ },
+ "pendant": {
+ "pid": 6249,
+ "name": "星座系列:处女座",
+ "image": "http://i0.hdslb.com/bfs/garb/item/cd82b1c35fe0ea221c4fd56525893bc58ec53300.png",
+ "expire": 0,
+ "image_enhance": "http://i0.hdslb.com/bfs/garb/item/cd82b1c35fe0ea221c4fd56525893bc58ec53300.png",
+ "image_enhance_frame": ""
+ },
+ "sign": "强迫症",
+ "level_info": {
+ "current_level": 5
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 375385022,
+ "time": 1654785903,
+ "face_url": "http://i2.hdslb.com/bfs/face/fbdfa7917e8f874382f4b42fcccd9c7296461cb9.jpg",
+ "uname": "想变成魔法少女的笙绘",
+ "user_info": {
+ "uid": 375385022,
+ "uname": "想变成魔法少女的笙绘",
+ "face": "http://i2.hdslb.com/bfs/face/fbdfa7917e8f874382f4b42fcccd9c7296461cb9.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1643472000000,
+ "vipStatus": 0,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "role": 0,
+ "avatar_subscript_url": ""
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "sign": "希望自己的原创作品可以成为自活过的证明",
+ "level_info": {
+ "current_level": 5
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 291506521,
+ "time": 1654782383,
+ "face_url": "http://i1.hdslb.com/bfs/face/887f13f658cfbee23e3e200fe61755f1a8d5823c.jpg",
+ "uname": "星が落ちた日",
+ "user_info": {
+ "uid": 291506521,
+ "uname": "星が落ちた日",
+ "face": "http://i1.hdslb.com/bfs/face/887f13f658cfbee23e3e200fe61755f1a8d5823c.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 2,
+ "vipDueDate": 1673884800000,
+ "vipStatus": 1,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "年度大会员",
+ "label_theme": "annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
+ },
+ "pendant": {
+ "pid": 4104,
+ "name": "良辰美景·不问天",
+ "image": "http://i1.hdslb.com/bfs/garb/item/4dbf08aae75f9479a21db2bb289229b8d71631e1.png",
+ "expire": 0,
+ "image_enhance": "http://i1.hdslb.com/bfs/garb/item/253bf41272ddef301c1f6a0361abd49d772bfafc.webp",
+ "image_enhance_frame": "http://i1.hdslb.com/bfs/garb/item/c4934a1ffdb3865fe79b319de439af3973b53ec9.png"
+ },
+ "sign": "一时摸鱼一时爽,一直摸鱼一直爽!",
+ "level_info": {
+ "current_level": 5
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 179333519,
+ "time": 1654780391,
+ "face_url": "http://i2.hdslb.com/bfs/face/89a58c10bf500fb7c9530ba8f28f73208c510d22.jpg",
+ "uname": "纳眉兹www",
+ "user_info": {
+ "uid": 179333519,
+ "uname": "纳眉兹www",
+ "face": "http://i2.hdslb.com/bfs/face/89a58c10bf500fb7c9530ba8f28f73208c510d22.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1646496000000,
+ "vipStatus": 0,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "role": 0,
+ "avatar_subscript_url": ""
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "sign": "人生",
+ "level_info": {
+ "current_level": 4
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 497821251,
+ "time": 1654780363,
+ "face_url": "http://i0.hdslb.com/bfs/face/a7bf301db14cb7fa094dba5f68d13faa7c5798d2.jpg",
+ "uname": "不器用な・ジョゼ",
+ "user_info": {
+ "uid": 497821251,
+ "uname": "不器用な・ジョゼ",
+ "face": "http://i0.hdslb.com/bfs/face/a7bf301db14cb7fa094dba5f68d13faa7c5798d2.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 2,
+ "vipDueDate": 1683216000000,
+ "vipStatus": 1,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "年度大会员",
+ "label_theme": "annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
+ },
+ "pendant": {
+ "pid": 299,
+ "name": "梦塔·雪谜城",
+ "image": "http://i0.hdslb.com/bfs/face/c93e1eeb77b1bb0753eff243d49c006bf18d69c5.png",
+ "expire": 0,
+ "image_enhance": "http://i0.hdslb.com/bfs/face/c93e1eeb77b1bb0753eff243d49c006bf18d69c5.png",
+ "image_enhance_frame": ""
+ },
+ "sign": "・花无凋零之日,爱无传达之时,爱情亘古不变,紫罗兰永世长存\n・人活着就是为了樱岛麻衣\nキャ━━━━(゚∀゚)━━━━!!",
+ "level_info": {
+ "current_level": 5
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 1054063538,
+ "time": 1654779485,
+ "face_url": "http://i2.hdslb.com/bfs/face/bc60a7b5c3b5fd624043050a3ab15e2c4c871803.jpg",
+ "uname": "贪吃的ZZ",
+ "user_info": {
+ "uid": 1054063538,
+ "uname": "贪吃的ZZ",
+ "face": "http://i2.hdslb.com/bfs/face/bc60a7b5c3b5fd624043050a3ab15e2c4c871803.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 0,
+ "vipDueDate": 0,
+ "vipStatus": 0,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "role": 0,
+ "avatar_subscript_url": ""
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "sign": "(ฅ>ω<*ฅ)",
+ "level_info": {
+ "current_level": 3
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 305663999,
+ "time": 1654777857,
+ "face_url": "http://i2.hdslb.com/bfs/face/3a2b2f84990ec182af8380ef97db8256c6ecec25.jpg",
+ "uname": "qw夕颜",
+ "user_info": {
+ "uid": 305663999,
+ "uname": "qw夕颜",
+ "face": "http://i2.hdslb.com/bfs/face/3a2b2f84990ec182af8380ef97db8256c6ecec25.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 0,
+ "vipDueDate": 0,
+ "vipStatus": 0,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "role": 0,
+ "avatar_subscript_url": ""
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "sign": "",
+ "level_info": {
+ "current_level": 4
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 436616802,
+ "time": 1654776381,
+ "face_url": "http://i0.hdslb.com/bfs/face/e1ddfcdac95b39217e4710f3605005abfecb53a1.jpg",
+ "uname": "桐影映江边",
+ "user_info": {
+ "uid": 436616802,
+ "uname": "桐影映江边",
+ "face": "http://i0.hdslb.com/bfs/face/e1ddfcdac95b39217e4710f3605005abfecb53a1.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1664208000000,
+ "vipStatus": 1,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "大会员",
+ "label_theme": "vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "",
+ "role": 1,
+ "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
+ },
+ "pendant": {
+ "pid": 1990,
+ "name": "明日方舟",
+ "image": "http://i0.hdslb.com/bfs/garb/item/0c8e7d627a35c378b757f39419889ef1fcc0ed9b.png",
+ "expire": 0,
+ "image_enhance": "http://i0.hdslb.com/bfs/garb/item/1815c81da71069ea3db4553cad7d233f782da2f2.webp",
+ "image_enhance_frame": "http://i0.hdslb.com/bfs/garb/item/ed2b4ef1da228c0b937753542b33af8f04d1d70c.png"
+ },
+ "sign": "追寻着你的身影,从迷失的世界起航,直到深海的尽头~",
+ "level_info": {
+ "current_level": 4
+ }
+ },
+ "attend": 0
+ },
+ {
+ "uid": 266536964,
+ "time": 1654775142,
+ "face_url": "http://i2.hdslb.com/bfs/face/b15e60d6e5403075f212d5bd3d30dc0fb3016088.jpg",
+ "uname": "君九j",
+ "user_info": {
+ "uid": 266536964,
+ "uname": "君九j",
+ "face": "http://i2.hdslb.com/bfs/face/b15e60d6e5403075f212d5bd3d30dc0fb3016088.jpg",
+ "rank": "10000",
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 2,
+ "vipDueDate": 1683648000000,
+ "vipStatus": 1,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "年度大会员",
+ "label_theme": "annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
+ },
+ "pendant": {
+ "pid": 1293,
+ "name": "碧蓝航线",
+ "image": "http://i2.hdslb.com/bfs/face/2508daec59b2aaada2784f26f9c1c28069f28e43.png",
+ "expire": 0,
+ "image_enhance": "http://i2.hdslb.com/bfs/face/2508daec59b2aaada2784f26f9c1c28069f28e43.png",
+ "image_enhance_frame": ""
+ },
+ "sign": "",
+ "level_info": {
+ "current_level": 5
+ }
+ },
+ "attend": 0
+ }
+ ],
+ "has_more": 1,
+ "total_count": 2367,
+ "_gt_": 0
+ }
+}
+```
+
+
+
+## 获取草稿列表
+
+> https://api.vc.bilibili.com/dynamic_draft/v1/dynamic_draft/get_drafts
+
+请求方式:GET
+
+认证方式:Cookie(SESSDATA)
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------- |
+| code | num | 返回值 | 0:成功 |
+| data | obj | 信息本体 | |
+| message | str | 错误信息 | 正常为"0" |
+| ttl | num | 1 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ----- | -------- | ---- |
+| drafts | array | 草稿列表 | |
+
+`drafts`列表的每一项:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | -------------------- | ------------------------------------------------------------ |
+| draft_id | str | 草稿id | |
+| publish_time | num | 定时发送的秒级时间戳 | |
+| type | num | 动态类型 | 请参考[获取特定动态卡片信息](get_dynamic_detail.md) |
+| uid | num | 自己的mid | |
+| user_profile | obj | 自己的用户信息 | 请参考[用户基本信息](../user/info.md) |
+| request | str | 动态内容 | 该项为json转成str,内容请参考[发表纯文本动态](publish.md#发表纯文本动态) |
diff --git a/dynamic/card_info.md b/docs/dynamic/card_info.md
similarity index 91%
rename from dynamic/card_info.md
rename to docs/dynamic/card_info.md
index 0b7c8d8..d0ff84c 100644
--- a/dynamic/card_info.md
+++ b/docs/dynamic/card_info.md
@@ -13,12 +13,13 @@
需注意账号转发视频投稿,其他用户的动态以及分享收藏夹等均为转发类内容,并不属于type=4300的收藏类动态等。
在type=1的转发类动态中,解析出的对象包含以下内容:
-| 字段 | 类型 | 内容 | 备注 |
+
+| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------- |
-| user | obj | 转发者用户信息 | 包含用户名,用户id和头像 |
-| item | obj | 转发相关信息 | `content`字段为转发附言 | |
-| origin | str | 被转发动态信息 | 即本文档所描述的动态详细信息字段。动态类型为`item`对象的`orig_type`字段 |
-| origin_extend_json | str | 被转发动态补充信息 | |
+| user | obj | 转发者用户信息 | 包含用户名,用户id和头像 |
+| item | obj | 转发相关信息 | `content`字段为转发附言 | |
+| origin | str | 被转发动态信息 | 即本文档所描述的动态详细信息字段。 动态类型为`item`对象的`orig_type`字段 |
+| origin_extend_json | str | 被转发动态补充信息 | |
| origin_user | obj | 被转发用户信息 | |
| activity_infos | obj | 被转发动态参与的活动 | |
@@ -106,10 +107,11 @@
## 在图片动态中(type=2)
在type=2的图片动态中,解析出的对象包含以下内容:
-| 字段 | 类型 | 内容 | 备注 |
+
+| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------- |
-| item | obj | 图片动态内容 | `description`字段为文字内容`pictures`字段图片 | |
-| user | obj | 发布者用户信息 | 包含用户名,用户id和头像 |
+| item | obj | 图片动态内容 | `description`字段为文字内容 `pictures`字段图片 | |
+| user | obj | 发布者用户信息 | 包含用户名,用户id和头像 |
@@ -166,14 +168,14 @@
-
## 在文字动态中(type=4)
在type=4的文字动态中,解析出的对象包含以下内容:
-| 字段 | 类型 | 内容 | 备注 |
+
+| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------- |
-| item | obj | 文字动态内容 | `description`字段为文字内容 | |
-| user | obj | 发布者用户信息 | 包含用户名,用户id和头像 |
+| item | obj | 文字动态内容 | `description`字段为文字内容 | |
+| user | obj | 发布者用户信息 | 包含用户名,用户id和头像 |
@@ -204,9 +206,10 @@
## 在视频投稿动态中(type=8)
在type=8的视频投稿动态中,解析出的对象包含以下内容:
-| 字段 | 类型 | 内容 | 备注 |
+
+| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------- |
-| aid | num | 视频avid | |
+| aid | num | 视频avid | |
| attribute | num | `0` | [可能已弃用](https://shakaianee.top/archives/9/) |
| cid | num | 视频cid | |
| copyright | num | 原创信息 | 1为原创,2为转载 |
@@ -215,7 +218,7 @@
| duration | num | 视频时长 | 单位秒 |
| dynamic | str | 动态文字内容 | |
| first_frame | str | 视频第一帧图片 | 图片链接 |
-| jump_url | str | 视频跳转链接 | |
+| jump_url | str | 视频跳转链接 | |
| mission_id | num | 稿件参与的活动id | |
| owner | obj | 动态作者信息 | 即up主 |
| pic | str | 视频封面 | |
@@ -223,7 +226,7 @@
| pubdate | num | 发布时间 | 时间戳 |
| rights | obj | 联合投稿,是否付费等信息 | 可能用来代替原`attribute`字段 |
| stat | obj | 视频数据 | 点赞投币等 |
-| state | num | 视频状态 | 详情见**属性数据文档** |
+| state | num | 视频状态 | 详情见**属性数据文档** |
| tid | num | 视频分区编号 | |
| title | str | 视频标题 | |
| tname | str | 视频分区名称 | |
@@ -302,7 +305,8 @@
## 在专栏投稿动态中(type=64)
在type=64的专栏投稿动态中,解析出的对象包含以下内容:
-| 字段 | 类型 | 内容 | 备注 |
+
+| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------- |
| id | num | 专栏的id,即cv号 | |
| category | obj | 分类号和分类名称 | |
@@ -313,10 +317,10 @@
| template_id | num | 模板信息 | |
| state | num | 专栏状态 | |
| author | obj | 作者信息 | 包含了头像挂件和勋章等 |
-| reprint | num | 可能是转载 | |
+| reprint | num | 可能是转载 | |
| image_urls | obj | 图片链接 | |
-| publish_time | num | 发布时间 | 时间戳,应该指专栏 |
-| ctime | num | 发布时间 | 时间戳,应该指动态 |
+| publish_time | num | 发布时间 | 时间戳,应该指专栏 |
+| ctime | num | 发布时间 | 时间戳,应该指动态 |
| stats | obj | 专栏数据,点赞之类 | 有点踩字段,但并未实装此功能 |
| words | num | 字数 | |
| origin_image_urls | obj | 源图片地址 | |
@@ -448,7 +452,8 @@
## 在音频投稿动态中(type=256)
在type=256的音频投稿动态中,解析出的对象包含以下内容:
-| 字段 | 类型 | 内容 | 备注 |
+
+| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------- |
| id | num | 投稿编号 | 即au号 |
| upId | num | 音乐人id | 与用户uid不同 |
@@ -456,7 +461,7 @@
| upper | str | 上传者名称 | |
| cover | str | 封面图链接 | |
| author | str | 作者名称 | |
-| ctime | num | 上传时间 | 时间戳的后面加了三个0 |
+| ctime | num | 上传时间 | 时间戳的后面加了三个0 |
| playCnt | num | 播放量 | |
| intro | str | 音频介绍 | |
| schema | str | 跳转链接 | 似乎并不只是url |
diff --git a/dynamic/content.md b/docs/dynamic/content.md
similarity index 98%
rename from dynamic/content.md
rename to docs/dynamic/content.md
index aaef5e8..5164f4b 100644
--- a/dynamic/content.md
+++ b/docs/dynamic/content.md
@@ -1,13 +1,8 @@
# 动态信息
-- [获取正在直播的已关注者](#获取正在直播的已关注者)
-- [获取发布新动态的已关注者](#获取发布新动态的已关注者)
-
----
-
## 获取正在直播的已关注者
-> http://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/w_live_users
+> https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/w_live_users
*请求方式:GET*
@@ -60,7 +55,7 @@
**示例:**
```shell
-curl -G 'http://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/w_live_users' \
+curl -G 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/w_live_users' \
--data-urlencode 'size=10' \
-b 'SESSDATA=xxx'
```
@@ -115,7 +110,7 @@ curl -G 'http://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/w_live_users' \
## 获取发布新动态的已关注者
-> http://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/w_dyn_uplist
+> https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/w_dyn_uplist
*请求方式:GET*
@@ -157,7 +152,7 @@ curl -G 'http://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/w_live_users' \
**示例:**
```shell
-curl -G 'http://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/w_dyn_uplist' \
+curl -G 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/w_dyn_uplist' \
-b 'SESSDATA=xxx'
```
diff --git a/docs/dynamic/detail.md b/docs/dynamic/detail.md
new file mode 100644
index 0000000..a0bb866
--- /dev/null
+++ b/docs/dynamic/detail.md
@@ -0,0 +1,743 @@
+# 获取动态详情
+
+## 动态详情
+
+> https://api.bilibili.com/x/polymer/web-dynamic/v1/detail
+
+*请求方式: GET*
+
+认证方式: Cookie (SESSDATA) (非必要)
+
+鉴权方式: Cookie (User-Agent) (必要), [Wbi 签名](../misc/sign/wbi.md) (非必要)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --- | --- | --- | --- | --- |
+| id | num | 动态 ID | 必要 | |
+| timezone_offset | num | -480 | 非必要 | |
+| platform | str | 平台 | 非必要 | `web` |
+| gaia_source | str | 来源 | 非必要 | `main_web` |
+| features | str | 功能 | 必要 | `itemOpusStyle,opusBigCover,onlyfansVote,endFooterHidden,decorationCard,onlyfansAssetsV2,ugcDelete,onlyfansQaCard,commentsNewVersion` |
+| web_location | str | `333.1368` | 非必要 | |
+| x-bili-device-req-json | obj | 设备信息? | 非必要 | `{"platform":"web","device":"pc"}` |
+| x-bili-web-req-json | obj | 请求信息? | 非必要 | `{"spm_id":"333.1368"}` |
+| w_rid | str | Wbi 签名 | 不必要 | 参见 [Wbi 签名](../misc/sign/wbi.md) |
+| wts | num | UNIX 秒级时间戳 | 不必要 | 参见 [Wbi 签名](../misc/sign/wbi.md) |
+
+**JSON回复:**
+
+根对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+|---------|-----|------|--------------------------|
+| code | num | 响应码 | 0: 成功 -352: 风控校验失败 4101139: 4101139 |
+| message | str | | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+|------|-----|-----|-----|
+| item | obj | | |
+
+`data.item`对象:
+
+参照 [获取动态列表](./all.md#获取动态列表)
+
+**示例:**
+
+```shell
+curl -G 'https://api.bilibili.com/x/polymer/web-dynamic/v1/detail' \
+ -A 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0' \
+ -b 'SESSDATA=xxxxxx' \
+ --url-query 'id=967717348014293017' \
+ --url-query 'w_rid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
+ --url-query 'wts=1724986186'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "item": {
+ "basic": {
+ "comment_id_str": "326122895",
+ "comment_type": 11,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "326122895"
+ },
+ "id_str": "967717348014293017",
+ "modules": {
+ "module_author": {
+ "avatar": {
+ "container_size": {
+ "height": 1.35,
+ "width": 1.35
+ },
+ "fallback_layers": {
+ "is_critical_group": true,
+ "layers": [
+ {
+ "general_spec": {
+ "pos_spec": {
+ "axis_x": 0.675,
+ "axis_y": 0.675,
+ "coordinate_pos": 2
+ },
+ "render_spec": {
+ "opacity": 1
+ },
+ "size_spec": {
+ "height": 1,
+ "width": 1
+ }
+ },
+ "layer_config": {
+ "is_critical": true,
+ "tags": {
+ "AVATAR_LAYER": {},
+ "GENERAL_CFG": {
+ "config_type": 1,
+ "general_config": {
+ "web_css_style": {
+ "borderRadius": "50%"
+ }
+ }
+ }
+ }
+ },
+ "resource": {
+ "res_image": {
+ "image_src": {
+ "placeholder": 6,
+ "remote": {
+ "bfs_style": "widget-layer-avatar",
+ "url": "https://i2.hdslb.com/bfs/face/77906db03b1eefac02613de184afad03f7bc58d7.jpg"
+ },
+ "src_type": 1
+ }
+ },
+ "res_type": 3
+ },
+ "visible": true
+ }
+ ]
+ },
+ "mid": "645769214"
+ },
+ "decorate": {
+ "card_url": "https://i0.hdslb.com/bfs/vip/a9e3d993c7a15e88ce0bf714a142f7d2b44121e2.png",
+ "fan": {
+ "color": "",
+ "color_format": null,
+ "is_fan": false,
+ "num_prefix": "",
+ "num_str": "",
+ "number": 0
+ },
+ "id": 28,
+ "jump_url": "https://www.bilibili.com/h5/mall/equity-link/collect-home?item_id=28&isdiy=0&part=card&from=post&f_source=garb&vmid=645769214&native.theme=1&navhide=1",
+ "name": "2233娘",
+ "type": 1
+ },
+ "face": "https://i2.hdslb.com/bfs/face/77906db03b1eefac02613de184afad03f7bc58d7.jpg",
+ "face_nft": false,
+ "following": null,
+ "jump_url": "//space.bilibili.com/645769214/dynamic",
+ "label": "",
+ "mid": 645769214,
+ "name": "Session小胡",
+ "official_verify": {
+ "desc": "",
+ "type": -1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0,
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "",
+ "pub_location_text": "",
+ "pub_time": "2024年08月20日 19:17",
+ "pub_ts": 1724152653,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 0,
+ "avatar_subscript_url": "",
+ "due_date": 1665158400000,
+ "label": {
+ "bg_color": "",
+ "bg_style": 0,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png",
+ "label_theme": "",
+ "path": "",
+ "text": "",
+ "text_color": "",
+ "use_img_label": true
+ },
+ "nickname_color": "",
+ "status": 0,
+ "theme_type": 0,
+ "type": 1
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "今天因为Linux被骂, 决定放弃支持 Windows. 而且明天要开始军训了, 将停更若干时间, 遂发此动态, 望不知.",
+ "text": "今天因为Linux被骂, 决定放弃支持 Windows. 而且明天要开始军训了, 将停更若干时间, 遂发此动态, 望不知.",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "今天因为Linux被骂, 决定放弃支持 Windows. 而且明天要开始军训了, 将停更若干时间, 遂发此动态, 望不知."
+ },
+ "major": {
+ "draw": {
+ "id": 326122895,
+ "items": [
+ {
+ "height": 1080,
+ "size": 1005.29,
+ "src": "http://i0.hdslb.com/bfs/new_dyn/0f6f939334104ddc347566514fa4bfa7645769214.jpg",
+ "tags": [],
+ "width": 1440
+ }
+ ]
+ },
+ "type": "MAJOR_TYPE_DRAW"
+ },
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "删除",
+ "modal": {
+ "cancel": "取消",
+ "confirm": "确认删除",
+ "content": "动态删除后将无法恢复,请谨慎操作",
+ "title": "要删除动态吗?"
+ },
+ "params": {
+ "dyn_id_str": "967717348014293017",
+ "dyn_type": 2,
+ "rid_str": "326122895"
+ },
+ "type": "THREE_POINT_DELETE"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 34,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 2,
+ "forbidden": false
+ },
+ "like": {
+ "count": 65,
+ "forbidden": false,
+ "status": true
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_DRAW",
+ "visible": true
+ }
+ }
+}
+```
+
+
+
+## 动态赞与转发列表
+
+> https://api.bilibili.com/x/polymer/web-dynamic/v1/detail/reaction
+
+*请求方式: GET*
+
+认证方式: Cookie (SESSDATA)
+
+注: 登录任意账号即可, 若不登录则返回数为 0
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --- | --- | --- | --- | --- |
+| id | num | 动态 id | 必要 | |
+| offset | obj | 偏移量 | 非必要 | 用于翻页, 即响应的 `data.offset` |
+| web_location | str | 333.1369 | 非必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0: 成功 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| has_more | bool | 是否有更多 | |
+| items | array | 赞与转发列表 | |
+| offset | str | 偏移量 | 套了一层字符串的 JSON 对象, 用于下次请求 |
+| total | num | 总数 | |
+
+`data` 对象中的 `items` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| action | str | 操作类型 | 赞了/转发了 |
+| attend | num | 参与数 | 1: 对方仅关注了发送者 2: 发送者关注了对方 |
+| desc | str | 描述 | |
+| face | str | 头像 URL | |
+| mid | num | 用户 mid | |
+| name | str | 用户名 | |
+
+**示例:**
+
+获取动态 `967717348014293017` 的赞与转发列表
+
+```shell
+curl -G 'https://api.bilibili.com/x/polymer/web-dynamic/v1/detail/reaction' \
+--url-query 'id=967717348014293017' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "has_more": true,
+ "items": [
+ {
+ "action": "赞了",
+ "attend": 2,
+ "desc": "",
+ "face": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg",
+ "mid": "293793435",
+ "name": "社会易姐QwQ"
+ },
+ {
+ "action": "转发了",
+ "attend": 2,
+ "desc": "",
+ "face": "https://i1.hdslb.com/bfs/face/a8c0d532c19085ff14385abb51450d9c32afe93f.jpg",
+ "mid": "662407339",
+ "name": "XhuOffice"
+ },
+ {
+ "action": "赞了",
+ "attend": 2,
+ "desc": "",
+ "face": "https://i1.hdslb.com/bfs/face/a8c0d532c19085ff14385abb51450d9c32afe93f.jpg",
+ "mid": "662407339",
+ "name": "XhuOffice"
+ },
+ {
+ "action": "转发了",
+ "attend": 2,
+ "desc": "",
+ "face": "https://i1.hdslb.com/bfs/face/2c506dcf0b6507041b0bfafea7505cb1badf6ccd.jpg",
+ "mid": "616368979",
+ "name": "淡紫玲儿"
+ },
+ {
+ "action": "赞了",
+ "attend": 2,
+ "desc": "",
+ "face": "https://i1.hdslb.com/bfs/face/2c506dcf0b6507041b0bfafea7505cb1badf6ccd.jpg",
+ "mid": "616368979",
+ "name": "淡紫玲儿"
+ },
+ {
+ "action": "赞了",
+ "attend": 2,
+ "desc": "",
+ "face": "https://i2.hdslb.com/bfs/face/77906db03b1eefac02613de184afad03f7bc58d7.jpg",
+ "mid": "645769214",
+ "name": "Session小胡"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "共同关注了3个Up主",
+ "face": "https://i0.hdslb.com/bfs/face/2ac46bacfdedebf9aecf6415b95dd58636b1e22a.jpg",
+ "mid": "340463550",
+ "name": "折耳喵之心"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "",
+ "face": "https://i1.hdslb.com/bfs/face/ec855a27a42e174521399d7508cece6c0c02c6ff.jpg",
+ "mid": "628114249",
+ "name": "at白日梦想家"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "共同关注了3个Up主",
+ "face": "https://i1.hdslb.com/bfs/face/81362ba3f99b2702b9746ca7fe67ffc76d3a97c4.jpg",
+ "mid": "198175",
+ "name": "傲娇金发黑丝双马尾"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "",
+ "face": "https://i2.hdslb.com/bfs/face/df1c9bc7d79c84b7227486a944d7a748093fbb31.jpg",
+ "mid": "1007349302",
+ "name": "用户9420594"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "",
+ "face": "https://i0.hdslb.com/bfs/face/f17befd18cab5e157844ab986bd6c60d58d74738.jpg",
+ "mid": "1180456113",
+ "name": "人工智能小冰_yoyo"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "共同关注了2个Up主",
+ "face": "https://i0.hdslb.com/bfs/face/f1b0ebdf19c2f4b768c5a3e57cbd50e404ad9549.jpg",
+ "mid": "273008643",
+ "name": "LV1渡劫失败降到"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "",
+ "face": "https://i0.hdslb.com/bfs/face/a7732df2624c6a0b6e5856ceb27f3c96598a2fd4.jpg",
+ "mid": "452290620",
+ "name": "评论永远比视频精彩"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "",
+ "face": "https://i0.hdslb.com/bfs/face/cc2ea9088f066b33f24d39434d23aa68cb8ab761.png",
+ "mid": "91671246",
+ "name": "樱樱之雪"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "共同关注了3个Up主",
+ "face": "http://i1.hdslb.com/bfs/face/d20eae4d6339cef2267b36c1c262ae6466395b64.jpg",
+ "mid": "340632388",
+ "name": "天神永恒hb"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "共同关注了21个Up主",
+ "face": "https://i0.hdslb.com/bfs/face/368b2a33eed5dc146bd9ab8bf62bc9667653a350.jpg",
+ "mid": "38120922",
+ "name": "vgwik"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "共同关注了2个Up主",
+ "face": "https://i2.hdslb.com/bfs/face/efbd8bb841ea6340f39854b82d9741f47cb3351e.jpg",
+ "mid": "691494413",
+ "name": "熬夜肝不好"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "",
+ "face": "https://i1.hdslb.com/bfs/face/c46fe783ac7a5291dac4773744b3d35d7cebd77f.jpg",
+ "mid": "1486540726",
+ "name": "o_90"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "",
+ "face": "https://i1.hdslb.com/bfs/face/fece6f971d14fddbddcede65a42edc63d01884d4.jpg",
+ "mid": "34474963",
+ "name": "Neko_vecter"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "共同关注了8个Up主",
+ "face": "https://i0.hdslb.com/bfs/face/e1d66345bdb6f8c75b782ed5c4b93440860c894d.jpg",
+ "mid": "88466370",
+ "name": "没有钱的首富"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "共同关注了15个Up主",
+ "face": "https://i0.hdslb.com/bfs/face/f8a6e77e5839e64a7448ddeb7112af86eb47aa48.jpg",
+ "mid": "14625981",
+ "name": "龙凌洛"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "",
+ "face": "https://i2.hdslb.com/bfs/face/18c0bb87fbc8f9fde0d7f92ab88917e517e53df1.jpg",
+ "mid": "36708269",
+ "name": "alcoholmole"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "",
+ "face": "https://i0.hdslb.com/bfs/face/39f0e0ec39e6828b01afc28ad001471d1efa8c66.jpg",
+ "mid": "52874964",
+ "name": "黑暗战师"
+ },
+ {
+ "action": "赞了",
+ "attend": 1,
+ "desc": "对方关注了你",
+ "face": "https://i0.hdslb.com/bfs/face/07d73f7d01c8e8cfb9173d8fe6e40a0c8cb5713d.jpg",
+ "mid": "702368712",
+ "name": "-御帝哥哥-"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "共同关注了22个Up主",
+ "face": "http://i0.hdslb.com/bfs/face/member/noface.jpg",
+ "mid": "398095475",
+ "name": "meipeter"
+ },
+ {
+ "action": "赞了",
+ "attend": 0,
+ "desc": "",
+ "face": "https://i1.hdslb.com/bfs/face/a4a1566d7218307839345a079651bf58a69a028f.jpg",
+ "mid": "101358808",
+ "name": "香香软软的小阿芙"
+ }
+ ],
+ "offset": "{\"page\":2,\"like\":101358808,\"repost\":-1}",
+ "total": 65
+ }
+}
+```
+
+
+
+## 动态抽奖详情
+
+> https://api.vc.bilibili.com/lottery_svr/v1/lottery_svr/lottery_notice
+
+*请求方法: GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | ---- | -------- | ------ | ---- |
+| business_id | num | 动态 id | 必要 | |
+| bussiness_type | num | 业务类型? | 必要 | 1: 动态抽奖 |
+| csrf | str | CSRF Token (即 Cookie 中 bili_jct 字段) | 不必要 | |
+| web_location | str | 333.1330 | 不必要 | |
+
+
+旧版参数:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | ---- | -------- | ------ | ---- |
+| dynamic_id | num | 动态 id | 必要 | |
+
+
+
+**JSON回复:**
+
+根对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| code | num | 返回值 | 0: 成功 -9999: 服务系统错误 |
+| message | str | 错误信息 | 无则为空串 |
+| msg | str | 错误信息 | 无则为空串 |
+| data | obj | 信息本体 | 错误时为空对象 |
+
+`data`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| lottery_id | num | 抽奖 id | |
+| sender_uid | num | 发送者 mid | |
+| business_type | num | 业务类型 | 1: 动态抽奖 |
+| business_id | num | 业务 id | 可能与请求参数不同 |
+| status | num | 抽奖状态 | 0: 未开奖 2: 已开奖 |
+| lottery_time | num | 开奖时间 | UNIX 秒级时间戳 |
+| lottery_at_num | num | at 人数? | |
+| lottery_feed_limit | num | 转发限制? | |
+| need_post | num | 是否需要发布? | |
+| pay_status | num | 支付状态? | |
+| first_prize | num | 一等奖数量 | |
+| second_prize | num | 二等奖数量 | |
+| third_prize | num | 三等奖数量 | |
+| ts | num | 发布时间 | UNIX 秒级时间戳 |
+| participants | num | 参与人数 | |
+| has_charge_right | bool | 是否有充值权? | |
+| participated | bool | 是否参与过? | |
+| followed | bool | 是否关注过 | |
+| reposted | bool | 是否转发过 | |
+| lottery_detail_url | str | 抽奖详情页 URL? | |
+| first_prize_cmt | str | 一等奖奖品名称 | |
+| third_prize_cmt | str | 三等奖奖品名称 | |
+| first_prize_pic | str | 一等奖奖品图片 URL | |
+| second_prize_pic | str | 二等奖奖品图片 URL | |
+| third_prize_pic | str | 三等奖奖品图片 URL | |
+| vip_batch_sign | str | ? | |
+| prize_type_first | obj | 一等奖奖品类型 | |
+| prize_type_second | obj | 二等奖奖品类型 | 无则不存在 |
+| prize_type_third | obj | 三等奖奖品类型 | 无则不存在 |
+| lottery_result | obj | 抽奖结果 | 无则不存在 |
+
+`data`对象中的`prize_type_first`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| type | num | 奖品类型? | 0 |
+| value | obj | 奖品价值? | |
+
+`prize_type_first`对象中的`value`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| stype | num | 子奖品类型? | 0 |
+
+`data`对象中的`prize_type_second`对象:
+
+与 `prize_type_first` 格式相同
+
+`data`对象中的`prize_type_third`对象:
+
+与 `prize_type_first` 格式相同
+
+`data`对象中的`lottery_result`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| first_prize_result | array | 一等奖结果 | |
+| second_prize_result | array | 二等奖结果 | 无则不存在 |
+| third_prize_result | array | 三等奖结果 | 无则不存在 |
+
+`lottery_result`对象中的`first_prize_result`数组:
+
+| 项名 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| uid | num | 中奖者 mid | |
+| name | str | 中奖者名称 | |
+| face | str | 中奖者头像 URL | |
+| hongbao_money | num | 奖品金额? | |
+
+`lottery_result`对象中的`second_prize_result`数组:
+
+与 `first_prize_result` 格式相同
+
+`lottery_result`对象中的`third_prize_result`数组:
+
+与 `first_prize_result` 格式相同
+
+**示例:**
+
+```shell
+curl -G 'https://api.vc.bilibili.com/lottery_svr/v1/lottery_svr/lottery_notice' \
+--url-query 'business_id=969916293954142214' \
+--url-query 'business_type=1'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "data": {
+ "lottery_id": 314834,
+ "sender_uid": 36081646,
+ "business_type": 1,
+ "business_id": 969916293954142214,
+ "status": 2,
+ "lottery_time": 1724860800,
+ "lottery_at_num": 0,
+ "lottery_feed_limit": 1,
+ "need_post": 0,
+ "pay_status": 0,
+ "first_prize": 1,
+ "second_prize": 0,
+ "third_prize": 0,
+ "ts": 1724922650,
+ "participants": 9230,
+ "has_charge_right": false,
+ "participated": false,
+ "followed": false,
+ "reposted": false,
+ "lottery_detail_url": "",
+ "first_prize_cmt": "S档门票",
+ "third_prize_cmt": "",
+ "first_prize_pic": "",
+ "second_prize_pic": "",
+ "third_prize_pic": "",
+ "vip_batch_sign": "",
+ "prize_type_first": {
+ "type": 0,
+ "value": {
+ "stype": 0
+ }
+ },
+ "lottery_result": {
+ "first_prize_result": [
+ {
+ "uid": 1014634854,
+ "name": "lty世界第一吃货殿下",
+ "face": "https://i0.hdslb.com/bfs/face/c746083b15f6761ea75c602661123e68784c6b1c.jpg",
+ "hongbao_money": 0
+ }
+ ]
+ }
+ },
+ "message": "",
+ "msg": ""
+}
+```
+
+
diff --git a/docs/dynamic/dynamic_enum.md b/docs/dynamic/dynamic_enum.md
new file mode 100644
index 0000000..ae563d6
--- /dev/null
+++ b/docs/dynamic/dynamic_enum.md
@@ -0,0 +1,224 @@
+# 动态类型对照
+
+## 动态类型
+
+| 类型 | 说明 | comment_id_str | comment_type |rid_str| 示例 |
+| --- | --- | --- | --- | --- | --- |
+| DYNAMIC_TYPE_NONE | 无效动态 |||| [716510857084796964](https://t.bilibili.com/716510857084796964) |
+| DYNAMIC_TYPE_FORWARD | 动态转发 |动态本身id|17|||
+| DYNAMIC_TYPE_AV | 投稿视频 |视频AV号| 1 |视频AV号||
+| DYNAMIC_TYPE_PGC | 剧集(番剧、电影、纪录片) |剧集分集AV号| 1 |剧集分集EP号||
+| DYNAMIC_TYPE_COURSES | ||| ||
+| DYNAMIC_TYPE_WORD | 纯文字动态 |动态本身id|17|| [718377531474968613](https://t.bilibili.com/718377531474968613) |
+| DYNAMIC_TYPE_DRAW | 带图动态 |相簿id|11|相簿id| [718384798557536290](https://t.bilibili.com/718384798557536290) |
+| DYNAMIC_TYPE_ARTICLE | 投稿专栏 |专栏cv号|12|专栏cv号| [718372214316990512](https://t.bilibili.com/718372214316990512) |
+| DYNAMIC_TYPE_MUSIC | 音乐 ||| ||
+| DYNAMIC_TYPE_COMMON_SQUARE | 装扮 剧集点评 普通分享 ||17|| [551309621391003098](https://t.bilibili.com/551309621391003098) [716503778995470375](https://t.bilibili.com/716503778995470375) [716481612656672789](https://t.bilibili.com/716481612656672789) |
+| DYNAMIC_TYPE_COMMON_VERTICAL | ||| ||
+| DYNAMIC_TYPE_LIVE | 直播间分享 |动态本身id||直播间id| [216042859353895488](https://t.bilibili.com/216042859353895488) |
+| DYNAMIC_TYPE_MEDIALIST | 收藏夹 |收藏夹ml号|19|收藏夹ml号| [534428265320147158](https://t.bilibili.com/534428265320147158) |
+| DYNAMIC_TYPE_COURSES_SEASON | 课程 |||| [717906712866062340](https://t.bilibili.com/717906712866062340) |
+| DYNAMIC_TYPE_COURSES_BATCH | |||| |
+| DYNAMIC_TYPE_AD | ||| ||
+| DYNAMIC_TYPE_APPLET | ||| ||
+| DYNAMIC_TYPE_SUBSCRIPTION | ||| ||
+| DYNAMIC_TYPE_LIVE_RCMD | 直播开播 |动态本身id|17|live_id| [718371505648435205](https://t.bilibili.com/718371505648435205) |
+| DYNAMIC_TYPE_BANNER | ||| ||
+| DYNAMIC_TYPE_UGC_SEASON | 合集更新 |视频AV号|1|视频AV号| [718390979031203873](https://t.bilibili.com/718390979031203873) |
+| DYNAMIC_TYPE_SUBSCRIPTION_NEW | ||| ||
+
+## 富文本节点类型
+
+| 类型 | 说明 | 示例 |
+|---------------------------------|------|-----------------------------------------------------------------|
+| RICH_TEXT_NODE_TYPE_NONE | | |
+| RICH_TEXT_NODE_TYPE_TEXT | 文字节点 | [721295772787671059](https://t.bilibili.com/721295772787671059) |
+| RICH_TEXT_NODE_TYPE_AT | @用户 | [721296515797090324](https://t.bilibili.com/721296515797090324) |
+| RICH_TEXT_NODE_TYPE_LOTTERY | 互动抽奖 | [720907383182721040](https://t.bilibili.com/720907383182721040) |
+| RICH_TEXT_NODE_TYPE_VOTE | 投票 | [721203899129659408](https://t.bilibili.com/721203899129659408) |
+| RICH_TEXT_NODE_TYPE_TOPIC | 话题 | [721188862459641879](https://t.bilibili.com/721188862459641879) |
+| RICH_TEXT_NODE_TYPE_GOODS | 商品链接 | [721282703208480790](https://t.bilibili.com/721282703208480790) |
+| RICH_TEXT_NODE_TYPE_BV | 视频链接 | [716752002311258165](https://t.bilibili.com/716752002311258165) |
+| RICH_TEXT_NODE_TYPE_AV | | |
+| RICH_TEXT_NODE_TYPE_EMOJI | 表情 | [716751108968546393](https://t.bilibili.com/716751108968546393) |
+| RICH_TEXT_NODE_TYPE_USER | | |
+| RICH_TEXT_NODE_TYPE_CV | | |
+| RICH_TEXT_NODE_TYPE_VC | | |
+| RICH_TEXT_NODE_TYPE_WEB | 网页链接 | [716751027361022055](https://t.bilibili.com/716751027361022055) |
+| RICH_TEXT_NODE_TYPE_TAOBAO | | |
+| RICH_TEXT_NODE_TYPE_MAIL | 邮箱地址 | [721314095109767220](https://t.bilibili.com/721314095109767220) |
+| RICH_TEXT_NODE_TYPE_OGV_SEASON | 剧集信息 | [721282046064853080](https://t.bilibili.com/721282046064853080) |
+| RICH_TEXT_NODE_TYPE_OGV_EP | | |
+| RICH_TEXT_NODE_TYPE_SEARCH_WORD | | |
+
+## 作者类型
+
+| 类型 | 说明 | 示例 |
+|------------------------|------|-----|
+| AUTHOR_TYPE_NONE | | |
+| AUTHOR_TYPE_NORMAL | 普通更新 | |
+| AUTHOR_TYPE_PGC | 剧集更新 | |
+| AUTHOR_TYPE_UGC_SEASON | 合集更新 | |
+
+| 类型 | 说明 | 示例 |
+|-----------------|-----|-----|
+| EMOJI_TYPE_NONE | | |
+| EMOJI_TYPE_OLD | | |
+| EMOJI_TYPE_NEW | | |
+| EMOJI_TYPE_VIP | | |
+
+## 相关内容卡片类型
+
+| 类型 | 说明 | 示例 |
+|-------------------------|------|--------------------------------------------------------------------------|
+| ADDITIONAL_TYPE_NONE | | |
+| ADDITIONAL_TYPE_PGC | | |
+| ADDITIONAL_TYPE_GOODS | 商品信息 | |
+| ADDITIONAL_TYPE_VOTE | 投票 | [716365292050055176](https://t.bilibili.com/716365292050055176) |
+| ADDITIONAL_TYPE_COMMON | 一般类型 | 游戏 [716357878942793745](https://t.bilibili.com/716357878942793745) |
+| ADDITIONAL_TYPE_MATCH | | |
+| ADDITIONAL_TYPE_UP_RCMD | | |
+| ADDITIONAL_TYPE_UGC | 视频跳转 | [716489253410832401](https://t.bilibili.com/716489253410832401) |
+| ADDITIONAL_TYPE_RESERVE | | 直播预约 [716524987542929443](https://t.bilibili.com/716524987542929443) |
+
+| 类型 | 说明 | 示例 |
+|-------------------------------|-----|-----|
+| ADDITIONAL_BUTTON_TYPE_NONE | | |
+| ADDITIONAL_BUTTON_TYPE_JUMP | | |
+| ADDITIONAL_BUTTON_TYPE_BUTTON | | |
+
+| 类型 | 说明 | 示例 |
+|----------------------------------|-----|-----|
+| ADDITIONAL_BUTTON_STATUS_NONE | | |
+| ADDITIONAL_BUTTON_STATUS_UNCHECK | | |
+| ADDITIONAL_BUTTON_STATUS_CHECK | | |
+
+| 类型 | 说明 | 示例 |
+|-------------------------------|-----|-----|
+| ADD_BUTTON_CLICK_TYPE_NONE | | |
+| ADD_BUTTON_CLICK_TYPE_RESERVE | | |
+
+| 类型 | 说明 | 示例 |
+|-------------------------|-----|-----|
+| DISABLE_STATE_HIGHLIGHT | | |
+| DISABLE_STATE_GRAY | | |
+
+| 类型 | 说明 | 示例 |
+|----------------------------|-----|-----|
+| ADD_BUTTON_BG_STYLE_FILL | | |
+| ADD_BUTTON_BG_STYLE_STROKE | | |
+| ADD_BUTTON_BG_STYLE_GRAY | | |
+
+| 类型 | 说明 | 示例 |
+|----------------------------------|-----|-----|
+| HIGHLIGHT_TEXT_STYLE_TYPE_NONE | | |
+| HIGHLIGHT_TEXT_STYLE_TYPE_ACTIVE | | |
+
+## 动态主体类型
+
+| 类型 | 说明 | 示例 |
+|-----------------------------|-------|-----------------------------------------------------------------|
+| MAJOR_TYPE_NONE | 动态失效 | [716510857084796964](https://t.bilibili.com/716510857084796964) |
+| MAJOR_TYPE_NONE | 转发动态 | [866756840240709701](https://www.bilibili.com/opus/866756840240709701) |
+| MAJOR_TYPE_OPUS | 图文动态 | [870176712256651305](https://www.bilibili.com/opus/870176712256651305) |
+| MAJOR_TYPE_ARCHIVE | 视频 | [716526237365829703](https://t.bilibili.com/716526237365829703) |
+| MAJOR_TYPE_PGC | 剧集更新 | [645981661420322824](https://t.bilibili.com/645981661420322824) |
+| MAJOR_TYPE_COURSES | | |
+| MAJOR_TYPE_DRAW | 带图动态 | [716358050743582725](https://t.bilibili.com/716358050743582725) |
+| MAJOR_TYPE_ARTICLE | | |
+| MAJOR_TYPE_MUSIC | 音频更新 | |
+| MAJOR_TYPE_COMMON | 一般类型 | [716481612656672789](https://t.bilibili.com/716481612656672789) |
+| MAJOR_TYPE_LIVE | 直播间分享 | [267505569812738175](https://t.bilibili.com/267505569812738175) |
+| MAJOR_TYPE_MEDIALIST | | |
+| MAJOR_TYPE_APPLET | | |
+| MAJOR_TYPE_SUBSCRIPTION | | |
+| MAJOR_TYPE_LIVE_RCMD | 直播状态 | |
+| MAJOR_TYPE_UGC_SEASON | 合计更新 | [716509100448415814](https://t.bilibili.com/716509100448415814) |
+| MAJOR_TYPE_SUBSCRIPTION_NEW | | |
+
+| 类型 | 说明 | 示例 |
+|-----------------|-----|-----|
+| MEDIA_TYPE_NONE | | |
+| MEDIA_TYPE_UGC | | |
+| MEDIA_TYPE_PGC | | |
+| MEDIA_TYPE_LIVE | | |
+
+| 类型 | 说明 | 示例 |
+|--------------------------|-----|-----|
+| PGC_SUB_TYPE_NONE | | |
+| PGC_SUB_TYPE_BANGUMI | | |
+| PGC_SUB_TYPE_MOVIE | | |
+| PGC_SUB_TYPE_DOCUMENTARY | | |
+| PGC_SUB_TYPE_DOMESTIC | | |
+| PGC_SUB_TYPE_TV | | |
+
+| 类型 | 说明 | 示例 |
+|----------------------|-----|-----|
+| DRAW_TAG_TYPE_NONE | | |
+| DRAW_TAG_TYPE_COMMON | | |
+| DRAW_TAG_TYPE_GOODS | | |
+| DRAW_TAG_TYPE_USER | | |
+| DRAW_TAG_TYPE_TOPIC | | |
+| DRAW_TAG_TYPE_LBS | | |
+
+| 类型 | 说明 | 示例 |
+|----------------------------------|-----|-----|
+| MAJOR_COMMON_STYLE_TYPE_NONE | | |
+| MAJOR_COMMON_STYLE_TYPE_SQUARE | | |
+| MAJOR_COMMON_STYLE_TYPE_VERTICAL | | |
+
+| 类型 | 说明 | 示例 |
+|---------------------|-----|-----|
+| RESERVE_TYPE_NONE | | |
+| RESERVE_TYPE_RECALL | | |
+
+| 类型 | 说明 | 示例 |
+|--------------------------|-----|-----|
+| LIVE_STATE_TYPE_NONE | | |
+| LIVE_STATE_TYPE_LIVE | | |
+| LIVE_STATE_TYPE_ROTATION | | |
+
+| 类型 | 说明 | 示例 |
+|----------------------------------|-----|-----|
+| SUBSCRIPTION_NEW_STYLE_TYPE_NONE | | |
+| SUBSCRIPTION_NEW_STYLE_TYPE_DRAW | | |
+| SUBSCRIPTION_NEW_STYLE_TYPE_LIVE | | |
+
+| 类型 | 说明 | 示例 |
+|------------------------------|---------|-----|
+| THREE_POINT_DELETE | 删除 | |
+| THREE_POINT_REPORT | 举报 | |
+| THREE_POINT_FOLLOWING | 关注/取消关注 | |
+| THREE_POINT_TOP | 置顶/取消置顶 | |
+| THREE_POINT_UNFAV | | |
+| THREE_POINT_UNSUBS | | |
+| THREE_POINT_TOPIC_REPORT | | |
+| THREE_POINT_TOPIC_IRRELEVANT | | |
+| THREE_POINT_RCMD_RESOURCE | | |
+| THREE_POINT_RCMD_FEEDBACK | | |
+
+| 类型 | 说明 | 示例 |
+|--------------------|-----|-----|
+| FOLD_TYPE_NONE | | |
+| FOLD_TYPE_PUBLISH | | |
+| FOLD_TYPE_FREQUENT | | |
+| FOLD_TYPE_UNITE | | |
+| FOLD_TYPE_LIMIT | | |
+
+| 类型 | 说明 | 示例 |
+|------------------------------|-----|-----|
+| DYN_STATUS_TYPE_NONE | | |
+| DYN_STATUS_TYPE_NORMAL | | |
+| DYN_STATUS_TYPE_AUDITING | | |
+| DYN_STATUS_TYPE_SELF_VISIBLE | | |
+| DYN_STATUS_TYPE_DELETED | | |
+
+| 类型 | 说明 | 示例 |
+|---------------|-----|-----|
+| SCENE_DETAIL | | |
+| SCENE_HOT | | |
+| SCENE_GENERAL | | |
+| SCENE_SPACE | | |
+| SCENE_TOPIC | | |
+
+
diff --git a/docs/dynamic/get_dynamic_detail.md b/docs/dynamic/get_dynamic_detail.md
new file mode 100644
index 0000000..e6182ab
--- /dev/null
+++ b/docs/dynamic/get_dynamic_detail.md
@@ -0,0 +1,601 @@
+# 获取特定动态卡片信息
+
+> https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/get_dynamic_detail
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------ | ---- | ---------- | ------ | -------- |
+| dynamic_id | id | 动态id | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------- |
+| code | num | 返回值 | 0:成功 |
+| data | obj | 信息本体 | |
+| message | str | 错误信息 | 默认为空 |
+| msg | num | 空 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ----- | ---------- | ------------ |
+| card | obj | 动态卡片内容 | 当动态不存在/删除时不返回此项 |
+| result | num | 0 | 作用尚不明确(当动态不存在/删除时不返回此项) |
+| \_gt\_ | num | 0 | 作用尚不明确 |
+
+`data`中的`card`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------- | ---- |
+| activity_infos | obj | 该条动态参与的活动 |当此条动态没有参与任何活动时不显示此项 |
+| card | str | 动态详细信息 | 会跟随此动态类型不同发生一定的变化,评论数、点赞数等相关信息参考`desc`字段 |
+| desc | obj | 动态相关信息 | 会跟随此动态类型不同发生一定的变化,详细信息(例如动态描述等)参考`card`字段 |
+| display | obj | 动态部分的可操作项 | 会随着动态类型发生变化,主要用于显示动态 |
+| extend_json | str | 动态扩展项 | 会随着动态类型发生变化 |
+**此处的大部分字段的内容都会根据`desc`中的`type`值发生一定变化,具体的数值对照参考下表(仅作参考,部分内容的解释未知,同时有些内容仅为在部分页面出现,无法通过此API调出):**
+
+| 值 | 含义 |
+| ---- | ---- |
+| 268435455 | 具体定义未知 |
+| 1 | 转发 |
+| 2 | 图片动态 |
+| 4 | 文字动态 |
+| 8 | 视频动态 |
+| 16 | 小视频 |
+| 32 | 具体定义未知(可能为戏剧) |
+| 64 | 专栏 |
+| 256 | 音频 |
+| 512 | 番剧 |
+| 1024 | 具体定义未知 |
+| 2048 | H5活动动态 |
+| 2049 | 漫画分享 |
+| 4097 | PGC番剧 |
+| 4098 | 电影 |
+| 4099 | 电视剧 |
+| 4100 | 国创动漫 |
+| 4101 | 纪录片 |
+| 4200 | 直播 |
+| 4201 | 直播 |
+| 4300 | 收藏夹 |
+| 4302 | 付费课程 |
+| 4303 | 付费课程 |
+| 4308 | 直播 |
+| 4310 | 合集 |
+| 4311 | 具体定义未知 |
+| 1e3 | 具体定义未知 |
+| 1001 | 具体定义未知 |
+
+**示例:**
+
+获取`哔哩哔哩弹幕网`的动态id为`507420325550127049`动态
+
+```shell
+curl -G 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/get_dynamic_detail' \
+--data-urlencode 'dynamic_id=507420325550127049'
+```
+
+
+查看响应示例
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "message": "",
+ "data": {
+ "card": {
+ "desc": {
+ "uid": 8047632,
+ "type": 8,
+ "rid": 204774719,
+ "acl": 0,
+ "view": 1182282,
+ "repost": 405,
+ "like": 31940,
+ "is_liked": 0,
+ "dynamic_id": 507420325550127049,
+ "timestamp": 1616981401,
+ "pre_dy_id": 0,
+ "orig_dy_id": 0,
+ "orig_type": 0,
+ "user_profile": {
+ "info": {
+ "uid": 8047632,
+ "uname": "哔哩哔哩弹幕网",
+ "face": "https://i0.hdslb.com/bfs/face/f2cb8d9854156e3f26d4c6751d6eeb9c30e21847.jpg"
+ },
+ "card": {
+ "official_verify": {
+ "type": 1,
+ "desc": "哔哩哔哩弹幕网官方账号 "
+ }
+ },
+ "vip": {
+ "vipType": 2,
+ "vipDueDate": 1924531200000,
+ "vipStatus": 1,
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "十年大会员",
+ "label_theme": "ten_annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "role": 7,
+ "avatar_subscript_url": "https://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
+ },
+ "pendant": {
+ "pid": 3860,
+ "name": "2021拜年纪",
+ "image": "https://i0.hdslb.com/bfs/garb/item/7f8aa8ef1eed8c2dce0796801ddc82552a4164f9.png",
+ "expire": 0,
+ "image_enhance": "https://i0.hdslb.com/bfs/garb/item/7f8aa8ef1eed8c2dce0796801ddc82552a4164f9.png",
+ "image_enhance_frame": ""
+ },
+ "rank": "10000",
+ "sign": "哔哩哔哩 干杯 - ( ゜- ゜)つロ",
+ "level_info": {
+ "current_level": 6
+ }
+ },
+ "uid_type": 1,
+ "stype": 0,
+ "r_type": 1,
+ "inner_id": 0,
+ "status": 1,
+ "dynamic_id_str": "507420325550127049",
+ "pre_dy_id_str": "0",
+ "orig_dy_id_str": "0",
+ "rid_str": "204774719",
+ "bvid": "BV1Dh411S7sS"
+ },
+ "card": "{\"aid\":204774719,\"attribute\":0,\"cid\":316514988,\"copyright\":1,\"ctime\":1616939233,\"desc\":\"2021年3月29日9:30(北京时间),B站在中国香港港交所成功挂牌二次上市。欢迎来到bilibili这座乐园,和超过2亿中国年轻人一起表达自我、拥抱世界。\",\"dimension\":{\"height\":1080,\"rotate\":0,\"width\":1920},\"duration\":290,\"dynamic\":\"\",\"item\":{\"at_control\":\"\"},\"jump_url\":\"bilibili:\\/\\/video\\/204774719\\/?page=1&player_preload=null&player_width=1920&player_height=1080&player_rotate=0\",\"owner\":{\"face\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/f2cb8d9854156e3f26d4c6751d6eeb9c30e21847.jpg\",\"mid\":8047632,\"name\":\"哔哩哔哩弹幕网\"},\"pic\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/archive\\/bcbcac6560268ef9cbe59fbf759ac28adf5e0432.jpg\",\"player_info\":null,\"pubdate\":1616981400,\"rights\":{\"autoplay\":1,\"bp\":0,\"download\":0,\"elec\":0,\"hd5\":1,\"is_cooperation\":0,\"movie\":0,\"no_background\":0,\"no_reprint\":1,\"pay\":0,\"ugc_pay\":0,\"ugc_pay_preview\":0},\"share_subtitle\":\"已观看24.0万次\",\"short_link\":\"https:\\/\\/b23.tv\\/BV1Dh411S7sS\",\"short_link_v2\":\"https:\\/\\/b23.tv\\/BV1Dh411S7sS\",\"stat\":{\"aid\":204774719,\"coin\":8661,\"danmaku\":744,\"dislike\":0,\"favorite\":6025,\"his_rank\":0,\"like\":31940,\"now_rank\":0,\"reply\":1619,\"share\":2134,\"view\":246956},\"state\":0,\"tid\":207,\"title\":\"欢迎来到2亿年轻人的乐园——bilibili 回香港上市啦!\",\"tname\":\"财经\",\"videos\":1}",
+ "extend_json": "{\"\":{\"ogv\":{\"ogv_id\":0}},\"dispute\":{\"content\":\"\"},\"from\":{\"from\":\"\"},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}",
+ "display": {
+ "topic_info": {
+ "topic_details": [
+ {
+ "topic_id": 12895437,
+ "topic_name": "二次上市",
+ "is_activity": 0,
+ "topic_link": ""
+ },
+ {
+ "topic_id": 10967402,
+ "topic_name": "香港上市",
+ "is_activity": 1,
+ "topic_link": "https://www.bilibili.com/blackboard/dynamic/102930"
+ },
+ {
+ "topic_id": 114859,
+ "topic_name": "B站",
+ "is_activity": 0,
+ "topic_link": ""
+ },
+ {
+ "topic_id": 8312,
+ "topic_name": "宣传片",
+ "is_activity": 1,
+ "topic_link": "https://www.bilibili.com/blackboard/dynamic/8795"
+ },
+ {
+ "topic_id": 679,
+ "topic_name": "BILIBILI",
+ "is_activity": 0,
+ "topic_link": ""
+ }
+ ]
+ },
+ "usr_action_txt": "投稿了视频",
+ "relation": {
+ "status": 1,
+ "is_follow": 0,
+ "is_followed": 0
+ },
+ "show_tip": {
+ "del_tip": "要删除动态吗?"
+ },
+ "cover_play_icon_url": "https://i0.hdslb.com/bfs/album/2269afa7897830b397797ebe5f032b899b405c67.png"
+ }
+ },
+ "result": 0,
+ "_gt_": 0
+ }
+}
+```
+
+
+
+## 最近更新UP主列表
+
+> https://api.bilibili.com/x/polymer/web-dynamic/v1/portal
+
+*请求方式:GET*
+
+*认证方式:Cookie(SESSDATA) 和 Access_Token*
+
+**json回复:**
+
+*根对象*
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | --- | ---- | ---- |
+| code | num | 返回值 | 0:成功 |
+| data | obj | 信息本体 | |
+| message | str | 错误信息 | 默认为0 |
+| ttl | int | 1 | 默认为1 |
+
+`data`对象
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | ---------- | --- |
+| live_users | null | 不明 | |
+| my_info | obj | 个人关注的一些信息 | |
+| up_list | array | 最近更新的up主列表 | |
+
+`my_info`对象
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | --- | ----------- | ---- |
+| dyns | int | 个人动态 | |
+| face | str | 头像 | 图像地址 |
+| face_nft | int | 不明 | |
+| follower | int | 粉丝数量 | |
+| following | int | 我的关注 | |
+| level_info | obj | 本人等级内容 | |
+| mid | int | 账户mid | |
+| name | str | 账户名称 | |
+| offcial | obj | 认证信息 | |
+| space_bg | str | 账户个人中心的背景横幅 | 图像地址 |
+| vip | obj | vip信息 | |
+
+`my_info`中的`level_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | --- | ---- | ---------- |
+| current_level | num | 当前等级 | 0-6级 |
+| current_min | num | 0 | |
+| current_exp | num | 0 | |
+| next_exp | num | 0 | |
+
+`my_info`中的`Official`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | --- | ---- | ------------------------------------- |
+| role | num | 认证类型 | 见[用户认证类型一览](../user/official_role.md) |
+| title | str | 认证信息 | 无为空 |
+| desc | str | 认证备注 | 无为空 |
+| type | num | 是否认证 | -1:无 0:认证 |
+
+`my_info`中的`vip`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------------- | --- | --------- | -------------------------------------------- |
+| type | num | 会员类型 | 0:无 1:月大会员 2:年度及以上大会员 |
+| status | num | 会员状态 | 0:无 1:有 |
+| due_date | num | 会员过期时间 | Unix时间戳(毫秒) |
+| vip_pay_type | num | 支付类型 | 0:未支付(常见于官方账号) 1:已支付(以正常渠道获取的大会员均为此值) |
+| theme_type | num | 0 | 作用尚不明确 |
+| label | obj | 会员标签 | |
+| avatar_subscript | num | 是否显示会员图标 | 0:不显示 1:显示 |
+| nickname_color | str | 会员昵称颜色 | 颜色码,一般为`#FB7299`,曾用于愚人节改变大会员配色 |
+| role | num | 大角色类型 | 1:月度大会员 3:年度大会员 7:十年大会员 15:百年大会员 |
+| avatar_subscript_url | str | 大会员角标地址 | |
+| tv_vip_status | num | 电视大会员状态 | 0:未开通 |
+| tv_vip_pay_type | num | 电视大会员支付类型 | |
+
+`vip`中的`label`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------------- | ---- | -------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| path | str | 空 | 作用尚不明确 |
+| text | str | 会员类型文案 | `大会员` `年度大会员` `十年大会员` `百年大会员` `最强绿鲤鱼` |
+| label_theme | str | 会员标签 | vip:大会员 annual_vip:年度大会员 ten_annual_vip:十年大会员 hundred_annual_vip:百年大会员 fools_day_hundred_annual_vip:最强绿鲤鱼 |
+| text_color | str | 会员标签 | |
+| bg_style | num | 1 | |
+| bg_color | str | 会员标签背景颜色 | 颜色码,一般为`#FB7299`,曾用于愚人节改变大会员配色 |
+| border_color | str | 会员标签边框颜色 | 未使用 |
+| use_img_label | bool | `true` | |
+| img_label_uri_hans | str | `空串` | |
+| img_label_uri_hant | str | `空串` | |
+| img_label_uri_hans_static | str | 大会员牌子图片 | 简体版 |
+| img_label_uri_hant_static | str | 大会员牌子图片 | 繁体版 |
+
+`data`中的`up_list`数组对象
+
+| 字段 | 属性 | 内容 | 备注 |
+| ----------------- | ---- | --------- | --- |
+| face | str | UP主头像 | |
+| has_update | bool | 最近更新是否更新? | |
+| is_reserve_recall | bool | 不明 | |
+| mid | int | UP主mid | |
+| uname | str | up主昵称 | |
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "live_users": null,
+ "my_info": {
+ "dyns": 67,
+ "face": "http://i0.hdslb.com/bfs/face/44253f4e588d72d4c10dde495752142b588455af.jpg",
+ "face_nft": 0,
+ "follower": 15,
+ "following": 77,
+ "level_info": {
+ "current_exp": 23846,
+ "current_level": 5,
+ "current_min": 10800,
+ "level_up": -62135596800,
+ "next_exp": 28800
+ },
+ "mid": 108534711,
+ "name": "CiaoMyTime",
+ "official": {
+ "desc": "",
+ "role": 0,
+ "title": "",
+ "type": -1
+ },
+ "space_bg": "http://i1.hdslb.com/bfs/space/aea2dd7b8894ce31d578d4fad6a7188c7b49cb2f.jpg",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1670256000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/3788b674c69072f1ee252b79a31ecc8c43af3039.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/jwXBWRVwa5.png",
+ "label_theme": "vip",
+ "path": "",
+ "text": "大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "",
+ "role": 1,
+ "status": 1,
+ "theme_type": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 1,
+ "vip_pay_type": 0
+ }
+ },
+ "up_list": [
+ {
+ "face": "https://i2.hdslb.com/bfs/face/09a47992c9cb08f81effede594ddf014f83047fe.jpg",
+ "has_update": true,
+ "is_reserve_recall": false,
+ "mid": 15135791,
+ "uname": "东北大学张引"
+ },
+ {
+ "face": "https://i1.hdslb.com/bfs/face/a83b296101bb36a6f1dacb8fdfa74a57a2c29445.jpg",
+ "has_update": true,
+ "is_reserve_recall": false,
+ "mid": 1856528671,
+ "uname": "陆鳐LuLu"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/60ec600cc9d84c74c8220ab41ce49bacfdc0895c.jpg",
+ "has_update": true,
+ "is_reserve_recall": false,
+ "mid": 39180492,
+ "uname": "蒸気火鸡"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/986a9f29848d17b39a99e41557d56dcd1091a3a9.jpg",
+ "has_update": true,
+ "is_reserve_recall": false,
+ "mid": 2142762,
+ "uname": "老戴在此"
+ },
+ {
+ "face": "https://i1.hdslb.com/bfs/face/475f3c05ea494a26f5dd91b277f48b136ae63021.jpg",
+ "has_update": true,
+ "is_reserve_recall": false,
+ "mid": 431313625,
+ "uname": "小蓝和他的朋友日常号"
+ },
+ {
+ "face": "https://i1.hdslb.com/bfs/face/bafb36d5726f8062e578474095abb0e906fec163.jpg",
+ "has_update": true,
+ "is_reserve_recall": false,
+ "mid": 233114659,
+ "uname": "碧蓝航线"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/39d23f3c5dd2c96fc35db5c2a98f4a8ff73a2d46.jpg",
+ "has_update": true,
+ "is_reserve_recall": false,
+ "mid": 27534330,
+ "uname": "崩坏3第一偶像爱酱"
+ },
+ {
+ "face": "http://i2.hdslb.com/bfs/face/f119348814f30c6bbbcc60bd63c12b8215d19d2f.jpg",
+ "has_update": true,
+ "is_reserve_recall": false,
+ "mid": 524704055,
+ "uname": "大庆赶海"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/c4340d477356ba108098ba9a566e7ce4a54e0936.jpg",
+ "has_update": true,
+ "is_reserve_recall": false,
+ "mid": 194326389,
+ "uname": "兮子cc"
+ },
+ {
+ "face": "https://i2.hdslb.com/bfs/face/0455b74f73d6a83eef2d6dfbdb4ae2beda42a3ce.jpg",
+ "has_update": true,
+ "is_reserve_recall": false,
+ "mid": 476833439,
+ "uname": "盾之勇者成名录"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/7c6cdd77937d4bbd2171241fe530e18c0c5bc58e.jpg",
+ "has_update": true,
+ "is_reserve_recall": false,
+ "mid": 492840942,
+ "uname": "云视听小电视-TV"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/b14881845b777d925876f24cb46b1dc1ad5a0e27.jpg",
+ "has_update": true,
+ "is_reserve_recall": false,
+ "mid": 1636034895,
+ "uname": "绝区零"
+ },
+ {
+ "face": "http://i1.hdslb.com/bfs/face/3b933fe3c47976dd29f30e3a4f7f2bdfd99e8b08.jpg",
+ "has_update": true,
+ "is_reserve_recall": false,
+ "mid": 603028270,
+ "uname": "乃木坂46官方"
+ },
+ {
+ "face": "https://i2.hdslb.com/bfs/face/76ec72b2a530f2f24209c98b5690ef7b536040cf.jpg",
+ "has_update": true,
+ "is_reserve_recall": false,
+ "mid": 5992670,
+ "uname": "云之幻"
+ },
+ {
+ "face": "https://i1.hdslb.com/bfs/face/9ca9ea42fa75d9a651b354a95e8e39f48d8c30d2.jpg",
+ "has_update": true,
+ "is_reserve_recall": false,
+ "mid": 299359111,
+ "uname": "月圆之夜"
+ },
+ {
+ "face": "https://i1.hdslb.com/bfs/face/c8c0adce728125167fe44371d451b3dc19a84506.jpg",
+ "has_update": false,
+ "is_reserve_recall": false,
+ "mid": 79983517,
+ "uname": "一唐老狮一"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/68b4b212d9738c40d8a6a77beb65a6dd4415f81b.jpg",
+ "has_update": false,
+ "is_reserve_recall": false,
+ "mid": 1861940979,
+ "uname": "保卫萝卜"
+ },
+ {
+ "face": "https://i2.hdslb.com/bfs/face/85bab2a17646ccf442d28549e7216fd65c6adeb7.jpg",
+ "has_update": false,
+ "is_reserve_recall": false,
+ "mid": 2162,
+ "uname": "GPBeta"
+ },
+ {
+ "face": "https://i1.hdslb.com/bfs/face/7a41310afc08381ad0451bee8ea07f15fcc411bd.jpg",
+ "has_update": false,
+ "is_reserve_recall": false,
+ "mid": 508963009,
+ "uname": "HiiroVTuber"
+ },
+ {
+ "face": "https://i1.hdslb.com/bfs/face/b085d34fd9d2cd44641ab648cc96e7a3068eb811.jpg",
+ "has_update": false,
+ "is_reserve_recall": false,
+ "mid": 396848107,
+ "uname": "不愧是姐姐大人"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/3f1496f48a5eb840a974fef0fd7db7a3f225fbe7.jpg",
+ "has_update": false,
+ "is_reserve_recall": false,
+ "mid": 80304,
+ "uname": "亚食人"
+ },
+ {
+ "face": "https://i2.hdslb.com/bfs/face/a7716fec14658ef7365b538fdce0d86eb6123ed4.jpg",
+ "has_update": false,
+ "is_reserve_recall": false,
+ "mid": 401742377,
+ "uname": "原神"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/81d5201d6095e3802f14094a6906d1a114bc74c7.jpg",
+ "has_update": false,
+ "is_reserve_recall": false,
+ "mid": 11131476,
+ "uname": "绫人太太啊"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/7d72e58d0ad1b401e4c59960c4b1795efbc57c3a.jpg",
+ "has_update": false,
+ "is_reserve_recall": false,
+ "mid": 409524162,
+ "uname": "一线码农聊技术"
+ },
+ {
+ "face": "https://i0.hdslb.com/bfs/face/5634900a3167310fcd0c6b1102ffc308c68aedd1.jpg",
+ "has_update": false,
+ "is_reserve_recall": false,
+ "mid": 260054391,
+ "uname": "CHeems的日常"
+ },
+ {
+ "face": "https://i2.hdslb.com/bfs/face/81a4c852925b873f42c4971c836a67ea9dd2ef41.jpg",
+ "has_update": false,
+ "is_reserve_recall": false,
+ "mid": 361469957,
+ "uname": "软件工艺师"
+ },
+ {
+ "face": "https://i2.hdslb.com/bfs/face/99e9eb37657f67f547b546b72592d70ab8ce1a4b.jpg",
+ "has_update": false,
+ "is_reserve_recall": false,
+ "mid": 41059757,
+ "uname": "刻刻帝TokisakiKuru"
+ },
+ {
+ "face": "https://i1.hdslb.com/bfs/face/affbd5780e44ec1340f60c5283e81cbee2d9a21a.jpg",
+ "has_update": false,
+ "is_reserve_recall": false,
+ "mid": 156785512,
+ "uname": "Swety_Core"
+ },
+ {
+ "face": "http://i0.hdslb.com/bfs/face/f576c8bd9eb4ec7f7776880581bea2d6c53d1b65.jpg",
+ "has_update": false,
+ "is_reserve_recall": false,
+ "mid": 298683153,
+ "uname": "猫和老鼠官方手游"
+ },
+ {
+ "face": "https://i1.hdslb.com/bfs/face/5161d6bd003c24065c0d0ab2ae2ce7f37f0f607b.jpg",
+ "has_update": false,
+ "is_reserve_recall": false,
+ "mid": 159440647,
+ "uname": "Uki----"
+ }
+ ]
+ }
+}
+```
+
+
diff --git a/docs/dynamic/nav.md b/docs/dynamic/nav.md
new file mode 100644
index 0000000..6500d11
--- /dev/null
+++ b/docs/dynamic/nav.md
@@ -0,0 +1,1167 @@
+# 获取导航栏动态
+
+## 获取导航栏动态列表
+
+> https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/nav
+
+*请求方式: GET*
+
+认证方式:Cookie(SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --------------- | ---- | ---------- | ------ | ----------------------- |
+| update_baseline | num | 更新基线 | 非必要 | 获取新动态时使用 |
+| offset | num | 分页偏移量 | 非必要 | 翻页时使用 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | -------------------------- |
+| code | num | 返回值 | 0: 成功 -101: 未登录 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ----- | ---------------------------- | -------------------------------------------------- |
+| has_more | bool | 是否有更多数据 | |
+| items | array | 数据数组 | |
+| offset | str | 偏移量 | 等于`items`中最后一条记录的id 获取下一页时使用 |
+| update_baseline | str | 更新基线 | 等于`items`中第一条记录的id_str |
+| update_num | num | 本次获取获取到了多少条新动态 | 在更新基线以上的动态条数 |
+
+`data`对象中`items`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | -------- | ---------------------------- |
+| author | obj | UP主 | 参见[module_author对象](all.md#data对象---items数组中的对象---modules对象---module_author对象) |
+| cover | str | 封面URL | |
+| id_str | str | 动态id | |
+| pub_time | str | 发布时间 | 文字表述的相对时间 |
+| rid | num | 关联id | 视频即aid |
+| title | str | 标题 | |
+| type | num | 动态类型 | 8: 视频 |
+| visible | bool | 是否可见 | true:可见 false:不可见 |
+
+**示例:**
+
+获取导航栏动态列表
+
+```shell
+curl "https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/nav" \
+ -b "SESSDATA=xxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "has_more": true,
+ "items": [
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/2b9ee4a9c99f1006f3c800c1317f7850ad6f3d0d.jpg",
+ "jump_url": "//space.bilibili.com/485703766/dynamic",
+ "mid": 485703766,
+ "name": "英伟达GeForce",
+ "official": {
+ "desc": "",
+ "role": 3,
+ "title": "英伟达GeForce官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 2000563200000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/adb599797dd171e2d3d6d012f448b49679258344.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/sGu57N6pgK.png",
+ "label_theme": "ten_annual_vip",
+ "path": "",
+ "text": "十年大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 7,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 1
+ }
+ },
+ "cover": "http://i2.hdslb.com/bfs/archive/d38b239af580eb199b4bbe55d2388cb603f6e917.jpg",
+ "id_str": "954636836111646759",
+ "jump_url": "//www.bilibili.com/video/BV181421k7bu/",
+ "pub_time": "1小时前",
+ "rid": 1556082150,
+ "title": "《异环》首曝丨即将支持 NVIDIA DLSS & 光线追踪技术",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg",
+ "jump_url": "//space.bilibili.com/403748305/dynamic",
+ "mid": 403748305,
+ "name": "BML制作指挥部",
+ "official": {
+ "desc": "",
+ "role": 3,
+ "title": "Bilibili Macro Link官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1750176000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i2.hdslb.com/bfs/archive/a220f26856924287c9dc4fa59c67ff38a2fcd20c.jpg",
+ "id_str": "954616624230433048",
+ "jump_url": "//www.bilibili.com/video/BV1RW421R7pE/",
+ "pub_time": "2小时前",
+ "rid": 1856122369,
+ "title": "【夏色祭×可波】《カタオモイ》请感受这份传达给你的心意【BML2024单品】",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg",
+ "jump_url": "//space.bilibili.com/403748305/dynamic",
+ "mid": 403748305,
+ "name": "BML制作指挥部",
+ "official": {
+ "desc": "",
+ "role": 3,
+ "title": "Bilibili Macro Link官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1750176000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i1.hdslb.com/bfs/archive/1b7e4eaf6696038bb96ff38c6d13a6b3778d6a7c.jpg",
+ "id_str": "954616624230432996",
+ "jump_url": "//www.bilibili.com/video/BV15Z421u7MX/",
+ "pub_time": "2小时前",
+ "rid": 1156047704,
+ "title": "Ready for my show!中日16位实力舞见高燃开场《唱》【BML2024单品】",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg",
+ "jump_url": "//space.bilibili.com/403748305/dynamic",
+ "mid": 403748305,
+ "name": "BML制作指挥部",
+ "official": {
+ "desc": "",
+ "role": 3,
+ "title": "Bilibili Macro Link官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1750176000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i1.hdslb.com/bfs/archive/5f22e930d0683b5e8d7a81f75b48fdb0c3a0f2e7.jpg",
+ "id_str": "954616624229384275",
+ "jump_url": "//www.bilibili.com/video/BV1hz421q7xP/",
+ "pub_time": "2小时前",
+ "rid": 1356132445,
+ "title": "阿梓×尔东和小明倾情演出《暁の車》带你重温高达经典旋律【BML2024单品】",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg",
+ "jump_url": "//space.bilibili.com/403748305/dynamic",
+ "mid": 403748305,
+ "name": "BML制作指挥部",
+ "official": {
+ "desc": "",
+ "role": 3,
+ "title": "Bilibili Macro Link官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1750176000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i2.hdslb.com/bfs/archive/04b46154e833ea1349c3302f9b9c188a45b016e9.jpg",
+ "id_str": "954616624228335667",
+ "jump_url": "//www.bilibili.com/video/BV1LS421R7sr/",
+ "pub_time": "2小时前",
+ "rid": 1506089543,
+ "title": "【Vox Akuma】声之恶魔低音爵士,深情演绎世界名曲【BML2024单品】",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg",
+ "jump_url": "//space.bilibili.com/403748305/dynamic",
+ "mid": 403748305,
+ "name": "BML制作指挥部",
+ "official": {
+ "desc": "",
+ "role": 3,
+ "title": "Bilibili Macro Link官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1750176000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i0.hdslb.com/bfs/archive/819d73ca191235e89a03c62889073d526b552fc2.jpg",
+ "id_str": "954616624033300612",
+ "jump_url": "//www.bilibili.com/video/BV1qM4m127wD/",
+ "pub_time": "2小时前",
+ "rid": 1306194854,
+ "title": "【RAB】全 部 逮 捕!萝 莉 控 的 末 日【BML2024单品】",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg",
+ "jump_url": "//space.bilibili.com/403748305/dynamic",
+ "mid": 403748305,
+ "name": "BML制作指挥部",
+ "official": {
+ "desc": "",
+ "role": 3,
+ "title": "Bilibili Macro Link官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1750176000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i2.hdslb.com/bfs/archive/01dd21a65db17705479ee4ee550a79856847264e.jpg",
+ "id_str": "954616624020717623",
+ "jump_url": "//www.bilibili.com/video/BV1rZ421K7yT/",
+ "pub_time": "2小时前",
+ "rid": 1156076206,
+ "title": "【可波×夏色祭】对你一见钟情啦!《5201314》开启绝赞告白【BML2024单品】",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg",
+ "jump_url": "//space.bilibili.com/403748305/dynamic",
+ "mid": 403748305,
+ "name": "BML制作指挥部",
+ "official": {
+ "desc": "",
+ "role": 3,
+ "title": "Bilibili Macro Link官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1750176000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i1.hdslb.com/bfs/archive/d79b28afc3273d5edb211d03ddc70c45999d57f7.jpg",
+ "fold": {
+ "ids": [
+ "954616624019669009"
+ ],
+ "statement": "展开1条相关动态",
+ "type": 3,
+ "users": []
+ },
+ "id_str": "954616624019669032",
+ "jump_url": "//www.bilibili.com/video/BV1oE421c7XV/",
+ "pub_time": "2小时前",
+ "rid": 1656233700,
+ "title": "【洛天依】来自2024的《霜雪千年》还记否这一曲喜悲霜雪【BML2024单品】",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/93b809e050e639c9d8e8e379da96a4c2216ae755.jpg",
+ "jump_url": "//space.bilibili.com/36081646/dynamic",
+ "mid": 36081646,
+ "name": "洛天依",
+ "official": {
+ "desc": "",
+ "role": 2,
+ "title": "2023年度原创音乐、洛天依官方账号",
+ "type": 0
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1764777600000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i1.hdslb.com/bfs/archive/d79b28afc3273d5edb211d03ddc70c45999d57f7.jpg",
+ "id_str": "954616624019669009",
+ "jump_url": "//www.bilibili.com/video/BV1oE421c7XV/",
+ "pub_time": "2小时前",
+ "rid": 1656233700,
+ "title": "【洛天依】来自2024的《霜雪千年》还记否这一曲喜悲霜雪【BML2024单品】",
+ "type": 8,
+ "visible": false
+ },
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg",
+ "jump_url": "//space.bilibili.com/403748305/dynamic",
+ "mid": 403748305,
+ "name": "BML制作指挥部",
+ "official": {
+ "desc": "",
+ "role": 3,
+ "title": "Bilibili Macro Link官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1750176000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i1.hdslb.com/bfs/archive/cbbbb6e35c7680261a8a1fb3f582e04de14cbb50.jpg",
+ "id_str": "954616624002891844",
+ "jump_url": "//www.bilibili.com/video/BV1Fb421H7YQ/",
+ "pub_time": "2小时前",
+ "rid": 1806140865,
+ "title": "【ChiliChill】《我的悲伤是水做的》,描绘雨天的淡蓝色心情【BML2024单品】",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg",
+ "jump_url": "//space.bilibili.com/403748305/dynamic",
+ "mid": 403748305,
+ "name": "BML制作指挥部",
+ "official": {
+ "desc": "",
+ "role": 3,
+ "title": "Bilibili Macro Link官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1750176000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i1.hdslb.com/bfs/archive/b1f8744db9bad8a4a89bd9fa3fab0d128b347edb.jpg",
+ "id_str": "954616623998697505",
+ "jump_url": "//www.bilibili.com/video/BV12m421g759/",
+ "pub_time": "2小时前",
+ "rid": 1606234911,
+ "title": "成为挣脱《Cage》的小鸟,露米Lumi深情吟唱人类希望之歌【BML2024单品】",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg",
+ "jump_url": "//space.bilibili.com/403748305/dynamic",
+ "mid": 403748305,
+ "name": "BML制作指挥部",
+ "official": {
+ "desc": "",
+ "role": 3,
+ "title": "Bilibili Macro Link官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1750176000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i2.hdslb.com/bfs/archive/52e82dc68f3cbbb598d27437c33e996718e07924.jpg",
+ "id_str": "954616623995552002",
+ "jump_url": "//www.bilibili.com/video/BV181421k74U/",
+ "pub_time": "2小时前",
+ "rid": 1556081716,
+ "title": "型月组曲优雅串烧《若能看到明月》🌙🌙🌙【BML2024单品】",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg",
+ "jump_url": "//space.bilibili.com/403748305/dynamic",
+ "mid": 403748305,
+ "name": "BML制作指挥部",
+ "official": {
+ "desc": "",
+ "role": 3,
+ "title": "Bilibili Macro Link官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1750176000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i0.hdslb.com/bfs/archive/8558fe6746c43182b25f6a590f47b9673d47ba67.jpg",
+ "id_str": "954616623994503209",
+ "jump_url": "//www.bilibili.com/video/BV1jW421d7ce/",
+ "pub_time": "2小时前",
+ "rid": 1856192192,
+ "title": "Finana Ryugu超甜演绎童年回忆《プレパレード》最清纯的恋爱预演~【BML2024单品】",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg",
+ "jump_url": "//space.bilibili.com/403748305/dynamic",
+ "mid": 403748305,
+ "name": "BML制作指挥部",
+ "official": {
+ "desc": "",
+ "role": 3,
+ "title": "Bilibili Macro Link官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1750176000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i2.hdslb.com/bfs/archive/1ebd8cbd38eb9db9451df9978b20bee445d8fea0.jpg",
+ "id_str": "954616623993454708",
+ "jump_url": "//www.bilibili.com/video/BV1cw4m1Y7Zs/",
+ "pub_time": "2小时前",
+ "rid": 1106145687,
+ "title": "元气补给站《MORE!JUMP!MORE!》在BML舞台起跳!【BML2024单品】",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg",
+ "jump_url": "//space.bilibili.com/403748305/dynamic",
+ "mid": 403748305,
+ "name": "BML制作指挥部",
+ "official": {
+ "desc": "",
+ "role": 3,
+ "title": "Bilibili Macro Link官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1750176000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i1.hdslb.com/bfs/archive/bc1de2b7e27a5385e3e913fc552b86b744b49fb8.jpg",
+ "id_str": "954616623990308904",
+ "jump_url": "//www.bilibili.com/video/BV1QH4y1w7hC/",
+ "pub_time": "2小时前",
+ "rid": 1056107813,
+ "title": "【星瞳】华丽演绎《迷宮バタフライ》🦋一曲重温童年之梦【BML2024单品】",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg",
+ "jump_url": "//space.bilibili.com/403748305/dynamic",
+ "mid": 403748305,
+ "name": "BML制作指挥部",
+ "official": {
+ "desc": "",
+ "role": 3,
+ "title": "Bilibili Macro Link官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1750176000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i0.hdslb.com/bfs/archive/63617f9210ab2e996f75e8e2fb46c5dc73aeed35.jpg",
+ "id_str": "954616623980871832",
+ "jump_url": "//www.bilibili.com/video/BV1L1421b7XJ/",
+ "pub_time": "2小时前",
+ "rid": 1556117158,
+ "title": "奏响《葬送的破阵曲》,按捺不住战斗的心了!【BML2024单品】",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i1.hdslb.com/bfs/face/7cabb9c9576b4be8d52004d8a3a5450e5e062070.jpg",
+ "jump_url": "//space.bilibili.com/403748305/dynamic",
+ "mid": 403748305,
+ "name": "BML制作指挥部",
+ "official": {
+ "desc": "",
+ "role": 3,
+ "title": "Bilibili Macro Link官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1750176000000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i0.hdslb.com/bfs/archive/c3c470e309acef1d8c8f2ce79ed753f9bca50879.jpg",
+ "id_str": "954616623979823254",
+ "jump_url": "//www.bilibili.com/video/BV1uy411B7Ca/",
+ "pub_time": "2小时前",
+ "rid": 1956028036,
+ "title": "【猫MEME】转生成只能用MEME讲话的平凡上班族【BML2024单品】",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i0.hdslb.com/bfs/face/978ea07f22e54c2e62f01def8e815b59adacc5d0.jpg",
+ "jump_url": "//space.bilibili.com/407045223/dynamic",
+ "mid": 407045223,
+ "name": "二次元的中科院物理所",
+ "official": {
+ "desc": "",
+ "role": 6,
+ "title": "中国科学院物理研究所官方账号",
+ "type": 1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1745769600000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 1626364800,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i1.hdslb.com/bfs/archive/056db2ac79801d853bebcd41c247788d8ccdb795.jpg",
+ "id_str": "954609313946533894",
+ "jump_url": "//www.bilibili.com/video/BV1Wz421q7n5/",
+ "pub_time": "3小时前",
+ "rid": 1356075945,
+ "title": "暑期不失约!第六季《科学公开课》震撼来袭!",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp",
+ "jump_url": "//space.bilibili.com/686127/dynamic",
+ "mid": 686127,
+ "name": "籽岷",
+ "official": {
+ "desc": "",
+ "role": 1,
+ "title": "2023百大UP主、知名游戏UP主",
+ "type": 0
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {},
+ "icon_type": 1
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 4845196800000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/c16005a5b39164b3536cbd45618a5edd597a1c51.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/Pzrd8zmpQD.png",
+ "label_theme": "hundred_annual_vip",
+ "path": "",
+ "text": "百年大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "role": 15,
+ "status": 1,
+ "theme_type": 0,
+ "tv_due_date": 1692288000,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 2,
+ "vip_pay_type": 1
+ }
+ },
+ "cover": "http://i1.hdslb.com/bfs/archive/170237c4589a086afd7d62823765de1cc7306555.jpg",
+ "id_str": "954478850029387784",
+ "jump_url": "//www.bilibili.com/video/BV1Jz421q7JH/",
+ "pub_time": "11小时前",
+ "rid": 1356097140,
+ "title": "我的世界 冷门原版生物娘化 材质包",
+ "type": 8,
+ "visible": true
+ },
+ {
+ "author": {
+ "face": "https://i0.hdslb.com/bfs/face/22e6b4f3c9199b6f4397f0d8df916872d677557b.jpg",
+ "jump_url": "//space.bilibili.com/625267185/dynamic",
+ "mid": 625267185,
+ "name": "零度解说",
+ "official": {
+ "desc": "",
+ "role": 0,
+ "title": "",
+ "type": -1
+ },
+ "vip": {
+ "avatar_icon": {
+ "icon_resource": {}
+ },
+ "avatar_subscript": 0,
+ "avatar_subscript_url": "",
+ "due_date": 0,
+ "label": {
+ "bg_color": "",
+ "bg_style": 0,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png",
+ "label_theme": "",
+ "path": "",
+ "text": "",
+ "text_color": "",
+ "use_img_label": true
+ },
+ "nickname_color": "",
+ "role": 0,
+ "status": 0,
+ "theme_type": 0,
+ "tv_due_date": 0,
+ "tv_vip_pay_type": 0,
+ "tv_vip_status": 0,
+ "type": 0,
+ "vip_pay_type": 0
+ }
+ },
+ "cover": "http://i0.hdslb.com/bfs/archive/6f0397b546ba4da15fcd9a2e06cbcc1f68e5545c.jpg",
+ "id_str": "954376956212674594",
+ "jump_url": "//www.bilibili.com/video/BV141421b7sf/",
+ "pub_time": "昨天 20:30",
+ "rid": 1556122058,
+ "title": "快速提升上网速度!免费又好用,适用 Windows 10 /11,非常简单!!(2024) | 零度解说",
+ "type": 8,
+ "visible": true
+ }
+ ],
+ "offset": "954376956212674594",
+ "update_baseline": "954659517801431040",
+ "update_num": 0
+ }
+}
+```
+
+
diff --git a/docs/dynamic/publish.md b/docs/dynamic/publish.md
new file mode 100644
index 0000000..e55101b
--- /dev/null
+++ b/docs/dynamic/publish.md
@@ -0,0 +1,872 @@
+# 发布动态
+
+## 为图片动态上传图片
+
+> https://api.bilibili.com/x/dynamic/feed/draw/upload_bfs
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+注意:非日常类型像素宽高必须大于420
+
+**正文参数 (multipart/form-data):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ------------------------ | ------ | ------------------------------------------------------------ |
+| file_up | file | 需要上传的图片文件 | 必要 | 格式仅支持jpg png gif |
+| category | str | 图片类型 | 必要 | daily:日常(动态) draw:绘画(画友) cos:摄影(COSPLAY) |
+| biz | str | | | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -1:未添加图片 -2:参数错误 -3:图片尺寸过小 -4:账号未登录 -7:图片信息错误 |
+| message | str | 错误信息 | 默认为success |
+| data | obj | 信息本体 | 仅在正确时既`code=0`时为有效信息 |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | -------------- | ---- |
+| image_url | str | 已上传图片url | |
+| image_width | num | 已上传图片宽度 | 像素 |
+| image_height | num | 已上传图片高度 | 像素 |
+
+**示例:**
+
+上传了一张图片`test.png`类型为`日常`
+
+```shell
+curl 'https://api.bilibili.com/x/dynamic/feed/draw/upload_bfs' \
+-F 'file_up=@test.png' \
+-F 'category=daily'
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code":0,
+ "message":"success",
+ "data":{
+ "image_url":"http:\/\/i0.hdslb.com\/bfs\/album\/13f9523efe186a8066b2d72e80283cea2437eb62.png",
+ "image_width":1225,
+ "image_height":850
+ }
+}
+```
+
+
+
+
+## 创建投票
+
+> https://api.vc.bilibili.com/vote_svr/v1/vote_svr/create_vote
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+注意: options最少两个,下标n从0开始
+
+**正文参数 (multipart/form-data):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------------------------- | ---- | ------------------------ | ------ | -------------------------------------------------------- |
+| info[title] | str | 投票标题 | 必要 | |
+| info[desc] | str | 投票描述 | 非必要 | 可为空 |
+| info[type] | num | 投票类型 | 必要 | 0:文字投票 1:图片投票 |
+| info[choice_cnt] | num | 最多选几项 | 必要 | |
+| info[duration] | num | 投票持续秒数 | 必要 | 常用: 三天:259200 七天:604800 三十天:2592000 |
+| info[options]\[ n ][desc] | str | 第n项选项文字内容 | 必要 | |
+| info[options]\[ n ][img_url] | str | 第n项选项投票图片 | 非必要 | |
+| csrf | str | CSRF Token(位于cookie) | 非必要 | 头次见非必要的csrf |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | -------------------------------- |
+| code | num | 返回值 | 0:成功 5100001: 参数错误 |
+| msg | str | 错误信息 | 成功为空 |
+| message | str | 错误信息 | 跟上面那个一模一样 |
+| data | obj | 信息本体 | 仅在正确时既`code=0`时为有效信息 |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | -------------- | ---- |
+| vote_id | num | 投票id | |
+| \_gt\_ | num | 0 | |
+
+**示例:**
+
+创建一个标题为`是否自愿开学`持续七天的纯文本投票
+
+```shell
+curl -X POST 'https://api.vc.bilibili.com/vote_svr/v1/vote_svr/create_vote' \
+--data-urlencode 'info[title]=是否自愿开学' \
+--data-urlencode 'info[desc]=问卷调查:自愿开学' \
+--data-urlencode 'info[type]=0' \
+--data-urlencode 'info[choice_cnt]=1' \
+--data-urlencode 'info[duration]=604800' \
+--data-urlencode 'info[options][0][desc]=自愿' \
+--data-urlencode 'info[options][1][desc]=不自愿' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "message": "",
+ "data": {
+ "vote_id": 4947171,
+ "_gt_": 0
+ }
+}
+```
+
+
+
+## 发表纯文本动态
+
+> https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/create
+
+*请求方式:POST*
+
+认证方式:Cookie (SESSDATA)
+
+**正文参数(multipart/form-data):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --- | --- | --- | --- | --- |
+| dynamic_id | num | 0 | 必要 | |
+| type | num | 4 | 必要 | |
+| rid | num | 0 | 必要 | |
+| content | str | 动态内容 | 必要 | |
+| up_choose_comment | num | 0 | 非必要 | |
+| up_close_comment | num | 0 | 非必要 | |
+| extension | json | 位置信息 | 非必要 | |
+| at_uids | str | 动态中 at 到的用户的 uid | 非必要 | 使用逗号`,`分隔 |
+| ctrl | array | 特殊格式控制 (如 at 别人时的蓝字体和链接) | 非必要 | |
+| csrf_token | str | CSRF Token (位于 cookie) | 非必要 | |
+| csrf | str | CSRF Token (位于 cookie) | 非必要 | |
+
+extension参数值:
+```json
+{
+ "emoji_type": 1,
+ "lbs_cfg": {
+ "title": "**市",
+ "poi": "156330200",
+ "show_title": "**市",
+ "type": 1,
+ "address": "**市",
+ "location": {
+ "lng":显示的经度数值,
+ "lat":显示的纬度数值
+ },
+ "distance": 0
+ },
+ "flag_cfg": {},
+ "from_cfg": {
+ "location": {
+ "lat":用户实际纬度数值,
+ "lng":用户实际经度数值
+ }
+ }
+}
+```
+
+ctrl单个对象(注意用的时候是数组出现):
+| 参数名 | 类型 | 内容 |
+| --- | --- | --- |
+| location | num | 从全文第几个字开始变蓝 |
+| type | num | 1 (可能1代表链接到用户uid) |
+| length | num | 这一段变蓝多少字 |
+| data | str | 链接目标(被at人的uid) |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 成功为空 |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| result | num | 0 | |
+| errmsg | str | 像是服务器日志一样的东西 | |
+| dynamic_id | num | 动态 id | |
+| create_result | num | 1 | |
+| dynamic_id_str | str | 动态 id | 字符串格式 |
+| \_gt_ | num | 0 | |
+
+
+查看示例(纯文本)
+
+```bash
+curl 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/create' \
+ --data-urlencode 'dynamic_id=0' \
+ --data-urlencode 'type=4' \
+ --data-urlencode 'rid=0' \
+ --data-urlencode 'content=Hello Bug~' \
+ --data-urlencode 'up_choose_comment=0' \
+ --data-urlencode 'up_close_comment=0' \
+ --data-urlencode 'extension={"emoji_type":1,"from":{"emoji_type":1},"flag_cfg":{}}' \
+ --data-urlencode 'at_uids=' \
+ --data-urlencode 'ctrl=[]' \
+ --data-urlencode 'csrf_token=de2731532b4ab96bc8536da948932668' \
+ --data-urlencode 'csrf=de2731532b4ab96bc8536da948932668' \
+ -b 'SESSDATA=******'
+```
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "message": "",
+ "data": {
+ "result": 0,
+ "errmsg": "; Create dynamic:588320531406678918, res:0, result:1; Push create kafka:0; Push create databus:0; Register comment result:0; Add outbox result:1",
+ "dynamic_id": 588320531406678918,
+ "create_result": 1,
+ "dynamic_id_str": "588320531406678918",
+ "_gt_": 0
+ }
+}
+
+```
+
+
+
+
+查看示例(at两个人)
+
+动态正文
+```
+[热词系列_神仙UP]@暮光小猿wzt @社会易姐QwQ
+```
+
+at_uids
+```
+15858903,293793435
+```
+
+ctrl
+```json
+[
+ { "location": 11, "type": 1, "length": 9, "data": "15858903" },
+ { "location": 20, "type": 1, "length": 9, "data": "293793435" }
+]
+```
+
+命令
+```bash
+curl 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/create' \
+ --data-urlencode 'dynamic_id': '0' \
+ --data-urlencode 'type': '4' \
+ --data-urlencode 'rid': '0' \
+ --data-urlencode 'content': '[热词系列_神仙UP]@暮光小猿wzt @社会易姐QwQ ' \
+ --data-urlencode 'up_choose_comment': '0' \
+ --data-urlencode 'up_close_comment': '0' \
+ --data-urlencode 'extension': '{"emoji_type":1,"from":{"emoji_type":1},"flag_cfg":{}}' \
+ --data-urlencode 'at_uids': '15858903,293793435' \
+ --data-urlencode 'ctrl': '[{"location":11,"type":1,"length":9,"data":"15858903"},{"location":20,"type":1,"length":9,"data":"293793435"}]' \
+ --data-urlencode 'csrf_token': 'de2731532b4ab96bc8536da948932668' \
+ --data-urlencode 'csrf': 'de2731532b4ab96bc8536da948932668' \
+ -b 'SESSDATA=******'
+```
+
+
+
+
+
+## 发表复杂动态
+
+
+
+> https://api.bilibili.com/x/dynamic/feed/create/dyn
+
+*请求方式:POST*
+
+认证方式:Cookie (SESSDATA)
+
+**URL参数**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------------------ | ------ | ---- |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**正文参数(application/json):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --- | --- | --- | --- | --- |
+| dyn_req | obj | 请求本体 | 必要 | |
+
+`dyn_req`对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --- | --- | --- | --- | --- |
+| attach_card | obj | 特殊卡片 | 非必要 | 如直播预约等 |
+| content | obj | 动态内容 | 必要 | |
+| meta | obj | 元信息 | 非必要 | 大概是来源信息 |
+| scene | num | 动态类型? | 必要 | 纯文本: 1 带图: 2 |
+| pics | array | 携带图片 | 非必要 | 最多九个 |
+| topic | obj | 话题 | 非必要 | |
+| option | obj | 互动设置 | 非必要 | 没有此项时默认开启评论区 |
+| upload_id | str | 客户端生成的 | 非必要 | 内容为`发送人mid`+`当前秒级时间戳`+`四位随机整数`,中间用`_`隔开 |
+
+`dyn_req`对象的`meta`对象,大概是来源信息,很简单就不详细列表了:
+
+```json
+{
+ "app_meta": {
+ "from": "create.dynamic.web",
+ "mobi_app": "web"
+ }
+}
+```
+
+`dyn_req`对象的`content`对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ----- | -------------------- | ------ | ---- |
+| contents | array | 动态组件对象有序数组 | 必要 | |
+
+`contents`数组内每一个动态组件对象:
+
+```json
+{
+ "raw_text": "ui上直接显示的字符串",
+ "type": 组件类型id,
+ "biz_id": "动态组件的内容id转字符串,比如投票id"
+}
+```
+
+动态组件类型:
+
+| 组件名 | type | `biz_id`含义 |
+| ------ | ---- | ------------ |
+| 纯文本 | 1 | 空 |
+| AT人 | 2 | AT人的mid |
+| 表情 | 9 | 空 |
+| 投票 | 4 | 投票id |
+
+`dyn_req`对象的`topic`对象
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------- | ---- | ------- | ------ | -------------------------- |
+| from_source | str | 来源id? | 必要 | 网页版直接选为dyn.web.list |
+| from_topic_id | num | 0 | 必要 | |
+| id | num | 话题id | 必要 | |
+| name | str | 话题名 | 必要 | |
+
+`dyn_req`对象的`pics`数组的每一项对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ----- | ---------------- | ------ | ------------------------------------------------------------ |
+| img_height | num | 图片高 | 非必要 | 这个东西会直接原封不动传到前端,比如你都写0在网页上就看不见了,但是还会加载 |
+| img_width | num | 图片宽 | 非必要 | 同上 |
+| img_size | float | 图片文件大小(KB) | 非必要 | |
+| img_src | str | 图片bfs链接 | 必要 | |
+
+`dyn_req`对象的`option`对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----------------- | ---- | ------------ | ------ | --------------- |
+| up_choose_comment | num | 精选评论flag | 非必要 | 1: 开启 |
+| close_comment | num | 关闭评论flag | 非必要 | 同上,与上二选一 |
+
+`dyn_req`对象的`topic`对象:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------- | ---- | ------------ | ------ | -------- |
+| from_source | str | dyn.web.list | 非必要 | 作用不明 |
+| from_topic_id | num | 0 | 非必要 | 作用不明 |
+| id | num | 话题id | 必要 | |
+| name | str | 话题名 | 非必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 4126021:你没有绑定手机,无法发布动态 |
+| message | str | 错误信息 | 成功为空 |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+当Cookie中含有任意的`buvid3`时,比较干净简洁:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| result | num | 0 | |
+| message | str | 错误信息 | |
+| dyn_id | num | 动态 id | |
+| dyn_id_str | str | 动态 id | 字符串格式 |
+| dyn_type | num | 动态类型 | 不带图片: 4 带图片: 2 其他请参考 get_dynamic_detail.md |
+| \_gt_ | num | 0 | |
+
+**警告:下面的内容又乱又杂,而且绝大多数情况用不到,我建议大家用这个接口的时候随便带一个buvid3的cookie屏蔽掉它们算了.**
+
+当Cookie中不含有`buvid3`时,较上述字段多出一个`fake_card`对象,大概是移动端用的卡片:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ---- | ------------ |
+| fake_card | obj | 0 | 又多又乱又杂 |
+
+`fake_card`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ----- | ------------ | ------------------------------------------------------------ |
+| card_type | num | 卡片类型 | 不带图片: 4 带图片: 2 其他请参考 [获取特定动态卡片信息](get_dynamic_detail.md) |
+| modules | array | 卡片组件列表 | |
+| extend | obj | 其他杂项信息 | |
+
+`fake_card`对象的`modules`数组中每一项对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | -------- | -------------------------------------------- |
+| module_type | num | 组件类型 | 1: 作者信息 3: 动态内容 其他有待发现 |
+| ModuleItem | obj | 卡片组件 | |
+
+`ModuleItem`对象与`module_type`对应关系:
+
+| module_type | `ModuleItem`含有的唯一一个key | 备注 |
+| ----------- | ----------------------------- | ----------------------- |
+| 1 | module_author | 作者信息 |
+| 3 | module_desc | 动态内容 |
+| 4 | module_dynamic | 携带图片等 |
+| 9 | module_stat | 不明,貌似一直都是空对象 |
+
+ `ModuleItem`内`module_author`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------- | ---- | -------------------------------- | ------------------------------------------------ |
+| mid | num | 发送者mid | |
+| ptime_label_text | str | 发送时间(人类可读形式)肯定是刚刚 | |
+| author | obj | 作者详细信息 | 请参考[用户基本信息](../user/info.md),不再赘述.. |
+
+ `ModuleItem`内`module_desc`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ----- | -------------- | ---- |
+| desc | array | 动态组件列表 | |
+| text | str | 动态纯文本形式 | |
+
+`module_desc`的`desc`数组:
+
+| 项 | 类型 | 备注 |
+| ---- | ---- | ------------------- |
+| 0 | obj | 第0个动态组件 |
+| n | obj | 第n+1个动态组件组件 |
+| ... | obj | ... |
+
+`desc`数组的每一项:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------------------------------------------ | ----------------------------- |
+| text | str | 该组件对外显示的纯文本 | 对应请求时该组件的`raw_text` |
+| type | num | 组件类型 | 对应请求时该组件的`type` |
+| rid | str | 组件内容的id,例如@人的mid | 根据需要出现,比如纯文本就没有 |
+| uri | str | b站自定义`bilibili://`协议链接,用于@人点击跳转等 | 根据需要出现,比如纯文本就没有 |
+
+ `ModuleItem`内`module_dynamic`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ------------------ | -------------------- |
+| type | num | 不知道是什么的类型 | 5: 图片 其他未知 |
+| ModuleItem | obj | 组件? | 怎么还有套娃的? |
+
+当`module_dynamic`的`type`字段为`5`时:
+
+`module_dynamic`的`ModuleItem`有唯一key`dyn_draw`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ----- | -------------------------------- | ------------------------------------------------ |
+| items | array | 图片数组 | 与请求部分`dyn_req.pics`一致 |
+| id | num | 这条图片动态所对应的相簿`doc_id` | 可以参考本文档的[相簿基本信息](../album/info.md) |
+
+`fake_card`的`extend`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ----- | ---------------------------------------------- | ---------------------------------------- |
+| dyn_id_str | str | 动态id字符串形式 | |
+| business_id | str | 未知 | 根据情况出现 |
+| orif_img_url | str | 封面图url(如果有) | |
+| share_type | str | 一般为3 | 未知 |
+| share_scene | str | 一般为dynamic | 未知 |
+| is_fast_share | bool | 一般为true | 未知 |
+| dyn_type | num | 动态类型 | 不带图片: 4 带图片: 2 其他待探索 |
+| uid | num | 发送者mid | |
+| card_url | str | b站自定义`bilibili://`协议链接,指向该条动态 | |
+| desc | array | 动态组件列表,重复了一遍`module_desc`的desc数组 | |
+| reply | obj | 评论区相关 | |
+
+`extend`的`reply`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ----- | ------------------------------------------------- | ---- |
+| uri | str | b站自定义`bilibili://`协议链接,指向该条动态评论区 | |
+| params | array | 未知 | |
+
+
+查看示例(不带`buvid3`)
+
+```bash
+curl -X POST 'https://api.bilibili.com/x/dynamic/feed/create/dyn?csrf=xxxxx' \
+-b 'buvid3=114514;SESSDATA=xxxxx;' \
+--header 'Content-Type: application/json' \
+--data-raw '{
+ "dyn_req": {
+ "content": {
+ "contents": [
+ {
+ "raw_text": "Test",
+ "type": 1,
+ "biz_id": ""
+ },
+ {
+ "raw_text": "礼堂丁真,鉴定为一眼丁真",
+ "type": 2,
+ "biz_id": "1463028352"
+ }
+ ]
+ },
+ "pics": [
+ {
+ "img_src": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png",
+ "img_width": 1368,
+ "img_height": 1500,
+ "img_size": 662.6005859375
+ },
+ {
+ "img_src": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png",
+ "img_width": 1368,
+ "img_height": 1500,
+ "img_size": 662.6005859375
+ }
+ ],
+ "option": {
+ "close_comment": 1
+ },
+ "scene": 2
+ }
+}'
+```
+
+响应:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "dyn_id": 755402937023332386,
+ "dyn_id_str": "755402937023332386",
+ "dyn_type": 2,
+ "dyn_rid": 221621929,
+ "fake_card": {
+ "card_type": 7,
+ "modules": [
+ {
+ "module_type": 1,
+ "ModuleItem": {
+ "module_author": {
+ "mid": 470310172,
+ "ptime_label_text": "刚刚",
+ "author": {
+ "mid": 470310172,
+ "name": "I_Min",
+ "face": "https://i1.hdslb.com/bfs/face/d36e9dc2d14b545a055980a2f3c1f2d5621646c6.png",
+ "official": {
+ "type": -1
+ },
+ "vip": {
+ "Type": 1,
+ "due_date": 1673366400000,
+ "label": {}
+ },
+ "uri": "bilibili://space/470310172?defaultTab=dynamic",
+ "pendant": {},
+ "nameplate": {
+ "nid": 3,
+ "name": "白银殿堂",
+ "image": "https://i1.hdslb.com/bfs/face/f6a31275029365ae5dc710006585ddcf1139bde1.png",
+ "image_small": "https://i0.hdslb.com/bfs/face/b09cdb4c119c467cf2d15db5263b4f539fa6e30b.png",
+ "level": "高级勋章",
+ "condition": "单个自制视频总播放数>=10万"
+ }
+ },
+ "decorate_card": {
+ "id": 984,
+ "card_url": "https://i0.hdslb.com/bfs/vip/e42569d2f91a17346cdb991c7c34d3bbc677d4ef.png",
+ "jump_url": "https://www.bilibili.com/h5/mall/equity-link/home?navhide=1&item_id=984&part=card&f_source=garb&from=post&isdiy=0",
+ "fan": {
+ "number_str": "000000"
+ }
+ },
+ "tp_list": [
+ {
+ "type": 3,
+ "Item": {
+ "share": {
+ "icon": "http://i0.hdslb.com/bfs/feed-admin/ee5902a63bbe4a0d78646d11036b062ea60573f6.png",
+ "title": "分享"
+ }
+ }
+ },
+ {
+ "type": 7,
+ "Item": {
+ "default": {
+ "icon": "http://i0.hdslb.com/bfs/feed-admin/9163a7b29964cb84cb5fc35e4f7b899151cf2afc.png",
+ "title": "删除"
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "module_type": 3,
+ "ModuleItem": {
+ "module_desc": {
+ "desc": [
+ {
+ "text": "Test",
+ "type": 1
+ },
+ {
+ "text": "礼堂丁真,鉴定为一眼丁真",
+ "type": 2,
+ "uri": "bilibili://space/1463028352?defaultTab=dynamic",
+ "rid": "1463028352"
+ }
+ ],
+ "text": "Test礼堂丁真,鉴定为一眼丁真"
+ }
+ }
+ },
+ {
+ "module_type": 4,
+ "ModuleItem": {
+ "module_dynamic": {
+ "type": 5,
+ "ModuleItem": {
+ "dyn_draw": {
+ "items": [
+ {
+ "src": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png",
+ "width": 1368,
+ "height": 1500,
+ "size": 662.6006
+ },
+ {
+ "src": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png",
+ "width": 1368,
+ "height": 1500,
+ "size": 662.6006
+ }
+ ],
+ "id": 221621929
+ }
+ }
+ }
+ }
+ },
+ {
+ "module_type": 9,
+ "ModuleItem": {
+ "module_stat": {}
+ }
+ }
+ ],
+ "extend": {
+ "dyn_id_str": "755402937023332386",
+ "business_id": "221621929",
+ "orig_img_url": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png",
+ "desc": [
+ {
+ "text": "Test",
+ "type": 1
+ },
+ {
+ "text": "礼堂丁真,鉴定为一眼丁真",
+ "type": 2,
+ "uri": "bilibili://space/1463028352?defaultTab=dynamic",
+ "rid": "1463028352"
+ }
+ ],
+ "share_type": "3",
+ "share_scene": "dynamic",
+ "is_fast_share": true,
+ "dyn_type": 2,
+ "uid": 470310172,
+ "card_url": "bilibili://following/detail/755402937023332386?cardType=2&rid=221621929",
+ "reply": {
+ "uri": "bilibili://following/detail/755402937023332386?cardType=2&rid=221621929",
+ "params": [
+ {
+ "key": "comment_on",
+ "value": "1"
+ }
+ ]
+ }
+ }
+ }
+ }
+}
+```
+
+
+
+
+查看示例(带`buvid3`)
+
+动态正文
+```
+Test礼堂丁真,鉴定为一眼丁真
+```
+
+带两张一样的图:
+
+http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png
+
+然后关闭评论区
+
+命令
+
+```bash
+curl -X POST 'https://api.bilibili.com/x/dynamic/feed/create/dyn?csrf=xxxxx' \
+-b 'buvid3=114514;SESSDATA=xxxxx;' \
+--header 'Content-Type: application/json' \
+--data-raw '{
+ "dyn_req": {
+ "content": {
+ "contents": [
+ {
+ "raw_text": "Test",
+ "type": 1,
+ "biz_id": ""
+ },
+ {
+ "raw_text": "礼堂丁真,鉴定为一眼丁真",
+ "type": 2,
+ "biz_id": "1463028352"
+ }
+ ]
+ },
+ "pics": [
+ {
+ "img_src": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png",
+ "img_width": 1368,
+ "img_height": 1500,
+ "img_size": 662.6005859375
+ },
+ {
+ "img_src": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png",
+ "img_width": 1368,
+ "img_height": 1500,
+ "img_size": 662.6005859375
+ }
+ ],
+ "option": {
+ "close_comment": 1
+ },
+ "scene": 2
+ }
+}'
+```
+
+响应:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "dyn_id": 755402172521250838,
+ "dyn_id_str": "755402172521250838",
+ "dyn_type": 2,
+ "dyn_rid": 221621773
+ }
+}
+```
+
+
+
+
+
+## 立即发布定时动态
+
+> https://api.vc.bilibili.com/dynamic_draft/v1/dynamic_draft/publish_now
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ------------------------ | ------ | ---- |
+| draft_id | file | 定时动态(草稿)id | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------ |
+| code | num | 返回值 | 0:成功 |
+| data | obj | 信息本体 | 正常为空对象 |
+| message | str | 错误消息 | 正常为"0" |
+| ttl | num | 1 | 不明 |
+
+
+查看示例
+
+
+```bash
+curl -X POST 'https://api.vc.bilibili.com/dynamic_draft/v1/dynamic_draft/publish_now' \
+--header 'Content-Type: application/x-www-form-urlencoded' \
+--data-urlencode 'draft_id=755409289278914611' \
+--data-urlencode 'csrf=xxx'
+-b 'SESSDATA=xxxx;'
+```
+
+```json
+{
+ "code":0,
+ "message":"0",
+ "ttl":1,
+ "data":{}
+}
+```
+
+
+
diff --git a/docs/dynamic/space.md b/docs/dynamic/space.md
new file mode 100644
index 0000000..0a150f9
--- /dev/null
+++ b/docs/dynamic/space.md
@@ -0,0 +1,1143 @@
+# 获取用户空间动态
+
+> https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space
+
+请求方式:`GET`
+
+认证方式:Cookie(SESSDATA)
+
+## URL参数
+
+| 参数名 | 类型 | 必填 | 内容 | 备注 |
+|-----------------|-----|-----|--------|-----|
+| offset | str | | 分页偏移量 | |
+| host_mid | str | √ | 用户UID | |
+| timezone_offset | num | | `-480` | |
+| features | str | | itemOpusStyle | |
+
+## Json回复
+
+参照 [获取动态列表](./all.md#获取动态列表)
+
+## 请求示例
+
+```shell
+curl -L -X GET 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?host_mid=1'
+```
+
+## 响应示例
+
+
+点击查看
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "has_more": false,
+ "items": [
+ {
+ "basic": {
+ "comment_id_str": "463864834570585963",
+ "comment_type": 17,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "463864834566075427"
+ },
+ "id_str": "463864834570585963",
+ "modules": {
+ "module_author": {
+ "face": "http://i0.hdslb.com/bfs/face/34c5b30a990c7ce4a809626d8153fa7895ec7b63.gif",
+ "face_nft": false,
+ "following": null,
+ "jump_url": "//space.bilibili.com/1/dynamic",
+ "label": "",
+ "mid": 1,
+ "name": "bishi",
+ "official_verify": {
+ "desc": "",
+ "type": -1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "",
+ "pub_location_text": "",
+ "pub_time": "2020-12-02",
+ "pub_ts": 1606840348,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1816099200000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "好家伙",
+ "text": "好家伙",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "好家伙"
+ },
+ "major": null,
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 979,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 81,
+ "forbidden": false
+ },
+ "like": {
+ "count": 7694,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "orig": {
+ "basic": {
+ "comment_id_str": "",
+ "comment_type": 0,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": ""
+ },
+ "id_str": "459720423056997502",
+ "modules": {
+ "module_author": {
+ "decorate": {
+ "card_url": "http://i0.hdslb.com/bfs/garb/item/3fc3f5914f0bcbefac9e9fa96aec454cf347287a.png",
+ "fan": {
+ "color": "#ec3d3d",
+ "is_fan": true,
+ "num_str": "004156",
+ "number": 4156
+ },
+ "id": 1418,
+ "jump_url": "https://www.bilibili.com/h5/mall/fans/recommend/1431?navhide=1&mid=249608727&from=dynamic&isdiy=0",
+ "name": "2020拜年祭粉丝专属",
+ "type": 3
+ },
+ "face": "https://i0.hdslb.com/bfs/face/e422a095e58305218e2745714ceb4c9754e752a7.jpg",
+ "face_nft": false,
+ "following": null,
+ "jump_url": "//space.bilibili.com/249608727/dynamic",
+ "label": "",
+ "mid": 249608727,
+ "name": "杨可爱Ukulele",
+ "official_verify": {
+ "desc": "全民音乐UP主年度30强",
+ "type": 0
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "https://i0.hdslb.com/bfs/face/c93e1eeb77b1bb0753eff243d49c006bf18d69c5.png",
+ "image_enhance": "https://i0.hdslb.com/bfs/face/c93e1eeb77b1bb0753eff243d49c006bf18d69c5.png",
+ "image_enhance_frame": "",
+ "name": "梦塔·雪谜城",
+ "pid": 299
+ },
+ "pub_action": "投稿了视频",
+ "pub_time": "",
+ "pub_ts": 1605875402,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1793462400000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "jump_url": "//search.bilibili.com/all?keyword=%23%E9%87%91%E7%A7%8B%E9%9F%B3%E4%B9%90%E5%AD%A3%23",
+ "orig_text": "#金秋音乐季#",
+ "text": "#金秋音乐季#",
+ "type": "RICH_TEXT_NODE_TYPE_TOPIC"
+ },
+ {
+ "orig_text": "\n大家推荐给我很多神曲 一直没机会做\n这不\n杨同学带着《酒醉的蝴蝶》《爱河》《黑人抬棺》《最炫民族风》..等10余位选手来了\n改编成中国风之后 好像 有点 串味儿了\n大家三连之后再细细观看可好?",
+ "text": "\n大家推荐给我很多神曲 一直没机会做\n这不\n杨同学带着《酒醉的蝴蝶》《爱河》《黑人抬棺》《最炫民族风》..等10余位选手来了\n改编成中国风之后 好像 有点 串味儿了\n大家三连之后再细细观看可好?",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "#金秋音乐季#\n大家推荐给我很多神曲 一直没机会做\n这不\n杨同学带着《酒醉的蝴蝶》《爱河》《黑人抬棺》《最炫民族风》..等10余位选手来了\n改编成中国风之后 好像 有点 串味儿了\n大家三连之后再细细观看可好?"
+ },
+ "major": {
+ "archive": {
+ "aid": "970285943",
+ "badge": {
+ "bg_color": "#FB7299",
+ "color": "#FFFFFF",
+ "text": "投稿视频"
+ },
+ "bvid": "BV12p4y167Kq",
+ "cover": "http://i0.hdslb.com/bfs/archive/20c86c66df71770a7a91cc0871b455d1c582094b.jpg",
+ "desc": "大家好,今天想要跟大家分享我的快乐源泉,以及去KTV的必点神曲\n大家如果觉得十首看了还不过瘾的话\n这样\n点赞过十万 热评第一说出啥改编我就出啥 (前提是我做得来...\n\n(“土味”只是一个外号,它们其实不土,它们只是快乐的传递者\n 大部分的填词都是根据原版歌曲填哒,偶尔有些小发挥,大家当看娱乐视频就好啦)\n--------------------\n原唱:崔伟立、凤凰传奇、Vicetone&Tony Igy、神马乐团、筷子兄弟、慕容晓晓、李佳璐\n改编编曲/演唱/尤克里里:杨可爱\n改编填词:不迟等\n混音:",
+ "disable_preview": 0,
+ "duration_text": "06:12",
+ "jump_url": "//www.bilibili.com/video/BV12p4y167Kq",
+ "stat": {
+ "danmaku": "3519",
+ "play": "153万"
+ },
+ "title": "没内味儿?我把十五年最火的10首土味神曲做成了一首中国风..",
+ "type": 1
+ },
+ "type": "MAJOR_TYPE_ARCHIVE"
+ },
+ "topic": null
+ }
+ },
+ "type": "DYNAMIC_TYPE_AV",
+ "visible": true
+ },
+ "type": "DYNAMIC_TYPE_FORWARD",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "269459814293507419",
+ "comment_type": 17,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "269459814290043403"
+ },
+ "id_str": "269459814293507419",
+ "modules": {
+ "module_author": {
+ "face": "http://i0.hdslb.com/bfs/face/34c5b30a990c7ce4a809626d8153fa7895ec7b63.gif",
+ "face_nft": false,
+ "following": null,
+ "jump_url": "//space.bilibili.com/1/dynamic",
+ "label": "",
+ "mid": 1,
+ "name": "bishi",
+ "official_verify": {
+ "desc": "",
+ "type": -1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "",
+ "pub_location_text": "",
+ "pub_time": "2019-06-27",
+ "pub_ts": 1561576902,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1816099200000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "来一锄头!",
+ "text": "来一锄头!",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "来一锄头!"
+ },
+ "major": null,
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 1233,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 32,
+ "forbidden": false
+ },
+ "like": {
+ "count": 8428,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "orig": {
+ "basic": {
+ "comment_id_str": "",
+ "comment_type": 0,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": ""
+ },
+ "id_str": 4038269986840689,
+ "modules": {
+ "module_author": {
+ "face": "http://i0.hdslb.com/bfs/face/210cac322eb3a689f63f3a19d59ea641347c3c52.jpg",
+ "face_nft": false,
+ "following": null,
+ "jump_url": "//space.bilibili.com/10410/dynamic",
+ "label": "",
+ "mid": 10410,
+ "name": "hotfloor",
+ "official_verify": {
+ "desc": "",
+ "type": -1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "投稿了视频",
+ "pub_time": "",
+ "pub_ts": 1327584664,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1700150400000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": null,
+ "major": {
+ "archive": {
+ "aid": "205419",
+ "badge": {
+ "bg_color": "#FB7299",
+ "color": "#FFFFFF",
+ "text": "投稿视频"
+ },
+ "bvid": "BV1bx411w7SF",
+ "cover": "http://i1.hdslb.com/bfs/archive/5607be9a736a426ae21e3e59fad664296f91df8e.png",
+ "desc": "原创 拖到今天才做完了……总之祝各位新年快乐,做这个只是为了感谢这一年陪伴我们的各种新番,与新番一起成长的UP主们,和浪费我们大半人生的bili,谢谢你们带给我们的欢笑和泪水,即使是世界末日也不会忘记…… PS.感谢哦拖拖帮忙取标题 下载:http://pan.baidu.com/s/1c0ImLva 密码:8xb4 原曲MV联动av210810 自己的MADlist-->mylist27438",
+ "disable_preview": 0,
+ "duration_text": "04:49",
+ "jump_url": "//www.bilibili.com/video/BV1bx411w7SF",
+ "stat": {
+ "danmaku": "2.4万",
+ "play": "54.6万"
+ },
+ "title": "【MAD】[送给所有热爱bili的各位]干杯",
+ "type": 1
+ },
+ "type": "MAJOR_TYPE_ARCHIVE"
+ },
+ "topic": null
+ }
+ },
+ "type": "DYNAMIC_TYPE_AV",
+ "visible": true
+ },
+ "type": "DYNAMIC_TYPE_FORWARD",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "26050777",
+ "comment_type": 11,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "26050777"
+ },
+ "id_str": "269003035929570655",
+ "modules": {
+ "module_author": {
+ "face": "http://i0.hdslb.com/bfs/face/34c5b30a990c7ce4a809626d8153fa7895ec7b63.gif",
+ "face_nft": false,
+ "following": null,
+ "jump_url": "//space.bilibili.com/1/dynamic",
+ "label": "",
+ "mid": 1,
+ "name": "bishi",
+ "official_verify": {
+ "desc": "",
+ "type": -1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "",
+ "pub_location_text": "",
+ "pub_time": "2019-06-25",
+ "pub_ts": 1561470550,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1816099200000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "jump_url": "//search.bilibili.com/all?keyword=%23%E5%B9%B2%E6%9D%AF%E5%8D%81%E5%91%A8%E5%B9%B4%23",
+ "orig_text": "#干杯十周年#",
+ "text": "#干杯十周年#",
+ "type": "RICH_TEXT_NODE_TYPE_TOPIC"
+ },
+ {
+ "orig_text": "Yo,My Friend,Nice to see you again.",
+ "text": "Yo,My Friend,Nice to see you again.",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "jump_url": "https://www.bilibili.com/blackboard/bilibili2009.html",
+ "orig_text": "https://www.bilibili.com/blackboard/bilibili2009.html",
+ "text": "网页链接",
+ "type": "RICH_TEXT_NODE_TYPE_WEB"
+ }
+ ],
+ "text": "#干杯十周年#Yo,My Friend,Nice to see you again.https://www.bilibili.com/blackboard/bilibili2009.html"
+ },
+ "major": {
+ "draw": {
+ "id": 26050777,
+ "items": [
+ {
+ "height": 1360,
+ "size": 500,
+ "src": "https://i0.hdslb.com/bfs/active/1ddb2cb9a1edb74ba7c4f0e15c1bbef9dc3ce548.jpg",
+ "tags": [],
+ "width": 935
+ }
+ ]
+ },
+ "type": "MAJOR_TYPE_DRAW"
+ },
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 1515,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 214,
+ "forbidden": false
+ },
+ "like": {
+ "count": 11041,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_DRAW",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "264471510427272642",
+ "comment_type": 17,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "264471510424746690"
+ },
+ "id_str": "264471510427272642",
+ "modules": {
+ "module_author": {
+ "face": "http://i0.hdslb.com/bfs/face/34c5b30a990c7ce4a809626d8153fa7895ec7b63.gif",
+ "face_nft": false,
+ "following": null,
+ "jump_url": "//space.bilibili.com/1/dynamic",
+ "label": "",
+ "mid": 1,
+ "name": "bishi",
+ "official_verify": {
+ "desc": "",
+ "type": -1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "",
+ "pub_location_text": "",
+ "pub_time": "2019-06-13",
+ "pub_ts": 1560415472,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1816099200000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "圈错号了",
+ "text": "圈错号了",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "emoji": {
+ "icon_url": "http://i0.hdslb.com/bfs/emote/33ad6000d9f9f168a0976bc60937786f239e5d8c.png",
+ "size": 1,
+ "text": "[呆]",
+ "type": 1
+ },
+ "orig_text": "[呆]",
+ "text": "[呆]",
+ "type": "RICH_TEXT_NODE_TYPE_EMOJI"
+ },
+ {
+ "orig_text": "//",
+ "text": "//",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "orig_text": "@柴刀娘木木",
+ "rid": "9",
+ "text": "@柴刀娘木木",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ },
+ {
+ "orig_text": ":",
+ "text": ":",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "orig_text": "@bishi",
+ "rid": "1",
+ "text": "@bishi",
+ "type": "RICH_TEXT_NODE_TYPE_AT"
+ },
+ {
+ "orig_text": "我来组成分母,测试欧气,我要是中了再抽人送出",
+ "text": "我来组成分母,测试欧气,我要是中了再抽人送出",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "emoji": {
+ "icon_url": "http://i0.hdslb.com/bfs/emote/6c49d226e76c42cd8002abc47b3112bc5a92f66a.png",
+ "size": 1,
+ "text": "[偷笑]",
+ "type": 1
+ },
+ "orig_text": "[偷笑]",
+ "text": "[偷笑]",
+ "type": "RICH_TEXT_NODE_TYPE_EMOJI"
+ }
+ ],
+ "text": "圈错号了[呆]//@柴刀娘木木:@bishi我来组成分母,测试欧气,我要是中了再抽人送出[偷笑]"
+ },
+ "major": null,
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 1013,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 109,
+ "forbidden": false
+ },
+ "like": {
+ "count": 4751,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "orig": {
+ "basic": {
+ "comment_id_str": "",
+ "comment_type": 0,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": ""
+ },
+ "id_str": "264180341709040397",
+ "modules": {
+ "module_author": {
+ "decorate": {
+ "card_url": "http://i0.hdslb.com/bfs/garb/item/fe745063c05881face209a772d17bb056a4034f1.png",
+ "fan": {
+ "color": "#6857ea",
+ "is_fan": true,
+ "num_str": "001647",
+ "number": 1647
+ },
+ "id": 5203,
+ "jump_url": "https://www.bilibili.com/h5/mall/fans/recommend/5235?navhide=1&mid=12&from=dynamic&isdiy=0",
+ "name": "BML2021粉丝专属",
+ "type": 3
+ },
+ "face": "http://i2.hdslb.com/bfs/face/4f640086bc17e180faf8ad6b86b5bf4be24eb9f1.jpg",
+ "face_nft": false,
+ "following": null,
+ "jump_url": "//space.bilibili.com/12/dynamic",
+ "label": "",
+ "mid": 12,
+ "name": "MagicBear",
+ "official_verify": {
+ "desc": "",
+ "type": 0
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "https://i0.hdslb.com/bfs/face/a959c72407b2ac553d4328fd76d55d0134e20f65.png",
+ "image_enhance": "https://i0.hdslb.com/bfs/face/a959c72407b2ac553d4328fd76d55d0134e20f65.png",
+ "image_enhance_frame": "",
+ "name": "异常生物",
+ "pid": 460
+ },
+ "pub_action": "",
+ "pub_time": "",
+ "pub_ts": 1560347679,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1761580800000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "https://i0.hdslb.com/bfs/activity-plat/static/20220608/e369244d0b14644f5e1a06431e22a4d5/0DFy9BHgwE.gif",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d7e624d13d3e134251e4174a7318c19a8edbd71.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/uckjAv3Npy.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": {
+ "rich_text_nodes": [
+ {
+ "orig_text": "互动抽奖",
+ "text": "互动抽奖",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "jump_url": "//search.bilibili.com/all?keyword=%23%E8%BD%AC%E5%8F%91%E6%8A%BD%E5%A5%96%23",
+ "orig_text": "#转发抽奖#",
+ "text": "#转发抽奖#",
+ "type": "RICH_TEXT_NODE_TYPE_TOPIC"
+ },
+ {
+ "jump_url": "//search.bilibili.com/all?keyword=%23PC%E7%A1%AC%E4%BB%B6%23",
+ "orig_text": "#PC硬件#",
+ "text": "#PC硬件#",
+ "type": "RICH_TEXT_NODE_TYPE_TOPIC"
+ },
+ {
+ "jump_url": "//search.bilibili.com/all?keyword=%23%E6%97%A7%E8%B4%A7%E6%B8%85%E7%90%86%E8%AE%A1%E5%88%92%23",
+ "orig_text": "#旧货清理计划#",
+ "text": "#旧货清理计划#",
+ "type": "RICH_TEXT_NODE_TYPE_TOPIC"
+ },
+ {
+ "orig_text": " 很久以前购入然后一直沒用上的SSD一枚 型号:PX-G512M6e ",
+ "text": " 很久以前购入然后一直沒用上的SSD一枚 型号:PX-G512M6e ",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ },
+ {
+ "emoji": {
+ "icon_url": "http://i0.hdslb.com/bfs/emote/6ea59c827c414b4a2955fe79e0f6fd3dcd515e24.png",
+ "size": 1,
+ "text": "[tv_doge]",
+ "type": 1
+ },
+ "orig_text": "[tv_doge]",
+ "text": "[tv_doge]",
+ "type": "RICH_TEXT_NODE_TYPE_EMOJI"
+ },
+ {
+ "orig_text": " 关注并转发抽奖送出",
+ "text": " 关注并转发抽奖送出",
+ "type": "RICH_TEXT_NODE_TYPE_TEXT"
+ }
+ ],
+ "text": "互动抽奖#转发抽奖##PC硬件##旧货清理计划# 很久以前购入然后一直沒用上的SSD一枚 型号:PX-G512M6e [tv_doge] 关注并转发抽奖送出"
+ },
+ "major": {
+ "draw": {
+ "id": 24303852,
+ "items": [
+ {
+ "height": 1242,
+ "size": 150.93652,
+ "src": "https://i0.hdslb.com/bfs/album/cd767602a291a5b7d4deebd8c65ebeeb0dfce1a2.jpg",
+ "tags": [],
+ "width": 2688
+ }
+ ]
+ },
+ "type": "MAJOR_TYPE_DRAW"
+ },
+ "topic": null
+ }
+ },
+ "type": "DYNAMIC_TYPE_DRAW",
+ "visible": true
+ },
+ "type": "DYNAMIC_TYPE_FORWARD",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "55",
+ "comment_type": 1,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "55"
+ },
+ "id_str": 76690937085980,
+ "modules": {
+ "module_author": {
+ "face": "http://i0.hdslb.com/bfs/face/34c5b30a990c7ce4a809626d8153fa7895ec7b63.gif",
+ "face_nft": false,
+ "following": null,
+ "jump_url": "//space.bilibili.com/1/dynamic",
+ "label": "",
+ "mid": 1,
+ "name": "bishi",
+ "official_verify": {
+ "desc": "",
+ "type": -1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "投稿了视频",
+ "pub_location_text": "",
+ "pub_time": "2009-07-13",
+ "pub_ts": 1247496094,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1816099200000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": null,
+ "major": {
+ "archive": {
+ "aid": "55",
+ "badge": {
+ "bg_color": "#FB7299",
+ "color": "#FFFFFF",
+ "text": "投稿视频"
+ },
+ "bvid": "BV1xx411c7Ug",
+ "cover": "http://i0.hdslb.com/bfs/archive/c392288c19bbdf3762919774bce01c76dc346344.jpg",
+ "desc": "没有听过这首歌的话会是人参的一大遗憾呢..(望天",
+ "disable_preview": 0,
+ "duration_text": "01:38",
+ "jump_url": "//www.bilibili.com/video/BV1xx411c7Ug",
+ "stat": {
+ "danmaku": "2965",
+ "play": "116.6万"
+ },
+ "title": "【天哥版】最春哥",
+ "type": 1
+ },
+ "type": "MAJOR_TYPE_ARCHIVE"
+ },
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 20434,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 585,
+ "forbidden": false
+ },
+ "like": {
+ "count": 27958,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_AV",
+ "visible": true
+ },
+ {
+ "basic": {
+ "comment_id_str": "16",
+ "comment_type": 1,
+ "like_icon": {
+ "action_url": "",
+ "end_url": "",
+ "id": 0,
+ "start_url": ""
+ },
+ "rid_str": "16"
+ },
+ "id_str": 55783037337604,
+ "modules": {
+ "module_author": {
+ "face": "http://i0.hdslb.com/bfs/face/34c5b30a990c7ce4a809626d8153fa7895ec7b63.gif",
+ "face_nft": false,
+ "following": null,
+ "jump_url": "//space.bilibili.com/1/dynamic",
+ "label": "",
+ "mid": 1,
+ "name": "bishi",
+ "official_verify": {
+ "desc": "",
+ "type": -1
+ },
+ "pendant": {
+ "expire": 0,
+ "image": "",
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "name": "",
+ "pid": 0
+ },
+ "pub_action": "投稿了视频",
+ "pub_location_text": "",
+ "pub_time": "2009-07-09",
+ "pub_ts": 1247073333,
+ "type": "AUTHOR_TYPE_NORMAL",
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": 1816099200000,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png",
+ "label_theme": "annual_vip",
+ "path": "",
+ "text": "年度大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ },
+ "nickname_color": "#FB7299",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2
+ }
+ },
+ "module_dynamic": {
+ "additional": null,
+ "desc": null,
+ "major": {
+ "archive": {
+ "aid": "16",
+ "badge": {
+ "bg_color": "#FB7299",
+ "color": "#FFFFFF",
+ "text": "投稿视频"
+ },
+ "bvid": "BV1xx411c7mi",
+ "cover": "http://i1.hdslb.com/bfs/archive/ef521697c031bd2b0aab5c8aab3abe1ea0ca63b9.jpg",
+ "desc": "CRUCIS FATAL FAKE : Fate Stay Night的同人格斗游戏. MV制作 : yaomenghua 天下格斗之同人堂",
+ "disable_preview": 0,
+ "duration_text": "09:43",
+ "jump_url": "//www.bilibili.com/video/BV1xx411c7mi",
+ "stat": {
+ "danmaku": "6205",
+ "play": "141.8万"
+ },
+ "title": "【FATE相关】CRUCIS FATAL FAKE MV 《Faker》",
+ "type": 1
+ },
+ "type": "MAJOR_TYPE_ARCHIVE"
+ },
+ "topic": null
+ },
+ "module_more": {
+ "three_point_items": [
+ {
+ "label": "举报",
+ "type": "THREE_POINT_REPORT"
+ }
+ ]
+ },
+ "module_stat": {
+ "comment": {
+ "count": 13354,
+ "forbidden": false
+ },
+ "forward": {
+ "count": 473,
+ "forbidden": false
+ },
+ "like": {
+ "count": 39657,
+ "forbidden": false,
+ "status": false
+ }
+ }
+ },
+ "type": "DYNAMIC_TYPE_AV",
+ "visible": true
+ }
+ ],
+ "offset": "",
+ "update_baseline": "",
+ "update_num": 0
+ }
+}
+```
+
+
diff --git a/dynamic/tag_dynamics.md b/docs/dynamic/tag_dynamics.md
similarity index 99%
rename from dynamic/tag_dynamics.md
rename to docs/dynamic/tag_dynamics.md
index d6c9697..e4d8dcc 100644
--- a/dynamic/tag_dynamics.md
+++ b/docs/dynamic/tag_dynamics.md
@@ -1,11 +1,8 @@
# 话题下特定动态信息
-- [获取包含置顶及热门的动态列表](#获取包含置顶及热门的动态列表)
-- [获取历史动态列表](#获取历史动态列表)
----
## 获取包含置顶及热门的动态列表
-> http://api.vc.bilibili.com/topic_svr/v1/topic_svr/fetch_dynamics
+> https://api.vc.bilibili.com/topic_svr/v1/topic_svr/fetch_dynamics
*请求方式:GET*
@@ -59,12 +56,12 @@
topic_name方式:
```shell
-curl -G 'http://api.vc.bilibili.com/topic_svr/v1/topic_svr/fetch_dynamics' \
+curl -G 'https://api.vc.bilibili.com/topic_svr/v1/topic_svr/fetch_dynamics' \
--data-urlencode 'topic_name=哔哩哔哩漫画&sortby=2'
```
topic_id方式:
```shell
-curl -G 'http://api.vc.bilibili.com/topic_svr/v1/topic_svr/fetch_dynamics' \
+curl -G 'https://api.vc.bilibili.com/topic_svr/v1/topic_svr/fetch_dynamics' \
--data-urlencode 'topic_id=7539944&sortby=2'
```
@@ -3344,7 +3341,7 @@ curl -G 'http://api.vc.bilibili.com/topic_svr/v1/topic_svr/fetch_dynamics' \
## 获取历史动态列表
-> http://api.vc.bilibili.com/topic_svr/v1/topic_svr/topic_history
+> https://api.vc.bilibili.com/topic_svr/v1/topic_svr/topic_history
*请求方式:GET*
@@ -3396,12 +3393,12 @@ curl -G 'http://api.vc.bilibili.com/topic_svr/v1/topic_svr/fetch_dynamics' \
topic_name方式:
```shell
-curl -G 'http://api.vc.bilibili.com/topic_svr/v1/topic_svr/topic_history' \
+curl -G 'https://api.vc.bilibili.com/topic_svr/v1/topic_svr/topic_history' \
--data-urlencode 'topic_name=哔哩哔哩漫画&offset_dynamic_id=0'
```
topic_id方式:
```shell
-curl -G 'http://api.vc.bilibili.com/topic_svr/v1/topic_svr/topic_history' \
+curl -G 'https://api.vc.bilibili.com/topic_svr/v1/topic_svr/topic_history' \
--data-urlencode 'topic_id=7539944&offset_dynamic_id=0'
```
diff --git a/docs/dynamic/topic.md b/docs/dynamic/topic.md
new file mode 100644
index 0000000..570367d
--- /dev/null
+++ b/docs/dynamic/topic.md
@@ -0,0 +1,202 @@
+# 话题搜索
+
+## 搜索发布话题
+
+> https://app.bilibili.com/x/topic/pub/search
+> https://api.bilibili.com/x/topic/pub/search
+
+*请求方法: GET*
+
+注: 该接口可能存在传入页面大小与返回数量不匹配的问题, 可能与访问权限有关
+
+
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --- | --- | --- | --- | --- |
+| keywords | str | 关键词 | 不必要 | |
+| content | str | 空 | 不必要 | |
+| upload_id | str | 上传 id? | 不必要 | 页面刷新第一次请求时为空, 后均非空 似乎为固定值, 格式: `${your_mid}_${login_or_last_refresh_or_cookie_ts}_${dig4}`, 如 `616368979_1722652786_2534` |
+| page_size | int | 页大小 | 不必要 | 默认为 20 |
+| page_num | int | 1 | 不必要 | 不用于翻页 |
+| offset | int | 偏移 | 不必要 | 可从响应 `data.page_info.offset` 中获取 |
+| web_location | str | 333.1365 | 不必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0: 成功 -400: 请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| new_topic | obj | 新建话题? | |
+| has_create_jurisdiction | bool | false | 是否有创建权限? |
+| topic_items | array | 话题列表 | |
+| request_id | str | 请求 id | |
+| page_info | obj | 页信息 | |
+
+`data` 中的 `new_topic` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| name | str | 请求参数中的 `keywords` | |
+
+`data` 中的 `topic_items` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| id | num | 话题 id | |
+| name | str | 话题名 | |
+| view | num | 观看数 | |
+| discuss | num | 讨论数 | |
+| stat_desc | str | 状态描述 | |
+| description | str | 话题描述 | |
+| show_interact_data | bool | false | 是否显示互动数据? |
+
+`data` 中的 `page_info` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| offset | num | 下次请求可用的偏移 | 请求参数中的 `offset` + `page_size` |
+| has_more | bool | 是否有更多数据 | 当没有更多时可能不存在该字段 |
+
+**示例:**
+
+注: 该示例就是解释开头所注的问题的一个示例
+
+```shell
+curl -G 'https://app.bilibili.com/x/topic/pub/search' \
+--url-query 'keywords=2233'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "new_topic": {
+ "name": "2233"
+ },
+ "has_create_jurisdiction": false,
+ "topic_items": [
+ {
+ "id": 1101122,
+ "name": "2233异世集",
+ "view": 2502,
+ "discuss": 11,
+ "stat_desc": "2502浏览·11讨论",
+ "description": "分享数字周边",
+ "show_interact_data": false
+ },
+ {
+ "id": 1050671,
+ "name": "2233生日倒计时",
+ "view": 21149,
+ "discuss": 130,
+ "stat_desc": "2.1万浏览·130讨论",
+ "description": "2233生日倒计时",
+ "show_interact_data": false
+ },
+ {
+ "id": 1057129,
+ "name": "2233手办可可爱爱",
+ "view": 836,
+ "discuss": 14,
+ "stat_desc": "836浏览·14讨论",
+ "description": "喜欢2233,",
+ "show_interact_data": false
+ }
+ ],
+ "request_id": "1$0$1723796266$7f515d4e26b7bd5007fb8ca4b066bf0b",
+ "page_info": {
+ "offset": 4,
+ "has_more": true
+ }
+ }
+}
+```
+
+
+
+## 推荐搜索话题?
+
+> https://app.bilibili.com/x/topic/pub/rcmd/search
+> https://api.bilibili.com/x/topic/pub/rcmd/search
+
+*请求方法: GET*
+
+注: 该接口啥也不返回, 但是网页端会请求该接口
+
+
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --- | --- | --- | --- | --- |
+| keywords | str | 空 | 不必要 | |
+| upload_id | str | 上传 id? | 不必要 | 同上 |
+| web_location | str | 333.1365 | 不必要 | 有时请求不带该参数 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0: 成功 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | str | 数据本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | -- | --- |
+| topic_items | array | 空 | |
+| request_id | str | 请求 id | 当传入 `keywords` 时不为空|
+
+**示例:**
+
+```shell
+curl -G 'https://app.bilibili.com/x/topic/pub/rcmd/search'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "topic_items": [],
+ "request_id": ""
+ }
+}
+```
+
+
diff --git a/electric/Bcoin.md b/docs/electric/Bcoin.md
similarity index 78%
rename from electric/Bcoin.md
rename to docs/electric/Bcoin.md
index 887d0f3..970d1bc 100644
--- a/electric/Bcoin.md
+++ b/docs/electric/Bcoin.md
@@ -1,22 +1,14 @@
# B币方式充电
-
+
-**注:以前充电是电池的概念,1B币折合10电池,一般地充电10电池可获得1经验**
+**注**:以前充电是电池的概念,1B币折合10电池,一般地充电10电池可获得1经验
**目前(2020/12/02后)则是贝壳的概念,1B币折合1贝壳、1经验(如果存在小数点,则经验值向下取整,即2.5B币获得2经验)**
----
-
-- [B币方式充电](#b币方式充电)
- - [新版本B币充电](#新版本b币充电)
- - [老版本B币充电](#老版本b币充电)
-
----
-
## 新版本B币充电
-> http://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick
+> https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick
*请求方式:POST*
@@ -26,7 +18,7 @@
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| -------- | ---- | ------------------------ | ------ | ------------------------------------------------- |
-| bp_num | num | 贝壳数量 | 必要 | 必须在20-99990之间 |
+| bp_num | num | 贝壳数量 | 必要 | 必须在2-9999之间 |
| is_bp_remains_prior | bool | 是否优先扣除B币余额 | 必要 | [true,false],B币充电请选择true |
| up_mid | num | 充电对象用户mid | 必要 | |
| otype | str | 充电来源 | 必要 | up:空间充电 archive:视频充电 |
@@ -39,7 +31,7 @@
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功(并不代表充电成功) -101:账号未登录 -111:csrf校验失败 -400:请求错误 |
+| code | num | 返回值 | 0:成功(并不代表充电成功) -101:账号未登录 -111:csrf校验失败 -400:请求错误 -500:服务器错误 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
@@ -51,7 +43,7 @@
| mid | num | 本用户mid | |
| up_mid | num | 目标用户mid | |
| order_no | str | 留言token | 用于添加充电留言 |
-| bp_num | num | 充电贝壳数 | |
+| bp_num | str | 充电贝壳数 | |
| exp | num | 获得经验数 | |
| status | num | 返回结果 | 4:成功 -2:低于20电池下限 -4:B币不足 |
| msg | str | 错误信息 | 默认为空 |
@@ -80,17 +72,17 @@ curl 'https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick' \
```json
{
- "code":0,
- "message":"0",
- "ttl":1,
- "data":{
- "mid":293793435,
- "up_mid":293793435,
- "order_no":"BPRG5CEC3VUPOOANA540",
- "bp_num":2,
- "exp":2,
- "status":4,
- "msg":""
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "mid": 293793435,
+ "up_mid": 293793435,
+ "order_no": "BPRG5CEC3VUPOOANA540",
+ "bp_num": 2,
+ "exp": "2",
+ "status": 4,
+ "msg": ""
}
}
```
@@ -116,17 +108,17 @@ curl 'https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick' \
```json
{
- "code":0,
- "message":"0",
- "ttl":1,
- "data":{
- "mid":0,
- "up_mid":0,
- "order_no":"",
- "bp_num":0,
- "exp":0,
- "status":-2,
- "msg":"elec raw order create failed: 88201"
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "mid": 0,
+ "up_mid": 0,
+ "order_no": "",
+ "bp_num": "0",
+ "exp": 0,
+ "status": -2,
+ "msg": "elec raw order create failed: 88201"
}
}
```
@@ -153,17 +145,17 @@ curl 'https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick' \
```json
{
- "code":0,
- "message":"0",
- "ttl":1,
- "data":{
- "mid":0,
- "up_mid":0,
- "order_no":"",
- "bp_num":0,
- "exp":0,
- "status":-4,
- "msg":"bp.to.battery http failed, invalid args, errNo=800409904: B 币余额不足"
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "mid": 0,
+ "up_mid": 0,
+ "order_no": "",
+ "bp_num": "0",
+ "exp": 0,
+ "status": -4,
+ "msg": "bp.to.battery http failed, invalid args, errNo=800409904: B 币余额不足"
}
}
```
@@ -178,7 +170,7 @@ curl 'https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick' \
查看折叠内容
-> http://api.bilibili.com/x/ugcpay/trade/elec/pay/quick
+> https://api.bilibili.com/x/ugcpay/trade/elec/pay/quick
*请求方式:POST*
@@ -226,7 +218,7 @@ curl 'https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick' \
~~再次自己冲自己QAQ~~
```shell
-curl 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \
+curl 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \
--data-urlencode 'elec_num=20' \
--data-urlencode 'up_mid=293793435' \
--data-urlencode 'otype=up' \
@@ -240,17 +232,17 @@ curl 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \
```json
{
- "code":0,
- "message":"0",
- "ttl":1,
- "data":{
- "mid":293793435,
- "up_mid":293793435,
- "order_no":"BPRG5CEC3VUPOOANA540",
- "elec_num":20,
- "exp":2,
- "status":4,
- "msg":""
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "mid": 293793435,
+ "up_mid": 293793435,
+ "order_no": "BPRG5CEC3VUPOOANA540",
+ "elec_num": 20,
+ "exp": 2,
+ "status": 4,
+ "msg": ""
}
}
```
@@ -262,7 +254,7 @@ curl 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \
此时`data`.`status`=`-2`
```shell
-curl 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \
+curl 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \
--data-urlencode 'elec_num=1' \
--data-urlencode 'up_mid=293793435' \
--data-urlencode 'otype=up' \
@@ -276,17 +268,17 @@ curl 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \
```json
{
- "code":0,
- "message":"0",
- "ttl":1,
- "data":{
- "mid":0,
- "up_mid":0,
- "order_no":"",
- "elec_num":0,
- "exp":0,
- "status":-2,
- "msg":"elec raw order create failed: 88201"
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "mid": 0,
+ "up_mid": 0,
+ "order_no": "",
+ "elec_num": 0,
+ "exp": 0,
+ "status": -2,
+ "msg": "elec raw order create failed: 88201"
}
}
```
@@ -298,7 +290,7 @@ curl 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \
此时`data`.`status`=`-4`
```shell
-curl 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \
+curl 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \
--data-urlencode 'elec_num=999' \
--data-urlencode 'up_mid=293793435' \
--data-urlencode 'otype=up' \
@@ -312,17 +304,17 @@ curl 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \
```json
{
- "code":0,
- "message":"0",
- "ttl":1,
- "data":{
- "mid":0,
- "up_mid":0,
- "order_no":"",
- "elec_num":0,
- "exp":0,
- "status":-4,
- "msg":"bp.to.battery http failed, invalid args, errNo=800409904: B 币余额不足"
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "mid": 0,
+ "up_mid": 0,
+ "order_no": "",
+ "elec_num": 0,
+ "exp": 0,
+ "status": -4,
+ "msg": "bp.to.battery http failed, invalid args, errNo=800409904: B 币余额不足"
}
}
```
diff --git a/electric/WeChat&Alipay.md b/docs/electric/WeChat&Alipay.md
similarity index 73%
rename from electric/WeChat&Alipay.md
rename to docs/electric/WeChat&Alipay.md
index 3ecb018..2d2e193 100644
--- a/electric/WeChat&Alipay.md
+++ b/docs/electric/WeChat&Alipay.md
@@ -1,26 +1,17 @@
# 微信&支付宝方式充电
-
-
-- [申请充电二维码及扫码秘钥](#申请充电二维码及扫码秘钥)
-
-- [检查扫码支付结果](#检查扫码支付结果)
-
----
+
操作流程:
-1.申请充电二维码及扫码秘钥,秘钥临时保存备用
-
-2.使用`qr_code_url`中的值生成二维码
-
-3.用支付宝或微信扫描
-
-4.以扫码秘钥作为参数轮询检查扫码支付结果
+1. 申请充电二维码及扫码秘钥,秘钥临时保存备用
+2. 使用`qr_code_url`中的值生成二维码
+3. 用支付宝或微信扫描
+4. 以扫码秘钥作为参数轮询检查扫码支付结果
## 申请充电二维码及扫码秘钥
-> http://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/qr_code/create
+> https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/qr_code/create
*请求方式:POST*
@@ -32,9 +23,9 @@
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------------------- | ---- | ------------------------ | ------ | ------------------------------------------------------------ |
-| bp_num | num | 充电B币数量 | 必要 | 必须在2-9999之间 |
-| up_mid | num | 充电对象用户mid | 必要 | |
+| bp_num | num | 充电B币数量 | 必要 | 必须在2-9999之间 |
| is_bp_remains_prior | bool | 是否优先扣除B币 | 必要 | true:是 false:否 在B币不足时剩余的部分利用支付平台支付 |
+| up_mid | num | 充电对象用户mid | 必要 | |
| otype | str | 充电来源 | 必要 | up:空间充电 archive:视频充电 |
| oid | num | 充电来源代码 | 必要 | 空间充电:充电对象用户mid 视频充电:稿件avid |
| csrf | str | CSRF Token(位于cookie) | 必要 | |
@@ -63,7 +54,7 @@
申请空间的方式向用户23215368充电10电池且不使用B币的支付二维码
```shell
-curl 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/qr_code/create' \
+curl 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/qr_code/create' \
--data-urlencode 'elec_num=10' \
--data-urlencode 'up_mid=23215368' \
--data-urlencode 'is_bp_remains_prior=false' \
@@ -82,7 +73,7 @@ curl 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/qr_code/create' \
"message": "0",
"ttl": 1,
"data": {
- "qr_code_url": "http://api.bilibili.com/x/ugcpay/trade/elec/pay/qr_code/gateway?mid=293793435&token=c1cb1d95d2194ba58df6bb0f24ae1aaa",
+ "qr_code_url": "https://api.bilibili.com/x/ugcpay/trade/elec/pay/qr_code/gateway?mid=293793435&token=c1cb1d95d2194ba58df6bb0f24ae1aaa",
"qr_token": "c1cb1d95d2194ba58df6bb0f24ae1aaa",
"exp": 1
}
@@ -93,7 +84,7 @@ curl 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/qr_code/create' \
## 检查扫码支付结果
-> http://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status
+> https://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status
*请求方式:GET*
@@ -127,10 +118,10 @@ curl 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/qr_code/create' \
**示例:**
-当申请到的支付二维码未被扫描时,`data`.`ststus`的值为`2`
+当申请到的支付二维码未被扫描时,`data`.`status`的值为`2`
```shell
-curl -G 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \
+curl -G 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \
--data-urlencode 'qr_token=c7cbdc47fc424cd18f2146db653597b8' \
-b 'SESSDATA=xxx'
```
@@ -140,23 +131,23 @@ curl -G 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \
```json
{
- "code":0,
- "message":"0",
- "ttl":1,
- "data":{
- "qr_token":"c7cbdc47fc424cd18f2146db653597b8",
- "mid":293793435,
- "status":2
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "qr_token": "c7cbdc47fc424cd18f2146db653597b8",
+ "mid": 293793435,
+ "status": 2
}
}
```
-当申请到的支付二维码已扫描但未确认时,`data`.`ststus`的值为`3`
+当申请到的支付二维码已扫描但未确认时,`data`.`status`的值为`3`
```shell
-curl -G 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \
+curl -G 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \
--data-urlencode 'qr_token=c7cbdc47fc424cd18f2146db653597b8' \
-b 'SESSDATA=xxx'
```
@@ -166,23 +157,23 @@ curl -G 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \
```json
{
- "code":0,
- "message":"0",
- "ttl":1,
- "data":{
- "qr_token":"c7cbdc47fc424cd18f2146db653597b8",
- "mid":293793435,
- "status":3
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "qr_token": "c7cbdc47fc424cd18f2146db653597b8",
+ "mid": 293793435,
+ "status": 3
}
}
```
-成功支付后,`data`.`ststus`的值为`1`,且`data`.`order_no`存在留言token
+成功支付后,`data`.`status`的值为`1`,且`data`.`order_no`存在留言token
```shell
-curl -G 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \
+curl -G 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \
--data-urlencode 'qr_token=c7cbdc47fc424cd18f2146db653597b8' \
-b 'SESSDATA=xxx'
```
@@ -192,14 +183,14 @@ curl -G 'http://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \
```json
{
- "code":0,
- "message":"0",
- "ttl":1,
- "data":{
- "qr_token":"bd649c836c524550bfe22a369334fc05",
- "order_no":"BPTD36U3KP82I31RSSLG",
- "mid":293793435,
- "status":1
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "qr_token": "bd649c836c524550bfe22a369334fc05",
+ "order_no": "BPTD36U3KP82I31RSSLG",
+ "mid": 293793435,
+ "status": 1
}
}
```
diff --git a/docs/electric/charge_list.md b/docs/electric/charge_list.md
new file mode 100644
index 0000000..6bd2cdd
--- /dev/null
+++ b/docs/electric/charge_list.md
@@ -0,0 +1,542 @@
+# 充电列表
+
+## 获取空间充电公示列表
+
+>
+
+*请求方式:GET*
+
+本接口需要在请求标头中提供有效的浏览器 UA,如 `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36`
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ---- |
+| up_mid | num | 目标用户mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 88214:up主未开通充电 |
+| message | str | 错误信息 | |
+| ttl | num | 0 | |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ----- | ---------------- | --------------- |
+| count | num | 本月充电人数 | |
+| list | array | 本月充电用户列表 | |
+| total_count | num | 总计充电次数 | |
+| total | num | 总计充电次数 | 同`total_count` |
+| special_day | num | 0 | 作用尚不明确 |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------- | ---------------- |
+| 0 | obj | 充电用户1 | |
+| n | obj | 充电用户(n+1) | 按照充电排名排列 |
+| …… | obj | …… | …… |
+
+`data`中的`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ---------------- | ---------------- |
+| uname | str | 充电用户昵称 | |
+| avatar | str | 充电用户头像url | |
+| mid | num | 充电对象mid | |
+| pay_mid | num | 充电用户mid | |
+| rank | num | 充电用户排名 | 取决于充电的多少 |
+| trend_type | num | 0 | 作用尚不明确 |
+| vip_info | obj | 充电用户会员信息 | |
+| message | str | 充电留言 | 无为空 |
+| msg_hidden | num | 0 | 作用尚不明确 |
+
+`list`数组中的对象中的`vip_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | -------------- | ----- |
+| vipDueMsec | num | 大会员过期时间 | 恒为0 |
+| vipStatus | num | 大会员状态 | 包月充电时恒为0 自定义充电: 0:无 1:有 |
+| vipType | num | 大会员类型 | 包月充电时恒为0 自定义充电: 0:无 1:月大会员 2:年度及以上大会员 |
+
+**示例:**
+
+查询用户`mid=53456`的充电公示列表
+
+```shell
+curl -G 'https://api.bilibili.com/x/ugcpay-rank/elec/month/up' \
+ -A 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36' \
+ --data-urlencode 'up_mid=53456'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "",
+ "ttl": 0,
+ "data": {
+ "count": 8521,
+ "list": [
+ {
+ "uname": "云梦澡堂",
+ "avatar": "https://i1.hdslb.com/bfs/face/6589df5fdac0f80593f6a86e4d88dc08e25df3d2.jpg",
+ "mid": 53456,
+ "pay_mid": 1555775947,
+ "rank": 1,
+ "trend_type": 0,
+ "vip_info": { "vipDueMsec": 0, "vipStatus": 0, "vipType": 0 },
+ "message": "",
+ "message_hidden": 0
+ },
+ {
+ "uname": "在下小天子",
+ "avatar": "https://i1.hdslb.com/bfs/face/a3bfbe6186889bb50dcd87c1156d07a70227a25b.jpg",
+ "mid": 53456,
+ "pay_mid": 508630801,
+ "rank": 2,
+ "trend_type": 0,
+ "vip_info": { "vipDueMsec": 0, "vipStatus": 0, "vipType": 0 },
+ "message": "",
+ "message_hidden": 0
+ }
+ ],
+ "total_count": 41919,
+ "total": 41919,
+ "special_day": 0
+ }
+}
+```
+
+
+
+## 获取视频充电鸣谢名单
+
+>
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------ | ------------ | ------------------ |
+| mid | num | 目标用户mid | 必要 | |
+| aid | num | 目标稿件avid | 必要(可选) | avid与bvid任选一个 |
+| bvid | str | 目标稿件bvid | 必要(可选) | avid与bvid任选一个 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -400:请求错误 -404:无视频 62001:不需要展示充电信息 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ----- | ---------------- | ------------ |
+| show_info | obj | 展示选项 | |
+| av_count | num | 目标视频充电人数 | |
+| count | num | 本月充电人数 | |
+| total_count | num | 总计充电人数 | |
+| special_day | num | 0 | 作用尚不明确 |
+| display_num | num | 0 | 作用尚不明确 |
+| cnt_priv_type | num | 0 | 作用尚不明确 |
+| list | array | 本月充电用户列表 | |
+
+`data`中的`show_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ------------------------ | ---------------- |
+| show | bool | 是否展示视频充电鸣谢名单 | |
+| state | num | 充电功能开启状态 | -1:未开通充电功能 1:已开通自定义充电 2:已开通包月、自定义充电 3:已开通包月高档、自定义充电 |
+| title | str | 充电按钮显示文字 | 空字符串或 `充电` 或 `充电中` |
+| jump_url | str | 跳转url | |
+| icon | str | 充电图标 | |
+| high_level | obj | 充电专属视频信息 | |
+| with_qa_id | num | 充电问答id | |
+
+`show_info`中的`high_level`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | ---- | ------------------------------ | ---------------- |
+| privilege_type | num | 解锁视频所需最低定价档位的代码 | 见[充电档位代码与定价](../electric/monthly.md#充电档位代码privilege_type与定价) |
+| title | str | 提示标题 | `该视频为「{充电档位名称}」专属视频` |
+| sub_title | str | 提示子标题 | `开通「{充电档位定价}元档包月充电」即可观看` |
+| show_button | bool | 是否显示按钮 | |
+| button_text | str | 按钮文本 | `去开通` |
+| jump_url | obj | 跳转url信息 | 详细信息有待补充 |
+| intro | str | 充电介绍语 | |
+| open | bool | (?) | |
+| new | bool | (?) | |
+| question_text | str | (?) | |
+| qa_detail_link | str | (?) | |
+
+`high_level`中的`jump_url`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ---- | ----------------------- | ---- |
+| up_link | str | UP主包月充电购买页面url | |
+| paywall_link | str | 视频试看后的提示页面url | |
+| previewbar_link | str | 视频预览页面url | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------- | ---------------- |
+| 0 | obj | 充电用户1 | |
+| n | obj | 充电用户(n+1) | 按照充电排名排列 |
+| …… | obj | …… | …… |
+
+`data`中的`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ---------------- | ---------------- |
+| mid | num | 充电对象mid | |
+| pay_mid | num | 充电用户mid | |
+| rank | num | 充电用户排名 | 取决于充电的多少 |
+| uname | str | 充电用户昵称 | |
+| avatar | str | 充电用户头像url | |
+| message | str | 充电留言 | 无为空 |
+| msg_deleted | num | 0 | 作用尚不明确 |
+| vip_info | obj | 充电用户会员信息 | |
+| trend_type | num | 0 | 作用尚不明确 |
+
+`data`中的`list`数组中的`vip_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | -------------- | ----- |
+| vipType | num | 大会员类型 | 包月充电时恒为0 自定义充电: 0:无 1:月大会员 2:年度及以上大会员 |
+| vipDueMsec | num | 大会员过期时间 | 恒为0 |
+| vipStatus | num | 大会员状态 | 包月充电时恒为0 自定义充电: 0:无 1:有 |
+
+**示例:**
+
+获取视频`av967773538`/` BV1up4y1y77i `,用户`mid=53456`的视频充电鸣谢名单
+
+avid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/elec/show' \
+ --data-urlencode 'mid=53456' \
+ --data-urlencode 'aid=967773538'
+```
+
+bvid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/elec/show' \
+ --data-urlencode 'mid=53456' \
+ --data-urlencode 'bvid=BV1up4y1y77i'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "show_info": {
+ "show": true,
+ "state": 2,
+ "title": "充电",
+ "jump_url": "https://www.bilibili.com/h5/upower/index?mid=53456&navhide=1&prePage=video&oid=967773538",
+ "icon": "https://i0.hdslb.com/bfs/garb/item/33e2e72d9a0c855f036b4cb55448f44af67a0635.png",
+ "high_level": {
+ "privilege_type": 0,
+ "title": "",
+ "sub_title": "",
+ "show_button": false,
+ "button_text": "",
+ "jump_url": { "up_link": "", "paywall_link": "", "previewbar_link": "" },
+ "intro": "",
+ "open": false,
+ "new": false
+ }
+ },
+ "av_count": 0,
+ "count": 0,
+ "total_count": 41919,
+ "special_day": 0,
+ "display_num": 0,
+ "cnt_priv_type": 0,
+ "list": [
+ {
+ "mid": 53456,
+ "pay_mid": 1555775947,
+ "rank": 1,
+ "uname": "云梦澡堂",
+ "avatar": "https://i1.hdslb.com/bfs/face/6589df5fdac0f80593f6a86e4d88dc08e25df3d2.jpg",
+ "message": "",
+ "msg_deleted": 0,
+ "vip_info": { "vipType": 0, "vipDueMsec": 0, "vipStatus": 0 },
+ "trend_type": 0
+ },
+ {
+ "mid": 53456,
+ "pay_mid": 508630801,
+ "rank": 2,
+ "uname": "在下小天子",
+ "avatar": "https://i1.hdslb.com/bfs/face/a3bfbe6186889bb50dcd87c1156d07a70227a25b.jpg",
+ "message": "",
+ "msg_deleted": 0,
+ "vip_info": { "vipType": 0, "vipDueMsec": 0, "vipStatus": 0 },
+ "trend_type": 0
+ }
+ ]
+ }
+}
+```
+
+
+
+## 查询我收到的充电列表
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----------- | ---- | -------- | ------ | ------------------- |
+| currentPage | num | 页数 | 必要 | |
+| pageSize | num | 分页大小 | 必要 | 取值范围\[1,50\] |
+| customerId | num | (?) | 必要 | 目前为固定值:10026 |
+| beginTime | str | 开始日期 | 非必要 | yyyy-MM-dd |
+| endTime | str | 结束日期 | 非必要 | yyyy-MM-dd |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 800501007:user not login 800501008:内部错误 800501011:请求参数有误 |
+| errno | num | | |
+| msg | str | | |
+| showMsg | str | | |
+| data | obj | 信息本体 | |
+| success | bool | | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ----- | ------------ | ---- |
+| page | obj | 分页信息 | |
+| result | array | 充电信息本体 | |
+| config | array | (?) | |
+
+`page`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ------------ | ---- |
+| currentPage | num | 当前页数 | |
+| pageSize | num | 当前分页大小 | |
+| totalCount | num | 记录总数 | |
+| totalPage | num | 总页数 | |
+
+`result`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ---- | ---------------- | ------------------- |
+| mid | num | 充电人mid | |
+| name | str | 充电人昵称 | |
+| avatar | str | 充电人头像 | |
+| originalThirdCoin | num | 原始B币数 | |
+| brokerage | num | 实际收到的贝壳数 | |
+| remark | str | 充电渠道 | Web/安卓/iOS |
+| ctime | str | 充电时间 | yyyy-MM-dd HH:mm:ss |
+
+`config`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ---- | ---- | ---------- |
+| mid | null | | 总是为null |
+| name | null | | 总是为null |
+| avatar | null | | 总是为null |
+| originalThirdCoin | null | | 总是为null |
+| brokerage | null | | 总是为null |
+| remark | null | | 总是为null |
+| ctime | null | | 总是为null |
+
+**示例:**
+
+```shell
+curl -G 'https://pay.bilibili.com/bk/brokerage/listForCustomerRechargeRecord' \
+ --data-urlencode 'currentPage=1' \
+ --data-urlencode 'pageSize=2' \
+ --data-urlencode 'customerId=10026' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "errno": 0,
+ "msg": "SUCCESS",
+ "showMsg": "交易成功",
+ "data": {
+ "page": {
+ "currentPage": 1,
+ "pageSize": 2,
+ "totalCount": 311,
+ "totalPage": 156
+ },
+ "result": [
+ {
+ "mid": 2233,
+ "name": "2233",
+ "avatar": "http://i2.hdslb.com/bfs/face/f42b7f47c80648d2ee1231f2435b527c60302289.jpg",
+ "originalThirdCoin": 2,
+ "brokerage": 1.34,
+ "remark": "Web",
+ "ctime": "2022-04-12 17:34:47"
+ },
+ {
+ "mid": 2233,
+ "name": "2233",
+ "avatar": "http://i0.hdslb.com/bfs/face/member/noface.jpg",
+ "originalThirdCoin": 2,
+ "brokerage": 0.68,
+ "remark": "iOS",
+ "ctime": "2022-04-10 03:41:10"
+ }
+ ],
+ "config": [
+ {
+ "mid": null,
+ "name": null,
+ "avatar": null,
+ "originalThirdCoin": null,
+ "brokerage": null,
+ "remark": null,
+ "ctime": null
+ }
+ ]
+ },
+ "success": true
+}
+```
+
+
+
+## 查询历史充电数据
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | -------- | ------ | ---------------- |
+| pn | num | 页数 | 非必要 | |
+| ps | num | 分页大小 | 非必要 | 取值范围\[1,20\] |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ----- | ------------ | ---- |
+| list | array | 充电信息本体 | |
+| pager | obj | 分页信息 | |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ---------- | ------------------- |
+| aid | num | 0 | |
+| bvid | str | 空 | |
+| elec_num | num | 充电电池数 | |
+| title | str | 空 | |
+| uname | str | 空 | |
+| avatar | str | 空 | |
+| ctime | str | 充电时间 | yyyy-MM-dd HH:mm:ss |
+
+`pager`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ------------ | ---- |
+| current | num | 当前页数 | |
+| size | num | 当前分页大小 | |
+| total | num | 记录总数 | |
+
+**示例:**
+
+```shell
+curl -G 'https://member.bilibili.com/x/h5/elec/rank/recent' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "aid": 0,
+ "bvid": "",
+ "elec_num": 50,
+ "title": "",
+ "uname": "",
+ "avatar": "",
+ "ctime": "2020-04-02 03:12:22"
+ },
+ {
+ "aid": 0,
+ "bvid": "",
+ "elec_num": 20,
+ "title": "",
+ "uname": "",
+ "avatar": "",
+ "ctime": "2020-04-02 03:12:00"
+ }
+ ],
+ "pager": {
+ "current": 1,
+ "size": 20,
+ "total": 38
+ }
+ }
+}
+```
+
+
diff --git a/docs/electric/charge_msg.md b/docs/electric/charge_msg.md
new file mode 100644
index 0000000..534fe9f
--- /dev/null
+++ b/docs/electric/charge_msg.md
@@ -0,0 +1,298 @@
+# 充电留言
+
+## 发送充电留言
+
+> https://api.bilibili.com/x/ugcpay/trade/elec/message
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ------------------------ | ------ | ---- |
+| order_id | str | 留言token | 必要 | |
+| message | str | 留言内容 | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 88203:不能重复留言 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+为留言token为`BPRG5CEC3VUPOOANA540`的充电操作,添加了内容为`支持一下大佬`的留言
+
+```shell
+curl 'https://api.bilibili.com/x/ugcpay/trade/elec/message' \
+ --data-urlencode 'order_id=BPRG5CEC3VUPOOANA540' \
+ --data-urlencode 'message=支持一下大佬' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+## 查询我收到的充电留言
+
+> https://member.bilibili.com/x/web/elec/remark/list
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | --------- | ------ | ---------------- |
+| begin | str | 起始日期 | 非必要 | 默认2016-01-01 |
+| end | str | 结束日期 | 非必要 | 默认2050-01-01 |
+| pn | str | 页数 | 非必要 | |
+| ps | str | 分页大小 | 非必要 | 取值范围\[1,12\] |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| msg | str | 错误信息 | 成功时为`0` |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ----- | -------- | ---- |
+| list | array | 信息本体 | |
+| pager | obj | 分页信息 | |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ---------------------- | ---- |
+| aid | num | | |
+| bvid | str | | |
+| id | num | 留言记录id | |
+| mid | num | 0 | |
+| reply_mid | num | 0 | |
+| elec_num | num | 0 | |
+| state | num | UP是否已经回复这条留言 | 0:未回复 1:已回复 |
+| msg | str | 留言信息 | |
+| aname | str | 空 | |
+| uname | str | 空 | |
+| avator | str | 空 | |
+| reply_name | str | 空 | |
+| reply_avator | str | 空 | |
+| reply_msg | str | 空 | |
+| ctime | num | 留言时间 | 毫秒级时间戳 |
+| reply_time | num | 0 | |
+
+`pager`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ------------ | ---- |
+| current | num | 当前页数 | |
+| size | num | 当前分页大小 | |
+| total | num | 记录总数 | |
+
+**示例:**
+
+```shell
+curl 'https://member.bilibili.com/x/web/elec/remark/list?begin=2016-01-01&end=2050-01-01&pn=1&ps=10' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "aid": 0,
+ "bvid": "",
+ "id": 6715018,
+ "mid": 0,
+ "reply_mid": 0,
+ "elec_num": 0,
+ "state": 0,
+ "msg": "加油",
+ "aname": "",
+ "uname": "",
+ "avator": "",
+ "reply_name": "",
+ "reply_avator": "",
+ "reply_msg": "",
+ "ctime": 1650665119000,
+ "reply_time": 0
+ }
+ ],
+ "pager": {
+ "current": 1,
+ "size": 10,
+ "total": 448
+ }
+ }
+}
+```
+
+
+
+## 查询充电留言详情
+
+> https://member.bilibili.com/x/web/elec/remark/detail
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| id | num | 留言id | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| message | str | 错误信息 | 成功时为 `0` |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ---------------------- | ---- |
+| aid | num | | |
+| bvid | str | | |
+| id | num | 留言id | |
+| mid | num | 留言者mid(充电用户) | |
+| reply_mid | num | UP主mid | |
+| elec_num | num | 0 | |
+| state | num | UP是否已经回复这条留言 | 0:未回复 1:已回复 |
+| msg | str | 留言内容 | |
+| aname | str | 空 | |
+| uname | str | 留言者用户名 | |
+| avator | str | 留言者头像 | |
+| reply_name | str | UP主用户名 | |
+| reply_avator | str | UP主头像 | |
+| reply_msg | str | 回复内容 | |
+| ctime | num | 留言时间 | 毫秒级时间戳 |
+| reply_time | num | 回复时间 | 毫秒级时间戳 |
+
+**示例:**
+
+```shell
+curl 'https://member.bilibili.com/x/web/elec/remark/detail?id=6507563' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "aid": 0,
+ "bvid": "",
+ "id": 6507563,
+ "mid": 19978396,
+ "reply_mid": 2062760,
+ "elec_num": 0,
+ "state": 1,
+ "msg": "感谢搬运",
+ "aname": "",
+ "uname": "HANSOOOOOL",
+ "avator": "http://i1.hdslb.com/bfs/face/5c22af0261b8b3f9a54b6e0038e35430e9ed9cfd.jpg",
+ "reply_name": "一把近战都不给六花",
+ "reply_avator": "http://i2.hdslb.com/bfs/face/1804b716084908d4992bdd35827d0c2d7222fe97.jpg",
+ "reply_msg": "( ̄3 ̄)",
+ "ctime": 1646726966000,
+ "reply_time": 1646811946000
+ }
+}
+```
+
+
+
+## 回复充电留言
+
+> https://member.bilibili.com/x/web/elec/remark/reply
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| csrf | str | csrf | 必要 | |
+| id | num | 留言id | 必要 | |
+| msg | str | 回复信息 | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf 校验失败 -400:请求错误 20004:充电服务异常 |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+| data | num | 数据本体 | 1:成功 2:失败 |
+
+**示例:**
+
+```shell
+curl 'https://member.bilibili.com/x/web/elec/remark/reply' \
+ -b 'SESSDATA=xxx' \
+ --data-urlencode 'csrf=xxx' \
+ --data-urlencode 'id=6258929' \
+ --data-urlencode 'msg=( ̄3 ̄)'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": 1
+}
+```
+
+
diff --git a/docs/electric/monthly.md b/docs/electric/monthly.md
new file mode 100644
index 0000000..21dc3ef
--- /dev/null
+++ b/docs/electric/monthly.md
@@ -0,0 +1,746 @@
+# 包月充电
+
+
+
+## 常量说明
+
+### 充电档位代码(`privilege_type`)与定价
+
+| 代码 | 定价(单位:元人民币) |
+| :--: | :--------------------: |
+| 10 | 6 |
+| 20 | 30 |
+| 30 | 50 |
+| 40 | 88 |
+| 50 | 128 |
+| 60 | 288 |
+| 70 | 588 |
+| 80 | 998 |
+| 100 | 18 |
+| 110 | 238 |
+| 130 | 68 |
+
+## 获取包月充电列表
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或APP
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ------------------------ |
+| page | num | 页码 | 必要 | |
+| type | num | 充电状态 | 必要 | 1:使用中 2:已过期 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 25100004:参数错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | ---------------- | ---------------- |
+| list | 有内容时:array 无内容时:null | 包月充电UP主列表 | 最多10个 |
+| page | num | 当前页数 | |
+| page_size | num | 当前分页大小 | 一般为10 |
+| total_page | num | 总页数 | |
+| total_num | num | 用户总数 | |
+| is_more | num | 是否有更多用户 | 0:否 1:是 |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---------------- |
+| 0 | obj | 用户1 | |
+| n | obj | 用户(n+1) | |
+| …… | obj | …… | …… |
+
+数组`list`中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------- | ----- | ------------------------ | ---------- |
+| up_uid | num | 充电UP主mid | |
+| user_name | str | 充电UP主昵称 | |
+| user_face | str | 充电UP主头像url | |
+| item | array | 充电详情 | |
+| start | num | 开始充电时间 | 秒级时间戳 |
+| high_level_state | num | 是否可对UP主进行高档充电 | |
+| elec_reply_state | num | 是否可对UP主进行专属问答 | 0:否 1:是 2:状态未知 |
+
+数组`list`中的对象中的`item`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------- | -------- |
+| 0 | obj | 充电档位1 | |
+| n | obj | 充电档位(n+1) | |
+| …… | obj | …… | …… |
+
+数组`item`中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | --------------------------------------------- | ---------------- | ---------------- |
+| privilege_type | num | 充电档位代码 | 详见[充电档位代码与定价](#充电档位代码privilege_type与定价) |
+| icon | str | 充电图标 | |
+| name | str | 充电档位名称 | |
+| expire_time | num | 该档位过期时间 | 秒级时间戳 |
+| renew | 开启自动续费时:obj 关闭自动续费时:null | 充电自动续费详情 | |
+| start_time | num | 该档位生效时间 | 秒级时间戳 |
+| renew_list | 开启自动续费时:array 关闭自动续费时:null | 充电自动续费列表 | |
+
+`renew`对象、`renew_list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ---- | ------------ | ------------------------------------------------- |
+| uid | num | 自己的mid | |
+| ruid | num | UP主的mid | |
+| goods_id | num | 充电类型 | 172:一个月 173:连续包月 174:连续包年 |
+| status | num | 充电状态 | 1 |
+| next_execute_time | num | 下次续费时间 | 秒级时间戳 |
+| signed_time | num | 签约时间 | 秒级时间戳 |
+| signed_price | num | 下次续费金额 | 单位为千分之一元人民币 |
+| pay_channel | num | 签约平台 | 2:微信支付 4:支付宝 |
+| period | num | 下次充电天数 | |
+| mobile_app | str | 充电渠道 | 可为`android`等 |
+
+**示例:**
+
+获取自己正在使用的包月充电的列表
+
+```shell
+curl 'https://api.live.bilibili.com/xlive/revenue/v1/guard/getChargeRecord' \
+ --data-urlencode 'page=1' \
+ --data-urlencode 'type=1' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "up_uid": 2233,
+ "user_name": "2233",
+ "user_face": "https://i0.hdslb.com/bfs/face/noface.jpg",
+ "item": [
+ {
+ "privilege_type": 10,
+ "icon": "https://s1.hdslb.com/bfs/templar/york-static/lightning_icon@2x.png",
+ "name": "为TA充电",
+ "expire_time": 1703519999,
+ "renew": {
+ "uid": 425503913,
+ "ruid": 2233,
+ "goods_id": 174,
+ "status": 1,
+ "next_execute_time": 1703174400,
+ "signed_time": 1671618921,
+ "signed_price": 36000,
+ "pay_channel": 2,
+ "period": 366,
+ "mobile_app": "android"
+ },
+ "start_time": 1671618921,
+ "renew_list": [
+ {
+ "uid": 425503913,
+ "ruid": 2233,
+ "goods_id": 174,
+ "status": 1,
+ "next_execute_time": 1703174400,
+ "signed_time": 1671618921,
+ "signed_price": 36000,
+ "pay_channel": 2,
+ "period": 366,
+ "mobile_app": "android"
+ }
+ ]
+ }
+ ],
+ "start": 1669183804,
+ "high_level_state": 1,
+ "elec_reply_state": 1
+ },
+ {
+ "up_uid": 293793435,
+ "user_name": "社会易姐QwQ",
+ "user_face": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg",
+ "item": [
+ {
+ "privilege_type": 10,
+ "icon": "https://s1.hdslb.com/bfs/templar/york-static/lightning_icon@2x.png",
+ "name": "为TA充电",
+ "expire_time": 1681401599,
+ "renew": {
+ "uid": 425503913,
+ "ruid": 293793435,
+ "goods_id": 173,
+ "status": 1,
+ "next_execute_time": 1680364800,
+ "signed_time": 1677760921,
+ "signed_price": 5000,
+ "pay_channel": 4,
+ "period": 31,
+ "mobile_app": "android"
+ },
+ "start_time": 1677760921,
+ "renew_list": [
+ {
+ "uid": 425503913,
+ "ruid": 293793435,
+ "goods_id": 173,
+ "status": 1,
+ "next_execute_time": 1680364800,
+ "signed_time": 1677760921,
+ "signed_price": 5000,
+ "pay_channel": 4,
+ "period": 31,
+ "mobile_app": "android"
+ }
+ ]
+ }
+ ],
+ "start": 1676033795,
+ "high_level_state": 1,
+ "elec_reply_state": 1
+ }
+ ],
+ "page": 1,
+ "page_size": 10,
+ "total_page": 3,
+ "total_num": 22,
+ "is_more": 1
+ }
+}
+```
+
+
+
+表示自己从2022-11-23 14:10:04开始给“2233”包月充电,并且在2022-12-21 18:35:21在微信开通了连续包年充电,在2023-12-22 00:00:00的时候会自动续费36元,并继续充电366天;
+
+自己从2023-02-10 20:56:35开始给“社会易姐QwQ”包月充电,并且在2023-03-02 20:42:01在支付宝开通了连续包月充电,在2023-04-02 00:00:00的时候会自动续费5元,并继续充电31天。
+
+## UP主包月充电详情
+
+>
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ---- |
+| up_mid | num | 目标用户mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------ | ---- | -------------------------- | ------------------------------ |
+| upower_rank | obj | 充电详情 | |
+| item | obj | 充电欢迎语信息 | |
+| user_card | obj | UP主信息 | |
+| upower_level | num | UP主开通的充电等级 | 1:非高档充电 2:高档充电 |
+| elec_reply_state | num | 是否可对UP主进行专属问答 | |
+| voucher_state | obj | 包月充电券信息 | **详细信息有待补充** |
+| upower_right_count | obj | 不同充电档位下的充电权益数 | |
+| only_contain_medal | bool | 享有的权益仅为粉丝勋章 | |
+| privilege_type | num | 当前给该UP主包月充电的档位 | 见[充电档位代码与定价](#充电档位代码privilege_type与定价),若从未给该UP主包月充电过则为0 |
+
+`data`中的`upower_rank`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | ---------------- | ------------ |
+| total | num | 充电用户总数 | |
+| total_desc | str | 充电总数文字说明 | 示例:“1+” |
+| list | array | 充电用户列表 | 最多展示30个 |
+
+`upower_rank`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | -------------------------- |
+| 0 | obj | 用户1 | |
+| n | obj | 用户(n+1) | 按照最初充电时间排序(?) |
+| …… | obj | …… | …… |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | --------------- | ---- |
+| rank | num | 充电用户索引 | |
+| mid | num | 充电用户mid | |
+| nickname | str | 充电用户昵称 | |
+| avatar | str | 充电用户头像url | |
+
+`data`中的`item`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ---- | ---------------- | ---- |
+| intro_video_aid | str | 充电介绍视频AV号 | |
+| welcomes | str | 充电介绍语 | |
+
+`data`中的`user_card`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ----------- | ---- |
+| avatar | str | UP主头像url | |
+| nickname | str | UP主昵称 | |
+
+`data`中的`upower_right_count`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | ---- | -------------------- | ---- |
+| {充电档位代码} | num | 该档位下的充电权益数 | |
+
+**示例:**
+
+获取`mid=1265680561`的包月充电详情
+
+```shell
+curl 'https://api.bilibili.com/x/upower/item/detail' \
+ --data-urlencode 'up_mid=1265680561' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "upower_rank": {
+ "total": 5082,
+ "total_desc": "5000+",
+ "list": [
+ {
+ "rank": 1,
+ "mid": 1476475459,
+ "nickname": "一只屑椒",
+ "avatar": "https://i1.hdslb.com/bfs/face/dc721da215f4651e0472d566b146ee8fdf198dbe.jpg"
+ },
+ {
+ "rank": 2,
+ "mid": 275365317,
+ "nickname": "-陪我去看海吧i",
+ "avatar": "https://i0.hdslb.com/bfs/face/dd7547b13020e7f47549ad7908fd3fc58efadefc.jpg"
+ },
+ {
+ "rank": 3,
+ "mid": 401909111,
+ "nickname": "Vege5able",
+ "avatar": "https://i2.hdslb.com/bfs/face/46b1fdc94c7851ec0c47817adeec13e3225da559.jpg"
+ }
+ ]
+ },
+ "item": {
+ "intro_video_aid": "",
+ "welcomes": "哈喽b站的小伙伴们,我的充电计划升级啦! 感兴趣就多多支持我吧~(゜-゜)つロ"
+ },
+ "user_card": {
+ "avatar": "https://i1.hdslb.com/bfs/face/5ddddba98f0265265662a8f7d5383e528a98412b.jpg",
+ "nickname": "永雏塔菲"
+ },
+ "upower_level": 1,
+ "elec_reply_state": 1,
+ "voucher_state": {
+ "voucher_order_id": "95843e812210c455d1ea6e4714bf105a00",
+ "user_voucher_state": 2,
+ "vip_action": 0,
+ "voucher_name": "包月充电券(6元档)",
+ "validate_price": 0,
+ "validate_level": 0,
+ "activity": "",
+ "common_time": 0,
+ "high_level_time": 0,
+ "specify_up": 0,
+ "specify_level": 0
+ },
+ "upower_right_count": {
+ "10": 3
+ },
+ "only_contain_medal": false,
+ "privilege_type": 0
+ }
+}
+```
+
+
+
+## 与UP主的包月充电关系
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或APP
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ---- |
+| up_mid | num | 目标用户mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------ | ---- | ------------------------------ | ------------------------------------------- |
+| days | num | 已保持多少天包月充电状态 | |
+| up_card | obj | UP主信息 | |
+| user_card | obj | 自己的信息 | |
+| remain_days | num | 剩余天数 | 未处于包月充电状态为-1 |
+| remain_less_1day | num | 剩余的天数是否小于1天 | 0:否 1:是 未处于包月充电状态为0 |
+| upower_rank | obj | 充电详情 | |
+| upower_icon | str | 充电图标url | 仅在处于包月充电状态时有内容 |
+| upower_right_count | obj | 当前自己享有该UP主的充电权益数 | |
+| only_contain_medal | bool | 享有的权益仅为粉丝勋章 | |
+| privilege_type | num | 当前给该UP主包月充电的档位代码 | 见[充电档位代码与定价](#充电档位代码privilege_type与定价),若未处于包月充电状态为0 |
+| challenge_info | obj | 充电挑战信息 | **详细信息有待补充** |
+
+`data`中的`up_card`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | ---- | ------------ | ---- |
+| mid | num | UP主mid | |
+| nickname | str | UP主昵称 | |
+| official_title | str | UP主认证信息 | |
+| avatar | str | UP主头像url | |
+
+`data`中的`user_card`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ----------- | ---- |
+| avatar | str | 用户头像url | |
+| nickname | str | 用户昵称 | |
+
+`data`中的`upower_rank`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | ---------------- | ----------- |
+| total | num | 充电用户总数 | |
+| total_desc | str | 充电总数文字说明 | 示例:“1+” |
+| list | array | 充电用户列表 | 最多展示6个 |
+
+`upower_rank`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---------------- |
+| 0 | obj | 用户1 | |
+| n | obj | 用户(n+1) | 按照充电时间排序 |
+| …… | obj | …… | …… |
+
+数组`list`中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | --------------- | ---- |
+| rank | num | 充电用户索引 | |
+| mid | num | 充电用户mid | |
+| nickname | str | 充电用户昵称 | |
+| avatar | str | 充电用户头像url | |
+
+**示例:**
+
+获取与`mid=293793435`的包月充电关系
+
+```shell
+curl 'https://api.bilibili.com/x/upower/charge/follow/info' \
+ --data-urlencode 'up_mid=293793435' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "days": 17,
+ "up_card": {
+ "mid": 293793435,
+ "nickname": "社会易姐QwQ",
+ "official_title": "",
+ "avatar": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg"
+ },
+ "user_card": {
+ "avatar": "https://i2.hdslb.com/bfs/face/540ed71e2fb2ddd8967c21b392026c34fc15673e.jpg",
+ "nickname": "晨叶梦春"
+ },
+ "remain_days": 15,
+ "remain_less_1day": 0,
+ "upower_rank": {
+ "total": 1,
+ "total_desc": "1+",
+ "list": [
+ {
+ "rank": 1,
+ "mid": 425503913,
+ "nickname": "晨叶梦春",
+ "avatar": "https://i2.hdslb.com/bfs/face/540ed71e2fb2ddd8967c21b392026c34fc15673e.jpg"
+ }
+ ]
+ },
+ "upower_icon": "https://i0.hdslb.com/bfs/garb/item/33e2e72d9a0c855f036b4cb55448f44af67a0635.png",
+ "upower_right_count": 2,
+ "only_contain_medal": false,
+ "privilege_type": 10,
+ "challenge_info": {
+ "challenge_id": "",
+ "description": "",
+ "challenge_type": 0,
+ "remaining_days": 0,
+ "end_time": "",
+ "progress": 0,
+ "targets": [],
+ "state": 0,
+ "end_time_unix": 0,
+ "pub_dyn": 0,
+ "dyn_content": ""
+ }
+ }
+}
+```
+
+
+
+表示自己已保持17天对“社会易姐QwQ”的包月充电,剩余15天过期。
+
+## 包月充电用户排名
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或APP
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------------- | ---- | ------------ | ------ | --------- |
+| up_mid | num | 目标用户mid | 必要 | |
+| ps | num | 每页项数 | 必要 | 最大为101 |
+| pn | num | 页码 | 必要 | |
+| privilege_type | num | 充电档位代码 | 非必要 | 见[充电档位代码与定价](#充电档位代码privilege_type与定价),默认为可以显示排名的档位中**最高定价**的档位 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | ----- | ------------------------------ | -------- |
+| up_info | obj | UP主信息 | |
+| rank_info | array | 当前档位的充电用户排名 | |
+| user_info | obj | 自己在该档位下与UP主的充电关系 | |
+| member_total | num | 当前档位的充电用户总数 | |
+| privilege_type | num | 当前充电档位代码 | 见[充电档位代码与定价](#充电档位代码privilege_type与定价) |
+| is_charge | bool | 自己是否给该UP主包月充电过 | 无论档位 |
+| tabs | array | 可显示排名的充电档位代码列表 | |
+| level_info | array | 可显示排名的充电档位信息 | |
+
+`data`中的`up_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | -------------------- | ---------------------------------------- |
+| mid | num | UP主mid | |
+| nickname | str | UP主昵称 | |
+| avatar | str | UP主头像url | |
+| type | num | UP主认证类型 | -1:无 0:UP主认证 1:机构认证 |
+| title | str | UP主认证文字 | |
+| upower_state | num | UP主充电功能开启状态 | 0:未开通充电功能 1:已开通自定义充电 2:已开通包月、自定义充电 3:已开通包月高档、自定义充电 |
+
+`data`中的`rank_info`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---------------- |
+| 0 | obj | 用户1 | |
+| n | obj | 用户(n+1) | 按照充电排名排列 |
+| …… | obj | …… | …… |
+
+`rank_info`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ---------------- | ----- |
+| mid | num | 充电用户mid | |
+| nickname | str | 充电用户昵称 | |
+| avatar | str | 充电用户头像url | |
+| rank | num | 充电用户排名 | |
+| day | num | 包月充电天数 | |
+| expire_at | num | 包月充电过期时间 | 恒为0 |
+| remain_days | num | 剩余天数 | 恒为0 |
+
+`data`中的`user_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ---------------- | ------------------------------- |
+| mid | num | 用户mid | |
+| nickname | str | 用户昵称 | |
+| avatar | str | 用户头像url | |
+| rank | num | 包月充电排名 | 不在该充电档位用户列表里为-1 |
+| day | num | 包月充电天数 | |
+| expire_at | num | 包月充电过期时间 | 秒级时间戳,若从未给UP主在该档位下包月充电过为0 |
+| remain_days | num | 剩余天数 | 若该档位充电状态已失效为0 |
+
+`data`中的`tabs`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------- | ---------------- |
+| 0 | num | 档位代码1 | |
+| n | num | 档位代码(n+1) | |
+| …… | num | …… | …… |
+
+`data`中的`level_info`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---------------- |
+| 0 | obj | 档位1 | |
+| n | obj | 档位(n+1) | |
+| …… | obj | …… | …… |
+
+`level_info`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | ---- | -------------------- | ---------------------- |
+| privilege_type | num | 当前充电档位代码 | 见[充电档位代码与定价](#充电档位代码privilege_type与定价) |
+| name | str | 档位名称 | |
+| price | num | 档位价格 | 单位为百分之一元人民币 |
+| member_total | num | 当前档位的用户总数 | |
+
+**示例:**
+
+获取给`mid=686127`包月充电的用户排名
+
+```shell
+curl 'https://api.bilibili.com/x/upower/up/member/rank/v2' \
+ --data-urlencode 'up_mid=686127' \
+ --data-urlencode 'ps=3' \
+ --data-urlencode 'pn=1' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "up_info": {
+ "mid": 686127,
+ "nickname": "籽岷",
+ "avatar": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp",
+ "type": 0,
+ "title": "2024百大UP主、知名游戏UP主",
+ "upower_state": 3
+ },
+ "rank_info": [
+ {
+ "mid": 187012867,
+ "nickname": "是我灬不配",
+ "avatar": "https://i1.hdslb.com/bfs/face/ad4d2ce0705fd766a0ade315f5a6a5984ce479f4.jpg",
+ "rank": 1,
+ "day": 682,
+ "expire_at": 0,
+ "remain_days": 0
+ },
+ {
+ "mid": 20135495,
+ "nickname": "和平时一样鸽",
+ "avatar": "https://i2.hdslb.com/bfs/face/0eef725964105f39b1f000a59f232d9094017544.jpg",
+ "rank": 2,
+ "day": 620,
+ "expire_at": 0,
+ "remain_days": 0
+ },
+ {
+ "mid": 490065730,
+ "nickname": "乔治Y-GYhaha",
+ "avatar": "https://i1.hdslb.com/bfs/face/e1753e1e43d7a7df5333c5a2f4d3ec1d0334ebe6.jpg",
+ "rank": 3,
+ "day": 527,
+ "expire_at": 0,
+ "remain_days": 0
+ }
+ ],
+ "user_info": {
+ "mid": 425503913,
+ "nickname": "晨叶梦春",
+ "avatar": "https://i2.hdslb.com/bfs/face/540ed71e2fb2ddd8967c21b392026c34fc15673e.jpg",
+ "rank": -1,
+ "day": 0,
+ "expire_at": 0,
+ "remain_days": 0
+ },
+ "member_total": 46881,
+ "privilege_type": 50,
+ "is_charge": false,
+ "tabs": [50, 10],
+ "level_info": [
+ {
+ "privilege_type": 50,
+ "name": "审稿",
+ "price": 12800,
+ "member_total": 1082
+ },
+ {
+ "privilege_type": 10,
+ "name": "石粒",
+ "price": 600,
+ "member_total": 46158
+ }
+ ]
+ }
+}
+```
+
+
diff --git a/emoji/action.md b/docs/emoji/action.md
similarity index 91%
rename from emoji/action.md
rename to docs/emoji/action.md
index 954ed86..d5bc0bd 100644
--- a/emoji/action.md
+++ b/docs/emoji/action.md
@@ -1,13 +1,8 @@
# 表情操作
-- [添加表情包](#添加表情包)
-- [移除表情包](#移除表情包)
-
----
-
## 添加表情包
-> http://api.bilibili.com/x/emote/package/add
+> https://api.bilibili.com/x/emote/package/add
*请求方式:POST*
@@ -38,7 +33,7 @@
添加id为`25`的表情包,使用场景为评论区
```shell
-curl 'http://api.bilibili.com/x/emote/package/add' \
+curl 'https://api.bilibili.com/x/emote/package/add' \
--data-urlencode 'package_id=25' \
--data-urlencode 'business=reply' \
--data-urlencode 'csrf=xxx' \
@@ -60,7 +55,7 @@ curl 'http://api.bilibili.com/x/emote/package/add' \
## 移除表情包
-> http://api.bilibili.com/x/emote/package/remove
+> https://api.bilibili.com/x/emote/package/remove
*请求方式:POST*
@@ -89,7 +84,7 @@ curl 'http://api.bilibili.com/x/emote/package/add' \
移除id为`25`的表情包,使用场景为评论区
```shell
-curl 'http://api.bilibili.com/x/emote/package/remove' \
+curl 'https://api.bilibili.com/x/emote/package/remove' \
--data-urlencode 'package_id=25' \
--data-urlencode 'business=reply' \
--data-urlencode 'csrf=xxx' \
diff --git a/emoji/list.md b/docs/emoji/list.md
similarity index 97%
rename from emoji/list.md
rename to docs/emoji/list.md
index e47e792..1435982 100644
--- a/emoji/list.md
+++ b/docs/emoji/list.md
@@ -1,15 +1,8 @@
# 表情列表
-- [获取我的表情列表](#获取我的表情列表)
-- [取指定的表情包明细](#取指定的表情包明细)
-- [获取所有表情包列表](#获取所有表情包列表)
-- [附表-表情包对象](#附表-表情包对象)
-
----
-
## 获取我的表情列表
-> http://api.bilibili.com/x/emote/user/panel/web
+> https://api.bilibili.com/x/emote/user/panel/web
*请求方式:GET*
@@ -51,7 +44,7 @@
**示例:**
```shell
-curl -G 'http://api.bilibili.com/x/emote/user/panel/web' \
+curl -G 'https://api.bilibili.com/x/emote/user/panel/web' \
--data-urlencode 'business=reply' \
-b 'SESSDATA=xxx'
```
@@ -225,7 +218,7 @@ curl -G 'http://api.bilibili.com/x/emote/user/panel/web' \
## 获取指定的表情包明细
-> http://api.bilibili.com/x/emote/package
+> https://api.bilibili.com/x/emote/package
*请求方式:GET*
@@ -266,7 +259,7 @@ curl -G 'http://api.bilibili.com/x/emote/user/panel/web' \
获取表情包id为`93`的表情包明细
```shell
-curl -G 'http://api.bilibili.com/x/emote/package' \
+curl -G 'https://api.bilibili.com/x/emote/package' \
--data-urlencode 'ids=93' \
--data-urlencode 'business=reply'
```
@@ -518,7 +511,7 @@ curl -G 'http://api.bilibili.com/x/emote/package' \
## 获取所有表情包列表
-> http://api.bilibili.com/x/emote/setting/panel
+> https://api.bilibili.com/x/emote/setting/panel
*请求方式:GET*
@@ -575,7 +568,7 @@ curl -G 'http://api.bilibili.com/x/emote/package' \
**示例:**
```shell
-curl -G 'http://api.bilibili.com/x/emote/setting/panel' \
+curl -G 'https://api.bilibili.com/x/emote/setting/panel' \
--data-urlencode 'business=reply' \
-b 'SESSDATA=xxx'
```
diff --git a/fav/action.md b/docs/fav/action.md
similarity index 89%
rename from fav/action.md
rename to docs/fav/action.md
index 7e90c99..1672164 100644
--- a/fav/action.md
+++ b/docs/fav/action.md
@@ -1,20 +1,10 @@
# 收藏夹操作
-- [管理收藏夹](#管理收藏夹)
- - [新建收藏夹](#新建收藏夹)
- - [修改收藏夹](#修改收藏夹)
- - [删除收藏夹](#删除收藏夹)
-- [管理收藏内容](#管理收藏内容)
- - [批量复制内容](#批量复制内容)
- - [清空所有失效内容](#清空所有失效内容)
-
----
-
## 管理收藏夹
### 新建收藏夹
-> http://api.bilibili.com/x/v3/fav/folder/add
+> https://api.bilibili.com/x/v3/fav/folder/add
*请求方式:POST*
@@ -36,7 +26,7 @@
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------- |
-| code | num | 返回值 | 0:成功 |
+| code | num | 返回值 | 0:成功 -102:账号被封停 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
@@ -49,14 +39,14 @@
**示例:**
-创建一个叫`test`,简介是`2333`,封面`http://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png`,的公开收藏夹:
+创建一个叫`test`,简介是`2333`,封面`https://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png`,的公开收藏夹:
```shell
-curl 'http://api.bilibili.com/x/v3/fav/folder/add' \
+curl 'https://api.bilibili.com/x/v3/fav/folder/add' \
--data-urlencode 'title=test' \
--data-urlencode 'intro=2333' \
--data-urlencode 'privacy=0' \
---data-urlencode 'cover=http://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png' \
+--data-urlencode 'cover=https://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png' \
--data-urlencode 'csrf=xxxx' \
-b 'SESSDATA=xxxx'
```
@@ -75,7 +65,7 @@ curl 'http://api.bilibili.com/x/v3/fav/folder/add' \
"mid": 470310172,
"attr": 6,
"title": "test",
- "cover": "http://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png",
+ "cover": "https://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png",
"upper": {
"mid": 0,
"name": "",
@@ -107,7 +97,7 @@ curl 'http://api.bilibili.com/x/v3/fav/folder/add' \
### 修改收藏夹
-> http://api.bilibili.com/x/v3/fav/folder/edit
+> https://api.bilibili.com/x/v3/fav/folder/edit
*请求方式:POST*
@@ -130,7 +120,7 @@ curl 'http://api.bilibili.com/x/v3/fav/folder/add' \
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------- |
-| code | num | 返回值 | 0:成功 |
+| code | num | 返回值 | 0:成功 -102:账号被封停 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
@@ -143,15 +133,15 @@ curl 'http://api.bilibili.com/x/v3/fav/folder/add' \
**示例:**
-修改id为`1182306172`的名字为`test`,简介为`2333`,封面为`http://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png`,公开收藏夹:
+修改id为`1182306172`的名字为`test`,简介为`2333`,封面为`https://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png`,公开收藏夹:
```shell
-curl 'http://api.bilibili.com/x/v3/fav/folder/edit' \
+curl 'https://api.bilibili.com/x/v3/fav/folder/edit' \
--data-urlencode 'media_id=1182306172' \
--data-urlencode 'title=test' \
--data-urlencode 'intro=2333' \
--data-urlencode 'privacy=0' \
---data-urlencode 'cover=http://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png' \
+--data-urlencode 'cover=https://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png' \
--data-urlencode 'csrf=xxxx' \
-b 'SESSDATA=xxxx'
```
@@ -170,7 +160,7 @@ curl 'http://api.bilibili.com/x/v3/fav/folder/edit' \
"mid": 470310172,
"attr": 6,
"title": "test",
- "cover": "http://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png",
+ "cover": "https://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png",
"upper": {
"mid": 0,
"name": "",
@@ -202,7 +192,7 @@ curl 'http://api.bilibili.com/x/v3/fav/folder/edit' \
### 删除收藏夹
-> http://api.bilibili.com/x/v3/fav/folder/del
+> https://api.bilibili.com/x/v3/fav/folder/del
*请求方式:POST*
@@ -231,7 +221,7 @@ curl 'http://api.bilibili.com/x/v3/fav/folder/edit' \
删除id为`1182306172`的收藏夹:
```shell
-curl 'http://api.bilibili.com/x/v3/fav/folder/del' \
+curl 'https://api.bilibili.com/x/v3/fav/folder/del' \
--data-urlencode 'media_ids=1182306172' \
--data-urlencode 'csrf=xxxx' \
-b 'SESSDATA=xxxx'
@@ -255,7 +245,7 @@ curl 'http://api.bilibili.com/x/v3/fav/folder/del' \
### 批量复制内容
-> http://api.bilibili.com/x/v3/fav/resource/copy
+> https://api.bilibili.com/x/v3/fav/resource/copy
*请求方式:POST*
@@ -288,7 +278,7 @@ curl 'http://api.bilibili.com/x/v3/fav/folder/del' \
将id为`1288061499`的收藏夹中视频稿件`av21822819` `av21918689` `av22288065`复制到id为`1178751999`的收藏夹中
```shell
-curl 'http://api.bilibili.com/x/v3/fav/resource/copy' \
+curl 'https://api.bilibili.com/x/v3/fav/resource/copy' \
--data-urlencode 'src_media_id=1288061499' \
--data-urlencode 'tar_media_id=1178751999' \
--data-urlencode 'mid=233333' \
@@ -315,7 +305,7 @@ curl 'http://api.bilibili.com/x/v3/fav/resource/copy' \
### 批量移动内容
-> http://api.bilibili.com/x/v3/fav/resource/move
+> https://api.bilibili.com/x/v3/fav/resource/move
*请求方式:POST*
@@ -348,7 +338,7 @@ curl 'http://api.bilibili.com/x/v3/fav/resource/copy' \
将id为`1288061499`的收藏夹中视频稿件`av21822819` `av21918689` `av22288065`移动到id为`1178751999`的收藏夹中
```shell
-curl 'http://api.bilibili.com/x/v3/fav/resource/move' \
+curl 'https://api.bilibili.com/x/v3/fav/resource/move' \
--data-urlencode 'src_media_id=1288061499' \
--data-urlencode 'tar_media_id=1178751999' \
--data-urlencode 'mid=233333' \
@@ -375,7 +365,7 @@ curl 'http://api.bilibili.com/x/v3/fav/resource/move' \
### 批量删除内容
-> http://api.bilibili.com/x/v3/fav/resource/batch-del
+> https://api.bilibili.com/x/v3/fav/resource/batch-del
*请求方式:POST*
@@ -406,7 +396,7 @@ curl 'http://api.bilibili.com/x/v3/fav/resource/move' \
将id为`1178751999`的收藏夹中视频稿件`av21822819` `av21918689` `av22288065`取消收藏
```shell
-curl 'http://api.bilibili.com/x/v3/fav/resource/batch-del' \
+curl 'https://api.bilibili.com/x/v3/fav/resource/batch-del' \
--data-urlencode 'resources=21822819:2,21918689:2,22288065:2' \
--data-urlencode 'media_id=1178751999' \
--data-urlencode 'platform=web' \
@@ -431,7 +421,7 @@ curl 'http://api.bilibili.com/x/v3/fav/resource/batch-del' \
### 清空所有失效内容
-> http://api.bilibili.com/x/v3/fav/resource/clean
+> https://api.bilibili.com/x/v3/fav/resource/clean
*请求方式:POST*
@@ -460,7 +450,7 @@ curl 'http://api.bilibili.com/x/v3/fav/resource/batch-del' \
清理id为`1161340172`的收藏夹
```shell
-curl 'http://api.bilibili.com/x/v3/fav/resource/clean' \
+curl 'https://api.bilibili.com/x/v3/fav/resource/clean' \
--data-urlencode 'media_id=1161340172' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
diff --git a/docs/fav/info.md b/docs/fav/info.md
new file mode 100644
index 0000000..fe02478
--- /dev/null
+++ b/docs/fav/info.md
@@ -0,0 +1,571 @@
+# 收藏夹基本信息
+
+
+
+## 获取收藏夹元数据
+
+> https://api.bilibili.com/x/v3/fav/folder/info
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA) 或 APP
+
+**注:查询权限收藏夹时需要相应用户登录**
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ---------------------- | ------ | ---- |
+| media_id | num | 目标收藏夹id(完整id) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----------------------------- | -------- | --------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 -403:访问权限不足 11010: 内容不存在 |
+| message | str | 错误信息 | 默认为0 |
+| data | 有效时:obj 无效或:null | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | -------------------- | -------------------------------------------------- |
+| id | num | 收藏夹mlid(完整id) | 收藏夹原始id+创建者mid尾号2位 |
+| fid | num | 收藏夹原始id | |
+| mid | num | 创建者mid | |
+| attr | num | 属性位(?) | |
+| title | str | 收藏夹标题 | |
+| cover | str | 收藏夹封面图片url | |
+| upper | obj | 创建者信息 | |
+| cover_type | num | 封面图类别(?) | |
+| cnt_info | obj | 收藏夹状态数 | |
+| type | num | 类型(?) | 一般是11 |
+| intro | str | 备注 | |
+| ctime | num | 创建时间 | 时间戳 |
+| mtime | num | 收藏时间 | 时间戳 |
+| state | num | 状态(?) | 一般为0 |
+| fav_state | num | 收藏夹收藏状态 | 已收藏收藏夹:1 未收藏收藏夹:0 需要登录 |
+| like_state | num | 点赞状态 | 已点赞:1 未点赞:0 需要登录 |
+| media_count | num | 收藏夹内容数量 | |
+
+`data`中的`upper`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ---------------- | ----------------------------------------------- |
+| mid | num | 创建者mid | |
+| name | str | 创建者昵称 | |
+| face | str | 创建者头像url | |
+| followed | bool | 是否已关注创建者 | |
+| vip_type | num | 会员类别 | 0:无 1:月大会员 2:年度及以上大会员 |
+| vip_statue | num | 会员开通状态 | 0:无 1:有 |
+
+`data`中的`cnt_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ------ | ---- |
+| collect | num | 收藏数 | |
+| play | num | 播放数 | |
+| thumb_up | num | 点赞数 | |
+| share | num | 分享数 | |
+
+**示例:**
+
+查询收藏夹`id=1052622027`的元数据
+
+```shell
+curl -G 'https://api.bilibili.com/x/v3/fav/folder/info' \
+--data-urlencode 'media_id=1052622027' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "id": 1052622027,
+ "fid": 10526220,
+ "mid": 686127,
+ "attr": 54,
+ "title": "猛 男 生 存",
+ "cover": "http://i2.hdslb.com/bfs/archive/bb51ee8a5fc5e03996138155f0f682d30ee16484.jpg",
+ "upper": {
+ "mid": 686127,
+ "name": "籽岷",
+ "face": "http://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp",
+ "followed": true,
+ "vip_type": 2,
+ "vip_statue": 1
+ },
+ "cover_type": 2,
+ "cnt_info": {
+ "collect": 3393,
+ "play": 184822,
+ "thumb_up": 3918,
+ "share": 44
+ },
+ "type": 11,
+ "intro": "猛 男 生 存",
+ "ctime": 1598884758,
+ "mtime": 1598884758,
+ "state": 0,
+ "fav_state": 0,
+ "like_state": 0,
+ "media_count": 28
+ }
+}
+```
+
+
+
+## 获取指定用户创建的所有收藏夹信息
+
+> https://api.bilibili.com/x/v3/fav/folder/created/list-all
+
+*请求方式:GET*
+
+认证方式:Cookie (SESSDATA) 或 APP
+
+若欲查看相应用户的私密收藏夹需要登录
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ---- |
+| up_mid | num | 目标用户mid | 必要 | |
+| type | num | 目标内容属性 | 非必要 | 默认为全部 0:全部 2:视频稿件 |
+| rid | num | 目标内容id | 非必要 | 视频稿件:视频稿件avid |
+| web_location | str | 333.1387 | 非必要| |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----------------------------- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | 隐藏时:null 公开时:obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | --------------------------------------- | -------------- | ---- |
+| count | num | 创建的收藏夹数 | |
+| list | 无收藏夹时:null 有收藏夹时:array | 收藏夹列表 | |
+| season | null | (?) | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------- | --------------------- |
+| 0 | obj | 收藏夹1 | |
+| n | obj | 收藏夹(n+1) | 项数取决于`count`的值 |
+| …… | obj | …… | |
+
+`data`中的`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ------------------------ | ------------------------------------------ |
+| id | num | 收藏夹mlid(完整id) | 收藏夹原始id+创建者mid尾号2位 |
+| fid | num | 收藏夹原始id | |
+| mid | num | 创建者mid | |
+| attr | num | 收藏夹属性 | 二进制位属性 详细说明见下表 |
+| title | str | 收藏夹标题 | |
+| fav_state | num | 目标id是否存在于该收藏夹 | 存在于该收藏夹:1 不存在于该收藏夹:0 |
+| media_count | num | 收藏夹内容数量 | |
+
+`attr`属性位二进制值表:
+
+| 位 | 内容 | 备注 |
+| --------------- | ---------------- | -------------------------------- |
+| 0 | 私有收藏夹 | 0:公开 1:私有 |
+| 1 | 是否为默认收藏夹 | 0:默认收藏夹 1:其他收藏夹 |
+| 其他有待补充... | | |
+
+**示例:**
+
+查询用户`mid=7792521`的收藏夹列表
+
+```shell
+curl -G 'https://api.bilibili.com/x/v3/fav/folder/created/list-all' \
+--data-urlencode 'up_mid=7792521' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "count": 5,
+ "list": [{
+ "id": 44233921,
+ "fid": 442339,
+ "mid": 7792521,
+ "attr": 0,
+ "title": "默认收藏夹",
+ "fav_state": 0,
+ "media_count": 85
+ }, {
+ "id": 936347621,
+ "fid": 9363476,
+ "mid": 7792521,
+ "attr": 22,
+ "title": "放假君的鬼畜私房歌",
+ "fav_state": 0,
+ "media_count": 2
+ }, {
+ "id": 845218621,
+ "fid": 8452186,
+ "mid": 7792521,
+ "attr": 22,
+ "title": "♪一言不合就开唱♪",
+ "fav_state": 0,
+ "media_count": 4
+ }, {
+ "id": 844998121,
+ "fid": 8449981,
+ "mid": 7792521,
+ "attr": 22,
+ "title": "个人作品精选",
+ "fav_state": 0,
+ "media_count": 25
+ }, {
+ "id": 381779121,
+ "fid": 3817791,
+ "mid": 7792521,
+ "attr": 22,
+ "title": "鬼畜小课堂",
+ "fav_state": 0,
+ "media_count": 25
+ }]
+ }
+}
+```
+
+
+
+## 查询用户收藏的视频收藏夹
+
+> https://api.bilibili.com/x/v3/fav/folder/collected/list
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ---- |
+| ps | num | 每页项数 | 必要 | 定义域 1 - 大于70 |
+| pn | num | 页码 | 必要 | |
+| up_mid | num | 目标用户mid | 必要 | |
+| platform | str | 平台类型 | 非必要 | 填写web 返回值才会包含用户收藏的视频合集 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----------------------------- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 40022:签名过长 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | 隐藏时:null 公开时:obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | --------------------------------------- | -------------- | ---- |
+| count | num | 创建的收藏夹数 | |
+| list | 无收藏夹时:null 有收藏夹时:array | 收藏夹列表 | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------- | --------------------- |
+| 0 | obj | 收藏夹1 | |
+| n | obj | 收藏夹(n+1) | 项数取决于`count`的值 |
+| …… | obj | …… | |
+
+`data`中的`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ------------------ | ----------------------------------------- |
+| id | num | 收藏夹ml | |
+| fid | num | 原始收藏夹mlid | 去除两位mid尾号 |
+| mid | num | 创建用户mid | |
+| attr | num | 收藏夹属性 | [同上 attr](#获取指定用户创建的所有收藏夹信息) |
+| title | str | 收藏夹标题 | |
+| cover | str | 收藏夹封面图片url | |
+| upper | obj | 收藏夹创建用户信息 | |
+| cover_type | num | 2 | 作用尚不明确 |
+| intro | str | 空 | 作用尚不明确 |
+| ctime | num | 创建时间 | 时间戳 |
+| mtime | num | 审核时间 | 时间戳 |
+| state | num | 0, 1 | 0: 正常;1:收藏夹已失效 |
+| fav_state | num | 0 | 作用尚不明确 |
+| media_count | num | 收藏夹总计视频数 | |
+
+`data`中的`list`数组中的对象中的`upper`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---------- | ------------ |
+| mid | num | 创建人mid | |
+| name | str | 创建人昵称 | |
+| face | str | 空 | 作用尚不明确 |
+
+**示例:**
+
+查询用户`mid=293793435`的收藏夹收藏列表
+
+```shell
+curl -G 'https://api.bilibili.com/x/v3/fav/folder/collected/list' \
+--data-urlencode 'up_mid=293793435' \
+--data-urlencode 'ps=20' \
+--data-urlencode 'pn=1' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "count": 2,
+ "list": [{
+ "id": 496307088,
+ "fid": 4963070,
+ "mid": 412466388,
+ "attr": 22,
+ "title": "入站必刷",
+ "cover": "http://i0.hdslb.com/bfs/archive/baae2b4050363c0ab45465b7cf696b8304fdaca8.jpg",
+ "upper": {
+ "mid": 412466388,
+ "name": "热门菌",
+ "face": ""
+ },
+ "cover_type": 2,
+ "intro": "",
+ "ctime": 1563394571,
+ "mtime": 1563394571,
+ "state": 0,
+ "fav_state": 0,
+ "media_count": 55
+ }, {
+ "id": 381779121,
+ "fid": 3817791,
+ "mid": 7792521,
+ "attr": 22,
+ "title": "鬼畜小课堂",
+ "cover": "http://i2.hdslb.com/bfs/archive/09a668cfdb38fb3a85f905c10f48a2947e36a695.jpg",
+ "upper": {
+ "mid": 7792521,
+ "name": "还有一天就放假了",
+ "face": ""
+ },
+ "cover_type": 2,
+ "intro": "",
+ "ctime": 1553700224,
+ "mtime": 1557291666,
+ "state": 0,
+ "fav_state": 0,
+ "media_count": 25
+ }]
+ }
+}
+```
+
+
+
+## 批量获取指定收藏id的内容
+
+> https://api.bilibili.com/x/v3/fav/resource/infos
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --------- | ---- | -------------- | ------ | ------------------------------------------------------------ |
+| resources | strs | 目标内容id列表 | 必要 | 格式:{内容id}:{内容类型} 每个成员间用`,`分隔 类型: 2:视频稿件 12:音频 内容id: 视频稿件:视频稿件avid 音频:音频auid |
+| platform | str | 平台标识 | 非必要 | 可为web(影响内容列表类型) |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------------------------------- | ------------ | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| data | 有效时:array 无效或:null | 内容信息列表 | |
+
+`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ---- |
+| 0 | obj | 内容信息1 | |
+| n | obj | 内容信息(n+1) | |
+| ... | obj | ... | |
+
+`data`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ------------- | ------------------------------------------------------------ |
+| id | num | 内容id | 视频稿件:视频稿件avid 音频:音频auid |
+| type | num | 内容类型 | 2:视频稿件 12:音频 |
+| title | str | 标题 | |
+| cover | str | 封面url | |
+| intro | str | 简介 | |
+| page | num | 视频分P数 | |
+| duration | num | 音频/视频时长 | |
+| upper | obj | UP主信息 | |
+| attr | num | 属性 | 0:正常 1:失效 |
+| cnt_info | obj | 状态数 | |
+| link | str | 跳转uri | |
+| ctime | num | 投稿时间 | 时间戳 |
+| pubtime | num | 发布时间 | 时间戳 |
+| fav_time | num | 收藏时间 | 时间戳 |
+| bv_id | str | 视频稿件bvid | |
+| bvid | str | 视频稿件bvid | |
+| season | null | (?) | |
+
+`data`数组中的对象中的`upper`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------- | ---- |
+| mid | num | UP主mid | |
+| name | str | UP主昵称 | |
+| face | str | UP主头像url | |
+
+`data`数组中的对象中的`cnt_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ------ | ---- |
+| collect | num | 收藏数 | |
+| play | num | 播放数 | |
+| danmaku | num | 弹幕数 | |
+
+**示例:**
+
+批量查询内容
+
+1-视频稿件-`av583785685`
+
+2-音频-`au15664`
+
+```shell
+curl -G 'https://api.bilibili.com/x/v3/fav/resource/infos' \
+--data-urlencode 'resources=583785685:2,15664:12'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [
+ {
+ "id": 583785685,
+ "type": 2,
+ "title": "已失效视频",
+ "cover": "http://i0.hdslb.com/bfs/archive/be27fd62c99036dce67efface486fb0a88ffed06.jpg",
+ "intro": "审核君辛苦了~\r\n使用curl命令访问B站api,实现二维码登录 查询登录信息 视频投币 发送评论的操作\r\n本视频作为api收集项目的一个硬核DEMO\r\n由于当时录音的问题,大部分是后期配的,后面声音有点小\r\n想了解更多的去github页面,也可以qq\r\n\r\nbgm:\r\n雲流れ\r\nAutumn rain(未修改版)\r\n四月,初雨微凉",
+ "page": 1,
+ "duration": 604,
+ "upper": {
+ "mid": 293793435,
+ "name": "社会易姐QwQ",
+ "face": "http://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg"
+ },
+ "attr": 1,
+ "cnt_info": {
+ "collect": 1470,
+ "play": 28374,
+ "danmaku": 64
+ },
+ "link": "bilibili://video/583785685",
+ "ctime": 1594049831,
+ "pubtime": 1594049831,
+ "fav_time": 0,
+ "bv_id": "BV1kz4y1X7XP",
+ "bvid": "BV1kz4y1X7XP",
+ "season": null
+ },
+ {
+ "id": 523,
+ "type": 21,
+ "title": "2021哔哩哔哩拜年纪",
+ "cover": "https://i0.hdslb.com/bfs/archive/8ccc50f7cbc671762e0536491bd2b8aeebc0837d.jpg",
+ "intro": "感谢各位制作者们的辛勤付出!节目精彩,愿大家看的开心!",
+ "page": 0,
+ "duration": 0,
+ "upper": {
+ "mid": 1868902080,
+ "name": "哔哩哔哩拜年纪",
+ "face": "http://i0.hdslb.com/bfs/face/7f6cb94fc071aca9fbb4b1ca9cc6415e86847576.jpg"
+ },
+ "attr": 0,
+ "cnt_info": {
+ "collect": 0,
+ "play": 71527018,
+ "danmaku": 480547
+ },
+ "link": "bilibili://video/373561162",
+ "ctime": 0,
+ "pubtime": 0,
+ "fav_time": 0,
+ "bv_id": "",
+ "bvid": "",
+ "season": null
+ },
+ {
+ "id": 15664,
+ "type": 12,
+ "title": "威风堂堂",
+ "cover": "http://i0.hdslb.com/bfs/music/c417d30b394a8a5d4e8a150ad75837dbae3b79d4.jpg",
+ "intro": "翻唱。在电脑里放了半个月终于!!!大家寒假快乐!!❁本家sm19233263;❁压制: 寒雨;❁mix: 三星堆;❁vocal: 茶理理。超喜欢michan的那段英文念白所以加了进来w 谢谢三月月和嘟比比你们后期辛苦了!",
+ "page": 1,
+ "duration": 200,
+ "upper": {
+ "mid": 684169,
+ "name": "茶理理理子",
+ "face": ""
+ },
+ "attr": 0,
+ "cnt_info": {
+ "collect": 48872,
+ "play": 1508426,
+ "danmaku": 0
+ },
+ "link": "bilibili://music/detail/15664?name=%E5%A8%81%E9%A3%8E%E5%A0%82%E5%A0%82&uperName=%E8%8C%B6%E7%90%86%E7%90%86%E7%90%86%E5%AD%90&cover_url=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Fmusic%2Fc417d30b394a8a5d4e8a150ad75837dbae3b79d4.jpg&upperId=684169&author=%E8%8C%B6%E7%90%86%E7%90%86",
+ "ctime": 1502347604,
+ "pubtime": 1502347604,
+ "fav_time": 0,
+ "bv_id": "BV1bx411c7qt",
+ "bvid": "BV1bx411c7qt",
+ "season": null
+ }
+ ]
+}
+```
+
+
diff --git a/fav/list.md b/docs/fav/list.md
similarity index 97%
rename from fav/list.md
rename to docs/fav/list.md
index e1e7534..60408d9 100644
--- a/fav/list.md
+++ b/docs/fav/list.md
@@ -1,13 +1,8 @@
# 收藏夹内容
-- [获取收藏夹内容明细列表](#获取收藏夹内容明细列表)
-- [获取收藏夹全部内容id](#获取收藏夹全部内容id)
-
----
-
## 获取收藏夹内容明细列表
-> http://api.bilibili.com/x/v3/fav/resource/list
+> https://api.bilibili.com/x/v3/fav/resource/list
*请求方式:GET*
@@ -24,7 +19,7 @@
| keyword | str | 搜索关键字 | 非必要 | |
| order | str | 排序方式 | 非必要 | 按收藏时间:mtime 按播放量: view 按投稿时间:pubtime |
| type | num | 查询范围 | 非必要 | 0:当前收藏夹(对应media_id) 1:全部收藏夹 |
-| ps | num | 每页数量 | 必要 | |
+| ps | num | 每页数量 | 必要 | 定义域:1-20 |
| pn | num | 页码 | 非必要 | 默认为1 |
| platform | str | 平台标识 | 非必要 | 可为web(影响内容列表类型) |
@@ -44,6 +39,8 @@
| ------ | ----- | ------------ | ---- |
| info | obj | 收藏夹元数据 | |
| medias | array | 收藏夹内容 | |
+| has_more | bool | 收藏夹是否有下一页 | |
+| ttl | num | 接口返回时间 | 时间戳 |
`data`中的`info`对象:
@@ -108,7 +105,7 @@
| page | num | 视频分P数 | |
| duration | num | 音频/视频时长 | |
| upper | obj | UP主信息 | |
-| attr | num | 属性位(?) | |
+| attr | num | 失效 | 0: 正常;9: up自己删除;1: 其他原因删除 |
| cnt_info | obj | 状态数 | |
| link | str | 跳转uri | |
| ctime | num | 投稿时间 | 时间戳 |
@@ -139,7 +136,7 @@
查询收藏夹`id=1052622027`,每页5个视频,第`1`页的内容明细
```shell
-curl -G 'http://api.bilibili.com/x/v3/fav/resource/list' \
+curl -G 'https://api.bilibili.com/x/v3/fav/resource/list' \
--data-urlencode 'media_id=1052622027' \
--data-urlencode 'platform=web' \
--data-urlencode 'pn=1' \
@@ -324,7 +321,8 @@ curl -G 'http://api.bilibili.com/x/v3/fav/resource/list' \
"season": null
}
],
- "has_more": true
+ "has_more": true,
+ "ttl": 1703349018
}
}
```
@@ -333,7 +331,7 @@ curl -G 'http://api.bilibili.com/x/v3/fav/resource/list' \
## 获取收藏夹全部内容id
-> http://api.bilibili.com/x/v3/fav/resource/ids
+> https://api.bilibili.com/x/v3/fav/resource/ids
*请求方式:GET*
@@ -380,7 +378,7 @@ curl -G 'http://api.bilibili.com/x/v3/fav/resource/list' \
查询收藏夹`id=1052622027`的全部内容id
```shell
-curl -G 'http://api.bilibili.com/x/v3/fav/resource/ids' \
+curl -G 'https://api.bilibili.com/x/v3/fav/resource/ids' \
--data-urlencode 'media_id=1052622027' \
--data-urlencode 'platform=web' \
-b 'SESSDATA=xxx'
diff --git a/garb/color.md b/docs/garb/color.md
similarity index 96%
rename from garb/color.md
rename to docs/garb/color.md
index f391ddb..c27c16b 100644
--- a/garb/color.md
+++ b/docs/garb/color.md
@@ -1,13 +1,8 @@
# 主题色
-- [获取主题色基本信息1](#获取主题色基本信息1)
-- [获取主题色基本信息2](#获取主题色基本信息2)
-
----
-
## 获取主题色基本信息1
-> http://club.bilibili.com/api/query.skin.list.do
+> https://club.bilibili.com/api/query.skin.list.do
*请求方式:GET*
@@ -60,7 +55,7 @@
**示例:**
```shell
-curl -G 'http://club.bilibili.com/api/query.skin.list.do' \
+curl -G 'https://club.bilibili.com/api/query.skin.list.do' \
--data-urlencode 'access_key=xxx' \
--data-urlencode 'appkey=1d8b6e7d45233436' \
--data-urlencode 'build=6082000' \
@@ -149,7 +144,7 @@ curl -G 'http://club.bilibili.com/api/query.skin.list.do' \
## 获取主题色基本信息2
-> http://api.bilibili.com/x/garb/skin/color/list
+> https://api.bilibili.com/x/garb/skin/color/list
*请求方式:GET*
@@ -198,7 +193,7 @@ curl -G 'http://club.bilibili.com/api/query.skin.list.do' \
**示例:**
```shell
-curl -G 'http://api.bilibili.com/x/garb/skin/color/list' \
+curl -G 'https://api.bilibili.com/x/garb/skin/color/list' \
--data-urlencode 'mobi_app=android' \
--data-urlencode 'build=6082000' \
-b 'SESSDATA=xxx'
diff --git a/docs/garb/lottery.md b/docs/garb/lottery.md
new file mode 100644
index 0000000..5b22d56
--- /dev/null
+++ b/docs/garb/lottery.md
@@ -0,0 +1,1196 @@
+# 装扮/收藏集
+
+由 [#1080](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1080) 提供
+
+## 装扮/收藏集搜索API
+
+> https://api.bilibili.com/x/garb/v2/mall/home/search
+
+*请求方式: GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|----- |--- |------- |----- |--- |
+| key_word | str | 关键词 | 不必要 | |
+| ps | int | 每页返回数据的最大值 | 不必要 | |
+| pn | int | 当前页数 | 不必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-- |-- |-- |-- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 返回数据 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-|---|--|--|
+| list | array | 返回数据 | 若无则为 null |
+| ps | int | 每页返回数据的最大值 | 默认为20 |
+| pn | int | 当前页数 | 默认为1 |
+| total | int | 查询到数据的总个数 | |
+
+`data` 中的 `list` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-|---|--|--|
+| item_id | int | 装扮对应的id | 收藏集均为0,需要在properties获取 |
+| name | str | 装扮/收藏集名称 | |
+| group_id | int | ?分类的id | |
+| group_name | str | ?分类的名称 | |
+| part_id | int | 类型id | 装扮为6 收藏集为0 |
+| state | str | 当前状态 | 默认为“active” |
+| properties | obj | 见下方 | |
+| current_activity | obj | 见下方 | |
+| next_activity | int | ?下次活动的时间 | |
+| current_sources | int | ?活动开始时间 | |
+| finish_sources | int | ?活动结束时间 | |
+| sale_left_time | int | ?销售剩余时间 | |
+| sale_time_end | int | ?销售结束时间 | |
+| sale_surplus | int | 未知 | |
+| sale_count_desc | str | 销售量显示文本 | |
+| total_count_desc | str | 总量显示文本 | |
+| tag | str | 当前状态标签 | |
+| jump_link | str | 跳转链接 | |
+| sales_mode | int | ?销售状态 | |
+
+`list` 数组中的对象中的 `properties` 对象:
+
+共有字段:
+
+| 字段 | 类型 | 内容 | 备注|
+|-|---|--|--|
+| image_cover | str | 图片封面 | |
+| sale_bp_forever_raw | str | 价格 | 以0.01B币为单位|
+| type | str | 类型 | 收藏集为dlc_act, 装扮为ip|
+
+装扮特有:
+
+| 字段 | 类型 | 内容 | 备注|
+| - | - | ---- | ----- |
+| desc | str | 介绍文本 | 仅装扮|
+| fan_desc | str | 装扮名称 | 仅装扮|
+| fan_item_ids | str | 未知 | 仅装扮|
+| fan_mid | str | 该up的uid | 仅装扮|
+| fan_no_color | str | 十六进制颜色 | 仅装扮|
+| fan_recommend_desc | str | 装备说明 | 仅装扮|
+| fan_recommend_jump_type | str | 跳转类型 | 仅装扮|
+| fan_recommend_jump_value | str | 跳转值 | 仅装扮|
+| fan_share_image | str | 分享时的背景图 | 仅装扮|
+| gray_rule | str | 未知 | 仅装扮|
+| gray_rule_type | str | 未知 | 仅装扮|
+| image_cover_color | str | ?图片封面纯色背景 | 仅装扮|
+| is_hide | str | 是否隐藏 | 仅装扮|
+| item_id_card | str | 装扮背景卡片id | 仅装扮|
+| item_id_emoji | str | 装扮表情包id | 仅装扮|
+| item_id_thumbup | str | 装扮点赞动画id | 仅装扮|
+| open_platform_vip_discount | str | 是否有大会员减免 | 仅装扮|
+| owner_uid | str | UID | 默认为虚拟主播衍生品小货架, 仅装扮|
+| rank_investor_show | str | 未知 | 仅装扮|
+| realname_auth | str | ?是否需要实名认证 | 仅装扮|
+| sale_bp_pm_raw | str | 该装扮基础套餐价格 | 以0.01B币为单位, 仅装扮|
+| sale_buy_num_limit | str | 购买限额 | 仅装扮|
+| sale_quantity | str | 该装扮粉丝专属套餐限额 | 仅装扮|
+| sale_quantity_limit | str | 该装扮粉丝专属套餐是否限额 | 仅装扮|
+| sale_region_ip_limit | str | 该装扮限制购买地区 | 仅装扮|
+| sale_reserve_switch | str | 未知 | 仅装扮|
+| sale_time_begin | str | 开始售卖时的时间戳 | 仅装扮|
+| sale_type | str | 售卖类型 | 默认为pay, 仅装扮|
+| suit_card_type | str | 仅装扮 | |
+
+收藏集特有:
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | ---- | - | --------- |
+| book_amount | str | 购买总数 | 仅收藏集 |
+| dlc_act_id | str | 收藏集活动id | 仅收藏集 |
+| dlc_act_status | str | 收藏集活动状态 | 仅收藏集 |
+| dlc_is_free | str | 收藏集抽奖是否免费 | 仅收藏集 |
+| dlc_lottery_id | str | 收藏集抽奖id | 仅收藏集 |
+| dlc_lottery_sale_quantity | str | 购买总数 | 仅收藏集 |
+| dlc_lottery_type | str | ?抽奖类型 | 仅收藏集 |
+| dlc_sale_end_time | str | 收藏集抽奖结束时间 | 仅收藏集 |
+| dlc_sale_mode | str | 未知 | 仅收藏集 |
+| dlc_sale_start_time | str | 收藏集抽奖开始时间 | 仅收藏集 |
+| dlc_surplus_stock | str | 未知 | 仅收藏集 |
+
+`list` 数组中的对象中的 `current_activity` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | --- | --- | - |
+| type | str | 当前永久价格活动类型 | 装扮一般是open_platform_vip_discount, 收藏集一般是first_draw_discount |
+| time_limit | bool | 是否存在时间限制 | |
+| time_left | int | 剩余时间 | |
+| tag | str | 显示标签 | |
+| price_bp_forever | int | 永久价格 | 以0.01B币为单位 |
+| price_bp_month | int | 一个月的价格 | 以0.01B币为单位 |
+| type_month | str | 当前一个月的价格活动类型 | 仅装扮 |
+| tag_month | str | 显示标签 | 仅装扮 |
+| time_limit_month | bool | 是否存在时间限制 | 仅装扮 |
+| time_left_month | int | 剩余时间 | 仅装扮 |
+
+**示例:**
+
+搜索关键词为 `2233`:
+
+```shell
+curl -G 'https://api.bilibili.com/x/garb/v2/mall/home/search' \
+--data-urlencode 'key_word=2233' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "item_id": 0,
+ "name": "2024拜年纪-2233拜年画册",
+ "group_id": 70,
+ "group_name": "2024拜年纪-2233拜年画册",
+ "part_id": 0,
+ "state": "active",
+ "properties": {
+ "book_amount": "1395313",
+ "dlc_act_id": "279",
+ "dlc_act_status": "2",
+ "dlc_is_free": "0",
+ "dlc_lottery_id": "256",
+ "dlc_lottery_sale_quantity": "313028",
+ "dlc_lottery_type": "1",
+ "dlc_sale_end_time": "2114406245",
+ "dlc_sale_mode": "1",
+ "dlc_sale_start_time": "1707458400",
+ "dlc_surplus_stock": "0",
+ "image_cover": "http://i0.hdslb.com/bfs/archive/f96a8cf6866ccef8f54de4773acf0cb07b915ac6.png",
+ "sale_bp_forever_raw": "990",
+ "type": "dlc_act"
+ },
+ "current_activity": null,
+ "next_activity": {
+ "type": "first_draw_discount",
+ "time_limit": false,
+ "time_left": -1728418723,
+ "tag": "大会员首抽",
+ "price_bp_month": 490,
+ "price_bp_forever": 490,
+ "type_month": "",
+ "tag_month": "",
+ "time_limit_month": false,
+ "time_left_month": 0
+ },
+ "current_sources": null,
+ "finish_sources": null,
+ "sale_left_time": -1728418723,
+ "sale_time_end": -1728418723,
+ "sale_surplus": 0,
+ "sale_count_desc": "31万+",
+ "total_count_desc": "已售31万+份",
+ "tag": "",
+ "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live\u0026act_id=279\u0026hybrid_set_header=2\u0026lottery_id=256",
+ "sales_mode": 0
+ },
+ {
+ "item_id": 0,
+ "name": "2024 BML\u0026BW 2233收藏集-2233福利卡池",
+ "group_id": 70,
+ "group_name": "2024 BML\u0026BW 2233收藏集-2233福利卡池",
+ "part_id": 0,
+ "state": "active",
+ "properties": {
+ "book_amount": "4376",
+ "dlc_act_id": "102962",
+ "dlc_act_status": "2",
+ "dlc_is_free": "1",
+ "dlc_lottery_id": "102966",
+ "dlc_lottery_sale_quantity": "2677",
+ "dlc_lottery_type": "2",
+ "dlc_sale_end_time": "1729828800",
+ "dlc_sale_mode": "2",
+ "dlc_sale_start_time": "1721876400",
+ "dlc_surplus_stock": "0",
+ "image_cover": "https://i0.hdslb.com/bfs/garb/4a374316b1e9a07cffeccbdeff585c472dcdcc26.png",
+ "sale_bp_forever_raw": "0",
+ "type": "dlc_act"
+ },
+ "current_activity": null,
+ "next_activity": null,
+ "current_sources": null,
+ "finish_sources": null,
+ "sale_left_time": -1728418723,
+ "sale_time_end": -1728418723,
+ "sale_surplus": 0,
+ "sale_count_desc": "2千+",
+ "total_count_desc": "已发放2千+份",
+ "tag": "限时DLC",
+ "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live\u0026act_id=102962\u0026hybrid_set_header=2\u0026lottery_id=102966",
+ "sales_mode": 0
+ },
+ {
+ "item_id": 0,
+ "name": "2233·幻境序曲-长夜",
+ "group_id": 70,
+ "group_name": "2233·幻境序曲-长夜",
+ "part_id": 0,
+ "state": "active",
+ "properties": {
+ "book_amount": "228065",
+ "dlc_act_id": "102161",
+ "dlc_act_status": "2",
+ "dlc_is_free": "0",
+ "dlc_lottery_id": "103087",
+ "dlc_lottery_sale_quantity": "71200",
+ "dlc_lottery_type": "2",
+ "dlc_sale_end_time": "2114406245",
+ "dlc_sale_mode": "1",
+ "dlc_sale_start_time": "1722139200",
+ "dlc_surplus_stock": "0",
+ "image_cover": "https://i0.hdslb.com/bfs/garb/f7e4f434ba6b93434b9e60df3c57a07552af4ca1.png",
+ "sale_bp_forever_raw": "990",
+ "type": "dlc_act"
+ },
+ "current_activity": null,
+ "next_activity": {
+ "type": "first_draw_discount",
+ "time_limit": false,
+ "time_left": -1728418723,
+ "tag": "大会员首抽",
+ "price_bp_month": 490,
+ "price_bp_forever": 490,
+ "type_month": "",
+ "tag_month": "",
+ "time_limit_month": false,
+ "time_left_month": 0
+ },
+ "current_sources": null,
+ "finish_sources": null,
+ "sale_left_time": -1728418723,
+ "sale_time_end": -1728418723,
+ "sale_surplus": 0,
+ "sale_count_desc": "7万+",
+ "total_count_desc": "已售7万+份",
+ "tag": "DLC池",
+ "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live\u0026act_id=102161\u0026hybrid_set_header=2\u0026lottery_id=103087",
+ "sales_mode": 0
+ },
+ {
+ "item_id": 0,
+ "name": "2233·群星闪耀时-双子座",
+ "group_id": 70,
+ "group_name": "2233·群星闪耀时-双子座",
+ "part_id": 0,
+ "state": "active",
+ "properties": {
+ "book_amount": "1164544",
+ "dlc_act_id": "113",
+ "dlc_act_status": "2",
+ "dlc_is_free": "0",
+ "dlc_lottery_id": "16",
+ "dlc_lottery_sale_quantity": "572712",
+ "dlc_lottery_type": "1",
+ "dlc_sale_end_time": "2114406245",
+ "dlc_sale_mode": "1",
+ "dlc_sale_start_time": "1686196800",
+ "dlc_surplus_stock": "0",
+ "image_cover": "http://i0.hdslb.com/bfs/archive/ed35d12a3dce7764d6cb5b02cb4a459373472522.jpg",
+ "sale_bp_forever_raw": "990",
+ "type": "dlc_act"
+ },
+ "current_activity": null,
+ "next_activity": {
+ "type": "first_draw_discount",
+ "time_limit": false,
+ "time_left": -1728418723,
+ "tag": "大会员首抽",
+ "price_bp_month": 90,
+ "price_bp_forever": 90,
+ "type_month": "",
+ "tag_month": "",
+ "time_limit_month": false,
+ "time_left_month": 0
+ },
+ "current_sources": null,
+ "finish_sources": null,
+ "sale_left_time": -1728418723,
+ "sale_time_end": -1728418723,
+ "sale_surplus": 0,
+ "sale_count_desc": "57万+",
+ "total_count_desc": "已售57万+份",
+ "tag": "",
+ "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live\u0026act_id=113\u0026hybrid_set_header=2\u0026lottery_id=16",
+ "sales_mode": 0
+ },
+ {
+ "item_id": 39389,
+ "name": "2233人生百戏-花木兰",
+ "group_id": 70,
+ "group_name": "2233人生百戏-花木兰",
+ "part_id": 6,
+ "state": "active",
+ "properties": {
+ "desc": "为从军设妙计女扮男装,涉千山越万水亲赴戎机。2233人生百戏·花木兰装扮上线啦!本套装包括动态卡片、点赞动效和表情包,永久购买还能成为认证粉丝,领取粉丝专属装扮!",
+ "fan_desc": "人生百戏-花木兰",
+ "fan_id": "人生百戏-花木兰",
+ "fan_item_ids": "39335,39384,39353,39354",
+ "fan_mid": "35365327",
+ "fan_no_color": "#eb3d3e",
+ "fan_recommend_desc": "为从军设妙计女扮男装,涉千山越万水亲赴戎机。",
+ "fan_recommend_jump_type": "url",
+ "fan_recommend_jump_value": "https://space.bilibili.com/35365327?spm_id_from=333.337.0.0",
+ "fan_share_image": "https://i0.hdslb.com/bfs/garb/item/5ddd3f72ef2a938e9125851f488068012b841ad4.jpg",
+ "gray_rule": "true",
+ "gray_rule_type": "all",
+ "image_cover": "https://i0.hdslb.com/bfs/garb/item/e21ec12047bcd93e6afb8e52a68eb9835cd54a23.jpg",
+ "image_cover_color": "#d8b796",
+ "is_hide": "false",
+ "item_id_card": "39334",
+ "item_id_emoji": "39352",
+ "item_id_thumbup": "39336",
+ "open_platform_vip_discount": "true",
+ "owner_uid": "647193094",
+ "rank_investor_show": "false",
+ "realname_auth": "false",
+ "sale_bp_forever_raw": "5000",
+ "sale_bp_pm_raw": "800",
+ "sale_buy_num_limit": "100",
+ "sale_quantity": "20000",
+ "sale_quantity_limit": "true",
+ "sale_region_ip_limit": "全球",
+ "sale_reserve_switch": "false",
+ "sale_time_begin": "1666868400",
+ "sale_type": "pay",
+ "suit_card_type": "big_img",
+ "type": "ip"
+ },
+ "current_activity": null,
+ "next_activity": {
+ "type": "open_platform_vip_discount",
+ "time_limit": true,
+ "time_left": 417469277,
+ "tag": "大会员平台折扣",
+ "price_bp_month": 640,
+ "price_bp_forever": 4000,
+ "type_month": "open_platform_vip_discount",
+ "tag_month": "大会员平台折扣",
+ "time_limit_month": true,
+ "time_left_month": 417469277
+ },
+ "current_sources": null,
+ "finish_sources": null,
+ "sale_left_time": -61550323,
+ "sale_time_end": -1728418723,
+ "sale_surplus": 8650,
+ "sale_count_desc": "1万+",
+ "total_count_desc": "已售1万+份",
+ "tag": "",
+ "jump_link": "https://www.bilibili.com/h5/mall/suit/detail?navhide=1\u0026id=39389",
+ "sales_mode": 0
+ },
+ {
+ "item_id": 4259,
+ "name": "2233白色情人节",
+ "group_id": 70,
+ "group_name": "2233白色情人节",
+ "part_id": 6,
+ "state": "active",
+ "properties": {
+ "desc": "shot你的心——无论是谁都拥有爱的权利,快换上白色情人节专属装扮来遇见心里的那个ta吧!本套装包括头像挂件、动态卡片、点赞动效和表情包,永久购买还能成为认证粉丝,领取粉丝专属装扮!",
+ "fan_desc": "白色情人节",
+ "fan_id": "2233白色情人节",
+ "fan_item_ids": "4257,4230,4256,4255,4253,4254",
+ "fan_mid": "174501086",
+ "fan_no_color": "#f85574",
+ "fan_recommend_desc": "平淡日常中迎来浪漫的节日,象征爱情的丘比特们悄悄来到少女们身边,用爱之箭觉醒了懵懂悸动的心。新鲜的玫瑰,闪耀光泽的草莓,白色情人节这天为你准备不一样的惊喜。",
+ "fan_recommend_jump_type": "url",
+ "fan_recommend_jump_value": "https://b23.tv/54WVWS",
+ "fan_share_image": "https://i0.hdslb.com/bfs/garb/item/30e3f1b234dd33a2a5446dd7d05b31835ac74d4b.jpg",
+ "gray_rule": "true",
+ "gray_rule_type": "all",
+ "image_cover": "https://i0.hdslb.com/bfs/garb/item/a8d60a7d4f1f5a5de667b307736f701cb39c0741.jpg",
+ "image_cover_color": "#a3a8ec",
+ "image_cover_long": "https://i0.hdslb.com/bfs/garb/item/5ac3bb024d42ff0f26de07ce974351d62587c6ea.jpg",
+ "image_desc": "https://i0.hdslb.com/bfs/garb/item/cfe753a010d124a95fb311c372a5be69d82c8e13.jpg",
+ "is_hide": "false",
+ "item_id_card": "4231",
+ "item_id_emoji": "4252",
+ "item_id_pendant": "4229",
+ "item_id_thumbup": "4232",
+ "open_platform_vip_discount": "true",
+ "owner_uid": "647193094",
+ "rank_investor_show": "true",
+ "realname_auth": "false",
+ "sale_bp_forever_raw": "5900",
+ "sale_bp_pm_raw": "800",
+ "sale_buy_num_limit": "100",
+ "sale_quantity": "52000",
+ "sale_quantity_limit": "true",
+ "sale_region_ip_limit": "全球",
+ "sale_reserve_switch": "false",
+ "sale_time_begin": "1615694400",
+ "sale_type": "pay",
+ "suit_card_type": "big_img",
+ "type": "ip"
+ },
+ "current_activity": null,
+ "next_activity": {
+ "type": "open_platform_vip_discount",
+ "time_limit": true,
+ "time_left": 417469277,
+ "tag": "大会员平台折扣",
+ "price_bp_month": 640,
+ "price_bp_forever": 4720,
+ "type_month": "open_platform_vip_discount",
+ "tag_month": "大会员平台折扣",
+ "time_limit_month": true,
+ "time_left_month": 417469277
+ },
+ "current_sources": null,
+ "finish_sources": null,
+ "sale_left_time": -112724323,
+ "sale_time_end": -1728418723,
+ "sale_surplus": 0,
+ "sale_count_desc": "5万+",
+ "total_count_desc": "已售5万+份",
+ "tag": "粉丝套装已售罄",
+ "jump_link": "https://www.bilibili.com/h5/mall/suit/detail?navhide=1\u0026id=4259",
+ "sales_mode": 0
+ },
+ {
+ "item_id": 0,
+ "name": "2233·少女日记-蔚蓝幻想曲",
+ "group_id": 70,
+ "group_name": "2233·少女日记-蔚蓝幻想曲",
+ "part_id": 0,
+ "state": "active",
+ "properties": {
+ "book_amount": "100310",
+ "dlc_act_id": "103244",
+ "dlc_act_status": "2",
+ "dlc_is_free": "0",
+ "dlc_lottery_id": "103885",
+ "dlc_lottery_sale_quantity": "16563",
+ "dlc_lottery_type": "2",
+ "dlc_sale_end_time": "2114406245",
+ "dlc_sale_mode": "1",
+ "dlc_sale_start_time": "1727236800",
+ "dlc_surplus_stock": "0",
+ "image_cover": "http://i0.hdslb.com/bfs/archive/a04b3e9ef354493a0890a9197412f1c77e01ba0f.jpg",
+ "sale_bp_forever_raw": "990",
+ "type": "dlc_act"
+ },
+ "current_activity": null,
+ "next_activity": {
+ "type": "first_draw_discount",
+ "time_limit": false,
+ "time_left": -1728418723,
+ "tag": "大会员首抽",
+ "price_bp_month": 490,
+ "price_bp_forever": 490,
+ "type_month": "",
+ "tag_month": "",
+ "time_limit_month": false,
+ "time_left_month": 0
+ },
+ "current_sources": null,
+ "finish_sources": null,
+ "sale_left_time": -1728418723,
+ "sale_time_end": -1728418723,
+ "sale_surplus": 0,
+ "sale_count_desc": "1万+",
+ "total_count_desc": "已售1万+份",
+ "tag": "DLC池",
+ "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live\u0026act_id=103244\u0026hybrid_set_header=2\u0026lottery_id=103885",
+ "sales_mode": 0
+ },
+ {
+ "item_id": 0,
+ "name": "2233·少女日记-十四岁生日",
+ "group_id": 70,
+ "group_name": "2233·少女日记-十四岁生日",
+ "part_id": 0,
+ "state": "active",
+ "properties": {
+ "book_amount": "100310",
+ "dlc_act_id": "103244",
+ "dlc_act_status": "2",
+ "dlc_is_free": "0",
+ "dlc_lottery_id": "103247",
+ "dlc_lottery_sale_quantity": "83747",
+ "dlc_lottery_type": "1",
+ "dlc_sale_end_time": "2114406245",
+ "dlc_sale_mode": "1",
+ "dlc_sale_start_time": "1723780800",
+ "dlc_surplus_stock": "0",
+ "image_cover": "https://i0.hdslb.com/bfs/garb/9c338eb4841cad917665140cc08c7d14b5c7e0bf.png",
+ "sale_bp_forever_raw": "990",
+ "type": "dlc_act"
+ },
+ "current_activity": null,
+ "next_activity": {
+ "type": "first_draw_discount",
+ "time_limit": false,
+ "time_left": -1728418723,
+ "tag": "大会员首抽",
+ "price_bp_month": 490,
+ "price_bp_forever": 490,
+ "type_month": "",
+ "tag_month": "",
+ "time_limit_month": false,
+ "time_left_month": 0
+ },
+ "current_sources": null,
+ "finish_sources": null,
+ "sale_left_time": -1728418723,
+ "sale_time_end": -1728418723,
+ "sale_surplus": 0,
+ "sale_count_desc": "8万+",
+ "total_count_desc": "已售8万+份",
+ "tag": "",
+ "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live\u0026act_id=103244\u0026hybrid_set_header=2\u0026lottery_id=103247",
+ "sales_mode": 0
+ },
+ {
+ "item_id": 0,
+ "name": "2024 BML\u0026BW 2233收藏集-BML\u0026BW2024",
+ "group_id": 70,
+ "group_name": "2024 BML\u0026BW 2233收藏集-BML\u0026BW2024",
+ "part_id": 0,
+ "state": "active",
+ "properties": {
+ "book_amount": "4376",
+ "dlc_act_id": "102962",
+ "dlc_act_status": "2",
+ "dlc_is_free": "0",
+ "dlc_lottery_id": "102963",
+ "dlc_lottery_sale_quantity": "1699",
+ "dlc_lottery_type": "1",
+ "dlc_sale_end_time": "2114406245",
+ "dlc_sale_mode": "1",
+ "dlc_sale_start_time": "1721876400",
+ "dlc_surplus_stock": "0",
+ "image_cover": "https://i0.hdslb.com/bfs/garb/6c2d68faf143c33b484b110e2221ab15a0a1f85c.png",
+ "sale_bp_forever_raw": "990",
+ "type": "dlc_act"
+ },
+ "current_activity": null,
+ "next_activity": {
+ "type": "first_draw_discount",
+ "time_limit": false,
+ "time_left": -1728418723,
+ "tag": "大会员首抽",
+ "price_bp_month": 490,
+ "price_bp_forever": 490,
+ "type_month": "",
+ "tag_month": "",
+ "time_limit_month": false,
+ "time_left_month": 0
+ },
+ "current_sources": null,
+ "finish_sources": null,
+ "sale_left_time": -1728418723,
+ "sale_time_end": -1728418723,
+ "sale_surplus": 0,
+ "sale_count_desc": "1千+",
+ "total_count_desc": "已售1千+份",
+ "tag": "",
+ "jump_link": "https://www.bilibili.com/h5/mall/digital-card/home?-Abrowser=live\u0026act_id=102962\u0026hybrid_set_header=2\u0026lottery_id=102963",
+ "sales_mode": 0
+ }
+ ],
+ "pn": 1,
+ "ps": 20,
+ "total": 187
+ }
+}
+```
+
+
+
+## 收藏集信息API
+
+> https://api.bilibili.com/x/vas/dlc_act/lottery_home_detail
+
+*请求方式: GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | ---- | ---- | ---- | ---- |
+| act_id | int | 收藏集活动id | 必要 | |
+| lottery_id | int | 收藏集抽奖id|不必要| 但缺了不返回数据 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 返回数据 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-|-|-|-|
+| lottery_id | int | 收藏集抽奖id | |
+| name | str | 收藏集抽奖名称 | |
+| item_list | array | 可抽出的物品列表 | |
+| collect_list | obj | 见下方 | |
+| button_bubble | null | 未知 | |
+| guide_info | null | 未知 | |
+| is_booked | int | 未知 | |
+| total_book_cnt | int | 未知 | |
+| is_fission | int | 未知 | |
+| physical_exchange | int | 未知 | |
+
+`data` 中的 `item_list` 数组中的对象:
+
+|字段 | 类型 | 内容 | 备注|
+|-|-|-|-|
+|item_type | int | 物品类型 | 目前只拿到个1, 其他值未知|
+|card_info | obj | 见下方 | |
+
+`item_list` 数组中的对象中的 `card_info` 对象:
+
+|字段 | 类型 | 内容 | 备注 |
+|-|-|-|-|
+|card_type_id | int | 该卡片id | |
+|card_name | str | 该卡片名称 | |
+|card_img | str | 该卡片图片 | 无水印|
+|card_type | int | int | 未知|
+|video_list | array | 该卡片动态视频 | 无水印|
+|is_physical_orientation | int | 该卡片旋转方向 | |
+|card_scarcity | int | 该卡片稀有度 | |
+|is_mute | int | 该卡片是否静音 | |
+|width | int | 该卡片像素宽度 | |
+|height | int | 该卡片像素高度 | |
+|card_ext_text | str | ?该卡片文件名字符串 | |
+|card_img_download | str | 该卡片图片 | 有水印|
+|video_list_download | array | 该卡片动态视频 | 有水印|
+|subtitles_url | 未知 | | |
+|play | null | 未知 | |
+|tag | null | 未知 | |
+|card_sub_type | int | 未知 | |
+|is_new_tag | int | 未知 | |
+|is_up_tag | int | 未知 | |
+|is_limited_card | int | 未知 | |
+|stock_info | null | 未知 | |
+
+`data` 中的 `collect_list` 对象:
+
+| 字段 | 类型 | 内容 | 备注|
+|-|-|-|-|
+| collect_infos | array | 见下方 | |
+| collect_chain | null | 未知 | |
+
+`collect_list` 中的 `collect_infos` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-|-|-|-|
+| collect_id | int | 收集品id | |
+| start_time | int | 开始时间 | |
+| end_time | int | 结束时间 | |
+| redeem_text | str | 兑换条件 | |
+| redeem_item_type | int | 兑换物类型 | |
+| redeem_item_id | str | 兑换物id | |
+| redeem_item_name | str | 兑换物名称 | |
+| redeem_item_image | str | 兑换物预览图片 | |
+| owned_item_amount | int | 拥有的数量 | |
+| require_item_amount | int | 需要的数量 | |
+| has_redeemed_cnt | int | 兑换次数 | |
+| effective_forever | int | 是否永久有效 | |
+| redeem_item_image_download | str | 未知 | |
+| card_item | obj | 见下方 | 有时为 null |
+| jump_url | str | ?跳转链接 | |
+| redeem_cond_type | str | 当前兑换状态 | |
+| remain_stock | int | 当前库存 | |
+| total_stock | int | 总库存 | |
+| lottery_id | int | 抽奖id | |
+| reward_tag | str | 奖励显示标签 | |
+| redeem_detail_image | str | 兑换详情图片 | |
+| redeem_detail_videos | null | 未知 | |
+| sort | int | 排序 | |
+| redeem_items_optional | null | 未知 | |
+| unlock_condition | obj | 见下方 | |
+
+`collect_infos` 数组中的对象中的 `card_item` 对象:
+
+| 字段 | 类型 | 内容 | 备注|
+|-|-|-|-|
+| card_type_info | null | | |
+| card_asset_info | null | | |
+| play | null | | |
+| tag | null | | |
+
+`collect_infos` 数组中的对象中的 `unlock_condition` 对象:
+
+|字段 | 类型 | 内容 | 备注|
+|-|-|-|-|
+|unlocked | bool | 是否解锁 | |
+|lock_type | int | 解锁类型 | |
+|expire_at | int | 过期与 | |
+|unlocked_at | int | 解锁于 | |
+|unlock_threshold | int | ?解锁起点 | |
+|current_threshold | int | ?当前起点 | |
+
+**示例:**
+
+```shell
+curl -G --url 'https://api.bilibili.com/x/vas/dlc_act/lottery_home_detail' \
+--url-query 'act_id=111' \
+--url-query 'lottery_id=15'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "lottery_id": 15,
+ "name": "夏日萌菜",
+ "item_list": [
+ {
+ "item_type": 1,
+ "card_info": {
+ "card_type_id": 700903,
+ "card_name": "水中嬉戏·隐藏",
+ "card_img": "https://i0.hdslb.com/bfs/baselabs/d41acfc3bfcc9032a9759fbd9e64147a6d9a24b0.png",
+ "card_type": 2,
+ "video_list": [
+ "https://upos-hz-mirrorakam.akamaized.net/panguxcodeboss/2b/y2/_000008vnv2ddoooah248hqoyz2gy22b-1-152111110023.mp4?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1723459855&gen=playurlv2&os=akam&oi=1823807565&trid=400d9529a562468c8312c1f4c4beb2e3B&mid=0&platform=html5&og=cos&upsig=d22ca6102adb9ffe257f702047be6ef2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&hdnts=exp=1723459855~hmac=753ff946c9e4b3813eb72c744ed3a399ba9a225fe4767a7a03835890fcbe4b8a&bvc=vod&nettype=0&orderid=0,1&logo=00000000&f=B_0_0"
+ ],
+ "is_physical_orientation": 0,
+ "card_scarcity": 40,
+ "is_mute": 0,
+ "width": 1242,
+ "height": 1862,
+ "card_ext_text": "",
+ "card_img_download": "https://i0.hdslb.com/bfs/garb/d38c42b6f1151298888da5902bca5a41e14f67e1.png",
+ "video_list_download": [
+ "https://upos-hz-mirrorakam.akamaized.net/panguxcodeboss/digital_watermark/ib/30/_00003d7cuie74gr9z2322d7js5b30ib-teaser.mp4?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1723459855&gen=playurlv2&os=akam&oi=1823807565&trid=400d9529a562468c8312c1f4c4beb2e3B&mid=0&platform=html5&og=hw&upsig=24512302cfa3b1f762f3ad08a0a2f5fe&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&hdnts=exp=1723459855~hmac=5dc3cdfca31fca94c29a2ec945589ff319e97c3291dec2685184ec4083616cc2&bvc=vod&nettype=0&orderid=0,1&logo=00000000&f=B_0_0"
+ ],
+ "subtitles_url": "",
+ "play": null,
+ "tag": null,
+ "card_sub_type": 0,
+ "is_new_tag": 0,
+ "is_up_tag": 0,
+ "is_limited_card": 0,
+ "stock_info": null
+ }
+ },
+ {
+ "item_type": 1,
+ "card_info": {
+ "card_type_id": 700902,
+ "card_name": "轻纱花语·隐藏",
+ "card_img": "https://i0.hdslb.com/bfs/baselabs/e4721d06a5c435be216b5011f0604c9e07d5e4af.png",
+ "card_type": 2,
+ "video_list": [
+ "https://upos-hz-mirrorakam.akamaized.net/panguxcodeboss/jb/4u/_00001f04wekkvpmr92osvwpej1e4ujb-1-152111110023.mp4?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1723459855&gen=playurlv2&os=akam&oi=1823807565&trid=400d9529a562468c8312c1f4c4beb2e3B&mid=0&platform=html5&og=cos&upsig=ad574839c71e5327783acf248b552b3d&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&hdnts=exp=1723459855~hmac=49276ec1afce1a8f571e257fb6d2ab7488f623aa50c2c3b7252258be72315c5e&bvc=vod&nettype=0&orderid=0,1&logo=00000000&f=B_0_0"
+ ],
+ "is_physical_orientation": 0,
+ "card_scarcity": 30,
+ "is_mute": 0,
+ "width": 1242,
+ "height": 1862,
+ "card_ext_text": "",
+ "card_img_download": "https://i0.hdslb.com/bfs/garb/0e49e7c8108a98944a96bfa594cf7f74c72398cf.png",
+ "video_list_download": [
+ "https://upos-hz-mirrorakam.akamaized.net/panguxcodeboss/digital_watermark/nb/58/_000007ovzgblf574s1ywvm7inwx58nb-teaser.mp4?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1723459855&gen=playurlv2&os=akam&oi=1823807565&trid=400d9529a562468c8312c1f4c4beb2e3B&mid=0&platform=html5&og=cos&upsig=ec9de21147240e94494d736f277dfb64&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&hdnts=exp=1723459855~hmac=2370473349a25fae0ea023f65f1e09c70b45d086831eef5f4727b8443acdf9f5&bvc=vod&nettype=0&orderid=0,1&logo=00000000&f=B_0_0"
+ ],
+ "subtitles_url": "",
+ "play": null,
+ "tag": null,
+ "card_sub_type": 0,
+ "is_new_tag": 0,
+ "is_up_tag": 0,
+ "is_limited_card": 0,
+ "stock_info": null
+ }
+ },
+ {
+ "item_type": 1,
+ "card_info": {
+ "card_type_id": 700904,
+ "card_name": "甜心女仆",
+ "card_img": "https://i0.hdslb.com/bfs/baselabs/e1f9c56a8f49910d07852f2bd648fee910f36ff6.png",
+ "card_type": 2,
+ "video_list": [
+ "https://upos-hz-mirrorakam.akamaized.net/panguxcodeboss/gb/j6/_000015vmteklku8oj1ypmp1yjijj6gb-1-152111110023.mp4?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1723459855&gen=playurlv2&os=akam&oi=1823807565&trid=400d9529a562468c8312c1f4c4beb2e3B&mid=0&platform=html5&og=cos&upsig=c7412fe7b155deecbfea939f7c3d1b21&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&hdnts=exp=1723459855~hmac=8989673c367aa0ffbe747cdc66129a6d1698f1c2b60ace24861ad62127cdd6da&bvc=vod&nettype=0&orderid=0,1&logo=00000000&f=B_0_0"
+ ],
+ "is_physical_orientation": 0,
+ "card_scarcity": 20,
+ "is_mute": 0,
+ "width": 1242,
+ "height": 1862,
+ "card_ext_text": "",
+ "card_img_download": "https://i0.hdslb.com/bfs/garb/e6c69329d843603166fac8d41682c3489fd137d4.png",
+ "video_list_download": [
+ "https://upos-hz-mirrorakam.akamaized.net/panguxcodeboss/digital_watermark/zb/eq/_000018oi0e68wv4id2vkrk9ovpteqzb-teaser.mp4?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1723459855&gen=playurlv2&os=akam&oi=1823807565&trid=400d9529a562468c8312c1f4c4beb2e3B&mid=0&platform=html5&og=hw&upsig=f972e8cd996d058deb4e0ffb1d57671e&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&hdnts=exp=1723459855~hmac=99054c626717b4ba61c01bbb0fe59f67feac394b89e19e4bbf95290d3a425f94&bvc=vod&nettype=0&orderid=0,1&logo=00000000&f=B_0_0"
+ ],
+ "subtitles_url": "",
+ "play": null,
+ "tag": null,
+ "card_sub_type": 0,
+ "is_new_tag": 0,
+ "is_up_tag": 0,
+ "is_limited_card": 0,
+ "stock_info": null
+ }
+ },
+ {
+ "item_type": 1,
+ "card_info": {
+ "card_type_id": 700901,
+ "card_name": "约会憧憬",
+ "card_img": "https://i0.hdslb.com/bfs/baselabs/924ef9a71bf39010935b4a43845bec13c8a2022c.png",
+ "card_type": 1,
+ "video_list": null,
+ "is_physical_orientation": 0,
+ "card_scarcity": 10,
+ "is_mute": 0,
+ "width": 1242,
+ "height": 1863,
+ "card_ext_text": "",
+ "card_img_download": "https://i0.hdslb.com/bfs/garb/40a9ff949ca7a50dbce146ad28fbb567c2583261.png",
+ "video_list_download": null,
+ "subtitles_url": "",
+ "play": null,
+ "tag": null,
+ "card_sub_type": 0,
+ "is_new_tag": 0,
+ "is_up_tag": 0,
+ "is_limited_card": 0,
+ "stock_info": null
+ }
+ },
+ {
+ "item_type": 1,
+ "card_info": {
+ "card_type_id": 700900,
+ "card_name": "夏日小憩",
+ "card_img": "https://i0.hdslb.com/bfs/baselabs/0eddbfc70200f16bef06acc88ef132eb25ede52d.png",
+ "card_type": 1,
+ "video_list": null,
+ "is_physical_orientation": 0,
+ "card_scarcity": 10,
+ "is_mute": 0,
+ "width": 1242,
+ "height": 1863,
+ "card_ext_text": "",
+ "card_img_download": "https://i0.hdslb.com/bfs/garb/61e26e17705e06ecdfdb9ff97befb19c702cf81e.png",
+ "video_list_download": null,
+ "subtitles_url": "",
+ "play": null,
+ "tag": null,
+ "card_sub_type": 0,
+ "is_new_tag": 0,
+ "is_up_tag": 0,
+ "is_limited_card": 0,
+ "stock_info": null
+ }
+ },
+ {
+ "item_type": 1,
+ "card_info": {
+ "card_type_id": 700899,
+ "card_name": "微风校园",
+ "card_img": "https://i0.hdslb.com/bfs/baselabs/bbeaf7993566684e328e74d8ef7c47e6242869a2.png",
+ "card_type": 1,
+ "video_list": null,
+ "is_physical_orientation": 0,
+ "card_scarcity": 10,
+ "is_mute": 0,
+ "width": 1242,
+ "height": 1863,
+ "card_ext_text": "",
+ "card_img_download": "https://i0.hdslb.com/bfs/garb/8ac61045334699d621363ccac87153a7128ef0c3.png",
+ "video_list_download": null,
+ "subtitles_url": "",
+ "play": null,
+ "tag": null,
+ "card_sub_type": 0,
+ "is_new_tag": 0,
+ "is_up_tag": 0,
+ "is_limited_card": 0,
+ "stock_info": null
+ }
+ },
+ {
+ "item_type": 1,
+ "card_info": {
+ "card_type_id": 700898,
+ "card_name": "萌宠幻想",
+ "card_img": "https://i0.hdslb.com/bfs/baselabs/f93f200ec862b4520b30e8f03219fbaca91a2089.png",
+ "card_type": 1,
+ "video_list": null,
+ "is_physical_orientation": 0,
+ "card_scarcity": 10,
+ "is_mute": 0,
+ "width": 1242,
+ "height": 1863,
+ "card_ext_text": "",
+ "card_img_download": "https://i0.hdslb.com/bfs/garb/93e59f3080f6b8070b0d0621496e4ed6cb20cf8f.png",
+ "video_list_download": null,
+ "subtitles_url": "",
+ "play": null,
+ "tag": null,
+ "card_sub_type": 0,
+ "is_new_tag": 0,
+ "is_up_tag": 0,
+ "is_limited_card": 0,
+ "stock_info": null
+ }
+ },
+ {
+ "item_type": 1,
+ "card_info": {
+ "card_type_id": 700897,
+ "card_name": "空中环游",
+ "card_img": "https://i0.hdslb.com/bfs/baselabs/fc0c020091c0a9fb1778c420bc4f9773a72ea7ba.png",
+ "card_type": 1,
+ "video_list": null,
+ "is_physical_orientation": 0,
+ "card_scarcity": 10,
+ "is_mute": 0,
+ "width": 1242,
+ "height": 1863,
+ "card_ext_text": "",
+ "card_img_download": "https://i0.hdslb.com/bfs/garb/c1c6c9ca84b584bf5f2b0e1ec7d239eb935e4d44.png",
+ "video_list_download": null,
+ "subtitles_url": "",
+ "play": null,
+ "tag": null,
+ "card_sub_type": 0,
+ "is_new_tag": 0,
+ "is_up_tag": 0,
+ "is_limited_card": 0,
+ "stock_info": null
+ }
+ }
+ ],
+ "collect_list": {
+ "collect_infos": [
+ {
+ "collect_id": 0,
+ "start_time": 1685372400,
+ "end_time": 2114406245,
+ "redeem_text": "1抽必得勋章,可应用为评论背景&动态卡片",
+ "redeem_item_type": 1001,
+ "redeem_item_id": "",
+ "redeem_item_name": "夏日萌菜勋章",
+ "redeem_item_image": "http://i0.hdslb.com/bfs/archive/b3d915c6ad88609fb658393585f018459a7e620d.png",
+ "owned_item_amount": 0,
+ "require_item_amount": 1,
+ "has_redeemed_cnt": 0,
+ "effective_forever": 1,
+ "redeem_item_image_download": "",
+ "card_item": null,
+ "jump_url": "",
+ "redeem_cond_type": "",
+ "remain_stock": 0,
+ "total_stock": -1,
+ "lottery_id": 0,
+ "reward_tag": "",
+ "redeem_detail_image": "",
+ "redeem_detail_videos": null,
+ "sort": 0,
+ "redeem_items_optional": null,
+ "unlock_condition": {
+ "unlocked": true,
+ "lock_type": 0,
+ "expire_at": 0,
+ "unlocked_at": 0,
+ "unlock_threshold": 0,
+ "current_threshold": 0
+ }
+ },
+ {
+ "collect_id": 172,
+ "start_time": 1691640000,
+ "end_time": 2114406245,
+ "redeem_text": "抽出任意5张不同卡牌,即可领取,单UID仅可领取一次",
+ "redeem_item_type": 5,
+ "redeem_item_id": "56658",
+ "redeem_item_name": "夏日萌菜个性主题",
+ "redeem_item_image": "https://i0.hdslb.com/bfs/garb/48f755d6d08d96bfebcadee0be4bc34ce42421de.jpg",
+ "owned_item_amount": 0,
+ "require_item_amount": 5,
+ "has_redeemed_cnt": 0,
+ "effective_forever": 1,
+ "redeem_item_image_download": "",
+ "card_item": {
+ "card_type_info": null,
+ "play": null,
+ "tag": null,
+ "card_asset_info": null
+ },
+ "jump_url": "",
+ "redeem_cond_type": "scarcity",
+ "remain_stock": -1,
+ "total_stock": -1,
+ "lottery_id": 0,
+ "reward_tag": "任务奖励限定",
+ "redeem_detail_image": "https://i0.hdslb.com/bfs/garb/48f755d6d08d96bfebcadee0be4bc34ce42421de.jpg",
+ "redeem_detail_videos": null,
+ "sort": 0,
+ "redeem_items_optional": null,
+ "unlock_condition": {
+ "unlocked": true,
+ "lock_type": 0,
+ "expire_at": 0,
+ "unlocked_at": 0,
+ "unlock_threshold": 0,
+ "current_threshold": 0
+ }
+ },
+ {
+ "collect_id": 51,
+ "start_time": 1685372400,
+ "end_time": 2114406245,
+ "redeem_text": "抽出任意1张隐藏卡牌,即可领取,单UID仅可领取一次",
+ "redeem_item_type": 3,
+ "redeem_item_id": "53199",
+ "redeem_item_name": "夏日萌菜头像框",
+ "redeem_item_image": "https://i0.hdslb.com/bfs/garb/item/9fcb99ccfd057c5eac165832d71fb63f07f26097.png",
+ "owned_item_amount": 0,
+ "require_item_amount": 1,
+ "has_redeemed_cnt": 0,
+ "effective_forever": 1,
+ "redeem_item_image_download": "",
+ "card_item": {
+ "card_type_info": null,
+ "play": null,
+ "tag": null,
+ "card_asset_info": null
+ },
+ "jump_url": "",
+ "redeem_cond_type": "scarcity",
+ "remain_stock": -1,
+ "total_stock": -1,
+ "lottery_id": 0,
+ "reward_tag": "任务奖励限定",
+ "redeem_detail_image": "https://i0.hdslb.com/bfs/garb/item/9fcb99ccfd057c5eac165832d71fb63f07f26097.png",
+ "redeem_detail_videos": null,
+ "sort": 0,
+ "redeem_items_optional": null,
+ "unlock_condition": {
+ "unlocked": true,
+ "lock_type": 0,
+ "expire_at": 0,
+ "unlocked_at": 0,
+ "unlock_threshold": 0,
+ "current_threshold": 0
+ }
+ },
+ {
+ "collect_id": 50,
+ "start_time": 1685372400,
+ "end_time": 2114406245,
+ "redeem_text": "抽出任意3张不同卡牌,即可领取,单UID仅可领取一次",
+ "redeem_item_type": 2,
+ "redeem_item_id": "53178",
+ "redeem_item_name": "夏日萌菜表情包",
+ "redeem_item_image": "https://i0.hdslb.com/bfs/garb/462ae9b5735fef4bb9ed87a6d6467a4768b06006.png",
+ "owned_item_amount": 0,
+ "require_item_amount": 3,
+ "has_redeemed_cnt": 0,
+ "effective_forever": 1,
+ "redeem_item_image_download": "",
+ "card_item": {
+ "card_type_info": null,
+ "play": null,
+ "tag": null,
+ "card_asset_info": null
+ },
+ "jump_url": "",
+ "redeem_cond_type": "scarcity",
+ "remain_stock": -1,
+ "total_stock": -1,
+ "lottery_id": 0,
+ "reward_tag": "任务奖励限定",
+ "redeem_detail_image": "https://i0.hdslb.com/bfs/garb/462ae9b5735fef4bb9ed87a6d6467a4768b06006.png",
+ "redeem_detail_videos": null,
+ "sort": 0,
+ "redeem_items_optional": null,
+ "unlock_condition": {
+ "unlocked": true,
+ "lock_type": 0,
+ "expire_at": 0,
+ "unlocked_at": 0,
+ "unlock_threshold": 0,
+ "current_threshold": 0
+ }
+ },
+ {
+ "collect_id": 366,
+ "start_time": 1694768400,
+ "end_time": 1696953600,
+ "redeem_text": "抽齐全部8张卡牌领取,直接获得全图鉴进度条标记,10月28日前人工发放头像",
+ "redeem_item_type": 5,
+ "redeem_item_id": "59374",
+ "redeem_item_name": "水中嬉戏·隐藏出框头像",
+ "redeem_item_image": "https://i0.hdslb.com/bfs/garb/ff981dbdca5c6b539e22596674265ef1cb110c9c.png",
+ "owned_item_amount": 0,
+ "require_item_amount": 8,
+ "has_redeemed_cnt": 0,
+ "effective_forever": 0,
+ "redeem_item_image_download": "",
+ "card_item": {
+ "card_type_info": null,
+ "play": null,
+ "tag": null,
+ "card_asset_info": null
+ },
+ "jump_url": "",
+ "redeem_cond_type": "scarcity",
+ "remain_stock": -1,
+ "total_stock": -1,
+ "lottery_id": 0,
+ "reward_tag": "任务奖励限定",
+ "redeem_detail_image": "https://i0.hdslb.com/bfs/garb/ff981dbdca5c6b539e22596674265ef1cb110c9c.png",
+ "redeem_detail_videos": null,
+ "sort": 0,
+ "redeem_items_optional": null,
+ "unlock_condition": {
+ "unlocked": true,
+ "lock_type": 0,
+ "expire_at": 0,
+ "unlocked_at": 0,
+ "unlock_threshold": 0,
+ "current_threshold": 0
+ }
+ }
+ ],
+ "collect_chain": null
+ },
+ "button_bubble": null,
+ "guide_info": null,
+ "is_booked": 0,
+ "total_book_cnt": 0,
+ "is_fission": 0,
+ "physical_exchange": 0
+ }
+}
+```
+
+
diff --git a/garb/skin.md b/docs/garb/skin.md
similarity index 64%
rename from garb/skin.md
rename to docs/garb/skin.md
index 8e4213e..c91d5d5 100644
--- a/garb/skin.md
+++ b/docs/garb/skin.md
@@ -1,13 +1,8 @@
# APP主题
-- [获取主题及加载动画](#获取主题及加载动画)
-- [主题包结构](#主题包结构)
-
----
-
## 获取主题及加载动画
-> http://app.bilibili.com/x/resource/show/skin
+> https://app.bilibili.com/x/resource/show/skin
*请求方式:GET*
@@ -57,16 +52,23 @@
`user_equip`中的`data`对象:
-| 字段 | 类型 | 内容 | 备注 |
-| ------------------- | ---- | -------------- | --------------------------- |
-| color_mode | str | 颜色模式 | light:亮色 dark:暗色 |
-| color | str | 前景色? | |
-| color_second_page | str | 背景色? | |
-| side_bg_color | str | ? | |
-| tail_color | str | 底边栏颜色? | |
-| tail_color_selected | str | ? | |
-| tail_icon_ani | bool | 有无底边栏动画 | false:无 true:有 |
-| tail_icon_ani_mode | str | once | 作用尚不明确 |
+| 字段 | 类型 | 内容 | 必要性 | 备注 |
+| ------------------- | ---- | ----------------- | -------- | --------------------------- |
+| color_mode | str | 颜色模式 | 必要 | light:亮色 dark:暗色 |
+| color | str | 前景色? | 必要 | 颜色 1. 使用十六进制颜色值 2. 颜色值的大小写不限,下同 3. 例:#ffffff |
+| color_second_page | str | 背景色? | 必要 | 颜色 |
+| tail_color | str | 底边栏颜色 | 必要 | 颜色 |
+| tail_color_selected | str | 底边栏颜色(选择时) | 必要 | 颜色 |
+| tail_icon_ani | bool | 有无底边栏动画 | 必要 | false:无 true:有 |
+| tail_icon_ani_mode | str | 底边栏动画循环播放 | 必要 | once:播放一次 |
+| head_myself_mp4_play| str | 我的页面头图(视频)循环 | 必要 | once:播放一次 loop:循环播放 |
+| tail_icon_mode | str | 底栏改图标或改颜色 | 必要 | img:图标 color:颜色 |
+| side_bg_color | str | 侧边栏颜色 | 非必要 | 颜色 5.x 版本客户端的侧边栏 |
+| side_line_color | str | 侧边栏线条颜色? | 非必要 | 颜色 5.x 版本客户端的侧边栏 |
+| tail_icon_color | str | 底栏图标颜色 | 可能必要 | 颜色 若 tail_icon_mode = "color",则必要 |
+| tail_icon_color_dark| str | 底栏图标颜色(夜间模式) | 可能必要 | 颜色 若 tail_icon_mode = "color",则必要 |
+| tail_icon_color_selected| str | 底栏图标颜色(选择时) | 可能必要 | 颜色 若 tail_icon_mode = "color",则必要 |
+| tail_icon_color_selected_dark| str | 底栏图标颜色(选择时)(夜间模式) | 可能必要 | 颜色 若 tail_icon_mode = "color",则必要 |
`skin_colors`数组:
@@ -103,7 +105,7 @@
**示例:**
```shell
-curl -G 'http://app.bilibili.com/x/resource/show/skin' \
+curl -G 'https://app.bilibili.com/x/resource/show/skin' \
--data-urlencode 'access_key=xxx' \
--data-urlencode 'appkey=1d8b6e7d45233436' \
--data-urlencode 'build=6082000' \
@@ -201,32 +203,38 @@ curl -G 'http://app.bilibili.com/x/resource/show/skin' \
主题包为app端付费主题(套装)的整合包,以zip格式通过url分发
-包内的图片文件为app对应的资源替换
+包内的图片文件为app对应的资源替换,替换时可随意修改后缀 jpg 或 png
+
+必要性:head_bg 及 head_tab_bg 为必要,其他非必要
+
+| 文件名 | 说明 |
+| --------------------------------- | -------------------------- |
+| head_bg.jpg | 首页顶部栏背景 |
+| head_tab_bg.jpg | 顶部栏背景 |
+| head_myself_bg.jpg | 【我的】页面头图(小) |
+| head_myself_squared_bg.jpg | 【我的】页面头图(大) |
+| head_myself_mp4_bg.mp4 | 【我的】页面头图(视频) 格式参考:后缀必须 mp4、分辨率 1242 x 1074、60 FPS、去掉音轨(音频) |
+| side_bg.jpg | 侧边栏背景 |
+| side_bg_bottom.jpg | 侧边栏底部背景 |
+| tail_bg.png | 底部栏背景 |
+| tail_icon_main.png | 【首页】按钮 |
+| tail_icon_channel.png | 【频道】按钮 |
+| tail_icon_dynamic.png | 【动态】按钮 |
+| tail_icon_shop.png | 【会员购】按钮 |
+| tail_icon_myself.png | 【我的】按钮 |
+| tail_icon_pub_btn_bg.png | 【发布】按钮 |
+| tail_icon_selected_main.png | 【首页】按钮(选中状态) |
+| tail_icon_selected_channel.png | 【频道】按钮(选中状态) |
+| tail_icon_selected_dynamic.png | 【动态】按钮(选中状态) |
+| tail_icon_selected_shop.png | 【会员购】按钮(选中状态) |
+| tail_icon_selected_myself.png | 【我的】按钮(选中状态) |
+| tail_icon_selected_pub_btn_bg.png | 【发布】按钮(选中状态) |
-| 文件名 | 说明 |
-| ------------------------------ | -------------------------- |
-| tail_icon_selected_myself.png | 【我的】按钮(选中状态) |
-| head_bg.jpg | 首页顶部栏背景 |
-| head_tab_bg.jpg | 顶部栏背景 |
-| side_bg.jpg | 侧边栏背景 |
-| side_bg_bottom.jpg | 侧边栏底部背景 |
-| tail_bg.png | 底部栏背景 |
-| tail_icon_main.png | 【首页】按钮 |
-| tail_icon_selected_main.png | 【首页】按钮(选中状态) |
-| tail_icon_selected_channel.png | 【频道】按钮(选中状态) |
-| head_myself_squared_bg.jpg | 【我的】页面头图(大) |
-| tail_icon_channel.png | 【频道】按钮 |
-| tail_icon_selected_dynamic.png | 【动态】按钮(选中状态) |
-| head_myself_bg.jpg | 【我的】页面头图(小) |
-| tail_icon_dynamic.png | 【动态】按钮 |
-| tail_icon_shop.png | 【会员购】按钮 |
-| tail_icon_selected_shop.png | 【会员购】按钮(选中状态) |
-| tail_icon_myself.png | 【我的】按钮 |
以`id=2529(初音未来-日版)`的资源为例
```shell
-wget http://i0.hdslb.com/bfs/garb/zip/9c393edea0c7b7b59685a20cd655363ef573a325.zip
+wget https://i0.hdslb.com/bfs/garb/zip/9c393edea0c7b7b59685a20cd655363ef573a325.zip
unzip -l 9c393edea0c7b7b59685a20cd655363ef573a325.zip
```
diff --git a/history&toview/history.md b/docs/historytoview/history.md
similarity index 76%
rename from history&toview/history.md
rename to docs/historytoview/history.md
index aee1cfe..ddecbcf 100644
--- a/history&toview/history.md
+++ b/docs/historytoview/history.md
@@ -1,32 +1,26 @@
# 历史记录
-
+## 获取历史记录列表_web端
-- [获取历史记录列表(视频、直播、专栏)](#获取历史记录列表(视频、直播、专栏))
-- [获取全部视频历史记录(旧)](#获取全部视频历史记录(旧))
-- [删除历史记录](#删除历史记录)
-- [清空历史记录](#清空历史记录)
-- [停用历史记录](#停用历史记录)
-- [查询历史记录停用状态](#查询历史记录停用状态)
-
----
-
-## 获取历史记录列表(视频、直播、专栏)
-
->http://api.bilibili.com/x/web-interface/history/cursor
+> https://api.bilibili.com/x/web-interface/history/cursor
*请求方式:GET*
-认证方式:Cookie(SESSDATA)
+认证方式:Cookie (SESSDATA)
+
+注:`max`、`business`、`view_at`参数用于历史记录列表的 IFS (无限滚动),其用法类似链表的 next 指针
+
+本接口也可以返回已失效稿件的信息
**url参数:**
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| -------- | ---- | ---------------------- | ------ | ------------------------------------------------------------ |
-| max | num | 历史记录截止目标id | 非必要 | 默认为0 稿件:稿件avid 番剧(影视):剧集ssid 直播:直播间id 文集:文集rlid 文章:文章cvid |
-| business | num | 历史记录截止目标id类型 | 非必要 | 默认为空 archive:稿件 pgc:番剧(影视) live:直播 article-list:文集 article:文章 |
-| view_at | num | 历史记录截止时间 | 非必要 | 时间戳 默认为0 0为当前时间 |
-| ps | num | 每页项数 | 非必要 | 默认为20,最大30 |
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ------------------------ | ------ | ------------------------------------------------------------ |
+| max | num | 历史记录截止目标 id | 非必要 | 默认为 0 稿件:稿件 avid 剧集(番剧 / 影视):剧集 ssid 直播:直播间 id 文集:文集 rlid 文章:文章 cvid |
+| business | str | 历史记录截止目标业务类型 | 非必要 | 默认为空 archive:稿件 pgc:剧集(番剧 / 影视) live:直播 article-list:文集 article:文章 |
+| view_at | num | 历史记录截止时间 | 非必要 | 时间戳 默认为 0 0 为当前时间 |
+| type | str | 历史记录分类筛选 | 非必要 | all:全部类型(默认) archive:稿件 live:直播 article:文章 |
+| ps | num | 每页项数 | 非必要 | 默认为 20,最大 30 |
**json回复:**
@@ -35,7 +29,7 @@
| 字段 | 类型 | 内容 | 备注 |
| ------- | ----- | ------------ | ------------------------------------------------- |
| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为 0 |
| ttl | num | 1 | |
| data | array | 历史记录列表 | |
@@ -49,20 +43,20 @@
`data`中的`cursor`对象:
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ---- | ------------------ | ------------------ |
-| max | num | 最后一项目标id | **详细内容见参数** |
-| view_at | num | 最后一项时间节点 | 时间戳 |
-| business | str | 最后一项目标id类型 | **详细内容见参数** |
-| ps | num | 每页项数 | |
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ---------------- | -------------- |
+| max | num | 最后一项目标 id | **见请求参数** |
+| view_at | num | 最后一项时间节点 | 时间戳 |
+| business | str | 最后一项业务类型 | **见请求参数** |
+| ps | num | 每页项数 | |
`data`中的`tab`数组:
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ----------------- | ---- |
-| 0 | obj | 历史记录筛选类型1 | |
-| 1 | obj | 历史记录筛选类型2 | |
-| 2 | obj | 历史记录筛选类型3 | |
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------------ | ---- |
+| 0 | obj | 历史记录筛选类型 1 | |
+| 1 | obj | 历史记录筛选类型 2 | |
+| 2 | obj | 历史记录筛选类型 3 | |
`tab`数组中的对象:
@@ -71,69 +65,69 @@
| type | str | 类型 | |
| name | str | 类型名 | |
-`data`中的`tab`数组:
+`data`中的`list`数组:
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | ---------------- |
-| 0 | obj | 历史记录1 | |
-| n | obj | 历史记录(n+1) | 按照查看顺序排列 |
-| …… | obj | | |
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ---------------- |
+| 0 | obj | 历史记录 1 | |
+| n | obj | 历史记录 (n+1) | 按照查看顺序排列 |
+| …… | obj | | |
-`tab`数组中的对象:
+`list`数组中的对象:
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ------------------------------- | -------------------- | ---------------------------------------- |
-| title | str | 条目标题 | |
-| long_title | str | 条目副标题 | |
-| cover | str | 条目封面图url | 用于专栏以外的条目 |
-| covers | 有效时:array 无效时:null | 条目封面图组 | 仅用于专栏 |
-| uri | str | 重定向url | 仅用于剧集和直播 |
-| history | obj | 条目详细信息 | |
-| videos | num | 视频分P数目 | 仅用于稿件视频 |
-| author_name | str | UP主昵称 | |
-| author_face | str | UP主头像url | |
-| author_mid | num | UP主mid | |
-| view_at | num | 查看时间 | 时间戳 |
-| progress | num | 视频观看进度 | 单位为秒 用于稿件视频或剧集 |
-| badge | str | 条目备注标识 | 用于稿件视频或剧集 |
-| show_title | str | 分P标题 | 用于稿件视频或剧集 |
-| duration | num | 视频总时长 | 用于稿件视频或剧集 |
-| current | str | 空 | **作用尚不明确** |
-| total | num | 总计分集数 | 仅用于剧集 |
-| new_desc | str | 最新一话/最新一P标识 | 用于稿件视频或剧集 |
-| is_finish | num | 是否已完结 | 仅用于剧集 0:未完结 1:已完结 |
-| is_fav | num | 是否收藏 | 0:未收藏 1:已收藏 |
-| kid | num | 条目目标id | **详细内容见参数** |
-| tag_name | str | 子分区名 | 用于稿件视频和直播 |
-| live_status | num | 直播状态 | 仅用于直播 0:未开播 1:已开播 |
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ------------------------------- | ------------------------ | ---------------------------------------- |
+| title | str | 条目标题 | |
+| long_title | str | 条目副标题 | |
+| cover | str | 条目封面图 url | 用于专栏以外的条目 |
+| covers | 有效时:array 无效时:null | 条目封面图组 | 仅用于专栏 |
+| uri | str | 重定向 url | 仅用于剧集和直播 |
+| history | obj | 条目详细信息 | |
+| videos | num | 视频分 P 数目 | 仅用于稿件视频 |
+| author_name | str | UP 主昵称 | |
+| author_face | str | UP 主头像 url | |
+| author_mid | num | UP 主 mid | |
+| view_at | num | 查看时间 | 时间戳 |
+| progress | num | 视频观看进度 | 单位为秒 用于稿件视频或剧集 |
+| badge | str | 角标文案 | 稿件视频 / 剧集 / 笔记 |
+| show_title | str | 分 P 标题 | 用于稿件视频或剧集 |
+| duration | num | 视频总时长 | 用于稿件视频或剧集 |
+| current | str | (?) | |
+| total | num | 总计分集数 | 仅用于剧集 |
+| new_desc | str | 最新一话 / 最新一 P 标识 | 用于稿件视频或剧集 |
+| is_finish | num | 是否已完结 | 仅用于剧集 0:未完结 1:已完结 |
+| is_fav | num | 是否收藏 | 0:未收藏 1:已收藏 |
+| kid | num | 条目目标 id | **详细内容见参数** |
+| tag_name | str | 子分区名 | 用于稿件视频和直播 |
+| live_status | num | 直播状态 | 仅用于直播 0:未开播 1:已开播 |
-`tab`数组中的对象中的`covers`数组:
+`list`数组中的对象中的`covers`数组:
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | ---- |
-| 0 | str | 封面图片1 | |
-| n | str | 封面图片(n+1) | |
-| …… | str | …… | |
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ---- |
+| 0 | str | 封面图片 1 | |
+| n | str | 封面图片 (n+1) | |
+| …… | str | …… | |
-`tab`数组中的对象中的`history`对象:
+`list`数组中的对象中的`history`对象:
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ---- | ------------------- | ------------------------------------------------------------ |
-| oid | num | 目标id | 稿件视频&剧集(当`business=archive`或`business=pgc`时):稿件avid 直播(当`business=live`时):直播间id 文章(当`business=article`时):文章cvid 文集(当`business=article-list`时):文集rlid |
-| epid | num | 剧集epid | 仅用于剧集 |
-| bvid | str | 稿件bvid | 仅用于稿件视频 |
-| page | num | 观看到的视频分P数 | 仅用于稿件视频 |
-| cid | num | 观看到的对象id | 稿件视频&剧集(当`business=archive`或`business=pgc`时):视频cid 文集(当`business=article-list`时):文章cvid |
-| part | str | 观看到的视频分P标题 | 仅用于稿件视频 |
-| business | str | 条目类型 | **详细内容见参数** |
-| dt | num | 查看平台代码 | 1 3 5 7:手机端 2:web端 4 6:pad端 33:TV端 0:其他 |
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | --------------------- | ------------------------------------------------------------ |
+| oid | num | 目标id | 稿件视频&剧集(当`business=archive`或`business=pgc`时):稿件avid 直播(当`business=live`时):直播间id 文章(当`business=article`时):文章cvid 文集(当`business=article-list`时):文集rlid |
+| epid | num | 剧集epid | 仅用于剧集 |
+| bvid | str | 稿件bvid | 仅用于稿件视频 |
+| page | num | 观看到的视频分P数 | 仅用于稿件视频 |
+| cid | num | 观看到的对象id | 稿件视频&剧集(当`business=archive`或`business=pgc`时):视频cid 文集(当`business=article-list`时):文章cvid |
+| part | str | 观看到的视频分 P 标题 | 仅用于稿件视频 |
+| business | str | 业务类型 | **见请求参数** |
+| dt | num | 记录查看的平台代码 | 1 3 5 7:手机端 2:web端 4 6:pad端 9: 智能音箱/游戏机33:TV端 0:其他 |
**示例:**
获取当前时间截止的5条历史记录
```shell
-curl -G 'http://api.bilibili.com/x/web-interface/history/cursor' \
+curl -G 'https://api.bilibili.com/x/web-interface/history/cursor' \
--data-urlencode 'ps=5' \
-b 'SESSDATA=xxx'
```
@@ -349,13 +343,15 @@ curl -G 'http://api.bilibili.com/x/web-interface/history/cursor' \
-## 获取全部视频历史记录(旧)
+## 获取视频观看历史记录_web端旧版
-> http://api.bilibili.com/x/v2/history
+> https://api.bilibili.com/x/v2/history
*请求方式:GET*
-认证方式:Cookie(SESSDATA)
+认证方式:Cookie (SESSDATA)
+
+本接口也可以返回已失效稿件的信息
**url参数:**
@@ -397,15 +393,15 @@ curl -G 'http://api.bilibili.com/x/web-interface/history/cursor' \
| pubdate | num | 稿件发布时间 | 时间戳 |
| ctime | num | 用户提交稿件的时间 | 时间戳 |
| desc | str | 视频简介 | |
-| state | num | 视频状态 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`state`备注 |
-| ~~attribute~~(仅做历史性保留) | ~~num~~ | ~~稿件属性位配置~~ | 本字段已被删除 ~~略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`attribute`备注~~ |
+| state | num | 视频状态 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`state`备注 |
+| ~~attribute~~(仅做历史性保留) | ~~num~~ | ~~稿件属性位配置~~ | 本字段已被删除 ~~略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`attribute`备注~~ |
| duration | num | 视频总计持续时长(所有分P) | 单位为秒 |
-| rights | obj | 视频属性标志 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`rights`对象 |
-| owner | obj | 视频UP主信息 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`owner`对象 |
-| stat | obj | 视频状态数 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`stat`对象 |
+| rights | obj | 视频属性标志 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`rights`对象 |
+| owner | obj | 视频UP主信息 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`owner`对象 |
+| stat | obj | 视频状态数 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`stat`对象 |
| dynamic | str | 视频同步发布的的动态的文字内容 | 无为空 |
| cid | num | 视频1P cid | |
-| dimension | obj | 视频1P分辨率 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`dimension`对象 |
+| dimension | obj | 视频1P分辨率 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`dimension`对象 |
| bangumi | obj | 番剧/影视信息 | 非番剧/影视无此项 |
| cheese | obj | 课程信息 | 非课程无此项 |
| favorite | bool | 是否已收藏 | true:已收藏 false:未收藏 |
@@ -461,7 +457,7 @@ curl -G 'http://api.bilibili.com/x/web-interface/history/cursor' \
查询当前视频历史记录列表
```shell
-curl -G 'http://api.bilibili.com/x/v2/history' \
+curl -G 'https://api.bilibili.com/x/v2/history' \
--data-urlencode 'ps=5' \
--data-urlencode 'pn=1' \
-b 'SESSDATA=xxx'
@@ -661,18 +657,18 @@ curl -G 'http://api.bilibili.com/x/v2/history' \
## 删除历史记录
-> http://api.bilibili.com/x/v2/history/delete
+> https://api.bilibili.com/x/v2/history/delete
*请求方式:POST*
-认证方式:Cookie(SESSDATA)
+认证方式:Cookie (SESSDATA)
**正文参数( application/x-www-form-urlencoded ):**
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------ | ------------------------------------------------------------ |
-| kid | str | 删除的目标记录 | 必要 | 视频:archive\_{稿件avid} 直播:live_{直播间id} 专栏:article\_{专栏cvid} 剧集:pgc\_{剧集ssid} 文集:article-list\_{文集rlid} |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | --------------------------------------------------- | ------ | ------------------------------------------------------------ |
+| kid | str | 删除的目标记录,格式为`{业务类型}_{目标id}`详见备注 | 必要 | 视频:archive\_{稿件avid} 直播:live_{直播间id} 专栏:article\_{专栏cvid} 剧集:pgc\_{剧集ssid} 文集:article-list\_{文集rlid} |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
**json回复:**
@@ -689,7 +685,7 @@ curl -G 'http://api.bilibili.com/x/v2/history' \
删除视频`av540580868`的观看历史记录
```shell
-curl 'http://api.bilibili.com/x/v2/history/delete' \
+curl 'https://api.bilibili.com/x/v2/history/delete' \
--data-urlencode 'kid=archive_540580868' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
@@ -710,11 +706,11 @@ curl 'http://api.bilibili.com/x/v2/history/delete' \
## 清空历史记录
-> http://api.bilibili.com/x/v2/history/clear
+> https://api.bilibili.com/x/v2/history/clear
*请求方式:POST*
-认证方式:Cookie(SESSDATA)
+认证方式:Cookie (SESSDATA)
**正文参数( application/x-www-form-urlencoded ):**
@@ -737,7 +733,7 @@ curl 'http://api.bilibili.com/x/v2/history/delete' \
清空历史记录
```shell
-curl 'http://api.bilibili.com/x/v2/history/clear' \
+curl 'https://api.bilibili.com/x/v2/history/clear' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
```
@@ -757,11 +753,11 @@ curl 'http://api.bilibili.com/x/v2/history/clear' \
## 停用历史记录
-> http://api.bilibili.com/x/v2/history/shadow/set
+> https://api.bilibili.com/x/v2/history/shadow/set
*请求方式:POST*
-认证方式:Cookie(SESSDATA)
+认证方式:Cookie (SESSDATA)
该操作不会影响原有历史记录
@@ -787,7 +783,7 @@ curl 'http://api.bilibili.com/x/v2/history/clear' \
停用历史记录功能
```shell
-curl 'http://api.bilibili.com/x/v2/history/shadow/set' \
+curl 'https://api.bilibili.com/x/v2/history/shadow/set' \
--data-urlencode 'switch=true' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
@@ -808,11 +804,11 @@ curl 'http://api.bilibili.com/x/v2/history/shadow/set' \
## 查询历史记录停用状态
-> http://api.bilibili.com/x/v2/history/shadow
+> https://api.bilibili.com/x/v2/history/shadow
*请求方式:GET*
-认证方式:Cookie(SESSDATA)
+认证方式:Cookie (SESSDATA)
**json回复:**
@@ -830,7 +826,7 @@ curl 'http://api.bilibili.com/x/v2/history/shadow/set' \
当前状态为未停用视频历史记录
```shell
-curl 'http://api.bilibili.com/x/v2/history/shadow' \
+curl 'https://api.bilibili.com/x/v2/history/shadow' \
-b 'SESSDATA=xxx'
```
diff --git a/history&toview/toview.md b/docs/historytoview/toview.md
similarity index 91%
rename from history&toview/toview.md
rename to docs/historytoview/toview.md
index c23cf8a..4ff78ef 100644
--- a/history&toview/toview.md
+++ b/docs/historytoview/toview.md
@@ -1,18 +1,10 @@
# 稍后再看
-
-
-- [视频添加稍后再看](#视频添加稍后再看)
-- [添加频道中所有视频到稍后再看](#添加频道中所有视频到稍后再看)
-- [获取稍后再看视频列表](#获取稍后再看视频列表)
-- [删除稍后再看视频](#删除稍后再看视频)
-- [清空稍后再看视频列表](#清空稍后再看视频列表)
-
----
+
## 视频添加稍后再看
->http://api.bilibili.com/x/v2/history/toview/add
+> https://api.bilibili.com/x/v2/history/toview/add
*请求方式:POST*
@@ -45,7 +37,7 @@
avid方式:
```shell
-curl 'http://api.bilibili.com/x/v2/history/toview/add' \
+curl 'https://api.bilibili.com/x/v2/history/toview/add' \
--data-urlencode 'aid=41687433' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
@@ -54,7 +46,7 @@ curl 'http://api.bilibili.com/x/v2/history/toview/add' \
bvid方式:
```shell
-curl 'http://api.bilibili.com/x/v2/history/toview/add' \
+curl 'https://api.bilibili.com/x/v2/history/toview/add' \
--data-urlencode 'bvid=BV1ht41147kj' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
@@ -75,7 +67,7 @@ curl 'http://api.bilibili.com/x/v2/history/toview/add' \
## 添加频道中所有视频到稍后再看
-> http://space.bilibili.com/ajax/channel/addAllToView
+> https://space.bilibili.com/ajax/channel/addAllToView
*请求方式:POST*
@@ -109,7 +101,7 @@ curl 'http://api.bilibili.com/x/v2/history/toview/add' \
添加用户`mid=282994`下的频道`4693`中所有视频到稍后再看
```shell
-curl 'http://space.bilibili.com/ajax/channel/addAllToView' \
+curl 'https://space.bilibili.com/ajax/channel/addAllToView' \
--data-urlencode 'cid=4693' \
--data-urlencode 'mid=282994' \
--data-urlencode 'csrf=xxx' \
@@ -131,7 +123,7 @@ curl 'http://space.bilibili.com/ajax/channel/addAllToView' \
## 获取稍后再看视频列表
-> http://api.bilibili.com/x/v2/history/toview
+> https://api.bilibili.com/x/v2/history/toview
*请求方式:GET*
@@ -178,14 +170,14 @@ curl 'http://space.bilibili.com/ajax/channel/addAllToView' \
| pubdate | num | 稿件发布时间 | 时间戳 |
| ctime | num | 用户提交稿件的时间 | 时间戳 |
| desc | str | 视频简介 | |
-| state | num | 视频状态 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`state`备注 |
-| ~~attribute~~(仅做历史性保留) | ~~num~~ | ~~稿件属性位配置~~ | 本字段已被删除~~略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`attribute`备注~~ |
+| state | num | 视频状态 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`state`备注 |
+| ~~attribute~~(仅做历史性保留) | ~~num~~ | ~~稿件属性位配置~~ | 本字段已被删除~~略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`attribute`备注~~ |
| duration | num | 稿件总时长(所有分P) | 单位为秒 |
-| rights | obj | 稿件属性标志 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`rights`对象 |
-| owner | obj | 稿件UP主信息 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`owner`对象 |
-| stat | obj | 稿件状态数 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`stat`对象 |
+| rights | obj | 稿件属性标志 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`rights`对象 |
+| owner | obj | 稿件UP主信息 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`owner`对象 |
+| stat | obj | 稿件状态数 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`stat`对象 |
| dynamic | str | 视频同步发布的的动态的文字内容 | 无为空 |
-| dimension | obj | 稿件1P分辨率 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`dimension`对象 |
+| dimension | obj | 稿件1P分辨率 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的`dimension`对象 |
| count | num | 稿件分P数 | 非投稿视频无此项 |
| cid | num | 视频cid | |
| progress | num | 观看进度时间 | 单位为秒 |
@@ -197,7 +189,7 @@ curl 'http://space.bilibili.com/ajax/channel/addAllToView' \
获取稍后再看视频列表
```shell
-curl 'http://api.bilibili.com/x/v2/history/toview' \
+curl 'https://api.bilibili.com/x/v2/history/toview' \
-b 'SESSDATA=xxx'
```
@@ -352,7 +344,7 @@ curl 'http://api.bilibili.com/x/v2/history/toview' \
## 删除稍后再看视频
-> http://api.bilibili.com/x/v2/history/toview/del
+> https://api.bilibili.com/x/v2/history/toview/del
*请求方式:POST*
@@ -381,7 +373,7 @@ curl 'http://api.bilibili.com/x/v2/history/toview' \
删除视频`av540580868`的稍后再看记录
```shell
-curl 'http://api.bilibili.com/x/v2/history/toview/del' \
+curl 'https://api.bilibili.com/x/v2/history/toview/del' \
--data-urlencode 'aid=540580868' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
@@ -403,7 +395,7 @@ curl 'http://api.bilibili.com/x/v2/history/toview/del' \
删除所有已观看的视频
```shell
-curl 'http://api.bilibili.com/x/v2/history/toview/del' \
+curl 'https://api.bilibili.com/x/v2/history/toview/del' \
--data-urlencode 'viewed=true' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
@@ -424,7 +416,7 @@ curl 'http://api.bilibili.com/x/v2/history/toview/del' \
## 清空稍后再看视频列表
-> http://api.bilibili.com/x/v2/history/toview/clear
+> https://api.bilibili.com/x/v2/history/toview/clear
*请求方式:POST*
@@ -451,7 +443,7 @@ curl 'http://api.bilibili.com/x/v2/history/toview/del' \
清空稍后再看视频列表
```shell
-curl 'http://api.bilibili.com/x/v2/history/toview/clear' \
+curl 'https://api.bilibili.com/x/v2/history/toview/clear' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
```
diff --git a/docs/live/danmaku.md b/docs/live/danmaku.md
new file mode 100644
index 0000000..68b8309
--- /dev/null
+++ b/docs/live/danmaku.md
@@ -0,0 +1,507 @@
+# 直播间弹幕
+
+## 获取当前用户对应直播间可发弹幕配置
+
+> https://api.live.bilibili.com/xlive/web-room/v1/dM/GetDMConfigByGroup
+
+*请求方式: GET*
+
+认证方式: Cookie (SESSDATA)
+
+未登录也可以获取,但颜色只有白色可用,模式只有滚动。
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---- | --- | --- | ---- | --- |
+| room_id | num | 直播间id | 必要 | |
+| web_location | str | (?) | 非必要 | 作用尚不明确 |
+| w_rid | str | wbi签名 | 非必要 | 不强制需要 |
+| wts | num | 秒时间戳 | 非必要 | 不强制需要 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0: 成功 -400: 参数错误 |
+| data | obj | 信息本体 | |
+| message | str | 错误信息 | |
+| msg | str | 信息 | 成功时存在,为`""`(空字符串) |
+| ttl | num | `1` | 成功时不存在 |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| group | arr | 弹幕颜色组 | |
+| mode | arr | 弹幕显示模式 | |
+
+`data.group` 数组中对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| name | str | 显示名称 | |
+| sort | num | 用于排序 | |
+| color | arr | 该组颜色列表 | |
+
+`data.group[i].color` 数组中对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| name | str | 颜色名 | |
+| color | str | 十进制颜色值 | 发送弹幕用 |
+| color\_hex | str | 十六进制颜色值 | 发送弹幕用 |
+| status | num | 可用状态 | 0: 不可用 1: 可用 |
+| weight | num | (?) | 作用尚不明确 |
+| color\_id | num | 颜色id? | |
+| origin | num | (?) | |
+
+`data.mode` 数组中对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| name | str | 模式名称 | |
+| mode | num | 模式值 | 发送弹幕用 |
+| type | str | 模式类型 | |
+| status | num | 可用状态 | 0: 不可用 1: 可用 |
+
+**示例:**
+
+获取未登录用户在直播间 `1` 的弹幕配置可用情况
+
+```shell
+curl 'https://api.live.bilibili.com/xlive/web-room/v1/dM/GetDMConfigByGroup?room_id=1'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "data": {
+ "group": [
+ {
+ "name": "普",
+ "sort": 0,
+ "color": [
+ {
+ "name": "白色",
+ "color": "16777215",
+ "color_hex": "ffffff",
+ "status": 1,
+ "weight": -9999,
+ "color_id": -9999,
+ "origin": 0
+ }
+ ]
+ },
+ {
+ "name": "航",
+ "sort": 100,
+ "color": [
+ {
+ "name": "紫色",
+ "color": "14893055",
+ "color_hex": "e33fff",
+ "status": 0,
+ "weight": 0,
+ "color_id": 6,
+ "origin": 1
+ }
+ ]
+ },
+ {
+ "name": "粉",
+ "sort": 200,
+ "color": [
+ {
+ "name": "松石绿",
+ "color": "5566168",
+ "color_hex": "54eed8",
+ "status": 0,
+ "weight": 99,
+ "color_id": 66,
+ "origin": 2
+ },
+ {
+ "name": "雨后蓝",
+ "color": "5816798",
+ "color_hex": "58c1de",
+ "status": 0,
+ "weight": 98,
+ "color_id": 67,
+ "origin": 2
+ },
+ {
+ "name": "星空蓝",
+ "color": "4546550",
+ "color_hex": "455ff6",
+ "status": 0,
+ "weight": 97,
+ "color_id": 68,
+ "origin": 2
+ },
+ {
+ "name": "紫罗兰",
+ "color": "9920249",
+ "color_hex": "975ef9",
+ "status": 0,
+ "weight": 96,
+ "color_id": 69,
+ "origin": 2
+ },
+ {
+ "name": "梦境红",
+ "color": "12802438",
+ "color_hex": "c35986",
+ "status": 0,
+ "weight": 95,
+ "color_id": 70,
+ "origin": 2
+ },
+ {
+ "name": "热力橙",
+ "color": "16747553",
+ "color_hex": "ff8c21",
+ "status": 0,
+ "weight": 94,
+ "color_id": 71,
+ "origin": 2
+ },
+ {
+ "name": "香槟金",
+ "color": "16774434",
+ "color_hex": "fff522",
+ "status": 0,
+ "weight": 93,
+ "color_id": 72,
+ "origin": 2
+ }
+ ]
+ },
+ {
+ "name": "爷",
+ "sort": 300,
+ "color": [
+ {
+ "name": "红色",
+ "color": "16738408",
+ "color_hex": "ff6868",
+ "status": 0,
+ "weight": 0,
+ "color_id": 8,
+ "origin": 3
+ },
+ {
+ "name": "蓝色",
+ "color": "6737151",
+ "color_hex": "66ccff",
+ "status": 0,
+ "weight": 0,
+ "color_id": 7,
+ "origin": 3
+ }
+ ]
+ },
+ {
+ "name": "活",
+ "sort": 400,
+ "color": [
+ {
+ "name": "盛典金",
+ "color": "16766720",
+ "color_hex": "ffd700",
+ "status": 0,
+ "weight": 100,
+ "color_id": 44,
+ "origin": 4
+ },
+ {
+ "name": "升腾蓝",
+ "color": "4286945",
+ "color_hex": "4169e1",
+ "status": 0,
+ "weight": 100,
+ "color_id": 43,
+ "origin": 4
+ },
+ {
+ "name": "青色",
+ "color": "65532",
+ "color_hex": "fffc",
+ "status": 0,
+ "weight": 0,
+ "color_id": 5,
+ "origin": 4
+ },
+ {
+ "name": "绿色",
+ "color": "8322816",
+ "color_hex": "7eff00",
+ "status": 0,
+ "weight": 0,
+ "color_id": 4,
+ "origin": 4
+ },
+ {
+ "name": "黄色弹幕",
+ "color": "16772431",
+ "color_hex": "ffed4f",
+ "status": 0,
+ "weight": 0,
+ "color_id": 3,
+ "origin": 4
+ },
+ {
+ "name": "橙色",
+ "color": "16750592",
+ "color_hex": "ff9800",
+ "status": 0,
+ "weight": 0,
+ "color_id": 2,
+ "origin": 4
+ },
+ {
+ "name": "粉色",
+ "color": "16741274",
+ "color_hex": "ff739a",
+ "status": 0,
+ "weight": 0,
+ "color_id": 1,
+ "origin": 4
+ }
+ ]
+ }
+ ],
+ "mode": [
+ {
+ "name": "滚动",
+ "mode": 1,
+ "type": "scroll",
+ "status": 1
+ },
+ {
+ "name": "底部",
+ "mode": 4,
+ "type": "bottom",
+ "status": 0
+ },
+ {
+ "name": "顶部",
+ "mode": 5,
+ "type": "top",
+ "status": 0
+ }
+ ]
+ },
+ "message": "",
+ "msg": ""
+}
+```
+
+
+
+## 设置弹幕样式
+
+> https://api.live.bilibili.com/xlive/web-room/v1/dM/AjaxSetConfig
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---- | --- | --- | ---- | --- |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| csrf\_token | str | 同csrf | 非必要 | |
+| room\_id | num | 直播间id | 必要 | |
+| color | str | 颜色值 | 必要(可选) | color和mode任选一个 |
+| mode | num | 弹幕模式 | 必要(可选) | color和mode任选一个 |
+
+注1: 抓取到的color格式是`"0x"+六位十六进制小写颜色值`,实际不需要`0x`,且不区分大小写。
+
+注2: 若color和mode同时存在将只处理color,mode将被忽略。(见[#1236(comment)](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1236#issuecomment-2849019923))
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0: 成功 -101: 账号未登录 -500: 未达到使用条件 10064002: 参数错误 10065107: 颜色不存在 |
+| message | str | 错误信息 | |
+| ttl | num | `1` | |
+| data | obj | 信息本体 | 部分情况不存在,10064002时为`null` |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| status | num | 同code | |
+| msg | str | 提示信息 | 成功时有内容 |
+| roomid | num | 直播间id | |
+
+**示例:**
+
+更改直播间 `1017` 的弹幕颜色为白色
+
+```shell
+curl 'https://api.live.bilibili.com/xlive/web-room/v1/dM/AjaxSetConfig' \
+ --data-urlencode 'room_id=1017' \
+ --data-urlencode 'color=0xffffff' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx;bili_jct=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code":0,
+ "message":"0",
+ "ttl":1,
+ "data":{
+ "status":0,
+ "msg":"设置成功~",
+ "roomid":1017
+ }
+}
+```
+
+
+
+## 发送直播弹幕
+
+> https://api.live.bilibili.com/msg/send
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+鉴权方式: Cookie中`bili_jct`的值正确并与`csrf`相同
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | ---- | --- | ----- | --- |
+| w_rid | str | wbi签名 | 非必要 | 不强制需要 |
+| wts | num | Unix 秒时间戳 | 非必要 | 不强制需要 |
+
+**正文参数 (`application/x-www-form-urlencoded`或`multipart/form-data`):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---- | --- | --- | ---- | --- |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| roomid | num | 直播间id | 必要 | |
+| msg | str | 弹幕内容 | 必要 | |
+| rnd | num | 当前 Unix 秒时间戳 | 必要 | |
+| fontsize | num | 字体大小 | 必要 | 默认为`25` |
+| color | num | 十进制颜色值 | 必要 | 实际无效果 |
+| mode | num | 展示模式 | 非必要 | 默认为`1` |
+| bubble | num | (?) | 非必要 | 值为`0` |
+| room\_type | num | (?) | 非必要 | `0` |
+| jumpfrom | num | (?) | 非必要 | `0` |
+| reply\_mid | num | (?) | 非必要 | `0` |
+| reply\_attr | num | (?) | 非必要 | `0` |
+| reply\_uname | str | (?) | 非必要 | `""` |
+| replay\_dmid | str | (?) | 非必要 | `""` |
+| statistics | str | (?) | 非必要 | `{"appId":100,"platform":5}` |
+| csrf_token | str | 同csrf | 非必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | `-101`:账号未登录 `-111`:csrf 校验失败 `-400`:请求错误,带有必须参数的信息 `1003212`:超出限制长度 `10031`:发送频率过快 |
+| message | str | 错误信息 | |
+| msg | str | 同`message` | |
+| data | obj | 信息本体 | |
+| ttl | num | `1` | 在小于0的code中存在 |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| mode_info | obj | 弹幕信息 | |
+| dm_v2 | null | v2弹幕 | |
+
+`data.mode_info` 对象:
+
+基本上与[直播间信息流#弹幕 (DANMU_MSG)](message_stream.md#弹幕-danmu_msg)的`info[0][15]`对象相同。
+
+**示例:**
+
+给直播间 `1899237171` 发送内容为 `QwQ` 的弹幕
+
+```shell
+curl 'https://api.live.bilibili.com/msg/send' \
+ --data-urlencode 'roomid=1899237171' \
+ --data-urlencode 'msg=QwQ' \
+ --data-urlencode 'rnd=1744956003' \
+ --data-urlencode 'fontsize=25'
+ --data-urlencode 'color=16777215'
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx;bili_jct=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code":0,
+ "data":{
+ "mode_info":{
+ "mode":0,
+ "show_player_type":0,
+ "extra":"{\"send_from_me\":true,\"master_player_hidden\":false,\"mode\":0,\"color\":16777215,\"dm_type\":0,\"font_size\":25,\"player_mode\":1,\"show_player_type\":0,\"content\":\"QwQ\",\"user_hash\":\"2402762465\",\"emoticon_unique\":\"\",\"bulge_display\":0,\"recommend_score\":7,\"main_state_dm_color\":\"\",\"objective_state_dm_color\":\"\",\"direction\":0,\"pk_direction\":0,\"quartet_direction\":0,\"anniversary_crowd\":0,\"yeah_space_type\":\"\",\"yeah_space_url\":\"\",\"jump_to_url\":\"\",\"space_type\":\"\",\"space_url\":\"\",\"animation\":{},\"emots\":null,\"is_audited\":false,\"id_str\":\"4e3ed8ede9409b234b5e1d64c06801ea3119\",\"icon\":null,\"show_reply\":true,\"reply_mid\":0,\"reply_uname\":\"\",\"reply_uname_color\":\"\",\"reply_is_mystery\":false,\"reply_type_enum\":0,\"hit_combo\":0,\"esports_jump_url\":\"\"}",
+ "user":{
+ "uid":438160221,
+ "base":{
+ "name":"weatfe",
+ "face":"https://i0.hdslb.com/bfs/face/member/noface.jpg",
+ "name_color":0,
+ "is_mystery":false,
+ "risk_ctrl_info":null,
+ "origin_info":{
+ "name":"weatfe",
+ "face":"https://i0.hdslb.com/bfs/face/member/noface.jpg"
+ },
+ "official_info":{
+ "role":0,
+ "title":"",
+ "desc":"",
+ "type":-1
+ },
+ "name_color_str":""
+ },
+ "medal":null,
+ "wealth":null,
+ "title":{
+ "old_title_css_id":"",
+ "title_css_id":""
+ },
+ "guard":null,
+ "uhead_frame":null,
+ "guard_leader":{
+ "is_guard_leader":false
+ }
+ }
+ },
+ "dm_v2":null
+ },
+ "message":"",
+ "msg":""
+}
+```
+
+
diff --git a/docs/live/emoticons.md b/docs/live/emoticons.md
new file mode 100644
index 0000000..75ee998
--- /dev/null
+++ b/docs/live/emoticons.md
@@ -0,0 +1,927 @@
+# 直播间表情
+
+## 获取直播间的表情包
+
+> https://api.live.bilibili.com/xlive/web-ucenter/v2/emoticon/GetEmoticons
+
+*请求方法: GET*
+
+认证方式: Cookie (SESSDATA)
+
+**URL 参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ------ | ---------- | ------ | ---- |
+| platform | string | 平台 | 必要 | 已知: `pc``android` `ios` |
+| room_id | number | 直播间长号 | 必要 | 只支持 `room_id` 不支持 `short_id` |
+
+**JSON 回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------ | -------- | ---- |
+| code | number | 返回值 | 0: 成功 |
+| message | string | 错误消息 | 默认为 0 |
+| ttl | number | 1 | |
+| data | object | 信息本体 | 见下 |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | -------- | ---------- | ---- |
+| data | object[] | 表情包数据 | 套了个娃 |
+| fans_brand | number | 品牌标识? | |
+| purchase_url | null? | 购买链接? | |
+
+`data.data[]` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------------- | -------- | --------- | ---- |
+| current_cover | string | 封面 URL | |
+| emoticons | object[] | 表情列表 | |
+| pkg_descript | string | 文字描述 | |
+| pkg_id | number | 包 ID | |
+| pkg_name | string | 包名称 | |
+| pkg_perm | number | 使用权限? | |
+| pkg_type | number | 包类型 | |
+| recently_used_emoticons | unknown[] | 最近使用的表情 | |
+| top_show | object | 顶部展示信息? | |
+| top_show_recent | object | 最近使用的顶部展示信息? | |
+| unlock_identity | number | 解锁所需身份标识? | |
+| unlock_need_gift | number | 解锁所需礼物? | |
+
+`data.data[].emoticons[]` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ------ | ---- | ---- |
+| bulge_display | number | 突出展示? | |
+| descript | string | 描述 | |
+| emoji | string | 触发关键词? | |
+| emoticon_id | number | 表情 ID | |
+| emoticon_unique | string | 表情唯一标识 | |
+| emoticon_value_type | number | 表情值类型? | |
+| height | number | 表情图片高度 | |
+| identity | number | 身份限制标识? | |
+| in_player_area | number | 播放器区域内展示? | |
+| is_dynamic | number | 是否为动态表情? | |
+| perm | number | 使用权限? | |
+| unlock_need_gift | number | 解锁需求礼物? | |
+| unlock_need_level | number | 解锁需求等级? | |
+| unlock_show_color | string | 解锁展示颜色? | |
+| unlock_show_image | string | 解锁展示图片? | |
+| unlock_show_text | string | 解锁展示文字? | |
+| url | string | 表情图片 URL | |
+| width | number | 表情图片宽度 | |
+
+`data.data[].top_show` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ------ | ---- | ---- |
+| top_left | object | | 左上 |
+| top_right | object | | 右上 |
+
+`data.data[].top_show.top_left` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ------ | ----- | ---- |
+| image | string | 图片? | |
+| text | string | 文字 | |
+
+`data.data[].top_show.top_right` 对象:
+
+同 `data.data[].top_show.top_left` 对象
+
+`data.data[].top_show_recent` 对象:
+
+同 `data.data[].top_show` 对象
+
+`data.data[].top_show_recent.top_left` 对象:
+
+同 `data.data[].top_show.top_left` 对象
+
+`data.data[].top_show_recent.top_right` 对象:
+
+同 `data.data[].top_show.top_left` 对象
+
+**示例:**
+
+获取直播间 `14047` 的表情包, 平台为 `android`
+
+```shell
+curl -G 'https://api.live.bilibili.com/xlive/web-ucenter/v2/emoticon/GetEmoticons' \
+--url-query 'room_id=14047' \
+--url-query 'platform=android' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "data": {
+ "data": [
+ {
+ "current_cover": "http://i0.hdslb.com/bfs/live/39b7667c2601e4da8019472f5e3df1f2278278b6.png",
+ "emoticons": [
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "啊",
+ "emoticon_id": 331,
+ "emoticon_unique": "official_331",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/cbf2746062242e77bdcb9eb08edbf9b151fe0c2e.png",
+ "width": 200
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "冲鸭",
+ "emoticon_id": 332,
+ "emoticon_unique": "official_332",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/dea7fbbc1c3d3c80f4c7b27263e13460f21874e4.png",
+ "width": 200
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "upup",
+ "emoticon_id": 348,
+ "emoticon_unique": "official_348",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/38d84a4cd2f40069202ee13bbdca5b23d29710fb.png",
+ "width": 200
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "星星向龙",
+ "emoticon_id": 343,
+ "emoticon_unique": "official_343",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/a69423be39b0f2a87dc74f2e44ead70de0eb0d4f.png",
+ "width": 200
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "欧皇驾到",
+ "emoticon_id": 335,
+ "emoticon_unique": "official_335",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/650399e68d0d93df4b3f9e95e7437e83be7fbb1a.png",
+ "width": 200
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "这个好耶",
+ "emoticon_id": 345,
+ "emoticon_unique": "official_345",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/2ce08b31618d3ad0d34877bf949ef0089a0438b7.png",
+ "width": 200
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "泰裤辣",
+ "emoticon_id": 339,
+ "emoticon_unique": "official_339",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/82c38fc930ae764b4c6215f544bf8e1dba73b51c.png",
+ "width": 200
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "闪避技能",
+ "emoticon_id": 337,
+ "emoticon_unique": "official_337",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/fa3febe6c62f3bcd042953141930d96fb8451e60.png",
+ "width": 200
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "稳住能赢",
+ "emoticon_id": 342,
+ "emoticon_unique": "official_342",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/b3495aaa935b045bfc2e1d52738ea7b124e0d552.png",
+ "width": 200
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "中奖喷雾",
+ "emoticon_id": 346,
+ "emoticon_unique": "official_346",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/c3cfa182d16564301d39e4c7e4c186dfb9fabf96.png",
+ "width": 200
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "赞",
+ "emoticon_id": 147,
+ "emoticon_unique": "official_147",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/bbd9045570d0c022a984c637e406cb0e1f208aa9.png",
+ "width": 150
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "妙啊",
+ "emoticon_id": 109,
+ "emoticon_unique": "official_109",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/7b7a2567ad1520f962ee226df777eaf3ca368fbc.png",
+ "width": 138
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "有点东西",
+ "emoticon_id": 113,
+ "emoticon_unique": "official_113",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/39e518474a3673c35245bf6ef8ebfff2c003fdc3.png",
+ "width": 186
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "很有精神",
+ "emoticon_id": 150,
+ "emoticon_unique": "official_150",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/e91cbe30b2db1e624bd964ad1f949661501f42f8.png",
+ "width": 201
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "泪目",
+ "emoticon_id": 103,
+ "emoticon_unique": "official_103",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/aa93b9af7ba03b50df23b64e9afd0d271955cd71.png",
+ "width": 144
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "赢麻了",
+ "emoticon_id": 128,
+ "emoticon_unique": "official_128",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/1d4c71243548a1241f422e90cd8ba2b75c282f6b.png",
+ "width": 156
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "钝角",
+ "emoticon_id": 133,
+ "emoticon_unique": "official_133",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/38cf68c25d9ff5d364468a062fc79571db942ff3.png",
+ "width": 153
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "干杯",
+ "emoticon_id": 149,
+ "emoticon_unique": "official_149",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/8fedede4028a72e71dae31270eedff5f706f7d18.png",
+ "width": 162
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "2333",
+ "emoticon_id": 124,
+ "emoticon_unique": "official_124",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/a98e35996545509188fe4d24bd1a56518ea5af48.png",
+ "width": 183
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "打call",
+ "emoticon_id": 146,
+ "emoticon_unique": "official_146",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/fa1eb4dce3ad198bb8650499830560886ce1116c.png",
+ "width": 195
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "多谢款待",
+ "emoticon_id": 148,
+ "emoticon_unique": "official_148",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/4609dad97c0dfa61f8da0b52ab6fff98e0cf1e58.png",
+ "width": 207
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "awsl",
+ "emoticon_id": 102,
+ "emoticon_unique": "official_102",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/328e93ce9304090f4035e3aa7ef031d015bbc915.png",
+ "width": 162
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "鸡汤来咯",
+ "emoticon_id": 137,
+ "emoticon_unique": "official_137",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/b371151503978177b237afb85185b0f5431d0106.png",
+ "width": 198
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "雀食",
+ "emoticon_id": 118,
+ "emoticon_unique": "official_118",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/7251dc7df587388a3933743bf38394d12a922cd7.png",
+ "width": 159
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "禁止套娃",
+ "emoticon_id": 108,
+ "emoticon_unique": "official_108",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/6a644577437d0bd8a314990dd8ccbec0f3b30c92.png",
+ "width": 204
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "暗中观察",
+ "emoticon_id": 104,
+ "emoticon_unique": "official_104",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/18af5576a4582535a3c828c3ae46a7855d9c6070.png",
+ "width": 156
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "保熟吗",
+ "emoticon_id": 105,
+ "emoticon_unique": "official_105",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/0e28444c8e2faef3169e98e1a41c487144d877d4.png",
+ "width": 162
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "比心",
+ "emoticon_id": 106,
+ "emoticon_unique": "official_106",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/1ba5126b10e5efe3e4e29509d033a37f128beab2.png",
+ "width": 132
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "咸鱼翻身",
+ "emoticon_id": 110,
+ "emoticon_unique": "official_110",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/7db4188c050f55ec59a1629fbc5a53661e4ba780.png",
+ "width": 180
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "mua",
+ "emoticon_id": 111,
+ "emoticon_unique": "official_111",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/08f1aebaa4d9c170aa79cbafe521ef0891bdf2b5.png",
+ "width": 165
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "来了来了",
+ "emoticon_id": 115,
+ "emoticon_unique": "official_115",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/61e790813c51eab55ebe0699df1e9834c90b68ba.png",
+ "width": 168
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "贴贴",
+ "emoticon_id": 116,
+ "emoticon_unique": "official_116",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/88b49dac03bfd5d4cb49672956f78beb2ebd0d0b.png",
+ "width": 162
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "牛牛牛",
+ "emoticon_id": 117,
+ "emoticon_unique": "official_117",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/343f7f7e87fa8a07df63f9cba6b776196d9066f0.png",
+ "width": 168
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "颠个勺",
+ "emoticon_id": 119,
+ "emoticon_unique": "official_119",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/625989e78079e3dc38d75cb9ac392fe8c1aa4a75.png",
+ "width": 195
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "好家伙",
+ "emoticon_id": 122,
+ "emoticon_unique": "official_122",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/c2650bf9bbc79b682a4b67b24df067fdd3e5e9ca.png",
+ "width": 165
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "下次一定",
+ "emoticon_id": 125,
+ "emoticon_unique": "official_125",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/cc2652cef69b22117f1911391567bd2957f27e08.png",
+ "width": 177
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "不上Ban",
+ "emoticon_id": 126,
+ "emoticon_unique": "official_126",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/eff44c1fc03311573e8817ca8010aca72404f65c.png",
+ "width": 231
+ },
+ {
+ "bulge_display": 0,
+ "descript": "",
+ "emoji": "上热榜",
+ "emoticon_id": 134,
+ "emoticon_unique": "official_134",
+ "emoticon_value_type": 0,
+ "height": 60,
+ "identity": 99,
+ "in_player_area": 1,
+ "is_dynamic": 1,
+ "perm": 1,
+ "unlock_need_gift": 0,
+ "unlock_need_level": 0,
+ "unlock_show_color": "",
+ "unlock_show_image": "",
+ "unlock_show_text": "",
+ "url": "http://i0.hdslb.com/bfs/live/83d5b9cdaaa820c2756c013031d34dac1fd4156b.png",
+ "width": 168
+ }
+ ],
+ "pkg_descript": "官方表情(系统)",
+ "pkg_id": 1,
+ "pkg_name": "通用表情",
+ "pkg_perm": 1,
+ "pkg_type": 1,
+ "recently_used_emoticons": [],
+ "top_show": {
+ "top_left": {
+ "image": "",
+ "text": "通用表情"
+ },
+ "top_right": {
+ "image": "",
+ "text": ""
+ }
+ },
+ "top_show_recent": {
+ "top_left": {
+ "image": "",
+ "text": ""
+ },
+ "top_right": {
+ "image": "",
+ "text": ""
+ }
+ },
+ "unlock_identity": 0,
+ "unlock_need_gift": 0
+ }
+ ],
+ "fans_brand": 1,
+ "purchase_url": null
+ },
+ "message": "0",
+ "ttl": 1
+}
+```
+
diff --git a/docs/live/follow_up_live.md b/docs/live/follow_up_live.md
new file mode 100644
index 0000000..5e88da5
--- /dev/null
+++ b/docs/live/follow_up_live.md
@@ -0,0 +1,161 @@
+# 关注UP直播情况
+
+## 用户关注的所有UP的直播情况
+
+> https://api.live.bilibili.com/xlive/web-ucenter/user/following
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|---------|-----|------|-----|-------|
+| page | num | 页码 | 非必要 | 默认为`1` |
+| page_size | num | 每页的数据数量 | 非必要 | 有效值`1`-`10`, 默认为`10` |
+| ignoreRecord | num | | | **尚不明确** 一般为`1` |
+| hit_ab | bool | | | **尚不明确** 建议用`true`, 不填为`false` |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|-----------------|
+| code | num | 返回值 | `0`:成功 `-101`:错误 |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|-----------------|
+| title | str | 标题 | |
+| pageSize | num | 每页的数据数量 | |
+| totalPage | num | 分页数量 | |
+| list | obj | UP直播情况列表 | |
+| count | num | 曾直播过的UP数量 | |
+| never_lived_count | num | 未直播过的UP数量 | |
+| live_count | num | 正在直播的UP数量 | |
+| never_lived_faces | list | | **尚不明确** |
+
+`list`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------------|-----|-----|-----------|
+| roomid | num | 房间号 | |
+| uid | num | 主播uid | |
+| uname | str | 主播名 | |
+| title | str | 直播标题 | |
+| face | str | 主播头像 | |
+| live_status | num | 是否正在直播 | `0`: 未直播 `1`: 正在直播 |
+| record_num | num | | **尚不明确** 一般为0 |
+| recent_record_id | str | | **尚不明确** 一般为空 |
+| is_attention | num | | **尚不明确** 一般为1 |
+| clipnum | num | | **尚不明确** 一般为0 |
+| fans_num | num | | **尚不明确** 一般为0 |
+| area_name | str | | **尚不明确** 一般为空 |
+| area_value | str | | **尚不明确** 一般为空 |
+| tags | str | | **尚不明确** 一般为空 |
+| recent_record_id_v2 | str | | **尚不明确** 一般为空 |
+| record_num_v2 | num | | **尚不明确** 一般为0 |
+| record_live_time | num | 主播上一次直播结束的时间戳 | 正在直播时, 值为`0` |
+| area_name_v2 | str | 频道的名称 | |
+| room_news | str | 房间公告 | |
+| switch | bool | | **尚不明确** |
+| watch_icon | str | | **尚不明确** |
+| text_small | str | | **尚不明确** 当主播正在直播时, 为在线人数(可能) |
+| room_cover | str | 房间封面图片的URL | |
+| parent_area_id | num | 父分区id | |
+| area_id | num | 分区id | |
+
+**示例:**
+
+```shell
+curl -G 'https://api.live.bilibili.com/xlive/web-ucenter/user/following' \
+ -b 'SESSDATA=xxx' \
+ --data-urlencode 'page=1' \
+ --data-urlencode 'page_size=2' \
+ --data-urlencode 'ignoreRecord=1' \
+ --data-urlencode 'hit_ab=true'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "title": "哔哩哔哩直播 - 我的关注",
+ "pageSize": 2,
+ "totalPage": 26,
+ "list": [
+ {
+ "roomid": 544853,
+ "uid": 686127,
+ "uname": "籽岷",
+ "title": "尝试双机位",
+ "face": "https://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp",
+ "live_status": 0,
+ "record_num": 0,
+ "recent_record_id": "",
+ "is_attention": 1,
+ "clipnum": 0,
+ "fans_num": 0,
+ "area_name": "",
+ "area_value": "",
+ "tags": "",
+ "recent_record_id_v2": "",
+ "record_num_v2": 0,
+ "record_live_time": 1720011626,
+ "area_name_v2": "新游推荐",
+ "room_news": "",
+ "switch": true,
+ "watch_icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "text_small": "10.9万",
+ "room_cover": "http://i0.hdslb.com/bfs/live/new_room_cover/6c89c41d7695a080d31ae21c128f7759a7f419e5.jpg",
+ "parent_area_id": 6,
+ "area_id": 889
+ },
+ {
+ "roomid": 21686237,
+ "uid": 456664753,
+ "uname": "央视新闻",
+ "title": "央视新闻的直播间",
+ "face": "https://i1.hdslb.com/bfs/face/38a8db1c187b64a1412fafffbf350f8a3f436371.jpg",
+ "live_status": 0,
+ "record_num": 0,
+ "recent_record_id": "",
+ "is_attention": 1,
+ "clipnum": 0,
+ "fans_num": 0,
+ "area_name": "",
+ "area_value": "",
+ "tags": "",
+ "recent_record_id_v2": "",
+ "record_num_v2": 0,
+ "record_live_time": 1720001717,
+ "area_name_v2": "社科法律心理",
+ "room_news": "",
+ "switch": false,
+ "watch_icon": "https://i0.hdslb.com/bfs/live/0b265af1af0a77abc47aa3b8f1a5c0769d8bd23b.png",
+ "text_small": "0",
+ "room_cover": "http://i0.hdslb.com/bfs/live/d650d0e6e49397ea71d630be0a0e686679df16d8.jpg",
+ "parent_area_id": 11,
+ "area_id": 376
+ }
+ ],
+ "count": 52,
+ "never_lived_count": 30,
+ "live_count": 0,
+ "never_lived_faces": []
+ }
+}
+
+```
+
+
\ No newline at end of file
diff --git a/docs/live/info.md b/docs/live/info.md
new file mode 100644
index 0000000..2106b00
--- /dev/null
+++ b/docs/live/info.md
@@ -0,0 +1,2559 @@
+# 直播间基本信息
+
+## 获取直播间信息
+
+> https://api.live.bilibili.com/room/v1/Room/get_info
+
+*请求方式: GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|---------|-----|------|-----|-------|
+| room_id | num | 直播间号 | 必要 | 可以为短号 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|-----------------|
+| code | num | 返回值 | 0:成功 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:未开播 1:直播中 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: 个人认证(黄) 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'
+```
+
+
+查看响应示例:
+
+```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": []
+ }
+ }
+}
+```
+
+
+
+## 获取用户对应的直播间状态
+
+> https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|-----|-----|---------|-----|-----|
+| mid | num | 目标用户mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|---------------------|
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|----------------|-----|-----------|------------------|
+| roomStatus | num | 直播间状态 | 0:无房间 1:有房间 |
+| roundStatus | num | 轮播状态 | 0:未轮播 1:轮播 |
+| live_status | num | 直播状态 | 0:未开播 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'
+```
+
+
+查看响应示例:
+
+```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
+ }
+}
+```
+
+
+
+## 获取房间页初始化信息
+
+> https://api.live.bilibili.com/room/v1/Room/room_init
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|-----|-----|------------|-----|-----|
+| id | num | 目标直播间号(短号) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|------------------------|
+| code | num | 返回值 | 0:成功 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:未开播 1:直播中 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:普通直播间 1:付费直播间 |
+| special_type | num | 特殊直播间标志 | 0:普通直播间 1:付费直播间 2:拜年祭直播间 |
+
+**示例:**
+
+查询直播间`id=76`的直播间信息
+
+```shell
+curl -G 'https://api.live.bilibili.com/room/v1/Room/room_init' \
+--data-urlencode 'id=76'
+```
+
+
+查看响应示例:
+
+```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
+ }
+}
+```
+
+
+
+## 获取主播信息
+
+> https://api.live.bilibili.com/live_user/v1/Master/info
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|-----|-----|---------|-----|-----|
+| uid | num | 目标用户mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|------------------|
+| code | num | 返回值 | 0:成功 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:保密 0:女 1:男 |
+
+`info`中的`official_verify`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------|-----|--------|------------------------------|
+| type | num | 主播认证类型 | -1:无 0:个人认证 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=2`的主播信息
+
+```shell
+curl -G 'https://api.live.bilibili.com/live_user/v1/Master/info' \
+--data-urlencode 'uid=2'
+```
+
+
+查看响应示例:
+
+```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": ""
+ }
+ }
+}
+```
+
+
+
+## 获取直播间基本信息
+
+> https://api.live.bilibili.com/xlive/web-room/v1/index/getRoomBaseInfo
+
+*请求方式: GET*
+
+注: 亦可用于批量获取
+
+
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | ---- | --- | - | - |
+| req_biz | str | `web_room_componet` | 必要 | |
+| room_ids | num | 直播间短ID | 不必要 | 多个重复该参数即可 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0: 成功 -400: 请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| by_uids | obj | 空 | |
+| by_room_ids | obj | 直播间信息 | |
+
+`data`中的`by_room_ids`对象:
+
+以直播间长ID为键, 直播间信息为值的, 按键名降序排序
+
+`by_room_ids`中的值对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| room_id | num | 直播间长ID | |
+| uid | num | 主播用户mid | |
+| area_id | num | 直播间分区ID | |
+| live_status | num | 直播状态 | 0: 未开播 1: 直播中 2: 轮播中 |
+| live_url | str | 直播间网页url | |
+| parent_area_id | num | 直播间父分区ID | |
+| title | str | 直播间标题 | |
+| parent_area_name | str | 直播间父分区名称 | |
+| area_name | str | 直播间分区名称 | |
+| live_time | str | 开播时间 | `yyyy-MM-dd HH:mm:ss` |
+| description | str | 直播间简介 | |
+| tags | str | 直播间标签 | 以 `,` 分隔 |
+| attention | num | 关注数 | |
+| online | num | 在线人数 | |
+| short_id | num | 直播间短ID | 为0是无短号 |
+| uname | str | 主播用户名 | |
+| cover | str | 直播间封面url | |
+| background | str | 直播间背景url | |
+| join_slide | num | 1 | |
+| live_id | num | 0 | |
+| live_id_str | str | "0" | |
+
+**示例:**
+
+```shell
+curl -G 'https://api.live.bilibili.com/xlive/web-room/v1/index/getRoomBaseInfo' \
+--url-query 'req_biz=web_room_componet' \
+--url-query 'room_ids=1' \
+--url-query 'room_ids=3
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "by_uids": {},
+ "by_room_ids": {
+ "23058": {
+ "room_id": 23058,
+ "uid": 11153765,
+ "area_id": 190,
+ "live_status": 0,
+ "live_url": "https://live.bilibili.com/23058",
+ "parent_area_id": 5,
+ "title": "哔哩哔哩音悦台",
+ "parent_area_name": "电台",
+ "area_name": "唱见电台",
+ "live_time": "0000-00-00 00:00:00",
+ "description": "这里是哔哩哔哩官方音乐台喔!
一起来听音乐吧ε=ε=(ノ≧∇≦)ノ
没想到蒸汽配圣诞下装,意外的很暴露呢=3=
\n",
+ "tags": "",
+ "attention": 225431,
+ "online": 0,
+ "short_id": 3,
+ "uname": "3号直播间",
+ "cover": "",
+ "background": "https://i0.hdslb.com/bfs/live/2836bb7b84c792e2c6aadfd4d1cce13484775fa3.jpg",
+ "join_slide": 1,
+ "live_id": 0,
+ "live_id_str": "0"
+ },
+ "5440": {
+ "room_id": 5440,
+ "uid": 9617619,
+ "area_id": 701,
+ "live_status": 2,
+ "live_url": "https://live.bilibili.com/5440",
+ "parent_area_id": 11,
+ "title": "华为nova Flip新生之夜",
+ "parent_area_name": "知识",
+ "area_name": "科技·科学",
+ "live_time": "0000-00-00 00:00:00",
+ "description": "华为novaFlip新生之夜正在直播中!备案号:Z0910417240818001
",
+ "tags": "",
+ "attention": 17848313,
+ "online": 0,
+ "short_id": 1,
+ "uname": "哔哩哔哩直播",
+ "cover": "http://i0.hdslb.com/bfs/live/1a862058e4211a5e73a8a1bf0635953ea08a4091.jpg",
+ "background": "http://i0.hdslb.com/bfs/live/ec518ede15d4c2547c83cb59f14752450c0889b0.jpg",
+ "join_slide": 1,
+ "live_id": 0,
+ "live_id_str": "0"
+ }
+ }
+ }
+}
+```
+
+
+
+## 批量查询直播间状态
+
+> 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:成功 -111:csrf校验失败 |
+| 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 | 开播时间戳,单位秒,未开播时为0 | |
+| live_status | num | 直播间开播状态 | 0:未开播 1:正在直播 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:普通直播 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]}"
+```
+
+
+查看响应示例:
+
+```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
+ }
+ }
+}
+```
+
+
+
+## 获取直播间最近历史弹幕
+
+> https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory
+
+
+
+*请求方式: GET*
+
+注: 该接口部分返回信息不明, 仅供参考, 来源 [cv8186413](https://www.bilibili.com/read/cv8186413/)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | ---- | --- | - | - |
+| roomid | num | 直播间短ID | 必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0: 成功 -400: 请求错误 |
+| message | str | 错误信息 | 默认为空 |
+| msg | str | 空 | 仅请求成功时存在 |
+| ttl | num | 1 | 仅请求失败时存在 |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| admin | array | 管理员最新的10条弹幕消息 | 格式与`room`相同 |
+| room | array | 普通用户的10条弹幕信息 | 格式与`admin`相同 |
+
+`data`中的任意数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| text | str | 弹幕内容 | |
+| dm_type | num | 弹幕类型 | |
+| uid | num | 弹幕发送者的UID | |
+| nickname | str | 弹幕发送者的昵称 | |
+| uname_color | str | 弹幕发送者的颜色? | |
+| timeline | str | 弹幕发送时间 | 格式为`yyyy-MM-dd HH:mm:ss` |
+| isadmin | num | 是否为管理员 | |
+| vip | num | 是否为VIP? ||
+| svip | num | 是否为SVIP? ||
+| medal | array | 粉丝勋章信息? | 格式不明 |
+| title | array | 标题? | 格式不明 |
+| user_level | array | 用户等级信息? | 格式不明 |
+| rank | num | 排名? | [用户空间详细信息](../user/info.md#获取用户详细信息) |
+| teamid | num | | |
+| rnd | str | 发送时间? | UNIX 秒级时间戳 |
+| user_title | 用户标题? | 格式不明 |
+| guard_level | | | |
+| bubble | | | |
+| bubble_color | | | |
+| lpl | | | |
+| yeah_space_url | | | |
+| jump_to_url | | | |
+| check_info | obj | 弹幕审核信息? | |
+| voice_dm_info | obj | 语音弹幕信息? | |
+| emoticon | obj | 表情信息? | |
+| emots | null | | |
+| id_str | str | 弹幕ID? | |
+| wealth_level | num | 财富等级? | |
+| bubble_id_v2 | num | | |
+| reply | obj | | |
+| group_medal | null | | |
+| user | obj | 该用户信息 ||
+
+`data`对象中的`user`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | - | --- | --- |
+| uid | num | 用户 mid ||
+| base | obj | 用户基本信息 ||
+| medal | null | ||
+| wealth | null | ||
+| title | obj | 用户标题? ||
+| guard | null | ||
+| uhead_frame | null | ||
+| guard_leader | obj | | |
+
+`data`对象中的`user`对象中的`base`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | - | --- | --- |
+| name | str | 用户名 ||
+| face | str | 用户头像 url ||
+| name_color | num | 用户名颜色? ||
+| is_mystery | bool | 是否为神秘用户? ||
+| risk_ctrl_info | null | | |
+| origin_info | obj | 原始信息? | |
+| official_info | obj | 认证信息 | |
+| name_color_str | str | | |
+
+**示例:**
+
+```shell
+curl -G 'https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory' \
+--url-query 'roomid=1'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "data": {
+ "admin": [],
+ "room": [
+ {
+ "text": "",
+ "dm_type": 0,
+ "uid": 20276964,
+ "nickname": "咸菜拉面",
+ "uname_color": "",
+ "timeline": "2024-08-15 05:05:06",
+ "isadmin": 0,
+ "vip": 0,
+ "svip": 0,
+ "medal": [
+ 27,
+ "小孩梓",
+ "阿梓从小就很可爱",
+ 80397,
+ 398668,
+ "",
+ 0,
+ 6809855,
+ 398668,
+ 6850801,
+ 3,
+ 1,
+ 7706705
+ ],
+ "title": [
+ "title-86-1",
+ "title-86-1"
+ ],
+ "user_level": [
+ 59,
+ 0,
+ 16752445,
+ 931
+ ],
+ "rank": 10000,
+ "teamid": 0,
+ "rnd": "1723669505",
+ "user_title": "title-86-1",
+ "guard_level": 0,
+ "bubble": 0,
+ "bubble_color": "",
+ "lpl": 0,
+ "yeah_space_url": "",
+ "jump_to_url": "",
+ "check_info": {
+ "ts": 1723669506,
+ "ct": "18434F3D"
+ },
+ "voice_dm_info": {
+ "voice_url": "",
+ "file_format": "",
+ "text": "",
+ "file_duration": 0,
+ "file_id": ""
+ },
+ "emoticon": {
+ "id": 0,
+ "emoticon_unique": "",
+ "text": "",
+ "perm": 0,
+ "url": "",
+ "in_player_area": 0,
+ "bulge_display": 0,
+ "is_dynamic": 0,
+ "height": 0,
+ "width": 0
+ },
+ "emots": null,
+ "id_str": "74368f428dfaec806cd205e62866bd1c45",
+ "wealth_level": 37,
+ "bubble_id_v2": 0,
+ "reply": {
+ "show_reply": true,
+ "reply_mid": 0,
+ "reply_uname": "",
+ "reply_uname_color": "",
+ "reply_is_mystery": false
+ },
+ "group_medal": null,
+ "user": {
+ "uid": 20276964,
+ "base": {
+ "name": "咸菜拉面",
+ "face": "https://i0.hdslb.com/bfs/face/182b73f6b6274fcee7491219f511b1748c4bc712.jpg",
+ "name_color": 0,
+ "is_mystery": false,
+ "risk_ctrl_info": null,
+ "origin_info": {
+ "name": "咸菜拉面",
+ "face": "https://i0.hdslb.com/bfs/face/182b73f6b6274fcee7491219f511b1748c4bc712.jpg"
+ },
+ "official_info": {
+ "role": 0,
+ "title": "",
+ "desc": "",
+ "type": -1
+ },
+ "name_color_str": ""
+ },
+ "medal": {
+ "name": "小孩梓",
+ "level": 27,
+ "color_start": 398668,
+ "color_end": 6850801,
+ "color_border": 6809855,
+ "color": 398668,
+ "id": 13139,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 7706705,
+ "guard_level": 3,
+ "score": 50112778,
+ "guard_icon": "https://i0.hdslb.com/bfs/live/143f5ec3003b4080d1b5f817a9efdca46d631945.png",
+ "honor_icon": "",
+ "v2_medal_color_start": "#4775EFCC",
+ "v2_medal_color_end": "#4775EFCC",
+ "v2_medal_color_border": "#58A1F8FF",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ },
+ "wealth": null,
+ "title": {
+ "old_title_css_id": "title-86-1",
+ "title_css_id": "title-86-1"
+ },
+ "guard": null,
+ "uhead_frame": null,
+ "guard_leader": {
+ "is_guard_leader": false
+ }
+ }
+ },
+ {
+ "text": "",
+ "dm_type": 0,
+ "uid": 20276964,
+ "nickname": "咸菜拉面",
+ "uname_color": "",
+ "timeline": "2024-08-16 05:05:06",
+ "isadmin": 0,
+ "vip": 0,
+ "svip": 0,
+ "medal": [
+ 27,
+ "小孩梓",
+ "阿梓从小就很可爱",
+ 80397,
+ 398668,
+ "",
+ 0,
+ 6809855,
+ 398668,
+ 6850801,
+ 3,
+ 1,
+ 7706705
+ ],
+ "title": [
+ "title-86-1",
+ "title-86-1"
+ ],
+ "user_level": [
+ 59,
+ 0,
+ 16752445,
+ 931
+ ],
+ "rank": 10000,
+ "teamid": 0,
+ "rnd": "1723755905",
+ "user_title": "title-86-1",
+ "guard_level": 0,
+ "bubble": 0,
+ "bubble_color": "",
+ "lpl": 0,
+ "yeah_space_url": "",
+ "jump_to_url": "",
+ "check_info": {
+ "ts": 1723755906,
+ "ct": "F65D229F"
+ },
+ "voice_dm_info": {
+ "voice_url": "",
+ "file_format": "",
+ "text": "",
+ "file_duration": 0,
+ "file_id": ""
+ },
+ "emoticon": {
+ "id": 0,
+ "emoticon_unique": "",
+ "text": "",
+ "perm": 0,
+ "url": "",
+ "in_player_area": 0,
+ "bulge_display": 0,
+ "is_dynamic": 0,
+ "height": 0,
+ "width": 0
+ },
+ "emots": null,
+ "id_str": "7f3bb90826ad642012a31368f266be6d2",
+ "wealth_level": 37,
+ "bubble_id_v2": 0,
+ "reply": {
+ "show_reply": true,
+ "reply_mid": 0,
+ "reply_uname": "",
+ "reply_uname_color": "",
+ "reply_is_mystery": false
+ },
+ "group_medal": null,
+ "user": {
+ "uid": 20276964,
+ "base": {
+ "name": "咸菜拉面",
+ "face": "https://i0.hdslb.com/bfs/face/182b73f6b6274fcee7491219f511b1748c4bc712.jpg",
+ "name_color": 0,
+ "is_mystery": false,
+ "risk_ctrl_info": null,
+ "origin_info": {
+ "name": "咸菜拉面",
+ "face": "https://i0.hdslb.com/bfs/face/182b73f6b6274fcee7491219f511b1748c4bc712.jpg"
+ },
+ "official_info": {
+ "role": 0,
+ "title": "",
+ "desc": "",
+ "type": -1
+ },
+ "name_color_str": ""
+ },
+ "medal": {
+ "name": "小孩梓",
+ "level": 27,
+ "color_start": 398668,
+ "color_end": 6850801,
+ "color_border": 6809855,
+ "color": 398668,
+ "id": 13139,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 7706705,
+ "guard_level": 3,
+ "score": 50112778,
+ "guard_icon": "https://i0.hdslb.com/bfs/live/143f5ec3003b4080d1b5f817a9efdca46d631945.png",
+ "honor_icon": "",
+ "v2_medal_color_start": "#4775EFCC",
+ "v2_medal_color_end": "#4775EFCC",
+ "v2_medal_color_border": "#58A1F8FF",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ },
+ "wealth": null,
+ "title": {
+ "old_title_css_id": "title-86-1",
+ "title_css_id": "title-86-1"
+ },
+ "guard": null,
+ "uhead_frame": null,
+ "guard_leader": {
+ "is_guard_leader": false
+ }
+ }
+ },
+ {
+ "text": "好帅",
+ "dm_type": 0,
+ "uid": 3546708493469870,
+ "nickname": "aodun1",
+ "uname_color": "",
+ "timeline": "2024-08-16 22:33:28",
+ "isadmin": 0,
+ "vip": 0,
+ "svip": 0,
+ "medal": [],
+ "title": [
+ "",
+ ""
+ ],
+ "user_level": [
+ 0,
+ 0,
+ 9868950,
+ ">50000"
+ ],
+ "rank": 10000,
+ "teamid": 0,
+ "rnd": "1723811729",
+ "user_title": "",
+ "guard_level": 0,
+ "bubble": 0,
+ "bubble_color": "",
+ "lpl": 0,
+ "yeah_space_url": "",
+ "jump_to_url": "",
+ "check_info": {
+ "ts": 1723818808,
+ "ct": "1B75FB"
+ },
+ "voice_dm_info": {
+ "voice_url": "",
+ "file_format": "",
+ "text": "",
+ "file_duration": 0,
+ "file_id": ""
+ },
+ "emoticon": {
+ "id": 0,
+ "emoticon_unique": "",
+ "text": "",
+ "perm": 0,
+ "url": "",
+ "in_player_area": 0,
+ "bulge_display": 0,
+ "is_dynamic": 0,
+ "height": 0,
+ "width": 0
+ },
+ "emots": null,
+ "id_str": "088336a59eb277942ee353dd6666bf6347",
+ "wealth_level": 0,
+ "bubble_id_v2": 0,
+ "reply": {
+ "show_reply": true,
+ "reply_mid": 0,
+ "reply_uname": "",
+ "reply_uname_color": "",
+ "reply_is_mystery": false
+ },
+ "group_medal": null,
+ "user": {
+ "uid": 3546708493469870,
+ "base": {
+ "name": "aodun1",
+ "face": "https://i2.hdslb.com/bfs/face/6fb05f895d854e68419d45eef2c2e272b04ad25f.jpg",
+ "name_color": 0,
+ "is_mystery": false,
+ "risk_ctrl_info": null,
+ "origin_info": {
+ "name": "aodun1",
+ "face": "https://i2.hdslb.com/bfs/face/6fb05f895d854e68419d45eef2c2e272b04ad25f.jpg"
+ },
+ "official_info": {
+ "role": 0,
+ "title": "",
+ "desc": "",
+ "type": -1
+ },
+ "name_color_str": ""
+ },
+ "medal": null,
+ "wealth": null,
+ "title": {
+ "old_title_css_id": "",
+ "title_css_id": ""
+ },
+ "guard": null,
+ "uhead_frame": null,
+ "guard_leader": {
+ "is_guard_leader": false
+ }
+ }
+ },
+ {
+ "text": "好帅",
+ "dm_type": 0,
+ "uid": 3546708493469870,
+ "nickname": "aodun1",
+ "uname_color": "",
+ "timeline": "2024-08-16 22:35:16",
+ "isadmin": 0,
+ "vip": 0,
+ "svip": 0,
+ "medal": [],
+ "title": [
+ "",
+ ""
+ ],
+ "user_level": [
+ 0,
+ 0,
+ 9868950,
+ ">50000"
+ ],
+ "rank": 10000,
+ "teamid": 0,
+ "rnd": "1723811729",
+ "user_title": "",
+ "guard_level": 0,
+ "bubble": 0,
+ "bubble_color": "",
+ "lpl": 0,
+ "yeah_space_url": "",
+ "jump_to_url": "",
+ "check_info": {
+ "ts": 1723818916,
+ "ct": "D6ABF2E7"
+ },
+ "voice_dm_info": {
+ "voice_url": "",
+ "file_format": "",
+ "text": "",
+ "file_duration": 0,
+ "file_id": ""
+ },
+ "emoticon": {
+ "id": 0,
+ "emoticon_unique": "",
+ "text": "",
+ "perm": 0,
+ "url": "",
+ "in_player_area": 0,
+ "bulge_display": 0,
+ "is_dynamic": 0,
+ "height": 0,
+ "width": 0
+ },
+ "emots": null,
+ "id_str": "6f421255746f5d8e4731fdadac66bf6356",
+ "wealth_level": 0,
+ "bubble_id_v2": 0,
+ "reply": {
+ "show_reply": true,
+ "reply_mid": 0,
+ "reply_uname": "",
+ "reply_uname_color": "",
+ "reply_is_mystery": false
+ },
+ "group_medal": null,
+ "user": {
+ "uid": 3546708493469870,
+ "base": {
+ "name": "aodun1",
+ "face": "https://i2.hdslb.com/bfs/face/6fb05f895d854e68419d45eef2c2e272b04ad25f.jpg",
+ "name_color": 0,
+ "is_mystery": false,
+ "risk_ctrl_info": null,
+ "origin_info": {
+ "name": "aodun1",
+ "face": "https://i2.hdslb.com/bfs/face/6fb05f895d854e68419d45eef2c2e272b04ad25f.jpg"
+ },
+ "official_info": {
+ "role": 0,
+ "title": "",
+ "desc": "",
+ "type": -1
+ },
+ "name_color_str": ""
+ },
+ "medal": null,
+ "wealth": null,
+ "title": {
+ "old_title_css_id": "",
+ "title_css_id": ""
+ },
+ "guard": null,
+ "uhead_frame": null,
+ "guard_leader": {
+ "is_guard_leader": false
+ }
+ }
+ },
+ {
+ "text": "好帅",
+ "dm_type": 0,
+ "uid": 3546708493469870,
+ "nickname": "aodun1",
+ "uname_color": "",
+ "timeline": "2024-08-16 22:36:51",
+ "isadmin": 0,
+ "vip": 0,
+ "svip": 0,
+ "medal": [],
+ "title": [
+ "",
+ ""
+ ],
+ "user_level": [
+ 0,
+ 0,
+ 9868950,
+ ">50000"
+ ],
+ "rank": 10000,
+ "teamid": 0,
+ "rnd": "1723811729",
+ "user_title": "",
+ "guard_level": 0,
+ "bubble": 0,
+ "bubble_color": "",
+ "lpl": 0,
+ "yeah_space_url": "",
+ "jump_to_url": "",
+ "check_info": {
+ "ts": 1723819011,
+ "ct": "1B6978C1"
+ },
+ "voice_dm_info": {
+ "voice_url": "",
+ "file_format": "",
+ "text": "",
+ "file_duration": 0,
+ "file_id": ""
+ },
+ "emoticon": {
+ "id": 0,
+ "emoticon_unique": "",
+ "text": "",
+ "perm": 0,
+ "url": "",
+ "in_player_area": 0,
+ "bulge_display": 0,
+ "is_dynamic": 0,
+ "height": 0,
+ "width": 0
+ },
+ "emots": null,
+ "id_str": "270f5a2ac69c5904617873cc4666bf640",
+ "wealth_level": 0,
+ "bubble_id_v2": 0,
+ "reply": {
+ "show_reply": true,
+ "reply_mid": 0,
+ "reply_uname": "",
+ "reply_uname_color": "",
+ "reply_is_mystery": false
+ },
+ "group_medal": null,
+ "user": {
+ "uid": 3546708493469870,
+ "base": {
+ "name": "aodun1",
+ "face": "https://i2.hdslb.com/bfs/face/6fb05f895d854e68419d45eef2c2e272b04ad25f.jpg",
+ "name_color": 0,
+ "is_mystery": false,
+ "risk_ctrl_info": null,
+ "origin_info": {
+ "name": "aodun1",
+ "face": "https://i2.hdslb.com/bfs/face/6fb05f895d854e68419d45eef2c2e272b04ad25f.jpg"
+ },
+ "official_info": {
+ "role": 0,
+ "title": "",
+ "desc": "",
+ "type": -1
+ },
+ "name_color_str": ""
+ },
+ "medal": null,
+ "wealth": null,
+ "title": {
+ "old_title_css_id": "",
+ "title_css_id": ""
+ },
+ "guard": null,
+ "uhead_frame": null,
+ "guard_leader": {
+ "is_guard_leader": false
+ }
+ }
+ },
+ {
+ "text": "好帅",
+ "dm_type": 0,
+ "uid": 3546708493469870,
+ "nickname": "aodun1",
+ "uname_color": "",
+ "timeline": "2024-08-16 22:39:01",
+ "isadmin": 0,
+ "vip": 0,
+ "svip": 0,
+ "medal": [],
+ "title": [
+ "",
+ ""
+ ],
+ "user_level": [
+ 0,
+ 0,
+ 9868950,
+ ">50000"
+ ],
+ "rank": 10000,
+ "teamid": 0,
+ "rnd": "1723811729",
+ "user_title": "",
+ "guard_level": 0,
+ "bubble": 0,
+ "bubble_color": "",
+ "lpl": 0,
+ "yeah_space_url": "",
+ "jump_to_url": "",
+ "check_info": {
+ "ts": 1723819141,
+ "ct": "143613AF"
+ },
+ "voice_dm_info": {
+ "voice_url": "",
+ "file_format": "",
+ "text": "",
+ "file_duration": 0,
+ "file_id": ""
+ },
+ "emoticon": {
+ "id": 0,
+ "emoticon_unique": "",
+ "text": "",
+ "perm": 0,
+ "url": "",
+ "in_player_area": 0,
+ "bulge_display": 0,
+ "is_dynamic": 0,
+ "height": 0,
+ "width": 0
+ },
+ "emots": null,
+ "id_str": "002ebbdc402b3d625052865f7b66bf6469",
+ "wealth_level": 0,
+ "bubble_id_v2": 0,
+ "reply": {
+ "show_reply": true,
+ "reply_mid": 0,
+ "reply_uname": "",
+ "reply_uname_color": "",
+ "reply_is_mystery": false
+ },
+ "group_medal": null,
+ "user": {
+ "uid": 3546708493469870,
+ "base": {
+ "name": "aodun1",
+ "face": "https://i2.hdslb.com/bfs/face/6fb05f895d854e68419d45eef2c2e272b04ad25f.jpg",
+ "name_color": 0,
+ "is_mystery": false,
+ "risk_ctrl_info": null,
+ "origin_info": {
+ "name": "aodun1",
+ "face": "https://i2.hdslb.com/bfs/face/6fb05f895d854e68419d45eef2c2e272b04ad25f.jpg"
+ },
+ "official_info": {
+ "role": 0,
+ "title": "",
+ "desc": "",
+ "type": -1
+ },
+ "name_color_str": ""
+ },
+ "medal": null,
+ "wealth": null,
+ "title": {
+ "old_title_css_id": "",
+ "title_css_id": ""
+ },
+ "guard": null,
+ "uhead_frame": null,
+ "guard_leader": {
+ "is_guard_leader": false
+ }
+ }
+ },
+ {
+ "text": "赚麻了 哈哈",
+ "dm_type": 0,
+ "uid": 243082910,
+ "nickname": "可人的樱花",
+ "uname_color": "",
+ "timeline": "2024-08-17 01:00:49",
+ "isadmin": 0,
+ "vip": 0,
+ "svip": 0,
+ "medal": [],
+ "title": [
+ "",
+ ""
+ ],
+ "user_level": [
+ 0,
+ 0,
+ 9868950,
+ ">50000"
+ ],
+ "rank": 10000,
+ "teamid": 0,
+ "rnd": "1723379161",
+ "user_title": "",
+ "guard_level": 0,
+ "bubble": 0,
+ "bubble_color": "",
+ "lpl": 0,
+ "yeah_space_url": "",
+ "jump_to_url": "",
+ "check_info": {
+ "ts": 1723827649,
+ "ct": "3917D4D7"
+ },
+ "voice_dm_info": {
+ "voice_url": "",
+ "file_format": "",
+ "text": "",
+ "file_duration": 0,
+ "file_id": ""
+ },
+ "emoticon": {
+ "id": 0,
+ "emoticon_unique": "",
+ "text": "",
+ "perm": 0,
+ "url": "",
+ "in_player_area": 0,
+ "bulge_display": 0,
+ "is_dynamic": 0,
+ "height": 0,
+ "width": 0
+ },
+ "emots": null,
+ "id_str": "03f3261e144366383c49c6b5d166bf8563",
+ "wealth_level": 7,
+ "bubble_id_v2": 0,
+ "reply": {
+ "show_reply": true,
+ "reply_mid": 0,
+ "reply_uname": "",
+ "reply_uname_color": "",
+ "reply_is_mystery": false
+ },
+ "group_medal": null,
+ "user": {
+ "uid": 243082910,
+ "base": {
+ "name": "可人的樱花",
+ "face": "http://i2.hdslb.com/bfs/face/5faa9bef952f831236b740932c559476658f88e5.jpg",
+ "name_color": 0,
+ "is_mystery": false,
+ "risk_ctrl_info": null,
+ "origin_info": {
+ "name": "可人的樱花",
+ "face": "http://i2.hdslb.com/bfs/face/5faa9bef952f831236b740932c559476658f88e5.jpg"
+ },
+ "official_info": {
+ "role": 0,
+ "title": "",
+ "desc": "",
+ "type": -1
+ },
+ "name_color_str": ""
+ },
+ "medal": null,
+ "wealth": null,
+ "title": {
+ "old_title_css_id": "",
+ "title_css_id": ""
+ },
+ "guard": null,
+ "uhead_frame": null,
+ "guard_leader": {
+ "is_guard_leader": false
+ }
+ }
+ },
+ {
+ "text": "",
+ "dm_type": 0,
+ "uid": 20276964,
+ "nickname": "咸菜拉面",
+ "uname_color": "",
+ "timeline": "2024-08-17 05:05:07",
+ "isadmin": 0,
+ "vip": 0,
+ "svip": 0,
+ "medal": [
+ 27,
+ "小孩梓",
+ "阿梓从小就很可爱",
+ 80397,
+ 398668,
+ "",
+ 0,
+ 6809855,
+ 398668,
+ 6850801,
+ 3,
+ 1,
+ 7706705
+ ],
+ "title": [
+ "title-86-1",
+ "title-86-1"
+ ],
+ "user_level": [
+ 59,
+ 0,
+ 16752445,
+ 931
+ ],
+ "rank": 10000,
+ "teamid": 0,
+ "rnd": "1723842307",
+ "user_title": "title-86-1",
+ "guard_level": 0,
+ "bubble": 0,
+ "bubble_color": "",
+ "lpl": 0,
+ "yeah_space_url": "",
+ "jump_to_url": "",
+ "check_info": {
+ "ts": 1723842307,
+ "ct": "8B947ABC"
+ },
+ "voice_dm_info": {
+ "voice_url": "",
+ "file_format": "",
+ "text": "",
+ "file_duration": 0,
+ "file_id": ""
+ },
+ "emoticon": {
+ "id": 0,
+ "emoticon_unique": "",
+ "text": "",
+ "perm": 0,
+ "url": "",
+ "in_player_area": 0,
+ "bulge_display": 0,
+ "is_dynamic": 0,
+ "height": 0,
+ "width": 0
+ },
+ "emots": null,
+ "id_str": "1a928b968afaa7825ea506ffe566bfbf16",
+ "wealth_level": 37,
+ "bubble_id_v2": 0,
+ "reply": {
+ "show_reply": true,
+ "reply_mid": 0,
+ "reply_uname": "",
+ "reply_uname_color": "",
+ "reply_is_mystery": false
+ },
+ "group_medal": null,
+ "user": {
+ "uid": 20276964,
+ "base": {
+ "name": "咸菜拉面",
+ "face": "https://i0.hdslb.com/bfs/face/182b73f6b6274fcee7491219f511b1748c4bc712.jpg",
+ "name_color": 0,
+ "is_mystery": false,
+ "risk_ctrl_info": null,
+ "origin_info": {
+ "name": "咸菜拉面",
+ "face": "https://i0.hdslb.com/bfs/face/182b73f6b6274fcee7491219f511b1748c4bc712.jpg"
+ },
+ "official_info": {
+ "role": 0,
+ "title": "",
+ "desc": "",
+ "type": -1
+ },
+ "name_color_str": ""
+ },
+ "medal": {
+ "name": "小孩梓",
+ "level": 27,
+ "color_start": 398668,
+ "color_end": 6850801,
+ "color_border": 6809855,
+ "color": 398668,
+ "id": 13139,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 7706705,
+ "guard_level": 3,
+ "score": 50112778,
+ "guard_icon": "https://i0.hdslb.com/bfs/live/143f5ec3003b4080d1b5f817a9efdca46d631945.png",
+ "honor_icon": "",
+ "v2_medal_color_start": "#4775EFCC",
+ "v2_medal_color_end": "#4775EFCC",
+ "v2_medal_color_border": "#58A1F8FF",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ },
+ "wealth": null,
+ "title": {
+ "old_title_css_id": "title-86-1",
+ "title_css_id": "title-86-1"
+ },
+ "guard": null,
+ "uhead_frame": null,
+ "guard_leader": {
+ "is_guard_leader": false
+ }
+ }
+ },
+ {
+ "text": "下播啦~ 感谢大家的陪伴~ 下次见哦~",
+ "dm_type": 0,
+ "uid": 3546614675278489,
+ "nickname": "机器人管家_鱼",
+ "uname_color": "",
+ "timeline": "2024-08-18 00:07:36",
+ "isadmin": 0,
+ "vip": 0,
+ "svip": 0,
+ "medal": [
+ 21,
+ "赴神明",
+ "Mr_钟明",
+ 27751673,
+ 1725515,
+ "",
+ 0,
+ 12632256,
+ 12632256,
+ 12632256,
+ 0,
+ 0,
+ 3493291261692485
+ ],
+ "title": [
+ "",
+ ""
+ ],
+ "user_level": [
+ 11,
+ 0,
+ 6406234,
+ ">50000"
+ ],
+ "rank": 10000,
+ "teamid": 0,
+ "rnd": "1723910862",
+ "user_title": "",
+ "guard_level": 0,
+ "bubble": 0,
+ "bubble_color": "",
+ "lpl": 0,
+ "yeah_space_url": "",
+ "jump_to_url": "",
+ "check_info": {
+ "ts": 1723910856,
+ "ct": "9BD05026"
+ },
+ "voice_dm_info": {
+ "voice_url": "",
+ "file_format": "",
+ "text": "",
+ "file_duration": 0,
+ "file_id": ""
+ },
+ "emoticon": {
+ "id": 0,
+ "emoticon_unique": "",
+ "text": "",
+ "perm": 0,
+ "url": "",
+ "in_player_area": 0,
+ "bulge_display": 0,
+ "is_dynamic": 0,
+ "height": 0,
+ "width": 0
+ },
+ "emots": null,
+ "id_str": "2ee6101973eeb69931eb86ac7e66c0ca17",
+ "wealth_level": 23,
+ "bubble_id_v2": 0,
+ "reply": {
+ "show_reply": true,
+ "reply_mid": 0,
+ "reply_uname": "",
+ "reply_uname_color": "",
+ "reply_is_mystery": false
+ },
+ "group_medal": null,
+ "user": {
+ "uid": 3546614675278489,
+ "base": {
+ "name": "机器人管家_鱼",
+ "face": "https://i1.hdslb.com/bfs/face/de737cd746a96742c07ced6c213aa25cf0429d90.jpg",
+ "name_color": 0,
+ "is_mystery": false,
+ "risk_ctrl_info": null,
+ "origin_info": {
+ "name": "机器人管家_鱼",
+ "face": "https://i1.hdslb.com/bfs/face/de737cd746a96742c07ced6c213aa25cf0429d90.jpg"
+ },
+ "official_info": {
+ "role": 0,
+ "title": "",
+ "desc": "",
+ "type": -1
+ },
+ "name_color_str": ""
+ },
+ "medal": {
+ "name": "赴神明",
+ "level": 21,
+ "color_start": 12632256,
+ "color_end": 12632256,
+ "color_border": 12632256,
+ "color": 1725515,
+ "id": 1231122,
+ "typ": 0,
+ "is_light": 0,
+ "ruid": 3493291261692485,
+ "guard_level": 0,
+ "score": 50001573,
+ "guard_icon": "",
+ "honor_icon": "",
+ "v2_medal_color_start": "#919298CC",
+ "v2_medal_color_end": "#919298CC",
+ "v2_medal_color_border": "#919298CC",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#6C6C7299",
+ "user_receive_count": 0
+ },
+ "wealth": null,
+ "title": {
+ "old_title_css_id": "",
+ "title_css_id": ""
+ },
+ "guard": null,
+ "uhead_frame": null,
+ "guard_leader": {
+ "is_guard_leader": false
+ }
+ }
+ },
+ {
+ "text": "",
+ "dm_type": 0,
+ "uid": 20276964,
+ "nickname": "咸菜拉面",
+ "uname_color": "",
+ "timeline": "2024-08-18 05:05:05",
+ "isadmin": 0,
+ "vip": 0,
+ "svip": 0,
+ "medal": [
+ 27,
+ "小孩梓",
+ "阿梓从小就很可爱",
+ 80397,
+ 398668,
+ "",
+ 0,
+ 6809855,
+ 398668,
+ 6850801,
+ 3,
+ 1,
+ 7706705
+ ],
+ "title": [
+ "title-86-1",
+ "title-86-1"
+ ],
+ "user_level": [
+ 59,
+ 0,
+ 16752445,
+ 931
+ ],
+ "rank": 10000,
+ "teamid": 0,
+ "rnd": "1723928706",
+ "user_title": "title-86-1",
+ "guard_level": 0,
+ "bubble": 0,
+ "bubble_color": "",
+ "lpl": 0,
+ "yeah_space_url": "",
+ "jump_to_url": "",
+ "check_info": {
+ "ts": 1723928705,
+ "ct": "8A379FF4"
+ },
+ "voice_dm_info": {
+ "voice_url": "",
+ "file_format": "",
+ "text": "",
+ "file_duration": 0,
+ "file_id": ""
+ },
+ "emoticon": {
+ "id": 0,
+ "emoticon_unique": "",
+ "text": "",
+ "perm": 0,
+ "url": "",
+ "in_player_area": 0,
+ "bulge_display": 0,
+ "is_dynamic": 0,
+ "height": 0,
+ "width": 0
+ },
+ "emots": null,
+ "id_str": "41e8b55dea381d494cfe60ba3466c11064",
+ "wealth_level": 37,
+ "bubble_id_v2": 0,
+ "reply": {
+ "show_reply": true,
+ "reply_mid": 0,
+ "reply_uname": "",
+ "reply_uname_color": "",
+ "reply_is_mystery": false
+ },
+ "group_medal": null,
+ "user": {
+ "uid": 20276964,
+ "base": {
+ "name": "咸菜拉面",
+ "face": "https://i0.hdslb.com/bfs/face/182b73f6b6274fcee7491219f511b1748c4bc712.jpg",
+ "name_color": 0,
+ "is_mystery": false,
+ "risk_ctrl_info": null,
+ "origin_info": {
+ "name": "咸菜拉面",
+ "face": "https://i0.hdslb.com/bfs/face/182b73f6b6274fcee7491219f511b1748c4bc712.jpg"
+ },
+ "official_info": {
+ "role": 0,
+ "title": "",
+ "desc": "",
+ "type": -1
+ },
+ "name_color_str": ""
+ },
+ "medal": {
+ "name": "小孩梓",
+ "level": 27,
+ "color_start": 398668,
+ "color_end": 6850801,
+ "color_border": 6809855,
+ "color": 398668,
+ "id": 13139,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 7706705,
+ "guard_level": 3,
+ "score": 50112778,
+ "guard_icon": "https://i0.hdslb.com/bfs/live/143f5ec3003b4080d1b5f817a9efdca46d631945.png",
+ "honor_icon": "",
+ "v2_medal_color_start": "#4775EFCC",
+ "v2_medal_color_end": "#4775EFCC",
+ "v2_medal_color_border": "#58A1F8FF",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ },
+ "wealth": null,
+ "title": {
+ "old_title_css_id": "title-86-1",
+ "title_css_id": "title-86-1"
+ },
+ "guard": null,
+ "uhead_frame": null,
+ "guard_leader": {
+ "is_guard_leader": false
+ }
+ }
+ }
+ ]
+ },
+ "message": "",
+ "msg": ""
+}
+```
+
+
+
+## 清晰度代码
+
+| 代码 | 说明 |
+|-------|-----|
+| 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 | 直播协议 | 必要 | 0:http_stream 1:http_hls 可多选, 使用英文逗号分隔 |
+| format | str | 格式 | 必要 | 0:flv 1:ts 2:fmp4 可多选, 使用英文逗号分隔 |
+| codec | str | 编码格式 | 必要 | 0:AVC 1:HEVC 可多选, 使用英文逗号分隔 |
+| qn | num | 清晰度编码 | | 默认`150` [清晰度代码](#清晰度代码) |
+| platform | str | `web` | | |
+| ptype | num | `8` | | |
+| dolby | num | `5` | | |
+| panorama | num | `1` | | |
+
+**json回复:**
+
+根对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+|---------|-----|------|-----------------------|
+| code | num | 响应码 | 0:成功 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:未开播 1:直播中 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'
+```
+
+
+查看响应示例:
+
+```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
+ }
+ }
+ }
+}
+```
+
+
+
+
+
+
+
+## 获取直播间主播信息
+
+> https://api.live.bilibili.com/live_user/v1/UserInfo/get_anchor_in_room
+
+*请求方式: GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|---------|-----|------|-----|-------|
+| roomid | num | 直播间号 | 必要 | 可以为短号 |
+
+
+**json回复:**
+
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|-----------------|
+| code | num | 返回值 | 0:成功 (直播间不存在也为0) |
+| message | str | 错误信息 | |
+| msg | str | 错误信息 | |
+| data | obj | 信息本体 | |
+
+
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------------------|-----------|--------|-----------------------------|
+| info | obj | 主播信息 | |
+| level | obj | 直播等级 | |
+| san | num | 主播san值 | 12满分 |
+
+
+`info`对象:
+
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------------|------|------------------|----------|
+| uid | num | 主播mid | |
+| uname | str | 主播用户名 | |
+| face | str | 主播头像URL | |
+| rank | str | 主播排名 | |
+| platform_user_level | num | 平台用户等级 | |
+| mobile_verify | num | 手机验证状态 | |
+| identification | num | 身份认证状态 | |
+| official_verify | obj | 认证信息 | |
+| vip_type | num | VIP类型 | |
+| gender | num | 主播性别 | -1:保密 0:女 1:男 |
+
+
+`info`中的`official_verify`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------|------|----------|-----|
+| type | num | 主播认证类型 | -1:无 0:个人认证 1:机构认证 |
+| desc | str | 主播认证信息 | |
+| role | num | 未知 | |
+
+`level`对象:
+
+
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------------|------|------------------|----------|
+| uid | num | 用户ID | |
+| cost | num | 消费金额 | |
+| rcost | num | 充值金额 | |
+| user_score | str | 用户积分 | |
+| vip | num | VIP状态 | |
+| vip_time | str | VIP到期时间 | |
+| svip | num | SVIP状态 | |
+| svip_time | str | SVIP到期时间 | |
+| update_time | str | 更新时间 | |
+| master_level | obj | 主播等级 | |
+| user_level | num | 用户等级 | |
+| color | num | 颜色值 | |
+| anchor_score | num | 主播积分 | |
+
+
+
+`level` 中的 `master_level`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------------|------|------------------|----------|
+| level | num | 主播等级 | |
+| color | num | 颜色值 | |
+| current | list | 当前积分 | |
+| next | list | 下一等级积分 | |
+| anchor_score | num | 主播积分 | |
+| upgrade_score | num | 升级积分 | |
+| master_level_color | num | 主播等级颜色值 | |
+| sort | str | 排名 | |
+
+
+**示例:**
+
+查询`roomid=1`的直播间主播信息
+
+```shell
+curl -G 'https://api.live.bilibili.com/live_user/v1/UserInfo/get_anchor_in_room' \
+--data-urlencode 'roomid=1'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "success",
+ "message": "success",
+ "data": {
+ "info": {
+ "uid": 9617619,
+ "uname": "哔哩哔哩直播",
+ "face": "https://i0.hdslb.com/bfs/face/8f6a614a48a3813d90da7a11894ae56a59396fcd.jpg",
+ "rank": "10000",
+ "platform_user_level": 6,
+ "mobile_verify": 1,
+ "identification": 1,
+ "official_verify": {
+ "type": 1,
+ "desc": "哔哩哔哩直播官方账号",
+ "role": 3
+ },
+ "vip_type": 2,
+ "gender": -1
+ },
+ "level": {
+ "uid": 9617619,
+ "cost": 7782673656,
+ "rcost": 20199200291,
+ "user_score": "0",
+ "vip": 0,
+ "vip_time": "0000-00-00 00:00:00",
+ "svip": 0,
+ "svip_time": "0000-00-00 00:00:00",
+ "update_time": "2024-08-08 17:13:12",
+ "master_level": {
+ "level": 40,
+ "color": 16746162,
+ "current": [0, 147013810],
+ "next": [0, 147013810],
+ "anchor_score": 201992002,
+ "upgrade_score": 0,
+ "master_level_color": 16746162,
+ "sort": "\u003E10000"
+ },
+ "user_level": 60,
+ "color": 16752445,
+ "anchor_score": 201992002
+ },
+ "san": 12
+ }
+}
+```
+
+
diff --git a/live/live_area.md b/docs/live/live_area.md
similarity index 97%
rename from live/live_area.md
rename to docs/live/live_area.md
index 4b4cee1..4f86ef9 100644
--- a/live/live_area.md
+++ b/docs/live/live_area.md
@@ -1,12 +1,8 @@
# 直播间分区
-- [获取全部直播间分区列表](#获取全部直播间分区列表)
-
----
-
## 获取全部直播间分区列表
-> http://api.live.bilibili.com/room/v1/Area/getList
+> https://api.live.bilibili.com/room/v1/Area/getList
*请求方式:GET*
@@ -68,7 +64,7 @@
如想在`网游`父分区下的`英雄联盟`分区开播,则查到子分区id为`86`
```shell
-curl 'http://api.live.bilibili.com/room/v1/Area/getList'
+curl 'https://api.live.bilibili.com/room/v1/Area/getList'
```
diff --git a/live/live_stream.md b/docs/live/live_stream.md
similarity index 95%
rename from live/live_stream.md
rename to docs/live/live_stream.md
index 584f61b..7b8a50c 100644
--- a/live/live_stream.md
+++ b/docs/live/live_stream.md
@@ -1,12 +1,8 @@
# 直播间视频流
-- [根据真实直播间号获取直播视频流](#根据真实直播间号获取直播视频流)
-
----
-
## 根据真实直播间号获取直播视频流
-> http://api.live.bilibili.com/room/v1/Room/playUrl
+> https://api.live.bilibili.com/room/v1/Room/playUrl
*请求方式:GET*
@@ -17,7 +13,7 @@
| cid | num | 目标真实直播间号 | 必要 | 直播间的`room_id`(非短号) |
| platform | str | 直播流格式 | 非必要 | h5:hls方式 web:http-flv方式 默认为http-flv方式 |
| quality | num | 画质 | 非必要 | `qn`与`quality`任选其一 2:流畅 3:高清 4:原画 |
-| qn | str | 画质 | 非必要 | `qn`与`quality`任选其一 80:流畅 150:高清 400:蓝光 10000:原画 |
+| qn | str | 画质 | 非必要 | `qn`与`quality`任选其一 80:流畅 150:高清 400:蓝光 10000:原画 20000:4K 30000:杜比 |
**json回复:**
@@ -87,7 +83,7 @@
查询直播间`cid=14073662`的直播间信息
```shell
-curl -G 'http://api.live.bilibili.com/room/v1/Room/playUrl' \
+curl -G 'https://api.live.bilibili.com/room/v1/Room/playUrl' \
--data-urlencode 'cid=14073662' \
--data-urlencode 'qn=10000' \
--data-urlencode 'platform=web'
@@ -157,4 +153,4 @@ curl -G 'http://api.live.bilibili.com/room/v1/Room/playUrl' \
}
```
-
\ No newline at end of file
+
diff --git a/docs/live/manage.md b/docs/live/manage.md
new file mode 100644
index 0000000..8150b28
--- /dev/null
+++ b/docs/live/manage.md
@@ -0,0 +1,541 @@
+# 直播间管理
+
+## 开通直播间
+
+> https://api.live.bilibili.com/xlive/app-blink/v1/preLive/CreateRoom
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同
+
+**正文参数( application/x-www-form-urlencoded ):**
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------- | ---- | ------------------------ | ------ | -------------------- |
+| platform | str | 客户端? | 必要 | 默认值web |
+| visit_id | str | 未知 | | 默认空 |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| csrf_token | str | CSRF Token(位于 cookie) | | |
+
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------ | -------- | ------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 1531193016:已经创建直播间~ -400:请求错误 |
+| ttl | str | 错误信息 | 默认为1 |
+| message | str | 错误信息 | 默认为0 |
+| data | array | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ----- | ---------------- | ---------------------- |
+| roomID | str | 直播间房间号 | 创建成功返回直播间号 |
+
+**示例:**
+
+开通直播间
+
+```shell
+curl 'https://api.live.bilibili.com/xlive/app-blink/v1/preLive/CreateRoom' \
+--data-urlencode 'platform=web' \
+--data-urlencode 'visit_id=' \
+--data-urlencode 'csrf=xxx' \
+--data-urlencode 'csrf_token=xxx' \
+-b 'SESSDATA=xxx;bili_jct=xx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "roomID": "1234"
+ }
+}
+```
+
+```json
+{
+ "code": 1531193016,
+ "message": "已经创建直播间~",
+ "ttl": 1,
+ "data": {
+ "roomID": ""
+ }
+}
+```
+
+
+
+
+
+## 更新直播间信息
+
+> https://api.live.bilibili.com/room/v1/Room/update
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------- | ---- | ------------------------ | ------ | -------------------- |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| csrf_token | str | CSRF Token(位于 cookie) | 非必要 | |
+| platform | str | 平台标识 | 非必要 | |
+| visit_id | str | (?) | 非必要 | 某种标识? |
+| room_id | num | 直播间id | 必要 | 必须为自己的直播间id |
+| title | str | 直播间标题 | 非必要 | 上限40个字符 |
+| area\_id | num | 直播分区id(子分区id) | 非必要 | 详见[直播分区](live_area.md) |
+| add\_tag | str | 要添加的标签 | 非必要 | 开播设置界面上限10个字符 |
+| del\_tag | str | 要删除的标签 | 非必要 | 若存在`add_tag`时不起作用 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------ | -------- | ------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -1:操作太频繁 1:错误 3:未登录或鉴权失败 405:不允许的请求方法 60009:分区已下线 65530:token错误(登录错误) |
+| msg | str | 错误信息 | 默认为ok |
+| message | str | 错误信息 | 默认为ok |
+| data | obj | 信息本体 | 部分失败情况下是`[]`(空数组) |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ---- | ---- | ---- |
+| sub_session_key | str | 信息变动标识 | |
+| audit_info | obj | 标题审核信息 | |
+
+`data`中的`audit_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------ | ---- | ---- | ---- |
+| audit_title_reason | str | 标题审核提示 | |
+| audit_title_status | num | 标题审核状态 | |
+| audit_title | str | 被审核的标题 | 更新标题时存在 |
+| update_title | str | `""` | 作用尚不明确 |
+
+**示例:**
+
+修改直播间`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'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code":0,
+ "msg":"ok",
+ "message":"ok",
+ "data":{
+ "sub_session_key":"",
+ "audit_info":{
+ "audit_title_reason":"先发后审",
+ "update_title":"",
+ "audit_title_status":2,
+ "audit_title":"测试"
+ }
+ }
+}
+```
+
+
+
+修改直播间`10352053`分区为`40`
+
+```shell
+curl 'https://api.live.bilibili.com/room/v1/Room/update' \
+ --data-urlencode 'room_id=10352053' \
+ --data-urlencode 'area_id=40' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx;bili_jct=xx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "ok",
+ "message": "ok",
+ "data": {
+ "sub_session_key": "",
+ "audit_info": {
+ "audit_title_reason": "",
+ "update_title": "",
+ "audit_title_status": 0
+ }
+ }
+}
+```
+
+
+
+给直播间`11996900`添加一个标签为`测试标签`
+
+```shell
+curl 'https://api.live.bilibili.com/room/v1/Room/update' \
+ --data-urlencode 'room_id=11996900' \
+ --data-urlencode 'add_tag=测试标签' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx;bili_jct=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "ok",
+ "message": "ok",
+ "data": {
+ "sub_session_key": "",
+ "audit_info": {
+ "audit_title_reason": "",
+ "update_title": "",
+ "audit_title_status": 0
+ }
+ }
+}
+```
+
+
+
+给直播间`11996900`删除内容为`测试标签`的标签
+
+```shell
+curl 'https://api.live.bilibili.com/room/v1/Room/update' \
+ --data-urlencode 'room_id=11996900' \
+ --data-urlencode 'del_tag=测试标签' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx;bili_jct=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "ok",
+ "message": "ok",
+ "data": {
+ "sub_session_key": "",
+ "audit_info": {
+ "audit_title_reason": "",
+ "update_title": "",
+ "audit_title_status": 0
+ }
+ }
+}
+```
+
+
+
+## 开始直播
+
+> https://api.live.bilibili.com/room/v1/Room/startLive
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同
+
+开播时必须有分区选择,开播后返回推流地址
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ------------------------ | ------ | ----------------------------------- |
+| room_id | num | 直播间id | 必要 | 必须为自己的直播间id |
+| area_v2 | num | 直播分区id(子分区id) | 必要 | 详见[直播分区](live_area.md) |
+| platform | str | 直播平台 | 必要 | 直播姬(pc):pc_link web在线直播:web_link bililink:android_link |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 65530:token错误(登录错误) 1:错误 60009:分区不存在 60024: 目标分区需要人脸认证 60013:非常抱歉,您所在的地区受实名认证限制无法开播 **(其他错误码有待补充)** |
+| msg | str | 错误信息 | 默认为空 |
+| message | str | 错误信息 | 默认为空 |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ----- | ---------------- | ---------------------- |
+| change | num | 是否改变状态 | 0:未改变 1:改变 |
+| status | str | 直播间状态 | `LIVE` |
+| room_type | num | 0 | 作用尚不明确 |
+| rtmp | obj | RTMP推流地址信息 | |
+| protocols | array | ??? | 作用尚不明确 |
+| try_time | str | ??? | 作用尚不明确 |
+| live_key | str | 标记直播场次的key | |
+| sub_session_key | str | 信息变动标识 | |
+| notice | obj | ??? | 作用尚不明确 |
+| qr | str | `""` | 作用尚不明确 |
+| need_face_auth | bool | 需要人脸识别? | 作用尚不明确 |
+| service_source | str | ??? | 作用尚不明确 |
+| rtmp\_backup | null | ??? | 作用尚不明确 |
+| up_stream_extra | 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 | 空 | 作用尚不明确 |
+
+`data`中的`up_stream_extra`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| isp | 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'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "data":{
+ "change": 1,
+ "status": "LIVE",
+ "try_time": "0000-00-00 00:00:00",
+ "room_type": 0,
+ "live_key": "608336837537435443",
+ "sub_session_key": "608336837537435443sub_time:1747292297",
+ "rtmp":{
+ "type": 1,
+ "addr": "rtmp://live-push.bilivideo.com/live-bvc/",
+ "code": "?streamname=live_348892132_32373699\u0026key=e03061d4a7529d8eaa322dc4d330ca1c\u0026schedule=rtmp\u0026pflag=11",
+ "new_link": "https://core.bilivideo.com/video/uplinkcore/selfbuild/schedule?up_rtmp=live-push.bilivideo.com%2Flive-bvc%2F%3Fstreamname%3Dlive_348892132_32373699%26key%3De73061d8a7539d8eaa233dc4d880ca1c%26schedule%3Drtmp%26pflag%3D11\u0026edge=edge",
+ "provider": "live"
+ },
+ "protocols":[
+ {
+ "protocol": "rtmp",
+ "addr": "rtmp://live-push.bilivideo.com/live-bvc/","code":"?streamname=live_348892132_32373699\u0026key=e73061d4a1002d8eaa322dc4d880ca1c\u0026schedule=rtmp\u0026pflag=11",
+ "new_link": "https://core.bilivideo.com/video/uplinkcore/selfbuild/schedule?up_rtmp=live-push.bilivideo.com%2Flive-bvc%2F%3Fstreamname%3Dlive_348892132_32373699%26key%3De10298d4a7539d8eaa322dc4d220ca1c%26schedule%3Drtmp%26pflag%3D11\u0026edge=edge",
+ "provider": "txy"
+ }
+ ],
+ "notice":{
+ "type": 1,
+ "status": 0,
+ "title": "",
+ "msg": "",
+ "button_text": "",
+ "button_url": ""
+ },
+ "qr": "",
+ "need_face_auth": false,
+ "service_source": "live-streaming",
+ "rtmp_backup": null,
+ "up_stream_extra":{
+ "isp": "电信"
+ }
+ },
+ "message": "",
+ "msg": ""
+}
+```
+
+
+
+## 关闭直播
+
+> https://api.live.bilibili.com/room/v1/Room/stopLive
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------- | ---- | ------------------------ | ------ | -------------------- |
+| room_id | num | 直播间id | 必要 | 必须为自己的直播间id |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 65530:token错误(登录错误) -400:没有权限 **(其他错误码有待补充)** |
+| msg | str | 错误信息 | 默认为空 |
+| message | str | 错误信息 | 默认为空 |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | ------------ | ---------------------- |
+| change | num | 是否改变状态 | 0:未改变 1:改变 |
+| status | str | 直播间状态 | `PREPARING`、`ROUND` |
+
+**示例:**
+
+关闭直播间`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'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "message": "",
+ "data": {
+ "change": 1,
+ "status": "PREPARING"
+ }
+}
+```
+
+
+
+
+## 更新直播间公告
+
+> https://api.live.bilibili.com/xlive/app-blink/v1/index/updateRoomNews
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------- | ---- | ------------------------ | ------ | --------------------- |
+| room_id | num | 直播间id | 必要 | 必须为自己的直播间id |
+| uid | num | 用户id | 必要 | |
+| content | str | 公告内容 | 必要 | 最大60个字符,可以为空 |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| csrf_token | str | CSRF Token(位于 cookie) | | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----- | -------- | ------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 65530:token错误(登录错误) 1:错误 |
+| data | array | 空 | |
+| message | str | 错误信息 | 默认为ok |
+| ttl | num | 1 | 作用尚不明确 |
+
+**示例:**
+
+修改直播间`11996900`公告为`测试修改公告`
+
+```shell
+curl 'https://api.live.bilibili.com/xlive/app-blink/v1/index/updateRoomNews' \
+--data-urlencode 'room_id=11996900' \
+--data-urlencode 'uid=306903238' \
+--data-urlencode 'content=测试修改公告' \
+--data-urlencode 'csrf_token=xxx' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx;bili_jct=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
diff --git a/docs/live/message_stream.md b/docs/live/message_stream.md
new file mode 100644
index 0000000..7d106df
--- /dev/null
+++ b/docs/live/message_stream.md
@@ -0,0 +1,4792 @@
+# 直播间信息流
+
+## 获取信息流认证秘钥
+
+> https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo
+
+*请求方法: GET*
+
+认证方式: Cookie(SESSDATA)
+
+可以选择进行认证,若未认证视作未登录,将会受到限制,详见后续内容。
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------ | ------ | ---- |
+| id | num | 直播间真实id | 必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0: 成功 65530: token 错误 (登录错误) 1: 错误 60009: 分区不存在 **(其他错误码有待补充)** |
+| message | str | 错误信息 | 默认为空 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------ | ----- | -------------------- | ---- |
+| group | str | live | |
+| business_id | num | 0 | |
+| refresh_row_factor | num | 0.125 | |
+| refresh_rate | num | 100 | |
+| max_delay | num | 5000 | |
+| token | str | 认证秘钥 | |
+| host_list | array | 信息流服务器节点列表 | |
+
+`data.host_list[n]` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ---------- | ---- |
+| host | str | 服务器域名 | |
+| port | num | TCP 端口 | |
+| wss_port | num | WSS 端口 | |
+| ws_port | num | WS 端口 | |
+
+**示例:**
+
+获得直播间 `14047` 的信息流认证秘钥
+
+```shell
+curl -G 'https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo' \
+--url-query 'id=14047'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "group": "live",
+ "business_id": 0,
+ "refresh_row_factor": 0.125,
+ "refresh_rate": 100,
+ "max_delay": 5000,
+ "token": "IFfrzJxUd-K6mBPLGCpu-Z9QAz1V3KzIxde_-tCzvah05fYgfXjBWyuqRywF8Ov2w-MGQWt7l80pLiZEsfx3OPEDsXSRaJlzihV0hTXYwkiJvRmzMH3JjfAjdzlvI8sytUCrIbezBgbr_grGPd4ENTEknvu165L-ocW_cyql1e-L_EE=",
+ "host_list": [
+ {
+ "host": "hw-sg-live-comet-02.chat.bilibili.com",
+ "port": 2243,
+ "wss_port": 443,
+ "ws_port": 2244
+ },
+ {
+ "host": "hw-sg-live-comet-01.chat.bilibili.com",
+ "port": 2243,
+ "wss_port": 443,
+ "ws_port": 2244
+ },
+ {
+ "host": "broadcastlv.chat.bilibili.com",
+ "port": 2243,
+ "wss_port": 443,
+ "ws_port": 2244
+ }
+ ]
+ }
+}
+```
+
+
+
+## 数据包格式
+
+数据包为 MQ (Message Queue, 消息队列) 使用 WebSocket 或 TCP 连接作为通道, 具体格式为 头部数据 + 正文数据
+
+**注: 特别的**, WS 与 WSS 连接地址带有路径 `/sub`, 如 `wss://broadcastlv.chat.bilibili.com:443/sub`.
+
+**再注:** B 站更新了隐私政策, 连接建立后, 若该连接认证时传入信息来自未登录用户, 会提示 `为保护用户隐私,未注册登陆用户将无法查看他人昵称`, 随后部分数据包(如“弹幕”、“进场或关注消息”)的用户 mid 都为 `0`, 用户名部分也使用 `*` 保护, 部分房间受到豁免, 参见 [#732](https://github.com/SocialSisterYi/bilibili-API-collect/issues/732)
+
+操作流程 (伪代码):
+
+```javascript
+const s = new Socket(uri);
+// 认证包
+s.send('verify_hello');
+s.receive('verfiy_reply');
+// 心跳包
+setInterval(() => {
+ s.send('heartbeat');
+ s.receive('heartbeat_reply');
+}, 30000);
+// 接收普通包
+while (!s.isclosed()) {
+ s.receive('normal_package');
+}
+```
+
+头部格式:
+
+| 偏移量 | 长度 | 类型 | 含义 |
+| ------ | ---- | ------ | ------------------------------------ |
+| 0 | 4 | uint32 | 封包总大小 (头部大小 + 正文大小) |
+| 4 | 2 | uint16 | 头部大小 (一般为 0x0010, 即 16 字节) |
+| 6 | 2 | uint16 | 协议版本: 0: 普通包 (正文不使用压缩) 1: 心跳及认证包 (正文不使用压缩) 2: 普通包 (正文使用 zlib 压缩) 3: 普通包 (使用 brotli 压缩的多个带文件头的普通包) |
+| 8 | 4 | uint32 | 操作码 (封包类型) |
+| 12 | 4 | uint32 | sequence, 每次发包时向上递增 |
+
+操作码:
+
+| 代码 | 含义 |
+| ---- | ------------------- |
+| 2 | 心跳包 |
+| 3 | 心跳包回复 (人气值) |
+| 5 | 普通包 (命令) |
+| 7 | 认证包 |
+| 8 | 认证包回复 |
+
+*普通包可能包含多条命令, 每个命令有一个头部, 指示该条命令的长度等信息*
+
+## 数据包
+
+### 认证包
+
+*方向: 上行*
+
+注: 连接成功后 5 秒内发送, 否则强制断开连接
+
+再注: 若`uid`字段填写的是用户mid,则通过`获取信息流认证密钥`接口使用的认证信息所属用户mid必须与`uid`字段相同,并正确传递认证密钥,否则强制断开连接。
+
+**JSON正文:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ------------ | ------ | --------------------------- |
+| uid | num | 用户mid | 非必要 | 0 即为游客登录 |
+| roomid | num | 加入房间的id | 必要 | 直播间真实id |
+| protover | num | 协议版本 | 非必要 | 3, 与数据包头部协议版本无关 |
+| platform | str | 平台标识 | 非必要 | `web` |
+| type | num | 2 | 非必要 | |
+| key | str | 认证秘钥 | 非必要 | |
+
+**示例:**
+
+```text
+00000000: 0000 00ff 0010 0001 0000 0007 0000 0001 ................
+00000001: 7b22 7569 6422 3a31 3630 3134 3836 3234 {"uid":160148624
+00000002: 2c22 726f 6f6d 6964 223a 3232 3630 3831 ,"roomid":226081
+00000003: 3132 2c22 7072 6f74 6f76 6572 223a 332c 12,"protover":3,
+00000004: 2270 6c61 7466 6f72 6d22 3a22 7765 6222 "platform":"web"
+00000005: 2c22 7479 7065 223a 322c 226b 6579 223a ,"type":2,"key":
+00000006: 2230 7670 5448 5737 7757 556e 6c6f 5270 "0vpTHW7wWUnloRp
+00000007: 5251 6b47 764e 626e 7776 7364 6d2d 7159 RQkGvNbnwvsdm-qY
+00000008: 4777 4243 5875 2d59 5164 6e57 7653 5547 GwBCXu-YQdnWvSUG
+00000009: 7373 4139 7962 4b68 7932 6a78 3952 6f63 ssA9ybKhy2jx9Roc
+0000000a: 4150 4651 6d54 4f6b 5277 6b4b 687a 4479 APFQmTOkRwkKhzDy
+0000000b: 4839 5054 756f 5468 6834 4630 7562 584c H9PTuoThh4F0ubXL
+0000000c: 4964 6e69 3734 5539 304b 4242 6972 3248 Idni74U90KBBir2H
+0000000d: 7451 3941 3777 674b 3438 4b7a 495f 5a5a tQ9A7wgK48KzI_ZZ
+0000000e: 3838 7557 4e59 6652 4f48 6964 4e6a 3732 88uWNYfROHidNj72
+0000000f: 7061 796e 3479 3071 4268 513d 3d22 7d payn4y0qBhQ=="}
+```
+
+### 认证包回复
+
+*方向: 下行*
+
+注: 在认证包发送成功后就会收到 JSON 正文, 若失败则返回 HTTP/0.9 的 403
+
+**JSON正文:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | ----------- |
+| code | num | 返回值 | 0: 认证成功 |
+
+**示例:**
+
+```text
+00000000: 0000 001a 0010 0001 0000 0008 0000 0001 ................
+00000001: 7b22 636f 6465 223a 307d {"code":0}
+```
+
+### 心跳包
+
+*方向: 上行*
+
+注: 30 秒左右发送一次, 否则 60 秒后会被强制断开连接
+
+**正文:**
+
+可以为空或任意字符
+
+**示例:**
+
+```text
+00000000: 0000 001f 0010 0001 0000 0002 0000 0001 ................
+00000001: 5b6f 626a 6563 7420 4f62 6a65 6374 5d [object Object]
+```
+
+### 心跳包回复 (人气值)
+
+*方向: 下行*
+
+注: 在心跳包发送成功后就会收到
+
+**正文:**
+
+正文分为两个部分
+
+- 第一部分: uint32 整数代表的房间当前的人气值
+
+- 第二部分: 心跳包正文内容
+
+**示例:**
+
+示例房间内人气值为 2466 (0x000009a2)
+
+```text
+00000000: 0000 0014 0010 0001 0000 0003 0000 0000 ................
+00000001: 0000 09a2 5b6f 626a 6563 7420 4f62 6a65 ....[object Obje
+00000002: 6374 5d ct]
+```
+
+### 普通包
+
+*方向: 下行*
+
+**正文:**
+
+一般为普通 JSON 数据
+
+大多数普通包都经过 zlib 或 brotli 压缩
+
+**示例:**
+
+```text
+00000000: 0000 0086 0010 0003 0000 0005 0000 0000 ................
+00000001: 8b38 8000 0000 7200 1000 0000 0000 0500 .8....r.........
+00000002: 0000 007b 2263 6d64 223a 2257 4154 4348 ...{"cmd":"WATCH
+00000003: 4544 5f43 4841 4e47 4522 2c22 6461 7461 ED_CHANGE","data
+00000004: 223a 7b22 6e75 6d22 3a32 3230 3937 2c22 ":{"num":22097,"
+00000005: 7465 7874 5f73 6d61 6c6c 223a 2232 2e32 text_small":"2.2
+00000006: e4b8 8722 2c22 7465 7874 5f6c 6172 6765 ...","text_large
+00000007: 223a 2232 2e32 e4b8 87e4 baba e79c 8be8 ":"2.2..........
+00000008: bf87 227d 7d03 .."}}.
+```
+
+
+
+#### 弹幕 (DANMU_MSG)
+
+注: 当收到弹幕时接收到此条消息, 10 进制转 16 进制若位数不足则在左侧补 `0`
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ----- | ----------- | ---- |
+| cmd | str | `DANMU_MSG` | |
+| dm_v2 | str | 空串? | |
+| info | array | 弹幕信息 | 感谢 [#1084](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1084) 补充 |
+
+`info` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| -- | ----- | ------------------ | ---- |
+| 0 | array | 弹幕信息 | 大部分信息可从 `info[0][15].extra` 获取 |
+| 1 | str | 弹幕文本 | |
+| 2 | array | 发送者信息 | 大部分信息可从 `info[0][15].user` 获取 |
+| 3 | array | 发送者粉丝勋章信息 | 若无则为空 |
+| 4 | array | 发送者UL等级信息 | |
+| 5 | array | ? | |
+| 6 | num | 0? | |
+| 7 | num | 0? | |
+| 8 | null | | |
+| 9 | obj | 发送时间戳 | |
+| 10 | num | 0? | |
+| 11 | num | 0? | |
+| 12 | null | | |
+| 13 | null | | |
+| 14 | num | 0? | |
+| 15 | num | ? | |
+| 16 | array | ? | |
+
+`info[0]` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| -- | ---- | ------------------------ | ---- |
+| 0 | num | | |
+| 1 | num | 弹幕模式 | 弹幕的 mode 字段 |
+| 2 | num | 弹幕字体大小 | 弹幕的 fontsize 字段 |
+| 3 | num | 弹幕颜色 | 弹幕的 color 字段 十六进制颜色值的十进制数字 |
+| 4 | num | 发送时的 UNIX 毫秒时间戳 | 弹幕的 rnd 字段 |
+| 5 | num | | 一个负整数 |
+| 6 | num | 0? | |
+| 7 | str | 可能为颜色? | 一个 16 进制数 |
+| 8 | num | 0? | |
+| 9 | num | 0? | |
+| 10 | num | 0? | |
+| 11 | str | 空串? | |
+| 12 | num | 0? | |
+| 13 | str | 字符串表示的 JSON Object | 空? |
+| 14 | str | 字符串表示的 JSON Object | 空? |
+| 15 | obj | 弹幕补充信息 | |
+| 16 | obj | 活动相关信息? | |
+| 17 | num | 0? | |
+| 18 | null | | |
+
+`info[0][15]` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------- | ---- | ------------ | ---- |
+| extra | str | 弹幕信息 | 字符串表示的 JSON |
+| mode | num | 弹幕模式? | |
+| show_player_type | num | 0? | |
+| user | obj | 用户相关信息 | |
+
+`info[0][15].extra` 表示的对象:
+
+见下方 JSONC
+
+```json
+{
+ "send_from_me": false, // 是否由该接收消息的用户发送
+ "mode": 0, // 弹幕模式 (info[0][1])
+ "color": 9920249, // 弹幕颜色 (info[0][3])
+ "dm_type": 0,
+ "font_size": 25, // 弹幕字体大小 (info[0][2])
+ "player_mode": 1,
+ "show_player_type": 0,
+ "content": "白花300块[热]", // 弹幕文本 (info[1])
+ "user_hash": "197700816",
+ "emoticon_unique": "",
+ "bulge_display": 0,
+ "recommend_score": 3,
+ "main_state_dm_color": "",
+ "objective_state_dm_color": "",
+ "direction": 0, // 弹幕方向?
+ "pk_direction": 0,
+ "quartet_direction": 0,
+ "anniversary_crowd": 0,
+ "yeah_space_type": "",
+ "yeah_space_url": "",
+ "jump_to_url": "",
+ "space_type": "",
+ "space_url": "",
+ "animation": {},
+ "emots": { // 表情相关信息 (用于文本替换)
+ "[热]": {
+ "count": 1,
+ "descript": "[热]",
+ "emoji": "[热]",
+ "emoticon_id": 278,
+ "emoticon_unique": "emoji_278",
+ "height": 20,
+ "url": "http://i0.hdslb.com/bfs/live/6df760280b17a6cbac8c1874d357298f982ba4cf.png",
+ "width": 20
+ }
+ },
+ "is_audited": false,
+ "id_str": "364b06e3c561af3d5921f1253d66c1d575",
+ "icon": {
+ "prefix": {
+ "type": 1,
+ "resource": "ChronosWealth_4.png"
+ }
+ },
+ "show_reply": true, // 显示回复?
+ "reply_mid": 0,
+ "reply_uname": "",
+ "reply_uname_color": "",
+ "reply_is_mystery": false,
+ "hit_combo": 0
+}
+```
+
+`info[0][15].user` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ---------- | ---- |
+| base | obj | 基本信息 | |
+| guard | null | | |
+| guard_leader | obj | ? | |
+| medal | obj | 粉丝排信息 | 参见 [指定用户的所有粉丝勋章信息](../user/medals.md#指定用户的所有粉丝勋章信息) `data.list[n].uinfo_medal` |
+| title | obj | ? | |
+| uhead_frame | null | | |
+| uid | num | 发送者 mid | |
+| wealth | null | | |
+
+`info[0][15].user.base` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | ---- | ---------------- | ------- |
+| face | str | 发送者头像 URL | |
+| is_mystery | bool | 是否是神秘用户? | |
+| name | str | 发送者用户名 | |
+| name_color | num | 用户名颜色 | 10 进制 |
+| name_color_str | num | 字符串表示的颜色 | |
+| offical_info | obj | 认证信息 | 参见 [用户空间详细信息](../user/info.md#用户空间详细信息) `data.official` |
+| origin_info | obj | 同 `face` `name` | |
+| risk_ctrl_info | null | | |
+
+`info[0][15].user.title` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------- | ---- | ----- | ---- |
+| old_title_css_id | str | 空串? | |
+| title_css_id | str | 空串? | |
+
+`info[0][16]` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ---- | ----- | ---- |
+| activity_identity | str | 空串? | |
+| activity_source | num | 0? | |
+| not_show | num | 0? | |
+
+`info[2]` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| -- | ---- | ------------- | ---- |
+| 0 | num | 发送者 mid | 同 `info[0][15].user.uid` |
+| 1 | str | 发送者用户名 | 同 `info[0][15].user.base.name` |
+| 2 | num | 0? | |
+| 3 | num | 0? | |
+| 4 | num | 0? | |
+| 5 | num | 用户权限等级? | 参见 [用户空间详细信息](../user/info.md#用户空间详细信息) `data.rank` |
+| 6 | num | ? | |
+
+`info[3]` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| -- | ---- | ---------------------------------------- | ---- |
+| 0 | num | 同 `info[0][15].user.medal.level` | |
+| 1 | str | 同 `info[0][15].user.medal.name` | |
+| 2 | str | 粉丝牌创建主播名称 | |
+| 3 | num | ? | |
+| 4 | num | 同 `info[0][15].user.medal.color` | |
+| 5 | str | 空串? | |
+| 6 | num | 0? | |
+| 7 | num | 同 `info[0][15].user.medal.color_border` | |
+| 8 | num | 同 `info[0][15].user.medal.color_start` | |
+| 9 | num | 同 `info[0][15].user.medal.color_end` | |
+| 10 | num | 同 `info[0][15].user.medal.guard_level` | |
+| 11 | num | 同 `info[0][15].user.medal.is_light` | |
+| 12 | num | 同 `info[0][15].user.medal.ruid` | |
+
+`info[4]` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| -- | ---- | ---- | ---- |
+| 0 | num | ? | |
+| 1 | num | ? | |
+| 2 | num | ? | |
+| 3 | num | ? | |
+| 4 | num | ? | |
+
+`info[5]` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| -- | ---- | ----- | ---- |
+| 0 | str | 空串? | |
+| 1 | str | 空串? | |
+
+`info[9]` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | --------------- |
+| ct | str | ? | 16 进制 |
+| ts | num | 发送时间 | UNIX 秒级时间戳 |
+
+`info[16]` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| -- | ---- | ---- | ---- |
+| 0 | num | ? | |
+
+**示例:**
+
+
+查看消息示例(带注释):
+
+```jsonc
+{
+ "cmd": "DANMU_MSG",
+ "dm_v2": "",
+ "info": [
+ [
+ 0,
+ 1,
+ 25, //字体大小
+ 9920249, //弹幕颜色代码(10进制)#975ef9
+ 1723979200649,
+ -1312973962,
+ 0,
+ "0bc8acd0",
+ 0,
+ 0,
+ 0,
+ "",
+ 0,
+ "{}",
+ "{}",
+ {
+ "extra": "{\"send_from_me\":false,\"mode\":0,\"color\":9920249,\"dm_type\":0,\"font_size\":25,\"player_mode\":1,\"show_player_type\":0,\"content\":\"白花300块[热]\",\"user_hash\":\"197700816\",\"emoticon_unique\":\"\",\"bulge_display\":0,\"recommend_score\":3,\"main_state_dm_color\":\"\",\"objective_state_dm_color\":\"\",\"direction\":0,\"pk_direction\":0,\"quartet_direction\":0,\"anniversary_crowd\":0,\"yeah_space_type\":\"\",\"yeah_space_url\":\"\",\"jump_to_url\":\"\",\"space_type\":\"\",\"space_url\":\"\",\"animation\":{},\"emots\":{\"[热]\":{\"count\":1,\"descript\":\"[热]\",\"emoji\":\"[热]\",\"emoticon_id\":278,\"emoticon_unique\":\"emoji_278\",\"height\":20,\"url\":\"http://i0.hdslb.com/bfs/live/6df760280b17a6cbac8c1874d357298f982ba4cf.png\",\"width\":20}},\"is_audited\":false,\"id_str\":\"364b06e3c561af3d5921f1253d66c1d575\",\"icon\":{\"prefix\":{\"type\":1,\"resource\":\"ChronosWealth_4.png\"}},\"show_reply\":true,\"reply_mid\":0,\"reply_uname\":\"\",\"reply_uname_color\":\"\",\"reply_is_mystery\":false,\"hit_combo\":0}",
+ "mode": 0,
+ "show_player_type": 0,
+ "user": {
+ "base": {
+ "face": "https://i1.hdslb.com/bfs/face/5a9bb9cac3afbb58347c808ae76aaa41ca967d07.jpg", //弹幕发送用户头像
+ "is_mystery": false,
+ "name": "tim1997", //弹幕发送用户名称
+ "name_color": 0,
+ "name_color_str": "",
+ "official_info": {
+ "desc": "",
+ "role": 0,
+ "title": "",
+ "type": -1
+ },
+ "origin_info": {
+ "face": "https://i1.hdslb.com/bfs/face/5a9bb9cac3afbb58347c808ae76aaa41ca967d07.jpg",
+ "name": "tim1997"
+ },
+ "risk_ctrl_info": null
+ },
+ "guard": null,
+ "guard_leader": {
+ "is_guard_leader": false
+ },
+ "medal": {
+ "color": 2951253, //粉丝牌颜色(10进制)#2d0855
+ "color_border": 16771156, //粉丝牌边框颜色(10进制)#ffe854
+ "color_end": 10329087, //粉丝牌渐变颜色结束(10进制)#9d9bff
+ "color_start": 2951253, //粉丝牌渐变颜色开始(10进制)#2d0855
+ "guard_icon": "https://i0.hdslb.com/bfs/live/1d16bf0fcc3b1b768d1179d60f1fdbabe6ab4489.png", //粉丝牌左边的图标
+ "guard_level": 1, //类型 1.总督 2.提督 3,舰长
+ "honor_icon": "",
+ "id": 1279130,
+ "is_light": 1,
+ "level": 29, //粉丝牌等级
+ "name": "果咩吖", //粉丝牌名称
+ "ruid": 3546569288714792, //粉丝牌创建者UID
+ "score": 50427312,
+ "typ": 0,
+ "user_receive_count": 0,
+ "v2_medal_color_border": "#D47AFFFF", //粉丝牌边框颜色(APP)
+ "v2_medal_color_end": "#9660E5CC", //粉丝牌渐变颜色结束(APP)
+ "v2_medal_color_level": "#6C00A099", //粉丝牌右边等级数字颜色(APP)
+ "v2_medal_color_start": "#9660E5CC", //粉丝牌渐变颜色开始(APP)
+ "v2_medal_color_text": "#FFFFFFFF" //粉丝牌右边圆形颜色(APP)
+ },
+ "title": {
+ "old_title_css_id": "",
+ "title_css_id": ""
+ },
+ "uhead_frame": null,
+ "uid": 6088969, //弹幕发送用户UID
+ "wealth": null
+ }
+ },
+ {
+ "activity_identity": "",
+ "activity_source": 0,
+ "not_show": 0
+ },
+ 0
+ ],
+ "白花300块[热]", //弹幕内容
+ [
+ 6088969, //同info[0][15].user.uid
+ "tim1997", //同info[0][15].user.base.name
+ 0,
+ 0,
+ 0,
+ 10000,
+ 1,
+ ""
+ ],
+ [
+ 29, //同info[0][15].user.medal.level
+ "果咩吖", //同info[0][15].user.medal.name
+ "果宝Official", //粉丝牌创建主播名称
+ 31180317,
+ 2951253, //同info[0][15].user.medal.color
+ "",
+ 0,
+ 16771156, //同info[0][15].user.medal.color_border
+ 2951253, //同info[0][15].user.medal.color_start
+ 10329087, //同info[0][15].user.medal.color_end
+ 1, //同info[0][15].user.medal.guard_level
+ 1, //同info[0][15].user.medal.is_light
+ 3546569288714792 //同info[0][15].user.medal.ruid
+ ],
+ [
+ 39,
+ 0,
+ 10512625,
+ 42523,
+ 2
+ ],
+ [
+ "",
+ ""
+ ],
+ 0,
+ 0,
+ null,
+ {
+ "ct": "AFFF4206",
+ "ts": 1723979200 //时间戳(秒级)
+ },
+ 0,
+ 0,
+ null,
+ null,
+ 0,
+ 1040,
+ [
+ 49
+ ],
+ null
+ ]
+}
+```
+
+
+
+#### 交互信息合并 (DM_INTERACTION)
+
+注: 连续多条相同弹幕时触发
+
+**JSON正文:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---------------- | ---- |
+| cmd | str | `DM_INTERACTION` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | -------- | ---- |
+| id | num | 事件 ID | |
+| status | num | 状态 | |
+| type | num | 事件类型 | 102:弹幕 103: 104:送礼 105:分享 106:点赞 |
+| data | str | 事件数据 | 一个JSON字符串 |
+| dmsource | num | | |
+
+`data.data` 字符串对象:
+
+内容格式取决于`data.type`的类型,下面将按照`data.data(类型)`进行区分标记。
+
+温馨提示: 要记得先解析`data.data`内的JSON字符串,不要直接使用哦。
+
+`data.data(102)` 对象: (弹幕)
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------------- | ----- | -------------------- | ---- |
+| combo | array | 连续发送弹幕事件信息 | |
+| merge_interval | num | 合并弹幕时间间隔 | |
+| card_appear_interval | num | 弹窗出现时间间隔 | |
+| send_interval | num | 发送时间间隔 | |
+
+`data.data(102).combo[n]` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | -------------- | ------------- |
+| id | num | 标识 ID | |
+| status | num | 状态 | |
+| content | str | 重复的弹幕内容 | |
+| cnt | num | 重复数量 | |
+| guide | str | 标题词 | "他们都在说:" |
+| left_duration | num | 左移时长 | |
+| fade_duration | num | 淡化时长 | |
+
+`data.data(104)` 对象: (送礼)
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| fade\_duration | num | | |
+| cnt | num | 投喂计数 | |
+| card_appear_interval | num | | |
+| suffix\_text | str | 提示文本 | `人在投喂` |
+| reset\_cnt | num | | |
+| display\_flag | num | | |
+| gift\_id | num | 礼物 ID | |
+| gift_alert_message | str | | |
+
+`data.data(105)` 对象: (分享)
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| fade\_duration | num | | |
+| cnt | num | 分享计数 | |
+| card_appear_interval | num | | |
+| suffix\_text | str | 提示文本 | `人分享了直播间` |
+| reset\_cnt | num | | |
+| display\_flag | num | | |
+
+`data.data(106)` 对象: (点赞)
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| fade\_duration | num | | |
+| cnt | num | 点赞计数 | |
+| card_appear_interval | num | | |
+| suffix\_text | str | 提示文本 | `人正在点赞` |
+| reset\_cnt | num | | |
+| display\_flag | num | | |
+
+**示例:**
+
+
+查看正文示例:
+
+type===102
+
+```json
+{
+ "cmd": "DM_INTERACTION",
+ "data": {
+ "id": 6785480089600,
+ "status": 4,
+ "type": 102,
+ "data": {
+ "combo": [
+ {
+ "id": 6785480089600,
+ "status": 4,
+ "content": "晚安",
+ "cnt": 3,
+ "guide": "他们都在说:",
+ "left_duration": 20000,
+ "fade_duration": 60000
+ }
+ ],
+ "merge_interval": 1000,
+ "card_appear_interval": 1000,
+ "send_interval": 1000
+ }
+ }
+}
+```
+
+type===104
+
+```json
+{
+ "cmd": "DM_INTERACTION",
+ "data": {
+ "data": "{\"fade_duration\":10000,\"cnt\":5,\"card_appear_interval\":0,\"suffix_text\":\"人在投喂\",\"reset_cnt\":0,\"display_flag\":1,\"gift_id\":33988,\"gift_alert_message\":\"投喂一个%s支持主播\"}",
+ "dmscore": 36,
+ "id": 85744481752576,
+ "status": 5,
+ "type": 104
+ }
+}
+```
+
+type===105
+
+```json
+{
+ "cmd": "DM_INTERACTION",
+ "data": {
+ "data": "{\"fade_duration\":10000,\"cnt\":1,\"card_appear_interval\":0,\"suffix_text\":\"人分享了直播间\",\"reset_cnt\":0,\"display_flag\":1}",
+ "dmscore": 36,
+ "id": 85743053669888,
+ "status": 4,
+ "type": 105
+ }
+}
+```
+
+type===106
+
+```json
+{
+ "cmd": "DM_INTERACTION",
+ "data": {
+ "data": "{\"fade_duration\":10000,\"cnt\":11,\"card_appear_interval\":0,\"suffix_text\":\"人正在点赞\",\"reset_cnt\":1,\"display_flag\":1}",
+ "dmscore": 36,
+ "id": 66159395305984,
+ "status": 5,
+ "type": 106
+ }
+}
+```
+
+
+
+#### 进场或关注消息 (INTERACT_WORD)
+
+注: 有用户进入直播间或关注主播时触发
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `INTERACT_WORD` | |
+| data | obj | 进入直播间的用户的信息 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| contribution | obj | 待调查 | |
+| dmscore | num | 待调查 | |
+| fans_medal | obj | 粉丝勋章 | |
+| identities | num | 待调查 | |
+| is_spread | num | 待调查 | |
+| msg_type | num | 1为进场,2为关注,3为分享 | |
+| roomid | num | 房间号 | |
+| is_spread | num | 待调查 | |
+| is_spread | num | 待调查 | |
+| score | num | 待调查 | |
+| spread_desc | str | 待调查 | |
+| spread_info | str | 待调查 | |
+| tail_icon | num | 待调查 | |
+| timestamp | num | 时间戳 | |
+| trigger_time | num | 触发时间 | |
+| uid | num | 用户ID | |
+| uname | str | 用户名称 | |
+| uname_color | str | 用户名称颜色 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "INTERACT_WORD",
+ "data": {
+ "contribution": {
+ "grade": 0
+ },
+ "dmscore": 4,
+ "fans_medal": {
+ "anchor_roomid": 890976,
+ "guard_level": 0,
+ "icon_id": 0,
+ "is_lighted": 0,
+ "medal_color": 6067854,
+ "medal_color_border": 12632256,
+ "medal_color_end": 12632256,
+ "medal_color_start": 12632256,
+ "medal_level": 1,
+ "medal_name": "小豆皮",
+ "score": 134,
+ "special": "",
+ "target_id": 6574487
+ },
+ "identities": [
+ 1
+ ],
+ "is_spread": 0,
+ "msg_type": 1,
+ "roomid": 24143902,
+ "score": 1644563948936,
+ "spread_desc": "",
+ "spread_info": "",
+ "tail_icon": 0,
+ "timestamp": 1644563948,
+ "trigger_time": 1644563947876475000,
+ "uid": 335979315,
+ "uname": "TIM_Init",
+ "uname_color": ""
+ }
+}
+```
+
+
+
+#### 上舰通知 (GUARD_BUY)
+
+注: 当有用户购买 舰长 / 提督 / 总督 时
+
+**JSON消息:**
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------- | ---- |
+| cmd | str | `GUARD_BUY` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- |-----|--------------------------|-----|
+| uid | num | 用户ID | |
+| username | str | 用户名称 | |
+| guard_level | num | 大航海等级 | 1: 总督 2: 提督 3:舰长 |
+| num | num | 数量 | |
+| price | num | 原金瓜子标价 | 即 CNY\*1000 |
+| gift_id | num | 礼物id | |
+| gift_name | str | 礼物名称 | |
+| start_time | num | 待调查 | |
+| end_time | num | 待调查 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "GUARD_BUY",
+ "data": {
+ "uid": 14225357,
+ "username": "妙妙喵喵妙妙喵O_O",
+ "guard_level": 3,
+ "num": 1,
+ "price": 198000,
+ "gift_id": 10003,
+ "gift_name": "舰长",
+ "start_time": 1677069316,
+ "end_time": 1677069316
+ }
+}
+```
+
+
+
+#### 用户庆祝消息 (USER_TOAST_MSG)
+
+注: 用户购买 舰长 / 提督 / 总督 后的庆祝消息, 内容包含用户陪伴天数
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---------------- | ---- |
+| cmd | str | `USER_TOAST_MSG` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- |-----|--------------------------|-----|
+| anchor_show | bool | 是否显示 | |
+| color | str | 颜色 | |
+| dmscore | num | 待调查 | |
+| effect_id | num | 待调查 | |
+| face_effect_id | num | 待调查 | |
+| gift_id | num | 礼物id | |
+| group_name | str | 待调查 | |
+| group_op_type | num | 待调查 | |
+| group_role_name | str | 待调查 | |
+| guard_level | num | 大航海等级 | 1: 总督 2: 提督 3:舰长 |
+| is_group | num | 待调查 | |
+| is_show | num | 待调查 | |
+| num | num | 上舰个数 | |
+| op_type | num | 待调查 | |
+| payflow_id | str | 待调查 | |
+| price | num | 实际金瓜子标价 | 即 CNY\*1000 |
+| role_name | str | 身份名称 | |
+| room_effect_id | num | 待调查 | |
+| room_group_effect_id | num | 待调查 | |
+| start_time | num | 待调查 | |
+| svga_block | num | 待调查 | |
+| target_guard_count | str | 庆祝消息正文 | |
+| toast_msg | num | 待调查 | |
+| uid | num | 上舰人UID | |
+| unit | str | 购买身份时间单位 | |
+| user_show | bool | 待调查 | |
+| username | str | 上舰人用户名 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "USER_TOAST_MSG",
+ "data": {
+ "anchor_show": true,
+ "color": "#00D1F1",
+ "dmscore": 90,
+ "effect_id": 397,
+ "end_time": 1702580687,
+ "face_effect_id": 44,
+ "gift_id": 10003,
+ "group_name": "",
+ "group_op_type": 0,
+ "group_role_name": "",
+ "guard_level": 3,
+ "is_group": 0,
+ "is_show": 0,
+ "num": 1,
+ "op_type": 1,
+ "payflow_id": "2312150304155852173446521",
+ "price": 138000,
+ "role_name": "舰长",
+ "room_effect_id": 590,
+ "room_group_effect_id": 1337,
+ "start_time": 1702580687,
+ "svga_block": 0,
+ "target_guard_count": 146,
+ "toast_msg": "<%无光之日%> 在主播Mia米娅-的直播间开通了舰长,今天是TA陪伴主播的第1天",
+ "uid": 79667344,
+ "unit": "月",
+ "user_show": true,
+ "username": "无光之日"
+ }
+}
+```
+
+
+
+#### 醒目留言 (SUPER_CHAT_MESSAGE)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | --------------------- | ---- |
+| cmd | str | `SUPER_CHAT_MESSAGE` | |
+| data | obj | 信息本体 | |
+| roomid | num | 直播间房间号 (非短号) | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- |-----|----------------| --------- |
+| background_bottom_color | str | 待调查 | |
+| background_color | str | 待调查 | |
+| background_color_end | str | 待调查 | |
+| background_color_start | str | 待调查 | |
+| background_icon | str | 待调查 | |
+| background_image | str | 待调查 | |
+| background_price_color | str | 待调查 | |
+| color_point | num | 待调查 | |
+| dmscore | num | 待调查 | |
+| end_time | num | 待调查 | |
+| gift | obj | 礼物信息 | |
+| id | num | 醒目留言 ID | |
+| is_ranked | num | 待调查 | |
+| is_send_audit | num | 待调查 | |
+| medal_info | obj | SC发送用户佩戴的粉丝牌信息 | |
+| message | str | sc内容 | |
+| message_font_color | str | SC文本颜色 | |
+| message_trans | str | 机翻sc内容 | |
+| price | num | sc金额 | 为 CNY 价值 |
+| rate | num | 待调查 | |
+| start_time | num | 待调查 | |
+| time | num | sc持续时间 | |
+| token | num | 待调查 | |
+| trans_mark | num | 待调查 | |
+| ts | num | 待调查 | |
+| uid | num | 发送用户uid | |
+| user_info | obj | 发送用户信息 | |
+
+`data.gift` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- |-----|------|------|
+| gift_id | num | 礼物id | |
+| gift_name | str | 礼物名称 | 一般均为"醒目留言" |
+| num | num | 数量 | |
+
+`data.medal_info` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- |-----|-------------|------|
+| anchor_roomid | num | 房间号 | 包含短号 |
+| anchor_uname | str | 主播昵称 | |
+| guard_level | num | 大航海等级 | 1: 总督 2: 提督 3: 舰长 |
+| icon_id | num | 待调查 | |
+| is_lighted | num | 待调查 | |
+| medal_color | str | 待调查 | |
+| medal_color_border | num | 待调查 | |
+| medal_color_end | num | 待调查 | |
+| medal_color_start | num | 待调查 | |
+| medal_level | num | 粉丝牌等级 | |
+| medal_name | str | 粉丝牌名称 | |
+| special | str | 待调查 | |
+| target_id | num | 粉丝牌对应的主播mid | |
+
+`data.user_info` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- |-----|-------|------|
+| face | num | 用户头像 | |
+| face_frame | num | 头像边框 | |
+| guard_level | num | 大航海等级 | 1: 总督 2: 提督 3: 舰长 |
+| is_main_vip | num | 待调查 | |
+| is_svip | num | 待调查 | |
+| is_vip | num | 待调查 | |
+| level_color | str | 待调查 | |
+| manager | num | 待调查 | |
+| name_color | str | 待调查 | |
+| title | str | 待调查 | |
+| uname | str | 用户名称 | |
+| user_level | num | 待调查 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "SUPER_CHAT_MESSAGE",
+ "data": {
+ "background_bottom_color": "#2A60B2",
+ "background_color": "#EDF5FF",
+ "background_color_end": "#405D85",
+ "background_color_start": "#3171D2",
+ "background_icon": "",
+ "background_image": "https://i0.hdslb.com/bfs/live/a712efa5c6ebc67bafbe8352d3e74b820a00c13e.png",
+ "background_price_color": "#7497CD",
+ "color_point": 0.7,
+ "dmscore": 120,
+ "end_time": 1677069095,
+ "gift": {
+ "gift_id": 12000,
+ "gift_name": "醒目留言",
+ "num": 1
+ },
+ "id": 6522809,
+ "is_ranked": 1,
+ "is_send_audit": 0,
+ "medal_info": {
+ "anchor_roomid": 732,
+ "anchor_uname": "Asaki大人",
+ "guard_level": 3,
+ "icon_id": 0,
+ "is_lighted": 1,
+ "medal_color": "#1a544b",
+ "medal_color_border": 6809855,
+ "medal_color_end": 5414290,
+ "medal_color_start": 1725515,
+ "medal_level": 21,
+ "medal_name": "ASAKI",
+ "special": "",
+ "target_id": 194484313
+ },
+ "message": "猪播完美预测自己第一个死,这就是鹅鸭杀高玩吗",
+ "message_font_color": "#A3F6FF",
+ "message_trans": "",
+ "price": 30,
+ "rate": 1000,
+ "start_time": 1677069035,
+ "time": 60,
+ "token": "7BED5681",
+ "trans_mark": 0,
+ "ts": 1677069035,
+ "uid": 294094150,
+ "user_info": {
+ "face": "https://i1.hdslb.com/bfs/face/7a11b48e0a3055e220fa8b4c7d938cd4bcac2577.jpg",
+ "face_frame": "https://i0.hdslb.com/bfs/live/80f732943cc3367029df65e267960d56736a82ee.png",
+ "guard_level": 3,
+ "is_main_vip": 1,
+ "is_svip": 0,
+ "is_vip": 0,
+ "level_color": "#969696",
+ "manager": 0,
+ "name_color": "#00D1F1",
+ "title": "0",
+ "uname": "界原虚",
+ "user_level": 6
+ }
+ },
+ "roomid": 6154037
+}
+```
+
+
+
+#### 醒目留言日语 (SUPER_CHAT_MESSAGE_JPN)
+
+基本同 [醒目留言 (SUPER_CHAT_MESSAGE)](#醒目留言-super_chat_message), 但多了 `message_jpn` 字段
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "SUPER_CHAT_MESSAGE_JPN",
+ "data": {
+ "id": "3790747",
+ "uid": "394060741",
+ "price": 30,
+ "rate": 1000,
+ "message": "棉花!!转盘中了武器后,上号30抽3武器,救命!!!",
+ "message_jpn": "",
+ "is_ranked": 1,
+ "background_image": "https://i0.hdslb.com/bfs/live/a712efa5c6ebc67bafbe8352d3e74b820a00c13e.png",
+ "background_color": "#EDF5FF",
+ "background_icon": "",
+ "background_price_color": "#7497CD",
+ "background_bottom_color": "#2A60B2",
+ "ts": 1650363318,
+ "token": "24655ABF",
+ "medal_info": {
+ "icon_id": 0,
+ "target_id": 1871001,
+ "special": "",
+ "anchor_uname": "棉花大哥哥",
+ "anchor_roomid": 103,
+ "medal_level": 24,
+ "medal_name": "棉花花",
+ "medal_color": "#1a544b"
+ },
+ "user_info": {
+ "uname": "改了名真的能中吗",
+ "face": "http://i1.hdslb.com/bfs/face/e2391f132cd981fb70468a8ce9418513e959eb10.jpg",
+ "face_frame": "https://i0.hdslb.com/bfs/live/80f732943cc3367029df65e267960d56736a82ee.png",
+ "guard_level": 3,
+ "user_level": 11,
+ "level_color": "#61c05a",
+ "is_vip": 0,
+ "is_svip": 0,
+ "is_main_vip": 1,
+ "title": "0",
+ "manager": 0
+ },
+ "time": 60,
+ "start_time": 1650363318,
+ "end_time": 1650363378,
+ "gift": {
+ "num": 1,
+ "gift_id": 12000,
+ "gift_name": "醒目留言"
+ }
+ },
+ "roomid": "34348"
+}
+```
+
+
+
+#### 醒目留言删除 (SUPER_CHAT_MESSAGE_DELETE)
+
+
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `SUPER_CHAT_MESSAGE_DELETE` | |
+| data | obj | 消息本体 | |
+| roomid | num | 直播间号 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| ids | arr | 待删除的醒目留言 ID 列表 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "SUPER_CHAT_MESSAGE_DELETE",
+ "data": {
+ "ids": [
+ 3897503
+ ]
+ },
+ "roomid": 23708804
+}
+```
+
+
+
+#### 送礼 (SEND_GIFT)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------- | ---- |
+| cmd | str | `SEND_GIFT` | |
+| data | obj | 消息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | -------- | ------ | --------- |
+| action | str | 礼物操作,一般为"投喂" | |
+| batch_combo_id | str | 待调查 | 有时为空字符串 |
+| batch_combo_send | obj | 待调查 | 有时为null |
+| beatId | str | 待调查 | |
+| biz_source | str | 待调查 | |
+| blind_gift | | 待调查 | |
+| broadcast_id | num | 待调查 | |
+| coin_type | str | 标识金银瓜子礼物对应是否付费? | |
+| combo_resources_id | num | 待调查 | |
+| combo_send | | 待调查 | |
+| comber_stay_time | num | 待调查 | |
+| combo_total_coin | num | 待调查 | |
+| crit_prob | num | 待调查 | |
+| demarcation | num | 待调查 | |
+| discount_price | num | 待调查 | |
+| dmscore | num | 待调查 | |
+| draw | num | 待调查 | |
+| effect | num | 待调查 | |
+| effect_block | num | 待调查 | |
+| face | str | 礼物投喂者的头像URL | |
+| face_effect_id | num | 待调查 | |
+| face_effect_type | num | 待调查 | |
+| float_sc_resource_id | num | 待调查 | |
+| giftId | num | 礼物ID | |
+| giftName | str | 礼物名称 | |
+| giftType | num | 待调查 | |
+| gold | number | 待调查 | |
+| guard_level | num | 待调查 | |
+| is_first | bool | 待调查 | |
+| is_join_receiver | bool | 待调查 | |
+| is_naming | bool | 待调查 | |
+| is_special_batch | num | 待调查 | |
+| magnification | num | 待调查 | |
+| medal_info | obj | 礼物投喂者粉丝奖牌信息 | |
+| name_color | str | 待调查 | |
+| num | num | 该次投喂的礼物数量 | |
+| original_gift_name | str | 待调查 | |
+| price | num | 价值 | |
+| rcost | num | 待调查 | |
+| receive_user_info | obj | 礼物接收者信息,一般是主播 | |
+| remain | num | 待调查 | |
+| rnd | num | 礼物发送时的时间戳,以及后面9位未知数字 | |
+| send_master | | 待调查 | |
+| silver | num | 待调查 | |
+| super | num | 待调查 | |
+| super_batch_gift_num | num | 待调查 | |
+| super_gift_num | num | 待调查 | |
+| svga_block | num | 待调查 | |
+| switch | bool | 待调查 | |
+| tag_image | str | 待调查 | |
+| tid | num | 礼物发送时的时间戳,以及后面9位未知数字 | 似乎与rnd字段相同 |
+| timestamp | num | 礼物发送时的时间戳 | |
+| top_list | | 待调查 | |
+| total_coin | num | 实际金银瓜子总价值 | 不是总等于 num*price |
+| uid | num | 礼物投喂者的UID | |
+| uname | str | 礼物投喂者的名称 | |
+
+`data.batch_combo_send` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | -------- | ------ | --------- |
+| action | str | 礼物操作,一般为"投喂" | |
+| batch_combo_id | str | 待调查 | |
+| batch_combo_num | num | 待调查 | |
+| blind_gift | | 待调查 | |
+| gift_id | num | 待调查 | |
+| gift_name | str | 投喂的礼物名称 | 待调查 |
+| gift_num | num | 投喂礼物数量 | 待调查 |
+| send_master | | 待调查 | |
+| uid | num | 礼物投喂者的UID | |
+| uname | str | 礼物投喂者的名称 | |
+
+`data.medal_info` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | -------- | ------ | --------- |
+| anchor_roomid | num | 待调查 | |
+| anchor_uname | str | 待调查 | |
+| guard_level | num | 待调查 | |
+| icon_id | num | 待调查 | |
+| is_lighted | num | 待调查 | |
+| medal_color | num | 礼物投喂者的粉丝奖牌颜色 | 十六进制颜色值转为了十进制表示 |
+| medal_border_color | num | 礼物投喂者的粉丝奖牌边框颜色 | 十六进制颜色值的十进制表示 |
+| medal_color_end | num | 待调查 | |
+| medal_color_start | num | 待调查 | |
+| medal_level | num | 礼物投喂者的粉丝奖牌等级 | |
+| medal_name | str | 礼物投喂者的粉丝奖牌名称 | |
+| special | str | 待调查 | |
+| target_id | num | 待调查 | |
+
+`data.receive_user_info` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | -------- | ------ | --------- |
+| uid | num | 礼物接收者的UID | 一般为主播的UID |
+| uname | str | 礼物接收者的名称 | 一般为主播的名称 |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "SEND_GIFT",
+ "data": {
+ "action": "投喂",
+ "batch_combo_id": "batch:gift:combo_id:510149209:36047134:31036:1673622464.8445",
+ "batch_combo_send": {
+ "action": "投喂",
+ "batch_combo_id": "batch:gift:combo_id:510149209:36047134:31036:1673622464.8445",
+ "batch_combo_num": 1,
+ "blind_gift": null,
+ "gift_id": 31036,
+ "gift_name": "小花花",
+ "gift_num": 1,
+ "send_master": null,
+ "uid": 510149209,
+ "uname": "12138额83121"
+ },
+ "beatId": "",
+ "biz_source": "live",
+ "blind_gift": null,
+ "broadcast_id": 0,
+ "coin_type": "gold",
+ "combo_resources_id": 1,
+ "combo_send": {
+ "action": "投喂",
+ "combo_id": "gift:combo_id:510149209:36047134:31036:1673622464.8434",
+ "combo_num": 1,
+ "gift_id": 31036,
+ "gift_name": "小花花",
+ "gift_num": 1,
+ "send_master": null,
+ "uid": 510149209,
+ "uname": "12138额83121"
+ },
+ "combo_stay_time": 3,
+ "combo_total_coin": 100,
+ "crit_prob": 0,
+ "demarcation": 1,
+ "discount_price": 100,
+ "dmscore": 8,
+ "draw": 0,
+ "effect": 0,
+ "effect_block": 0,
+ "face": "https://i1.hdslb.com/bfs/face/fb79103e8b33547023e2010030b6889bba2b49bf.jpg",
+ "face_effect_id": 0,
+ "face_effect_type": 0,
+ "float_sc_resource_id": 0,
+ "giftId": 31036,
+ "giftName": "小花花",
+ "giftType": 0,
+ "gold": 0,
+ "guard_level": 0,
+ "is_first": true,
+ "is_join_receiver": false,
+ "is_naming": false,
+ "is_special_batch": 0,
+ "magnification": 1,
+ "medal_info": {
+ "anchor_roomid": 0,
+ "anchor_uname": "",
+ "guard_level": 0,
+ "icon_id": 0,
+ "is_lighted": 0,
+ "medal_color": 0,
+ "medal_color_border": 0,
+ "medal_color_end": 0,
+ "medal_color_start": 0,
+ "medal_level": 0,
+ "medal_name": "",
+ "special": "",
+ "target_id": 0
+ },
+ "name_color": "",
+ "num": 1,
+ "original_gift_name": "",
+ "price": 100,
+ "rcost": 164536872,
+ "receive_user_info": {
+ "uid": 36047134,
+ "uname": "小霖QL"
+ },
+ "remain": 0,
+ "rnd": "1673622464121900003",
+ "send_master": null,
+ "silver": 0,
+ "super": 0,
+ "super_batch_gift_num": 1,
+ "super_gift_num": 1,
+ "svga_block": 0,
+ "switch": true,
+ "tag_image": "",
+ "tid": "1673622464121900003",
+ "timestamp": 1673622464,
+ "top_list": null,
+ "total_coin": 100,
+ "uid": 510149209,
+ "uname": "12138额83121"
+ }
+}
+```
+
+
+
+#### 礼物星球点亮 (GIFT_STAR_PROCESS)
+
+注: 主播的礼物星球其一点亮之后
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `GIFT_STAR_PROCESS` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | -------- | ------ | --------- |
+| status | num | 待调查 | |
+| tip | str | 点亮礼物星球的消息文本 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "GIFT_STAR_PROCESS",
+ "data": {
+ "status": 1,
+ "tip": "情书已点亮"
+ }
+}
+```
+
+
+
+#### 礼物连击 (COMBO_SEND)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `COMBO_SEND` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | -------- | ------ | --------- |
+| action | str | 礼物操作,一般为"投喂" | |
+| batch_combo_id | str | 待调查 | |
+| batch_combo_num | num | 连击礼物数量 | |
+| combo_id | str | 待调查 | |
+| combo_num | str | 连击礼物数量 | |
+| combo_total_coin | num | 待调查 | |
+| dmscore | num | 待调查 | |
+| gift_id | num | 待调查 | |
+| gift_name | str | 连击礼物的名称 | |
+| gift_num | num | 0 | |
+| is_join_receiver | bool | 待调查 | |
+| is_naming | bool | 待调查 | |
+| is_show | num | 待调查 | |
+| medal_info | obj | 礼物投喂者的粉丝勋章信息 | |
+| name_color | str | 待调查 | |
+| r_uname | str | 主播的名称 | |
+| receive_user_info | obj | 主播的UID和名称 | |
+| ruid | num | 主播的UID | |
+| send_master | | 待调查 | |
+| total_num | num | 连击礼物数量 | |
+| uid | num | 礼物投喂者的UID | |
+| uname | str | 礼物投喂者的名称 | |
+
+`data.receive_user_info` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | -------- | ------ | --------- |
+| uid | number | 礼物接收者的UID | 一般为主播的UID |
+| uname | string | 礼物接收者的名称 | 一般为主播的名称 |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "COMBO_SEND",
+ "data": {
+ "action": "投喂",
+ "batch_combo_id": "batch:gift:combo_id:3493090830584635:29857468:31036:1673774515.6190",
+ "batch_combo_num": 2,
+ "combo_id": "gift:combo_id:3493090830584635:29857468:31036:1673774515.6180",
+ "combo_num": 2,
+ "combo_total_coin": 200,
+ "dmscore": 112,
+ "gift_id": 31036,
+ "gift_name": "小花花",
+ "gift_num": 0,
+ "is_join_receiver": false,
+ "is_naming": false,
+ "is_show": 1,
+ "medal_info": {
+ "anchor_roomid": 0,
+ "anchor_uname": "",
+ "guard_level": 0,
+ "icon_id": 0,
+ "is_lighted": 1,
+ "medal_color": 6067854,
+ "medal_color_border": 6067854,
+ "medal_color_end": 6067854,
+ "medal_color_start": 6067854,
+ "medal_level": 3,
+ "medal_name": "爱珞珞",
+ "special": "",
+ "target_id": 3493076559465366
+ },
+ "name_color": "",
+ "r_uname": "露萌不要雨草",
+ "receive_user_info": {
+ "uid": 29857468,
+ "uname": "露萌不要雨草"
+ },
+ "ruid": 29857468,
+ "send_master": null,
+ "total_num": 2,
+ "uid": 3493090830584635,
+ "uname": "DOC-Neo"
+ }
+}
+```
+
+
+
+#### 特殊礼物 (SPECIAL_GIFT)
+
+
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ---- |
+| cmd | str | `SPECIAL_GIFT` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+以 数字 为键, JSON Object 为值的表
+
+`data['?']` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | ---- |
+| action | str | 操作? | |
+| content | str | 内容 | |
+| hadJoin | num | 是否加入? | |
+| id | str | ? | 字符串表示的数字 |
+| num | str | 数量 | |
+| storm_gif | str | GIF 动画 URL | |
+| time | str | 持续时间? | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "SPECIAL_GIFT",
+ "data": {
+ "39": {
+ "action": "start",
+ "content": "可爱即正义~~",
+ "hadJoin": 0,
+ "id": "3306976431489",
+ "num": 1,
+ "storm_gif": "http://static.hdslb.com/live-static/live-room/images/gift-section/mobilegift/2/jiezou.gif?2017011901",
+ "time": 90
+ }
+ }
+}
+```
+
+
+
+
+
+#### 通知消息 (NOTICE_MSG)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `NOTICE_MSG` | |
+| id | num | 待调查 | |
+| name | str | 通知名 | |
+| full | obj | 完整显示信息? | |
+| half | obj | 半部显示信息? | | |
+| side | obj | 边缘显示信息? | |
+| roomid | num | 目标直播间短号 | |
+| real_roomid | num | 目标直播间真实ID | |
+| msg_common | str | 显示的消息内容 | |
+| msg_self | str | 消息内容本身 | 剔除额外文本 |
+| link_url | str | 通知消息跳转的URL | |
+| msg_type | num | 待调查 | |
+| shield_uid | num | 待调查 | |
+| business_id | str | 待调查 | |
+| scatter | obj | 待调查 | |
+| marquee_id | str | 待调查 | |
+| notice_type | num | 待调查 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "NOTICE_MSG",
+ "id": 804,
+ "name": "人气榜第一名",
+ "full": {
+ "head_icon": "https://i0.hdslb.com/bfs/live/f74b09c7fb83123a0dd66c536b6d5b143d271b08.png",
+ "tail_icon": "https://i0.hdslb.com/bfs/live/822da481fdaba986d738db5d8fd469ffa95a8fa1.webp",
+ "head_icon_fa": "https://i0.hdslb.com/bfs/live/f74b09c7fb83123a0dd66c536b6d5b143d271b08.png",
+ "tail_icon_fa": "https://i0.hdslb.com/bfs/live/38cb2a9f1209b16c0f15162b0b553e3b28d9f16f.png",
+ "head_icon_fan": 1,
+ "tail_icon_fan": 4,
+ "background": "#FFE6BD",
+ "color": "#9D5412",
+ "highlight": "#FF6933",
+ "time": 20
+ },
+ "half": {
+ "head_icon": "https://i0.hdslb.com/bfs/live/f74b09c7fb83123a0dd66c536b6d5b143d271b08.png",
+ "tail_icon": "https://i0.hdslb.com/bfs/live/822da481fdaba986d738db5d8fd469ffa95a8fa1.webp",
+ "background": "#FFE6BD",
+ "color": "#9D5412",
+ "highlight": "#FF6933",
+ "time": 0
+ },
+ "side": {
+ "head_icon": "",
+ "background": "",
+ "color": "",
+ "highlight": "",
+ "border": ""
+ },
+ "roomid": 23919301,
+ "real_roomid": 23919301,
+ "msg_common": "恭喜主播<%AG超玩会王者荣耀一诺%>荣获上小时人气榜第<%1%>名!点击传送查看精彩内容!",
+ "msg_self": "恭喜主播<%AG超玩会王者荣耀一诺%>荣获上小时人气榜第<%1%>名!",
+ "link_url": "https://live.bilibili.com/23919301?broadcast_type=0&is_room_feed=1&from=28003&extra_jump_from=28003",
+ "msg_type": 1,
+ "shield_uid": -1,
+ "business_id": "",
+ "scatter": {
+ "min": 0,
+ "max": 0
+ },
+ "marquee_id": "",
+ "notice_type": 0
+}
+```
+
+```json
+{
+ "cmd": "NOTICE_MSG",
+ "id": 814,
+ "name": "幻影飞船专用",
+ "full": {
+ "head_icon": "https://i0.hdslb.com/bfs/live/08978f1721200e11328d1f7d6231b21bcca20488.gif",
+ "tail_icon": "https://i0.hdslb.com/bfs/live/822da481fdaba986d738db5d8fd469ffa95a8fa1.webp",
+ "head_icon_fa": "https://i0.hdslb.com/bfs/live/08978f1721200e11328d1f7d6231b21bcca20488.gif",
+ "tail_icon_fa": "https://i0.hdslb.com/bfs/live/38cb2a9f1209b16c0f15162b0b553e3b28d9f16f.png",
+ "head_icon_fan": 1,
+ "tail_icon_fan": 4,
+ "background": "#F09153",
+ "color": "#FFFFFF",
+ "highlight": "#FFE600",
+ "time": 15
+ },
+ "half": {
+ "head_icon": "https://i0.hdslb.com/bfs/live/08978f1721200e11328d1f7d6231b21bcca20488.gif",
+ "tail_icon": "",
+ "background": "#F09153",
+ "color": "#FFFFFFFF",
+ "highlight": "#FFE600",
+ "time": 15
+ },
+ "side": {
+ "head_icon": "",
+ "background": "",
+ "color": "",
+ "highlight": "",
+ "border": ""
+ },
+ "roomid": 25207004,
+ "real_roomid": 25207004,
+ "msg_common": "<%咖啡_ミシェル%>投喂<%夜月瓜瓜sukuyi%>1个幻影飞船,向着浩瀚星辰出发!",
+ "msg_self": "<%咖啡_ミシェル%>投喂<%夜月瓜瓜sukuyi%>1个幻影飞船,向着浩瀚星辰出发!",
+ "link_url": "https://live.bilibili.com/25207004?broadcast_type=0&is_room_feed=1&from=28003&extra_jump_from=28003&live_lottery_type=1",
+ "msg_type": 2,
+ "shield_uid": -1,
+ "business_id": "32356",
+ "scatter": {
+ "min": 0,
+ "max": 0
+ },
+ "marquee_id": "",
+ "notice_type": 0
+}
+```
+
+
+
+#### 主播准备中 (PREPARING)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `PREPARING` | |
+| round | num | 轮播状态: 1正在轮播 0未轮播 | 开启轮播时存在 |
+| roomid | str | 直播间ID | 未知是真实ID还是短号 | 类型似乎从num改为str |
+| msg\_id | str | 信息id? | |
+| p\_is\_ack | bool | | 未知 |
+| p\_msg\_type | num | `1` | 未知 |
+| send\_time | num | 发送时间 | UNIX 毫秒时间戳 |
+
+**示例:**
+
+
+查看消息示例:
+
+有启用轮播:
+
+```json
+{
+ "cmd": "PREPARING",
+ "msg_id": "26964930181741056:1000:1000",
+ "p_is_ack": true,
+ "p_msg_type": 1,
+ "roomid": "1899237171",
+ "round": 1,
+ "send_time": 1739985402716
+}
+```
+
+未启用轮播:
+
+```json
+{
+ "cmd": "PREPARING",
+ "msg_id": "27040425357932032:1000:1000",
+ "p_is_ack": true,
+ "p_msg_type": 1,
+ "roomid": "1017",
+ "send_time": 1740129398337
+}
+```
+
+
+
+#### 直播开始 (LIVE)
+
+注:请求了开始直播接口、开始向服务器推流时下发。
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `LIVE` | |
+| live_key | str | 标记直播场次的key | 与开始直播接口获得的live_key相同 |
+| voice_background | str | ? | |
+| sub_session_key | str | ? | |
+| live_platform | str | 开播平台? | 推测由开播接口决定 |
+| live_model | num | ? | |
+| live_time | num | 开播时间 | UNIX 秒级时间戳,只有请求了开始直播后立刻下发的那个数据包里存在 |
+| roomid | num | 直播间号 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "LIVE",
+ "live_key": "234304209915761953",
+ "voice_background": "",
+ "sub_session_key": "234304209915761953sub_time:1651036923",
+ "live_platform": "pc",
+ "live_model": 0,
+ "live_time": 1651036923,
+ "roomid": 23614753
+}
+```
+
+
+
+#### 主播信息更新 (ROOM_REAL_TIME_MESSAGE_UPDATE)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `ROOM_REAL_TIME_MESSAGE_UPDATE` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| roomid | num | 直播间ID | 未知是真实ID还是短号 |
+| fans | num | 主播当前粉丝数 | |
+| red_notice | num | 待调查 | |
+| fans_club | num | 主播粉丝团人数 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "ROOM_REAL_TIME_MESSAGE_UPDATE",
+ "data": {
+ "roomid": 8618057,
+ "fans": 136,
+ "red_notice": -1,
+ "fans_club": 8
+ }
+}
+```
+
+
+
+#### 直播间高能榜 (ONLINE_RANK_V2)
+
+注: 直播间高能用户数据刷新
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `ONLINE_RANK_V2` | |
+| data | obj | 直播间高能用户数据 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| list | array | 在直播间高能用户中的用户信息 | |
+| rank_type | str | 待调查 | |
+
+`data.list[n]` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| uid | num | 用户 mid | |
+| face | str | 用户头像 URL | |
+| score | str | 该用户的贡献值 | |
+| uname | str | 用户名称 | |
+| rank | num | 该用户在高能榜中的排名 | |
+| guard_level | num | 大航海等级? | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "ONLINE_RANK_V2",
+ "data": {
+ "list": [
+ {
+ "uid": 2082621455,
+ "face": "https://i2.hdslb.com/bfs/face/9de6050277fa13d830eb97e3453d89843de46a31.jpg",
+ "score": "20",
+ "uname": "8级萌新_小华",
+ "rank": 1,
+ "guard_level": 0
+ },
+ {
+ "uid": 50500335,
+ "face": "https://i0.hdslb.com/bfs/face/ca722209251478ef0ffb45c3adeafb9dab283c57.jpg",
+ "score": "20",
+ "uname": "属官一号",
+ "rank": 2,
+ "guard_level": 0
+ },
+ {
+ "uid": 29857468,
+ "face": "https://i1.hdslb.com/bfs/face/7b4ae2e7e950f2dfb2bd969859c813487ce3b64c.jpg",
+ "score": "12",
+ "uname": "露萌不要雨草",
+ "rank": 3,
+ "guard_level": 0
+ }
+ ],
+ "rank_type": "gold-rank"
+ }
+}
+```
+
+
+
+#### 直播间高能用户数量 (ONLINE_RANK_COUNT)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `ONLINE_RANK_COUNT` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| count | num | 直播间高能用户数量 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "ONLINE_RANK_COUNT",
+ "data": {
+ "count": 4
+ }
+}
+```
+
+
+
+#### 未登录通知 (LOG_IN_NOTICE)
+
+注:未使用认证信息进行登录将会下发此数据包,通常于认证包回复后下发,在后续时间里也有可能会下发;部分受到豁免的直播间不会下发。
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `LOG_IN_NOTICE` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| notice\_msg | str | 通知内容 | |
+| image\_web | str | 在网页端使用的通知图片 | |
+| image\_app | str | 在app端使用的图片 | (未确认) |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "LOG_IN_NOTICE",
+ "data": {
+ "notice_msg": "为保护用户隐私,未登录无法查看他人昵称",
+ "image_web": "http://i0.hdslb.com/bfs/dm/75e7c16b99208df259fe0a93354fd3440cbab412.png",
+ "image_app": "http://i0.hdslb.com/bfs/dm/b632f7dcd3acf47deffb5f9ccc9546ae97a3415b.png"
+ }
+}
+```
+
+
+
+#### 用户到达直播间高能榜前三名的消息 (ONLINE_RANK_TOP3)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `ONLINE_RANK_TOP3` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| dmscore | num | 待调查 | |
+| list | array | 消息内容和高能榜排名 | |
+
+`data.list[n]` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| msg | str | 消息内容 | |
+| rank | num | 该用户的高能榜排名 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "ONLINE_RANK_TOP3",
+ "data": {
+ "dmscore": 112,
+ "list": [
+ {
+ "msg": "恭喜 <%你干嘛哈哈哎哟%> 成为高能用户",
+ "rank": 1
+ }
+ ]
+ }
+}
+```
+
+
+
+#### 直播间在人气榜的排名改变 (POPULAR_RANK_CHANGED)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `POPULAR_RANK_CHANGED` | |
+| data | obj | 直播间的人气榜排名信息 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| uid | num | 主播 mid | |
+| rank | num | 人气榜排名 | |
+| countdown | num | 人气榜下轮结算剩余时长 | |
+| timestamp | num | 触发时的Unix时间戳 | |
+| cache_key | str | 待调查 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "POPULAR_RANK_CHANGED",
+ "data": {
+ "uid": 780791,
+ "rank": 36,
+ "countdown": 1927,
+ "timestamp": 1702578474,
+ "cache_key": "rank_change:91a4e81ba3034ae894d61e432aa13081"
+ }
+}
+```
+
+
+
+#### 直播间限时热门榜排名改变 (HOT_RANK_CHANGED)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `HOT_RANK_CHANGED` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| rank | num | 排名 | |
+| trend | num | 趋势? | |
+| countdown | num | 剩余时间? | |
+| timestamp | num | 当前时间? | UNIX 秒级时间戳 |
+| web_url | str | 排行榜 URL | |
+| live_url | str | 排行榜 URL | |
+| blink_url | str | 排行榜 URL | |
+| live_link_url | str | 排行榜 URL | |
+| pc_link_url | str | 排行榜 URL | |
+| icon | str | 图标 URL | |
+| area_name | str | 分区名称 | |
+| rank_desc | str | 空? | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "HOT_RANK_CHANGED",
+ "data": {
+ "rank": 31,
+ "trend": 1,
+ "countdown": 1440,
+ "timestamp": 1651037760,
+ "web_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=2&area_id=9&parent_area_id=9&second_area_id=0",
+ "live_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=1&area_id=9&parent_area_id=9&second_area_id=0&is_live_half_webview=1&hybrid_rotate_d=1&hybrid_half_ui=1,3,100p,70p,f4eefa,0,30,100,12,0;2,2,375,100p,f4eefa,0,30,100,0,0;3,3,100p,70p,f4eefa,0,30,100,12,0;4,2,375,100p,f4eefa,0,30,100,0,0;5,3,100p,70p,f4eefa,0,30,100,0,0;6,3,100p,70p,f4eefa,0,30,100,0,0;7,3,100p,70p,f4eefa,0,30,100,0,0;8,3,100p,70p,f4eefa,0,30,100,0,0",
+ "blink_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=3&area_id=9&parent_area_id=9&second_area_id=0&is_live_half_webview=1&hybrid_rotate_d=1&is_cling_player=1&hybrid_half_ui=1,3,100p,70p,f4eefa,0,30,100,0,0;2,2,375,100p,f4eefa,0,30,100,0,0;3,3,100p,70p,f4eefa,0,30,100,0,0;4,2,375,100p,f4eefa,0,30,100,0,0;5,3,100p,70p,f4eefa,0,30,100,0,0;6,3,100p,70p,f4eefa,0,30,100,0,0;7,3,100p,70p,f4eefa,0,30,100,0,0;8,3,100p,70p,f4eefa,0,30,100,0,0",
+ "live_link_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=5&area_id=9&parent_area_id=9&second_area_id=0&is_live_half_webview=1&hybrid_rotate_d=1&is_cling_player=1&hybrid_half_ui=1,3,100p,70p,f4eefa,0,30,100,0,0;2,2,375,100p,f4eefa,0,30,100,0,0;3,3,100p,70p,f4eefa,0,30,100,0,0;4,2,375,100p,f4eefa,0,30,100,0,0;5,3,100p,70p,f4eefa,0,30,100,0,0;6,3,100p,70p,f4eefa,0,30,100,0,0;7,3,100p,70p,f4eefa,0,30,100,0,0;8,3,100p,70p,f4eefa,0,30,100,0,0",
+ "pc_link_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=4&is_live_half_webview=1&area_id=9&parent_area_id=9&second_area_id=0&pc_ui=338,465,f4eefa,0",
+ "icon": "https://i0.hdslb.com/bfs/live/63217712edb588864b2c714225992e7f46b0b917.png",
+ "area_name": "虚拟",
+ "rank_desc": ""
+ }
+}
+```
+
+
+
+#### 当前直播间限时热门榜排名改变V2 (HOT_RANK_CHANGED_V2)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `HOT_RANK_CHANGED_V2` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| rank | num | 排名 | |
+| trend | num | 趋势? | |
+| countdown | num | 剩余时间? | |
+| timestamp | num | 当前时间? | UNIX 秒级时间戳 |
+| web_url | str | 排行榜 URL | |
+| live_url | str | 排行榜 URL | |
+| blink_url | str | 排行榜 URL | |
+| live_link_url | str | 排行榜 URL | |
+| pc_link_url | str | 排行榜 URL | |
+| icon | str | 图标 URL | |
+| area_name | str | 分区名称 | |
+| rank_desc | str | 排行榜说明 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "HOT_RANK_CHANGED_V2",
+ "data": {
+ "rank": 31,
+ "trend": 0,
+ "countdown": 1440,
+ "timestamp": 1651037760,
+ "web_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=2&area_id=9&parent_area_id=9&second_area_id=371",
+ "live_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=1&area_id=9&parent_area_id=9&second_area_id=371&is_live_half_webview=1&hybrid_rotate_d=1&hybrid_half_ui=1,3,100p,70p,f4eefa,0,30,100,12,0;2,2,375,100p,f4eefa,0,30,100,0,0;3,3,100p,70p,f4eefa,0,30,100,12,0;4,2,375,100p,f4eefa,0,30,100,0,0;5,3,100p,70p,f4eefa,0,30,100,0,0;6,3,100p,70p,f4eefa,0,30,100,0,0;7,3,100p,70p,f4eefa,0,30,100,0,0;8,3,100p,70p,f4eefa,0,30,100,0,0",
+ "blink_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=3&area_id=9&parent_area_id=9&second_area_id=371&is_live_half_webview=1&hybrid_rotate_d=1&is_cling_player=1&hybrid_half_ui=1,3,100p,70p,f4eefa,0,30,100,0,0;2,2,375,100p,f4eefa,0,30,100,0,0;3,3,100p,70p,f4eefa,0,30,100,0,0;4,2,375,100p,f4eefa,0,30,100,0,0;5,3,100p,70p,f4eefa,0,30,100,0,0;6,3,100p,70p,f4eefa,0,30,100,0,0;7,3,100p,70p,f4eefa,0,30,100,0,0;8,3,100p,70p,f4eefa,0,30,100,0,0",
+ "live_link_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=5&area_id=9&parent_area_id=9&second_area_id=371&is_live_half_webview=1&hybrid_rotate_d=1&is_cling_player=1&hybrid_half_ui=1,3,100p,70p,f4eefa,0,30,100,0,0;2,2,375,100p,f4eefa,0,30,100,0,0;3,3,100p,70p,f4eefa,0,30,100,0,0;4,2,375,100p,f4eefa,0,30,100,0,0;5,3,100p,70p,f4eefa,0,30,100,0,0;6,3,100p,70p,f4eefa,0,30,100,0,0;7,3,100p,70p,f4eefa,0,30,100,0,0;8,3,100p,70p,f4eefa,0,30,100,0,0",
+ "pc_link_url": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=4&is_live_half_webview=1&area_id=9&parent_area_id=9&second_area_id=371&pc_ui=338,465,f4eefa,0",
+ "icon": "https://i0.hdslb.com/bfs/live/cb2e160ac4f562b347bb5ae6e635688ebc69580f.png",
+ "area_name": "虚拟主播",
+ "rank_desc": "虚拟主播top50"
+ }
+}
+```
+
+
+
+#### 限时热门榜上榜信息 (HOT_RANK_SETTLEMENT)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `HOT_RANK_SETTLEMENT` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| area_name | str | 分区名称 | |
+| cache_key | str | ? | |
+| dm_msg | str | 弹幕提示信息 | |
+| dmscore | num | ? | |
+| face | str | 主播头像 URL | |
+| icon | str | 图标 URL | |
+| rank | num | 排名 | |
+| timestamp | num | 时间 | UNIX 秒级时间戳 |
+| uname | str | 主播用户名 | |
+| url | str | 排行榜 URL | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "HOT_RANK_SETTLEMENT",
+ "data": {
+ "area_name": "虚拟主播",
+ "cache_key": "2f8baf923a6b7df5a045df6c7181984c",
+ "dm_msg": "恭喜主播 <% 白黑卡扣 %> 荣登限时热门榜虚拟主播榜top9! 即将获得热门流量推荐哦!",
+ "dmscore": 144,
+ "face": "http://i0.hdslb.com/bfs/face/ddfcd696213e07884ce227c6ba6d23a007a08c02.jpg",
+ "icon": "https://i0.hdslb.com/bfs/live/63217712edb588864b2c714225992e7f46b0b917.png",
+ "rank": 9,
+ "timestamp": 1651041000,
+ "uname": "白黑卡扣",
+ "url": "https://live.bilibili.com/p/html/live-app-hotrank/result.html?is_live_half_webview=1&hybrid_half_ui=1,5,250,200,f4eefa,0,30,0,0,0;2,5,250,200,f4eefa,0,30,0,0,0;3,5,250,200,f4eefa,0,30,0,0,0;4,5,250,200,f4eefa,0,30,0,0,0;5,5,250,200,f4eefa,0,30,0,0,0;6,5,250,200,f4eefa,0,30,0,0,0;7,5,250,200,f4eefa,0,30,0,0,0;8,5,250,200,f4eefa,0,30,0,0,0&areaId=9&cache_key=2f8baf923a6b7df5a045df6c7181984c"
+ }
+}
+```
+
+
+
+#### 限时热门榜上榜信息V2 (HOT_RANK_SETTLEMENT_V2)
+
+**JSON消息:**
+
+基本同 [限时热门榜上榜信息](#限时热门榜上榜信息-hot_rank_settlement), 但没有 `data.dmscore` 字段
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "HOT_RANK_SETTLEMENT_V2",
+ "data": {
+ "rank": 9,
+ "uname": "白黑卡扣",
+ "face": "http://i0.hdslb.com/bfs/face/ddfcd696213e07884ce227c6ba6d23a007a08c02.jpg",
+ "timestamp": 1651040700,
+ "icon": "https://i0.hdslb.com/bfs/live/cb2e160ac4f562b347bb5ae6e635688ebc69580f.png",
+ "area_name": "虚拟主播",
+ "url": "https://live.bilibili.com/p/html/live-app-hotrank/result.html?is_live_half_webview=1&hybrid_half_ui=1,5,250,200,f4eefa,0,30,0,0,0;2,5,250,200,f4eefa,0,30,0,0,0;3,5,250,200,f4eefa,0,30,0,0,0;4,5,250,200,f4eefa,0,30,0,0,0;5,5,250,200,f4eefa,0,30,0,0,0;6,5,250,200,f4eefa,0,30,0,0,0;7,5,250,200,f4eefa,0,30,0,0,0;8,5,250,200,f4eefa,0,30,0,0,0&areaId=371&cache_key=693b7b029b66976a399cf4e3485d265a",
+ "cache_key": "693b7b029b66976a399cf4e3485d265a",
+ "dm_msg": "恭喜主播 <% 白黑卡扣 %> 荣登限时热门榜虚拟主播榜top9! 即将获得热门流量推荐哦!"
+ }
+}
+```
+
+
+
+#### 直播间用户点赞 (LIKE_INFO_V3_CLICK)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `LIKE_INFO_V3_CLICK` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| show_area | num | 待调查 | |
+| msg_type | num | 待调查 | |
+| like_icon | str | 点赞图标的URL | |
+| uid | num | 点赞的用户的UID | |
+| like_text | str | 点赞文本 | |
+| uname | str | 点赞的用户的名称 | |
+| uname_color | str | 点赞的用户的名称颜色 | |
+| identities | array | 待调查 | |
+| fans_medal | obj | 点赞的用户的粉丝勋章信息 | |
+| contribution_info | obj | 待调查 | |
+| dmscore | num | 待调查 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "LIKE_INFO_V3_CLICK",
+ "data": {
+ "show_area": 0,
+ "msg_type": 6,
+ "like_icon": "https://i0.hdslb.com/bfs/live/23678e3d90402bea6a65251b3e728044c21b1f0f.png",
+ "uid": 32174213,
+ "like_text": "为主播点赞了",
+ "uname": "MeiDngS",
+ "uname_color": "",
+ "identities": [
+ 1
+ ],
+ "fans_medal": {
+ "target_id": 0,
+ "medal_level": 0,
+ "medal_name": "",
+ "medal_color": 0,
+ "medal_color_start": 12632256,
+ "medal_color_end": 12632256,
+ "medal_color_border": 12632256,
+ "is_lighted": 0,
+ "guard_level": 0,
+ "special": "",
+ "icon_id": 0,
+ "anchor_roomid": 0,
+ "score": 0
+ },
+ "contribution_info": {
+ "grade": 0
+ },
+ "dmscore": 20
+ }
+}
+```
+
+
+
+#### 直播间点赞数更新 (LIKE_INFO_V3_UPDATE)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `LIKE_INFO_V3_UPDATE` | |
+| data | obj | 直播间点赞数 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| click_count | num | 直播间点赞数 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "LIKE_INFO_V3_UPDATE",
+ "data": {
+ "click_count": 3227
+ }
+}
+```
+
+
+
+#### 直播间发红包弹幕 (POPULARITY_RED_POCKET_START)
+
+注: 开始抽取红包
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `POPULARITY_RED_POCKET_START` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | --- | ------ | --------- |
+| lot_id | num | 发送的红包的ID | |
+| sender_uid | num | 发送者的UID | |
+| sender_name | str | 发送者的名称 | |
+| sender_face | str | 发送者的头像的URL | |
+| join_requirement | num | 待调查 | |
+| danmu | str | 用户参与红包时自动发送的弹幕内容 | |
+| current_time | num | 服务器发送数据包的Unix时间戳 | |
+| start_time | num | 可以开始抢红包的Unix时间戳 | |
+| end_time | num | 抢红包的结束时间Unix时间戳 | |
+| last_time | num | 红包的持续时间(秒) | start_time - end_time |
+| remove_time | num | 待调查 | |
+| replace_time | num | 待调查 | |
+| lot_status | num | 待调查 | |
+| h5_url | str | 红包页面的URL | |
+| user_status | num | 用户参与状态,但是不知道是哪个用户 | 1已参与 2未参与 |
+| awards | array | 红包内包含的礼物的信息 | |
+| lot_config_id | num | 待调查 | |
+| total_price | num | 内含抽取奖品金瓜子总价值 | 目前红包的 20% 会直接交给主播, 所以 20 电池 (2 CNY) 对应 2000 金瓜子的 80% 是 1600 金瓜子 |
+| wait_num | num | 待调查 | |
+
+`data.awards[n]` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | --- | ------ | --------- |
+| gift_id | num | 礼物ID | |
+| gift_name | str | 礼物名称 | |
+| gift_pic | str | 礼物图标URL | |
+| num | num | 该礼物的数量 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "POPULARITY_RED_POCKET_START",
+ "data": {
+ "lot_id": 2062329,
+ "sender_uid": 181851309,
+ "sender_name": "毒瘤老肥仔",
+ "sender_face": "http://i0.hdslb.com/bfs/face/fed3871b01976ddd35fd3f772ffc2d4949f1391d.jpg",
+ "join_requirement": 1,
+ "danmu": "老板大气!点点红包抽礼物!",
+ "current_time": 1650425344,
+ "start_time": 1650425343,
+ "end_time": 1650425523,
+ "last_time": 180,
+ "remove_time": 1650425538,
+ "replace_time": 1650425533,
+ "lot_status": 1,
+ "h5_url": "https://live.bilibili.com/p/html/live-app-red-envelope/popularity.html?is_live_half_webview=1&hybrid_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&hybrid_rotate_d=1&hybrid_biz=popularityRedPacket&lotteryId=2062329",
+ "user_status": 2,
+ "awards": [
+ {
+ "gift_id": 31212,
+ "gift_name": "打call",
+ "gift_pic": "https://s1.hdslb.com/bfs/live/f75291a0e267425c41e1ce31b5ffd6bfedc6f0b6.png",
+ "num": 2
+ },
+ {
+ "gift_id": 31214,
+ "gift_name": "牛哇",
+ "gift_pic": "https://s1.hdslb.com/bfs/live/b8a38b4bd3be120becddfb92650786f00dffad48.png",
+ "num": 3
+ },
+ {
+ "gift_id": 31216,
+ "gift_name": "i了i了",
+ "gift_pic": "https://s1.hdslb.com/bfs/live/1157a445487b39c0b7368d91b22290c60fa665b2.png",
+ "num": 3
+ }
+ ],
+ "lot_config_id": 3,
+ "total_price": 1600,
+ "wait_num": 0
+ }
+}
+```
+
+
+
+#### 直播间红包 (POPULARITY_RED_POCKET_NEW)
+
+注: 与 [直播间发红包弹幕](#直播间发红包弹幕-popularity_red_pocket_start) 不同, 那个是发红包的弹幕信息, 这个则和 [送礼](#送礼-send_gift) 的信息相似, 但也有前者的一些字段
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------------------- | ---- |
+| cmd | str | `POPULARITY_RED_POCKET_NEW` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ------------ | ---- |
+| lot_id | num | 红包 ID | |
+| start_time | num | 开抢时间 | UNIX 秒级时间戳 |
+| current_time | num | 当前时间 | UNIX 秒级时间戳 |
+| wait_num | num | 0? | |
+| uname | str | 发送者用户名 | |
+| uid | num | 发送者的 mid | |
+| action | str | 礼物操作 | |
+| num | num | 礼物数量 | |
+| gift_name | str | `红包` | |
+| gift_id | num | 礼物 ID? | |
+| price | num | 电池标价 | |
+| name_color | str | 用户名颜色 | |
+| medal_info | obj | 发送者粉丝牌 | |
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "POPULARITY_RED_POCKET_NEW",
+ "data": {
+ "lot_id": 2062329,
+ "start_time": 1650425343,
+ "current_time": 1650425343,
+ "wait_num": 0,
+ "uname": "毒瘤老肥仔",
+ "uid": 181851309,
+ "action": "送出",
+ "num": 1,
+ "gift_name": "红包",
+ "gift_id": 13000,
+ "price": 20,
+ "name_color": "#00D1F1",
+ "medal_info": {
+ "target_id": 11909915,
+ "special": "",
+ "icon_id": 0,
+ "anchor_uname": "",
+ "anchor_roomid": 0,
+ "medal_level": 22,
+ "medal_name": "伊克拉",
+ "medal_color": 1725515,
+ "medal_color_start": 1725515,
+ "medal_color_end": 5414290,
+ "medal_color_border": 6809855,
+ "is_lighted": 1,
+ "guard_level": 3
+ }
+ }
+}
+```
+
+
+
+#### 直播间抢到红包的用户 (POPULARITY_RED_POCKET_WINNER_LIST)
+
+注: 红包中奖列表
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------------------------------- | ---- |
+| cmd | str | `POPULARITY_RED_POCKET_WINNER_LIST` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ----- | -------- | ---- |
+| lot_id | num | 红包 ID | |
+| total_num | num | 礼物总数 | |
+| winner_info | array | 中奖信息 | |
+| awards | obj | 礼物信息 | |
+| version | num | | |
+
+`data.winner_info` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| -- | ----- | ------------ | ---- |
+| 0 | array | 中奖者 1 | |
+| …… | array | …… | |
+| n | array | 中奖者 (n+1) | |
+
+`data.winner_info[n]` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| -- | ---- | ---------------------- | ---- |
+| 0 | num | 该抢到红包的用户的 mid | |
+| 1 | str | 该抢到红包的用户的名称 | |
+| 2 | num | bag_id? | |
+| 3 | num | 该用户抢到的礼物的 ID | |
+
+`data.awards` 对象:
+
+以 礼物 ID 为键, JSON Object 为值的表
+
+`data.awards['?']` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | ------------ | ---- |
+| award_type | num | 奖品类型? | |
+| award_name | str | 礼物名称 | |
+| award_pic | str | 礼物图标 URL | |
+| award_big_pic | str | 礼物大图 URL | |
+| award_price | num | 礼物价值 | |
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "POPULARITY_RED_POCKET_WINNER_LIST",
+ "data": {
+ "lot_id": 8445764,
+ "total_num": 8,
+ "winner_info": [
+ [
+ 38554435,
+ "我的0019",
+ 4581509,
+ 31212
+ ],
+ [
+ 516174930,
+ "云来海遛鸟大爷",
+ 4606389,
+ 31212
+ ]
+ ],
+ "awards": {
+ "31212": {
+ "award_type": 1,
+ "award_name": "打call",
+ "award_pic": "https://s1.hdslb.com/bfs/live/461be640f60788c1d159ec8d6c5d5cf1ef3d1830.png",
+ "award_big_pic": "https://i0.hdslb.com/bfs/live/9e6521c57f24c7149c054d265818d4b82059f2ef.png",
+ "award_price": 500
+ },
+ "31214": {
+ "award_type": 1,
+ "award_name": "牛哇",
+ "award_pic": "https://s1.hdslb.com/bfs/live/91ac8e35dd93a7196325f1e2052356e71d135afb.png",
+ "award_big_pic": "https://i0.hdslb.com/bfs/live/3b74c117b4f265edcea261bc5608a58d3a7c300a.png",
+ "award_price": 100
+ },
+ "31216": {
+ "award_type": 1,
+ "award_name": "i了i了",
+ "award_pic": "https://s1.hdslb.com/bfs/live/1157a445487b39c0b7368d91b22290c60fa665b2.png",
+ "award_big_pic": "https://i0.hdslb.com/bfs/live/cfb9c3d9bdd2c25c95b7d859ebaa590ca9362adb.png",
+ "award_price": 100
+ }
+ },
+ "version": 1
+ }
+}
+```
+
+
+
+#### 直播间看过人数 (WATCHED_CHANGE)
+
+注: 当前直播历史观众数量, 可替代人气
+
+**正文:**
+
+数据包的正文, 前19字节的信息未知:
+
+```text
+00000001: 8b38 8000 0000 7200 1000 0000 0000 0500 .8....r.........
+00000002: 0000 00 ...
+```
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---------------- | ---- |
+| cmd | str | `WATCHED_CHANGE` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ------------- | ---- |
+| num | num | 看过人数 | |
+| text_small | str | 显示文字 (小) | |
+| text_large | str | 显示文字 (大) | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "WATCHED_CHANGE",
+ "data": {
+ "num": 17903,
+ "text_small": "1.7万",
+ "text_large": "1.7万人看过"
+ }
+}
+```
+
+
+
+#### 用户进场特效 (ENTRY_EFFECT)
+
+注: 有进场特效的用户进入直播间
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ---- |
+| cmd | str | `ENTRY_EFFECT` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------------- | ----- | ---------------- | ---- |
+| id | num | ? | |
+| uid | num | 进场用户 mid | |
+| target_id | num | 主播 mid? | |
+| mock_effect | num | ? | |
+| face | str | 进场用户头像 URL | |
+| privilege_type | num | ? | |
+| copy_writing | str | 进场欢迎文本 | |
+| copy_color | str | 进场欢迎文本颜色 | 16 进制 |
+| highlight_color | str | 高亮颜色? | 16 进制 |
+| priority | num | 优先级? | |
+| basemap_url | str | 进场特效背景 URL | APP 端 |
+| show_avatar | num | 是否显示用户头像 | 1: 显示 0: 不显示 |
+| web_basemap_url | str | 进场特效背景 URL | 网页端 |
+| web_effective_time | num | 进场特效生存时间 | 网页端 |
+| web_effect_close | num | ? | |
+| web_close_time | num | ? | |
+| business | num | ? | |
+| copy_writing_v2 | str | 进场欢迎文本 | APP 端? |
+| icon_list | array | 空? | |
+| max_delay_time | num | 最大等待时间? | |
+| trigger_time | num | 触发时间戳 | UNIX 纳秒时间戳 |
+| identities | num | 标识符? | |
+| effect_silent_time | num | ? | |
+| effective_time_new | num | ? | |
+| web_dynamic_url_webp | str | ? | |
+| web_dynamic_url_apng | str | ? | |
+| mobile_dynamic_url_webp | str | ? | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "ENTRY_EFFECT",
+ "data": {
+ "id": 4,
+ "uid": 489893482,
+ "target_id": 27717502,
+ "mock_effect": 0,
+ "face": "https://i0.hdslb.com/bfs/face/member/noface.jpg",
+ "privilege_type": 3,
+ "copy_writing": "欢迎舰长 <%天使雨晰%> 进入直播间",
+ "copy_color": "#ffffff",
+ "highlight_color": "#E6FF00",
+ "priority": 1,
+ "basemap_url": "https://i0.hdslb.com/bfs/live/mlive/11a6e8eb061c3e715d0a6a2ac0ddea2faa15c15e.png",
+ "show_avatar": 1,
+ "effective_time": 2,
+ "web_basemap_url": "https://i0.hdslb.com/bfs/live/mlive/11a6e8eb061c3e715d0a6a2ac0ddea2faa15c15e.png",
+ "web_effective_time": 2,
+ "web_effect_close": 0,
+ "web_close_time": 0,
+ "business": 1,
+ "copy_writing_v2": "欢迎舰长 <%天使雨晰%> 进入直播间",
+ "icon_list": [],
+ "max_delay_time": 7,
+ "trigger_time": 1673625604373633300,
+ "identities": 6,
+ "effect_silent_time": 0,
+ "effective_time_new": 0,
+ "web_dynamic_url_webp": "",
+ "web_dynamic_url_apng": "",
+ "mobile_dynamic_url_webp": ""
+ }
+}
+```
+
+
+
+#### 全屏特效 (FULL_SCREEN_SPECIAL_EFFECT)
+
+**示例:**
+
+
+查看响应示例:
+
+```json
+{
+ "cmd": "FULL_SCREEN_SPECIAL_EFFECT",
+ "data": {
+ "type": 2,
+ "ids": [
+ 514
+ ],
+ "queue": 2,
+ "platform_in": [
+ 1,
+ 2
+ ]
+ }
+}
+```
+
+
+
+#### 直播间在所属分区的排名改变 (AREA_RANK_CHANGED)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `AREA_RANK_CHANGED` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | ------------------ | ---- |
+| conf_id | num | 配置 ID? | |
+| rank_name | str | 排行榜名称 | |
+| uid | num | 主播 mid | |
+| rank | num | 直播间在分区的排名 | 没有上榜则为 0 |
+| icon_url_blue | str | 蓝色排名图标 URL | |
+| icon_url_pink | str | 粉色排名图标 URL | |
+| icon_url_grey | str | 灰色排名图标 URL | |
+| action_type | num | ? | |
+| timestamp | num | 当前时间 | UNIX 秒级时间戳 |
+| msg_id | str | ? | 一串 UUID |
+| jump_url_link | str | 排行榜跳转链接 | |
+| jump_url_pc | str | 排行榜跳转链接 | |
+| jump_url_pink | str | 排行榜跳转链接 | |
+| jump_url_web | str | 排行榜跳转链接 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "AREA_RANK_CHANGED",
+ "data": {
+ "conf_id": 23,
+ "rank_name": "手游航海",
+ "uid": 27717502,
+ "rank": 4,
+ "icon_url_blue": "https://i0.hdslb.com/bfs/live/18e2990a546d33368200f9058f3d9dbc4038eb5c.png",
+ "icon_url_pink": "https://i0.hdslb.com/bfs/live/a6c490c36e88c7b191a04883a5ec15aed187a8f7.png",
+ "icon_url_grey": "https://i0.hdslb.com/bfs/live/cb7444b1faf1d785df6265bfdc1fcfc993419b76.png",
+ "action_type": 1,
+ "timestamp": 1673625610,
+ "msg_id": "e93c7860-b901-41ca-aad8-fe538a5fac9c",
+ "jump_url_link": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=3&ruid=27717502&conf_id=23&is_live_half_webview=1&hybrid_rotate_d=1&is_cling_player=1&hybrid_half_ui=1,3,100p,70p,f4eefa,0,30,100,0,0;2,2,375,100p,f4eefa,0,30,100,0,0;3,3,100p,70p,f4eefa,0,30,100,0,0;4,2,375,100p,f4eefa,0,30,100,0,0;5,3,100p,70p,f4eefa,0,30,100,0,0;6,3,100p,70p,f4eefa,0,30,100,0,0;7,3,100p,70p,f4eefa,0,30,100,0,0;8,3,100p,70p,f4eefa,0,30,100,0,0#/area-rank",
+ "jump_url_pc": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=4&ruid=27717502&conf_id=23&pc_ui=338,465,f4eefa,0#/area-rank",
+ "jump_url_pink": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=1&ruid=27717502&conf_id=23&is_live_half_webview=1&hybrid_rotate_d=1&is_cling_player=1&hybrid_half_ui=1,3,100p,70p,f4eefa,0,30,100,0,0;2,2,375,100p,f4eefa,0,30,100,0,0;3,3,100p,70p,f4eefa,0,30,100,0,0;4,2,375,100p,f4eefa,0,30,100,0,0;5,3,100p,70p,f4eefa,0,30,100,0,0;6,3,100p,70p,f4eefa,0,30,100,0,0;7,3,100p,70p,f4eefa,0,30,100,0,0;8,3,100p,70p,f4eefa,0,30,100,0,0#/area-rank",
+ "jump_url_web": "https://live.bilibili.com/p/html/live-app-hotrank/index.html?clientType=2&ruid=27717502&conf_id=23#/area-rank"
+ }
+}
+```
+
+
+
+#### 广播通知弹幕信息 (COMMON_NOTICE_DANMAKU)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `COMMON_NOTICE_DANMAKU` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | --- | ------ | --------- |
+| biz_id | num | 待调查 | |
+| content_segments | array | 文本分段 | |
+| danmaku_style | obj | 文本样式信息 | |
+| danmaku_url | str | 待调查 | |
+| dmscore | num | 待调查 | |
+| terminals | array | 待调查 | |
+
+`data.content_segments[n]` 数组中的对象
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | --- | ------ | --------- |
+| font_color | str | text 字段的十六进制颜色值 | |
+| font_color_dark | str | text 字段的十六进制颜色值 | APP端设置为深色模式时使用 |
+| text | str | 文本 | |
+| type | num | 待调查 | |
+
+`data.danmaku_style` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | --- | ------ | --------- |
+| background_color | str | 文本背景颜色的十六进制颜色值 | |
+| background_color_dark | str | 文本背景颜色的十六进制颜色值 | APP端设置为深色模式时使用 |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "COMMON_NOTICE_DANMAKU",
+ "data": {
+ "content_segments": [
+ {
+ "font_color": "#FB7299",
+ "text": "春日限时任务:任务即将结束,抓紧完成获取3元红包奖励吧!未完成任务进度将重置",
+ "type": 1
+ }
+ ],
+ "dmscore": 144,
+ "terminals": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5
+ ]
+ }
+}
+```
+
+```json
+{
+ "cmd": "COMMON_NOTICE_DANMAKU",
+ "data": {
+ "biz_id": 0,
+ "content_segments": [
+ {
+ "font_color": "#CCCCCC",
+ "font_color_dark": "#CCCCCC",
+ "text": "恭喜主播 时雨ioo ",
+ "type": 1
+ },
+ {
+ "font_color": "#F494AF",
+ "font_color_dark": "#F494AF",
+ "text": "成为手游航海当前第5名",
+ "type": 1
+ }
+ ],
+ "danmaku_style": {
+ "background_color": null,
+ "background_color_dark": null
+ },
+ "danmaku_uri": "",
+ "dmscore": 144,
+ "terminals": [
+ 1,
+ 2,
+ 3
+ ]
+ }
+}
+```
+
+
+
+#### 直播间信息更改 (ROOM_CHANGE)
+
+注: 例如直播间标题更改、直播间分区更改
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `ROOM_CHANGE` | |
+| data | obj | | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | --- | ------ | --------- |
+| title | str | 直播间标题 | |
+| area_id | num | 当前直播间所属二级分区的ID | |
+| parent_area_id | num | 当前直播间所属一级分区的ID | |
+| area_name | str | 当前直播间所属二级分区的名称 | |
+| parent_area_name | str | 当前直播间所属一级分区名称 | |
+| live_key | str | 标记直播场次的key | 未开播更新直播间信息时为`"0"` |
+| sub_session_key | str | 待调查 | 未开播更新直播间信息时为`""`(空字符串) |
+
+**示例:**
+
+
+查看消息示例:
+
+已开播:
+
+```json
+{
+ "cmd": "ROOM_CHANGE",
+ "data": {
+ "title": "开始白给CS",
+ "area_id": 371,
+ "parent_area_id": 9,
+ "area_name": "虚拟主播",
+ "parent_area_name": "虚拟主播",
+ "live_key": "320830629635915849",
+ "sub_session_key": "320830629635915849sub_time:1673690546"
+ }
+}
+```
+
+未开播:
+
+```json
+{
+ "cmd": "ROOM_CHANGE",
+ "data": {
+ "title": "随缘",
+ "area_id": 216,
+ "parent_area_id": 6,
+ "area_name": "我的世界",
+ "parent_area_name": "单机游戏",
+ "live_key": "0",
+ "sub_session_key": ""
+ }
+}
+```
+
+
+
+#### 直播间内容审核报告 (ROOM_CONTENT_AUDIT_REPORT)
+
+注:这个数据包需要更新直播间标题且使用主播的登录信息才会下发,更新直播间标题后一般不会立刻下发。
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `ROOM_CONTENT_AUDIT_REPORT` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| audit_content_type | num | 审核内容类型? | |
+| room\_id | num | 直播间ID | 未知是真实ID还是短号 |
+| anchor\_uid | num | 主播的用户mid | |
+| audit\_status | num | 审核状态? | |
+| audit\_title | str | 被审核的直播间标题 | |
+| audit\_reason | str | 审核结果 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "ROOM_CONTENT_AUDIT_REPORT",
+ "data": {
+ "audit_content_type": 1,
+ "room_id": 1899237171,
+ "anchor_uid": 438160221,
+ "audit_status": 2,
+ "audit_title": "崩坏学园2",
+ "audit_reason": "一审通过"
+ }
+}
+```
+
+
+
+#### 醒目留言按钮 (SUPER_CHAT_ENTRANCE)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `SUPER_CHAT_ENTRANCE` | |
+| data | obj | 醒目留言按钮的信息 | |
+| roomid | num | 直播间ID | 未知是短号还是真实ID |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | --- | ------ | --------- |
+| status | num | 待调查 | |
+| jump_url | str | 按下“醒目留言”按钮后弹出小窗的页面URL | |
+| icon | str | “醒目留言”按钮图标的URL | |
+| broadcast_type | num | 待调查 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "SUPER_CHAT_ENTRANCE",
+ "data": {
+ "status": 1,
+ "jump_url": "https://live.bilibili.com/p/html/live-app-superchat2/index.html?is_live_half_webview=1&hybrid_half_ui=1,3,100p,70p,ffffff,0,30,100;2,2,375,100p,ffffff,0,30,100;3,3,100p,70p,ffffff,0,30,100;4,2,375,100p,ffffff,0,30,100;5,3,100p,60p,ffffff,0,30,100;6,3,100p,60p,ffffff,0,30,100;7,3,100p,60p,ffffff,0,30,100",
+ "icon": "https://i0.hdslb.com/bfs/live/0a9ebd72c76e9cbede9547386dd453475d4af6fe.png",
+ "broadcast_type": 1
+ },
+ "roomid": "8618057"
+}
+```
+
+
+
+#### 顶部横幅 (WIDGET_BANNER)
+
+注: 网页端在直播间标题下面的横幅, 例如 限时任务 等
+
+**JSON消息:**
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `WIDGET_BANNER` | |
+| data | obj | 横幅信息 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| timestamp | num | 服务器发送数据包时的Unix时间戳 | |
+| widget_list | obj | 横幅信息 | 待调查 |
+
+`data.widget_list` 对象:
+
+以 横幅 ID 为键, JSON Object 为值的表
+
+`data.widget_list['?']` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| id | num | 横幅ID | |
+| title | str | 待调查 | |
+| cover | str | 待调查 | |
+| web_cover | str | 待调查 | |
+| tip_text | str | 待调查 | |
+| tip_text_color | str | 待调查 | |
+| tip_bottom_color | str | 待调查 | |
+| jump_url | str | 点击横幅后出现小窗的页面的URL | |
+| url | str | 待调查 | |
+| stay_time | num | 待调查 | |
+| site | num | 待调查 | |
+| platform_in | array | 待调查 | |
+| type | num | 待调查 | |
+| band_id | num | 待调查 | |
+| sub_key | str | 待调查 | |
+| sub_data | str | 横幅数据 | |
+| is_add | bool | 待调查 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "WIDGET_BANNER",
+ "data": {
+ "timestamp": 1673684868,
+ "widget_list": {
+ "308": {
+ "id": 308,
+ "title": "一月限时任务",
+ "cover": "",
+ "web_cover": "",
+ "tip_text": "限时任务",
+ "tip_text_color": "",
+ "tip_bottom_color": "",
+ "jump_url": "https://live.bilibili.com/activity/live-activity-battle/index.html?app_name=time_limited_task_jan_2023&is_live_half_webview=1&hybrid_rotate_d=1&hybrid_half_ui=1,3,100p,70p,0,0,0,0,12,0;2,2,375,100p,0,0,0,0,12,0;3,3,100p,70p,0,0,0,0,12,0;4,2,375,100p,0,0,0,0,12,0;5,3,100p,70p,0,0,0,0,12,0;6,3,100p,70p,0,0,0,0,12,0;7,3,100p,70p,0,0,0,0,12,0;8,3,100p,70p,0,0,0,0,12,0&room_id=8618057&uid=29857468#/",
+ "url": "",
+ "stay_time": 5,
+ "site": 1,
+ "platform_in": [
+ "live",
+ "blink",
+ "live_link",
+ "web",
+ "pc_link"
+ ],
+ "type": 1,
+ "band_id": 101558,
+ "sub_key": "",
+ "sub_data": "%7B%22task_status%22%3A0%2C%22current_val%22%3A10%2C%22target_val%22%3A1200%2C%22timeout%22%3A1673687024%2C%22reward_price%22%3A8%2C%22reward_type%22%3A1%7D",
+ "is_add": true
+ }
+ }
+ }
+}
+```
+
+
+
+#### 礼物心愿单进度 (WIDGET_WISH_LIST)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `WIDGET_WISH_LIST` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| wish | array | 礼物心愿单信息 | |
+| wish_status | num | ? | |
+| sid | num | ? | |
+| wish_status_info | array | ? | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "WIDGET_WISH_LIST",
+ "data": {
+ "wish": [
+ {
+ "type": 3,
+ "gift_id": 10003,
+ "gift_name": "舰长",
+ "gift_img": "https://i0.hdslb.com/bfs/live/f1be2a2d5b227ce72641de1ad64bcc7f9e4111c3.png",
+ "gift_price": 198000,
+ "target_num": 5,
+ "current_num": 0
+ },
+ {
+ "type": 2,
+ "gift_id": 3,
+ "gift_name": "B坷垃",
+ "gift_img": "https://s1.hdslb.com/bfs/live/cc8bfcbc24c8b65937f62ce0d16b31ab987dce47.png",
+ "gift_price": 9900,
+ "target_num": 5,
+ "current_num": 0
+ },
+ {
+ "type": 2,
+ "gift_id": 31039,
+ "gift_name": "牛哇牛哇",
+ "gift_img": "https://s1.hdslb.com/bfs/live/b8a38b4bd3be120becddfb92650786f00dffad48.png",
+ "gift_price": 100,
+ "target_num": 10,
+ "current_num": 0
+ }
+ ],
+ "wish_status": 1,
+ "sid": 477,
+ "wish_status_info": [
+ {
+ "wish_status_msg": "设定心 愿",
+ "wish_status_img": "https://i0.hdslb.com/bfs/live/38f82bac32794e79776f7371269453652bd58a87.png",
+ "wish_status": 0
+ },
+ {
+ "wish_status_msg": "达成",
+ "wish_status_img": "https://i0.hdslb.com/bfs/live/1dae635924437239fc69e561a1a9467508521249.png",
+ "wish_status": 2
+ },
+ {
+ "wish_status_msg": "收集失败",
+ "wish_status_img": "https://i0.hdslb.com/bfs/live/3bbd30fdd32d085cc90e9ccd98c65a886dca9a8f.png",
+ "wish_status": 3
+ }
+ ],
+ "wish_name": "心愿"
+ }
+}
+```
+
+
+
+#### 下播的直播间 (STOP_LIVE_ROOM_LIST)
+
+注: 估计是更新关注的主播直播状态的
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| cmd | str | `STOP_LIVE_ROOM_LIST` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | --------- |
+| room_id_list | array | 下播的直播间ID | |
+
+`data.room_id_list` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| -- | ---- | ---- | ---- |
+| 0 | num | 第 1 个下播的直播间 ID | |
+| 1 | num | 第 2 个下播的直播间 ID | |
+| …… | num | …… | |
+| n | num | 第 (n+1) 个下播的直播间 ID | |
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "STOP_LIVE_ROOM_LIST",
+ "data": {
+ "room_id_list": [
+ 14507570, 23963084, 24370437, 24380902, 24889494,
+ 22735090, 24268758, 24668544, 38325, 24762357,
+ 3222966, 6684395, 24199566, 24864470, 10224194,
+ 14953052, 6198131, 898214, 10412034, 22506883,
+ 23932516, 6768714, 24392281, 1799500, 22392518,
+ 22976729, 21557043, 24896092, 11718936, 21612704,
+ 21778117, 24145539, 23178318, 23575414, 24842462,
+ 22245210, 24895499, 3133873, 1298898, 22175308,
+ 3600684, 2053035, 270652, 24877480, 3854611,
+ 21512488, 24393104, 24756457, 4630683, 6955412,
+ 23199465, 2880481, 23868339, 717791, 24068307,
+ 24875243, 22777819, 24896061, 24619665
+ ]
+ }
+}
+```
+
+
+
+#### 系统信息 (SYS_MSG)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `SYS_MSG` | |
+| msg | str | 提示信息 | |
+| url | str | 跳转 URL | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "SYS_MSG",
+ "msg": "争夺开启,时间周五20点至周日20点,逾期不候哟!",
+ "url": ""
+}
+```
+
+
+
+#### 警告 (WARNING)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `WARNING` | |
+| msg | str | 警告信息 | |
+| roomid | num | 直播间 ID | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "WARNING",
+ "msg": "图片内容不适宜,请立即调整",
+ "roomid": 22195814
+}
+```
+
+
+
+#### 切断 (CUT_OFF)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `CUT_OFF` | |
+| msg | str | 切断原因 | |
+| roomid | num | 直播间 ID | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "CUT_OFF",
+ "msg": "违反直播言论规范,请立即调整",
+ "roomid": 23993070
+}
+```
+
+
+
+#### 切断V2 (CUT_OFF_V2)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `CUT_OFF_V2` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cut_off_scene | num | | |
+| timestamp | num | 操作时间戳 | UNIX 秒时间戳 |
+| cut_off_version | num | 切断提示信息版本? | |
+| cut_off_data | obj | 切断提示信息 | |
+
+`data.cut_off_data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cut_off_title | str | 对话框窗口标题 | |
+| cut\_off\_message\_list | array | 对话框正文列表 | |
+| cut\_off\_tip\_list | array | 对话框提示信息列表 | |
+| cut\_off\_button\_list | array | 对话框按钮列表 | |
+
+`data.cut_off_data.cut_off_message_list` 数组:
+
+| 索引 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| 0 | obj | 首个正文信息 | |
+| … | obj | 单个正文信息 | |
+| i | obj | 最后正文信息 | |
+
+`data.cut_off_data.cut_off_message_list[i]` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| type | num | 显示类别 | `1`:一个“`label`:`content`”格式的信息 |
+| label | str | 标签 | |
+| content | str | 内容 | |
+
+`data.cut_off_data.cut_off_tip_list` 数组:
+
+| 索引 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| 0 | obj | 首个提示行信息 | |
+| … | obj | 单个提示行信息 | |
+| i | obj | 最后提示行信息 | |
+
+`data.cut_off_data.cut_off_tip_list[i]` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| show\_platform | array | 要在哪个客户端显示的指代 | |
+| message_list | array | 提示信息列表 | |
+
+`data.cut_off_data.cut_off_tip_list[i].message_list` 数组:
+
+| 索引 | 类型 | 内容 | 备注 |
+|:---:| --- | --- | --- |
+| 0 | obj | 首个提示组件信息 | |
+| … | obj | 单个提示组件信息 | |
+| i1 | obj | 最后提示组件信息 | |
+
+`data.cut_off_data.cut_off_tip_list[i].message_list[i1]` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| type | num | 显示类型 | `1`:纯文本 `2`:链接 |
+| content | str | 显示文本 | |
+| link_url | str | 链接 | type为2时有内容 |
+
+`data.cut_off_data.cut_off_button_list` 数组:
+
+| 索引 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| 0 | obj | 首个按钮信息 | |
+| … | obj | 单个按钮信息 | |
+| i | obj | 最后按钮信息 | |
+
+`data.cut_off_data.cut_off_button_list[i]` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| show_platform | array | 要在那个客户端显示的指代 | `1`和`2`可能是手机直播姬 `3`和`4`可能是pc直播姬或网页直播姬 |
+| button\_text | str | 按钮文本 | |
+| button\_action | num | 按钮操作 | `1`:关闭窗口? `2`:跳转到链接? |
+| button_link_url | str | 跳转链接 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "CUT_OFF_V2",
+ "data": {
+ "cut_off_scene": 1,
+ "timestamp": 1731590280,
+ "cut_off_version": 1,
+ "cut_off_data": {
+ "cut_off_title": "违规提示",
+ "cut_off_message_list": [
+ {
+ "type": 1,
+ "label": "处罚结果",
+ "content": "切断本场直播"
+ },
+ {
+ "type": 1,
+ "label": "违规原因",
+ "content": "您本场直播存在挂机、录播等消极直播行为,因此直播被切断,请您及时整改"
+ },
+ {
+ "type": 1,
+ "label": "处罚时间",
+ "content": "2024年11月14日21时17分"
+ }
+ ],
+ "cut_off_tip_list": [
+ {
+ "show_platform": [
+ 3,
+ 4
+ ],
+ "message_list": [
+ {
+ "type": 1,
+ "content": "请在",
+ "link_url": ""
+ },
+ {
+ "type": 2,
+ "content": "【处罚中心】",
+ "link_url": "https://link.bilibili.com/p/center/index?my-room/violation-records#/my-room/violation-records"
+ },
+ {
+ "type": 1,
+ "content": "查看你的违规记录",
+ "link_url": ""
+ }
+ ]
+ }
+ ],
+ "cut_off_button_list": [
+ {
+ "show_platform": [
+ 1,
+ 2
+ ],
+ "button_text": "了解详情",
+ "button_action": 2,
+ "button_link_url": "https://live.bilibili.com/p/html/live-anchor-galaxy/violation_records/mobile.html?-Abrowser=live&is_live_webview=1"
+ },
+ {
+ "show_platform": [
+ 3,
+ 4
+ ],
+ "button_text": "我知道了",
+ "button_action": 1,
+ "button_link_url": ""
+ }
+ ]
+ }
+ }
+}
+```
+
+
+
+#### 直播对话框 (ANCHOR_ECOLOGY_LIVING_DIALOG)
+
+注:推测在自动检测到画面不怎么变化且没人聊天时警告下发,见[#1139(issue正文)](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1139#issue-2657488653)。
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `ANCHOR_ECOLOGY_LIVING_DIALOG` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| dialog\_scene | num | | |
+| timestamp | num | 触发时间戳 | UNIX 秒时间戳 |
+| valid_timestamp | num | | |
+| dialog\_top\_vertical\_img | str | | |
+| dialog\_top\_landscape_img | str | | |
+| dialog\_title | str | 对话框标题 | |
+| dialog_message_list | array | 对话框正文列表 | 参见`CUT_OFF_V2` |
+| dialog_tip_list | array | 对话框提示信息列表 | 参见`CUT_OFF_V2` |
+| dialog_button_list | array | 对话框按钮列表 | 参见`CUT_OFF_V2` |
+
+`data.dialog_message_list` 数组:
+
+同`CUT_OFF_V2`的`data.cut_off_data.cut_off_message_list`数组。
+
+`data.dialog_tip_list` 数组:
+
+同`CUT_OFF_V2`的`data.cut_off_data.cut_off_tip_list`数组。
+
+`data.dialog_button_list` 数组:
+
+同`CUT_OFF_V2`的`data.cut_off_data.cut_off_button_list`数组。
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "ANCHOR_ECOLOGY_LIVING_DIALOG",
+ "data": {
+ "dialog_scene": 1,
+ "timestamp": 1731504845,
+ "valid_timestamp": 0,
+ "dialog_top_vertical_img": "https://i0.hdslb.com/bfs/live/ee359d3e89bb044914f72a557a4ac2d3b5ba4004.png",
+ "dialog_top_landscape_img": "https://i0.hdslb.com/bfs/live/ee359d3e89bb044914f72a557a4ac2d3b5ba4004.png",
+ "dialog_title": "直播间违规",
+ "dialog_message_list": [
+ {
+ "type": 1,
+ "label": "处罚结果",
+ "content": "警告"
+ },
+ {
+ "type": 1,
+ "label": "违规原因",
+ "content": "您本场直播存在挂机、录播等消极直播行为,请及时整改"
+ },
+ {
+ "type": 1,
+ "label": "处罚时间",
+ "content": "2024年11月13日21时34分"
+ }
+ ],
+ "dialog_tip_list": [
+ {
+ "show_platform": [
+ 1,
+ 2
+ ],
+ "message_list": [
+ {
+ "type": 1,
+ "content": "请在",
+ "link_url": ""
+ },
+ {
+ "type": 2,
+ "content": "【处罚中心】",
+ "link_url": "https://live.bilibili.com/p/html/live-anchor-galaxy/violation_records/mobile.html?is_live_half_webview=1u0026hybrid_rotate_d=1u0026is_cling_player=1u0026hybrid_half_ui=1,3,100p,70p,0,1,30,100;2,2,375,100p,0,1,30,100;3,3,100p,70p,0,1,30,100;4,2,375,100p,0,1,30,100;5,3,100p,70p,0,1,30,100;6,3,100p,70p,0,1,30,100;7,3,100p,70p,0,1,30,100;8,3,100p,70p,0,1,30,100#/"
+ },
+ {
+ "type": 1,
+ "content": "查看你的违规记录",
+ "link_url": ""
+ }
+ ]
+ },
+ {
+ "show_platform": [
+ 3,
+ 4
+ ],
+ "message_list": [
+ {
+ "type": 1,
+ "content": "请在",
+ "link_url": ""
+ },
+ {
+ "type": 2,
+ "content": "【处罚中心】",
+ "link_url": "https://link.bilibili.com/#/my-room/violation-records?jump_type=browser&app_common=open"
+ },
+ {
+ "type": 1,
+ "content": "查看你的违规记录",
+ "link_url": ""
+ }
+ ]
+ }
+ ],
+ "dialog_button_list": [
+ {
+ "show_platform": [
+ 1,
+ 2,
+ 3,
+ 4
+ ],
+ "button_text": "我知道了",
+ "button_action": 1,
+ "button_link_url": ""
+ }
+ ]
+ }
+}
+```
+
+
+
+#### 直播间背景图片修改 (CHANGE_ROOM_INFO)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `CHANGE_ROOM_INFO` | |
+| background | str | 背景图 URL | |
+| roomid | num | 直播间 ID | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "CHANGE_ROOM_INFO",
+ "background": "https://i0.hdslb.com/bfs/live/2388faed3728f3396052273ad4c3c9af21c411fc.jpg",
+ "roomid": 23993070
+}
+```
+
+
+
+#### 直播间皮肤变更 (ROOM_SKIN_MSG)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `ROOM_SKIN_MSG` | |
+| skin_id | num | 皮肤 ID | |
+| status | num | 状态? | |
+| end_time | num | 皮肤结束时间? | UNIX 秒级时间戳 |
+| current_time | num | 当前时间 | UNIX 秒级时间戳 |
+| only_local | bool | 仅在本地显示? | |
+| scatter | obj | ? | |
+| skin_config | obj | 皮肤配置 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "ROOM_SKIN_MSG",
+ "skin_id": 353,
+ "status": 1,
+ "end_time": 1652620669,
+ "current_time": 1652015870,
+ "only_local": false,
+ "scatter": {
+ "min": 1,
+ "max": 200
+ },
+ "skin_config": {
+ "android": {
+ "1": {
+ "zip": "https://i0.hdslb.com/bfs/live/fab943a5d7eeb871ecf06413283d17536e67ab91.zip",
+ "md5": "011EBB3E14192212FD50852245DC74FA"
+ }
+ },
+ "ios": {
+ "1": {
+ "zip": "https://i0.hdslb.com/bfs/live/e7d8768dcb3975d82d794fe6b39756317916a7fe.zip",
+ "md5": "B1223577FE9C5C248EC1326CDACF8379"
+ }
+ },
+ "ipad": {
+ "1": {
+ "zip": "https://i0.hdslb.com/bfs/live/0856e17be073d75b70098609ae26572ba1534605.zip",
+ "md5": "481AE75FFD0E0DE91EAFB5B6E0F8936B"
+ }
+ },
+ "web": {
+ "1": {
+ "zip": "https://i0.hdslb.com/bfs/live/0b3770980e600f23629c8445fd211d4a12ec4b6f.zip",
+ "md5": "8F98F79F02DEFE8B69EE2F6DE7416DFF",
+ "platform": "web",
+ "version": "1",
+ "headInfoBgPic": "https://i0.hdslb.com/bfs/live/d293e69b70af34df0fef086a86552b1761a33a75.jpg",
+ "giftControlBgPic": "https://i0.hdslb.com/bfs/live/1a124c5547c784f41dc3d7f65f446c56c4cbb73e.jpg",
+ "rankListBgPic": "https://i0.hdslb.com/bfs/live/af8580a956d0eac6ea1d2cc97ea743d435a86874.jpg",
+ "mainText": "#FFffffff",
+ "normalText": "#FFffffff",
+ "highlightContent": "#FFffd119",
+ "border": "#FFaec2ff",
+ "buttonText": "#FF123ab2"
+ }
+ }
+ }
+}
+```
+
+
+
+#### 开启等级禁言 (ROOM_SILENT_ON)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| data | obj | 信息本体 | |
+| cmd | str | `ROOM_SILENT_ON` | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| type | str | 类型? | |
+| level | num | 等级? | |
+| second | num | 时间? | UNIX 秒级时间戳 |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "data": {
+ "type": "member",
+ "level": 1,
+ "second": 1651000426
+ },
+ "cmd": "ROOM_SILENT_ON"
+}
+```
+
+
+
+#### 关闭等级禁言 (ROOM_SILENT_OFF)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| data | obj | 信息本体 | |
+| cmd | str | `ROOM_SILENT_OFF` | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| type | str | 空 | |
+| level | num | 0 | |
+| second | num | 0 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "data": {
+ "type": "",
+ "level": 0,
+ "second": 0
+ },
+ "cmd": "ROOM_SILENT_OFF"
+}
+```
+
+
+
+#### 指定观众禁言 (ROOM_BLOCK_MSG)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `ROOM_BLOCK_MSG` | |
+| data | obj | 详细信息 | |
+| uid | num | 禁言用户 mid | |
+| uname | str | 禁言用户名 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| dmscore | num | 弹幕分数? | |
+| operator | num | 操作者? | |
+| uid | num | 禁言用户 mid | |
+| uname | str | 禁言用户名 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "ROOM_BLOCK_MSG",
+ "data": {
+ "dmscore": 30,
+ "operator": 2,
+ "uid": 37903025,
+ "uname": "玉麟珑"
+ },
+ "uid": "37903025",
+ "uname": "玉麟珑"
+}
+```
+
+
+
+#### 房管列表 (ROOM_ADMINS)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `ROOM_ADMINS` | |
+| uids | array | 房管 mid 列表 | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ cmd: "ROOM_ADMINS",
+ uids: [ 898424, 384203692, 1309513, 30816752, 23931549, 223134 ]
+}
+```
+
+
+
+#### 设立房管 (room_admin_entrance)
+
+注: 此处 cmd 内容为小写
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `room_admin_entrance` | |
+| dmscore | num | 弹幕分数? | |
+| level | num | 等级? | |
+| msg | str | 提示信息 | |
+| uid | num | 用户 mid | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "room_admin_entrance",
+ "dmscore": 45,
+ "level": 1,
+ "msg": "系统提示:你已被主播设为房管",
+ "uid": 223134
+}
+```
+
+
+
+#### 撤销房管 (ROOM_ADMIN_REVOKE)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `ROOM_ADMIN_REVOKE` | |
+| msg | str | 提示信息 | |
+| uid | num | 用户 mid | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "ROOM_ADMIN_REVOKE",
+ "msg": "撤销房管",
+ "uid": 6791627
+}
+```
+
+
+
+#### 天选时刻合法检查 (ANCHOR_LOT_CHECKSTATUS)
+
+**示例:**
+
+
+查看响应示例:
+
+```json
+{
+ "cmd": "ANCHOR_LOT_CHECKSTATUS",
+ "data": {
+ "id": 2553641,
+ "reject_reason": "由于奖品格式不合格,请仔细检查后再提交哦",
+ "status": 5,
+ "uid": 1827176970
+ }
+}
+```
+
+
+
+#### 天选时刻开始 (ANCHOR_LOT_START)
+
+**示例:**
+
+
+查看响应示例:
+
+```json
+{
+ "cmd": "ANCHOR_LOT_START",
+ "data": {
+ "asset_icon": "https://i0.hdslb.com/bfs/live/627ee2d9e71c682810e7dc4400d5ae2713442c02.png",
+ "award_image": "",
+ "award_name": "艺术头像绘制",
+ "award_num": 1,
+ "cur_gift_num": 0,
+ "current_time": 1651037946,
+ "danmu": "卡宝下午好",
+ "gift_id": 3,
+ "gift_name": "B坷垃",
+ "gift_num": 1,
+ "gift_price": 9900,
+ "goaway_time": 180,
+ "goods_id": 15,
+ "id": 2553648,
+ "is_broadcast": 1,
+ "join_type": 1,
+ "lot_status": 0,
+ "max_time": 600,
+ "require_text": "当前主播粉丝勋章至少1级",
+ "require_type": 2,
+ "require_value": 1,
+ "room_id": 23614753,
+ "send_gift_ensure": 0,
+ "show_panel": 1,
+ "start_dont_popup": 0,
+ "status": 1,
+ "time": 599,
+ "url": "https://live.bilibili.com/p/html/live-lottery/anchor-join.html?is_live_half_webview=1&hybrid_biz=live-lottery-anchor&hybrid_half_ui=1,5,100p,100p,000000,0,30,0,0,1;2,5,100p,100p,000000,0,30,0,0,1;3,5,100p,100p,000000,0,30,0,0,1;4,5,100p,100p,000000,0,30,0,0,1;5,5,100p,100p,000000,0,30,0,0,1;6,5,100p,100p,000000,0,30,0,0,1;7,5,100p,100p,000000,0,30,0,0,1;8,5,100p,100p,000000,0,30,0,0,1",
+ "web_url": "https://live.bilibili.com/p/html/live-lottery/anchor-join.html"
+ }
+}
+```
+
+
+
+#### 天选时刻结束 (ANCHOR_LOT_END)
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "ANCHOR_LOT_END",
+ "data": {
+ "id": 2553648
+ }
+}
+```
+
+
+
+#### 天选时刻中奖者 (ANCHOR_LOT_AWARD)
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "ANCHOR_LOT_AWARD",
+ "data": {
+ "award_dont_popup": 1,
+ "award_image": "",
+ "award_name": "艺术头像绘制",
+ "award_num": 1,
+ "award_users": [
+ {
+ "uid": 8318700,
+ "uname": "桥下念喬",
+ "face": "http://i0.hdslb.com/bfs/face/dfde2ffc6286c2c5189592cc84fd70bcf977b143.jpg",
+ "level": 21,
+ "color": 5805790
+ }
+ ],
+ "id": 2553648,
+ "lot_status": 2,
+ "url": "https://live.bilibili.com/p/html/live-lottery/anchor-join.html?is_live_half_webview=1&hybrid_biz=live-lottery-anchor&hybrid_half_ui=1,5,100p,100p,000000,0,30,0,0,1;2,5,100p,100p,000000,0,30,0,0,1;3,5,100p,100p,000000,0,30,0,0,1;4,5,100p,100p,000000,0,30,0,0,1;5,5,100p,100p,000000,0,30,0,0,1;6,5,100p,100p,000000,0,30,0,0,1;7,5,100p,100p,000000,0,30,0,0,1;8,5,100p,100p,000000,0,30,0,0,1",
+ "web_url": "https://live.bilibili.com/p/html/live-lottery/anchor-join.html"
+ }
+}
+```
+
+
+
+#### 天选时刻通知 (ANCHOR_LOT_NOTICE)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `ANCHOR_LOT_NOTICE` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| notice\_type | num | 通知卡片类型? | |
+| lottery\_card | obj | 通知卡片内容 | |
+
+`data.lottery_card` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| show\_time | num | 显示时间? | |
+| button\_text | str | 按钮文本? | |
+| icon | str | 图标 | |
+| title | str | 标题? | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "data": {
+ "notice_type": 1,
+ "lottery_card": {
+ "show_time": 30,
+ "button_text": "去发奖",
+ "icon": "https://i0.hdslb.com/bfs/live/95970204111233f181fc28622502aaf1a9359b9a.png",
+ "title": "发天选有助于人气累积"
+ }
+ },
+ "cmd": "ANCHOR_LOT_NOTICE"
+}
+```
+
+
+
+#### 邀请视频连线 (VIDEO_CONNECTION_JOIN_START)
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "VIDEO_CONNECTION_JOIN_START",
+ "data": {
+ "status": 1,
+ "invited_uid": 351686170,
+ "channel_id": "72057594038132685",
+ "invited_uname": "小妹睡不醒",
+ "invited_face": "http://i1.hdslb.com/bfs/face/828562203e620f711fb4c786f05996357857ed4d.jpg",
+ "start_at": 1651237440,
+ "current_time": 1651237440
+ },
+ "roomid": 12401854
+}
+```
+
+
+
+#### 视频连线信息 (VIDEO_CONNECTION_MSG)
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "VIDEO_CONNECTION_MSG",
+ "data": {
+ "channel_id": "72057594038132685",
+ "current_time": 1651237440,
+ "dmscore": 4,
+ "toast": "主播发起了视频连线"
+ }
+}
+```
+
+
+
+#### 结束视频连线 (VIDEO_CONNECTION_JOIN_END)
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "VIDEO_CONNECTION_JOIN_END",
+ "data": {
+ "channel_id": "72057594038132685",
+ "start_at": 1651238384,
+ "toast": "主播 结束了与小妹睡不醒的连线.",
+ "current_time": 1651238384
+ },
+ "roomid": 22195814
+}
+```
+
+
+
+#### 重连直播间? (REENTER_LIVE_ROOM)
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "REENTER_LIVE_ROOM",
+ "data": {
+ "room_id": 22195814,
+ "request_random_sec_range": 10,
+ "reason": 1
+ },
+ "roomid": 22195814
+}
+```
+
+
+
+#### ??? (PLAY_TOGETHER)
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "PLAY_TOGETHER",
+ "data": {
+ "ruid": 29857468,
+ "roomid": 8618057,
+ "action": "switch_off",
+ "uid": 0,
+ "timestamp": 1673690546,
+ "message": "",
+ "message_type": 0,
+ "jump_url": "",
+ "web_url": "",
+ "apply_number": 0,
+ "refresh_tool": false,
+ "cur_fleet_num": 0,
+ "max_fleet_num": 0
+ }
+}
+```
+
+```json
+{
+ "cmd": "PLAY_TOGETHER",
+ "data": {
+ "ruid": 29857468,
+ "roomid": 8618057,
+ "action": "switch_off",
+ "uid": 0,
+ "timestamp": 1673690549,
+ "message": "系统提示:主播已切换分区",
+ "message_type": 3,
+ "jump_url": "",
+ "web_url": "",
+ "apply_number": 0,
+ "refresh_tool": true,
+ "cur_fleet_num": 0,
+ "max_fleet_num": 0
+ }
+}
+```
+
+
+
+#### 直播小助手? (ANCHOR_BROADCAST)
+
+第一次达到了某种条件下发。
+
+已知当在一个分区(中途不能切换)开播时长达到150、180、200、300分钟可能下发,直播间初次被分享1~2次时下发。
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `ANCHOR_BROADCAST` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| sender | str | 标题? | `直播小助手` |
+| msg | str | 提示消息 | |
+| platform | num | 平台标识? | `0` |
+| button\_info | obj | 按钮信息? | |
+| milestone\_type | str | 里程碑类型? | `session_livetime`,`first_share`,`session_share` |
+| milestone\_value | num | 里程值? | |
+| milestone\_index | num | 里程碑类型的索引? | `1`,`5`,`6`,`7` |
+
+`data.button_info` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| button\_name | str | | |
+| blink_button_type | str | | |
+| blink_button_target | str | | |
+| blink_button_extra | str | | |
+| blink_button_label | num | | |
+| hime_button_type | str | | |
+| hime_button_target | str | | |
+| hime_button_extra | str | | |
+| hime\_button\_h5\_type | str | | |
+| hime_button_label | num | | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "ANCHOR_BROADCAST",
+ "data": {
+ "sender": "直播小助手",
+ "msg": "恭喜你,开播时长达到180分钟!",
+ "platform": 0,
+ "button_info": {
+ "button_name": "",
+ "blink_button_type": "",
+ "blink_button_target": "",
+ "blink_button_extra": "",
+ "blink_button_label": 0,
+ "hime_button_type": "",
+ "hime_button_target": "",
+ "hime_button_extra": "",
+ "hime_button_h5_type": "",
+ "hime_button_label": 0
+ },
+ "milestone_type": "session_livetime",
+ "milestone_value": 10800,
+ "milestone_index": 6
+ }
+}
+```
+
+
+
+#### 直播小助手? (ANCHOR_HELPER_DANMU)
+
+几乎与`ANCHOR_BROADCAST`一同下发。
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `ANCHOR_HELPER_DANMU` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| sender | str | 标题? | `直播小助手` |
+| msg | str | 提示消息 | |
+| platform | num | 平台标识? | |
+| button\_platform | num | | |
+| button\_name | str | | |
+| button\_target | str | | |
+| button\_label | num | | |
+| report\_type | str | 上报类型? | |
+| report | str | | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "ANCHOR_HELPER_DANMU",
+ "data": {
+ "sender": "直播小助手",
+ "msg": "恭喜你,开播时长达到150分钟!",
+ "platform": 3,
+ "button_platform": 0,
+ "button_name": "",
+ "button_target": "",
+ "button_label": 0,
+ "report_type": "milestone",
+ "report": "session_livetime:5:9000"
+ }
+}
+```
+
+
+
+#### 直播进度条节点标签 (PLAY_TAG)
+
+注: 在特定直播间的特定情况下发。
+
+例如: 在[直播间6](https://live.bilibili.com/6)内,有人打出了某种操作。
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `PLAY_TAG` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| tag\_id | num | 标签 ID | |
+| pic | str | 标签图标 | 通常显示于进度条之上 |
+| timestamp | num | UNIX 秒时间戳 | |
+| type | str | 操作类型 | `ADD`:添加 |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "PLAY_TAG",
+ "data": {
+ "tag_id": 367751,
+ "pic": "https://i0.hdslb.com/bfs/live/0e04525fee9ea6ea6973e8bd1116d9f1f6501d37.png",
+ "timestamp": 1740319807,
+ "type": "ADD"
+ }
+}
+```
+
+
+
+#### ??? (RECALL_DANMU_MSG)
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `RECALL_DANMU_MSG` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| recall_type | num | 类型? | `2` |
+| target_id | num | | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "RECALL_DANMU_MSG",
+ "data": {
+ "recall_type": 2,
+ "target_id": 525503743
+ }
+}
+```
+
+
+
+#### 直播剪辑 (OTHER_SLICE_LOADING_RESULT)
+
+注: 点击剪辑按钮后的几秒内下发,目前只有网页端有这个按钮,且部分直播间可用(2025-02-20记录)。
+
+**JSON消息:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| cmd | str | `OTHER_SLICE_LOADING_RESULT` | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| data | array | 剪辑片段数据 | |
+| live_key | str | 标记直播场次的key | 未验证真实性 |
+
+`data.data` 数组:
+
+| 索引 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| 0 | obj | 单个片段数据 | |
+
+`data.data[i]` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| start\_time | num | 片段开始时间时间戳 | UNIX 秒时间戳 |
+| end\_time | num | 片段结束时间时间戳 | UNIX 秒时间戳 |
+| stream | str | 从开始时间到结束时间内的直播视频片段 | 需要使用浏览器用户代理字符串,特别是m3u文件内的视频链接 |
+| type | num | 类型? | |
+| ban\_ec | bool | ? | |
+
+**示例:**
+
+
+查看消息示例:
+
+```json
+{
+ "cmd": "OTHER_SLICE_LOADING_RESULT",
+ "data": {
+ "data": [
+ {
+ "start_time": 1740037738,
+ "end_time": 1740038916,
+ "stream": "https://jssz-boss.hdslb.com/live2arc_anchor_video/vod_579433011406177273.m3u?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=y4zI4XTQzlOkmSKg%2F20250220%2Fjssz%2Fs3%2Faws4_request&X-Amz-Date=20250220T080858Z&X-Amz-Expires=7200&X-Amz-SignedHeaders=host&X-Amz-Signature=52be315e8e7def8e11f86d3c6d4952362725c3c087a433780926bc0e8c88c2e1",
+ "type": 0,
+ "ban_ec": false
+ }
+ ],
+ "live_key": "579433011406177273"
+ }
+}
+```
+
+
diff --git a/docs/live/recommend.md b/docs/live/recommend.md
new file mode 100644
index 0000000..edbf016
--- /dev/null
+++ b/docs/live/recommend.md
@@ -0,0 +1,717 @@
+# 直播推荐
+
+## 主页获取直播推荐
+
+> https://api.live.bilibili.com/xlive/web-interface/v1/webMain/getMoreRecList
+
+*请求方法: GET*
+
+**URL 参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------ | ------ | ---------- | ------ | ---- |
+| platform | string | 平台类型 | 必要 | 默认为 `web`, 实测可为任意非空串 |
+| web_location | string | `333.1007` | 非必要 | |
+
+**JSON 回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------ | -------- | ---- |
+| code | number | 返回值 | 0: 成功 |
+| message | string | 错误信息 | 默认为 `0` |
+| ttl | number | 1 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------- | ------ | ------------- | -------- |
+| recommend_room_list | Array | 推荐房间列表 | 套了个娃 |
+| top_room_id | number | 置顶直播间号? | |
+
+`data` 对象中 `recommend_room_list` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------------- | -------------- | ---------------- | ---- |
+| head_box | object \| null | 头像框 | 无则为 `null` |
+| area_v2_id | number | 分区 ID | |
+| area_v2_parent_id | number | 父分区 ID | |
+| area_v2_name | string | 分区名称 | |
+| area_v2_parent_name | string | 父分区名称 | |
+| broadcast_type | number | 广播类型? | |
+| cover | string | 封面 URL | |
+| link | string | 直播间链接 | 仅 `pathname` 与 `query` 部分 |
+| online | number | 观看人数 | |
+| pendant_Info | object | ??? | 作用尚不明确 |
+| roomid | number | 直播间 ID | |
+| title | string | 直播间标题 | |
+| uname | string | 主播用户名 | |
+| face | string | 主播头像 URL | |
+| verify | object | 认证信息 | 参见 [用户基本信息](../user/info.md) |
+| uid | number | 主播用户 mid | |
+| keyframe | string | 关键帧 URL | |
+| is_auto_play | number | 是否自动播放? | |
+| head_box_type | number | 头像框类型? | |
+| flag | number | 标记? | 作用尚不明确 |
+| session_id | string | 会话 ID? | 格式为: 本次请求相同的小写无分隔 UUID + 下划线 + 大写以连字符分隔的 UUID |
+| show_callback | string | 展示回调 URL? | |
+| click_callback | string | 点击回调 URL? | |
+| special_id | number | 特殊 ID? | 作用尚不明确 |
+| watched_show | object | 观看展示 | 见下 |
+| is_nft | number | 是否为 NFT 头像? | |
+| nft_dmark | string | ??? | 作用尚不明确 |
+| is_ad | boolean | 是否为广告 | |
+| ad_transparent_content | unknown | ??? | 作用尚不明确 |
+| show_ad_icon | boolean | 显示广告图标 | |
+| status | boolean | 状态? | 作用尚不明确 |
+| followers | number | 0 | 作用尚不明确 |
+
+`recommend_room_list` 数组中的对象中的 `watched_show` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ------- | -------- | ---- |
+| switch | boolean | ??? | 作用尚不明确 |
+| num | number | 看过人数 | |
+| text_small | string | 小文本 | xxx |
+| text_large | string | 大文本 | xxx人看过 |
+| icon | string | 图标 URL | 浅色线条眼睛图标 |
+| icon_location | number | 0 | |
+| icon_web | string | 图标 URL | 深色线条眼睛图标 (Web 端) |
+
+**示例:**
+
+```shell
+curl -G 'https://api.live.bilibili.com/xlive/web-interface/v1/webMain/getMoreRecList' \
+--url-query 'platform=web'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "recommend_room_list": [
+ {
+ "head_box": null,
+ "area_v2_id": 237,
+ "area_v2_parent_id": 6,
+ "area_v2_name": "怀旧游戏",
+ "area_v2_parent_name": "单机游戏",
+ "broadcast_type": 0,
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/34aedc9409c0abaf622fdb9c6137896b8a9f95d0.jpg",
+ "link": "/923833?hotRank=0",
+ "online": 262700,
+ "pendant_Info": {},
+ "roomid": 923833,
+ "title": "融合版斗蛐蛐s3.5赛季!",
+ "uname": "沉默寡言白河愁",
+ "face": "https://i0.hdslb.com/bfs/face/14169798ca31108e4441e790c14b24706def67a3.jpg",
+ "verify": {
+ "role": 1,
+ "desc": "bilibili 知名游戏UP主、直播高能主播",
+ "type": 0
+ },
+ "uid": 34646754,
+ "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe02071535000000923833okbn8y.jpg",
+ "is_auto_play": 1,
+ "head_box_type": 0,
+ "flag": 0,
+ "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_9A44BEBD-CAEB-46AD-8FD7-B91BA8471EAA",
+ "group_id": 1000217,
+ "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_9A44BEBD-CAEB-46AD-8FD7-B91BA8471EAA&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=923833&parent_id=6&area_id=237&page=0&position=1&platform=web",
+ "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_9A44BEBD-CAEB-46AD-8FD7-B91BA8471EAA&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=923833&parent_id=6&area_id=237&page=0&position=1&platform=web",
+ "special_id": 0,
+ "watched_show": {
+ "switch": true,
+ "num": 30460,
+ "text_small": "3.0万",
+ "text_large": "3.0万人看过",
+ "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "icon_location": 0,
+ "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png"
+ },
+ "is_nft": 0,
+ "nft_dmark": "",
+ "is_ad": false,
+ "ad_transparent_content": null,
+ "show_ad_icon": false,
+ "status": false,
+ "followers": 0
+ },
+ {
+ "head_box": {
+ "name": "大乱斗乱斗之王",
+ "value": "https://i0.hdslb.com/bfs/live/fc28a2a4123154012e0ce3da1273de5f17e81b24.png",
+ "desc": ""
+ },
+ "area_v2_id": 817,
+ "area_v2_parent_id": 5,
+ "area_v2_name": "男声电台",
+ "area_v2_parent_name": "电台",
+ "broadcast_type": 0,
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/b15e3a1045321a7ffa7da08a47a276ca37557ef1.jpg",
+ "link": "/32190922?hotRank=0",
+ "online": 45487,
+ "pendant_Info": {
+ "2": {
+ "type": "mobile_index_badge",
+ "name": "福佑嘉年",
+ "position": 2,
+ "text": "省级亚军",
+ "bg_color": "#FB9E60",
+ "bg_pic": "http://i0.hdslb.com/bfs/live/13819a59895263cb25cc2ead3fecfaa3e864aac8.png",
+ "pendant_id": 1750,
+ "priority": 200,
+ "created_at": 1738512313
+ }
+ },
+ "roomid": 32190922,
+ "title": "我想我们会幸福美满",
+ "uname": "黑羊Klein",
+ "face": "https://i2.hdslb.com/bfs/face/307c62a8b30a6dcfc02e9670e5dc10d0ecec6921.jpg",
+ "verify": {
+ "role": 0,
+ "desc": "",
+ "type": -1
+ },
+ "uid": 1989648419,
+ "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe02071536000032190922ma6cnx.jpg",
+ "is_auto_play": 0,
+ "head_box_type": 1,
+ "flag": 0,
+ "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_178A3B8F-86C1-4831-9DBB-9788C2445752",
+ "group_id": 1000217,
+ "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_178A3B8F-86C1-4831-9DBB-9788C2445752&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=32190922&parent_id=5&area_id=817&page=0&position=2&platform=web",
+ "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_178A3B8F-86C1-4831-9DBB-9788C2445752&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=32190922&parent_id=5&area_id=817&page=0&position=2&platform=web",
+ "special_id": 0,
+ "watched_show": {
+ "switch": true,
+ "num": 491,
+ "text_small": "491",
+ "text_large": "491人看过",
+ "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "icon_location": 0,
+ "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png"
+ },
+ "is_nft": 0,
+ "nft_dmark": "",
+ "is_ad": false,
+ "ad_transparent_content": null,
+ "show_ad_icon": false,
+ "status": false,
+ "followers": 0
+ },
+ {
+ "head_box": null,
+ "area_v2_id": 654,
+ "area_v2_parent_id": 2,
+ "area_v2_name": "诛仙世界",
+ "area_v2_parent_name": "网游",
+ "broadcast_type": 0,
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/fdad2cfb408510df56a01af66254f630ee4b86b8.jpg",
+ "link": "/25959685?hotRank=0",
+ "online": 2151,
+ "pendant_Info": {},
+ "roomid": 25959685,
+ "title": "免费接所有职业,死灵渊!只要收益",
+ "uname": "哦-是大一啊",
+ "face": "https://i1.hdslb.com/bfs/face/f83290ab5667f9c1ed778fb9c7c9cf6bf7624d4e.jpg",
+ "verify": {
+ "role": 0,
+ "desc": "",
+ "type": -1
+ },
+ "uid": 361517464,
+ "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe02071535000025959685tx1grb.jpg",
+ "is_auto_play": 1,
+ "head_box_type": 0,
+ "flag": 0,
+ "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_FB0DABE2-6A09-4EB7-8D2B-A4F892243A96",
+ "group_id": 1000217,
+ "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_FB0DABE2-6A09-4EB7-8D2B-A4F892243A96&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=25959685&parent_id=2&area_id=654&page=0&position=3&platform=web",
+ "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_FB0DABE2-6A09-4EB7-8D2B-A4F892243A96&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=25959685&parent_id=2&area_id=654&page=0&position=3&platform=web",
+ "special_id": 0,
+ "watched_show": {
+ "switch": true,
+ "num": 269,
+ "text_small": "269",
+ "text_large": "269人看过",
+ "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "icon_location": 0,
+ "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png"
+ },
+ "is_nft": 0,
+ "nft_dmark": "",
+ "is_ad": false,
+ "ad_transparent_content": null,
+ "show_ad_icon": false,
+ "status": false,
+ "followers": 0
+ },
+ {
+ "head_box": {
+ "name": "钻石传说",
+ "value": "https://i0.hdslb.com/bfs/live/2007dc239982e909a3c9971c27968e5c0a872917.png",
+ "desc": ""
+ },
+ "area_v2_id": 192,
+ "area_v2_parent_id": 5,
+ "area_v2_name": "聊天电台",
+ "area_v2_parent_name": "电台",
+ "broadcast_type": 0,
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/22f1fcac8d9764901005ae5867a8c6b589b93ac5.jpg",
+ "link": "/31169918?hotRank=0",
+ "online": 27764,
+ "pendant_Info": {},
+ "roomid": 31169918,
+ "title": "东北最后的温柔",
+ "uname": "关关-苏苏冠",
+ "face": "https://i2.hdslb.com/bfs/face/14f5102417107a6535c11ec9ad99050f7d712a17.jpg",
+ "verify": {
+ "role": 0,
+ "desc": "",
+ "type": -1
+ },
+ "uid": 3537120278874479,
+ "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe02071532000031169918qep44l.jpg",
+ "is_auto_play": 0,
+ "head_box_type": 1,
+ "flag": 0,
+ "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_3E272538-AA76-4953-BF21-5BB19ECFEE28",
+ "group_id": 1000217,
+ "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_3E272538-AA76-4953-BF21-5BB19ECFEE28&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=31169918&parent_id=5&area_id=192&page=0&position=4&platform=web",
+ "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_3E272538-AA76-4953-BF21-5BB19ECFEE28&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=31169918&parent_id=5&area_id=192&page=0&position=4&platform=web",
+ "special_id": 0,
+ "watched_show": {
+ "switch": true,
+ "num": 297,
+ "text_small": "297",
+ "text_large": "297人看过",
+ "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "icon_location": 0,
+ "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png"
+ },
+ "is_nft": 0,
+ "nft_dmark": "",
+ "is_ad": false,
+ "ad_transparent_content": null,
+ "show_ad_icon": false,
+ "status": false,
+ "followers": 0
+ },
+ {
+ "head_box": null,
+ "area_v2_id": 82,
+ "area_v2_parent_id": 2,
+ "area_v2_name": "剑网3",
+ "area_v2_parent_name": "网游",
+ "broadcast_type": 0,
+ "cover": "https://i0.hdslb.com/bfs/live/user_cover/9551fbb571b35bac3702c47e955177f17cab5cd2.jpg",
+ "link": "/2849730?hotRank=0",
+ "online": 4008,
+ "pendant_Info": {},
+ "roomid": 2849730,
+ "title": "午间陪伴花间刷币",
+ "uname": "o诡墨o",
+ "face": "https://i1.hdslb.com/bfs/face/43ab308f836eb352aa4d541b55aafab2fa4435aa.jpg",
+ "verify": {
+ "role": 0,
+ "desc": "",
+ "type": -1
+ },
+ "uid": 71574442,
+ "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe02071535000002849730qo0792.jpg",
+ "is_auto_play": 1,
+ "head_box_type": 0,
+ "flag": 0,
+ "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_4BAFD91A-DDED-4655-BE47-064A6152BF9B",
+ "group_id": 1000217,
+ "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_4BAFD91A-DDED-4655-BE47-064A6152BF9B&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=2849730&parent_id=2&area_id=82&page=0&position=5&platform=web",
+ "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_4BAFD91A-DDED-4655-BE47-064A6152BF9B&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=2849730&parent_id=2&area_id=82&page=0&position=5&platform=web",
+ "special_id": 0,
+ "watched_show": {
+ "switch": true,
+ "num": 204,
+ "text_small": "204",
+ "text_large": "204人看过",
+ "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "icon_location": 0,
+ "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png"
+ },
+ "is_nft": 0,
+ "nft_dmark": "",
+ "is_ad": false,
+ "ad_transparent_content": null,
+ "show_ad_icon": false,
+ "status": false,
+ "followers": 0
+ },
+ {
+ "head_box": {
+ "name": "迷梦幻境头像框",
+ "value": "https://i0.hdslb.com/bfs/garb/open/d272c8cdb2ab737f5aa3c1cf5a27db274e0ce034.png",
+ "desc": ""
+ },
+ "area_v2_id": 744,
+ "area_v2_parent_id": 9,
+ "area_v2_name": "虚拟Singer",
+ "area_v2_parent_name": "虚拟主播",
+ "broadcast_type": 0,
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/6e68e5c4f3d720e6f14952174be848383b879dad.jpg",
+ "link": "/21603945?hotRank=0",
+ "online": 10606,
+ "pendant_Info": {},
+ "roomid": 21603945,
+ "title": "听歌碎碎念!~",
+ "uname": "Minicatty",
+ "face": "https://i0.hdslb.com/bfs/face/812d9ea6f3420d5c58ff455408275563f03fb861.jpg",
+ "verify": {
+ "role": 7,
+ "desc": "bilibili 直播高能主播",
+ "type": 0
+ },
+ "uid": 423902976,
+ "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe02071535000021603945pekr70.jpg",
+ "is_auto_play": 0,
+ "head_box_type": 2,
+ "flag": 0,
+ "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_56778C3F-4B14-4C78-8DF8-53721196E8D8",
+ "group_id": 1000217,
+ "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_56778C3F-4B14-4C78-8DF8-53721196E8D8&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=21603945&parent_id=9&area_id=744&page=0&position=6&platform=web",
+ "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_56778C3F-4B14-4C78-8DF8-53721196E8D8&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=21603945&parent_id=9&area_id=744&page=0&position=6&platform=web",
+ "special_id": 0,
+ "watched_show": {
+ "switch": true,
+ "num": 235,
+ "text_small": "235",
+ "text_large": "235人看过",
+ "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "icon_location": 0,
+ "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png"
+ },
+ "is_nft": 0,
+ "nft_dmark": "",
+ "is_ad": false,
+ "ad_transparent_content": null,
+ "show_ad_icon": false,
+ "status": false,
+ "followers": 0
+ },
+ {
+ "head_box": null,
+ "area_v2_id": 80,
+ "area_v2_parent_id": 2,
+ "area_v2_name": "吃鸡行动",
+ "area_v2_parent_name": "网游",
+ "broadcast_type": 0,
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/fa7292a8741a40a612a1c466da58b7f9cc08f363.jpg",
+ "link": "/22976905?hotRank=0",
+ "online": 8536,
+ "pendant_Info": {},
+ "roomid": 22976905,
+ "title": "全是细节!",
+ "uname": "菠萝鸽",
+ "face": "https://i1.hdslb.com/bfs/face/f073d24cbb992b4589825896de3fb9bc559ba180.jpg",
+ "verify": {
+ "role": 1,
+ "desc": "bilibili 知名游戏UP主、直播高能主播",
+ "type": 0
+ },
+ "uid": 1849164526,
+ "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe020715350000229769056wy0mu.jpg",
+ "is_auto_play": 1,
+ "head_box_type": 0,
+ "flag": 0,
+ "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_CE3B32EC-E84D-4545-A693-97882454E0ED",
+ "group_id": 1000217,
+ "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_CE3B32EC-E84D-4545-A693-97882454E0ED&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=22976905&parent_id=2&area_id=80&page=0&position=7&platform=web",
+ "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_CE3B32EC-E84D-4545-A693-97882454E0ED&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=22976905&parent_id=2&area_id=80&page=0&position=7&platform=web",
+ "special_id": 0,
+ "watched_show": {
+ "switch": true,
+ "num": 919,
+ "text_small": "919",
+ "text_large": "919人看过",
+ "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "icon_location": 0,
+ "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png"
+ },
+ "is_nft": 0,
+ "nft_dmark": "",
+ "is_ad": false,
+ "ad_transparent_content": null,
+ "show_ad_icon": false,
+ "status": false,
+ "followers": 0
+ },
+ {
+ "head_box": null,
+ "area_v2_id": 646,
+ "area_v2_parent_id": 10,
+ "area_v2_name": "生活杂谈",
+ "area_v2_parent_name": "生活",
+ "broadcast_type": 0,
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/833e4d5449bcb4e425eb6399e0ef71f06903d083.jpg",
+ "link": "/21291747?hotRank=0",
+ "online": 38125,
+ "pendant_Info": {},
+ "roomid": 21291747,
+ "title": "哪吒抢了封神票房?",
+ "uname": "陈哥惜命天涯",
+ "face": "https://i1.hdslb.com/bfs/face/d2c7e9c9b918ec969b2e15a5f2194bae3acd966e.jpg",
+ "verify": {
+ "role": 0,
+ "desc": "",
+ "type": -1
+ },
+ "uid": 286563388,
+ "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe0207153000002129174742tpke.jpg",
+ "is_auto_play": 0,
+ "head_box_type": 0,
+ "flag": 0,
+ "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_63BEC7F6-172E-46FC-BBAD-8CD3547AE6C1",
+ "group_id": 1000217,
+ "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_63BEC7F6-172E-46FC-BBAD-8CD3547AE6C1&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=21291747&parent_id=10&area_id=646&page=0&position=8&platform=web",
+ "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_63BEC7F6-172E-46FC-BBAD-8CD3547AE6C1&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=21291747&parent_id=10&area_id=646&page=0&position=8&platform=web",
+ "special_id": 0,
+ "watched_show": {
+ "switch": true,
+ "num": 3107,
+ "text_small": "3107",
+ "text_large": "3107人看过",
+ "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "icon_location": 0,
+ "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png"
+ },
+ "is_nft": 0,
+ "nft_dmark": "",
+ "is_ad": false,
+ "ad_transparent_content": null,
+ "show_ad_icon": false,
+ "status": false,
+ "followers": 0
+ },
+ {
+ "head_box": {
+ "name": "Lirin兔耳娘 收藏集",
+ "value": "https://i2.hdslb.com/bfs/garb/open/41e2a2e3693f49e0b721c443fd784aa533456c49.png",
+ "desc": ""
+ },
+ "area_v2_id": 745,
+ "area_v2_parent_id": 9,
+ "area_v2_name": "虚拟Gamer",
+ "area_v2_parent_name": "虚拟主播",
+ "broadcast_type": 0,
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/b444bc87fbe1b346184f061efaffff21b24371f1.jpg",
+ "link": "/23797026?hotRank=0",
+ "online": 13294,
+ "pendant_Info": {},
+ "roomid": 23797026,
+ "title": "日v 萌新玩玩三角洲♡",
+ "uname": "樱咲奈央_Official",
+ "face": "https://i2.hdslb.com/bfs/face/163330968a4a5fc8f31e9da9e919bbc258ecf40c.jpg",
+ "verify": {
+ "role": 7,
+ "desc": "bilibili直播高能主播",
+ "type": 0
+ },
+ "uid": 1880188304,
+ "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe020715310000237970260gnmn1.jpg",
+ "is_auto_play": 0,
+ "head_box_type": 2,
+ "flag": 0,
+ "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_691E1F11-4960-4707-92EF-0F0D996E434C",
+ "group_id": 1000217,
+ "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_691E1F11-4960-4707-92EF-0F0D996E434C&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=23797026&parent_id=9&area_id=745&page=0&position=9&platform=web",
+ "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_691E1F11-4960-4707-92EF-0F0D996E434C&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=23797026&parent_id=9&area_id=745&page=0&position=9&platform=web",
+ "special_id": 0,
+ "watched_show": {
+ "switch": true,
+ "num": 999,
+ "text_small": "999",
+ "text_large": "999人看过",
+ "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "icon_location": 0,
+ "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png"
+ },
+ "is_nft": 0,
+ "nft_dmark": "",
+ "is_ad": false,
+ "ad_transparent_content": null,
+ "show_ad_icon": false,
+ "status": false,
+ "followers": 0
+ },
+ {
+ "head_box": null,
+ "area_v2_id": 624,
+ "area_v2_parent_id": 10,
+ "area_v2_name": "电子榨菜",
+ "area_v2_parent_name": "生活",
+ "broadcast_type": 0,
+ "cover": "https://i0.hdslb.com/bfs/live/user_cover/a8a7681eaf20e43e16444e502106a436eb0e454c.jpg",
+ "link": "/1831473323?hotRank=0",
+ "online": 6510,
+ "pendant_Info": {},
+ "roomid": 1831473323,
+ "title": "粤语片-法证1",
+ "uname": "曦曦每天都开心呀",
+ "face": "https://i1.hdslb.com/bfs/face/aa2112252080ec2298ea51b129c842fea7ed58f5.jpg",
+ "verify": {
+ "role": 0,
+ "desc": "",
+ "type": -1
+ },
+ "uid": 1434707683,
+ "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe020715350018314733230k1dhu.jpg",
+ "is_auto_play": 0,
+ "head_box_type": 0,
+ "flag": 0,
+ "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_947BC1A4-E0F4-4ECE-AE40-9D9817848F9A",
+ "group_id": 1000217,
+ "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_947BC1A4-E0F4-4ECE-AE40-9D9817848F9A&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=1831473323&parent_id=10&area_id=624&page=0&position=10&platform=web",
+ "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_947BC1A4-E0F4-4ECE-AE40-9D9817848F9A&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=1831473323&parent_id=10&area_id=624&page=0&position=10&platform=web",
+ "special_id": 0,
+ "watched_show": {
+ "switch": true,
+ "num": 1446,
+ "text_small": "1446",
+ "text_large": "1446人看过",
+ "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "icon_location": 0,
+ "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png"
+ },
+ "is_nft": 0,
+ "nft_dmark": "",
+ "is_ad": false,
+ "ad_transparent_content": null,
+ "show_ad_icon": false,
+ "status": false,
+ "followers": 0
+ },
+ {
+ "head_box": {
+ "name": "帕里",
+ "value": "https://i0.hdslb.com/bfs/garb/item/7c9cd30bfab66e9490d8a03fc48754cdb12b4901.png",
+ "desc": ""
+ },
+ "area_v2_id": 745,
+ "area_v2_parent_id": 9,
+ "area_v2_name": "虚拟Gamer",
+ "area_v2_parent_name": "虚拟主播",
+ "broadcast_type": 0,
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/bd898138564a7e892e05dd1ff9cf9c34bdd9cb5b.jpg",
+ "link": "/42512?hotRank=0",
+ "online": 11612,
+ "pendant_Info": {},
+ "roomid": 42512,
+ "title": "【文明7】使臣,你去死一下,然后我发兵",
+ "uname": "优礼子Ghaast",
+ "face": "https://i0.hdslb.com/bfs/face/e3f05d5b7bf56c57f55026676da71cc487d93988.jpg",
+ "verify": {
+ "role": 7,
+ "desc": "bilibili直播高能主播",
+ "type": 0
+ },
+ "uid": 6141432,
+ "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe020715350000000425126wxphk.jpg",
+ "is_auto_play": 0,
+ "head_box_type": 2,
+ "flag": 0,
+ "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_0517EBF3-EE5C-4967-A77A-9DB3F89A58A8",
+ "group_id": 1000217,
+ "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_0517EBF3-EE5C-4967-A77A-9DB3F89A58A8&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=42512&parent_id=9&area_id=745&page=0&position=11&platform=web",
+ "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_0517EBF3-EE5C-4967-A77A-9DB3F89A58A8&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=42512&parent_id=9&area_id=745&page=0&position=11&platform=web",
+ "special_id": 0,
+ "watched_show": {
+ "switch": true,
+ "num": 1998,
+ "text_small": "1998",
+ "text_large": "1998人看过",
+ "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "icon_location": 0,
+ "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png"
+ },
+ "is_nft": 0,
+ "nft_dmark": "",
+ "is_ad": false,
+ "ad_transparent_content": null,
+ "show_ad_icon": false,
+ "status": false,
+ "followers": 0
+ },
+ {
+ "head_box": {
+ "name": "百人舰队主播头像",
+ "value": "https://i0.hdslb.com/bfs/vc/071eb10548fe9bc482ff69331983d94192ce9507.png",
+ "desc": ""
+ },
+ "area_v2_id": 102,
+ "area_v2_parent_id": 2,
+ "area_v2_name": "最终幻想14",
+ "area_v2_parent_name": "网游",
+ "broadcast_type": 0,
+ "cover": "https://i0.hdslb.com/bfs/live/new_room_cover/9370e1bbda854c8ac3b9a2a9a6e960106f307580.jpg",
+ "link": "/1897222?hotRank=0",
+ "online": 80052,
+ "pendant_Info": {
+ "1": {
+ "type": "mobile_index_badge",
+ "name": "百人成就",
+ "position": 1,
+ "text": "",
+ "bg_color": "#FB9E60",
+ "bg_pic": "https://i0.hdslb.com/bfs/live/539ce26c45cd4019f55b64cfbcedc3c01820e539.png",
+ "pendant_id": 426,
+ "priority": 1,
+ "created_at": 1738857680
+ }
+ },
+ "roomid": 1897222,
+ "title": "鸟区pvp",
+ "uname": "猫姐姐nya",
+ "face": "https://i1.hdslb.com/bfs/face/acc5559db9494af780b05fbf05c158995c48d023.jpg",
+ "verify": {
+ "role": 1,
+ "desc": "bilibili 知名游戏UP主",
+ "type": 0
+ },
+ "uid": 41377819,
+ "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe020715360000018972225sqtbh.jpg",
+ "is_auto_play": 1,
+ "head_box_type": 1,
+ "flag": 0,
+ "session_id": "4b58e9bf85ef0539525f1c7b1467a5b8_93F5FBE6-4F84-40C9-AEA1-149E9D5D366E",
+ "group_id": 1000217,
+ "show_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_93F5FBE6-4F84-40C9-AEA1-149E9D5D366E&group_id=1000217&biz=live&event_id=live_card_show&rule_key=&special_id=0&roomid=1897222&parent_id=2&area_id=102&page=0&position=12&platform=web",
+ "click_callback": "https://live-trace.bilibili.com/xlive/data-interface/v1/index/log?sessionID=4b58e9bf85ef0539525f1c7b1467a5b8_93F5FBE6-4F84-40C9-AEA1-149E9D5D366E&group_id=1000217&biz=live&event_id=live_card_click&rule_key=&special_id=0&roomid=1897222&parent_id=2&area_id=102&page=0&position=12&platform=web",
+ "special_id": 0,
+ "watched_show": {
+ "switch": true,
+ "num": 2930,
+ "text_small": "2930",
+ "text_large": "2930人看过",
+ "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "icon_location": 0,
+ "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png"
+ },
+ "is_nft": 0,
+ "nft_dmark": "",
+ "is_ad": false,
+ "ad_transparent_content": null,
+ "show_ad_icon": false,
+ "status": false,
+ "followers": 0
+ }
+ ],
+ "top_room_id": 0
+ }
+}
+```
+
+
diff --git a/docs/live/redpocket.md b/docs/live/redpocket.md
new file mode 100644
index 0000000..aafb1ff
--- /dev/null
+++ b/docs/live/redpocket.md
@@ -0,0 +1,126 @@
+# 直播间人气红包
+
+## 获取指定直播间的红包信息
+
+> https://api.live.bilibili.com/xlive/lottery-interface/v1/lottery/getLotteryInfoWeb
+
+*请求方式:GET*
+
+认证方式(可选):Cookie(SESSDATA)
+
+如果不携带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'
+```
+
+
+查看响应示例:
+
+```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
+ }
+}
+```
+
+
diff --git a/docs/live/report.md b/docs/live/report.md
new file mode 100644
index 0000000..0dd3ec5
--- /dev/null
+++ b/docs/live/report.md
@@ -0,0 +1,66 @@
+# 直播心跳上报
+
+## 直播心跳 (Web端)
+
+> https://live-trace.bilibili.com/xlive/rdata-interface/v1/heartbeat/webHeartBeat
+
+*请求方式: GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | --------- | ----------- | ----------------- |
+| hb | str | heartbeat 正文 | 不必要 | 使用 base64 编码 |
+| pf | str | 平台名称 | 不必要 | 可为 `web` |
+
+`hb` 解码参数:
+
+| 项 | 类型 | 内容 | 备注 |
+| -- | ---- | ---- | ---- |
+| 0 | num | 上次返回的 next_interval 值 | 默认 60 |
+| 1 | num | 真实直播间号 | |
+| 2 | num | 1 | 作用尚不明确 |
+| 3 | num | 0 | 作用尚不明确 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| code | num | 返回值 | |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| next_interval | num | 下次心跳间隔 | |
+
+**示例:**
+
+上报直播间 26863308 的心跳
+
+```shell
+curl -G "https://live-trace.bilibili.com/xlive/rdata-interface/v1/heartbeat/webHeartBeat" \
+--data-urlencode "hb=$(echo "60|26863308|1|0" | base64 -)" \
+--data-urlencode "pf=web"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "next_interval": 60
+ }
+}
+```
+
+
diff --git a/docs/live/silent_user_manage.md b/docs/live/silent_user_manage.md
new file mode 100644
index 0000000..59502de
--- /dev/null
+++ b/docs/live/silent_user_manage.md
@@ -0,0 +1,219 @@
+# 直播间禁言相关 API
+
+## 禁言观众
+
+> https://api.live.bilibili.com/xlive/web-ucenter/v1/banned/AddSilentUser
+
+*请求方式:post*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | --- | ---------- | --- | ------------------ |
+| room_id | str | 直播间Id | 必要 | |
+| tuid | str | 要禁言的uid | 必要 | |
+| msg | str | 要禁言的弹幕内容 | 非必要 | |
+| mobile_app | str | web | 必要 | 定值"web"即可 |
+| hour | num | 禁言时长 | 必要 | -1为永久,0为本场直播 |
+| csrf_token | str | CSRF Token | 必要 | cookie中的bili_jct字段 |
+| csrf | str | CSRF Token | 必要 | cookie中的bili_jct字段 |
+| visit_id | str | 不明 | 非必要 | |
+
+**json 回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | --- | ---- | ------- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 默认为 "0" |
+| ttl | str | 1 | |
+| data | obj | 信息本体 | 成功为空 |
+
+**示例:**
+
+```shell
+curl -X POST 'https://api.live.bilibili.com/xlive/web-ucenter/v1/banned/AddSilentUser' \
+--data-urlencode 'room_id=xxxxxx' \
+--data-urlencode 'tuid=xxx' \
+--data-urlencode 'msg=xxxx' \
+--data-urlencode 'mobile_app=web' \
+--data-urlencode 'csrf_token=xx' \
+--data-urlencode 'csrf=xx' \
+--data-urlencode 'visit_id=' \
+-H 'Content-Type:application/x-www-form-urlencoded' \
+-b 'SESSDATA=xxx; bili_jct=xx;'
+```
+
+
+查看响应示例:
+
+```json
+{"code":0,"message":"0","ttl":1,"data":{}}
+```
+
+
+
+## 查询直播间禁言列表
+
+> https://api.live.bilibili.com/xlive/web-ucenter/v1/banned/GetSilentUserList
+
+*请求方式:post*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | --- | ---------- | --- | ------------------ |
+| room_id | str | 直播间Id | 必要 | |
+| ps | str | 列表页码 | 必要 | |
+| csrf_token | str | CSRF Token | 必要 | cookie中的bili_jct字段 |
+| csrf | str | CSRF Token | 必要 | cookie中的bili_jct字段 |
+| visit_id | str | 不明 | 非必要 | |
+
+**json 回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | --- | ---- | ------- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 默认为 "0" |
+| ttl | str | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | ------ | ------- |
+| data | array | 禁言列表 | 数组中为obj |
+| total | int | 禁言观众数量 | |
+| total_page | int | 页码总数量 | |
+
+`data`对象中`data`数组的元素对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | --- | ------ | --------- |
+| tuid | num | 禁言者uid | |
+| tname | str | 禁言者昵称 | |
+| uid | num | 发起者uid | |
+| name | str | 发起者昵称 | |
+| ctime | str | 禁言时间 | |
+| id | num | 禁言记录Id | 解除禁言时用到 |
+| is_anchor | num | 不明 | |
+| face | str | 禁言者头像 | |
+| admin_level | num | 发起者权限 | 0:主播,1:房管 |
+
+**示例:**
+
+```shell
+curl -X POST 'https://api.live.bilibili.com/xlive/web-ucenter/v1/banned/GetSilentUserList' \
+--data-urlencode 'room_id=xxxxxxx' \
+--data-urlencode 'ps=1' \
+--data-urlencode 'csrf_token=xxx' \
+--data-urlencode 'csrf=xxx' \
+--data-urlencode 'visit_id=' \
+-H 'Content-Type:application/x-www-form-urlencoded' \
+-b 'SESSDATA=xxxx; bili_jct=xxx;'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code":0,
+ "message":"0",
+ "ttl":1,
+ "data":{
+ "data":[
+ {
+ "tuid":123456,
+ "tname":"xxxxx",
+ "uid":123456,
+ "name":"xxxx",
+ "ctime":"2023-12-15 16:32:46",
+ "id":13493921,
+ "is_anchor":0,
+ "face":"https://i1.hdslb.com/bfs/face/xxxxx.jpg",
+ "admin_level":1
+ },
+ {
+ "tuid":123456,
+ "tname":"xx",
+ "uid":123456,
+ "name":"xxxx",
+ "ctime":"2021-08-23 22:26:06",
+ "id":8018136,
+ "is_anchor":1,
+ "face":"https://i1.hdslb.com/bfs/face/xxxxxx.jpg",
+ "admin_level":0
+ }
+ ],
+ "total":2,
+ "total_page":1
+ }
+}
+```
+
+
+
+## 解除禁言
+
+> https://api.live.bilibili.com/banned_service/v1/Silent/del_room_block_user
+
+*请求方式:post*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | --- | ---------- | --- | ---------------------- |
+| roomid | str | 直播间Id | 必要 | 注意该接口名称没有“_” |
+| id | str | 禁言记录Id | 必要 | GetSilentUserList 接口获取 |
+| csrf_token | str | CSRF Token | 必要 | cookie中的bili_jct字段 |
+| csrf | str | CSRF Token | 必要 | cookie中的bili_jct字段 |
+| visit_id | str | 不明 | 非必要 | |
+
+**json 回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | --- | ---- | ---- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 成功为空 |
+| ttl | str | 1 | |
+| data | obj | 信息本体 | 成功为空 |
+
+**示例:**
+
+```shell
+curl -X POST 'https://api.live.bilibili.com/banned_service/v1/Silent/del_room_block_user' \
+--data-urlencode 'roomid=xxxxxxxxx' \
+--data-urlencode 'id=xxxxx' \
+--data-urlencode 'csrf_token=xxx' \
+--data-urlencode 'csrf=xxx' \
+--data-urlencode 'visit_id=' \
+-H 'Content-Type:application/x-www-form-urlencoded' \
+-b 'SESSDATA=xxxxxx; bili_jct=xxx;'
+```
+
+
+查看响应示例:
+
+```json
+{"code":0,"msg":"","message":"","data":[]}
+```
+
+
diff --git a/live/user.md b/docs/live/user.md
similarity index 54%
rename from live/user.md
rename to docs/live/user.md
index 18f49f0..9a6fb5f 100644
--- a/live/user.md
+++ b/docs/live/user.md
@@ -1,19 +1,11 @@
# 直播间用户实用 API
-- [直播间用户实用 API](#直播间用户实用-api)
- - [获取用户持有的粉丝勋章信息](#获取用户持有的粉丝勋章信息)
- - [佩戴勋章](#佩戴勋章)
- - [直播签到](#直播签到)
-
----
-
## 获取用户持有的粉丝勋章信息
-> ~~http://api.live.bilibili.com/fans_medal/v5/live_fans_medal/iApiMedal~~
->
+> ~~https://api.live.bilibili.com/fans_medal/v5/live_fans_medal/iApiMedal~~ (旧)
> https://api.live.bilibili.com/xlive/app-ucenter/v1/user/GetMyMedals
-_请求方式:GET_
+*请求方式:GET*
认证方式:Cookie(SESSDATA)或 APP
@@ -30,9 +22,9 @@ _请求方式:GET_
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -1002002:参数异常 -500:服务器异常 |
+| code | num | 返回值 | 0:成功 -1002002:参数异常 -500:服务器异常 |
| message | str | 错误信息 | 默认为 "0" |
-| ttl | str | 1 | |
+| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
@@ -43,7 +35,7 @@ _请求方式:GET_
| items | array | 粉丝勋章信息本体 | |
| page_info | obj | 页码信息 | |
-`items 数组内`对象:
+`items`数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
| ------------------ | ------ | -------------------- | -------------------------------------- |
@@ -52,7 +44,7 @@ _请求方式:GET_
| guard_level | num | | |
| guard_medal_title | str | 加成状态 | |
| intimacy | num | 当前已得亲密度 | |
-| is_lighted | num | 是否点亮 | 0:未点亮 1:点亮 |
+| is_lighted | num | 是否点亮 | 0:未点亮 1:点亮 |
| level | num | 勋章等级 | |
| medal_name | str | 勋章名 | |
| medal_color_border | num | 勋章边框颜色信息 | 颜色数值为 10 进制的 16 进制值(下同) |
@@ -126,9 +118,9 @@ curl https://api.live.bilibili.com/xlive/app-ucenter/v1/user/GetMyMedals?page=1&
## 佩戴勋章
-> http://api.live.bilibili.com/xlive/web-room/v1/fansMedal/wear
+> https://api.live.bilibili.com/xlive/web-room/v1/fansMedal/wear
-_请求方式:POST_
+*请求方式:POST*
**表单参数:**
@@ -145,7 +137,7 @@ _请求方式:POST_
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | -------------- |
| code | num | 返回值 | 0:成功 |
-| ttl | str | 1 | |
+| ttl | num | 1 | |
| message | str | 错误信息 | 默认为佩戴成功 |
| data | obj | 信息本体 | 默认为无 |
@@ -189,9 +181,9 @@ $.ajax({
-## 直播签到
+## ~~直播签到(已下线)~~
-> http://api.live.bilibili.com/xlive/web-ucenter/v1/sign/DoSign
+> https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/DoSign
_请求方式:GET_
@@ -203,7 +195,176 @@ _请求方式:GET_
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ---------------------- |
-| code | num | 返回值 | 0:成功 1:参数错误 |
-| ttl | str | 1 | |
+| code | num | 返回值 | 0:成功 1:参数错误 |
+| ttl | num | 1 | |
| message | str | 错误信息 | 默认为当日签到奖励内容 |
| data | obj | 信息本体 | 默认为空 |
+
+(目前已下线)
+
+
+查看响应示例(下线后):
+
+```json
+{
+ "code": 1,
+ "message": "签到活动已下线,无法使用。",
+ "ttl": 1,
+ "data": null
+}
+```
+
+
+
+
+## 本月直播签到信息
+
+> https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/WebGetSignInfo
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**json 回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------------------- |
+| code | num | 返回值 | 0:成功 |
+| ttl | num | 1 | |
+| message | str | 错误信息 | 默认为0 |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ----- | ---------------------------- | ---------------------- |
+| text | str | 今日签到奖励信息 | 默认为空 |
+| specialText | str | 连续签到奖励信息 | 默认为空 |
+| status | num | 签到状态 | 0:未签到 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 | 当月已签到且有特殊奖励日列表 | 默认为空 |
+
+
+查看响应示例:
+
+```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
+ ]
+ }
+}
+```
+
+
+
+## 上月直播签到信息
+
+> https://api.live.bilibili.com/sign/getLastMonthSignDays
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**json 回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------------------- |
+| code | num | 返回值 | 0:成功 |
+| ttl | num | 1 | |
+| message | str | 错误信息 | 默认为0 |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ----- | ---------------------------- | -------- |
+| days | num | 上月天数 | |
+| month | num | 上月月份值 | |
+| hadSignDays | num | 上月已签到天数 | 默认为0 |
+| signDaysList | array | 上月已签到日列表 | 默认为空 |
+| signBonusDaysList | array | 上月已签到且有特殊奖励日列表 | 默认为空 |
+
+
+查看响应示例:
+
+```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
+ ]
+ }
+}
+```
+
+
diff --git a/docs/login/cookie_refresh.md b/docs/login/cookie_refresh.md
new file mode 100644
index 0000000..e1b22fa
--- /dev/null
+++ b/docs/login/cookie_refresh.md
@@ -0,0 +1,574 @@
+# Web端Cookie刷新
+
+自从 2023 以来,社区反馈似乎 Web 端的 Cookie 会随着一些敏感接口的访问逐渐失效,而在 Web 页面上会判断 Cookie 是否需要刷新,如需刷新则会以动态加载 iframe 方式实现,同时登录(二维码 / 密码 / 短信验证码等)接口也会返回`refresh_token`字段,需要持久化保存,是一种官方的风控机制实现
+
+感谢 [#524](https://github.com/SocialSisterYi/bilibili-API-collect/issues/524) 提供相关研究报告以及逆向工程结果
+
+> cookie 不会主动刷新的,只要他没有调用下面的刷新接口就不会刷新。也就是说,你只要不再打开浏览器,或者直接把 localStorage 的 ac_time_value 字段删除了。那么 cookie 在真的失效前(登录过期、账号风控等强制下线)都是不变化的。
+
+## 刷新步骤(伪代码)
+
+```python
+cookie, refresh_token = 进行登录操作() # can be 二维码 / 密码 / 短信验证码
+
+while True:
+ if 每日第一次访问接口:
+ if 检查是否需要刷新(cookie):
+ CorrespondPath = 生成CorrespondPath(当前毫秒时间戳)
+ refresh_csrf = 获取refresh_csrf(CorrespondPath, cookie)
+ refresh_token_old = refresh_token # 这一步必须保存旧的 refresh_token 备用
+ cookie, refresh_token = 刷新Cookie(refresh_token, refresh_csrf, cookie)
+ 确认更新(refresh_token_old, cookie) # 这一步需要新的 Cookie 以及旧的 refresh_token
+ SSO站点跨域登录(cookie)
+ do_somethings(cookie) # 其他业务逻辑处理
+```
+
+## 检查是否需要刷新
+
+> https://passport.bilibili.com/x/passport-login/web/cookie/info
+
+*请求方式:GET*
+
+鉴权方式:Cookie
+
+**url 参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------------------- | ------ | ---- |
+| csrf | str | CSRF Token(位于 Cookie) | 非必要 | 位于 Cookie 中的bili_jct字段 |
+
+**json 回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------------- | ----------------------------------------------------- |
+| refresh | bool | 是否应该刷新 Cookie | `true`:需要刷新 Cookie `false`:无需刷新 Cookie |
+| timestamp | num | 当前毫秒时间戳 | 用于获取 refresh_csrf |
+
+**示例:**
+
+```bash
+curl -G 'https://passport.bilibili.com/x/passport-login/web/cookie/info' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "refresh": false,
+ "timestamp": 1684466082562
+ }
+}
+```
+
+
+
+## 生成CorrespondPath算法
+
+该算法逆向于以下 wasm 以及 JavaScript bind 接口,抓取于官方 Web 首页中,感谢 [#524](https://github.com/SocialSisterYi/bilibili-API-collect/issues/524) 提供
+
+https://s1.hdslb.com/bfs/static/jinkela/long/wasm/wasm_rsa_encrypt_bg.wasm
+
+https://s1.hdslb.com/bfs/static/jinkela/long/wasm/wasm_ras_umd.js
+
+### 算法细节
+
+将`refresh_${timestamp}`作为消息体(参数`timestamp`为当前毫秒时间戳),用下方 PubKey 进行 [RSA-OAEP](https://datatracker.ietf.org/doc/html/rfc3447#section-7.1) 算法加密,之后密文通过小写 Base16 编码为字符串
+
+JWK 格式:
+
+> {
+> "kty": "RSA",
+> "n": "y4HdjgJHBlbaBN04VERG4qNBIFHP6a3GozCl75AihQloSWCXC5HDNgyinEnhaQ_4-gaMud_GF50elYXLlCToR9se9Z8z433U3KjM-3Yx7ptKkmQNAMggQwAVKgq3zYAoidNEWuxpkY_mAitTSRLnsJW-NCTa0bqBFF6Wm1MxgfE",
+> "e": "AQAB"
+> }
+
+PEM 格式:
+
+> -----BEGIN PUBLIC KEY-----
+> MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLgd2OAkcGVtoE3ThUREbio0Eg
+> Uc/prcajMKXvkCKFCWhJYJcLkcM2DKKcSeFpD/j6Boy538YXnR6VhcuUJOhH2x71
+> nzPjfdTcqMz7djHum0qSZA0AyCBDABUqCrfNgCiJ00Ra7GmRj+YCK1NJEuewlb40
+> JNrRuoEUXpabUzGB8QIDAQAB
+> -----END PUBLIC KEY-----
+
+### 相关Demo
+
+该 Demo 提供 [JavaScript](#javascript) [Python](#python) [Kotlin](#kotlin) [Java](#java) [Go](#go) 以及 [Vercel 云函数](#vercel云函数),感谢 [#524](https://github.com/SocialSisterYi/bilibili-API-collect/issues/524) 提供
+
+#### JavaScript
+
+```javascript
+const publicKey = await crypto.subtle.importKey(
+ "jwk",
+ {
+ kty: "RSA",
+ n: "y4HdjgJHBlbaBN04VERG4qNBIFHP6a3GozCl75AihQloSWCXC5HDNgyinEnhaQ_4-gaMud_GF50elYXLlCToR9se9Z8z433U3KjM-3Yx7ptKkmQNAMggQwAVKgq3zYAoidNEWuxpkY_mAitTSRLnsJW-NCTa0bqBFF6Wm1MxgfE",
+ e: "AQAB",
+ },
+ { name: "RSA-OAEP", hash: "SHA-256" },
+ true,
+ ["encrypt"],
+)
+
+async function getCorrespondPath(timestamp) {
+ const data = new TextEncoder().encode(`refresh_${timestamp}`);
+ const encrypted = new Uint8Array(await crypto.subtle.encrypt({ name: "RSA-OAEP" }, publicKey, data))
+ return encrypted.reduce((str, c) => str + c.toString(16).padStart(2, "0"), "")
+}
+
+const ts = Date.now()
+console.log(await getCorrespondPath(ts))
+```
+
+```text
+b77f21ab5b7ce7879c410b2311dd6e7ea1a2cd1cd941073db067f4c3279fdabca3a06dfa744168ee14ad050b9f4889bd4edb8e76eb597fdd18c16804d82566b55c6dba8e225d838aa93d8e5b31cf7c56720db8244d92373f4944e0561f6ca5bf721a36ac079786060fc853605ccd1ddcb33f54617de6aedd44e3b9850d13b45f
+```
+
+#### Python
+
+需要`pycryptodome`依赖
+
+```python
+from Crypto.Cipher import PKCS1_OAEP
+from Crypto.PublicKey import RSA
+from Crypto.Hash import SHA256
+import binascii
+import time
+
+key = RSA.importKey('''\
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLgd2OAkcGVtoE3ThUREbio0Eg
+Uc/prcajMKXvkCKFCWhJYJcLkcM2DKKcSeFpD/j6Boy538YXnR6VhcuUJOhH2x71
+nzPjfdTcqMz7djHum0qSZA0AyCBDABUqCrfNgCiJ00Ra7GmRj+YCK1NJEuewlb40
+JNrRuoEUXpabUzGB8QIDAQAB
+-----END PUBLIC KEY-----''')
+
+def getCorrespondPath(ts):
+ cipher = PKCS1_OAEP.new(key, SHA256)
+ encrypted = cipher.encrypt(f'refresh_{ts}'.encode())
+ return binascii.b2a_hex(encrypted).decode()
+
+ts = round(time.time() * 1000)
+print(getCorrespondPath(ts))
+```
+
+```text
+47bbd615f333d6a2c597bbb46ad47a6e59752a305a2f545d3ba5d49ca055309347796f80d257613696d36170c57443a0e9dea2b47f83b0b4224d431e46124fadd9a24c8fa468147e8bf2d2501eaacae43310e19bf58fc4a728d80c90b9401afcfc1536ba9a2f6438ea53c0b2652f8b8d01c87355dd5a5da51de998b1a35d519a
+```
+
+### Kotlin
+
+```kotlin
+import java.security.KeyFactory
+import java.security.spec.MGF1ParameterSpec
+import java.security.spec.X509EncodedKeySpec
+import java.util.*
+import javax.crypto.Cipher
+import javax.crypto.spec.OAEPParameterSpec
+import javax.crypto.spec.PSource
+
+
+fun main() {
+ println(getCorrespondPath(System.currentTimeMillis()))
+}
+
+fun getCorrespondPath(timestamp: Long): String {
+ val publicKeyPEM = """
+ -----BEGIN PUBLIC KEY-----
+ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLgd2OAkcGVtoE3ThUREbio0Eg
+ Uc/prcajMKXvkCKFCWhJYJcLkcM2DKKcSeFpD/j6Boy538YXnR6VhcuUJOhH2x71
+ nzPjfdTcqMz7djHum0qSZA0AyCBDABUqCrfNgCiJ00Ra7GmRj+YCK1NJEuewlb40
+ JNrRuoEUXpabUzGB8QIDAQAB
+ -----END PUBLIC KEY-----
+ """.trimIndent()
+
+ val publicKey = KeyFactory.getInstance("RSA").generatePublic(
+ X509EncodedKeySpec(Base64.getDecoder().decode(publicKeyPEM
+ .replace("-----BEGIN PUBLIC KEY-----", "")
+ .replace("-----END PUBLIC KEY-----", "")
+ .replace("\n", "")
+ .trim()))
+ )
+
+ val cipher = Cipher.getInstance("RSA/ECB/OAEPPadding").apply {
+ init(Cipher.ENCRYPT_MODE,
+ publicKey,
+ OAEPParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT)
+ )
+ }
+
+ return cipher.doFinal("refresh_$timestamp".toByteArray()).joinToString("") { "%02x".format(it) }
+}
+```
+
+```text
+1428cbd14605ae42a0b42e22662cfe51d8e5034eeaffb36a46db46bd2f93216cbfd4d150cca2de44395add7c664b40acf44424ee8d634fc821b909423665a34d18bd7f4e77ea5388a2b612daf875e2fe8df62990e14b64a465898b0707bc1288586b68f9f4f2f20bea5cb1cada296beb8009e91bc8fb57a4b81b8923299b6eb7
+```
+
+### Go
+
+```go
+package main
+
+import (
+ "crypto/rand"
+ "crypto/rsa"
+ "crypto/sha256"
+ "crypto/x509"
+ "encoding/hex"
+ "encoding/pem"
+ "fmt"
+ "time"
+)
+
+func main() {
+ result, err := getCorrespondPath(time.Now().UnixMilli())
+ if err != nil {
+ panic(err)
+ }
+ fmt.Println(result)
+}
+
+func getCorrespondPath(ts int64) (string, error) {
+ const publicKeyPEM = `
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLgd2OAkcGVtoE3ThUREbio0Eg
+Uc/prcajMKXvkCKFCWhJYJcLkcM2DKKcSeFpD/j6Boy538YXnR6VhcuUJOhH2x71
+nzPjfdTcqMz7djHum0qSZA0AyCBDABUqCrfNgCiJ00Ra7GmRj+YCK1NJEuewlb40
+JNrRuoEUXpabUzGB8QIDAQAB
+-----END PUBLIC KEY-----
+`
+ pubKeyBlock, _ := pem.Decode([]byte(publicKeyPEM))
+ hash := sha256.New()
+ random := rand.Reader
+ msg := []byte(fmt.Sprintf("refresh_%d", ts))
+ var pub *rsa.PublicKey
+ pubInterface, parseErr := x509.ParsePKIXPublicKey(pubKeyBlock.Bytes)
+ if parseErr != nil {
+ return "", parseErr
+ }
+ pub = pubInterface.(*rsa.PublicKey)
+ encryptedData, encryptErr := rsa.EncryptOAEP(hash, random, pub, msg, nil)
+ if encryptErr != nil {
+ return "", encryptErr
+ }
+ return hex.EncodeToString(encryptedData), nil
+}
+```
+
+```text
+97759947aa357ed5d88cf9bf1172737570b7bba2d6788d39006f082b2b25ddf53b581f1f0c61ed8573317485ef525d2789faa25a277b4602a4b9cbf837681093a03e96cb9773a11df4bb1e20f1587180b3e958194de922d7dd94d0a2f0b9b0ef74e426e8041f99b99e7c02407ef4ab38040e61be81e4fdfbdb73461e3a2ad810
+```
+
+### Java
+
+```Java
+import javax.crypto.Cipher;
+import javax.crypto.spec.OAEPParameterSpec;
+import javax.crypto.spec.PSource;
+import java.math.BigInteger;
+import java.security.KeyFactory;
+import java.security.PublicKey;
+import java.security.spec.MGF1ParameterSpec;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.Base64;
+
+public class CookieRefresh {
+ private static final String PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----\n" +
+ "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLgd2OAkcGVtoE3ThUREbio0Eg\n" +
+ "Uc/prcajMKXvkCKFCWhJYJcLkcM2DKKcSeFpD/j6Boy538YXnR6VhcuUJOhH2x71\n" +
+ "nzPjfdTcqMz7djHum0qSZA0AyCBDABUqCrfNgCiJ00Ra7GmRj+YCK1NJEuewlb40\n" +
+ "JNrRuoEUXpabUzGB8QIDAQAB\n" +
+ "-----END PUBLIC KEY-----";
+
+ public static void main(String[] args) {
+ try {
+ String correspondPath = getCorrespondPath(String.format("refresh_%d", System.currentTimeMillis()), PUBLIC_KEY);
+ System.out.println(correspondPath);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static String getCorrespondPath(String plaintext, String publicKeyStr) throws Exception {
+ KeyFactory keyFactory = KeyFactory.getInstance("RSA");
+ publicKeyStr = publicKeyStr
+ .replace("-----BEGIN PUBLIC KEY-----", "")
+ .replace("-----END PUBLIC KEY-----", "")
+ .replace("\n", "")
+ .trim();
+ byte[] publicBytes = Base64.getDecoder().decode(publicKeyStr);
+ X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publicBytes);
+ PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
+
+ String algorithm = "RSA/ECB/OAEPPadding";
+ Cipher cipher = Cipher.getInstance(algorithm);
+ cipher.init(Cipher.ENCRYPT_MODE, publicKey);
+
+ // Encode the plaintext to bytes
+ byte[] plaintextBytes = plaintext.getBytes("UTF-8");
+
+ // Add OAEP padding to the plaintext bytes
+ OAEPParameterSpec oaepParams = new OAEPParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT);
+ cipher.init(Cipher.ENCRYPT_MODE, publicKey, oaepParams);
+ // Encrypt the padded plaintext bytes
+ byte[] encryptedBytes = cipher.doFinal(plaintextBytes);
+ // Convert the encrypted bytes to a Base64-encoded string
+ return new BigInteger(1, encryptedBytes).toString(16);
+ }
+}
+```
+
+```text
+f87666152da692735123f4e49053e5a98c16854673b2e632f31a3ff0c029640772873661a9a8412db6be447a0bfa03a295d15548cbfd2bb35634e98ba5f25b1205519d6e6119b483f4c516c1e106d45b04ff98c73560949d379d3edaf3c0ecd10a1d46134fb9ca443122ab33c16d1dd48280496f949ed960a2fbcd65f10935e
+```
+
+#### vercel云函数
+
+```bash
+curl -G 'https://wasm-rsa.vercel.app/api/rsa' \
+ --data-urlencode "t=$((`date '+%s'`*1000+`date '+%N'`/1000000))"
+```
+
+```json
+{
+ "timestamp": "1684468084078",
+ "hash": "a768efe5114ef8610f9ed9ebc28c00827375f4a3448ec4ab17958cacc4fde9898e5b7aa27f649426bba1acae4aa222aafaff7d528669b15249de0b2b60d86618557d8dc90684db4ec68e8d98e41d94f1c97d1d431c288e595ceb522d033822442a9e1ee150b32771a83fbf65c13329e9fda080fbe3bc85c49c1de7ab148d228f",
+ "code": 0
+}
+```
+
+## 获取refresh_csrf
+
+> https://www.bilibili.com/correspond/1/{correspondPath}
+
+*请求方式:GET*
+
+鉴权方式:Cookie
+
+**path 参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------------- | ---- | ---------------------------- | ------ | ------------------------------------------------------------ |
+| correspondPath | str | 使用当前毫秒时间戳生成的签名 | 必要 | 由 [生成CorrespondPath算法](#生成CorrespondPath算法) 加密获得 |
+
+将参数`correspondPath`拼接在 https://www.bilibili.com/correspond/1/ 后进行请求,例如
+
+> https://www.bilibili.com/correspond/1/0248397e5139a8b878894cae46f8d6742ef7c728e46403706452b5dda90fe248e58e73bd6c2da0dba515c53af107dc1ecda757ce843579bcf197fcd7800586126e9b896b646cc94c23183a5a067642e96f7b6e803880e1d3cceabc9f1dc52a121b5e3ba5619e008f6b6dcb65a09d7864084ac114f4ec9ccf6218776fe4f2fa95
+
+请求该 url 会返回一个 html 页面,通常由 iframe 方式加载,它通过 SSR 方式返回一个实时刷新口令`refresh_csrf`存放于 html 标签中,并在 Client 端通过 js 请求 RestAPI 完成一些列的提交刷新、确认、SSO 站点登录等操作
+
+若参数`correspondPath`错误或过期,则返回一个 404 Page
+
+以下为返回的参数:
+
+| 标签 id | 内容 | xpath | 备注 |
+| ------- | ------------ | ------------------------- | --------------------------------- |
+| 1-name | refresh_csrf | //div[id='1-name']/text() | 实时刷新口令 用于更新 Cookie |
+
+**示例:**
+
+```bash
+correspondPath='0248397e5139a8b878894cae46f8d6742ef7c728e46403706452b5dda90fe248e58e73bd6c2da0dba515c53af107dc1ecda757ce843579bcf197fcd7800586126e9b896b646cc94c23183a5a067642e96f7b6e803880e1d3cceabc9f1dc52a121b5e3ba5619e008f6b6dcb65a09d7864084ac114f4ec9ccf6218776fe4f2fa95'
+
+curl -G "https://www.bilibili.com/correspond/1/$correspondPath" \
+ -b 'SESSDATA=xxx'
+```
+
+```html
+
+
+
+
+
+
+
+Correspond
+
+
+
+ b0cc8411ded2f9db2cff2edb3123acac
+
+
+
+
+
+
+
+```
+
+所以当前账号的实时刷新口令`refresh_csrf`为`b0cc8411ded2f9db2cff2edb3123acac`
+
+## 刷新Cookie
+
+> https://passport.bilibili.com/x/passport-login/web/cookie/refresh
+
+*请求方式:POST*
+
+鉴权方式:Cookie
+
+刷新成功后会设置以下 Cookie 项:
+
+`sid`、`DedeUserID`、`DedeUserID__ckMd5`、`SESSDATA`、`bili_jct`
+
+**正文参数 (application/x-www-form-urlencoded)或 url 参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------- | ---- | -------------- | ------ | ------------------------------------------------------------ |
+| csrf | str | CSRF Token | 必要 | 位于 Cookie 中的`bili_jct`字段 |
+| refresh_csrf | str | 实时刷新口令 | 必要 | 通过 [获取refresh_csrf](#获取refresh_csrf) 获得 |
+| source | str | 访问来源? | 必要 | 一般为`main_web` |
+| refresh_token | str | 持久化刷新口令 | 必要 | localStorage 中的`ac_time_value`字段,在登录成功后返回并保存 |
+
+**json 回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf 校验失败 86095:refresh_csrf 错误或 refresh_token 与 cookie 不匹配 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | ------------------ | ----------------------------------------------------------- |
+| status | num | 0 | |
+| message | str | 空 | |
+| refresh_token | str | 新的持久化刷新口令 | 将存储于 localStorage 中的`ac_time_value`字段,以便下次使用 |
+
+**示例:**
+
+```bash
+curl -i 'https://passport.bilibili.com/x/passport-login/web/cookie/refresh' \
+ --data-urlencode 'csrf=f610640a37f51f6266f6b83cfc5eedbb' \
+ --data-urlencode 'refresh_csrf=b0cc8411ded2f9db2cff2edb3123acac' \
+ --data-urlencode 'source=main_web' \
+ --data-urlencode 'refresh_token=45240a041836905fe953e3b98b83d751' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+http 响应(关键信息已做脱敏处理):
+
+```http
+HTTP/2 200
+date: Fri, 19 May 2023 07:34:11 GMT
+content-type: application/json; charset=utf-8
+content-length: 116
+bili-status-code: 0
+bili-trace-id: 17f4251365646726
+set-cookie: SESSDATA=***; Path=/; Domain=bilibili.com; Expires=Wed, 15 Nov 2023 07:34:10 GMT; HttpOnly; Secure
+set-cookie: bili_jct=***; Path=/; Domain=bilibili.com; Expires=Wed, 15 Nov 2023 07:34:10 GMT
+set-cookie: DedeUserID=***; Path=/; Domain=bilibili.com; Expires=Wed, 15 Nov 2023 07:34:10 GMT
+set-cookie: DedeUserID__ckMd5=***; Path=/; Domain=bilibili.com; Expires=Wed, 15 Nov 2023 07:34:10 GMT
+set-cookie: sid=***; Path=/; Domain=bilibili.com; Expires=Wed, 15 Nov 2023 07:34:10 GMT
+x-bili-trace-id: 3f6f6174aaa087b517f4251365646726
+expires: Fri, 19 May 2023 07:34:10 GMT
+cache-control: no-cache
+x-cache-webcdn: BYPASS from blzone03
+
+{"code":0,"message":"0","ttl":1,"data":{"status":0,"message":"","refresh_token":"ae1bd1149b56af9743ffe7bbbeff3e51"}}
+```
+
+JSON Payload:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "status": 0,
+ "message": "",
+ "refresh_token": "ae1bd1149b56af9743ffe7bbbeff3e51"
+ }
+}
+```
+
+
+
+## 确认更新
+
+> https://passport.bilibili.com/x/passport-login/web/confirm/refresh
+
+*请求方式:POST*
+
+鉴权方式:Cookie
+
+该步操作将让旧的`refresh_token`对应的 Cookie 失效
+
+**正文参数 (application/x-www-form-urlencoded)或 url 参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------- | ---- | ------------------------- | ------ | ------------------------------------------------------------ |
+| csrf | str | CSRF Token(位于 cookie) | 必要 | 从新的 cookie 中获取,位于 Cookie 中的`bili_jct`字段 |
+| refresh_token | str | 旧的持久化刷新口令 | 必要 | 在刷新前 localStorage 中的`ac_time_value`获取,**并非刷新后返回的值** |
+
+**json 回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf 校验失败 -400:请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+```bash
+curl 'https://passport.bilibili.com/x/passport-login/web/confirm/refresh' \
+ --data-urlencode 'csrf=1e9658858e6da76be64bd92cdc0fa324' \
+ --data-urlencode 'refresh_token=45240a041836905fe953e3b98b83d751' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
diff --git a/docs/login/exit.md b/docs/login/exit.md
new file mode 100644
index 0000000..8ba5e14
--- /dev/null
+++ b/docs/login/exit.md
@@ -0,0 +1,68 @@
+# 退出账号登录
+
+## 退出登录(web端)
+
+> https://passport.bilibili.com/login/exit/v2
+
+_请求方式:POST_
+
+认证方式:Cookie
+
+验证登录成功后会使用`set-cookie`字段清空以下 cookie 项:
+
+`DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct`
+
+并在服务器注销该登录 Token (SESSDATA),该 Token 即失效
+
+请求必须包含以下cookie项:`DedeUserID` `bili_jct` `SESSDATA`
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ---------------------------------------- | ------ | --------------------------------- |
+| biliCSRF | str | CSRF Token (位于 cookie 中的 `bili_jct`) | 必要 | |
+| gourl | str | 成功后跳转到的页面 | 非必要 | 默认为`javascript:history.go(-1)` |
+
+**json 回复:**
+
+如果 cookie 已经失效则输出登录页 html
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----------- | -------- | --------------------------------- |
+| code | num | 返回值 | 0:成功 2202:csrf 请求非法 |
+| status | bool | 返回值 | `true`:成功 |
+| ts | num | 时间戳 | |
+| message | str | 错误信息 | 成功时不存在 |
+| data | 有效时:obj | 信息本体 | 失败时不存在 |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ---------- | ---- |
+| redirectUrl | str | 重定向 url | |
+
+**示例:**
+
+```shell
+curl -L -X POST 'https://passport.bilibili.com/login/exit/v2' \
+-H 'Cookie: DedeUserID=xxx; bili_jct=xxx; SESSDATA=xxx' \
+-H 'Content-Type: application/x-www-form-urlencoded' \
+--data-urlencode 'biliCSRF=xxxxxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "status": true,
+ "ts": 1663034005,
+ "data": {
+ "redirectUrl": "https://passport.biligame.com/crossDomain?DedeUserID=&DedeUserID__ckMd5=&SESSDATA=&bili_jct=&gourl=javascript%3Ahistory.go%28-1%29"
+ }
+}
+```
+
\ No newline at end of file
diff --git a/docs/login/login_action/QR.md b/docs/login/login_action/QR.md
new file mode 100644
index 0000000..ecee7fd
--- /dev/null
+++ b/docs/login/login_action/QR.md
@@ -0,0 +1,652 @@
+# 二维码登录
+
+
+
+## 扫码登录流程(伪代码)
+
+```python
+token, url = 申请二维码()
+生成二维码(url) # 等待客户端扫码
+while True:
+ status, cookie = 扫码登录(token)
+ match status:
+ case 未扫描:
+ continue
+ case 二维码超时 | 二维码失效:
+ 提示('二维码失效或超时') # 需要用户重新操作
+ break
+ case 已扫描未确认:
+ 提示('扫描成功')
+ case 登录成功:
+ 提示('扫描成功')
+ 存储cookie(cookie)
+ SSO登录页面跳转()
+ break
+```
+
+## web端扫码登录
+
+### 申请二维码(web端)
+
+> https://passport.bilibili.com/x/passport-login/web/qrcode/generate
+
+*请求方式:GET*
+
+密钥超时为180秒
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|------|
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------------|-----|------------------|--------|
+| url | str | 二维码内容 (登录页面 url) | |
+| qrcode_key | str | 扫码登录秘钥 | 恒为32字符 |
+
+**示例:**
+
+`url`中的值生成二维码,等待手机客户端扫描,并将`qrcode_key`保存备用
+
+```shell
+curl 'https://passport.bilibili.com/x/passport-login/web/qrcode/generate'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "url": "https://passport.bilibili.com/h5-app/passport/login/scan?navhide=1\u0026qrcode_key=8587cf8106a0b863c46d6bab913537f6\u0026from=",
+ "qrcode_key": "8587cf8106a0b863c46d6bab913537f6"
+ }
+}
+```
+
+
+
+### 扫码登录(web端)
+
+> https://passport.bilibili.com/x/passport-login/web/qrcode/poll
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|------------|-----|--------|-----|-----|
+| qrcode_key | str | 扫码登录秘钥 | 必要 | |
+
+
+密钥超时为180秒
+
+验证登录成功后会进行设置以下cookie项:
+
+`DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct`
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|------|
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | |
+| data | obj | 信息本体 | |
+
+data 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------------|-----|----------------------------------------------------------------|------------------------|
+| url | str | 游戏分站跨域登录 url | 未登录为空 |
+| refresh_token | str | 刷新`refresh_token` | 未登录为空 |
+| timestamp | num | 登录时间 | 未登录为`0` 时间戳 单位为毫秒 |
+| code | num | 0:扫码登录成功 86038:二维码已失效 86090:二维码已扫码未确认 86101:未扫码 | |
+| message | str | 扫码状态信息 | |
+
+**示例:**
+
+使用扫描秘钥`c3bd5286a2b40a822f5f60e9bf3f602e`登录
+
+```shell
+curl -G "https://passport.bilibili.com/x/passport-login/web/qrcode/poll"\
+--data-urlencode 'qrcode_key=c3bd5286a2b40a822f5f60e9bf3f602e' \
+-c 'cookie.txt'
+```
+
+当密钥正确时但未扫描时`code`为`86101`
+
+
+查看响应示例:
+
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "url": "",
+ "refresh_token": "",
+ "timestamp": 0,
+ "code": 86101,
+ "message": "未扫码"
+ }
+}
+```
+
+
+
+扫描成功但手机端未确认时`code`为`86090`
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "url": "",
+ "refresh_token": "",
+ "timestamp": 0,
+ "code": 86090,
+ "message": "二维码已扫码未确认"
+ }
+}
+```
+
+
+
+扫描成功手机端确认登录后,`code`为`0`,并向浏览器写入cookie
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "url": "https://passport.biligame.com/crossDomain?DedeUserID=***\u0026DedeUserID__ckMd5=***\u0026Expires=***\u0026SESSDATA=***\u0026bili_jct=***\u0026gourl=https%3A%2F%2Fpassport.bilibili.com",
+ "refresh_token": "***",
+ "timestamp": 1662363009601,
+ "code": 0,
+ "message": ""
+ }
+}
+```
+
+
+
+**响应头部抓包信息:**
+
+可明显看见设置了几个cookie
+
+
+查看响应示例:
+
+```http
+HTTP/1.1 200 OK
+Date: Mon, 05 Sep 2022 07:30:09 GMT
+Expires: Mon, 05 Sep 2022 07:30:08 GMT
+Cache-control: no-cache
+Content-encoding: br
+Content-type: application/json; charset=utf-8
+bili-status-code: 0
+bili-trace-id: 0d23fe044a6315a5
+set-cookie: SESSDATA=***; Path=/; Domain=bilibili.com; Expires=Sat, 04 Mar 2023 07:30:09 GMT; HttpOnly; Secure
+set-cookie: bili_jct=***; Path=/; Domain=bilibili.com; Expires=Sat, 04 Mar 2023 07:30:09 GMT
+set-cookie: DedeUserID=***; Path=/; Domain=bilibili.com; Expires=Sat, 04 Mar 2023 07:30:09 GMT
+set-cookie: DedeUserID__ckMd5=***; Path=/; Domain=bilibili.com; Expires=Sat, 04 Mar 2023 07:30:09 GMT
+set-cookie: sid=***; Path=/; Domain=bilibili.com; Expires=Sat, 04 Mar 2023 07:30:09 GMT
+x-bili-trace-id: 2fbd8abd97dbd4db0d23fe044a6315a5
+x-cache-webcdn: BYPASS from blzone02
+```
+
+
+
+二维码失效时`code`为`86038`
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "url": "",
+ "refresh_token": "",
+ "timestamp": 0,
+ "code": 86038,
+ "message": "二维码已失效"
+ }
+}
+```
+
+
+
+## web端扫码登录-旧版
+
+以下为旧版扫码登录 API,部分可正常访问
+
+### 申请二维码(web端-旧版)
+
+> https://passport.bilibili.com/qrcode/getLoginUrl
+
+*请求方式:GET*
+
+密钥超时为180秒
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------|------|------|--------|
+| code | num | 返回值 | 0:成功 |
+| status | bool | true | 作用尚不明确 |
+| ts | num | 请求时间 | 时间戳 |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|----------|-----|------------------|--------|
+| url | str | 二维码内容 (登录页面 url) | |
+| oauthKey | str | 扫码登录秘钥 | 恒为32字符 |
+
+**示例:**
+
+`url`中的值生成二维码,等待手机客户端扫描,并将`oauthKey`保存备用
+
+```shell
+curl 'https://passport.bilibili.com/qrcode/getLoginUrl'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "status": true,
+ "ts": 1583314311,
+ "data": {
+ "url": "https://passport.bilibili.com/qrcode/h5/login?oauthKey=c3bd5286a2b40a822f5f60e9bf3f602e",
+ "oauthKey": "c3bd5286a2b40a822f5f60e9bf3f602e"
+ }
+}
+```
+
+
+
+### 扫码登录(web端-旧版)
+
+**接口已失效,请求结果始终为 `{ code: 20000, message: '该版本已不支持当前功能,请升级新版本!' }`**
+
+> ~~https://passport.bilibili.com/qrcode/getLoginInfo~~
+
+*请求方式:POST*
+
+
+内容已过时:
+
+密钥超时为180秒
+
+验证登录成功后会进行设置以下cookie项:
+
+`DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct`
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|----------|-----|--------|-----|----------------------------|
+| oauthKey | str | 扫码登录秘钥 | 必要 | |
+| gourl | str | 跳转url | 非必要 | 默认为http://www.bilibili.com |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|----------------------|---------------------------|---------------------------------------------------------|
+| code | num | 返回值 | 0:成功, 20000:该版本已不支持当前功能,请升级新版本! |
+| message | str | | 正确无 |
+| ts | num | 扫码时间 | 错误无 |
+| status | bool | 扫码是否成功 | true:成功 false:未成功 |
+| data | 正确时:obj 错误时:num | 正确时:游戏分站url 错误时:错误代码 | 未成功时: -1:密钥错误 -2:密钥超时 -4:未扫描 -5:未确认 |
+
+data 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-----|-----|--------------|-----|
+| url | str | 游戏分站跨域登录 url | |
+
+**示例:**
+
+使用扫描秘钥`c3bd5286a2b40a822f5f60e9bf3f602e`登录
+
+```shell
+curl "https://passport.bilibili.com/qrcode/getLoginInfo"\
+--data-urlencode 'oauthKey=c3bd5286a2b40a822f5f60e9bf3f602e' \
+-c 'cookie.txt'
+```
+
+当密钥正确时但未扫描时`status`为`false`,`data`为`-4`
+
+
+查看响应示例:
+
+```json
+{
+ "status":false,
+ "data":-4,
+ "message":"Can't scan~"
+}
+```
+
+
+
+扫描成功但手机端未确认时`status`为`false`,`data`为`-5`
+
+
+查看响应示例:
+
+```json
+{
+ "status":false,
+ "data":-5,
+ "message":"Can't confirm~"
+}
+```
+
+
+
+扫描成功手机端确认登录后,`status`为`true`,`data`为对象,并向浏览器写入cookie
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "status": true,
+ "ts": 1583315474,
+ "data": {
+ "url": "https://passport.biligame.com/crossDomain?DedeUserID=***&DedeUserID__ckMd5=***&Expires=***&SESSDATA=***&bili_jct=***&gourl=http%3A%2F%2Fwww.bilibili.com"
+ }
+}
+```
+
+
+
+**响应头部抓包信息:**
+
+可明显看见设置了几个cookie
+
+
+查看响应示例:
+
+```http
+HTTP/1.1 200 OK
+Date: Wed, 04 Mar 2020 10:36:37 GMT
+Content-Type: application/json;charset=UTF-8
+Transfer-Encoding: chunked
+Connection: keep-alive
+Server: Apache-Coyote/1.1
+Set-Cookie: sid=***; Domain=.bilibili.com; Expires=Thu, 04-Mar-2021 10:36:37 GMT; Path=/
+Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/
+Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/
+Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/; HttpOnly
+Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/
+Expires: Wed, 04 Mar 2020 10:36:36 GMT
+Cache-Control: no-cache
+X-Cache-Webcdn: BYPASS from ks-sxhz-dx-w-01
+```
+
+
+
+
+
+## TV端扫码登录
+
+### 申请二维码(TV端)
+
+> https://passport.snm0516.aisee.tv/x/passport-tv-login/qrcode/auth_code
+>
+> https://passport.bilibili.com/x/passport-tv-login/qrcode/auth_code
+
+*请求方式:POST*
+
+鉴权方式:appkey
+
+密钥超时为180秒
+
+本接口可申请用于TV端APP方式登录的`access_key`
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ---------- | ------------ | -------------------------- |
+| appkey | str | APP 密钥 | APP 方式必要 | [可用](#appkey-可用列表) |
+| local_id | num | TV 端 id | TV 端必要 | 可为`0` |
+| ts | num | 当前时间戳 | APP 方式必要 | |
+| sign | str | APP 签名 | APP 方式必要 | |
+| mobi_app | str | 平台标识 | 非必要 | 会被拼接到返回的 url query |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|---------------------------------------|
+| code | num | 返回值 | 0:成功 -3:API校验密匙错误 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | -------------- | ------------ |
+| url | str | 二维码内容 url | |
+| auth_code | str | 扫码登录秘钥 | 恒为 32 字符 |
+
+**示例:**
+
+```shell
+curl 'https://passport.snm0516.aisee.tv/x/passport-tv-login/qrcode/auth_code' \
+--data-urlencode 'appkey=4409e2ce8ffd12b8' \
+--data-urlencode 'local_id=0' \
+--data-urlencode 'ts=0' \
+--data-urlencode 'sign=e134154ed6add881d28fbdf68653cd9c'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "url": "https://passport.bilibili.com/x/passport-tv-login/h5/qrcode/auth?auth_code=0eeb635a64526709d70cb4c854a3b001",
+ "auth_code": "0eeb635a64526709d70cb4c854a3b001"
+ }
+}
+```
+
+
+
+### 扫码登录(TV端)
+
+> https://passport.snm0516.aisee.tv/x/passport-tv-login/qrcode/poll
+>
+> https://passport.bilibili.com/x/passport-tv-login/qrcode/poll
+
+*请求方式:POST*
+
+鉴权方式:appkey
+
+密钥超时为180秒
+
+验证登录成功后会返回可用于APP方式登录的`access_key`以及`refresh_token`
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|-----------|-----|-------|---------|-----------------------|
+| appkey | str | APP密钥 | APP方式必要 |[可用](#appkey-可用列表) |
+| auth_code | str | 扫码秘钥 | 必要 | |
+| local_id | num | TV端id | TV端必要 | 可为0 |
+| ts | num | 当前时间戳 | APP方式必要 | |
+| sign | str | APP签名 | APP方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----------------------|------|--------------------------------------------------------------------------------------------------------------|
+| code | num | 返回值 | 0:成功 -3:API校验密匙错误 -400:请求错误 -404:啥都木有 86038:二维码已失效 86039:二维码尚未确认 86090:二维码已扫码未确认 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | 有效时:obj 无效时:null | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------------|-----|------------|---------------------|
+| mid | num | 登录用户mid | |
+| access_token | str | APP登录Token | |
+| refresh_token | str | APP刷新Token | |
+| expires_in | num | 有效时间 | 默认:15552000秒,等于180天 |
+
+**示例:**
+
+使用扫描秘钥`6214464b3025541abf6f654cf7569a01`进行验证登录
+
+```shell
+curl 'https://passport.snm0516.aisee.tv/x/passport-tv-login/qrcode/poll' \
+--data-urlencode 'appkey=4409e2ce8ffd12b8' \
+--data-urlencode 'auth_code=6214464b3025541abf6f654cf7569a01' \
+--data-urlencode 'local_id=0' \
+--data-urlencode 'ts=0' \
+--data-urlencode 'sign=87de3d0fee7c3f4facd244537238914e'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "is_new": false,
+ "mid": 10086,
+ "access_token": "********************************",
+ "refresh_token": "********************************",
+ "expires_in": 15552000,
+ "token_info": {
+ "mid": 10086,
+ "access_token": "********************************",
+ "refresh_token": "********************************",
+ "expires_in": 15552000
+ },
+ "cookie_info": {
+ "cookies": [
+ {
+ "name": "SESSDATA",
+ "value": "********************************",
+ "http_only": 1,
+ "expires": 1679988973,
+ "secure": 0
+ },
+ {
+ "name": "bili_jct",
+ "value": "********************************",
+ "http_only": 0,
+ "expires": 1679988973,
+ "secure": 0
+ },
+ {
+ "name": "DedeUserID",
+ "value": "*******",
+ "http_only": 0,
+ "expires": 1679988973,
+ "secure": 0
+ },
+ {
+ "name": "DedeUserID__ckMd5",
+ "value": "****************",
+ "http_only": 0,
+ "expires": 1679988973,
+ "secure": 0
+ },
+ {
+ "name": "sid",
+ "value": "********",
+ "http_only": 0,
+ "expires": 1679988973,
+ "secure": 0
+ }
+ ],
+ "domains": [
+ ".bilibili.com",
+ ".biligame.com",
+ ".bigfun.cn",
+ ".bigfunapp.cn",
+ ".dreamcast.hk"
+ ]
+ },
+ "sso": [
+ "https://passport.bilibili.com/api/v2/sso",
+ "https://passport.biligame.com/api/v2/sso",
+ "https://passport.bigfunapp.cn/api/v2/sso"
+ ]
+ }
+}
+```
+
+
+
+### appkey 可用列表
+
+**仅覆盖 [docs/misc/sign/APPKey](../../misc/sign/APPKey.md) 中包含的 appkey**
+
+| APPKEY | APPSEC | platform | APP类型 | neuronAppId | mobi_app2 | 备注 |
+| :--------------: | :------------------------------: | :------------------: | :----------------: | :---------------------: | :------------------: | :----------------------------------------: |
+| 783bbb7264451d82 | 2653583c8873dea268ab9386918b1d65 | `android` | 粉版 | `1` | `android` | 仅获取用户信息时使用(7.X及更新版本) |
+| 8d23902c1688a798 | 710f0212e62bd499b8d3ac6e1db9302a | `android` | AndroidBiliThings | ? | ? | |
+| bca7e84c2d947ac6 | 60698ba2f68e01ce44738920a0ffe768 | ? | login | - | ? | |
+| 27eb53fc9058f8c3 | c2ed53a74eeefe3cf99fbd01d8c9c375 | `web`/`ios`? | - | - | - | 第三方授权使用 |
+| 4409e2ce8ffd12b8 | 59b43e04ad6965f34319062b478f83dd | `android` | 云视听小电视(TV版) | `9`? | `android_tv_yst`? | |
+| dfca71928277209b | b5475a8825547a4fc26c7d518eaaa02e | `android` | HD 版 | `5` | `android_hd` | |
+
+**注意:**
+
+通过某一组 APPKEY/APPSEC 获取到的 access_token,当接口需要 `sign` 签名时也只能使用该组 APPKEY/APPSEC,否则出现 `{ code: -663, message: '鉴权失败,请联系账号组', ttl: 1 }` 错误。
+
+**例外:**
+
+`783bbb7264451d82`/`2653583c8873dea268ab9386918b1d65` 获取到的 access_token 可配合 `1d8b6e7d45233436`/`560c52ccd288fed045859ed18bffd973` 使用。
diff --git a/docs/login/login_action/SMS.md b/docs/login/login_action/SMS.md
new file mode 100644
index 0000000..21a8d53
--- /dev/null
+++ b/docs/login/login_action/SMS.md
@@ -0,0 +1,453 @@
+# 短信登录
+
+web端短信登录流程:
+
+1. [完成人机验证](readme.md)
+2. 发送短信,使用国际地区代码`cid`+手机号码`tel`+登录密钥`token`+极验`challenge`+验证结果`validate`+验证结果`seccode`
+3. 提交短信验证码以验证登录操作,使用国际地区代码`cid`+手机号码`tel`+短信验证码`code`
+
+## 获取国际冠字码_web端
+
+> https://passport.bilibili.com/web/generic/country/list
+
+*请求方式:GET*
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ------- |
+| code | num | 返回值 | 0:成功 |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ----- | ------------- | ---- |
+| common | array | 常用国家&地区 | |
+| others | array | 其他国家&地区 | |
+
+`data`中的`common`和`others`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ---- |
+| 0 | obj | 国家&地区1 | |
+| n | obj | 国家&地区(n+1) | |
+| …… | obj | …… | …… |
+
+`common`和`others`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ------------- | ---- |
+| id | num | 国际代码值 | |
+| cname | str | 国家&地区名 | |
+| country_id | str | 国家&地区区号 | |
+
+**示例:**
+
+```shell
+curl 'https://passport.bilibili.com/web/generic/country/list'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "data": {
+ "common": [
+ {
+ "id": 1,
+ "cname": "中国大陆",
+ "country_id": "86"
+ },
+ {
+ "id": 5,
+ "cname": "中国香港特别行政区",
+ "country_id": "852"
+ },
+ …………
+ ],
+ "others": [
+ {
+ "id": 22,
+ "cname": "阿富汗",
+ "country_id": "93"
+ },
+ {
+ "id": 20,
+ "cname": "阿尔巴尼亚",
+ "country_id": "355"
+ },
+ …………
+ ]
+ }
+}
+```
+
+
+
+
+## 发送短信验证码_app端
+
+> https://passport.bilibili.com/x/passport-login/sms/send
+
+*请求方式:POST*
+
+同手机号短信发送 CD 时间为 60s
+
+短信验证码 timeout 为 5min
+
+验证内容由第一次返回进行处理,解析recaptcha_url的params传到极验进行验证后取到验证结果入参后再次调用即可
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --- | --- | --- | --- | --- |
+| cid | num | 国际冠字码 | 必要 | 可以从[获取国际冠字码](#获取国际冠字码(web端))获取 |
+| tel | num | 手机号码 | 必要 | |
+| login_session_id | str | 登录标识 | 必要 | uuid去掉'-'后得到
+| recaptcha_token | str | 登录 API token | 必要 | 在[申请 captcha 验证码](readme.md#申请captcha验证码)接口处获取 |
+| gee_challenge | str | 极验 challenge | 必要 | 在[申请 captcha 验证码](readme.md#申请captcha验证码)接口处获取 |
+| gee_validate | str | 极验 result | 必要 | 极验验证后得到 |
+| gee_seccode | str | 极验 result +`\|jordan` | 必要 | 极验验证后得到 |
+| channel | str | 通道? | 必要 | 一般固定值为"bili" |
+| buvid | str | buvid | 必要 | 参考如下方法生成 |
+| local_id | str | 同上 | 必要 | 同上 |
+| statistics | str | ? | 必要 | 一般固定为{"appId":1,"platform":3,"version":"7.27.0","abtest":""},非key-value入参需要转URL编码 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | -------- | --------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 1002:手机号格式错误 86203:短信发送次数已达上限 1003:验证码已经发送 1025:该手机号在哔哩哔哩有过永久封禁记录,无法再次注册或绑定新账号 2400:登录秘钥错误 2406:验证极验服务出错 |
+| message | str | 错误信息 | 成功为0 |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | -------------- | ------------------------ |
+| captcha_key | str | 短信登录 token | 在下方传参时需要,请备用 |
+
+**示例:**
+
+例如手机号为`13888888888`,国际id为`1 (中国大陆)`,登录秘钥为`aabbccdd`,极验challenge为`2333`,极验结果为`666666`,进行发送短信验证码操作
+
+```shell
+curl 'https://passport.bilibili.com/x/passport-login/sms/send' \
+--data-urlencode 'tel=13888888888' \
+--data-urlencode 'cid=1' \
+--data-urlencode 'login_session_id=669900' \
+--data-urlencode 'recaptcha_token=aabbccdd' \
+--data-urlencode 'gee_challenge=2333' \
+--data-urlencode 'gee_validate=666666' \
+--data-urlencode 'gee_seccode=666666|jordan' \
+--data-urlencode 'channel=bili' \
+--data-urlencode 'buvid=999999' \
+--data-urlencode 'local_id=999999' \
+--data-urlencode 'statistics=%7B%22appId%22%3A1%2C%22platform%22%3A3%2C%22version%22%3A%227.27.0%22%2C%22abtest%22%3A%22%22%7D'
+```
+
+生成buvid方法
+``` javascript
+static buvid() : string {
+ var mac = [];
+ for (let i = 0; i < 6; i++) {
+ var min = Math.min(0, 0xff)
+ var max = Math.max(0, 0xff)
+ var num = parseInt((Math.random() * (min - max + 1) + max).toString()).toString(16)
+ mac.push(num)
+ }
+ var md5 = this.md5(mac.join(':'));
+ var md5Arr = md5.split('');
+ return "XY${md5Arr[2]}${md5Arr[12]}${md5Arr[22]}${md5}"
+}
+```
+
+
+查看响应示例:
+
+```json
+{"code":0,
+ "message":"0",
+ "ttl":1,
+ "data":{
+ "captcha_key":"7542f109c3318d74847626495c68c321",
+ "recaptcha_url":"...."
+ }
+}
+```
+
+
+
+## 发送短信验证码_web端
+
+> https://passport.bilibili.com/x/passport-login/web/sms/send
+
+*请求方式:POST*
+
+同手机号短信发送 CD 时间为 60s
+
+短信验证码 timeout 为 5min
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --- | --- | --- | --- | --- |
+| cid | num | 国际冠字码 | 必要 | 可以从[获取国际冠字码](#获取国际冠字码(web端))获取 |
+| tel | num | 手机号码 | 必要 | |
+| source | str | 登录来源 | 必要 | `main_web`:独立登录页 `main_mini`:小窗登录 |
+| token | str | 登录 API token | 必要 | 在[申请 captcha 验证码](readme.md#申请captcha验证码)接口处获取 |
+| challenge | str | 极验 challenge | 必要 | 在[申请 captcha 验证码](readme.md#申请captcha验证码)接口处获取 |
+| validate | str | 极验 result | 必要 | 极验验证后得到 |
+| seccode | str | 极验 result +`\|jordan` | 必要 | 极验验证后得到 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | -------- | --------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 1002:手机号格式错误 86203:短信发送次数已达上限 1003:验证码已经发送 1025:该手机号在哔哩哔哩有过永久封禁记录,无法再次注册或绑定新账号 2400:登录秘钥错误 2406:验证极验服务出错 |
+| message | str | 错误信息 | 成功为0 |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | -------------- | ------------------------ |
+| captcha_key | str | 短信登录 token | 在下方传参时需要,请备用 |
+
+**示例:**
+
+例如手机号为`13888888888`,国际id为`1 (中国大陆)`,登录秘钥为`aabbccdd`,极验challenge为`2333`,极验结果为`666666`,进行发送短信验证码操作
+
+```shell
+curl 'https://passport.bilibili.com/x/passport-login/web/sms/send' \
+--data-urlencode 'tel=13888888888' \
+--data-urlencode 'cid=1' \
+--data-urlencode 'source=main_web' \
+--data-urlencode 'token=aabbccdd' \
+--data-urlencode 'challenge=2333' \
+--data-urlencode 'validate=666666' \
+--data-urlencode 'seccode=666666|jordan'
+```
+
+
+查看响应示例:
+
+```json
+{"code":0,
+ "message":"0",
+ "ttl":1,
+ "data":{
+ "captcha_key":"7542f109c3318d74847626495c68c321"
+ }
+}
+```
+
+
+
+## 使用短信验证码登录_app端
+
+> https://passport.bilibili.com/x/passport-login/login/sms
+
+*请求方式:POST*
+
+验证登录成功后会返回实体内容:
+
+ `mid` `expires_in` `access_token` `refresh_token`
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --- | --- | --- | --- | --- |
+| cid | num | 国际冠字码 | 必要 | 可以从[获取国际冠字码](#获取国际冠字码(web端))获取 |
+| tel | num | 手机号码 | 必要 | |
+| login_session_id | str | 登录标识 | 必要 | 必须与上述login_session_id保持一致
+| code | num | 短信验证码 | 必要 | timeout 为 5min |
+| captcha_key | str | 短信登录 token | 必要 | 从[上述API](#发送短信验证码(web端))请求成功后返回 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0:成功 -400:请求错误 1006:请输入正确的短信验证码 1007:短信验证码已过期 |
+| message | str | 错误信息 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| mid | str | 用户uid | |
+| expires_in | str | 过时时间 | |
+| access_token | str | 登录 token | |
+| refresh_token | str | 刷新 token | |
+| cookie_info | Array | cookie集合 | |
+
+**示例:**
+
+使用手机号`13888888888`,短信验证码为`123456`,进行验证登录操作
+
+```shell
+curl 'https://passport.bilibili.com/x/passport-login/login/sms'
+--data-urlencode 'cid=1' \
+--data-urlencode 'tel=13888888888' \
+--data-urlencode 'code=123456' \
+--data-urlencode 'captcha_key=999999' \
+--data-urlencode 'login_session_id=669900'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "data": {
+ "token_info": {
+ "mid": "...",
+ "expires_in": "114514",
+ "access_token": "",
+ "refresh_token": ""
+ //...
+ },
+ "cookie_info":[
+ //...
+ ],
+ "message": "0"
+ }
+}
+```
+
+
+
+**响应头部抓包信息:**
+
+可明显看见设置了几个cookie(填入浏览器即可成功登录)
+
+
+查看响应示例:
+
+```http
+HTTP/1.1 200 OK
+Date: Mon, 13 Jul 2020 09:57:33 GMT
+Content-Type: application/json;charset=UTF-8
+Content-Length: 78
+Connection: keep-alive
+Server: Apache-Coyote/1.1
+Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
+Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
+Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/; HttpOnly
+Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
+Set-Cookie: sid=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
+Expires: Mon, 13 Jul 2020 09:57:32 GMT
+Cache-Control: no-cache
+X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01
+
+```
+
+
+
+
+## 使用短信验证码登录_web端
+
+> https://passport.bilibili.com/x/passport-login/web/login/sms
+
+*请求方式:POST*
+
+验证登录成功后会进行设置以下cookie项:
+
+ `DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct`
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --- | --- | --- | --- | --- |
+| cid | num | 国际冠字码 | 必要 | 可以从[获取国际冠字码](#获取国际冠字码(web端))获取 |
+| tel | num | 手机号码 | 必要 | |
+| code | num | 短信验证码 | 必要 | timeout 为 5min |
+| source | str | 登录来源 | 必要 | `main_web`:独立登录页 `main_mini`:小窗登录 |
+| captcha_key | str | 短信登录 token | 必要 | 从[上述API](#发送短信验证码(web端))请求成功后返回 |
+| go_url | str | 跳转url | 非必要 | 默认为 https://www.bilibili.com |
+| keep | bool | 是否记住登录 | 非必要 | `true`:记住登录 `false`:不记住登录 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0:成功 -400:请求错误 1006:请输入正确的短信验证码 1007:短信验证码已过期 |
+| message | str | 错误信息 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| is_new | bool | 是否为新注册用户 | false:非新注册用户 true:新注册用户 |
+| status | num | 0 | 未知,可能0就是成功吧 |
+| url | str | 跳转 url | 默认为 https://www.bilibili.com |
+
+**示例:**
+
+使用手机号`13888888888`,短信验证码为`123456`,进行验证登录操作
+
+```shell
+curl 'https://passport.bilibili.com/x/passport-login/web/login/sms'
+--data-urlencode 'cid=1' \
+--data-urlencode 'tel=13888888888' \
+--data-urlencode 'code=123456'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "data": {
+ "is_new": false,
+ "status": 0,
+ "url": "https://space.bilibili.com"
+ }
+}
+```
+
+
+
+**响应头部抓包信息:**
+
+可明显看见设置了几个cookie(填入浏览器即可成功登录)
+
+
+查看响应示例:
+
+```http
+HTTP/1.1 200 OK
+Date: Mon, 13 Jul 2020 09:57:33 GMT
+Content-Type: application/json;charset=UTF-8
+Content-Length: 78
+Connection: keep-alive
+Server: Apache-Coyote/1.1
+Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
+Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
+Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/; HttpOnly
+Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
+Set-Cookie: sid=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
+Expires: Mon, 13 Jul 2020 09:57:32 GMT
+Cache-Control: no-cache
+X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01
+
+```
+
+
diff --git a/docs/login/login_action/password.md b/docs/login/login_action/password.md
new file mode 100644
index 0000000..ffc3d01
--- /dev/null
+++ b/docs/login/login_action/password.md
@@ -0,0 +1,788 @@
+# 密码登录
+
+## 密码登录流程(伪代码)
+
+```python
+账号 = '2333333'
+密码字符串 = 'password'
+
+# 1.人机验证步骤
+token, gt, challenge = 获取验证码()
+validate = 填写验证码(gt, challenge) # 这一步填写验证码 (访问极验API,得到validate)
+
+# 2.密码加密步骤
+pubkey, salt = 获取公钥和盐()
+加密后的密码 = RSA公钥加密(pubkey, salt+密码字符串) # 盐需要加在密码字符串前
+base64编码后的密文 = base64编码(加密后的密码)
+
+# 3.开始登录
+cookie = 密码登录(账号, base64编码后的密文, token, challenge, validate)
+存储cookie(cookie)
+SSO登录页面跳转()
+```
+
+## web端密码登录
+
+### 获取公钥&盐(web端)
+
+> https://passport.bilibili.com/x/passport-login/web/key
+
+*请求方式:GET*
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|------|
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------|-----|--------|------------------------------------------|
+| hash | str | 密码盐值 | 有效时间为 20s 恒为 16 字符 需要拼接在明文密码之前 |
+| key | str | rsa 公钥 | PEM 格式编码 加密密码时需要使用 |
+
+**示例:**
+
+```shell
+curl 'https://passport.bilibili.com/x/passport-login/web/key'
+```
+
+
+查看响应示例:
+
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "hash": "9333681c87fd8d6e",
+ "key": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n\n6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx\n/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+\nXl69GV6klzgxW6d2xQIDAQAB\n-----END PUBLIC KEY-----\n"
+ }
+}
+```
+
+
+
+### 登录操作(web端)
+
+> https://passport.bilibili.com/x/passport-login/web/login
+
+*请求方式:POST*
+
+验证登录成功后会进行设置以下 cookie 项:
+
+`sid` `DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct`
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --------- | ---- | ---------------------- | ------ | ------------------------------------------------------------ |
+| username | str | 用户登录账号 | 必要 | 手机号或邮箱地址 |
+| password | str | 加密后的带盐密码 | 必要 | base64 格式 |
+| keep | num | 0 | 必要 | |
+| token | str | 登录 token | 必要 | 在[申请 captcha 验证码](readme.md#申请captcha验证码)接口处获取 |
+| challenge | str | 极验 challenge | 必要 | 在[申请 captcha 验证码](readme.md#申请captcha验证码)接口处获取 |
+| validate | str | 极验 result | 必要 | 极验验证后得到 |
+| seccode | str | 极验 result +`\|jordan` | 必要 | 极验验证后得到 |
+| go_url | str | 跳转 url | 非必要 | 默认为 https://www.bilibili.com |
+| source | str | 登录来源 | 非必要 | `main_web`:独立登录页 `main_mini`:小窗登录 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----------------------|------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| code | num | 返回值 | 0:成功 -105:验证码错误 -400:请求错误 -629:账号或密码错误 -653:用户名或密码不能为空 -662:提交超时,请重新提交 -2001:缺少必要的的参数 -2100:需验证手机号或邮箱 2400:登录秘钥错误 2406:验证极验服务出错 86000:RSA解密失败 |
+| message | str | 错误信息 | |
+| data | 成功时:obj 失败时:null | 数据本体 | |
+
+data 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------------|-----|-------------------|------------------------|
+| message | str | 扫码状态信息 | 若提示 `本次登录环境存在风险, 需使用手机号进行验证或绑定`, 参见 [手机号验证](#手机号验证) |
+| refresh_token | str | 刷新`refresh_token` | |
+| status | num | 0 | |
+| timestamp | num | 登录时间 | 未登录为`0` 时间戳 单位为毫秒 |
+| url | str | 游戏分站跨域登录 url | |
+
+**示例:**
+
+例如用户账号为`12345678900`,加密后的密码为`xxx`,登录秘钥为`aabbccdd`,极验challenge为`2333`,极验结果为`666666`,进行验证登录操作
+
+```shell
+curl 'https://passport.bilibili.com/x/passport-login/web/login' \
+--data-urlencode 'username=12345678900' \
+--data-urlencode 'password=xxx' \
+--data-urlencode 'keep=0' \
+--data-urlencode 'source=main_web' \
+--data-urlencode 'token=aabbccdd' \
+--data-urlencode 'challenge=2333' \
+--data-urlencode 'validate=666666' \
+--data-urlencode 'seccode=666666|jordan'
+```
+
+
+查看响应示例:
+
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "status": 0,
+ "message": "",
+ "url": "https://passport.biligame.com/crossDomain?DedeUserID=***&DedeUserID__ckMd5=***&Expires=***&SESSDATA=***&bili_jct=***&gourl=https%3A%2F%2Fwww.bilibili.com%2F",
+ "refresh_token": "***",
+ "timestamp": 1662452570273
+ }
+}
+
+```
+
+
+
+**响应头部抓包信息:**
+
+可明显看见设置了几个 cookie
+
+
+查看响应示例:
+
+```http
+HTTP/1.1 200 OK
+Date: Mon, 13 Jul 2020 06:56:00 GMT
+Content-Type: application/json;charset=UTF-8
+Content-Length: 273
+Connection: keep-alive
+Server: Apache-Coyote/1.1
+Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/
+Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/
+Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/; HttpOnly
+Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/
+Content-Security-Policy-Report-Only: default-src 'self' data: *.bilibili.com *.hdslb.com; style-src 'self' 'unsafe-inline' *.hdslb.com static.geetest.com; img-src 'self' data: blob: *.bilibili.com *.hdslb.com http://*.hdslb.com static.geetest.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.bilibili.com *.hdslb.com api.geetest.com static.geetest.com; object-src 'self' *.hdslb.com; media-src 'self' *.acgvideo.com http://*.acgvideo.com *.ksyungslb.com; connect-src 'self' data: wss://*.bilibili.com:* *.bilibili.com *.hdslb.com *.biliapi.net *.biliapi.com; frame-ancestors 'self' *.bilibili.com *.biligame.com; report-uri https://security.bilibili.com/csp_report
+Expires: Mon, 13 Jul 2020 06:55:59 GMT
+Cache-Control: no-cache
+X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01
+```
+
+
+
+## web端密码登录-旧版
+
+以下为密码扫码登录 API,尚可正常访问
+
+### 获取公钥&盐(web端-旧版)
+
+> https://passport.bilibili.com/login?act=getkey
+
+*请求方式:GET*
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------|-----|--------|------------------------------------------|
+| hash | str | 密码盐值 | 有效时间为 20s 恒为 16 字符 需要拼接在明文密码之前 |
+| key | str | rsa 公钥 | PEM 格式编码 加密密码时需要使用 |
+
+**示例:**
+
+```shell
+curl 'https://passport.bilibili.com/login?act=getkey'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "hash":"07c6501690c1af85",
+ "key":"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n\n6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx\n/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+\nXl69GV6klzgxW6d2xQIDAQAB\n-----END PUBLIC KEY-----\n"
+}
+```
+
+
+
+### 登录操作(web端-旧版)
+
+
+> https://passport.bilibili.com/web/login/v2
+
+*请求方式:POST*
+
+验证登录成功后会进行设置以下cookie项:
+
+`sid` `DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct`
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----------- | ---- | ---------------------- | ------ | ------------------------------------------------------------ |
+| captchaType | num | 6 | 必要 | 必须为`6` |
+| username | str | 用户登录账号 | 必要 | 手机号或邮箱地址 |
+| password | str | 加密后的带盐密码 | 必要 | base64 格式 |
+| keep | bool | 是否记住登录 | 必要 | `true`:记住登录 `false`:不记住登录 |
+| key | str | 登录 token | 必要 | 在[申请 captcha 验证码](readme.md#申请captcha验证码)接口处获取 |
+| challenge | str | 极验 challenge | 必要 | 在[申请 captcha 验证码](readme.md#申请captcha验证码)接口处获取 |
+| validate | str | 极验 result | 必要 | 极验验证后得到 |
+| seccode | str | 极验 result +`\|jordan` | 必要 | 极验验证后得到 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| code | num | 返回值 | 0:成功 -400:请求错误 -629:账号或密码错误 -653:用户名或密码不能为空 -662:提交超时,请重新提交 -2001:缺少必要的的参数 -2100:需验证手机号或邮箱 2400:登录秘钥错误 2406:验证极验服务出错 86000:RSA解密失败 |
+| ts | num | 当前时间戳 | 成功时无此项 |
+| message | str | 错误信息 | 默认为0 |
+| data | obj | 数据本体 | 成功时有此项 |
+
+`data`对象:
+
+**未登录时:**
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------|-----|--------------|-----|
+| redirectUrl | str | 游戏分站跨域登录 url | |
+
+**已登录时:**
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|------|--------------------------|-----|
+| isLogin | bool | true | |
+| goUrl | str | https://www.bilibili.com | |
+
+**需验证手机号或邮箱时**
+
+| 字段 | 类型 | 内容 | 备注 |
+|----------|-----|--------------------------|------------|
+| mid | num | 用户 mid | |
+| tel | str | 绑定的手机号 | 星号隐藏部分信息 |
+| email | str | 绑定的邮箱 | 星号隐藏部分信息 |
+| sorce | num | 0 | **作用尚不明确** |
+| keeptime | num | 1 | **作用尚不明确** |
+| goUrl | str | https://www.bilibili.com | |
+
+**示例:**
+
+例如用户账号为`12345678900`,加密后的密码为`xxx`,登录秘钥为`aabbccdd`,极验challenge为`2333`,极验结果为`666666`,进行验证登录操作
+
+```shell
+curl 'https://passport.bilibili.com/web/login/v2' \
+--data-urlencode 'captchaType=6' \
+--data-urlencode 'username=12345678900' \
+--data-urlencode 'password=xxx' \
+--data-urlencode 'keep=true' \
+--data-urlencode 'token=aabbccdd' \
+--data-urlencode 'challenge=2333' \
+--data-urlencode 'validate=666666' \
+--data-urlencode 'seccode=666666|jordan'
+```
+
+
+查看响应示例:
+
+
+```json
+{
+ "code": 0,
+ "data": {
+ "redirectUrl": "https://passport.biligame.com/crossDomain?DedeUserID=***&DedeUserID__ckMd5=***&Expires=15551000&SESSDATA=***&bili_jct=***&gourl=https%3A%2F%2Fwww.bilibili.com"
+ }
+}
+```
+
+
+
+**响应头部抓包信息:**
+
+可明显看见设置了几个 cookie
+
+
+查看响应示例:
+
+```http
+HTTP/1.1 200 OK
+Date: Mon, 13 Jul 2020 06:56:00 GMT
+Content-Type: application/json;charset=UTF-8
+Content-Length: 273
+Connection: keep-alive
+Server: Apache-Coyote/1.1
+Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/
+Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/
+Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/; HttpOnly
+Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/
+Content-Security-Policy-Report-Only: default-src 'self' data: *.bilibili.com *.hdslb.com; style-src 'self' 'unsafe-inline' *.hdslb.com static.geetest.com; img-src 'self' data: blob: *.bilibili.com *.hdslb.com http://*.hdslb.com static.geetest.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.bilibili.com *.hdslb.com api.geetest.com static.geetest.com; object-src 'self' *.hdslb.com; media-src 'self' *.acgvideo.com http://*.acgvideo.com *.ksyungslb.com; connect-src 'self' data: wss://*.bilibili.com:* *.bilibili.com *.hdslb.com *.biliapi.net *.biliapi.com; frame-ancestors 'self' *.bilibili.com *.biligame.com; report-uri https://security.bilibili.com/csp_report
+Expires: Mon, 13 Jul 2020 06:55:59 GMT
+Cache-Control: no-cache
+X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01
+```
+
+
+
+## APP端密码登录
+
+### 获取公钥&盐(APP端)
+
+> http://passport.bilibili.com/api/oauth2/getKey
+
+*请求方式:POST*
+
+鉴权方式:appkey
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|--------|-----|-------|---------|-----|
+| appkey | str | APP密钥 | APP方式必要 | |
+| sign | str | APP签名 | APP方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------|-----|--------|------------------------------------------|
+| hash | str | 密码盐值 | 有效时间为 20s 恒为 16 字符 需要拼接在明文密码之前 |
+| key | str | rsa 公钥 | PEM 格式编码 加密密码时需要使用 |
+
+**示例:**
+
+```shell
+curl 'https://passport.bilibili.com/api/oauth2/getKey' \
+--data-urlencode 'appkey=1d8b6e7d45233436' \
+--data-urlencode 'sign=17004c193f688f0b5665c1068e733aff'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "hash": "07c6501690c1af85",
+ "key": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n\n6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx\n/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+\nXl69GV6klzgxW6d2xQIDAQAB\n-----END PUBLIC KEY-----\n"
+}
+```
+
+
+
+### 登录操作(APP端)
+
+TODO
+
+## 登录密码的加密实例
+
+以下实例使用 Python 语言,在任何平台(web、APP)使用密码登录都需要如下加密步骤
+
+首先在需拉取 RSA PubKey 和 salt 备用
+
+```python
+import requests
+
+resp = requests.get('https://passport.bilibili.com/x/passport-login/web/key').json()['data']
+print('salt =', resp['hash'])
+print('PubKey =', resp['key'])
+```
+
+`hash`字段为 salt,长度固定为 16 字符,timeout 时间只有 20s
+
+`key`字段为 RSA PubKey,为 PEM 格式,加密需要使用
+
+```
+salt = 9773d106a67e27d6
+PubKey = -----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n
+6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx
+/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+
+Xl69GV6klzgxW6d2xQIDAQAB
+-----END PUBLIC KEY-----
+```
+
+例如登录密码为`BiShi22332323`,现在对它进行加盐并使用获取的 PubKey 加密
+
+```python
+import rsa
+password = 'BiShi22332323'
+
+pubKey = rsa.PublicKey.load_pkcs1_openssl_pem(resp['key']) # 读取 PEM 密钥
+encryptedPassword = rsa.encrypt((resp['hash']+password).encode(), pubKey) # 盐需要加在明文密码之前,一并加密
+print(encryptedPassword)
+```
+
+下面将输出一段 bytes 数据:
+
+```
+b'}\x9c\xd4\xcd\x88\x92\xa7\xde\x85\xdb\xabm\xd7\xd3\x08\x02@xo\x85\xa4\xe1\x11\xd0o\x80\x03.$\xc8l\xbe\xba;\xfe\xee\xa7(\xf8S\x95\x1e\x9106\xa4\x1d\xcf\x8e\xbe\x8d\x94A\x86s\xf9"\x12\x0c\x135\xbb\xbc\xe1\xde\x1b\x90\t)P\xeb\xa9\x8fXY]\x83\x18\x81f\n:\xdb\xe1\xbe\xe8\x1e\xba\x1c D8d}B\x17\xf9\x8a\xf0i\'1\xa5\xc4\x05&\xaa;n\xf8{\xa02\xffY\xcelU\xd5\xaf\x8aJK\xdc\xf1@\xbc\x93'
+```
+
+接下来需要把加密后的结果进行 base64 编码
+
+```python
+import base64
+b64Password = base64.b64encode(encryptedPassword).decode()
+print('result =', b64Password)
+```
+
+以下为最终加密结果,可直接向 API 请求体传参以登录:
+
+因为 RSA 公钥加密的**无法解密性**,故无法本地验证,仅可请求 API 验证(略...
+
+```
+result = fZzUzYiSp96F26tt19MIAkB4b4Wk4RHQb4ADLiTIbL66O/7upyj4U5UekTA2pB3Pjr6NlEGGc/kiEgwTNbu84d4bkAkpUOupj1hZXYMYgWYKOtvhvugeuhwgRDhkfUIX+YrwaScxpcQFJqo7bvh7oDL/Wc5sVdWvikpL3PFAvJM=
+```
+
+以下为密码加密的Java实现:
+
+```java
+package com.ho.test;
+
+import cn.hutool.core.codec.Base64;
+
+import javax.crypto.Cipher;
+import java.security.KeyFactory;
+import java.security.PublicKey;
+import java.security.spec.X509EncodedKeySpec;
+
+public class Test3 {
+ public static void main(String[] args) throws Exception {
+ //用户密码
+ String password = "abcdef";
+ //获取到的证书内容
+ String key = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n\n6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx\n/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+\nXl69GV6klzgxW6d2xQIDAQAB\n-----END PUBLIC KEY-----\n";
+ //获取到的盐值
+ String hash = "bb73382121594c46";
+ String[] split = key.strip().split("\n");
+ String newKey = split[1] + split[2] + split[3] + split[4];
+ //进行加密
+ KeyFactory keyFactory = KeyFactory.getInstance("RSA");
+ X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.decode(newKey));
+ PublicKey publicKey = keyFactory.generatePublic(keySpec);
+ Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
+ cipher.init(Cipher.PUBLIC_KEY, publicKey);
+ byte[] bytes = cipher.doFinal((hash + password).getBytes());
+ String encode = Base64.encode(bytes);
+ System.out.println(encode);
+ }
+}
+
+```
+
+## 手机号验证
+
+### 简述
+
+有时使用密码登录时, 无论使用网页端还是手机端接口, 由于 请求头缺失/请求频率高/请求IP 等原因, 会返回如下内容, 此时需要进行手机号验证或绑定
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "is_new": false,
+ "status": 2,
+ "message": "本次登录环境存在风险, 需使用手机号进行验证或绑定",
+ "url": "https://passport.bilibili.com/h5-app/passport/risk/verify?tmp_token=imtmptk&request_id=imreqid&source=risk",
+ "refresh_token": "",
+ "timestamp": 0,
+ "hint": "",
+ "in_reg_audit": 0
+ }
+}
+```
+
+### 获取 captcha
+
+> https://passport.bilibili.com/x/safecenter/captcha/pre
+
+*请求方法: POST*
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | ---- | ---- | ---- | ---- |
+| source | str | risk | 不必要 | |
+
+**JSON 回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0: 成功 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| recaptcha_type | str | 验证码类型 | 目前仅 `geetest` |
+| recaptcha_token | str | 验证码 token | |
+| gee_challenge | str | 极验 challenge | |
+| gee_gt | str | 极验 gt | |
+
+**示例:**
+
+```shell
+curl -X POST 'https://passport.bilibili.com/x/safecenter/captcha/pre'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "recaptcha_type": "geetest",
+ "recaptcha_token": "8a418aa9eebe411599d759fc318d55e1",
+ "gee_challenge": "4e5353e7ab9f9aef0c97fa5a5b1ad101",
+ "gee_gt": "ac597a4506fee079629df5d8b66dd4fe"
+ }
+}
+```
+
+
+
+### 发送验证码
+
+> https://passport.bilibili.com/x/safecenter/common/sms/send
+
+*请求方法: POST*
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | - | ---- | ---- | ---- |
+| tmp_code| str | url query 中的 tmp_code | 必要 | 参见 [简述](#简述) 中 JSON 示例中的 `url` |
+| sms_type | str | `loginTelCheck` | 必要 | |
+| recaptcha_token | str | 验证码 token | 必要 | 参见 [获取 captcha](#获取-captcha) |
+| gee_challenge | str | 极验 challenge | 必要 | 参见 [获取 captcha](#获取-captcha) |
+| gee_validate | str | 极验 validate | 必要 | 验证后获得 |
+| gee_seccode | str | 极验 seccode | 必要 | 验证后获得 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0: 成功 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | -- | - |
+| captcha_key | str | 验证码 key | |
+
+**示例:**
+
+假设 `tmp_code` 为 `imtmptk`,
+`recaptcha_token` 为 `kfc`,
+`gee_challenge` 为 `crazythursday`,
+`gee_validate` 为 `vivo50`,
+`gee_seccode` 为 `vivo50|jordan`
+
+```shell
+curl -X POST 'https://passport.bilibili.com/x/safecenter/common/sms/send' \
+--data-urlencode 'tmp_code=imtmptk' \
+--data-urlencode 'sms_type=loginTelCheck' \
+--data-urlencode 'recaptcha_token=kfc' \
+--data-urlencode 'gee_challenge=crazythursday' \
+--data-urlencode 'gee_validate=vivo50' \
+--data-urlencode 'gee_seccode=vivo50|jordan'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "captcha_key": "42403fb08ed2cd97afff14edefbae482"
+ }
+}
+```
+
+
+
+### 验证手机验证码
+
+> https://passport.bilibili.com/x/safecenter/login/tel/verify
+
+*请求方法: POST*
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | - | ---- | ---- | ---- |
+| tmp_code | str | url query 中的 tmp_code | 必要 | 参见 [简述](#简述) 中 JSON 示例中的 `url` |
+| captcha_key | str | 验证码 key | 必要 | 参见 [发送验证码](#发送验证码) |
+| type | str | `loginTelCheck` | 必要 | |
+| code | num | 接收到的验证码 | 必要 | |
+| request_id | str | url query 中的 request_id | 必要 | 参见 [简述](#简述) 中 JSON 示例中的 `url` |
+| source | str | risk | 必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0: 成功 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | str | 交换代码 | 用于后面 [交换 Cookie](#交换-cookie) |
+
+**示例:**
+
+假设 `tmp_code` 为 `imtmptk`,
+`captcha_key` 为 `42403fb08ed2cd97afff14edefbae482`,
+`code` 为 `114514`,
+`request_id` 为 `imreqid`
+
+```shell
+curl -X POST 'https://passport.bilibili.com/x/safecenter/login/tel/verify' \
+--data-urlencode 'tmp_code=imtmptk' \
+--data-urlencode 'captcha_key=42403fb08ed2cd97afff14edefbae482' \
+--data-urlencode 'type=loginTelCheck' \
+--data-urlencode 'code=114514' \
+--data-urlencode'request_id=imreqid' \
+--data-urlencode'source=risk'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "code": "6eadf783c55a387b143773282b217682"
+ }
+}
+```
+
+
+
+### 交换 Cookie
+
+> https://passport.bilibili.com/x/passport-login/web/exchange_cookie
+
+*请求方法: POST*
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | - | ---- | ---- | ---- |
+| source | str | risk | 必要 | |
+| code | str | 交换代码 | 必要 | 参见 [验证手机验证码](#验证手机验证码) |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0: 成功 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | - | - |
+| url | str | 游戏分站跨域登录 url | |
+| refresh_token | str | 刷新 token | |
+
+**示例:**
+
+假设 `code` 为 `6eadf783c55a387b143773282b217682`
+
+```shell
+curl -X POST 'https://passport.bilibili.com/x/passport-login/web/exchange_cookie' \
+--data-urlencode 'code=6eadf783c55a387b143773282b217682' \
+--data-urlencode'source=risk'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "url": "https://passport.biligame.com/x/passport-login/web/crossDomain?DedeUserID=645769214&DedeUserID__ckMd5=653409864bf9e200&Expires=1739265009&SESSDATA=11d97d2a,1739265009,928d7*82CjCKOhDRm5gROpSfgQ7B2axGVMWm5LuwNTkNDK2vjeGl7xvAsfsCINKmczXvO_Z45FsSVlJ1NHdlYlpSei1lYjdqUXRMaUpuRk9GbjVPS0psc3ZTcDFGRjhnNGhIbHRlZ0ZQRWQ1MUlUY2pnQ0lkTVRYNjlabmlUWGxHcVdkV3hrcElpa0ZEZEZRIIEC&bili_jct=3cdee5b84eb48d4f08bcfd57b58cf40b&gourl=https%3A%2F%2Fwww.bilibili.com%2F&first_domain=.bilibili.com",
+ "refresh_token": "43de156ad241864640f9d9721656a682"
+ }
+}
+```
+
+
+
+
+查看响应头部示例:
+
+```http
+HTTP/2 200 OK
+date: Thu, 15 Aug 2024 09:10:09 GMT
+content-type: application/json; charset=utf-8
+access-control-allow-credentials: true
+access-control-allow-methods: GET,POST,PUT,DELETE
+access-control-allow-origin: https://passport.bilibili.com
+bili-status-code: 0
+bili-trace-id: 175262647666bdc5
+set-cookie: SESSDATA=xxxxxxx; Path=/; Domain=bilibili.com; Expires=Tue, 11 Feb 2025 09:10:09 GMT; HttpOnly; Secure
+set-cookie: bili_jct=xxxxxxxxxxxxxxxxxxxxxxxxx; Path=/; Domain=bilibili.com; Expires=Tue, 11 Feb 2025 09:10:09 GMT
+set-cookie: DedeUserID=114514191; Path=/; Domain=bilibili.com; Expires=Tue, 11 Feb 2025 09:10:09 GMT
+set-cookie: DedeUserID__ckMd5=0123456789abcdef; Path=/; Domain=bilibili.com; Expires=Tue, 11 Feb 2025 09:10:09 GMT
+set-cookie: sid=xxxxxxxx; Path=/; Domain=bilibili.com; Expires=Tue, 11 Feb 2025 09:10:09 GMT
+vary: Origin
+x-bili-trace-id: 60f0305e2abc511d175262647666bdc5
+access-control-allow-headers: Origin,No-Cache,X-Requested-With,If-Modified-Since,Pragma,Last-Modified,Cache-Control,Expires,Content-Type,Access-Control-Allow-Credentials,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Cache-Webcdn,x-bilibili-key-real-ip,x-backend-bili-real-ip,x-risk-header
+cross-origin-resource-policy: cross-origin
+access-control-expose-headers: X-Bili-Gaia-Vvoucher,X-Bili-Trace-Id
+expires: Thu, 15 Aug 2024 09:10:08 GMT
+cache-control: no-cache
+x-cache-webcdn: BYPASS from blzone01
+content-encoding: br
+X-Firefox-Spdy: h2
+```
+
+
diff --git a/login/login_action/readme.md b/docs/login/login_action/readme.md
similarity index 51%
rename from login/login_action/readme.md
rename to docs/login/login_action/readme.md
index 05fb8aa..f891531 100644
--- a/login/login_action/readme.md
+++ b/docs/login/login_action/readme.md
@@ -1,6 +1,6 @@
# 登录操作
-人机验证方式登录包含**账号密码登录**与手**机短信验证码登录**
+人机验证方式登录包含**账号密码登录**与**手机短信验证码登录**
**注:扫码登录**不需要进行**人机验证**,故**不使用**以下接口
@@ -16,13 +16,14 @@
2. 进行滑动or点击验证
3. 返回验证结果`validate`与`seccode`,进行短信或密码登录
-
-### 申请验证码参数
+### 申请captcha验证码
> https://passport.bilibili.com/x/passport-login/captcha?source=main_web
*请求方式:GET*
+注: 另外参见 [密码登录-手机号验证-获取 captcha](password.md#获取-captcha)
+
**json回复:**
根对象:
@@ -31,17 +32,17 @@
| ------ | ---- | -------- | --------- |
| code | num | 返回值 | 0:成功 |
| message | str | 返回信息 | |
-| ttl | num | 1 | **作用尚不明确** |
+| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| -------- | ----- | ------ | -------- |
-| geetest | obj | 套了个娃 | |
-| tencent | obj | 套了个娃 | **作用尚不明确** |
-| token | str | 极验token | 与人机验证无关,与登录接口有关 |
-| type | str | 验证方式 | 用于判断使用哪一种验证方式,目前所见只有极验 |
+| geetest | obj | 极验captcha数据 | |
+| tencent | obj | (?) | **作用尚不明确** |
+| token | str | 登录 API token | 与 captcha 无关,与登录接口有关 |
+| type | str | 验证方式 | 用于判断使用哪一种验证方式,目前所见只有极验 geetest:极验 |
`geetest`对象:
@@ -80,9 +81,74 @@ curl 'https://passport.bilibili.com/x/passport-login/captcha?source=main_web'
+### 申请captcha验证码 (旧版)
+
+> http://passport.bilibili.com/web/captcha/combine
+
+*请求方式:GET*
+
+该接口曾从文档移除过, 经过测试仍可正常使用
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------ | ------ | ---- |
+| plat | num | 平台类型 | 必要 | 默认为 6 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | -------- | --------- |
+| code | num | 返回值 | 0:成功 |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ----- | ------ | -------- |
+| result | obj | 套了个娃 | |
+| type | num | 1 | **作用尚不明确** |
+
+`result`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ----- | ------ | -------- |
+| success | num | 1 | **作用尚不明确** |
+| gt | str | 极验id | 一般为固定值 |
+| challenge | str | 极验KEY | 由B站后端产生用于人机验证 |
+| key | str | 登录秘钥 | 与 captcha 无关, 与登录接口有关, 亦作 token |
+
+**示例:**
+
+```shell
+curl 'https://passport.bilibili.com/web/captcha/combine?plat=6'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "data": {
+ "result": {
+ "success": 1,
+ "gt": "bd111e81eda1cbb9f54425aafc0908ac",
+ "challenge": "2903a8eb967a1d990444cb23ea42f417",
+ "key": "76fb59fbd83a4d9d816162c5156fc964"
+ },
+ "type": 1
+ }
+}
+```
+
+
+
### 进行验证
-本文档为Bilibili文档,验证码为geetest极验提供,故不提供api
+本文档为 Bilibili 文档,验证码为 [geetest 极验](https://docs.geetest.com/sensebot/start/) 提供,故不提供相关 API
附: [手动验证器](https://kuresaru.github.io/geetest-validator/)
[及其源码](https://github.com/kuresaru/geetest-validator)
@@ -92,7 +158,6 @@ curl 'https://passport.bilibili.com/x/passport-login/captcha?source=main_web'
3. 验证完成后,点击按钮5生成验证结果
4. 使用最开始获得到的`key`、`challenge`和刚获得到的`validate`、`seccode`继续之后的登录操作
-
### 继续登录
- [短信登录](SMS.md)
diff --git a/login/login_info.md b/docs/login/login_info.md
similarity index 70%
rename from login/login_info.md
rename to docs/login/login_info.md
index 05d2b67..c87c4b5 100644
--- a/login/login_info.md
+++ b/docs/login/login_info.md
@@ -1,18 +1,10 @@
# 登录基本信息
-- [导航栏用户信息](#导航栏用户信息)
-- [~~登录用户信息仅部分(已弃用)~~](#~~登录用户信息仅部分(已弃用)~~)
-- [登录用户信息(APP端)](#登录用户信息(APP端))
-- [登录用户状态数(双端)](#登录用户状态数(双端))
-- [获取硬币数](#获取硬币数)
-
----
-
## 导航栏用户信息
-> http://api.bilibili.com/nav(带有转义)
+> ~~https://api.bilibili.com/nav(带有转义)~~ (已失效)
>
-> http://api.bilibili.com/x/web-interface/nav(原始数据)
+> https://api.bilibili.com/x/web-interface/nav(原始数据)
*请求方式:GET*
@@ -35,30 +27,33 @@
| -------------------- | ---- | ---------------- | ------------------------------------------------- |
| isLogin | bool | 是否已登录 | false:未登录 true:已登录 |
| email_verified | num | 是否验证邮箱地址 | 0:未验证 1:已验证 |
-| face | str | 用户头像url | |
+| face | str | 用户头像 url | |
| level_info | obj | 等级信息 | |
-| mid | num | 用户mid | |
+| mid | num | 用户 mid | |
| mobile_verified | num | 是否验证手机号 | 0:未验证 1:已验证 |
| money | num | 拥有硬币数 | |
| moral | num | 当前节操值 | 上限为70 |
| official | obj | 认证信息 | |
-| officialVerify | obj | 认证信息2 | |
+| officialVerify | obj | 认证信息 2 | |
| pendant | obj | 头像框信息 | |
-| scores | num | 0 | 作用尚不明确 |
+| scores | num | (?) | |
| uname | str | 用户昵称 | |
| vipDueDate | num | 会员到期时间 | 毫秒 时间戳 |
| vipStatus | num | 会员开通状态 | 0:无 1:有 |
| vipType | num | 会员类型 | 0:无 1:月度大会员 2:年度及以上大会员 |
| vip_pay_type | num | 会员开通状态 | 0:无 1:有 |
-| vip_theme_type | num | 0 | 作用尚不明确 |
+| vip_theme_type | num | (?) | |
| vip_label | obj | 会员标签 | |
| vip_avatar_subscript | num | 是否显示会员图标 | 0:不显示 1:显示 |
| vip_nickname_color | str | 会员昵称颜色 | 颜色码 |
| wallet | obj | B币钱包信息 | |
| has_shop | bool | 是否拥有推广商品 | false:无 true:有 |
-| shop_url | str | 商品推广页面url | |
-| allowance_count | num | 0 | 作用尚不明确 |
-| answer_status | num | 0 | 作用尚不明确 |
+| shop_url | str | 商品推广页面 url | |
+| allowance_count | num | (?) | |
+| answer_status | num | (?) | |
+| is_senior_member | num | 是否硬核会员 | 0:非硬核会员 1:硬核会员 |
+| wbi_img | obj | Wbi 签名实时口令 | 该字段即使用户未登录也存在 |
+| is_jury | bool | 是否风纪委员 | true:风纪委员 false:非风纪委员 |
`data`中的`level_info`对象:
@@ -73,7 +68,7 @@
| 字段 | 类型 | 内容 | 备注 |
| ----- | ---- | -------- | ------------------------------------------------- |
-| role | num | 认证类型 | 0:无 1 2 7:个人认证 3 4 5 6:机构认证 |
+| role | num | 认证类型 | 见[用户认证类型一览](../user/official_role.md) |
| title | str | 认证信息 | 无为空 |
| desc | str | 认证备注 | 无为空 |
| type | num | 是否认证 | -1:无 0:认证 |
@@ -87,35 +82,44 @@
`data`中的`pendant`对象:
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ---- | ----------- | ------------ |
-| pid | num | 挂件id | |
-| name | str | 挂件名称 | |
-| image | str | 挂件图片url | |
-| expire | num | 0 | 作用尚不明确 |
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | ----------- | ---- |
+| pid | num | 挂件id | |
+| name | str | 挂件名称 | |
+| image | str | 挂件图片url | |
+| expire | num | (?) | |
`data`中的`vip_label`对象:
| 字段 | 类型 | 内容 | 备注 |
| ----------- | ---- | -------- | ------------------------------------------------------------ |
-| path | str | 空 | 作用尚不明确 |
+| path | str | (?) | |
| text | str | 会员名称 | |
| label_theme | str | 会员标签 | vip:大会员 annual_vip:年度大会员 ten_annual_vip:十年大会员 hundred_annual_vip:百年大会员 |
`data`中的`wallet`对象:
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ---- | ------------- | ------------ |
-| mid | num | 登录用户mid | |
-| bcoin_balance | num | 拥有B币数 | |
-| coupon_balance | num | 每月奖励B币数 | |
-| coupon_due_time | num | 0 | 作用尚不明确 |
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ---- | ------------- | ---- |
+| mid | num | 登录用户mid | |
+| bcoin_balance | num | 拥有B币数 | |
+| coupon_balance | num | 每月奖励B币数 | |
+| coupon_due_time | num | (?) | |
+
+`data`中的`wbi_img`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ------------------------------- | ---------------------------------------- |
+| img_url | str | Wbi 签名参数 `imgKey`的伪装 url | 详见文档 [Wbi 签名](../misc/sign/wbi.md) |
+| sub_url | str | Wbi 签名参数 `subKey`的伪装 url | 详见文档 [Wbi 签名](../misc/sign/wbi.md) |
**示例:**
+**登录状态:**
+
```shell
-curl 'http://api.bilibili.com/nav' \
--b 'SESSDATA=xxx'
+curl 'https://api.bilibili.com/x/web-interface/nav' \
+ -b 'SESSDATA=xxx'
```
@@ -123,64 +127,136 @@ curl 'http://api.bilibili.com/nav' \
```json
{
- "code":0,
- "message":"0",
- "ttl":1,
- "data":{
- "isLogin":true,
- "email_verified":1,
- "face":"http://i1.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg",
- "level_info":{
- "current_level":5,
- "current_min":10800,
- "current_exp":17065,
- "next_exp":28800
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "isLogin": true,
+ "email_verified": 1,
+ "face": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg",
+ "face_nft": 0,
+ "face_nft_type": 0,
+ "level_info": {
+ "current_level": 6,
+ "current_min": 28800,
+ "current_exp": 52689,
+ "next_exp": "--"
},
- "mid":293793435,
- "mobile_verified":1,
- "money":33.4,
- "moral":70,
- "official":{
- "role":0,
- "title":"",
- "desc":"",
- "type":-1
+ "mid": 293793435,
+ "mobile_verified": 1,
+ "money": 172.4,
+ "moral": 70,
+ "official": {
+ "role": 0,
+ "title": "",
+ "desc": "",
+ "type": -1
},
- "officialVerify":{
- "type":-1,
- "desc":""
+ "officialVerify": {
+ "type": -1,
+ "desc": ""
},
- "pendant":{
- "pid":0,
- "name":"",
- "image":"",
- "expire":0,
- "image_enhance":""
+ "pendant": {
+ "pid": 2511,
+ "name": "初音未来13周年",
+ "image": "https://i0.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png",
+ "expire": 0,
+ "image_enhance": "https://i0.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp",
+ "image_enhance_frame": "https://i0.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png"
},
- "scores":0,
- "uname":"社会易姐QwQ",
- "vipDueDate":1612454400000,
- "vipStatus":1,
- "vipType":2,
- "vip_pay_type":1,
- "vip_theme_type":0,
- "vip_label":{
- "path":"",
- "text":"年度大会员",
- "label_theme":"annual_vip"
+ "scores": 0,
+ "uname": "社会易姐QwQ",
+ "vipDueDate": 1707494400000,
+ "vipStatus": 1,
+ "vipType": 2,
+ "vip_pay_type": 0,
+ "vip_theme_type": 0,
+ "vip_label": {
+ "path": "",
+ "text": "年度大会员",
+ "label_theme": "annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": "",
+ "use_img_label": true,
+ "img_label_uri_hans": "",
+ "img_label_uri_hant": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png"
},
- "vip_avatar_subscript":1,
- "vip_nickname_color":"#FB7299",
- "wallet":{
- "mid":293793435,
- "bcoin_balance":8,
- "coupon_balance":5,
- "coupon_due_time":0
+ "vip_avatar_subscript": 1,
+ "vip_nickname_color": "#FB7299",
+ "vip": {
+ "type": 2,
+ "status": 1,
+ "due_date": 1707494400000,
+ "vip_pay_type": 0,
+ "theme_type": 0,
+ "label": {
+ "path": "",
+ "text": "年度大会员",
+ "label_theme": "annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": "",
+ "use_img_label": true,
+ "img_label_uri_hans": "",
+ "img_label_uri_hant": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png"
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "avatar_subscript_url": "",
+ "tv_vip_status": 0,
+ "tv_vip_pay_type": 0,
+ "tv_due_date": 1640793600
+ },
+ "wallet": {
+ "mid": 293793435,
+ "bcoin_balance": 5,
+ "coupon_balance": 5,
+ "coupon_due_time": 0
+ },
+ "has_shop": true,
+ "shop_url": "https://gf.bilibili.com?msource=main_station",
+ "allowance_count": 0,
+ "answer_status": 0,
+ "is_senior_member": 1,
+ "wbi_img": {
+ "img_url": "https://i0.hdslb.com/bfs/wbi/653657f524a547ac981ded72ea172057.png",
+ "sub_url": "https://i0.hdslb.com/bfs/wbi/6e4909c702f846728e64f6007736a338.png"
+ },
+ "is_jury": false
+ }
+}
+```
+
+
+
+**未登录状态:**
+
+```shell
+curl 'https://api.bilibili.com/x/web-interface/nav'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": -101,
+ "message": "账号未登录",
+ "ttl": 1,
+ "data": {
+ "isLogin": false,
+ "wbi_img": {
+ "img_url": "https://i0.hdslb.com/bfs/wbi/653657f524a547ac981ded72ea172057.png",
+ "sub_url": "https://i0.hdslb.com/bfs/wbi/6e4909c702f846728e64f6007736a338.png"
},
- "has_shop":false,
- "shop_url":"",
- "allowance_count":0,
- "answer_status":0
}
}
```
@@ -192,7 +268,7 @@ curl 'http://api.bilibili.com/nav' \
查看折叠内容
-> http://account.bilibili.com/home/userInfo
+> https://account.bilibili.com/home/userInfo
*请求方式:GET*
@@ -242,7 +318,7 @@ curl 'http://api.bilibili.com/nav' \
**示例:**
```shell
-curl 'http://account.bilibili.com/home/userInfo' \
+curl 'https://account.bilibili.com/home/userInfo' \
-b 'SESSDATA=xxx;DedeUserID=1;'
```
@@ -281,7 +357,7 @@ curl 'http://account.bilibili.com/home/userInfo' \
## 登录用户信息(APP端)
-> http://app.bilibili.com/x/v2/account/myinfo
+> https://app.bilibili.com/x/v2/account/myinfo
*请求方式:GET*
@@ -372,7 +448,7 @@ curl 'http://account.bilibili.com/home/userInfo' \
**示例:**
```shell
-curl -G 'http://app.bilibili.com/x/v2/account/myinfo' \
+curl -G 'https://app.bilibili.com/x/v2/account/myinfo' \
--data-urlencode 'access_key=xxx' \
--data-urlencode 'appkey=4409e2ce8ffd12b8' \
--data-urlencode 'ts=0' \
@@ -436,7 +512,7 @@ curl -G 'http://app.bilibili.com/x/v2/account/myinfo' \
## 登录用户状态数(双端)
-> http://api.bilibili.com/x/web-interface/nav/stat
+> https://api.bilibili.com/x/web-interface/nav/stat
*请求方式:GET*
@@ -472,7 +548,7 @@ curl -G 'http://app.bilibili.com/x/v2/account/myinfo' \
Cookie方式:
```shell
-curl 'http://api.bilibili.com/x/web-interface/nav/stat' \
+curl 'https://api.bilibili.com/x/web-interface/nav/stat' \
-b 'SESSDATA=xxx'
```
@@ -497,7 +573,7 @@ curl 'http://api.bilibili.com/x/web-interface/nav/stat' \
APP方式:
```shell
-curl -G 'http://api.bilibili.com/x/web-interface/nav/stat' \
+curl -G 'https://api.bilibili.com/x/web-interface/nav/stat' \
--data-urlencode 'access_key=d907f51122c59599d580ade2315af971'
```
@@ -521,7 +597,7 @@ curl -G 'http://api.bilibili.com/x/web-interface/nav/stat' \
## 获取硬币数
-> http://account.bilibili.com/site/getCoin
+> https://account.bilibili.com/site/getCoin
*请求方式:GET*
@@ -548,7 +624,7 @@ curl -G 'http://api.bilibili.com/x/web-interface/nav/stat' \
**示例:**
```shell
-curl 'http://account.bilibili.com/site/getCoin' \
+curl 'https://account.bilibili.com/site/getCoin' \
-b 'SESSDATA=xxx;DedeUserID=1;'
```
@@ -566,4 +642,4 @@ curl 'http://account.bilibili.com/site/getCoin' \
}
```
-
\ No newline at end of file
+
diff --git a/docs/login/login_notice.md b/docs/login/login_notice.md
new file mode 100644
index 0000000..720c0a2
--- /dev/null
+++ b/docs/login/login_notice.md
@@ -0,0 +1,269 @@
+# 登录记录
+
+## 查询登录记录
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ---------- | ------ | ------------------------------------------------------------ |
+| mid | num | 用户mid | 必要 | 必须为自己的mid |
+| buvid | str | 设备虚拟id | 非必要 | web端为操作登录接口时Cookie中的`buvid3` 若登录设备无`buvid`则留空 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 -403:访问权限不足 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ----------- | -------------------------- |
+| mid | num | 登录用户mid | |
+| device_name | str | 登录设备 | 依靠操作登录接口时的UA决定 |
+| login_type | str | 登录方式 | 根据登录接口决定 |
+| login_time | str | 登录时间 | YYYY-MM-DD hh:mm:ss |
+| location | str | 登录位置 | 依靠ip决定 |
+| ip | str | 登录ip | 部分用`*`打码 |
+
+**示例:**
+
+查询用户`293793435`设备id为`fuck_chenrui`的登录记录
+
+```shell
+curl -G 'https://api.bilibili.com/x/safecenter/login_notice' \
+ --data-urlencode 'mid=293793435' \
+ --data-urlencode 'buvid=fuck_chenrui' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "mid": 293793435,
+ "device_name": "Chrome浏览器",
+ "login_type": "扫码登录",
+ "login_time": "2020-10-02 22:42:38",
+ "location": "中国陕西渭南",
+ "ip": "36.40.***.**"
+ }
+}
+```
+
+
+
+## 最近一周的登录情况
+
+>
+
+*请求方式: GET*
+
+认证方式: Cookie (SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ---------- | ------ | -------- |
+| jsonp | str | 回调函数名? | 非必要 | 默认 jsonp |
+| web_location | str | 网页位置? | 非必要 | 默认 333.33 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ------------ | ----- |
+| count | num | 记录总数 | |
+| list | arr | 登录记录列表 | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ---- |
+| 0 | obj | 登录记录1 | |
+| …… | obj | …… | |
+| n | obj | 登录记录(n+1) | |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | -------------- | ---- |
+| ip | str | 登录 IP | IPv4:末 2 位以 `*` 打码 IPv6:末 5 位以 `*` 打码 |
+| time | num | 登录时间 | UNIX 秒级时间戳 |
+| time_at | str | 登录时间 | 格式为 `yyyy-MM-dd HH:mm:ss` |
+| status | bool | 是否登录成功? | |
+| type | num | 登录方式? | |
+| geo | str | 登录地理位置 | |
+
+**示例:**
+
+查询本用户最近一周的登录情况
+
+```shell
+curl -G "https://api.bilibili.com/x/member/web/login/log" \
+ -b "SESSDATA=xxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "count": 15,
+ "list": [
+ {
+ "ip": "240e:*:*:*:*:*:*:*",
+ "time": 1746038055,
+ "time_at": "2025-05-01 02:34:15",
+ "status": true,
+ "type": 0,
+ "geo": "中国广西梧州电信"
+ },
+ {
+ "ip": "108.181.*.*",
+ "time": 1722036741,
+ "time_at": "2024-07-27 07:32:21",
+ "status": true,
+ "type": 0,
+ "geo": "美国加利福尼亚州洛杉矶telus.com"
+ },
+ {
+ "ip": "104.28.*.*",
+ "time": 1722040653,
+ "time_at": "2024-07-27 08:37:33",
+ "status": true,
+ "type": 0,
+ "geo": "巴西"
+ },
+ {
+ "ip": "104.28.*.*",
+ "time": 1721950332,
+ "time_at": "2024-07-26 07:32:12",
+ "status": true,
+ "type": 0,
+ "geo": "新加坡cloudflare.com"
+ },
+ {
+ "ip": "104.28.*.*",
+ "time": 1721964627,
+ "time_at": "2024-07-26 11:30:27",
+ "status": true,
+ "type": 0,
+ "geo": "美国弗吉尼亚州雷斯顿cloudflare.com"
+ },
+ {
+ "ip": "143.92.*.*",
+ "time": 1721861861,
+ "time_at": "2024-07-25 06:57:41",
+ "status": true,
+ "type": 0,
+ "geo": "中国香港特别行政区"
+ },
+ {
+ "ip": "143.92.*.*",
+ "time": 1721861855,
+ "time_at": "2024-07-25 06:57:35",
+ "status": true,
+ "type": 0,
+ "geo": "中国香港特别行政区"
+ },
+ {
+ "ip": "104.28.*.*",
+ "time": 1721709514,
+ "time_at": "2024-07-23 12:38:34",
+ "status": true,
+ "type": 0,
+ "geo": "日本千叶县成田市cloudflare.com"
+ },
+ {
+ "ip": "104.28.*.*",
+ "time": 1721709618,
+ "time_at": "2024-07-23 12:40:18",
+ "status": true,
+ "type": 0,
+ "geo": "日本千叶县成田市cloudflare.com"
+ },
+ {
+ "ip": "143.92.*.*",
+ "time": 1721636125,
+ "time_at": "2024-07-22 16:15:25",
+ "status": true,
+ "type": 0,
+ "geo": "中国香港特别行政区"
+ },
+ {
+ "ip": "143.92.*.*",
+ "time": 1721636111,
+ "time_at": "2024-07-22 16:15:11",
+ "status": true,
+ "type": 0,
+ "geo": "中国香港特别行政区"
+ },
+ {
+ "ip": "104.28.*.*",
+ "time": 1721539870,
+ "time_at": "2024-07-21 13:31:10",
+ "status": true,
+ "type": 0,
+ "geo": "美国加利福尼亚州东洛杉矶cloudflare.com"
+ },
+ {
+ "ip": "104.28.*.*",
+ "time": 1721539965,
+ "time_at": "2024-07-21 13:32:45",
+ "status": true,
+ "type": 0,
+ "geo": "美国加利福尼亚州东洛杉矶cloudflare.com"
+ },
+ {
+ "ip": "42.2.*.*",
+ "time": 1721477962,
+ "time_at": "2024-07-20 20:19:22",
+ "status": true,
+ "type": 0,
+ "geo": "中国香港特别行政区pccw.com"
+ },
+ {
+ "ip": "42.2.*.*",
+ "time": 1721477960,
+ "time_at": "2024-07-20 20:19:20",
+ "status": true,
+ "type": 0,
+ "geo": "中国香港特别行政区pccw.com"
+ }
+ ]
+ }
+}
+```
+
+
diff --git a/login/member_center.md b/docs/login/member_center.md
similarity index 77%
rename from login/member_center.md
rename to docs/login/member_center.md
index 1d3685a..226d8d2 100644
--- a/login/member_center.md
+++ b/docs/login/member_center.md
@@ -1,20 +1,8 @@
# 个人中心
-- [获取我的信息](#获取我的信息)
-- [查询每日奖励状态](#查询每日奖励状态)
-- [查询每日投币获得经验数](#查询每日投币获得经验数)
-- [查询大会员状态](#查询大会员状态)
-- [查询账号安全情况](#查询账号安全情况)
-- [查询账号实名认证状态](#查询账号实名认证状态)
-- [查询实名认证详细信息](#查询实名认证详细信息)
-- [查询硬币变化情况](#查询硬币变化情况)
-- [修改个人签名](#修改个人签名)
-
----
-
## 获取我的信息
-> http://api.bilibili.com/x/member/web/account
+> https://api.bilibili.com/x/member/web/account
*请求方式:GET*
@@ -53,7 +41,7 @@
**示例:**
```shell
-curl 'http://api.bilibili.com/x/member/web/account' \
+curl 'https://api.bilibili.com/x/member/web/account' \
-b 'SESSDATA=xxx'
```
@@ -82,7 +70,7 @@ curl 'http://api.bilibili.com/x/member/web/account' \
## 查询每日奖励状态
-> http://api.bilibili.com/x/member/web/exp/reward
+> https://api.bilibili.com/x/member/web/exp/reward
*请求方式:GET*
@@ -113,15 +101,15 @@ curl 'http://api.bilibili.com/x/member/web/account' \
| watch | bool | 每日观看 | false:未完成 true:已完成 完成奖励5经验 |
| coins | num | 每日投币所奖励的经验 | 上限为50 注:该值更新存在延迟 [另外一个专门API](#查询每日投币获得经验数) |
| share | bool | 每日分享 | false:未完成 true:已完成 完成奖励5经验 |
-| email | bool | 绑定邮箱 | false:未完成 true:已完成 |
-| tel | bool | 绑定手机号 | false:未完成 true:已完成 首次完成完成奖励100经验 |
-| safe_question | bool | 设置密保问题 | false:未完成 true:已完成 |
+| email | bool | 绑定邮箱 | false:未完成 true:已完成 首次完成奖励20经验 |
+| tel | bool | 绑定手机号 | false:未完成 true:已完成 首次完成奖励100经验 |
+| safe_question | bool | 设置密保问题 | false:未完成 true:已完成 首次完成奖励30经验 |
| identify_card | bool | 实名认证 | false:未完成 true:已完成 首次完成奖励50经验 |
**示例:**
```shell
-curl 'http://api.bilibili.com/x/member/web/exp/reward' \
+curl 'https://api.bilibili.com/x/member/web/exp/reward' \
-b 'SESSDATA=xxx'
```
@@ -150,14 +138,14 @@ curl 'http://api.bilibili.com/x/member/web/exp/reward' \
## 查询每日投币获得经验数
->http://www.bilibili.com/plus/account/exp.php
+> ~~https://www.bilibili.com/plus/account/exp.php~~ (已失效)
+>
+> https://api.bilibili.com/x/web-interface/coin/today/exp
*请求方式:GET*
认证方式:仅可Cookie(SESSDATA)
-鉴权方式:Cookie中`DedeUserID`存在且不为0
-
该接口实时更新,未发现延迟
**json回复:**
@@ -168,13 +156,13 @@ curl 'http://api.bilibili.com/x/member/web/exp/reward' \
| ------- | ---- | -------------------- | ----------- |
| code | num | 返回值 | 0:成功 |
| message | str | 错误信息 | 默认为0 |
-| number | num | 每日投币所奖励的经验 | 上限为50
@@ -184,7 +172,8 @@ curl 'http://www.bilibili.com/plus/account/exp.php' \
{
"code": 0,
"message": "0",
- "number": 20
+ "ttl": 1,
+ "data": 20
}
```
@@ -192,7 +181,7 @@ curl 'http://www.bilibili.com/plus/account/exp.php' \
## 查询大会员状态
-> http://api.bilibili.com/x/vip/web/user/info
+> https://api.bilibili.com/x/vip/web/user/info
*请求方式:GET*
@@ -223,7 +212,7 @@ curl 'http://www.bilibili.com/plus/account/exp.php' \
**示例:**
```shell
-curl 'http://api.bilibili.com/x/vip/web/user/info' \
+curl 'https://api.bilibili.com/x/vip/web/user/info' \
-b 'SESSDATA=xxx'
```
@@ -250,7 +239,7 @@ curl 'http://api.bilibili.com/x/vip/web/user/info' \
## 查询账号安全情况
-> http://passport.bilibili.com/web/site/user/info
+> https://passport.bilibili.com/web/site/user/info
*请求方式:GET*
@@ -295,7 +284,7 @@ curl 'http://api.bilibili.com/x/vip/web/user/info' \
| tel_verify | bool | 是否验证手机号 | false:未验证 true:已验证 |
| mail_verify | bool | 是否验证邮箱 | false:未验证 true:已验证 |
| unneeded_check | bool | 是否未设置密码 | false:已设置 true:未设置 |
-| realname_certified | bool | 是否实名认证 | false:已认证 true:未认证 |
+| realname_certified | bool | 是否实名认证 | false:未认证 true:已认证 |
`data`中的`account_safe`对象:
@@ -323,7 +312,7 @@ curl 'http://api.bilibili.com/x/vip/web/user/info' \
**示例:**
```shell
-curl 'http://passport.bilibili.com/web/site/user/info' \
+curl 'https://passport.bilibili.com/web/site/user/info' \
-b 'SESSDATA=xxx;DedeUserID=1;'
```
@@ -366,7 +355,7 @@ curl 'http://passport.bilibili.com/web/site/user/info' \
## 查询账号实名认证状态
-> http://api.bilibili.com/x/member/realname/status
+> https://api.bilibili.com/x/member/realname/status
*请求方式:GET*
@@ -400,7 +389,7 @@ curl 'http://passport.bilibili.com/web/site/user/info' \
当前状态为已认证
```shell
-curl 'http://api.bilibili.com/x/member/realname/status' \
+curl 'https://api.bilibili.com/x/member/realname/status' \
-b 'SESSDATA=xxx'
```
@@ -422,7 +411,7 @@ curl 'http://api.bilibili.com/x/member/realname/status' \
## 查询实名认证详细信息
-> http://api.bilibili.com/x/member/realname/apply/status
+> https://api.bilibili.com/x/member/realname/apply/status
*请求方式:GET*
@@ -456,7 +445,7 @@ curl 'http://api.bilibili.com/x/member/realname/status' \
| card_type | num | 证件类型代码 | 0:身份证 2:港澳居民来往内地通行证 3:台湾居民来往大陆通行证 4:护照(中国签发) 5:外国人永久居留证 6:其他国家或地区身份证明 |
```shell
-curl 'http://api.bilibili.com/x/member/realname/apply/status' \
+curl 'https://api.bilibili.com/x/member/realname/apply/status' \
-b 'SESSDATA=xxx'
```
@@ -482,7 +471,7 @@ curl 'http://api.bilibili.com/x/member/realname/apply/status' \
## 查询硬币变化情况
-> http://api.bilibili.com/x/member/web/coin/log
+> https://api.bilibili.com/x/member/web/coin/log
*请求方式:GET*
@@ -533,7 +522,7 @@ curl 'http://api.bilibili.com/x/member/realname/apply/status' \
**示例:**
```shell
-curl 'http://api.bilibili.com/x/member/web/coin/log' \
+curl 'https://api.bilibili.com/x/member/web/coin/log' \
-b 'SESSDATA=xxx'
```
@@ -622,7 +611,7 @@ curl 'http://api.bilibili.com/x/member/web/coin/log' \
## 修改个人签名
-> http://api.bilibili.com/x/member/web/sign/update
+> https://api.bilibili.com/x/member/web/sign/update
*请求方式:POST*
@@ -653,7 +642,7 @@ curl 'http://api.bilibili.com/x/member/web/coin/log' \
更新个人标签为`高中技术宅一枚,爱好MC&电子&8-bit音乐&数码&编程,资深猿厨,粉丝群:1136462265`
```shell
-curl 'http://api.bilibili.com/x/member/web/sign/update' \
+curl 'https://api.bilibili.com/x/member/web/sign/update' \
--data-urlencode 'user_sign=高中技术宅一枚,爱好MC&电子&8-bit音乐&数码&编程,粉丝群:1136462265' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
@@ -672,4 +661,197 @@ curl 'http://api.bilibili.com/x/member/web/sign/update' \
+## 最近一周的经验记录
+> https://api.bilibili.com/x/member/web/exp/log
+
+*请求方式: GET*
+
+认证方式: Cookie (SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ---------- | ------ | -------- |
+| jsonp | str | 回调函数名? | 非必要 | 默认 jsonp |
+| web_location | str | 网页位置? | 非必要 | 默认 333.33 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---- |
+| code | num | 返回值 | 0: 成功 -101: 账号未登录 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ------ | ---------------- | ---- |
+| list | array | 经验记录条目列表 | |
+| count | num | 经验记录条目数 | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----- | ---- |
+| 0 | obj | 记录1 | |
+| …… | obj | …… | …… |
+| n | obj | 记录(n+1) | |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | -------- | ---- |
+| delta | num | 经验值 | |
+| time | str | 记录时间 | 格式为 yyyy-MM-dd HH:mm:ss |
+| reason | str | 记录原因 | |
+
+**示例:**
+
+```shell
+curl -G "https://api.bilibili.com/x/member/web/exp/log" \
+-b "SESSDATA=xxx
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "delta": 5,
+ "time": "2024-07-27 15:08:23",
+ "reason": "分享视频奖励"
+ },
+ {
+ "delta": 5,
+ "time": "2024-07-27 08:28:21",
+ "reason": "登录奖励"
+ },
+ {
+ "delta": 5,
+ "time": "2024-07-27 08:28:21",
+ "reason": "观看视频奖励"
+ },
+ {
+ "delta": 5,
+ "time": "2024-07-26 12:44:19",
+ "reason": "登录奖励"
+ },
+ {
+ "delta": 5,
+ "time": "2024-07-26 12:44:19",
+ "reason": "观看视频奖励"
+ },
+ {
+ "delta": 20,
+ "time": "2024-07-25 06:58:49",
+ "reason": "视频投币奖励"
+ },
+ {
+ "delta": 5,
+ "time": "2024-07-25 06:58:30",
+ "reason": "观看视频奖励"
+ },
+ {
+ "delta": 5,
+ "time": "2024-07-25 06:58:30",
+ "reason": "登录奖励"
+ },
+ {
+ "delta": 5,
+ "time": "2024-07-23 18:47:48",
+ "reason": "观看视频奖励"
+ },
+ {
+ "delta": 5,
+ "time": "2024-07-23 18:47:48",
+ "reason": "登录奖励"
+ }
+ ],
+ "count": 10
+ }
+}
+```
+
+
+
+## 最近一周的节操记录
+
+> https://api.bilibili.com/x/member/web/moral/log
+
+*请求方式: GET*
+
+认证方式: Cookie (SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ---------- | ------ | -------- |
+| jsonp | str | 回调函数名? | 非必要 | 默认 jsonp |
+| web_location | str | 网页位置? | 非必要 | 默认 333.33 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---- |
+| code | num | 返回值 | 0: 成功 -101: 账号未登录 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ------ | ---------------- | ---- |
+| moral | num | 节操值 | |
+| list | array | 记录条目列表 | |
+| count | num | 记录条目数 | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----- | ---- |
+| 0 | obj | 记录1 | |
+| …… | obj | …… | …… |
+| n | obj | 记录(n+1) | |
+
+`list`数组中的对象:
+
+*表现良好暂时没有记录, 欢迎封号斗罗前来补充*
+
+**示例:**
+
+```shell
+curl -G "https://api.bilibili.com/x/member/web/moral/log" \
+-b "SESSDATA=xxx
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "moral": 70,
+ "list": [],
+ "count": 0
+ }
+}
+```
+
+
diff --git a/docs/manga/Activity.md b/docs/manga/Activity.md
new file mode 100644
index 0000000..6a3d812
--- /dev/null
+++ b/docs/manga/Activity.md
@@ -0,0 +1,76 @@
+# 漫画任务操作
+
+## 分享漫画
+
+> https://manga.bilibili.com/twirp/activity.v1.Activity/ShareComic
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)/ APP
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ---- | ------ | ------- |
+| platform | str | 平台 | 必要 | android |
+
+**json 回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | --------- | -------- | ------------------------------------------------------- |
+| code | num / str | 返回值 | 见对应表格 |
+| msg | str | 错误信息 | |
+| meta | obj | 错误信息 | invalid_argument 时存在,例如 `{"argument":"platform"}` |
+| data | obj | | `code` 为 0,`msg` 为空时存在 |
+
+`code` - `msg` 对应表:
+
+| code | code 类型 | msg | 备注 |
+| ---------------- | --------- | ------------------ | --------------------------- |
+| 0 | num | 空 | 分享成功,`data` 存在 |
+| 0 | num | 今日已分享 | |
+| invalid_argument | str | xxxx must be valid | xxxx 字段为必须,`meta`存在 |
+| unauthenticated | str | must login | 必须登录才能分享 |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | -------- | ---- |
+| point | num | 获取积分 | |
+
+**示例:**
+
+```bash
+curl -X POST https://manga.bilibili.com/twirp/activity.v1.Activity/ShareComic \
+-b "SESSDATA=xxxxx" \
+--data-urlencode 'platform=android'
+```
+
+
+分享成功:
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "data": {
+ "point": 5
+ }
+}
+```
+
+
+
+
+今日已分享:
+
+```json
+{
+ "code": 0,
+ "msg": "今日已分享"
+}
+```
+
+
diff --git a/docs/manga/ClockIn.md b/docs/manga/ClockIn.md
new file mode 100644
index 0000000..36681ed
--- /dev/null
+++ b/docs/manga/ClockIn.md
@@ -0,0 +1,217 @@
+# 签到
+
+> https://manga.bilibili.com/twirp/activity.v1.Activity/ClockIn
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)/ APP
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|----------|-----|----|-----|---------|
+| platform | str | 平台 | 必要 | android |
+| device | str | 平台 | 非必要 | h5 |
+
+**正文参数( application/json ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|------|-----|------|-----|-------|
+| type | num | | 非必要 | 补签时使用 |
+| date | str | 补签日期 | 必要 | 补签时使用 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------|-----------|------|--------------------------------------------|
+| code | num / str | 返回值 | 0:成功 invalid_argument:今日已签到 |
+| msg | str | 错误信息 | 成功:空 已签到:clockin clockin is duplicate |
+| meta | obj | 错误信息 | 今日已签到时存在 |
+| data | obj | | |
+
+**示例:**
+
+普通签到:
+
+```bash
+curl -L -X POST 'https://manga.bilibili.com/twirp/activity.v1.Activity/ClockIn' \
+-H 'Cookie: SESSDATA=xxx' \
+-H 'Content-Type: application/x-www-form-urlencoded' \
+--data-urlencode 'platform=android'
+```
+
+
+签到成功:
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "data": {}
+}
+```
+
+
+
+
+今日已签到:
+
+```json
+{
+ "code": "invalid_argument",
+ "msg": "clockin clockin is duplicate",
+ "meta": {
+ "argument": "clockin"
+ }
+}
+```
+
+
+
+补签:
+
+```bash
+curl -L 'https://manga.bilibili.com/twirp/activity.v1.Activity/ClockIn?platform=android' \
+-H 'Cookie: SESSDATA=xxx' \
+-H 'content-type: application/json;charset=UTF-8' \
+-d '{"type":0,"date":"2023-02-15"}'
+```
+
+
+补签成功:
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "data": {}
+}
+```
+
+
+
+# 查询签到状态
+
+> https://manga.bilibili.com/twirp/activity.v1.Activity/GetClockInInfo
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)/ APP
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------|-----|------|------|
+| code | num | 返回值 | 0:成功 |
+| msg | str | 错误信息 | 空 |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------------|-------|------------------|------------------|
+| day_count | num | 连续签到天数 | |
+| status | num | 今日是否已签到 | 0:未签到 1:已签到 |
+| credit_icon | str | | |
+| sign_before_icon | str | | |
+| sign_today_icon | str | | |
+| breathe_icon | str | | |
+| new_credit_x_icon | str | | |
+| coupon_pic | str | | |
+| points | array | 一次签到周期中每次签到可获得点数 | |
+| point_infos | array | | |
+
+`point_infos`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------------|------|---------|----|
+| point | num | 签到可获取积分 | |
+| origin_point | num | | |
+| is_activity | bool | | |
+| title | str | 签到奖励描述 | |
+
+**示例:**
+
+```bash
+curl -L -X POST 'https://manga.bilibili.com/twirp/activity.v1.Activity/GetClockInInfo' \
+-H 'Cookie: SESSDATA=xxx'
+```
+
+
+成功:
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "data": {
+ "day_count": 58,
+ "status": 1,
+ "points": [
+ 10,
+ 20,
+ 20,
+ 10,
+ 10,
+ 10,
+ 30
+ ],
+ "credit_icon": "https://i0.hdslb.com/bfs/static/manga/artifact/sign-resource/v2/9da6QImiK_w192_h192.png",
+ "sign_before_icon": "https://i0.hdslb.com/bfs/static/manga/artifact/sign-resource/v2/BuA6z3lhN_w192_h192.png",
+ "sign_today_icon": "https://i0.hdslb.com/bfs/static/manga/artifact/sign-resource/v2/TWSLUHbbg_w192_h192.png",
+ "breathe_icon": "http://i0.hdslb.com/bfs/static/manga/artifact/sign-resource/anime.breathe.svga",
+ "point_infos": [
+ {
+ "point": 10,
+ "origin_point": 10,
+ "is_activity": false,
+ "title": "10积分"
+ },
+ {
+ "point": 20,
+ "origin_point": 20,
+ "is_activity": false,
+ "title": "20积分"
+ },
+ {
+ "point": 20,
+ "origin_point": 20,
+ "is_activity": false,
+ "title": "20积分"
+ },
+ {
+ "point": 10,
+ "origin_point": 10,
+ "is_activity": false,
+ "title": "10积分"
+ },
+ {
+ "point": 10,
+ "origin_point": 10,
+ "is_activity": false,
+ "title": "10积分"
+ },
+ {
+ "point": 10,
+ "origin_point": 10,
+ "is_activity": false,
+ "title": "10积分"
+ },
+ {
+ "point": 30,
+ "origin_point": 30,
+ "is_activity": false,
+ "title": "30积分+福利券"
+ }
+ ],
+ "new_credit_x_icon": "https://i0.hdslb.com/bfs/static/manga/artifact/sign-resource/v2/QP5DsW2S_w192_h192.png",
+ "coupon_pic": "https://i0.hdslb.com/bfs/static/manga/artifact/sign-resource/v2/Yalqqoiz_w402_h162.png"
+ }
+}
+```
+
+
\ No newline at end of file
diff --git a/docs/manga/Comic.md b/docs/manga/Comic.md
new file mode 100644
index 0000000..af9d4bb
--- /dev/null
+++ b/docs/manga/Comic.md
@@ -0,0 +1,4223 @@
+# 购买漫画章节
+
+> https://manga.bilibili.com/twirp/comic.v1.Comic/BuyEpisode
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)/ APP
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ |
+| access_key | str | APP登录凭证 | 必要 | 使用APP鉴权方式时必填 |
+| appkey | str | cc8617fd6961e070 | 非必要 | |
+| mobi_app | str | android_comic | 非必要 | |
+| version | str | 4.13.0 | 非必要 | |
+| build | str | 36413002 | 非必要 | |
+| channel | str | bilicomic | 非必要 | |
+| platform | str | android | 必要 | |
+| device | str | android | 非必要 | |
+| buvid | str | | 非必要 | |
+| machine | str | samsung+SM-G9730 | 非必要 | |
+| is_teenager | num | 0 | 非必要 | |
+| no_recommend | num | 0 | 非必要 | |
+| ts | num | 秒级时间戳 | 非必要 | |
+
+**正文参数( application/json ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ------------------------ | ------ | ------------------------------------------------- |
+| epId | num | 章节id | 必要 | |
+| buyMethod | num | 购买方式 | 必要 | 2:漫读券 4:新人等免 5:通用券 |
+| couponId | num | 漫读券id | 必要 | |
+| comicId | num | 漫画id | 可选 | buyMethod:4为必要|
+| autoPayGoldStatus | num | 2 | 可选 | buyMethod:2,5 为必要 buyMethod:4为不必要 |
+| isPresale | num | 0 | 可选 | buyMethod:2,5 为必要 buyMethod:4为不必要 |
+
+漫读券购买
+
+```
+{
+ "epId": 484366,
+ "buyMethod": 2,
+ "couponId": 7461430,
+ "autoPayGoldStatus": 2,
+ "isPresale": 0
+}
+```
+
+等就免费(新人等免)
+```
+{
+ "ep_id": 321913,
+ "comic_id": 26564,
+ "buy_method": 4
+}
+```
+
+通用券购买
+
+```
+{
+ "epId": 484366,
+ "buyMethod": 5,
+ "couponId": 0,
+ "autoPayGoldStatus": 2,
+ "payAmount": 1,
+ "isPresale": 0
+}
+```
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 0:本话无需购买 1:没有足够的卡券使用次数 |
+| msg | str | 错误信息 | |
+
+**示例:**
+
+```bash
+curl -L -X POST 'https://manga.bilibili.com/twirp/comic.v1.Comic/BuyEpisode?platform=android' \
+-H 'Cookie: SESSDATA=xxx;' \
+-H 'Content-Type: application/json' \
+--data-raw '{
+ "epId": 484366,
+ "buyMethod": 2,
+ "couponId": 7461430,
+ "autoPayGoldStatus": 2,
+ "isPresale": 0
+}'
+```
+
+
+购买成功:
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "data": {
+ "auto_use_item": ""
+ }
+}
+```
+
+
+
+# 获取漫画详情
+
+> https://manga.bilibili.com/twirp/comic.v1.Comic/ComicDetail
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)/ APP
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ |
+| access_key | str | APP登录凭证 | 非必要 | 可不登录访问 |
+| appkey | str | cc8617fd6961e070 | 非必要 | |
+| mobi_app | str | android_comic | 非必要 | |
+| version | str | 4.13.0 | 非必要 | |
+| build | str | 36413002 | 非必要 | |
+| channel | str | bilicomic | 非必要 | |
+| platform | str | android | 非必要 | 可选值:web/android |
+| device | str | android | 必要 | 如不填则不会获取ep_list信息,可选值:pc/android |
+| buvid | str | | 非必要 | |
+| machine | str | samsung+SM-G9730 | 非必要 | |
+| is_teenager | num | 0 | 非必要 | |
+| no_recommend | num | 0 | 非必要 | |
+| ts | num | 秒级时间戳 | 非必要 | |
+
+**正文参数( application/json ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ------------------------ | ------ | ------------------------------------------------- |
+| comicId | num | 漫画id | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 |
+| msg | str | 错误信息 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| id | num | 漫画id | |
+| title | str | 漫画名称 | |
+| comic_type | num | 0,1 | |
+| page_default | num | 0,1,2,4,8 | |
+| page_allow | num | | |
+| horizontal_cover | str | 横板封面 | |
+| square_cover | str | 方形封面 | |
+| vertical_cover | str | 竖版封面 | |
+| author_name | array | 作者列表 | |
+| styles | array | | |
+| last_ord | num | 最新一话序号 | |
+| is_finish | num | 完结状态 0:未完结 1:已完结 | |
+| status | num | -1,0 | |
+| fav | num | | |
+| read_order | num | | |
+| evaluate | num | 漫画简介 | |
+| total | num | 总话数 | |
+| ep_list | array | 章节信息 | |
+| release_time | str | | |
+| is_limit | num | | |
+| read_epid | num | | |
+| last_read_time | str | | |
+| is_download | num | | |
+| read_short_title | str | | |
+| styles2 | array | | |
+| renewal_time | str | | |
+| last_short_title | str | 最新一话短标题 | |
+| discount_type | num | | |
+| discount | num | | |
+| discount_end | str | | |
+| no_reward | bool | | |
+| batch_discount_type | num | | |
+| ep_discount_type | num | | |
+| has_fav_activity | bool | | |
+| fav_free_amount | num | | |
+| allow_wait_free | bool | 是否等就免费 | |
+| wait_hour | num | 等待时间(小时) | |
+| wait_free_at | num | 等待时间(小时) | |
+| no_danmaku | num | | |
+| auto_pay_status | num | | |
+| no_month_ticket | bool | | |
+| immersive | bool | | |
+| no_discount | bool | | |
+| show_type | num | | |
+| pay_mode | num | | |
+| chapters | array | | |
+| classic_lines | str | 漫画简介 | |
+| pay_for_new | num | | |
+| fav_comic_info | obj | | |
+| serial_status | num | | |
+| series_info | obj | | |
+| album_count | num | | |
+| wiki_id | num | | |
+| disable_coupon_amount | num | | |
+| japan_comic | bool |是否为日本漫画 | |
+| interact_value | num | | |
+| temporary_finish_time | str | | |
+| video | | | |
+| introduction | str | 介绍| |
+| comment_status | num | | |
+| no_screenshot | bool | | |
+| type | num | | |
+| vomic_cvs | array | | |
+| no_rank | bool | | |
+| presale_eps | array | | |
+| presale_text | str | | |
+| presale_discount | num | | |
+| no_leaderboard | bool | | |
+
+`ep_list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| id | num | 章节id | |
+| ord | num | 章节序号,最新章节排在前面 | |
+| read | num | 是否阅读过,0:没有 1:阅读过 | |
+| pay_mode | num | | |
+| is_locked | bool | 是否处于锁定状态 | |
+| pay_gold | num | 解锁所需漫币 | |
+| size | num | 文件大小(字节) | |
+| short_title | str | 短标题 | |
+| is_in_free | bool | | |
+| title | str | 标题 | |
+| cover | str | 封面 | |
+| pub_time | str | 发布日期 | |
+| comments | num | 评论数 | |
+| unlock_expire_at | str | | |
+| unlock_type | num | | |
+| allow_wait_free | bool | | |
+| progress | str | | |
+| like_count | num | 点赞数 | |
+| chapter_id | num | | |
+| type | num | | |
+| extra | num | | |
+
+`styles2`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| id | num | 漫画风格id | |
+| name | str | 漫画风格名称 | |
+
+`fav_comic_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| has_fav_activity | bool | | |
+| fav_free_amount | num | | |
+| fav_coupon_type | num | | |
+
+`series_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| id | num | | |
+| comics | array | | |
+
+**示例:**
+
+```bash
+curl -L -X POST 'https://manga.bilibili.com/twirp/comic.v1.Comic/ComicDetail?device=pc' \
+-H 'Content-Type: application/json' \
+--data-raw '{
+ "comicId": 28500
+}'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "data": {
+ "id": 28500,
+ "title": "夏日重现",
+ "comic_type": 1,
+ "page_default": 4,
+ "page_allow": 15,
+ "horizontal_cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "square_cover": "http://i0.hdslb.com/bfs/manga-static/35fa9fa6190aa528f26f6e1341d9ee80b66b535f.jpg",
+ "vertical_cover": "https://i0.hdslb.com/bfs/manga-static/965cdb5c83e0b2066b4b60973ba7f4242f592967.jpg",
+ "author_name": [
+ "田中靖规",
+ "集英社"
+ ],
+ "styles": [
+ "悬疑灵异"
+ ],
+ "last_ord": 152,
+ "is_finish": 1,
+ "status": 0,
+ "fav": 0,
+ "read_order": 0,
+ "evaluate": "【此漫画的翻译由版权方提供】青梅竹马的潮死了——。听闻这个悲报,慎平回到了阔别已久的故乡和歌山市·日都岛与家人再会并出席葬礼。但是岛上貌似陡生异变,充斥着不寻常的气息……?\n夏日孤岛上的悬疑剧!!\n\n",
+ "total": 167,
+ "ep_list": [
+ {
+ "id": 779804,
+ "ord": 152,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17973126,
+ "short_title": "后篇(4)",
+ "is_in_free": false,
+ "title": "2026未然凶宅-后篇(4)",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 218,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 458,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 779788,
+ "ord": 151,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17654401,
+ "short_title": "后篇(3)",
+ "is_in_free": false,
+ "title": "2026未然凶宅-后篇(3)",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 31,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 171,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 779782,
+ "ord": 150,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 18250988,
+ "short_title": "后篇(2)",
+ "is_in_free": false,
+ "title": "2026未然凶宅-后篇(2)",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 39,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 179,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 779752,
+ "ord": 149,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 19374429,
+ "short_title": "后篇(1)",
+ "is_in_free": false,
+ "title": "2026未然凶宅-后篇(1)",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 41,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 174,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 779751,
+ "ord": 148,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 20993207,
+ "short_title": "前篇(3)",
+ "is_in_free": false,
+ "title": "2026未然凶宅-前篇(3)",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 52,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 187,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 779749,
+ "ord": 147,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17048075,
+ "short_title": "前篇(2)",
+ "is_in_free": false,
+ "title": "2026未然凶宅-前篇(2)",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 60,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 191,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 779748,
+ "ord": 146,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 21462932,
+ "short_title": "前篇(1)",
+ "is_in_free": false,
+ "title": "2026未然凶宅-前篇(1)",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 151,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 233,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 546499,
+ "ord": 145,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 26980054,
+ "short_title": "139",
+ "is_in_free": false,
+ "title": "第139话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2021-02-01 12:00:00",
+ "comments": 1314,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 3241,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 543783,
+ "ord": 144,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 33822142,
+ "short_title": "138",
+ "is_in_free": false,
+ "title": "第138话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2021-01-25 12:00:00",
+ "comments": 232,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 514,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 539917,
+ "ord": 143,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 20551895,
+ "short_title": "137",
+ "is_in_free": false,
+ "title": "第137话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2021-01-11 12:00:00",
+ "comments": 124,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 461,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 529960,
+ "ord": 142,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 18729857,
+ "short_title": "136",
+ "is_in_free": false,
+ "title": "第136话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-12-28 12:00:00",
+ "comments": 112,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 432,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 526882,
+ "ord": 141,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 9528871,
+ "short_title": "135",
+ "is_in_free": false,
+ "title": "第135话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-12-21 12:00:00",
+ "comments": 64,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 397,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 524737,
+ "ord": 140,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 4658617,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "023",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-12-14 12:00:00",
+ "comments": 63,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 368,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 520819,
+ "ord": 139,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 19569820,
+ "short_title": "134",
+ "is_in_free": false,
+ "title": "第134话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-12-07 12:00:00",
+ "comments": 234,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 411,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 518563,
+ "ord": 138,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 0,
+ "short_title": "133",
+ "is_in_free": false,
+ "title": "第133话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-11-30 12:00:00",
+ "comments": 52,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 404,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 516460,
+ "ord": 137,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 16923412,
+ "short_title": "132",
+ "is_in_free": false,
+ "title": "第132话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-11-23 12:00:00",
+ "comments": 66,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 408,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 513494,
+ "ord": 136,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 22397411,
+ "short_title": "131",
+ "is_in_free": false,
+ "title": "第131话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-11-16 00:00:00",
+ "comments": 73,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 385,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 509309,
+ "ord": 135,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 11417949,
+ "short_title": "130",
+ "is_in_free": false,
+ "title": "第130话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-11-02 12:00:00",
+ "comments": 121,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 415,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 507403,
+ "ord": 134,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 13421937,
+ "short_title": "129",
+ "is_in_free": false,
+ "title": "第129话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-26 00:00:00",
+ "comments": 108,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 382,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 505464,
+ "ord": 133,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 0,
+ "short_title": "128",
+ "is_in_free": false,
+ "title": "第128话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 101,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 414,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 504084,
+ "ord": 132,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 714738,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "022",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 38,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 327,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 503749,
+ "ord": 131,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 13733489,
+ "short_title": "127",
+ "is_in_free": false,
+ "title": "第127话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 87,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 383,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 498378,
+ "ord": 130,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 0,
+ "short_title": "126",
+ "is_in_free": false,
+ "title": "第126话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 83,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 392,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 496100,
+ "ord": 129,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17044238,
+ "short_title": "125",
+ "is_in_free": false,
+ "title": "第125话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 59,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 378,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494999,
+ "ord": 128,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 19000950,
+ "short_title": "124",
+ "is_in_free": false,
+ "title": "第124话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 53,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 369,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494997,
+ "ord": 127,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 757788,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "021",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 73,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 295,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494996,
+ "ord": 126,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 25583325,
+ "short_title": "123",
+ "is_in_free": false,
+ "title": "第123话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 88,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 341,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494995,
+ "ord": 125,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 22945986,
+ "short_title": "122",
+ "is_in_free": false,
+ "title": "第122话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 114,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 382,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494994,
+ "ord": 124,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 22007815,
+ "short_title": "121",
+ "is_in_free": false,
+ "title": "第121话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 60,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 336,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494992,
+ "ord": 123,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 14200387,
+ "short_title": "120",
+ "is_in_free": false,
+ "title": "第120话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 98,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 349,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494990,
+ "ord": 122,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 20253075,
+ "short_title": "119",
+ "is_in_free": false,
+ "title": "第119话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 153,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 352,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494986,
+ "ord": 121,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 34545559,
+ "short_title": "118",
+ "is_in_free": false,
+ "title": "第118话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 97,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 353,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494983,
+ "ord": 120,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 26875814,
+ "short_title": "117",
+ "is_in_free": false,
+ "title": "第117话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 38,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 326,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494982,
+ "ord": 119,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 24302773,
+ "short_title": "116",
+ "is_in_free": false,
+ "title": "第116话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 60,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 311,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494981,
+ "ord": 118,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 22563845,
+ "short_title": "115",
+ "is_in_free": false,
+ "title": "第115话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 103,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 332,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494979,
+ "ord": 117,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 26357441,
+ "short_title": "114",
+ "is_in_free": false,
+ "title": "第114话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 190,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 325,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494978,
+ "ord": 116,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 3055913,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "020",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 27,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 303,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494977,
+ "ord": 115,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 27213199,
+ "short_title": "113",
+ "is_in_free": false,
+ "title": "第113话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 131,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 344,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494876,
+ "ord": 114,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 27036215,
+ "short_title": "112",
+ "is_in_free": false,
+ "title": "第112话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 84,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 306,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494872,
+ "ord": 113,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 18077367,
+ "short_title": "111",
+ "is_in_free": false,
+ "title": "第111话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 66,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 317,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494852,
+ "ord": 112,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 6547152,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "019",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 20,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 286,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494849,
+ "ord": 111,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17709563,
+ "short_title": "110",
+ "is_in_free": false,
+ "title": "第110话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 42,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 326,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494848,
+ "ord": 110,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 0,
+ "short_title": "109",
+ "is_in_free": false,
+ "title": "第109话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 42,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 325,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494847,
+ "ord": 109,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 20356850,
+ "short_title": "108",
+ "is_in_free": false,
+ "title": "第108话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 52,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 322,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494846,
+ "ord": 108,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 21075013,
+ "short_title": "107",
+ "is_in_free": false,
+ "title": "第107话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 29,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 314,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494698,
+ "ord": 107,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 19078032,
+ "short_title": "106",
+ "is_in_free": false,
+ "title": "第106话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 81,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 320,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494696,
+ "ord": 106,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 21291294,
+ "short_title": "105",
+ "is_in_free": false,
+ "title": "第105话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 56,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 350,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494691,
+ "ord": 105,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 22030863,
+ "short_title": "104",
+ "is_in_free": false,
+ "title": "第104话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 56,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 305,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494690,
+ "ord": 104,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17400960,
+ "short_title": "103",
+ "is_in_free": false,
+ "title": "第103话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 33,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 304,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494688,
+ "ord": 103,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 0,
+ "short_title": "102",
+ "is_in_free": false,
+ "title": "第102话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 53,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 329,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 552061,
+ "ord": 102.5,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 1922541,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "018",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 8,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 30,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494682,
+ "ord": 102,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 20268719,
+ "short_title": "101",
+ "is_in_free": false,
+ "title": "第101话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 92,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 317,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494666,
+ "ord": 101,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17542840,
+ "short_title": "100",
+ "is_in_free": false,
+ "title": "第100话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 48,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 323,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494665,
+ "ord": 100,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 27598387,
+ "short_title": "99",
+ "is_in_free": false,
+ "title": "第99话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 109,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 350,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494664,
+ "ord": 99,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 24852154,
+ "short_title": "98",
+ "is_in_free": false,
+ "title": "第98话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 64,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 326,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494663,
+ "ord": 98,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 20721168,
+ "short_title": "97",
+ "is_in_free": false,
+ "title": "第97话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 57,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 309,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494656,
+ "ord": 97,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 15000137,
+ "short_title": "96",
+ "is_in_free": false,
+ "title": "第96话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 126,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 339,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 552060,
+ "ord": 96.5,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 3910437,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "017",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 5,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 30,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494650,
+ "ord": 96,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 25062481,
+ "short_title": "95",
+ "is_in_free": false,
+ "title": "第95话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 89,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 360,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494645,
+ "ord": 95,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 19376143,
+ "short_title": "94",
+ "is_in_free": false,
+ "title": "第94话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 82,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 397,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494638,
+ "ord": 94,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 34661163,
+ "short_title": "93",
+ "is_in_free": false,
+ "title": "第93话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 64,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 352,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494637,
+ "ord": 93,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 33798923,
+ "short_title": "92",
+ "is_in_free": false,
+ "title": "第92话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 55,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 350,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494632,
+ "ord": 92,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 19784232,
+ "short_title": "91",
+ "is_in_free": false,
+ "title": "第91话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 81,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 387,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494627,
+ "ord": 91,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 18532096,
+ "short_title": "90",
+ "is_in_free": false,
+ "title": "第90话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 121,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 371,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 494009,
+ "ord": 90,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 19527018,
+ "short_title": "89",
+ "is_in_free": false,
+ "title": "第89话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 57,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 330,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 552059,
+ "ord": 89.5,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 2034891,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "016",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 14,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 33,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 493979,
+ "ord": 89,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 18494693,
+ "short_title": "88",
+ "is_in_free": false,
+ "title": "第88话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 87,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 351,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 493950,
+ "ord": 88,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17416462,
+ "short_title": "87",
+ "is_in_free": false,
+ "title": "第87话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 71,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 343,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 493944,
+ "ord": 87,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 0,
+ "short_title": "86",
+ "is_in_free": false,
+ "title": "第86话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 88,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 357,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 552058,
+ "ord": 86.5,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 4837743,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "015",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-10 00:00:00",
+ "comments": 9,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 42,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491230,
+ "ord": 86,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 21039936,
+ "short_title": "85",
+ "is_in_free": false,
+ "title": "第85话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 59,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 319,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491229,
+ "ord": 85,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 14463535,
+ "short_title": "84",
+ "is_in_free": false,
+ "title": "第84话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 87,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 344,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 552057,
+ "ord": 84.5,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 11625156,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "014",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-10 00:00:00",
+ "comments": 12,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 46,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491228,
+ "ord": 84,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 15900351,
+ "short_title": "83",
+ "is_in_free": false,
+ "title": "第83话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 71,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 347,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491227,
+ "ord": 83,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 19182670,
+ "short_title": "82",
+ "is_in_free": false,
+ "title": "第82话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 67,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 355,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491226,
+ "ord": 82,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 18627336,
+ "short_title": "81",
+ "is_in_free": false,
+ "title": "第81话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 45,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 347,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491225,
+ "ord": 81,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 15574642,
+ "short_title": "80",
+ "is_in_free": false,
+ "title": "第80话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 51,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 346,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491224,
+ "ord": 80,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 24885059,
+ "short_title": "79",
+ "is_in_free": false,
+ "title": "第79话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 79,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 350,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491223,
+ "ord": 79,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 22427296,
+ "short_title": "78",
+ "is_in_free": false,
+ "title": "第78话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 80,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 356,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 552056,
+ "ord": 78.5,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 1551067,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "013",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 5,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 38,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491222,
+ "ord": 78,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 18725322,
+ "short_title": "77",
+ "is_in_free": false,
+ "title": "第77话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 100,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 354,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491221,
+ "ord": 77,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 16185606,
+ "short_title": "76",
+ "is_in_free": false,
+ "title": "第76话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 59,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 341,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491220,
+ "ord": 76,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 18886387,
+ "short_title": "75",
+ "is_in_free": false,
+ "title": "第75话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 88,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 370,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491215,
+ "ord": 75,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 19228812,
+ "short_title": "74",
+ "is_in_free": false,
+ "title": "第74话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 106,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 343,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 552054,
+ "ord": 74.5,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 1106084,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "012",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 9,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 43,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491214,
+ "ord": 74,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17213820,
+ "short_title": "73",
+ "is_in_free": false,
+ "title": "第73话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 105,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 358,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 552053,
+ "ord": 73.5,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 1510250,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "011",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-10 00:00:00",
+ "comments": 7,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 46,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491213,
+ "ord": 73,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 12514556,
+ "short_title": "72",
+ "is_in_free": false,
+ "title": "第72话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 38,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 356,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491212,
+ "ord": 72,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 24337518,
+ "short_title": "71",
+ "is_in_free": false,
+ "title": "第71话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 45,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 353,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491211,
+ "ord": 71,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 22329539,
+ "short_title": "70",
+ "is_in_free": false,
+ "title": "第70话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 45,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 343,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491210,
+ "ord": 70,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 12721444,
+ "short_title": "69",
+ "is_in_free": false,
+ "title": "第69话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 59,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 363,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491209,
+ "ord": 69,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 14948018,
+ "short_title": "68",
+ "is_in_free": false,
+ "title": "第68话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 48,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 363,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491208,
+ "ord": 68,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 19604576,
+ "short_title": "67",
+ "is_in_free": false,
+ "title": "第67话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 97,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 370,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491207,
+ "ord": 67,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 18529368,
+ "short_title": "66",
+ "is_in_free": false,
+ "title": "第66话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 136,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 386,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491206,
+ "ord": 66,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 19616688,
+ "short_title": "65",
+ "is_in_free": false,
+ "title": "第65话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 79,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 350,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 491205,
+ "ord": 65,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17889729,
+ "short_title": "64",
+ "is_in_free": false,
+ "title": "第64话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 77,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 369,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 552052,
+ "ord": 64.5,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 1729726,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "010",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-10 00:00:00",
+ "comments": 47,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 47,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485887,
+ "ord": 64,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 24816564,
+ "short_title": "63",
+ "is_in_free": false,
+ "title": "第63话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 96,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 363,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485886,
+ "ord": 63,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 21990493,
+ "short_title": "62",
+ "is_in_free": false,
+ "title": "第62话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 161,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 377,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485885,
+ "ord": 62,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 16121252,
+ "short_title": "61",
+ "is_in_free": false,
+ "title": "第61话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 35,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 338,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485884,
+ "ord": 61,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 23868117,
+ "short_title": "60",
+ "is_in_free": false,
+ "title": "第60话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 54,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 353,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485883,
+ "ord": 60,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 14907334,
+ "short_title": "59",
+ "is_in_free": false,
+ "title": "第59话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 57,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 360,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485882,
+ "ord": 59,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 21003716,
+ "short_title": "58",
+ "is_in_free": false,
+ "title": "第58话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 49,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 362,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485881,
+ "ord": 58,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 21336454,
+ "short_title": "57",
+ "is_in_free": false,
+ "title": "第57话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 43,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 335,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485880,
+ "ord": 57,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 15975510,
+ "short_title": "56",
+ "is_in_free": false,
+ "title": "第56话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 43,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 346,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485879,
+ "ord": 56,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 16073891,
+ "short_title": "55",
+ "is_in_free": false,
+ "title": "第55话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 48,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 352,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 552051,
+ "ord": 55.5,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 1380370,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "009",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 8,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 49,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485878,
+ "ord": 55,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 13480749,
+ "short_title": "54",
+ "is_in_free": false,
+ "title": "第54话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 56,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 357,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485877,
+ "ord": 54,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 21882584,
+ "short_title": "53",
+ "is_in_free": false,
+ "title": "第53话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 38,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 372,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485853,
+ "ord": 53,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 23862198,
+ "short_title": "52",
+ "is_in_free": false,
+ "title": "第52话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 56,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 388,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485852,
+ "ord": 52,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 23267613,
+ "short_title": "51",
+ "is_in_free": false,
+ "title": "第51话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 43,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 370,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485851,
+ "ord": 51,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17028529,
+ "short_title": "50",
+ "is_in_free": false,
+ "title": "第50话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 63,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 380,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485850,
+ "ord": 50,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 21963399,
+ "short_title": "49",
+ "is_in_free": false,
+ "title": "第49话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 122,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 418,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 552050,
+ "ord": 49.5,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 1650224,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "008",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 15,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 57,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485849,
+ "ord": 49,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 0,
+ "short_title": "48",
+ "is_in_free": false,
+ "title": "第48话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 71,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 392,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485848,
+ "ord": 48,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 18582327,
+ "short_title": "47",
+ "is_in_free": false,
+ "title": "第47话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 64,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 401,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485847,
+ "ord": 47,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 28025152,
+ "short_title": "46",
+ "is_in_free": false,
+ "title": "第46话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 78,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 444,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485846,
+ "ord": 46,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 18644930,
+ "short_title": "45",
+ "is_in_free": false,
+ "title": "第45话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 27,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 402,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485845,
+ "ord": 45,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17555220,
+ "short_title": "44",
+ "is_in_free": false,
+ "title": "第44话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 71,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 418,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485844,
+ "ord": 44,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 23713922,
+ "short_title": "43",
+ "is_in_free": false,
+ "title": "第43话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 41,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 392,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485842,
+ "ord": 43,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 22048242,
+ "short_title": "42",
+ "is_in_free": false,
+ "title": "第42话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 36,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 400,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485841,
+ "ord": 42,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17956496,
+ "short_title": "41",
+ "is_in_free": false,
+ "title": "第41话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 45,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 423,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485840,
+ "ord": 41,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 20461324,
+ "short_title": "40",
+ "is_in_free": false,
+ "title": "第40话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 102,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 441,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485839,
+ "ord": 40,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 16463871,
+ "short_title": "39",
+ "is_in_free": false,
+ "title": "第39话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 38,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 404,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485836,
+ "ord": 39,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 18664684,
+ "short_title": "38",
+ "is_in_free": false,
+ "title": "第38话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 42,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 403,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485835,
+ "ord": 38,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17811979,
+ "short_title": "37",
+ "is_in_free": false,
+ "title": "第37话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 46,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 422,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 552049,
+ "ord": 37.5,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 4923840,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "005~007",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 9,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 59,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485834,
+ "ord": 37,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 22221360,
+ "short_title": "36",
+ "is_in_free": false,
+ "title": "第36话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 78,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 410,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485833,
+ "ord": 36,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 19204738,
+ "short_title": "35",
+ "is_in_free": false,
+ "title": "第35话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 42,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 397,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485832,
+ "ord": 35,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17688181,
+ "short_title": "34",
+ "is_in_free": false,
+ "title": "第34话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 43,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 407,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485831,
+ "ord": 34,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 14314953,
+ "short_title": "33",
+ "is_in_free": false,
+ "title": "第33话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 138,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 430,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 485826,
+ "ord": 33,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 15190983,
+ "short_title": "32",
+ "is_in_free": false,
+ "title": "第32话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 80,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 409,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484535,
+ "ord": 32,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 21701429,
+ "short_title": "31",
+ "is_in_free": false,
+ "title": "第31话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 81,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 408,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484534,
+ "ord": 31,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 15619952,
+ "short_title": "30",
+ "is_in_free": false,
+ "title": "第30话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 61,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 429,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484528,
+ "ord": 30,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 18250579,
+ "short_title": "29",
+ "is_in_free": false,
+ "title": "第29话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 60,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 435,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484526,
+ "ord": 29,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 27051218,
+ "short_title": "28",
+ "is_in_free": false,
+ "title": "第28话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 59,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 406,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484514,
+ "ord": 28,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 0,
+ "short_title": "27",
+ "is_in_free": false,
+ "title": "第27话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 63,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 420,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484507,
+ "ord": 27,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17113482,
+ "short_title": "26",
+ "is_in_free": false,
+ "title": "第26话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 98,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 447,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484500,
+ "ord": 26,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 14359689,
+ "short_title": "25",
+ "is_in_free": false,
+ "title": "第25话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 63,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 407,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484483,
+ "ord": 25,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 15182223,
+ "short_title": "24",
+ "is_in_free": false,
+ "title": "第24话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 55,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 421,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484478,
+ "ord": 24,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 20914179,
+ "short_title": "23",
+ "is_in_free": false,
+ "title": "第23话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 75,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 447,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484474,
+ "ord": 23,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 17764811,
+ "short_title": "22",
+ "is_in_free": false,
+ "title": "第22话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 65,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 434,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484461,
+ "ord": 22,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 27296421,
+ "short_title": "21",
+ "is_in_free": false,
+ "title": "第21话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 51,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 441,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484443,
+ "ord": 21,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 15462050,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "004",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 115,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 455,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484433,
+ "ord": 20,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 20824911,
+ "short_title": "20",
+ "is_in_free": false,
+ "title": "第20话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 127,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 497,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484422,
+ "ord": 19,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 25714866,
+ "short_title": "19",
+ "is_in_free": false,
+ "title": "第19话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 106,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 537,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484395,
+ "ord": 18,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 24927577,
+ "short_title": "18",
+ "is_in_free": false,
+ "title": "第18话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 94,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 527,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484387,
+ "ord": 17,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 0,
+ "short_title": "17",
+ "is_in_free": false,
+ "title": "第17话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 48,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 493,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484377,
+ "ord": 16,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 19775909,
+ "short_title": "16",
+ "is_in_free": false,
+ "title": "第16话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 70,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 503,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 552046,
+ "ord": 15.5,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 3261603,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "003",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2021-02-18 13:17:06",
+ "comments": 39,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 385,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484376,
+ "ord": 15,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 23101595,
+ "short_title": "15",
+ "is_in_free": false,
+ "title": "第15话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 97,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 510,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484375,
+ "ord": 14,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 21456269,
+ "short_title": "14",
+ "is_in_free": false,
+ "title": "第14话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 130,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 510,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484373,
+ "ord": 13,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 22942430,
+ "short_title": "13",
+ "is_in_free": false,
+ "title": "第13话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 64,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 522,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484372,
+ "ord": 12,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 20225389,
+ "short_title": "12",
+ "is_in_free": false,
+ "title": "第12话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 67,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 499,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 552048,
+ "ord": 11.5,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 1569935,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "002",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 10,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 52,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484369,
+ "ord": 11,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 18897621,
+ "short_title": "11",
+ "is_in_free": false,
+ "title": "第11话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 82,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 566,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484367,
+ "ord": 10,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 28021344,
+ "short_title": "10",
+ "is_in_free": false,
+ "title": "第10话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 65,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 519,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484366,
+ "ord": 9,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 14198049,
+ "short_title": "9",
+ "is_in_free": false,
+ "title": "第9话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 72,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 544,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484365,
+ "ord": 8,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 14137875,
+ "short_title": "8",
+ "is_in_free": false,
+ "title": "第8话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 92,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 575,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 552047,
+ "ord": 7.5,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 1794952,
+ "short_title": "记录",
+ "is_in_free": false,
+ "title": "001",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2022-05-12 00:00:00",
+ "comments": 23,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 80,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484360,
+ "ord": 7,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 20283011,
+ "short_title": "7",
+ "is_in_free": false,
+ "title": "第7话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 83,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 589,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484351,
+ "ord": 6,
+ "read": 0,
+ "pay_mode": 1,
+ "is_locked": true,
+ "pay_gold": 49,
+ "size": 18898536,
+ "short_title": "6",
+ "is_in_free": false,
+ "title": "第6话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 43,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 626,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484350,
+ "ord": 5,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 18623472,
+ "short_title": "5",
+ "is_in_free": false,
+ "title": "第5话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 86,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 1017,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484347,
+ "ord": 4,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 15209423,
+ "short_title": "4",
+ "is_in_free": false,
+ "title": "第4话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 85,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 976,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484345,
+ "ord": 3,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 15210025,
+ "short_title": "3",
+ "is_in_free": false,
+ "title": "第3话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 72,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 972,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484344,
+ "ord": 2,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 26269998,
+ "short_title": "2",
+ "is_in_free": false,
+ "title": "第2话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 147,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 1001,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ },
+ {
+ "id": 484342,
+ "ord": 1,
+ "read": 0,
+ "pay_mode": 0,
+ "is_locked": false,
+ "pay_gold": 0,
+ "size": 81495763,
+ "short_title": "1",
+ "is_in_free": false,
+ "title": "第1话",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/94dcf91d49253ab62b601a72772a00fddb5d0c32.jpg",
+ "pub_time": "2020-10-21 00:00:00",
+ "comments": 407,
+ "unlock_expire_at": "0000-00-00 00:00:00",
+ "unlock_type": 0,
+ "allow_wait_free": false,
+ "progress": "",
+ "like_count": 1283,
+ "chapter_id": 0,
+ "type": 0,
+ "extra": 0
+ }
+ ],
+ "release_time": "2020.10.21",
+ "is_limit": 0,
+ "read_epid": 0,
+ "last_read_time": "",
+ "is_download": 1,
+ "read_short_title": "",
+ "styles2": [
+ {
+ "id": 1081,
+ "name": "悬疑灵异"
+ }
+ ],
+ "renewal_time": "",
+ "last_short_title": "后篇(4)",
+ "discount_type": 0,
+ "discount": 0,
+ "discount_end": "0001-01-01 00:00:00",
+ "no_reward": false,
+ "batch_discount_type": 0,
+ "ep_discount_type": 0,
+ "has_fav_activity": false,
+ "fav_free_amount": 0,
+ "allow_wait_free": false,
+ "wait_hour": 0,
+ "wait_free_at": "0000-00-00 00:00:00",
+ "no_danmaku": 0,
+ "auto_pay_status": 0,
+ "no_month_ticket": false,
+ "immersive": false,
+ "no_discount": false,
+ "show_type": 0,
+ "pay_mode": 1,
+ "chapters": [],
+ "classic_lines": "【此漫画的翻译由版权方提供】青梅竹马的潮死了——。听闻这个悲报,慎平回到了阔别已久的故乡和歌山市·日都岛与家人再会并出席葬礼。但是岛上貌似陡生异变,充斥着不寻常的气息……?\n夏日孤岛上的悬疑剧!!\n\n",
+ "pay_for_new": 0,
+ "fav_comic_info": {
+ "has_fav_activity": false,
+ "fav_free_amount": 0,
+ "fav_coupon_type": 0
+ },
+ "serial_status": 0,
+ "series_info": {
+ "id": 0,
+ "comics": []
+ },
+ "album_count": 0,
+ "wiki_id": 131075,
+ "disable_coupon_amount": 2,
+ "japan_comic": true,
+ "interact_value": "57514",
+ "temporary_finish_time": "",
+ "video": null,
+ "introduction": "最聪明的男主打最聪明的反派!",
+ "comment_status": 1,
+ "no_screenshot": true,
+ "type": 0,
+ "vomic_cvs": [],
+ "no_rank": true,
+ "presale_eps": [],
+ "presale_text": "",
+ "presale_discount": 0,
+ "no_leaderboard": true
+ }
+}
+```
+
+
diff --git a/docs/manga/Download.md b/docs/manga/Download.md
new file mode 100644
index 0000000..fea8a8f
--- /dev/null
+++ b/docs/manga/Download.md
@@ -0,0 +1,256 @@
+# 获取当前话全部图片地址
+
+> https://manga.bilibili.com/twirp/comic.v1.Comic/GetImageIndex
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)/ APP
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ |
+| access_key | str | APP登录凭证 | 必要 | 使用APP鉴权方式时必填 |
+| appkey | str | cc8617fd6961e070 | 非必要 | |
+| mobi_app | str | android_comic | 非必要 | |
+| version | str | 4.21.0 | 非必要 | |
+| build | str | 36421000 | 非必要 | |
+| channel | str | bilicomic | 非必要 | |
+| platform | str | android | 非必要 | |
+| device | str | android | 非必要 | |
+| buvid | str | XY118701XXXXXXXXX104911DXXXXXCAEXXXXE | 非必要 | 长度为37 |
+| machine | str | | 非必要 | 手机品牌+型号 |
+| is_teenager | num | 0 | 非必要 | |
+| no_recommend | num | 0 | 非必要 | |
+| ts | num | 秒级时间戳 | 非必要 |
+
+**正文参数( application/json ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ------------------------ | ------ | ------------------------------------------------- |
+| epId(ep_id) | num | 当前话的id | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 |
+| msg | str | 错误信息 | |
+| data | obj | | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| path | str | .index 文件路径 | |
+| images | array | 本话图片信息 | |
+| last_modified | str | 本话信息最后修改时间 | |
+| host | str | `https://manga.hdslb.com` | |
+| video | obj | | |
+
+`images` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| path | str | 图片的路径 | 不包含host |
+| x | num | 图片宽度 | 单位:像素px |
+| y | num | 图片高度 | 单位:像素px |
+| video_path | str | | |
+| video_size | str | | |
+
+`video` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| svid | str | | |
+| filename | str | | |
+| route | str | | |
+| resource | array | | |
+| raw_width | str | | |
+| raw_height | str | | |
+| raw_rotate | str | | |
+| img_urls | array | | |
+| bin_url | str | | |
+| img_x_len | num | | |
+| img_x_size | num | | |
+| img_y_len | num | | |
+| img_y_size | num | | |
+
+
+**示例:**
+
+```bash
+curl -L -X POST 'https://manga.bilibili.com/twirp/comic.v1.Comic/GetImageIndex' \
+-H 'Cookie: SESSDATA=xxx;' \
+-H 'Content-Type: application/json' \
+--data-raw '{
+ "ep_id": 321912
+}'
+```
+
+
+查看响应示例:
+
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "data": {
+ "path": "/bfs/manga/26564/321912/data.index?token=80eab62fef85c1c134a6399f817a938f&ts=63404145",
+ "images": [
+ {
+ "path": "/bfs/manga/11e404e602fa9f709bfb89d692ac56d2e17f974d.jpg",
+ "x": 1600,
+ "y": 2268,
+ "video_path": "",
+ "video_size": "0"
+ },
+ {
+ "path": "/bfs/manga/bf1c48540b68f473b429317d8f6fa8cdb6eed3a5.jpg",
+ "x": 1600,
+ "y": 2268,
+ "video_path": "",
+ "video_size": "0"
+ },
+ {
+ "path": "/bfs/manga/a46cfe90cfb49c67a4dbfc0002e5bc3d87d02963.jpg",
+ "x": 1600,
+ "y": 2268,
+ "video_path": "",
+ "video_size": "0"
+ }
+ ],
+ "last_modified": "2019-05-13 21:15:53",
+ "host": "https://manga.hdslb.com",
+ "video": {
+ "svid": "",
+ "filename": "",
+ "route": "",
+ "resource": [],
+ "raw_width": "0",
+ "raw_height": "0",
+ "raw_rotate": "0",
+ "img_urls": [],
+ "bin_url": "",
+ "img_x_len": 10,
+ "img_x_size": 160,
+ "img_y_len": 10,
+ "img_y_size": 90
+ }
+ }
+}
+```
+
+
+
+# 获取某一图片的token
+
+> https://manga.bilibili.com/twirp/comic.v1.Comic/ImageToken
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)/ APP
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------ | ---- | ------------------------------------- | ------ | --------------------- |
+| access_key | str | APP登录凭证 | 必要 | 使用APP鉴权方式时必填 |
+| appkey | str | cc8617fd6961e070 | 非必要 | |
+| mobi_app | str | android_comic | 非必要 | |
+| version | str | 4.21.0 | 非必要 | |
+| build | str | 36421000 | 非必要 | |
+| channel | str | bilicomic | 非必要 | |
+| platform | str | android | 非必要 | |
+| device | str | android | 非必要 | |
+| buvid | str | XY118701XXXXXXXXX104911DXXXXXCAEXXXXE | 非必要 | 长度为37 |
+| machine | str | samsung+SM-G9730 | 非必要 | 手机品牌+型号 |
+| is_teenager | num | 0 | 非必要 | |
+| no_recommend | num | 0 | 非必要 | |
+| ts | num | 秒级时间戳 | 非必要 | |
+
+**正文参数( application/json ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------------- | ------ | ------------------------------------------------------------ |
+| urls | str | 请求token的图片地址 | 必要 | `[\"https://i0.hdslb.com{path}\"]` {path}代表图片的相对网站路径,支持jpg和webp |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ----- | -------- | ------- |
+| code | num | 返回值 | 0:成功 |
+| msg | str | 错误信息 | |
+| data | array | | |
+
+`data` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | ------------------- | ------------------------------------ |
+| url | str | 图片下载的地址 | 此时网址开头 https://manga.hdslb.com |
+| token | str | 图片下载需要的token | |
+
+**示例:**
+
+```bash
+curl -L -X POST 'https://manga.bilibili.com/twirp/comic.v1.Comic/ImageToken' \
+-H 'Cookie: SESSDATA=xxx;' \
+-H 'Content-Type: application/json' \
+--data-raw '{
+ "urls": "[\"https://i0.hdslb.com/bfs/manga/11e404e602fa9f709bfb89d692ac56d2e17f974d.jpg\"]"
+}'
+```
+
+
+查看响应示例:
+
+
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "data": [
+ {
+ "url": "https://manga.hdslb.com/bfs/manga/11e404e602fa9f709bfb89d692ac56d2e17f974d.jpg",
+ "token": "36931815abb35857627a22c347dc1c86&ts=634045c2"
+ }
+ ]
+}
+```
+
+
+
+# 下载图片
+
+*请求方式:GET*
+
+在上一步获取token的基础上,构建如下的url
+
+例如获取到此token
+
+```
+{
+ "code": 0,
+ "msg": "",
+ "data": [
+ {
+ "url": "https://manga.hdslb.com/bfs/manga/11e404e602fa9f709bfb89d692ac56d2e17f974d.jpg",
+ "token": "36931815abb35857627a22c347dc1c86&ts=634045c2"
+ }
+ ]
+}
+```
+
+则访问以下网址即可,注意需要添加`?token=`。此网址有效期较短
+
+```
+https://manga.hdslb.com/bfs/manga/11e404e602fa9f709bfb89d692ac56d2e17f974d.jpg?token=36931815abb35857627a22c347dc1c86&ts=634045c2
+```
+
+**注**:若不加取图 Token 直接访问 `https://(i0|i1).hdslb.com/bfs/(manga|new_dyn|archive)/11e404e602fa9f709bfb89d692ac56d2e17f974d.jpg`均无法获取
diff --git a/docs/manga/Season.md b/docs/manga/Season.md
new file mode 100644
index 0000000..7f59df6
--- /dev/null
+++ b/docs/manga/Season.md
@@ -0,0 +1,435 @@
+# 漫画赛季
+
+**注**:漫画赛季仅在 app 端可见,但可以使用 Cookie 鉴权
+
+## 获取赛季信息
+
+> https://manga.bilibili.com/twirp/user.v1.Season/GetSeasonInfo
+
+*请求方式:POST*
+
+**注**:接口不鉴权可查看基本信息,鉴权后可查看赛季个人信息和赛季规则。
+
+认证方式:Cookie(SESSDATA)/ APP
+
+**json 回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ---- |
+| code | num | 返回值 | |
+| msg | str | 错误信息 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------ | ----- | ------------------ | -------------------------- |
+| current_time | str | 当前时间字符串 | ISO 8601 |
+| start_time | str | 赛季开始 | ISO 8601 |
+| end_time | str | 赛季结束 | ISO 8601 |
+| remain_amount | num | 拥有积分 | 未登录为 `0` |
+| season_id | str | 第几个赛季 | |
+| tasks | array | 待领取奖励的任务 | 未登录/没有可领取时为 `[]` |
+| welfare | array | 赛季奖励 | |
+| next | obj | 未知 | 未登录为 `null` |
+| cover | str | 版头图片 | |
+| today_tasks | array | 今日的任务完成情况 | |
+| text | obj | 赛季相关文案 | 未登录为 `null` |
+| season_clock_in | obj | | |
+| announcement | obj | 未知 | 未登录为 `null` |
+| lottery | obj | | |
+| mission_point_rate | str | | |
+| season_title | str | 赛季标题 | |
+| point_rate | obj | | |
+| rank | obj | | |
+
+`data` 对象的 `rank`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ----- | ---- |
+| is_visible | bool | false | |
+
+`data` 对象的 `tasks`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | ---------- | ----------------------- |
+| title | str | 任务描述 | |
+| id | str | | |
+| status | num | 任务状态 | 应该都是`1`:待领取奖励 |
+| type | num | | 与 today_tasks 的一致 |
+| amount | num | 可获取积分 | |
+| ctime | str | 完成时间 | ISO 8601 |
+
+`data` 对象的 `next`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ---- | ---- |
+| title | str | 空 | |
+| amount | num | 0 | |
+| gap_time | num | 0 | |
+| current_time | num | 0 | |
+
+`data` 对象的 `text`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ------------ | ---- |
+| notice | str | 赛季公告 | |
+| clonckInRule | str | 赛季签到规则 | |
+
+`data` 对象的 `announcement`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ----- | ---- |
+| title | str | 空 | |
+| jump_url | str | 空 | |
+| enable | bool | false | |
+
+`data` 对象的 `point_rate`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | ---- | ---- |
+| sign_in | num | 0 | |
+| game | num | 0 | |
+| daily_mission | num | 0 | |
+| week_mission | num | 0 | |
+
+`data` 对象的 `lottery`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------------- | ---- | ------------ | ---- |
+| lottery_act_id | str | '0' | |
+| enable_lottery | bool | 是否开启抽奖 | |
+| lottery_id | str | '0' | |
+| advance_lottery_act_id | str | '0' | |
+| advance_pool_id | str | '0' | |
+
+`data` 对象的 `season_clock_in`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ---- | ---------------- | ---- |
+| is_super_luck | bool | | |
+| draw_luck_time | str | | |
+| prize_type | num | | |
+| prize_title | str | | |
+| add_up_sign | num | 赛季连续签到天数 | |
+| title | str | 签到标题 | |
+| sign_old_amount | num | | |
+| preluck_amount | num | | |
+| continuous_days | num | 连续签到天数 | |
+| address_id | str | | |
+| has_super_prize | bool | | |
+| subtitle | str | 签到子标题 | |
+| prize_image | str | | |
+| prize_target_days | num | | |
+| prize_amount | num | | |
+| tomorrow_amount | num | 明日签到积分 | |
+| entrance_tag | str | | |
+
+`data` 对象的 `today_tasks`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---------- | ------------ | ------------------------------------------- |
+| type | num | | |
+| title | str | 任务标题 | 可能为空字符串 |
+| amount | num | 可获得积分 | |
+| status | num | 完成状态 | 0:未完成 1:待领取奖励 2:已完成 |
+| duration | num | 耗时(分) | 直接完成的为 0 |
+| comics | comic 数组 | 任务指定漫画 | 仅`type=22`时有内容,所有账号是一致的 |
+| page_url | str | 空 | |
+| progress | num | 已完成进度 | |
+| sub_id | num | | `type` 一致时有效 |
+| share_type | num | `0` | |
+
+`today_tasks`对象的 `comics`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | -------- | -------- | ---- |
+| comic_id | num | 漫画 id | |
+| title | str | 漫画名称 | |
+| vertical_cover | str | 漫画封面 | |
+| styles | str 数组 | 漫画类型 | |
+
+`data` 对象的 `welfare`:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ---- | ------------ | --------------------------------------------------------- |
+| type | num | 奖励类型 | 200-限免卡 202-漫读券 203-优惠券 205-最终宝箱 |
+| success | num | 兑换状态 | 0-未兑换 2-已兑换 |
+| exchange_amount | num | 积分消耗 | |
+| boss_welfare | bool | 最终奖励 | |
+| boss_remain | num | 最终奖励剩余 | |
+| rank | num | 顺序 | |
+| title | str | 空 | |
+| url | str | 空 | |
+| kind_address_id | str | '0' | |
+
+**示例:**
+
+```bash
+curl -X POST https://manga.bilibili.com/twirp/user.v1.Season/GetSeasonInfo
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "data": {
+ "current_time": "2022-11-30T15:12:00+08:00",
+ "start_time": "2022-11-14T00:00:00+08:00",
+ "end_time": "2022-12-11T23:59:00+08:00",
+ "remain_amount": 0,
+ "season_id": "35",
+ "tasks": [],
+ "welfare": [
+ {
+ "type": 200,
+ "success": 0,
+ "exchange_amount": 100,
+ "boss_welfare": false,
+ "boss_remain": 0,
+ "rank": 1,
+ "title": "",
+ "url": "",
+ "kind_address_id": "0"
+ },
+ // 中间的省略
+ {
+ "type": 205,
+ "success": 0,
+ "exchange_amount": 0,
+ "boss_welfare": true,
+ "boss_remain": 0,
+ "rank": 21,
+ "title": "",
+ "url": "",
+ "kind_address_id": "0"
+ }
+ ],
+ "next": null,
+ "cover": "https://i0.hdslb.com/bfs/manga-static/b81fcd291cff74965b71d67e7df261de5790c2cd.png",
+ "today_tasks": [
+ {
+ "type": 18,
+ "title": "",
+ "amount": 20,
+ "status": 0,
+ "duration": 30,
+ "comics": [],
+ "page_url": "",
+ "progress": 0,
+ "sub_id": 1,
+ "share_type": 0
+ },
+ {
+ "type": 20,
+ "title": "",
+ "amount": 20,
+ "status": 0,
+ "duration": 3,
+ "comics": [],
+ "page_url": "",
+ "progress": 0,
+ "sub_id": 1,
+ "share_type": 0
+ },
+ {
+ "type": 22,
+ "title": "",
+ "amount": 50,
+ "status": 0,
+ "duration": 15,
+ "comics": [
+ {
+ "comic_id": 32190,
+ "title": "我的成就有点多",
+ "vertical_cover": "https://i0.hdslb.com/bfs/manga-static/efc403e323656fad24335aef007af5f318879597.png",
+ "styles": ["都市"]
+ },
+ {
+ "comic_id": 30538,
+ "title": "我知道你的秘密",
+ "vertical_cover": "https://i0.hdslb.com/bfs/manga-static/607f2c13afcf82ebba98f18213033d93bba7d58a.jpg",
+ "styles": ["悬疑"]
+ },
+ {
+ "comic_id": 25874,
+ "title": "桃花宝典",
+ "vertical_cover": "http://i0.hdslb.com/bfs/manga-static/bb1d33004af7dfbf197572cb9ef1c5fdd19e17a8.jpg",
+ "styles": ["都市"]
+ }
+ ],
+ "page_url": "",
+ "progress": 0,
+ "sub_id": 1,
+ "share_type": 0
+ },
+ {
+ "type": 17,
+ "title": "阅读3分钟",
+ "amount": 10,
+ "status": 0,
+ "duration": 3,
+ "comics": [],
+ "page_url": "",
+ "progress": 0,
+ "sub_id": 1,
+ "share_type": 0
+ },
+ {
+ "type": 17,
+ "title": "阅读5分钟",
+ "amount": 10,
+ "status": 0,
+ "duration": 5,
+ "comics": [],
+ "page_url": "",
+ "progress": 0,
+ "sub_id": 2,
+ "share_type": 0
+ },
+ {
+ "type": 17,
+ "title": "阅读10分钟",
+ "amount": 20,
+ "status": 0,
+ "duration": 10,
+ "comics": [],
+ "page_url": "",
+ "progress": 0,
+ "sub_id": 3,
+ "share_type": 0
+ },
+ {
+ "type": 17,
+ "title": "阅读20分钟",
+ "amount": 40,
+ "status": 0,
+ "duration": 20,
+ "comics": [],
+ "page_url": "",
+ "progress": 0,
+ "sub_id": 4,
+ "share_type": 0
+ },
+ {
+ "type": 17,
+ "title": "阅读30分钟",
+ "amount": 60,
+ "status": 0,
+ "duration": 30,
+ "comics": [],
+ "page_url": "",
+ "progress": 0,
+ "sub_id": 5,
+ "share_type": 0
+ },
+ {
+ "type": 19,
+ "title": "每日首次玩猜拳",
+ "amount": 5,
+ "status": 0,
+ "duration": 1,
+ "comics": [],
+ "page_url": "",
+ "progress": 0,
+ "sub_id": 1,
+ "share_type": 0
+ },
+ {
+ "type": 1,
+ "title": "打开系统通知",
+ "amount": 5,
+ "status": 0,
+ "duration": 0,
+ "comics": [],
+ "page_url": "",
+ "progress": 0,
+ "sub_id": 0,
+ "share_type": 0
+ },
+ {
+ "type": 2,
+ "title": "设置个人偏好",
+ "amount": 5,
+ "status": 0,
+ "duration": 0,
+ "comics": [],
+ "page_url": "",
+ "progress": 0,
+ "sub_id": 0,
+ "share_type": 0
+ }
+ ],
+ "text": null,
+ "season_clock_in": {
+ "is_super_luck": false,
+ "draw_luck_time": "",
+ "prize_type": 0,
+ "prize_title": "",
+ "add_up_sign": 0,
+ "title": "",
+ "sign_old_amount": 0,
+ "preluck_amount": 0,
+ "continuous_days": 0,
+ "address_id": "0",
+ "has_super_prize": false,
+ "subtitle": "",
+ "prize_image": "",
+ "prize_target_days": 0,
+ "prize_amount": 0,
+ "tomorrow_amount": 0,
+ "entrance_tag": ""
+ },
+ "announcement": null,
+ "lottery": {
+ "lottery_act_id": "0",
+ "enable_lottery": true,
+ "lottery_id": "0",
+ "advance_lottery_act_id": "0",
+ "advance_pool_id": "0"
+ },
+ "mission_point_rate": 0,
+ "season_title": "初冬赛季",
+ "point_rate": { "sign_in": 0, "game": 0, "daily_mission": 0, "week_mission": 0 },
+ "rank": { "is_visible": false }
+ }
+}
+```
+
+
+
+## 赛季奖励领取
+
+> https://manga.bilibili.com/twirp/user.v1.Season/TakeSeasonGifts
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)/ APP
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --------- | ---- | ------- | ------ | --------------- |
+| season_id | num | 赛季 id | 必要 | 必须为本赛季 id |
+
+**json 回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ---- |
+| code | num | 返回值 | |
+| msg | str | 错误信息 | |
+
+`code` - `msg` 对照表:
+
+| code | msg | 备注 |
+| ---- | ------------------------------------ | ---------------------------- |
+| 0 | | 领取成功 |
+| 2 | 当前没有正在进行的赛季,无法兑换奖励 | season_id 字段不正确 |
+| 7 | 任务已领取或者未完成 | 没有已经完成的 `today_tasks` |
diff --git a/docs/manga/User.md b/docs/manga/User.md
new file mode 100644
index 0000000..7118a32
--- /dev/null
+++ b/docs/manga/User.md
@@ -0,0 +1,712 @@
+# 漫画用户信息
+
+## 获取拥有的漫读券列表
+
+> https://manga.bilibili.com/twirp/user.v1.User/GetCoupons
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)/ APP
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ |
+| access_key | str | APP登录凭证 | 必要 | 使用APP鉴权方式时必填 |
+
+**正文参数 (application/json):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ------------------------ | ------ | ------------------------------------------------- |
+| pageNum | num | 页数 | 必要 | |
+| pageSize | num | 分页大小 | 必要 | 默认20,取值范围[1,100] |
+| notExpired | bool | true | 非必要 | |
+| tabType | num | 1 | 非必要 | |
+| type | num | 0 | 非必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 |
+| msg | str | 错误信息 | |
+| data | obj | | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| total_remain_amount | num | | |
+| user_coupons | array | | |
+| coupon_info | obj | | |
+
+`user_coupons` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| ID | num | 漫读券id | |
+| remain_amount | num | 漫读券剩余数 | |
+| expire_time | num | 过期时间 | |
+| reason | num | 获取方式 | |
+| type | num | 类型 | |
+| ctime | num | 获取时间 | |
+| total_amount | num | 漫读券总数 | |
+| limits | array | (?) | |
+| type_num | num | 7:福利券 | |
+| will_expire | num | 是否即将过期? 0:否 1:是 | |
+| discount | num | 0 | |
+| discount_limit | num | 0 | |
+| is_from_card | num | 0 | |
+| valid_time | str | 0001-01-01 | |
+| discount_base | num | 0 | |
+
+`coupon_info` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| new_coupon_num | num | | |
+| coupon_will_expire | num | | |
+| rent_will_expire | num | | |
+| new_rent_num | num | | |
+| discount_will_expire | num | | |
+| new_discount_num | num | | |
+| month_ticket_will_expire | num | | |
+| new_month_ticket_num | num | | |
+| silver_will_expire | num | | |
+| new_silver_num | num | | |
+| remain_item | num | | |
+| remain_discount | num | | |
+| remain_coupon | num | 拥有的漫读券数量 | |
+| remain_silver | num | 拥有的通用券数量 | |
+| remain_shop_coupon | num | 拥有的商城优惠券数量 | |
+| new_shop_num | num | | |
+| shop_will_expire | num | | |
+| new_suit_id | num | | |
+| remain_suit_coupon | num | | |
+| new_suit_num | num | | |
+| suit_will_expire | num | | |
+| vip_priv_coupon | bool | | |
+
+
+**示例:**
+
+```bash
+curl -L -X POST 'https://manga.bilibili.com/twirp/user.v1.User/GetCoupons' \
+-H 'Cookie: SESSDATA=xxx;' \
+-H 'Content-Type: application/json' \
+--data-raw '{
+ "notExpired": true,
+ "pageNum": 1,
+ "pageSize": 20,
+ "tabType": 1,
+ "type": 0
+}'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "data": {
+ "total_remain_amount": 1,
+ "user_coupons": [
+ {
+ "ID": 7473503,
+ "remain_amount": 1,
+ "expire_time": "2022-05-24 12:00:33",
+ "reason": "积分兑换",
+ "type": "福利券",
+ "ctime": "2022-05-17 12:00:33",
+ "total_amount": 1,
+ "limits": [],
+ "type_num": 7,
+ "will_expire": 0,
+ "discount": 0,
+ "discount_limit": 0,
+ "is_from_card": 0,
+ "valid_time": "0001-01-01",
+ "discount_base": 0
+ }
+ ],
+ "coupon_info": {
+ "new_coupon_num": 0,
+ "coupon_will_expire": 0,
+ "rent_will_expire": 0,
+ "new_rent_num": 0,
+ "discount_will_expire": 0,
+ "new_discount_num": 0,
+ "month_ticket_will_expire": 0,
+ "new_month_ticket_num": 0,
+ "silver_will_expire": 0,
+ "new_silver_num": 0,
+ "remain_item": 0,
+ "remain_discount": 0,
+ "remain_coupon": 1,
+ "remain_silver": 8,
+ "remain_shop_coupon": 1,
+ "new_shop_num": 0,
+ "shop_will_expire": 0,
+ "new_suit_id": 60007,
+ "remain_suit_coupon": 0,
+ "new_suit_num": 0,
+ "suit_will_expire": 0,
+ "vip_priv_coupon": false
+ }
+ }
+}
+```
+
+
+
+## 获取已购漫画
+
+> https://manga.bilibili.com/twirp/user.v1.User/GetAutoBuyComics
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)/ APP
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ---- | ------ | ---- |
+| device | str | 设备 | 非必要 | |
+| platform | str | 平台 | 非必要 | |
+
+**正文参数 (application/json):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ------------------------ | ------ | ------------------------------------------------- |
+| page_num | num | 页数 | 必要 | |
+| page_size | num | 分页大小 | 必要 | 默认15 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---------- | -------- | ------- |
+| code | num | 返回值 | 0:成功 |
+| msg | str | 错误信息 | |
+| data | obj(array) | | |
+
+`data`array中的对象
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------- | ---- | ---------------- | ---- |
+| id | num | 内部id | |
+| comic_id | str | 漫画id | |
+| comic_title | str | 漫画标题 | |
+| hcover | str | 横版头图 | |
+| scover | str | 方形头图 | |
+| vcover | str | 竖版封面图 | |
+| bought_ep_count | num | 已购章节数 | |
+| gold_status | num | | |
+| coupon_status | num | | |
+| comic_status | num | 漫画状态 | |
+| last_ord | num | 最后一话 | |
+| ctime | str | 获取时间 | |
+| last_short_title | str | 最后一话的短标题 | |
+| bug_type | num | 购买类型 | |
+| ep_for_chapters | num | | |
+| orders | obj | 自动扣费顺序 | |
+| enable_auto_pay | bool | 是否开启自动付费 | |
+| type | num | | |
+
+**示例:**
+
+```bash
+curl -L -X POST 'https://manga.bilibili.com/twirp/user.v1.User/GetAutoBuyComics' \
+-H "Cookie: xxxxx" \
+-H 'Content-Type: application/json;charset=UTF-8' \
+-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36' \
+-d '{"page_num": 1,"page_size": 15}'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "data": [
+ {
+ "id": 20276887,
+ "comic_id": 26554,
+ "comic_title": "擅长捉弄的(原)高木同学",
+ "hcover": "http://i0.hdslb.com/bfs/manga-static/443b4a49be1e92cd204af1472e2a7f41c1df7336.png",
+ "scover": "http://i0.hdslb.com/bfs/manga-static/e29eb39aed0971851efe5998d3b9c156ba52bb4e.jpg",
+ "vcover": "http://i0.hdslb.com/bfs/manga-static/9536b3d6c6eaef5992986d6b06d35188c20f4366.jpg",
+ "bought_ep_count": 13,
+ "gold_status": 2,
+ "coupon_status": 2,
+ "comic_status": 0,
+ "last_ord": 235,
+ "ctime": "2022-01-26 21:39:33",
+ "last_short_title": "235",
+ "buy_type": 0,
+ "ep_for_chapters": 0,
+ "orders": [
+ {
+ "id": 2,
+ "title": "漫读券"
+ },
+ {
+ "id": 3,
+ "title": "通用券"
+ },
+ {
+ "id": 1,
+ "title": "漫币"
+ }
+ ],
+ "enable_auto_pay": false,
+ "type": 0
+ },
+ {
+ "id": 15129353,
+ "comic_id": 29726,
+ "comic_title": "NEW GAME!",
+ "hcover": "https://i0.hdslb.com/bfs/manga-static/586df1c03978ef01eac9e6a670f26395f6495ead.jpg",
+ "scover": "https://i0.hdslb.com/bfs/manga-static/7110c8751fef26b082b5452bd515736a78bf0670.jpg",
+ "vcover": "https://i0.hdslb.com/bfs/manga-static/d3aa1477dcc9720f9bcee19c775849baad6b4e66.jpg",
+ "bought_ep_count": 4,
+ "gold_status": 2,
+ "coupon_status": 2,
+ "comic_status": 0,
+ "last_ord": 180,
+ "ctime": "2021-06-21 16:29:27",
+ "last_short_title": "180",
+ "buy_type": 0,
+ "ep_for_chapters": 0,
+ "orders": [
+ {
+ "id": 2,
+ "title": "漫读券"
+ },
+ {
+ "id": 3,
+ "title": "通用券"
+ },
+ {
+ "id": 1,
+ "title": "漫币"
+ }
+ ],
+ "enable_auto_pay": false,
+ "type": 0
+ },
+ {
+ "id": 13525712,
+ "comic_id": 28080,
+ "comic_title": "终将成为你",
+ "hcover": "https://i0.hdslb.com/bfs/manga-static/bed69097d5fdc68bff87fce1e168b810448ee145.jpg",
+ "scover": "https://i0.hdslb.com/bfs/manga-static/855e851b58c805b05b347fddb80a46dcb260afac.jpg",
+ "vcover": "https://i0.hdslb.com/bfs/manga-static/10e8243b502bd19947cd49a6ac2ea0a9b8c5daa3.jpg",
+ "bought_ep_count": 5,
+ "gold_status": 2,
+ "coupon_status": 2,
+ "comic_status": 0,
+ "last_ord": 45,
+ "ctime": "2021-04-09 08:26:41",
+ "last_short_title": "第45话",
+ "buy_type": 9,
+ "ep_for_chapters": 0,
+ "orders": [],
+ "enable_auto_pay": false,
+ "type": 0
+ },
+ {
+ "id": 13469083,
+ "comic_id": 28198,
+ "comic_title": "米诺斯的牛肉100%",
+ "hcover": "http://i0.hdslb.com/bfs/manga-static/75931d991ddd40bc49c655ff3fca770d45eac9aa.jpg",
+ "scover": "http://i0.hdslb.com/bfs/manga-static/ee37104f5d97bb486e69d660d9a93242a1c2817a.jpg",
+ "vcover": "http://i0.hdslb.com/bfs/manga-static/be5400d37c1428ecc98a8e2d1772175991a262ed.jpg",
+ "bought_ep_count": 1,
+ "gold_status": 2,
+ "coupon_status": 2,
+ "comic_status": 0,
+ "last_ord": 6,
+ "ctime": "2021-04-06 12:21:20",
+ "last_short_title": "6",
+ "buy_type": 0,
+ "ep_for_chapters": 0,
+ "orders": [],
+ "enable_auto_pay": false,
+ "type": 0
+ },
+ {
+ "id": 13436048,
+ "comic_id": 27545,
+ "comic_title": "宝石之国",
+ "hcover": "http://i0.hdslb.com/bfs/manga-static/94637fff52eca04a8f32e19ed0c2f676b9bee96e.png",
+ "scover": "http://i0.hdslb.com/bfs/manga-static/e538ce332a639809aea70c8e30a19645e9b2ae3e.jpg",
+ "vcover": "http://i0.hdslb.com/bfs/manga-static/91e03718b03b7d3a2dca53c461b4b84953ce8cb0.jpg",
+ "bought_ep_count": 11,
+ "gold_status": 2,
+ "coupon_status": 2,
+ "comic_status": 0,
+ "last_ord": 96,
+ "ctime": "2021-04-05 00:09:17",
+ "last_short_title": "96",
+ "buy_type": 0,
+ "ep_for_chapters": 0,
+ "orders": [
+ {
+ "id": 2,
+ "title": "漫读券"
+ },
+ {
+ "id": 3,
+ "title": "通用券"
+ },
+ {
+ "id": 1,
+ "title": "漫币"
+ }
+ ],
+ "enable_auto_pay": false,
+ "type": 0
+ },
+ {
+ "id": 13237163,
+ "comic_id": 27877,
+ "comic_title": "极主夫道",
+ "hcover": "https://i0.hdslb.com/bfs/manga-static/5a8b7bd678e2ae135415af31493417ae77bc83dd.png",
+ "scover": "http://i0.hdslb.com/bfs/manga-static/aa36b8cff89e42c1820e43c483d483ed3eb8d938.png",
+ "vcover": "http://i0.hdslb.com/bfs/manga-static/96a6b07bcea58955efed4df876bc8f1b5df9d5cc.jpg",
+ "bought_ep_count": 6,
+ "gold_status": 2,
+ "coupon_status": 2,
+ "comic_status": 0,
+ "last_ord": 96,
+ "ctime": "2021-03-27 12:28:27",
+ "last_short_title": "96",
+ "buy_type": 0,
+ "ep_for_chapters": 0,
+ "orders": [
+ {
+ "id": 2,
+ "title": "漫读券"
+ },
+ {
+ "id": 3,
+ "title": "通用券"
+ },
+ {
+ "id": 1,
+ "title": "漫币"
+ }
+ ],
+ "enable_auto_pay": false,
+ "type": 0
+ },
+ {
+ "id": 12913068,
+ "comic_id": 25519,
+ "comic_title": "四月是你的谎言",
+ "hcover": "http://i0.hdslb.com/bfs/manga-static/33cda8ed8e6c89691d5397dc47f8c7c7945a54c4.png",
+ "scover": "http://i0.hdslb.com/bfs/manga-static/a6ed17ddac9bb568cefeb4eda8f8f3298db6c8cd.jpg",
+ "vcover": "http://i0.hdslb.com/bfs/manga-static/6d82d75a9a2817a18e16e2b82f76312d0fd02d06.jpg",
+ "bought_ep_count": 36,
+ "gold_status": 2,
+ "coupon_status": 2,
+ "comic_status": 0,
+ "last_ord": 44,
+ "ctime": "2021-03-11 23:58:50",
+ "last_short_title": "44",
+ "buy_type": 0,
+ "ep_for_chapters": 0,
+ "orders": [
+ {
+ "id": 2,
+ "title": "漫读券"
+ },
+ {
+ "id": 3,
+ "title": "通用券"
+ },
+ {
+ "id": 1,
+ "title": "漫币"
+ }
+ ],
+ "enable_auto_pay": false,
+ "type": 0
+ },
+ {
+ "id": 12793711,
+ "comic_id": 28537,
+ "comic_title": "前男友成为了那样的男子",
+ "hcover": "https://i0.hdslb.com/bfs/manga-static/33440f7675a424dcce35459e2392e23e9d345531.jpg",
+ "scover": "http://i0.hdslb.com/bfs/manga-static/3de961215ad2a96ccf5dbb45d85db88934b545cb.jpg",
+ "vcover": "https://i0.hdslb.com/bfs/manga-static/77feff2a5f1aab93060e8ce5105e5616cb7313a7.jpg",
+ "bought_ep_count": 3,
+ "gold_status": 2,
+ "coupon_status": 2,
+ "comic_status": 0,
+ "last_ord": 54,
+ "ctime": "2021-03-06 19:20:03",
+ "last_short_title": "44",
+ "buy_type": 0,
+ "ep_for_chapters": 0,
+ "orders": [
+ {
+ "id": 2,
+ "title": "漫读券"
+ },
+ {
+ "id": 3,
+ "title": "通用券"
+ },
+ {
+ "id": 1,
+ "title": "漫币"
+ }
+ ],
+ "enable_auto_pay": false,
+ "type": 0
+ },
+ {
+ "id": 12751111,
+ "comic_id": 26009,
+ "comic_title": "辉夜大小姐想让我告白 ~天才们的恋爱头脑战~",
+ "hcover": "https://i0.hdslb.com/bfs/manga-static/7fe349fd5a3d9522546e1582ad03604e82b1ff41.png",
+ "scover": "http://i0.hdslb.com/bfs/manga-static/b0ac1e3379e940c47b31209edf016e32e8bcee37.jpg",
+ "vcover": "https://i0.hdslb.com/bfs/manga-static/6188cad7ec7ac2b0555c0a815f9d2afbe7c0c5cb.jpg",
+ "bought_ep_count": 2,
+ "gold_status": 2,
+ "coupon_status": 2,
+ "comic_status": 0,
+ "last_ord": 259,
+ "ctime": "2021-03-05 00:16:13",
+ "last_short_title": "269",
+ "buy_type": 0,
+ "ep_for_chapters": 0,
+ "orders": [
+ {
+ "id": 2,
+ "title": "漫读券"
+ },
+ {
+ "id": 3,
+ "title": "通用券"
+ },
+ {
+ "id": 1,
+ "title": "漫币"
+ }
+ ],
+ "enable_auto_pay": false,
+ "type": 0
+ },
+ {
+ "id": 12479079,
+ "comic_id": 27867,
+ "comic_title": "邪神与厨二病少女",
+ "hcover": "https://i0.hdslb.com/bfs/manga-static/96594b34528640f51ef5062648b55c871f4d4b1b.jpg",
+ "scover": "https://i0.hdslb.com/bfs/manga-static/54a7f8d35024ef46dc270dc758d882bc98c4a1c5.jpg",
+ "vcover": "https://i0.hdslb.com/bfs/manga-static/1b07c3be74d65cbb707934de190af10ca81588f3.jpg",
+ "bought_ep_count": 194,
+ "gold_status": 2,
+ "coupon_status": 2,
+ "comic_status": 0,
+ "last_ord": 216.5,
+ "ctime": "2021-02-23 00:18:06",
+ "last_short_title": "216.5",
+ "buy_type": 0,
+ "ep_for_chapters": 0,
+ "orders": [
+ {
+ "id": 2,
+ "title": "漫读券"
+ },
+ {
+ "id": 3,
+ "title": "通用券"
+ },
+ {
+ "id": 1,
+ "title": "漫币"
+ }
+ ],
+ "enable_auto_pay": false,
+ "type": 0
+ },
+ {
+ "id": 11749927,
+ "comic_id": 29119,
+ "comic_title": "足艺少女小村同学",
+ "hcover": "https://i0.hdslb.com/bfs/manga-static/30b7917fd7d8b0afe6d913f09bab31e5eafae8b6.jpg",
+ "scover": "https://i0.hdslb.com/bfs/manga-static/f4ec445bc209ad473cdf9127528c09e271535617.jpg",
+ "vcover": "https://i0.hdslb.com/bfs/manga-static/8f83793c06dc0f59cab3a6acf4b978dc3c0a01f9.jpg",
+ "bought_ep_count": 13,
+ "gold_status": 2,
+ "coupon_status": 2,
+ "comic_status": 0,
+ "last_ord": 58,
+ "ctime": "2021-01-31 11:04:31",
+ "last_short_title": "最终话",
+ "buy_type": 0,
+ "ep_for_chapters": 0,
+ "orders": [
+ {
+ "id": 2,
+ "title": "漫读券"
+ },
+ {
+ "id": 3,
+ "title": "通用券"
+ },
+ {
+ "id": 1,
+ "title": "漫币"
+ }
+ ],
+ "enable_auto_pay": false,
+ "type": 0
+ },
+ {
+ "id": 11605399,
+ "comic_id": 29053,
+ "comic_title": "如果是理想中的女儿,就算是世界最强也能受到宠爱吗?",
+ "hcover": "https://i0.hdslb.com/bfs/manga-static/5a7886e2b94515ea75a3ea34d9c77db3f2487b59.jpg",
+ "scover": "https://i0.hdslb.com/bfs/manga-static/88f6d08fed2998aba96cedbfdffba555bef4d1c1.jpg",
+ "vcover": "https://i0.hdslb.com/bfs/manga-static/517a155372e7de966cca2f5f42edabd31a90b169.jpg",
+ "bought_ep_count": 5,
+ "gold_status": 2,
+ "coupon_status": 2,
+ "comic_status": 0,
+ "last_ord": 28,
+ "ctime": "2021-01-25 19:40:15",
+ "last_short_title": "28",
+ "buy_type": 0,
+ "ep_for_chapters": 0,
+ "orders": [
+ {
+ "id": 2,
+ "title": "漫读券"
+ },
+ {
+ "id": 3,
+ "title": "通用券"
+ },
+ {
+ "id": 1,
+ "title": "漫币"
+ }
+ ],
+ "enable_auto_pay": false,
+ "type": 0
+ },
+ {
+ "id": 11386175,
+ "comic_id": 28656,
+ "comic_title": "就算这样,“步”还是靠了过来",
+ "hcover": "http://i0.hdslb.com/bfs/manga-static/c95456b2d00f84293bda62b12539d19172b45db1.jpg",
+ "scover": "http://i0.hdslb.com/bfs/manga-static/2601c1474cd214d28797381e70b2c19ac7d67869.jpg",
+ "vcover": "https://i0.hdslb.com/bfs/manga-static/3a556ed655ddf84c7930b3ce180fbdbf8f1d8112.jpg",
+ "bought_ep_count": 2,
+ "gold_status": 2,
+ "coupon_status": 2,
+ "comic_status": 0,
+ "last_ord": 160,
+ "ctime": "2021-01-17 10:48:29",
+ "last_short_title": "160",
+ "buy_type": 0,
+ "ep_for_chapters": 0,
+ "orders": [
+ {
+ "id": 2,
+ "title": "漫读券"
+ },
+ {
+ "id": 3,
+ "title": "通用券"
+ },
+ {
+ "id": 1,
+ "title": "漫币"
+ }
+ ],
+ "enable_auto_pay": false,
+ "type": 0
+ },
+ {
+ "id": 11356706,
+ "comic_id": 26731,
+ "comic_title": "在魔王城说晚安",
+ "hcover": "https://i0.hdslb.com/bfs/manga-static/061f63826f1aa24a5b9346f79b915999004b13da.jpg",
+ "scover": "http://i0.hdslb.com/bfs/manga-static/94ae037dae4cc61d580c5c3c42702ccf10d977dc.jpg",
+ "vcover": "https://i0.hdslb.com/bfs/manga-static/2958043a10024ddebfafc4fd47d3566043689300.jpg",
+ "bought_ep_count": 148,
+ "gold_status": 2,
+ "coupon_status": 2,
+ "comic_status": 0,
+ "last_ord": 292,
+ "ctime": "2021-01-16 11:25:47",
+ "last_short_title": "292",
+ "buy_type": 0,
+ "ep_for_chapters": 0,
+ "orders": [
+ {
+ "id": 2,
+ "title": "漫读券"
+ },
+ {
+ "id": 3,
+ "title": "通用券"
+ },
+ {
+ "id": 1,
+ "title": "漫币"
+ }
+ ],
+ "enable_auto_pay": false,
+ "type": 0
+ },
+ {
+ "id": 11079049,
+ "comic_id": 27355,
+ "comic_title": "堀与宫村",
+ "hcover": "https://i0.hdslb.com/bfs/manga-static/b51b905707664415dab91cf81fb0373f970b54b5.jpg",
+ "scover": "https://i0.hdslb.com/bfs/manga-static/6ac604dfd0ad6c486a520519983212d74c340f28.jpg",
+ "vcover": "https://i0.hdslb.com/bfs/manga-static/c29ba3ce67613539666582d31d42b40fb48cc3c7.jpg",
+ "bought_ep_count": 119,
+ "gold_status": 2,
+ "coupon_status": 2,
+ "comic_status": 0,
+ "last_ord": 126,
+ "ctime": "2021-01-05 12:52:59",
+ "last_short_title": "page.122",
+ "buy_type": 0,
+ "ep_for_chapters": 0,
+ "orders": [
+ {
+ "id": 2,
+ "title": "漫读券"
+ },
+ {
+ "id": 3,
+ "title": "通用券"
+ },
+ {
+ "id": 1,
+ "title": "漫币"
+ }
+ ],
+ "enable_auto_pay": false,
+ "type": 0
+ }
+ ]
+}
+```
+
+
\ No newline at end of file
diff --git a/docs/manga/index_file.md b/docs/manga/index_file.md
new file mode 100644
index 0000000..8e552f8
--- /dev/null
+++ b/docs/manga/index_file.md
@@ -0,0 +1,269 @@
+# data.index
+
+## data.index文件解析
+
+本解密及数据解析例程以《在魔王城说晚安 第 1 话 不眠之城的公主》为例
+
+本话链接:https://manga.bilibili.com/mc26731/329893 (mcid=`26731`, epid=`329893`)
+
+使用 Python 语言为例
+
+### 获取data.index
+
+直接使用 GET 方法请求该话对应的 data.index 文件地址,就会得到一个二进制文件
+
+```bash
+curl -s 'https://manga.hdslb.com/bfs/manga/26731/329893/data.index?token=4b93ced19dc5ade671064804232ef4f5&ts=634e1943' | hexdump -C
+```
+
+data.index 文件内容的 HEX 如下
+
+首部有 9 Byte 作为 File Magic 内容是 ASCII 编码的 `BILICOMIC`
+
+```
+00000000 42 49 4c 49 43 4f 4d 49 43 f5 43 06 04 7f 68 08 |BILICOMIC.C...h.|
+00000010 00 ad 08 05 00 6b 68 00 00 a5 08 05 00 6b 68 00 |.....kh......kh.|
+00000020 00 a5 08 0c 00 6b 68 69 6e c1 6d 7d 2e 0f 09 74 |.....khin.m}...t|
+00000030 ec 33 c3 8f 5c 2c 64 86 df 40 a4 82 58 9c 42 f5 |.3..\,d..@..X.B.|
+00000040 ab 21 51 4d aa f9 f1 e0 84 84 9b 40 12 58 87 1e |.!QM.......@.X..|
+00000050 ba 28 29 7d ce 89 04 03 d9 91 8d fd 7e 31 1d be |.()}........~1..|
+00000060 ba d8 35 ef cb a0 83 db 71 5e f1 ee f1 90 19 43 |..5.....q^.....C|
+00000070 03 dd 32 f7 b8 7a b7 07 7f b9 3f 7d 3a d5 54 7e |..2..z....?}:.T~|
+00000080 5f fa e2 bd c1 90 bb 0f 9c 7d 34 e4 f0 49 2f 17 |_........}4..I/.|
+00000090 39 1b c0 cc 45 25 47 72 76 34 13 12 b9 12 f9 f3 |9...E%Grv4......|
+000000a0 8b b9 56 13 72 be 60 5e 55 27 5f 98 e0 3e 41 78 |..V.r.`^U'_..>Ax|
+000000b0 d5 af 56 d0 82 3c d5 e0 55 94 70 d0 0c 16 5f 33 |..V..<..U.p..._3|
+000000c0 c5 bb 14 d7 e9 e5 4a 7c 7f db 04 ea 7b 9b 90 94 |......J|....{...|
+000000d0 fd 53 e1 d2 f8 86 1b 7c ea 97 dd 0b 22 33 75 39 |.S.....|...."3u9|
+000000e0 24 76 39 38 6d 58 a4 ed b4 14 8f 71 49 95 9c cb |$v98mX.....qI...|
+000000f0 eb 42 eb ec df a2 22 ae 39 0c 3d 03 95 43 27 55 |.B....".9.=..C'U|
+00000100 c1 c8 b2 37 2c 01 b0 f4 22 7c 51 1a 93 b5 ab 6d |...7,..."|Q....m|
+00000110 72 95 0c 33 9a ed 2d d6 22 f0 08 b6 5c bb f6 b5 |r..3..-."...\...|
+00000120 07 5f cf a1 3a 66 c8 30 41 29 31 dd 17 63 46 85 |._..:f.0A)1..cF.|
+00000130 ea 53 20 a0 aa 89 65 91 78 37 ac 4b 06 e6 59 7a |.S ...e.x7.K..Yz|
+00000140 c2 b7 10 56 cc a0 2e 85 94 09 01 89 83 43 82 a4 |...V.........C..|
+00000150 db 60 91 89 15 83 aa 45 aa d6 5f fd 6a 64 f9 1c |.`.....E.._.jd..|
+00000160 9d ef c3 6c 34 85 e7 49 8a a7 c3 bc 32 09 eb b8 |...l4..I....2...|
+00000170 ef 70 ab d6 6a d2 7f f6 96 b1 9a 75 eb f8 47 34 |.p..j......u..G4|
+00000180 db 1d 99 78 57 58 04 4e e0 c4 a4 58 d8 81 f5 02 |...xWX.N...X....|
+00000190 3c 42 7e 1c 27 98 3c 70 df 04 13 33 fa ff 21 3b |
+查看json内容:
+
+```json
+{
+ "clips": [
+ {"r": 1600, "b": 2300, "t": 0, "l": 0, "pic": 0},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 1},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 2},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 3},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 4},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 5},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 6},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 7},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 8},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 9},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 10},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 11},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 12},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 13},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 14},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 15},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 16},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 17},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 18},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 19},
+ {"r": 1600, "b": 2468, "t": 0, "l": 0, "pic": 20},
+ {"r": 846, "b": 1200, "t": 0, "l": 0, "pic": 21}
+ ],
+ "pics": [
+ "/bfs/manga/fc655fa220dfab74bb91b9b6e308e92e1f74fc4b.jpg",
+ "/bfs/manga/cb3c882f5a72c45385541e65dba6ac7689c24ebc.jpg",
+ "/bfs/manga/9f79683a30a1f165a6abcd2550066bd0f9bce719.jpg",
+ "/bfs/manga/592702a6411a8739d041d50cff9ac52ccc3e0ab1.jpg",
+ "/bfs/manga/52fb305a77f80d4078469c67ca4c4d8031722acc.jpg",
+ "/bfs/manga/d3bb31ca1943c2558eca9df9a44b7fb52d927f1e.jpg",
+ "/bfs/manga/2ac06b8dbaae0499edf7fb6cd99c1fe4b424a96f.jpg",
+ "/bfs/manga/98f63f139ecf30e3b037635fc1f59fb40388e947.jpg",
+ "/bfs/manga/55099ea5e0e198482ea6d216a5e41b02835701b7.jpg",
+ "/bfs/manga/ee60daaf9ca659bb0df7d45402c86c79a1f64739.jpg",
+ "/bfs/manga/8620f9742fddc97d4179f18fd2b9f1b1420138dd.jpg",
+ "/bfs/manga/0490a9d8bdb6312ac56baa24ed0595a2465d98dc.jpg",
+ "/bfs/manga/bc3234cb0ba2be2b724b1a640a418f1db7b2ac43.jpg",
+ "/bfs/manga/0d16c5e9779f187916e4b173e7a6447b14707ece.jpg",
+ "/bfs/manga/58f3985afc3f2cf57052725dfea47af5634ac1c8.jpg",
+ "/bfs/manga/de09b30d952566c2c1308f5da59a2ffb3b2deb5c.jpg",
+ "/bfs/manga/36ecc5565340605883cb000f513b49bfc91e0d3e.jpg",
+ "/bfs/manga/120f3174def02b3dd908ee69b427d094506b884d.jpg",
+ "/bfs/manga/fdbe3bd0d446c0129557bd19037785456e55f12c.jpg",
+ "/bfs/manga/813a1bb68c3f89616583c8662fa81984d6a907db.jpg",
+ "/bfs/manga/fd3a53f04831e577707e4c873e2fc205e71d5cde.jpg",
+ "/bfs/manga/50e1c513336e0685ca01723d64c712294e534ca0.jpg"
+ ],
+ "sizes": [
+ {"cx": 1600, "cy": 2300},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 1600, "cy": 2468},
+ {"cx": 846, "cy": 1200}
+ ]
+}
+```
+
+
+
+## data.index内容
+
+以下内容为解密后的 JSON 数据定义
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ----- | -------- | ---- |
+| clips | array | 尺寸信息 | |
+| pics | array | 图片路径 | |
+| sizes | array | 尺寸信息 | |
+
+根对象中的`clips`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ---- |
+| 0 | obj | 第 1 页信息 | |
+| n | obj | 第 (n+1) 页信息 | |
+| …… | obj | …… | …… |
+
+`clips`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------ | ------------- |
+| r | num | 图片宽度 | |
+| b | num | 图片高度 | |
+| t | num | (?) | |
+| l | num | (?) | |
+| pic | num | 图片页码序号 | 从 0 开始递增 |
+
+根对象中的`pics`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------------- | ------------------------------ |
+| 0 | str | 第 1 图片路径 | 图片不能直接访问,需要二次鉴权 |
+| n | str | 第 (n+1) 图片路径 | |
+| …… | str | …… | …… |
+
+根对象中的`sizes`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ---- |
+| 0 | obj | 第 1 页信息 | |
+| n | obj | 第 (n+1) 页信息 | |
+| …… | obj | …… | …… |
+
+`clips`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ---- |
+| cx | num | 图片宽度 | |
+| cy | num | 图片高度 | |
diff --git a/docs/manga/light_card.md b/docs/manga/light_card.md
new file mode 100644
index 0000000..405daa4
--- /dev/null
+++ b/docs/manga/light_card.md
@@ -0,0 +1,200 @@
+# 获取轻享卡信息
+
+> https://manga.bilibili.com/twirp/card.v1.Card/GetUserLightCard
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)/ APP
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|------------|-----|----------------|-----|-----------------|
+| access_key | str | 登录`access_key` | | 与`SESSDATA`二选其一 |
+
+**json回复:**
+
+根对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+|------|-----|------|------|
+| code | num | 响应码 | 0:成功 |
+| msg | str | | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+|--------------------|-------|----------------|---------------------------------|
+| state | num | 轻享卡开通状态 | 0:未开通 1:已开通 |
+| show_state | num | | |
+| expire_date | str | 轻享卡到期时间 | |
+| receive_amount | num | 已领取数量 | |
+| save_money | num | 已节省漫币 | |
+| index | num | 默认选择签到周期 | |
+| week | array | 一个领取周期内的领取状态信息 | |
+| month_reward_state | num | 是否可选择全勤奖 | 0:不可领取 1:可领取 2:不可领取(灰色) |
+| month_reward | num | | |
+| cur_month_end | str | 全勤奖领取剩余时间 | |
+| server_time | str | 当前服务器时间 | |
+
+`week`数组中的对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+|-------------------|-----|-------------|------------------------------------------------|
+| index | num | 第几领取周期 | 从`1`开始 |
+| start_time | str | 本周期领取开始时间 | 1:待领取 2:已领取 3:明日可领 4:已失效 5:可领取 |
+| end_time | str | 本周期领取结束时间 | `同上` |
+| first | num | 本周期第1天的领取状态 | `同上` |
+| second | num | 本周期第2天的领取状态 | `同上` |
+| third | num | 本周期第3天的领取状态 | `同上` |
+| fourth | num | 本周期第4天的领取状态 | `同上` |
+| full_reward_state | num | 周期全勤奖领取状态 | 1:不可领取 2:可领取 3:已领取 |
+
+**示例:**
+
+`SESSDATA`方式:
+
+```shell
+curl -L -X POST 'https://manga.bilibili.com/twirp/card.v1.Card/GetUserLightCard' \
+-H 'Cookie: SESSDATA=xxx'
+```
+
+`access_key`方式:
+
+```shell
+curl -L -X POST 'https://manga.bilibili.com/twirp/card.v1.Card/GetUserLightCard?access_key=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "data": {
+ "state": 1,
+ "show_state": 1,
+ "expire_date": "2023-03-09T23:59:59+08:00",
+ "receive_amount": 18,
+ "save_money": 890,
+ "index": 1,
+ "week": [
+ {
+ "index": 1,
+ "start_time": "2023-02-10T00:00:00+08:00",
+ "end_time": "2023-02-16T23:59:59+08:00",
+ "first": 5,
+ "second": 1,
+ "third": 1,
+ "fourth": 1,
+ "full_reward_state": 1
+ },
+ {
+ "index": 2,
+ "start_time": "2023-02-17T00:00:00+08:00",
+ "end_time": "2023-02-23T23:59:59+08:00",
+ "first": 1,
+ "second": 1,
+ "third": 1,
+ "fourth": 1,
+ "full_reward_state": 1
+ },
+ {
+ "index": 3,
+ "start_time": "2023-02-24T00:00:00+08:00",
+ "end_time": "2023-03-02T23:59:59+08:00",
+ "first": 1,
+ "second": 1,
+ "third": 1,
+ "fourth": 1,
+ "full_reward_state": 1
+ },
+ {
+ "index": 4,
+ "start_time": "2023-03-03T00:00:00+08:00",
+ "end_time": "2023-03-09T23:59:59+08:00",
+ "first": 1,
+ "second": 1,
+ "third": 1,
+ "fourth": 1,
+ "full_reward_state": 1
+ }
+ ],
+ "month_reward_state": 0,
+ "month_reward": 0,
+ "cur_month_end": "2023-03-10T00:00:00+08:00",
+ "server_time": "2023-02-10T10:59:43+08:00"
+ }
+}
+```
+
+
+
+# 领取轻享卡奖励
+
+> https://manga.bilibili.com/twirp/card.v1.Card/GetLightCoupon
+
+*请求方式:POST*
+
+是否需要登录:`是`
+
+认证方式:Cookie(SESSDATA)/ APP
+
+Content-Type:`application/json`
+
+**URL参数:**
+
+| 参数名 | 类型 | 必填 | 内容 | 备注 |
+|------------|-----|----|-----------------|----|
+| access_key | str | | 与`SESSDATA`二选其一 | |
+
+**正文参数( application/json ):**
+
+| 参数名 | 类型 | 必填 | 内容 | 备注 |
+|-----------|-----|----|------|----------------------|
+| weekIndex | num | √ | 第几周 | 从`1`开始 |
+| type | num | √ | 领取类型 | 1:领取漫读券 2:领取限免卡 |
+
+**json回复:**
+
+根对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+|------|-----|-----|-------------------------------------------------------------------|
+| code | num | 响应码 | 0:成功 3:今日已领取,请明日再来 3:还未满足领取条件 4:找不到数据~ 6:你点击太快了哦~ |
+| msg | str | | |
+| data | obj | | |
+
+**示例:**
+
+`SESSDATA`方式:
+
+```shell
+curl -L -X POST 'https://manga.bilibili.com/twirp/card.v1.Card/GetLightCoupon' \
+-H 'content-type: application/json; charset=utf-8' \
+-H 'Cookie: SESSDATA=xxx' \
+--data-raw '{"type":1,"weekIndex":1}'
+```
+
+`access_key`方式:
+
+```shell
+curl -L -X POST 'https://manga.bilibili.com/twirp/card.v1.Card/GetLightCoupon?access_key=xxx' \
+-H 'content-type: application/json; charset=utf-8' \
+--data-raw '{"type":1,"weekIndex":1}'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "",
+ "data": {}
+}
+```
+
+
\ No newline at end of file
diff --git a/manga/point_shop.md b/docs/manga/point_shop.md
similarity index 90%
rename from manga/point_shop.md
rename to docs/manga/point_shop.md
index 8ed50cb..97d628c 100644
--- a/manga/point_shop.md
+++ b/docs/manga/point_shop.md
@@ -1,18 +1,10 @@
# 积分商城
-- [获取当前持有点数](#获取当前持有点数)
-- [获取兑换奖品列表](#获取兑换奖品列表)
-- [兑换物品](#兑换物品)
-- [获取兑换历史记录](#获取兑换历史记录)
-- [获取玩法说明](#获取玩法说明)
-
-*积分商城由web页面提供功能,地址为:*
-
-> https://manga.bilibili.com/eden/credits-exchange.html
+**注**:积分商城由web页面提供功能,地址为 https://manga.bilibili.com/eden/credits-exchange.html
## 获取当前持有点数
-> http://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetUserPoint
+> https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetUserPoint
*请求方式:POST*
@@ -37,7 +29,7 @@
**示例:**
```bash
-curl 'http://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetUserPoint' \
+curl 'https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetUserPoint' \
-b 'SESSDATA=xxx'
```
@@ -59,7 +51,7 @@ curl 'http://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetUserPoint' \
## 获取兑换奖品列表
-> http://manga.bilibili.com/twirp/pointshop.v1.Pointshop/ListProduct
+> https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/ListProduct
*请求方式:POST*
@@ -110,7 +102,7 @@ curl 'http://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetUserPoint' \
**示例:**
```bash
-curl 'http://manga.bilibili.com/twirp/pointshop.v1.Pointshop/ListProduct'
+curl 'https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/ListProduct'
```
@@ -252,7 +244,7 @@ curl 'http://manga.bilibili.com/twirp/pointshop.v1.Pointshop/ListProduct'
## 兑换物品
-> http://manga.bilibili.com/twirp/pointshop.v1.Pointshop/Exchange
+> https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/Exchange
*请求方式:POST*
@@ -272,13 +264,13 @@ curl 'http://manga.bilibili.com/twirp/pointshop.v1.Pointshop/ListProduct'
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:兑换成功 1:积分不足 2:库存不足 3:product point mismatch(point填写错误) 3:超过用户最大可兑换数量 4:现在抢票的人太多啦,再点一下有机会优先上车喔 ε=ε=(ノ≧∇≦)ノ |
+| code | num | 返回值 | 0:兑换成功 1:积分不足 1:您点的太快了~ 2:库存不足 3:product point mismatch(point填写错误) 3:超过用户最大可兑换数量 4:现在抢票的人太多啦,再点一下有机会优先上车喔 ε=ε=(ノ≧∇≦)ノ |
| message | str | 错误信息 | |
**示例:**
```bash
-curl 'http://manga.bilibili.com/twirp/pointshop.v1.Pointshop/Exchange' \
+curl 'https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/Exchange' \
--data-urlencode 'product_id=195' \
--data-urlencode 'product_num=1' \
--data-urlencode 'point=real_cost' \
@@ -299,7 +291,7 @@ curl 'http://manga.bilibili.com/twirp/pointshop.v1.Pointshop/Exchange' \
## 获取兑换历史记录
-> http://manga.bilibili.com/twirp/activity.v1.Activity/GetPrizeList
+> https://manga.bilibili.com/twirp/activity.v1.Activity/GetPrizeList
*请求方式:POST*
@@ -343,7 +335,7 @@ curl 'http://manga.bilibili.com/twirp/pointshop.v1.Pointshop/Exchange' \
**示例:**
```bash
-curl 'http://manga.bilibili.com/twirp/activity.v1.Activity/GetPrizeList' \
+curl 'https://manga.bilibili.com/twirp/activity.v1.Activity/GetPrizeList' \
--data-urlencode 'act_id=90018' \
-b 'SESSDATA=xxx'
```
@@ -408,7 +400,7 @@ curl 'http://manga.bilibili.com/twirp/activity.v1.Activity/GetPrizeList' \
## 获取玩法说明
-> http://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetExchangeRule
+> https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetExchangeRule
*请求方式:POST*
@@ -431,7 +423,7 @@ curl 'http://manga.bilibili.com/twirp/activity.v1.Activity/GetPrizeList' \
**示例:**
```bash
-curl 'http://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetExchangeRule'
+curl 'https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetExchangeRule'
```
@@ -448,4 +440,4 @@ curl 'http://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetExchangeRule'
}
```
-
\ No newline at end of file
+
diff --git a/docs/message/msg.md b/docs/message/msg.md
new file mode 100644
index 0000000..8e368db
--- /dev/null
+++ b/docs/message/msg.md
@@ -0,0 +1,84 @@
+# 通知消息
+
+## 获取未读消息数
+
+>
+
+> (新接口)
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+本接口不会返回未读的私信数,要获取未读的私信数请参阅[未读私信数](private_msg.md#未读私信数)相关说明
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ---------------- | ------ | ------------------------- |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | ------------------ | -------------------------- |
+| at | num | 未读at数 | |
+| chat | num | 0 | 仅旧接口,**作用尚不明确** |
+| coin | num | 未读投币数 | |
+| danmu | num | 未读弹幕数 | |
+| favorite | num | 未读收藏数 | |
+| like | num | 未读点赞数 | |
+| recv_like | num | 未读点赞数 | 同 `like` |
+| recv_reply | num | 未读回复数 | 同 `reply` |
+| reply | num | 未读回复数 | |
+| sys_msg | num | 未读系统通知数 | |
+| sys_msg_style | num | 1 | 仅新接口, **作用尚不明确** |
+| up | num | 未读UP主助手信息数 | |
+
+**示例:**
+
+以下信息代表了未读点赞数为10,未读回复数为4,未读at消息数为3,未读系统通知数为2,未读UP主助手信息数为1
+
+```shell
+curl 'https://api.vc.bilibili.com/x/im/web/msgfeed/unread' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "at": 3,
+ "chat": 0,
+ "coin": 0,
+ "danmu": 0,
+ "favorite": 0,
+ "like": 10,
+ "recv_like": 10,
+ "recv_reply": 4,
+ "reply": 4,
+ "sys_msg": 2,
+ "sys_msg_style": 1,
+ "up": 1
+ }
+}
+```
+
+
diff --git a/docs/message/private_msg.md b/docs/message/private_msg.md
new file mode 100644
index 0000000..0baf0b4
--- /dev/null
+++ b/docs/message/private_msg.md
@@ -0,0 +1,2077 @@
+# 私信
+
+## 对象与常量说明
+
+### 会话对象
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------------- | ---- | -------------------------------- | --------------------------------------------------- |
+| talker_id | num | 聊天对象的id | `session_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id |
+| session_type | num | 聊天对象的类型 | 1:用户 2:粉丝团 |
+| at_seqno | num | 最近一次未读at自己的消息的序列号 | 在粉丝团会话中有效,若没有未读的 at 自己的消息则为 `0` |
+| top_ts | num | 置顶该会话的时间 | 微秒级时间戳;若未置顶该会话则为 `0`;用于判断是否置顶了会话 |
+| group_name | str | 粉丝团名称 | 在粉丝团会话中有效,其他会话中为空字符串 |
+| group_cover | str | 粉丝团头像 | 在粉丝团会话中有效,其他会话中为空字符串 |
+| is_follow | num | 是否关注了对方 | 在用户会话中有效,系统会话中为 `1`, 其他会话中为 `0` |
+| is_dnd | num | 是否对会话设置了免打扰 | |
+| ack_seqno | num | 最近一次已读的消息序列号 | 用于快速跳转到首条未读的消息 |
+| ack_ts | num | 最近一次已读时间 | 微秒级时间戳 |
+| session_ts | num | 会话时间 | 微秒级时间戳 |
+| unread_count | num | 未读消息数 | |
+| last_msg | 有效时:obj 无效时:null | 最近的一条消息 | 详见[私信主体对象](#私信主体对象) |
+| group_type | num | 粉丝团类型 | 在粉丝团时有效 0:应援团 2:官方群(如:ID 为 10 的粉丝团) |
+| can_fold | num | 会话是否可被折叠入未关注人消息 | 在用户会话中有效 |
+| status | num | 会话状态 | 详细信息有待补充 |
+| max_seqno | num | 最近一条消息的序列号 | |
+| new_push_msg | num | 是否有新推送的消息 | |
+| setting | num | 推送设置 | 0:接收推送 1:不接收推送 2:(?) |
+| is_guardian | num | 自己是否为对方的骑士(?) | 在用户会话中有效 0:否 2:是(?) |
+| is_intercept | num | 会话是否被拦截 | |
+| is_trust | num | 是否信任此会话 | 若为 `1`,则表示此会话之前被拦截过,但用户选择信任本会话 |
+| system_msg_type | num | 系统会话类型 | 0:非系统会话 1:主播小助手 5:系统通知(?) 7:UP主小助手 8:客服消息 9:支付小助手 |
+| account_info | obj | 会话信息 | 仅在系统会话中出现 |
+| live_status | num | 用户是否正在直播 | 在用户会话中有效,其他会话中为 `0` |
+| biz_msg_unread_count | num | 未读通知消息数 | |
+| user_label | null | (?) | **作用尚不明确** |
+
+`account_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---- |
+| name | str | 会话名称 | |
+| pic_url | str | 会话头像 | |
+
+### 私信主体对象
+
+注:私信主体对象≠[私信内容对象](private_msg_content.md)
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------- | ---- | -------------- | -------------------------------------------------------------- |
+| sender_uid | num | 发送者mid | |
+| receiver_type | num | 接收者类型 | 1:用户 2:粉丝团 |
+| receiver_id | num | 接收者id | `receiver_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id |
+| msg_type | num | 消息类型 | 详见[私信消息类型、内容说明](private_msg_content.md) |
+| content | str | 消息内容 | [私信内容对象](private_msg_content.md)**经过 JSON 序列化后的文本** |
+| msg_seqno | num | 消息序列号 | 按照时间顺序从小到大 |
+| timestamp | num | 消息发送时间 | 秒级时间戳 |
+| at_uids | 有效时:array 无效时:null | at的成员mid | 在粉丝团时有效;此项为 `null` 或 `[0]` 均表示没有 at 成员 |
+| msg_key | num | 消息唯一id | 部分库在解析JSON对象中的大数时存在数值的精度丢失问题,因此在处理此字段时可能会出现问题,建议使用修复了这一问题的库(如将大数转换成文本) |
+| msg_status | num | 消息状态 | 0:正常 1:被撤回(接口仍能返回被撤回的私信内容) 2:被系统撤回(如:消息被举报;私信将不会显示在前端,B站接口也不会返回被系统撤回的私信的信息) 50:图片已失效(私信内容为一张提示“图片出现问题”的图片) |
+| sys_cancel | bool | 是否为系统撤回 | 仅当 `msg_type` 为 `5` 且此项值为 `true` 时有此项;若此项值为 `true`,表示目标消息是被系统撤回的,此时前端将不显示该私信且没有提示 |
+| notify_code | str | 通知代码 | 发送通知时使用,以下划线 `_` 分割,第 1 项表示主业务 id,第 2 项表示子业务 id;若这条私信非通知则为空文本;详细信息有待补充 |
+| new_face_version | num | 表情包版本 | 为 `0` 或无此项表示旧版表情包,此时 B 站会自动转换成新版表情包,例如 `[doge]` -> `[tv_doge]`;`1` 为新版 |
+| msg_source | num | 消息来源 | 见[消息来源列表](#消息来源列表msg_source) |
+
+`私信主体对象`中的`at_uids`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ------- |
+| 0 | num | 用户1 | 成员mid |
+| n | num | 用户(n+1) | |
+| …… | num | …… | …… |
+
+### 消息来源列表(`msg_source`)
+
+| 代码 | 含义 | 备注 |
+| ---- | ------------------------- | ----------------------------------- |
+| 0 | 未知来源 | 在以前发送的部分私信的来源代码 |
+| 1 | iOS | |
+| 2 | Android | |
+| 3 | H5 | |
+| 4 | PC客户端 | |
+| 5 | 官方推送消息 | 包括:官方向大多数用户自动发送的私信(如:UP主小助手的推广)等 |
+| 6 | 推送/通知消息 | 包括:特别关注时稿件的自动推送、因成为契约者而自动发送的私信、包月充电回馈私信、官方发送的特定于自己的消息(如:UP主小助手的稿件审核状态通知)等 |
+| 7 | Web | |
+| 8 | 自动回复 - 被关注回复 | B站前端会显示“此条消息为自动回复” |
+| 9 | 自动回复 - 收到消息回复 | B站前端会显示“此条消息为自动回复” |
+| 10 | 自动回复 - 关键词回复 | B站前端会显示“此条消息为自动回复” |
+| 11 | 自动回复 - 大航海上船回复 | B站前端会显示“此条消息为自动回复” |
+| 12 | 自动推送 - UP 主赠言 | 在以前稿件推送消息与其附带的 UP 主赠言是 2 条不同的私信(其中 UP 主赠言的消息来源代码为 12),现在 UP 主赠言已并入为[稿件自动推送消息](private_msg_content.md#视频推送消息msg_type11)的一部分(`attach_msg`) |
+| 13 | 粉丝团系统提示 | 如:粉丝团中的提示信息“欢迎xxx入群” |
+| 16 | 系统 | 目前仅在 `msg_type` 为 `51` 时使用该代码 |
+| 17 | 互相关注 | 互相关注时自动发送的私信“我们已互相关注,开始聊天吧~” |
+| 18 | 系统提示 | 目前仅在 `msg_type` 为 `18` 时使用该代码,如:“对方主动回复或关注你前,最多发送1条消息” |
+| 19 | AI | 如:给[搜索AI助手测试版](https://space.bilibili.com/1400565964/)发送私信时对方的自动回复 |
+
+## 会话相关
+
+### 获取未读私信数
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+注: 该接口默认每 2 分钟请求一次;该接口不会返回[未读粉丝团私信数](#获取未读粉丝团私信数)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------------ | ---- | -------------------------- | ------ | -------------------------------------------------------------------------- |
+| unread_type | num | 未读类型 | 非必要 | 0:所有 1:仅已关注 2:仅未关注 3:仅被拦截 (须同时设置参数 `show_dustbin=1`) 默认为 `0` |
+| show_unfollow_list | num | 是否返回未关注人推送消息数 | 非必要 | 0:否 1:是 |
+| show_dustbin | num | 是否返回被拦截私信数 | 非必要 | 0:否 1:是 |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| msg | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------------- | ---- | ------------------------ | ---------------- |
+| unfollow_unread | num | 未读未关注用户私信数 | |
+| follow_unread | num | 未读已关注用户私信数 | |
+| unfollow_push_msg | num | 未读未关注用户推送消息数 | |
+| dustbin_push_msg | num | 未读被拦截的推送消息数 | |
+| dustbin_unread | num | 未读被拦截的私信数 | |
+| biz_msg_unfollow_unread | num | 未读未关注用户通知数 | |
+| biz_msg_follow_unread | num | 未读已关注用户通知数 | |
+| custom_unread | num | 未读客服消息数 | |
+
+**示例:**
+
+以下信息代表未读未关注用户私信数为 `1` 条,未读已关注用户私信数为 `6` 条
+
+```shell
+curl -G 'https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread' \
+ --data-urlencode 'unread_type=0' \
+ --data-urlencode 'show_unfollow_list=1' \
+ --data-urlencode 'show_dustbin=1' \
+ --data-urlencode 'build=0' \
+ --data-urlencode 'mobi_app=web' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "unfollow_unread": 1,
+ "follow_unread": 6,
+ "unfollow_push_msg": 0,
+ "dustbin_push_msg": 0,
+ "dustbin_unread": 0,
+ "biz_msg_unfollow_unread": 0,
+ "biz_msg_follow_unread": 0,
+ "custom_unread": 0
+ }
+}
+```
+
+
+
+### 获取未读粉丝团私信数
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ---------------- | ------ | ------------- |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| msg | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ---------------- | ---------------- |
+| unread_count | num | 未读粉丝团私信数 | |
+
+**示例:**
+
+以下信息代表未读粉丝团私信数为 `497` 条
+
+```shell
+curl -G 'https://api.vc.bilibili.com/session_svr/v1/session_svr/my_group_unread' \
+ --data-urlencode 'build=0' \
+ --data-urlencode 'mobi_app=web' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "unread_count": 497
+ }
+}
+```
+
+
+
+### 获取指定类型会话列表
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------- | ---- | -------------------- | ------ | ------------------------- |
+| session_type | num | 会话类型 | 必要 | 1:用户与系统 2:未关注人 3:粉丝团 4:所有 5:被拦截 6:花火商单 7:所有系统消息 8:陌生人(与 “未关注人” 不同,不包含官方消息) 9:关注的人与系统 |
+| group_fold | num | 是否折叠粉丝团消息 | 非必要 | 0:否 1:是 |
+| unfollow_fold | num | 是否折叠未关注人消息 | 非必要 | 0:否 1:是 |
+| sort_rule | num | 排序方式 | 非必要 | 仅当 `session_type` 不为 `4`、`7` 时有效 1、2:按会话时间逆向排序 3:按已读时间逆向排序 其他:用户与系统按会话时间逆向排序,粉丝团按加入时间正向排序 |
+| begin_ts | num | 起始时间 | 非必要 | 微秒级时间戳 |
+| end_ts | num | 终止时间 | 非必要 | 微秒级时间戳 |
+| size | num | 返回的会话数 | 非必要 | 默认为 `20`,最大为 `100` |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 2:非法参数 |
+| msg | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------------- | ---- | ---------------------------- | ------------------------ |
+| session_list | 有会话时:array 无会话时:null | 会话列表 | |
+| has_more | num | 是否有更多会话 | |
+| anti_distrub_cleaning | bool | 是否开启了“一键防骚扰”功能 | |
+| is_address_list_empty | num | 0 | **作用尚不明确** |
+| system_msg | obj | 系统会话列表 | 仅当存在系统会话时有此项 |
+| show_level | bool | 是否在会话列表中显示用户等级 | 目前恒为 `true` |
+
+`data`对象中的`session_list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ------------------------- |
+| 0 | obj | 会话1 | 详见[会话对象](#会话对象) |
+| n | obj | 会话(n+1) | |
+| …… | obj | …… | …… |
+
+`data`对象中的`system_msg`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------ | ---- | ---------- | ---------------------------------------------------------- |
+| {系统会话类型代码} | num | 系统会话id | 详见[会话对象](#会话对象)中对 `system_msg_type` 字段的说明 |
+
+**示例:**
+
+获取所有类型的会话列表:
+
+```shell
+curl -G 'https://api.vc.bilibili.com/session_svr/v1/session_svr/get_sessions' \
+ --data-urlencode 'session_type=4' \
+ --data-urlencode 'group_fold=0' \
+ --data-urlencode 'unfollow_fold=0' \
+ --data-urlencode 'sort_rule=2' \
+ --data-urlencode 'size=3' \
+ --data-urlencode 'build=0' \
+ --data-urlencode 'mobi_app=web' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "session_list": [
+ {
+ "talker_id": 844424930131966,
+ "session_type": 1,
+ "at_seqno": 0,
+ "top_ts": 0,
+ "group_name": "",
+ "group_cover": "",
+ "is_follow": 1,
+ "is_dnd": 0,
+ "ack_seqno": 1238729956474887,
+ "ack_ts": 1709536924979884,
+ "session_ts": 1712305278098351,
+ "unread_count": 4,
+ "last_msg": {
+ "sender_uid": 844424930131966,
+ "receiver_type": 1,
+ "receiver_id": 425503913,
+ "msg_type": 10,
+ "content": "{\"title\":\"流量奖励到账通知\",\"text\":\"恭喜您已获得2000流量曝光奖励,快来投稿使用吧。\",\"jump_text\":\"\",\"jump_uri\":\"\",\"modules\":null,\"jump_text_2\":\"\",\"jump_uri_2\":\"\",\"jump_text_3\":\"\",\"jump_uri_3\":\"\",\"notifier\":null,\"jump_uri_config\":{\"all_uri\":\"https://member.bilibili.com/york/flow-reward?navhide=1\\u0026from=msgrecall\",\"text\":\"\"},\"jump_uri_2_config\":{\"text\":\"\"},\"jump_uri_3_config\":{\"text\":\"\"},\"biz_content\":null}",
+ "msg_seqno": 1285290404823041,
+ "timestamp": 1712305278,
+ "at_uids": null,
+ "msg_key": 7354295169819585966,
+ "msg_status": 0,
+ "notify_code": "2091_253",
+ "new_face_version": 1,
+ "msg_source": 6
+ },
+ "group_type": 0,
+ "can_fold": 0,
+ "status": 0,
+ "max_seqno": 1285290404823041,
+ "new_push_msg": 1,
+ "setting": 0,
+ "is_guardian": 0,
+ "is_intercept": 0,
+ "is_trust": 0,
+ "system_msg_type": 7,
+ "account_info": {
+ "name": "UP主小助手",
+ "pic_url": "https://message.biliimg.com/bfs/im/489a63efadfb202366c2f88853d2217b5ddc7a13.png"
+ },
+ "live_status": 0,
+ "biz_msg_unread_count": 0,
+ "user_label": null
+ },
+ {
+ "talker_id": 293793435,
+ "session_type": 1,
+ "at_seqno": 0,
+ "top_ts": 0,
+ "group_name": "",
+ "group_cover": "",
+ "is_follow": 1,
+ "is_dnd": 0,
+ "ack_seqno": 1236306587877408,
+ "ack_ts": 1709536984481314,
+ "session_ts": 1709385615744065,
+ "unread_count": 0,
+ "last_msg": {
+ "sender_uid": 293793435,
+ "receiver_type": 1,
+ "receiver_id": 425503913,
+ "msg_type": 11,
+ "content": "{\"title\":\"OHHHHHH家人们,我分数终于破w了!紫框了这下确实不好意思说自己是只打红谱的萌新了\",\"times\":14,\"cover\":\"http://i0.hdslb.com/bfs/archive/8821c03ab27a0bcf2bf32af814e758ab17a1e27e.png\",\"rid\":1951316064,\"type_\":8,\"desc\":\"OHHHHHH家人们,我分数终于破w了!紫框了这下确实不好意思说自己是只打红谱的萌新了\",\"bvid\":\"BV1zC411p7JN\",\"view\":452,\"danmaku\":0,\"pub_date\":1709385603,\"attach_msg\":null}",
+ "msg_seqno": 1236306587877408,
+ "timestamp": 1709385615,
+ "at_uids": null,
+ "msg_key": 7341755312943193481,
+ "msg_status": 0,
+ "notify_code": "",
+ "new_face_version": 1,
+ "msg_source": 6
+ },
+ "group_type": 0,
+ "can_fold": 0,
+ "status": 0,
+ "max_seqno": 1236306587877408,
+ "new_push_msg": 0,
+ "setting": 0,
+ "is_guardian": 0,
+ "is_intercept": 0,
+ "is_trust": 0,
+ "system_msg_type": 0,
+ "live_status": 0,
+ "biz_msg_unread_count": 0,
+ "user_label": null
+ },
+ {
+ "talker_id": 221082140,
+ "session_type": 2,
+ "at_seqno": 0,
+ "top_ts": 0,
+ "group_name": "社会易姐QwQ的应援团",
+ "group_cover": "http://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg",
+ "is_follow": 0,
+ "is_dnd": 0,
+ "ack_seqno": 20,
+ "ack_ts": 1695011620552332,
+ "session_ts": 1693626568439784,
+ "unread_count": 0,
+ "last_msg": {
+ "sender_uid": 0,
+ "receiver_type": 2,
+ "receiver_id": 221082140,
+ "msg_type": 306,
+ "content": "{\"group_id\":221082140,\"content\":\"欢迎罗板栗入群\"}",
+ "msg_seqno": 20,
+ "timestamp": 1693626568,
+ "at_uids": null,
+ "msg_key": 7274070721607234847,
+ "msg_status": 0,
+ "notify_code": "",
+ "msg_source": 13
+ },
+ "group_type": 0,
+ "can_fold": 0,
+ "status": 0,
+ "max_seqno": 20,
+ "new_push_msg": 0,
+ "setting": 0,
+ "is_guardian": 0,
+ "is_intercept": 0,
+ "is_trust": 0,
+ "system_msg_type": 0,
+ "live_status": 0,
+ "biz_msg_unread_count": 0,
+ "user_label": null
+ }
+ ],
+ "has_more": 1,
+ "anti_disturb_cleaning": false,
+ "is_address_list_empty": 0,
+ "system_msg": {
+ "1": 844424930131967,
+ "7": 844424930131966,
+ "9": 844424930131965
+ },
+ "show_level": true
+ }
+}
+```
+
+
+
+### 获取新会话列表
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+获取指定时间之后的新会话列表
+
+注:该接口默认每 20 秒请求一次
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ---------------- | ------ | ------------------------- |
+| begin_ts | num | 起始时间 | 非必要 | 微秒级时间戳 |
+| size | num | 返回的会话数 | 非必要 | 默认为 `20`,最大为 `100` |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| msg | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------------- | ---- | ---------------------------- | ---------------------- |
+| session_list | 有会话时:array 无会话时:null | 会话列表 | 按发送时间顺序逆向排序 |
+| has_more | num | 是否有更多会话 | |
+| anti_distrub_cleaning | bool | 是否开启了“一键防骚扰”功能 | |
+| is_address_list_empty | num | 0 | **作用尚不明确** |
+| show_level | bool | 是否在会话列表中显示用户等级 | 目前恒为 `false` |
+
+`data`对象中的`session_list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ------------------------- |
+| 0 | obj | 会话1 | 详见[会话对象](#会话对象) |
+| n | obj | 会话(n+1) | |
+| …… | obj | …… | …… |
+
+**示例:**
+
+获取`begin_ts=1712420213519391`之后的新会话列表:
+
+```shell
+curl -G 'https://api.vc.bilibili.com/session_svr/v1/session_svr/new_sessions' \
+ --data-urlencode 'begin_ts=1712420213519391' \
+ --data-urlencode 'size=3' \
+ --data-urlencode 'build=0' \
+ --data-urlencode 'mobi_app=web' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "session_list": [
+ {
+ "talker_id": 844424930131966,
+ "session_type": 1,
+ "at_seqno": 0,
+ "top_ts": 0,
+ "group_name": "",
+ "group_cover": "",
+ "is_follow": 1,
+ "is_dnd": 0,
+ "ack_seqno": 1238729956474887,
+ "ack_ts": 1709536924979884,
+ "session_ts": 1712305278098351,
+ "unread_count": 4,
+ "last_msg": {
+ "sender_uid": 844424930131966,
+ "receiver_type": 1,
+ "receiver_id": 425503913,
+ "msg_type": 10,
+ "content": "{\"title\":\"流量奖励到账通知\",\"text\":\"恭喜您已获得2000流量曝光奖励,快来投稿使用吧。\",\"jump_text\":\"\",\"jump_uri\":\"\",\"modules\":null,\"jump_text_2\":\"\",\"jump_uri_2\":\"\",\"jump_text_3\":\"\",\"jump_uri_3\":\"\",\"notifier\":null,\"jump_uri_config\":{\"all_uri\":\"https://member.bilibili.com/york/flow-reward?navhide=1\\u0026from=msgrecall\",\"text\":\"\"},\"jump_uri_2_config\":{\"text\":\"\"},\"jump_uri_3_config\":{\"text\":\"\"},\"biz_content\":null}",
+ "msg_seqno": 1285290404823041,
+ "timestamp": 1712305278,
+ "at_uids": null,
+ "msg_key": 7354295169819585966,
+ "msg_status": 0,
+ "notify_code": "2091_253",
+ "new_face_version": 1,
+ "msg_source": 6
+ },
+ "group_type": 0,
+ "can_fold": 0,
+ "status": 0,
+ "max_seqno": 1285290404823041,
+ "new_push_msg": 1,
+ "setting": 0,
+ "is_guardian": 0,
+ "is_intercept": 0,
+ "is_trust": 0,
+ "system_msg_type": 7,
+ "account_info": {
+ "name": "UP主小助手",
+ "pic_url": "https://message.biliimg.com/bfs/im/489a63efadfb202366c2f88853d2217b5ddc7a13.png"
+ },
+ "live_status": 0,
+ "biz_msg_unread_count": 0,
+ "user_label": null
+ },
+ {
+ "talker_id": 293793435,
+ "session_type": 1,
+ "at_seqno": 0,
+ "top_ts": 0,
+ "group_name": "",
+ "group_cover": "",
+ "is_follow": 1,
+ "is_dnd": 0,
+ "ack_seqno": 1236306587877408,
+ "ack_ts": 1709536984481314,
+ "session_ts": 1709385615744065,
+ "unread_count": 0,
+ "last_msg": {
+ "sender_uid": 293793435,
+ "receiver_type": 1,
+ "receiver_id": 425503913,
+ "msg_type": 11,
+ "content": "{\"title\":\"OHHHHHH家人们,我分数终于破w了!紫框了这下确实不好意思说自己是只打红谱的萌新了\",\"times\":14,\"cover\":\"http://i0.hdslb.com/bfs/archive/8821c03ab27a0bcf2bf32af814e758ab17a1e27e.png\",\"rid\":1951316064,\"type_\":8,\"desc\":\"OHHHHHH家人们,我分数终于破w了!紫框了这下确实不好意思说自己是只打红谱的萌新了\",\"bvid\":\"BV1zC411p7JN\",\"view\":452,\"danmaku\":0,\"pub_date\":1709385603,\"attach_msg\":null}",
+ "msg_seqno": 1236306587877408,
+ "timestamp": 1709385615,
+ "at_uids": null,
+ "msg_key": 7341755312943193481,
+ "msg_status": 0,
+ "notify_code": "",
+ "new_face_version": 1,
+ "msg_source": 6
+ },
+ "group_type": 0,
+ "can_fold": 0,
+ "status": 0,
+ "max_seqno": 1236306587877408,
+ "new_push_msg": 0,
+ "setting": 0,
+ "is_guardian": 0,
+ "is_intercept": 0,
+ "is_trust": 0,
+ "system_msg_type": 0,
+ "live_status": 0,
+ "biz_msg_unread_count": 0,
+ "user_label": null
+ },
+ {
+ "talker_id": 221082140,
+ "session_type": 2,
+ "at_seqno": 0,
+ "top_ts": 0,
+ "group_name": "社会易姐QwQ的应援团",
+ "group_cover": "http://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg",
+ "is_follow": 0,
+ "is_dnd": 0,
+ "ack_seqno": 20,
+ "ack_ts": 1695011620552332,
+ "session_ts": 1693626568439784,
+ "unread_count": 0,
+ "last_msg": {
+ "sender_uid": 0,
+ "receiver_type": 2,
+ "receiver_id": 221082140,
+ "msg_type": 306,
+ "content": "{\"group_id\":221082140,\"content\":\"欢迎罗板栗入群\"}",
+ "msg_seqno": 20,
+ "timestamp": 1693626568,
+ "at_uids": null,
+ "msg_key": 7274070721607234847,
+ "msg_status": 0,
+ "notify_code": "",
+ "msg_source": 13
+ },
+ "group_type": 0,
+ "can_fold": 0,
+ "status": 0,
+ "max_seqno": 20,
+ "new_push_msg": 0,
+ "setting": 0,
+ "is_guardian": 0,
+ "is_intercept": 0,
+ "is_trust": 0,
+ "system_msg_type": 0,
+ "live_status": 0,
+ "biz_msg_unread_count": 0,
+ "user_label": null
+ }
+ ],
+ "has_more": 0,
+ "anti_disturb_cleaning": false,
+ "is_address_list_empty": 0,
+ "show_level": false
+ }
+}
+```
+
+
+
+### 获取会话详细信息
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+若从未与该会话聊过天,则返回 1000004 `入口节点已存在` 错误
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------ | ---- | ---------------- | ------ | ------------------------------------------------------ |
+| talker_id | num | 聊天对象的id | 必要 | `session_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id |
+| session_type | num | 聊天对象的类型 | 必要 | 1:用户 2:粉丝团 |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 1000004:入口节点已存在 |
+| msg | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | 有效时:obj 无效时:null | 数据本体 | 详见[会话对象](#会话对象) |
+
+**示例:**
+
+获取会话`talker_id=293793435&session_type=1`的详细信息:
+
+```shell
+curl -G 'https://api.vc.bilibili.com/session_svr/v1/session_svr/session_detail' \
+ --data-urlencode 'talker_id=293793435' \
+ --data-urlencode 'session_type=1' \
+ --data-urlencode 'build=0' \
+ --data-urlencode 'mobi_app=web' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "talker_id": 293793435,
+ "session_type": 1,
+ "at_seqno": 0,
+ "top_ts": 0,
+ "group_name": "",
+ "group_cover": "",
+ "is_follow": 1,
+ "is_dnd": 0,
+ "ack_seqno": 1236306587877408,
+ "ack_ts": 1709536984481314,
+ "session_ts": 1709385615744065,
+ "unread_count": 0,
+ "last_msg": {
+ "sender_uid": 293793435,
+ "receiver_type": 1,
+ "receiver_id": 425503913,
+ "msg_type": 11,
+ "content": "{\"title\":\"OHHHHHH家人们,我分数终于破w了!紫框了这下确实不好意思说自己是只打红谱的萌新了\",\"times\":14,\"cover\":\"http://i0.hdslb.com/bfs/archive/8821c03ab27a0bcf2bf32af814e758ab17a1e27e.png\",\"rid\":1951316064,\"type_\":8,\"desc\":\"OHHHHHH家人们,我分数终于破w了!紫框了这下确实不好意思说自己是只打红谱的萌新了\",\"bvid\":\"BV1zC411p7JN\",\"view\":452,\"danmaku\":0,\"pub_date\":1709385603,\"attach_msg\":null}",
+ "msg_seqno": 1236306587877408,
+ "timestamp": 1709385615,
+ "at_uids": null,
+ "msg_key": 7341755312943193481,
+ "msg_status": 0,
+ "notify_code": "",
+ "new_face_version": 1,
+ "msg_source": 6
+ },
+ "group_type": 0,
+ "can_fold": 0,
+ "status": 0,
+ "max_seqno": 1236306587877408,
+ "new_push_msg": 0,
+ "setting": 0,
+ "is_guardian": 0,
+ "is_intercept": 0,
+ "is_trust": 0,
+ "system_msg_type": 0,
+ "live_status": 0,
+ "biz_msg_unread_count": 0,
+ "user_label": null
+ }
+}
+```
+
+
+
+### 获取会话限制状态
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+仅支持用户会话
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ---- |
+| uid | num | 聊天对象mid | 必要 | |
+| type | num | 1 | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 2:非法参数 -101:账号未登录 -400:请求错误 |
+| msg | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ------------------------ | ---------------------------- |
+| is_limit | num | 用户是否被封禁 | |
+| report_limit | num | 自己是否被限制举报该会话 | 常见于自己被封禁时出现该情况 |
+
+**示例:**
+
+获取`uid=123`的限制状态:
+
+```shell
+curl -G 'https://api.vc.bilibili.com/link_setting/v1/link_setting/is_limit' \
+ --data-urlencode 'uid=123' \
+ --data-urlencode 'type=1' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "is_limit": 0,
+ "report_limit": 0
+ }
+}
+```
+
+
+
+### 获取会话免打扰状态
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --------- | ---- | ---------------- | ------ | ----------------------- |
+| own_uid | num | 自己的mid | 必要 | |
+| uids | num | 用户mid | 非必要 | 仅支持填入 **1 个** mid |
+| group_ids | num | 粉丝团id | 非必要 | 仅支持填入 **1 个** id |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 2:非法参数 -101:账号未登录 -400:请求错误 |
+| msg | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | ----- | ---------------- | ------------------------------------- |
+| uid_settings | array | 用户免打扰状态 | 仅当请求参数 `uids` 存在时有此项 |
+| group_settings | array | 粉丝团免打扰状态 | 仅当请求参数 `group_ids` 存在时有此项 |
+
+`data`对象中的`uid_settings`、`group_settings`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | --------------------------------- |
+| 0 | obj | 会话免打扰状态 | 仅有1项 |
+
+`uid_settings`、`group_settings`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ----------------- | -------------------------------- |
+| id | num | 用户mid或粉丝团id | |
+| setting | num | 免打扰状态 | 0:关闭免打扰 1:开启免打扰 |
+
+**示例:**
+
+获取会话`uids=2`与`group_ids=221082140`的免打扰状态:
+
+```shell
+curl -G 'https://api.vc.bilibili.com/link_setting/v1/link_setting/get_msg_dnd' \
+ --data-urlencode 'own_uid=425503913' \
+ --data-urlencode 'uids=2' \
+ --data-urlencode 'group_ids=221082140' \
+ --data-urlencode 'build=0' \
+ --data-urlencode 'mobi_app=web' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "uid_settings": [{
+ "id": 2,
+ "setting": 0
+ }],
+ "group_settings": [{
+ "id": 221082140,
+ "setting": 0
+ }]
+ }
+}
+```
+
+
+
+### 获取会话推送设置
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+仅支持用户会话
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ---------------- | ------ | ------------- |
+| talker_uid | num | 聊天对象mid | 必要 | |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 2:非法参数 -101:账号未登录 -400:请求错误 |
+| msg | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ---- | ---------------------- | ----------------------------------- |
+| follow_status | num | 对方对于自己的关注属性 | 0:未关注 ~~1:悄悄关注(现已下线)~~ 2:已关注 6:已互粉 128:已拉黑 |
+| special | num | 自己是否特别关注了对方 | |
+| push_setting | num | 推送设置 | 0:接收推送 1:不接收推送 |
+| show_push_setting | num | 是否显示推送设置 | |
+
+**示例:**
+
+获取`talker_uid=123`的推送设置:
+
+```shell
+curl -G 'https://api.vc.bilibili.com/link_setting/v1/link_setting/get_session_ss' \
+ --data-urlencode 'talker_uid=123' \
+ --data-urlencode 'build=0' \
+ --data-urlencode 'mobi_app=web' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "follow_status": 6,
+ "special": 1,
+ "push_setting": 0,
+ "show_push_setting": 1
+ }
+}
+```
+
+
+
+### 设置会话为已读
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+将指定会话中的指定消息及以前的消息设置为已读
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------ | ---- | ------------------------ | ------ | ---------------------------------------------------- |
+| talker_id | num | 聊天对象的id | 必要 | `session_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id |
+| session_type | num | 聊天对象的类型 | 必要 | 1:用户 2:粉丝团 |
+| ack_seqno | num | 设置为已读的消息序列号 | 非必要 | 留空表示最新的消息 |
+| csrf_token | str | CSRF Token(位于cookie) | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| msg | str | 错误信息 | 成功时为0 |
+| message | str | 错误信息 | 成功时为0 |
+| ttl | num | | 默认为1 |
+| data | 有效时:obj 无效时:不存在该项 | 信息本体 | 空对象 |
+
+**示例:**
+
+将`talker_id=293793435`、`session_type=1`的`ack_seqno=1236306587877408`消息及之前的消息设置为已读
+
+```shell
+curl 'https://api.vc.bilibili.com/session_svr/v1/session_svr/update_ack' \
+ --data-urlencode 'talker_id=293793435' \
+ --data-urlencode 'session_type=1' \
+ --data-urlencode 'ack_seqno=1236306587877408' \
+ --data-urlencode 'csrf=xxx' \
+ --data-urlencode 'csrf_token=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
+### 移除指定会话
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+将指定会话从会话列表中移除,不会删除聊天记录
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------ | ---- | ------------------------ | ------ | ---------------------------------------------------- |
+| talker_id | num | 聊天对象的id | 必要 | `session_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id |
+| session_type | num | 聊天对象的类型 | 必要 | 1:用户 2:粉丝团 |
+| csrf_token | str | CSRF Token(位于cookie) | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| msg | str | 错误信息 | 成功时为0 |
+| message | str | 错误信息 | 成功时为0 |
+| ttl | num | | 默认为1 |
+| data | 有效时:obj 无效时:不存在该项 | 信息本体 | 空对象 |
+
+**示例:**
+
+移除会话`talker_id=2&session_type=1`
+
+```shell
+curl 'https://api.vc.bilibili.com/session_svr/v1/session_svr/remove_session' \
+ --data-urlencode 'talker_id=2' \
+ --data-urlencode 'session_type=1' \
+ --data-urlencode 'csrf=xxx' \
+ --data-urlencode 'csrf_token=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
+### 修改会话置顶状态
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------ | ---- | ------------------------ | ------ | ---------------------------------------------------- |
+| talker_id | num | 聊天对象的id | 必要 | `session_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id |
+| session_type | num | 聊天对象的类型 | 必要 | 1:用户 2:粉丝团 |
+| op_type | num | 操作类型 | 必要 | 0:置顶 1:取消置顶 |
+| csrf_token | str | CSRF Token(位于cookie) | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| msg | str | 错误信息 | 成功时为0 |
+| message | str | 错误信息 | 成功时为0 |
+| ttl | num | | 默认为1 |
+| data | 有效时:obj 无效时:不存在该项 | 信息本体 | 空对象 |
+
+**示例:**
+
+置顶会话`talker_id=293793435&session_type=1`
+
+```shell
+curl 'https://api.vc.bilibili.com/session_svr/v1/session_svr/set_top' \
+ --data-urlencode 'talker_id=293793435' \
+ --data-urlencode 'session_type=1' \
+ --data-urlencode 'op_type=0' \
+ --data-urlencode 'csrf=xxx' \
+ --data-urlencode 'csrf_token=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
+### 修改会话免打扰状态
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------ | ---- | ------------------------ | ------------ | -------------------------------- |
+| uid | num | 自己的mid | 非必要 | |
+| setting | num | 免打扰设置 | 必要 | 0:取消免打扰 1:开启免打扰 |
+| dnd_uid | num | 用户mid | 必要(可选) | 当聊天对象为用户时有效 |
+| dnd_group_id | num | 粉丝团id | 必要(可选) | 当聊天对象为粉丝团时有效 |
+| csrf_token | str | CSRF Token(位于cookie) | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| msg | str | 错误信息 | 成功时为0 |
+| message | str | 错误信息 | 成功时为0 |
+| ttl | num | | 默认为1 |
+| data | 有效时:obj 无效时:不存在该项 | 信息本体 | 空对象 |
+
+**示例:**
+
+对会话`dnd_uid=2`开启免打扰
+
+```shell
+curl 'https://api.vc.bilibili.com/link_setting/v1/link_setting/set_msg_dnd' \
+ --data-urlencode 'uid=425503913' \
+ --data-urlencode 'setting=1' \
+ --data-urlencode 'dnd_uid=2' \
+ --data-urlencode 'csrf=xxx' \
+ --data-urlencode 'csrf_token=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
+### 修改会话推送设置
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+仅支持用户会话
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------ | ------ | ------------------------------ |
+| talker_uid | num | 聊天对象mid | 必要 | |
+| setting | num | 推送设置 | 必要 | 0:接收推送 1:不接收推送 |
+| csrf_token | str | CSRF Token(位于cookie) | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| msg | str | 错误信息 | 成功时为0 |
+| message | str | 错误信息 | 成功时为0 |
+| ttl | num | | 默认为1 |
+| data | 有效时:obj 无效时:不存在该项 | 信息本体 | 空对象 |
+
+**示例:**
+
+修改`talker_uid=2`的推送设置为不接收推送
+
+```shell
+curl 'https://api.vc.bilibili.com/link_setting/v1/link_setting/set_push_ss' \
+ --data-urlencode 'talker_uid=2' \
+ --data-urlencode 'setting=1' \
+ --data-urlencode 'csrf=xxx' \
+ --data-urlencode 'csrf_token=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
+### 修改会话拦截状态
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+仅支持用户会话
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------ | ------ | ---------------------------- |
+| talker_id | num | 聊天对象mid | 必要 | |
+| status | num | 拦截状态 | 必要 | 0:取消拦截 1:设置拦截 |
+| csrf_token | str | CSRF Token(位于cookie) | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| msg | str | 错误信息 | 成功时为0 |
+| message | str | 错误信息 | 成功时为0 |
+| ttl | num | | 默认为1 |
+| data | 有效时:obj 无效时:不存在该项 | 信息本体 | 空对象 |
+
+**示例:**
+
+对会话`talker_id=2`取消拦截状态
+
+```shell
+curl 'https://api.vc.bilibili.com/session_svr/v1/session_svr/update_intercept' \
+ --data-urlencode 'talker_id=2' \
+ --data-urlencode 'status=0' \
+ --data-urlencode 'csrf=xxx' \
+ --data-urlencode 'csrf_token=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
+### 设置所有拦截会话为已读
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------ | ------ | ------------- |
+| csrf_token | str | CSRF Token(位于cookie) | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| msg | str | 错误信息 | 成功时为0 |
+| message | str | 错误信息 | 成功时为0 |
+| ttl | num | | 默认为1 |
+| data | 有效时:obj 无效时:不存在该项 | 信息本体 | 空对象 |
+
+**示例:**
+
+```shell
+curl 'https://api.vc.bilibili.com/session_svr/v1/session_svr/batch_update_dustbin_ack' \
+ --data-urlencode 'csrf=xxx' \
+ --data-urlencode 'csrf_token=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
+### 移除所有拦截会话
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------ | ------ | ------------- |
+| csrf_token | str | CSRF Token(位于cookie) | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| msg | str | 错误信息 | 成功时为0 |
+| message | str | 错误信息 | 成功时为0 |
+| ttl | num | | 默认为1 |
+| data | 有效时:obj 无效时:不存在该项 | 信息本体 | 空对象 |
+
+**示例:**
+
+```shell
+curl 'https://api.vc.bilibili.com/session_svr/v1/session_svr/batch_rm_dustbin' \
+ --data-urlencode 'csrf=xxx' \
+ --data-urlencode 'csrf_token=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
+## 私信消息相关
+
+### 查询私信消息记录
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+仅调用该接口不会设置会话为已读,详见[设置会话为已读](#设置会话为已读)
+
+此接口有设计缺陷,可以获取已经撤回(`msg_status` 为 `1`)的私信内容
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----------------- | ---- | ---------------- | ------ | ------------------------------------------------------ |
+| talker_id | num | 聊天对象的id | 必要 | `session_type` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id |
+| session_type | num | 聊天对象的类型 | 必要 | 1:用户 2:粉丝团 |
+| size | num | 返回消息数量 | 非必要 | 默认为 0,最大为 2000 当本参数为 `0` 或不存在时,只返回系统提示 |
+| begin_seqno | num | 开始的序列号 | 非必要 | 提供本参数时返回以本序列号开始(不包括本序列号)的消息 |
+| end_seqno | num | 结束的序列号 | 非必要 | 提供本参数时返回以本序列号结束(不包括本序列号)的消息 |
+| sender_device_id | num | 发送者设备 | 非必要 | 默认为 `1` |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等;**若本参数值为 `web`,则返回新版表情包** |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 2:非法参数 -101:账号未登录 -400:请求错误 700013:已解散QAQ,无法执行此操作 700014:你已不在此同萌中QAQ,无法执行此操作 |
+| msg | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ----- | ------------------------------ | ----------------------------------- |
+| messages | 有私信时:array 无私信时:null | 私信列表 | 按发送时间顺序逆向排序 |
+| has_more | num | 是否有更多私信 | |
+| min_seqno | num | 所有消息中最小的序列号(最早) | 若无私信则为 `18446744073709551615` |
+| max_seqno | num | 所有消息中最大的序列号(最晚) | 若无私信则为 `0` |
+| e_infos | array | 聊天表情列表 | 若私信列表中无表情则无此项 |
+
+`data`对象中的`messages`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | --------------------------------- |
+| 0 | obj | 私信1 | 详见[私信主体对象](#私信主体对象) |
+| n | obj | 私信(n+1) | |
+| …… | obj | …… | …… |
+
+`data`对象中的`e_infos`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---- |
+| 0 | obj | 表情1 | |
+| n | obj | 表情(n+1) | |
+| …… | obj | …… | …… |
+
+`data`对象中的`e_infos`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ----------- | ----------------------------------- |
+| text | str | 表情名称 | 包括左右两侧的中括号,如`[tv_doge]` |
+| uri | str | 表情链接 | |
+| size | num | 表情尺寸 | 1:小 2:大 |
+| gif_url | str | 表情GIF链接 | 仅部分表情存在此项,如小电视表情 |
+
+**示例:**
+
+获取与目标用户`mid=123`的私信记录:
+
+```shell
+curl -G 'https://api.vc.bilibili.com/svr_sync/v1/svr_sync/fetch_session_msgs' \
+ --data-urlencode 'talker_id=123' \
+ --data-urlencode 'session_type=1' \
+ --data-urlencode 'size=20' \
+ --data-urlencode 'sender_device_id=1' \
+ --data-urlencode 'build=0' \
+ --data-urlencode 'mobi_app=web' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "messages": [
+ {
+ "sender_uid": 2239814,
+ "receiver_type": 1,
+ "receiver_id": 123,
+ "msg_type": 1,
+ "content": "{\"content\":\"[口罩]\"}",
+ "msg_seqno": 309675413389322,
+ "timestamp": 1654154093,
+ "at_uids": [
+ 0
+ ],
+ "msg_key": 7104537732714964358,
+ "msg_status": 0,
+ "notify_code": "",
+ "new_face_version": 1,
+ "msg_source": 2
+ },
+ {
+ "sender_uid": 2239814,
+ "receiver_type": 1,
+ "receiver_id": 123,
+ "msg_type": 5,
+ "content": "{\"content\":\"1\"}",
+ "msg_seqno": 308302399586307,
+ "timestamp": 1654072255,
+ "at_uids": [
+ 0
+ ],
+ "msg_key": 7104186240789226795,
+ "msg_status": 0,
+ "notify_code": "",
+ "msg_source": 7
+
+ },
+ ],
+ "has_more": 0,
+ "min_seqno": 308188515844097,
+ "max_seqno": 309675413389322,
+ "e_infos": [
+ {
+ "text": "[口罩]",
+ "url": "http://i0.hdslb.com/bfs/emote/3ad2f66b151496d2a5fb0a8ea75f32265d778dd3.png",
+ "size": 1
+ }
+ ]
+ }
+}
+```
+
+
+
+### 获取多个视频、番剧、专栏的信息
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+可用于获取私信中分享或推送的多个视频、番剧、专栏的信息
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----------- | ---- | ---------------- | ----------- | --------------------------------------------------------------------------------------------- |
+| aids | nums | 视频AV号列表 | 必要 (可选) | `aids`、`ep_ids` 与 `article_ids` 中须至少存在一个参数,每个成员间用 `,` 分隔,最多 50 个成员 |
+| ep_ids | nums | 番剧epid列表 | 必要 (可选) | `aids`、`ep_ids` 与 `article_ids` 中须至少存在一个参数,每个成员间用 `,` 分隔,最多 50 个成员 |
+| article_ids | nums | 专栏CV号列表 | 必要 (可选) | `aids`、`ep_ids` 与 `article_ids` 中须至少存在一个参数,每个成员间用 `,` 分隔,无成员限制 |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ----- | ------------ | --------------------------------------- |
+| archive | array | 视频信息列表 | 仅在指定了 `aids` 参数时存在此项 |
+| article | array | 专栏信息列表 | 仅在指定了 `article_ids` 参数时存在此项 |
+| pgc | array | 番剧信息列表 | 仅在指定了 `ep_ids` 参数时存在此项 |
+
+`archive`、`article`、`pgc`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---- |
+| 0 | obj | 信息1 | |
+| n | obj | 信息(n+1) | |
+| …… | obj | …… | …… |
+
+`archive`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ------------ | ------------------------------ |
+| bvid | str | 视频BV号 | |
+| aid | num | 视频AV号 | |
+| title | str | 视频标题 | 若视频失效则为 `内容已失效` |
+| pic | str | 视频封面 | 若视频失效则为空文本 |
+| param | str | 提供的参数 | 即 AV 号的文本形式 |
+| uri | str | 跳转url | `bilibili://video/{视频AV号}` |
+| goto | str | `av` | |
+| duration | num | 视频时长 | 以秒为单位,若视频失效则为 `0` |
+| up_name | str | 视频UP主昵称 | |
+| view | num | 视频播放量 | |
+| danmaku | num | 视频弹幕数 | |
+| status | num | 视频状态 | 0:正常 -1:已失效 |
+| is_started | num | 1 | **作用尚不明确** |
+
+`article`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ----- | ------------ | --------------------------- |
+| id | num | 专栏CV号 | |
+| title | str | 专栏标题 | 若专栏失效则为 `内容已失效` |
+| summary | str | 专栏内容概要 | 若专栏失效则为空文本 |
+| template_id | num | (?) | **作用尚不明确** |
+| up_name | str | 专栏UP主昵称 | 若专栏失效则为空文本 |
+| image_urls | array | 专栏封面列表 | 若专栏失效则为空数组 |
+| view_num | num | 专栏观看数 | 若专栏失效则为 `0` |
+| like_num | num | 专栏点赞数 | 若专栏失效则为 `0` |
+| reply_num | num | 专栏评论数 | 若专栏失效则为 `0` |
+| status | num | 专栏状态 | 0:正常 -1:已失效 |
+
+`image_urls`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---- |
+| 0 | str | 封面1 | |
+| n | str | 封面(n+1) | |
+| …… | str | …… | …… |
+
+`pgc`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ------------ | --------------------------- |
+| ep_id | num | 番剧epid | |
+| cover | str | 番剧封面url | |
+| title | str | 番剧分享标题 | 如 `《{番剧名}》 第{n}话 {单集标题}`、`《{番剧名}》 {备注}` 等 |
+| duration | num | 番剧时长 | 以秒为单位 |
+| view | num | 番剧播放量 | |
+| danmaku | num | 番剧弹幕数 | |
+| url | str | 跳转url | `https://www.bilibili.com/bangumi/play/ep{番剧epid}` |
+
+**示例:**
+
+获取`aids=170001&ep_ids=780019&article_ids=1`的信息
+
+```shell
+curl -G 'https://api.vc.bilibili.com/x/im/feed/infoweb' \
+ --data-urlencode 'aids=170001' \
+ --data-urlencode 'ep_ids=780019' \
+ --data-urlencode 'article_ids=1' \
+ --data-urlencode 'build=0' \
+ --data-urlencode 'mobi_app=web' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "archive": [
+ {
+ "bvid": "BV17x411w7KC",
+ "aid": 170001,
+ "title": "【MV】保加利亚妖王AZIS视频合辑",
+ "pic": "http://i2.hdslb.com/bfs/archive/1ada8c32a9d168e4b2ee3e010f24789ba3353785.jpg",
+ "param": "170001",
+ "uri": "bilibili://video/170001?player_height=288&player_rotate=0&player_width=512",
+ "goto": "av",
+ "duration": 2412,
+ "up_name": "冰封.虾子",
+ "view": 44809333,
+ "danmaku": 913266,
+ "status": 0,
+ "is_started": 1
+ }
+ ],
+ "article": [
+ {
+ "id": 1,
+ "title": "未知的光",
+ "summary": "天空像是倾倒出的墨水,黑得静谧而深邃。黎明还远,光亮全无。夜不能寐。披衣,起床。茶香的弥漫,一盏灯的相伴。夜,你是我久别重逢的朋友,那一刹那的相见,带给了我久违的安思。如果不是梦魇的皮闹,我本不该投入",
+ "template_id": 4,
+ "up_name": "健行见远渐忘",
+ "image_urls": [
+ "https://i0.hdslb.com/bfs/article/d2eedf1fd338bceca10099e2f7b33fa9017c859b.jpg"
+ ],
+ "view_num": 1608818,
+ "like_num": 32247,
+ "reply_num": 14143,
+ "status": 0
+ }
+ ],
+ "pgc": [
+ {
+ "ep_id": 780019,
+ "cover": "http://i0.hdslb.com/bfs/archive/ee28c04d15fb133a9c70c502fabfbdc7e5051ffe.png",
+ "title": "《铃芽之旅》 新海诚集大成之作",
+ "duration": 7283,
+ "view": 22088209,
+ "danmaku": 93069,
+ "url": "https://www.bilibili.com/bangumi/play/ep780019"
+ }
+ ]
+ }
+}
+```
+
+
+
+### 发送私信(web端)
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:[Wbi 签名](../misc/sign/wbi.md)
+
+**仅支持发送 `msg[msg_type]` 为 `1`、`2` 或 `5` 的私信**
+
+调用该接口会将该会话设置为已读
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------- | ---- | --------------- | ------ | ------------------------------------ |
+| w_sender_uid | num | 发送者mid | 非必要 | 同正文参数 `msg[sender_uid]` |
+| w_receiver_id | num | 接收者id | 非必要 | 同正文参数 `msg[receiver_id]` |
+| w_dev_id | str | 设备id | 非必要 | 同正文参数 `msg[dev_id]` |
+| w_rid | str | Wbi 签名 | 非必要 | 参见 [Wbi 签名](../misc/sign/wbi.md) |
+| wts | str | UNIX 秒级时间戳 | 非必要 | 参见 [Wbi 签名](../misc/sign/wbi.md) |
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----------------------- | ---- | ------------------------ | ------ | ---------------------------------------------------- |
+| msg\[sender_uid\] | num | 发送者mid | 必要 | 必须为自己的 mid |
+| msg\[receiver_id\] | num | 接收者id | 必要 | `msg[receiver_type]` 为 `1` 时表示用户 mid,为 `2` 时表示粉丝团 id |
+| msg\[receiver_type\] | num | 接收者类型 | 必要 | 1:用户 2:粉丝团 |
+| msg\[msg_type\] | num | 消息类型 | 必要 | 详见[私信消息类型、内容说明](private_msg_content.md) **此接口仅支持传入 `1`、`2` 或 `5`** |
+| msg\[msg_status\] | num | 消息状态 | 非必要 | 恒为 `0` |
+| msg\[dev_id\] | str | 设备id | 必要 | 实质上即 UUID(版本 4),**生成方式见下** |
+| msg\[timestamp\] | num | 当前时间戳(秒) | 必要 | |
+| msg\[new_face_version\] | num | 表情包版本 | 非必要 | 提供 `0` 或者未提供本参数表示旧版表情包,此时 B 站会自动转换成新版表情包,例如 `[doge]` -> `[tv_doge]`;`1` 为新版 |
+| msg\[content\] | str | 消息内容 | 必要 | 详见[私信消息类型、内容说明](private_msg_content.md),接受最多2000字节的内容 |
+| csrf_token | str | CSRF Token(位于cookie) | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+---
+
+**dev_id 的生成:**
+
+dev_id 实质上就是 UUID(版本 4)
+
+
+查看生成 UUID 的代码
+
+#### Python
+
+```python
+import uuid
+
+dev_id = str(uuid.uuid4())
+```
+
+#### JavaScript
+
+以下代码适用于较新版的 JS 引擎(Chrome≥92,Firefox≥95,Safari≥15.4,Node.js≥19.0.0):
+
+```js
+const dev_id = crypto.randomUUID();
+```
+
+以下为通用代码(来自 [andywang425/BLTH](https://github.com/andywang425/BLTH/blob/45fe93e31754ca8bf07059d46266398e787dbf45/B%E7%AB%99%E7%9B%B4%E6%92%AD%E9%97%B4%E6%8C%82%E6%9C%BA%E5%8A%A9%E6%89%8B.js#L6618)):
+
+```js
+const dev_id = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (function (name) {
+ const randomInt = 16 * Math.random() | 0;
+ return ("x" === name ? randomInt : 3 & randomInt | 8).toString(16).toUpperCase();
+}));
+```
+
+#### Java
+
+```java
+import java.util.UUID;
+
+public class Main {
+ private String getDevId() {
+ UUID uuid = UUID.randomUUID();
+ return uuid.toString();
+ }
+}
+```
+
+
+
+---
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -3:系统错误 -101:账号未登录 -400:请求错误 10005:msgkey不存在 21007:消息过长,无法发送 21015:为了维护社区的良好秩序,只有绑定手机号的账号才能发送消息 21020:你发送消息频率过快,请稍后再发~ 21026:不能给自己发送消息哦~ 21028:由于系统升级,暂无法发送,敬请谅解 21035:该类消息暂时无法发送 21037:图片格式不合法,不要调戏接口啦 21041:消息已超期,不能撤回了哦 21042:消息已经撤回了哦 21046:你发消息的频率太高了,请在24小时后再发吧~ 21047:对方主动回复或关注你前,最多发送1条消息~ 25003:因对方隐私设置,暂无法给他发送聊天消息 25005:你已拉黑了对方,请先将对方移出黑名单后才能聊天 700013:已解散QAQ,无法执行此操作 700014:你已不在此同萌中QAQ,无法执行此操作 |
+| message | str | 错误信息 | 成功时为0 |
+| ttl | num | | 默认为1 |
+| data | 有效时:obj 无效时:null | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ----- | ---------- | --------------------------------------------------------------------- |
+| msg_key | num | 消息唯一id | |
+| e_infos | array | 表情列表 | 仅当请求参数 `msg[msg_type]` 为 `1`,且私信内容中有表情时有此项 |
+| msg_content | str | 发送的私信内容 | 一般同请求参数 `msg[content]` 的值,仅当请求参数 `msg[msg_type]` 为 `1` 时有此项 |
+| key_hit_infos | obj | 触发的提示 | 仅当请求参数 `msg[msg_type]` 为 `1` 且 `msg[receiver_type]` 为 `1` 时有此项 |
+
+`e_infos`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---- |
+| 0 | obj | 表情1 | |
+| n | obj | 表情(n+1) | |
+| …… | obj | …… | …… |
+
+`e_infos`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ----------- | ----------------------------------- |
+| text | str | 表情名称 | 包括左右两侧的中括号,如 `[tv_doge]` |
+| uri | str | 表情链接 | |
+| size | num | 表情尺寸 | 1:小 2:大 |
+| gif_url | str | 表情GIF链接 | 仅部分表情存在此项,如小电视表情 |
+
+`key_hit_infos`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ----- | ------------ | -------------------------------------- |
+| toast | str | 提示信息文字 | 当触发了提示时有此项 |
+| rule_id | num | 触发的规则id | 当触发了提示时有此项,详细信息有待补充 |
+| high_text | array | 高亮的文本 | 当触发了提示时有此项 |
+
+`high_text`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------- | ---------------- |
+| 0 | obj | 高亮文本1 | 详细信息有待补充 |
+| n | obj | 高亮文本(n+1) | |
+| …… | obj | …… | …… |
+
+**示例:**
+
+给目标用户`mid=1`发一条文字私信:
+
+> up主你好, 催更\[doge\]
+
+```shell
+curl 'https://api.vc.bilibili.com/web_im/v1/web_im/send_msg' \
+ --data-urlencode 'msg[sender_uid]=293793435' \
+ --data-urlencode 'msg[receiver_id]=1' \
+ --data-urlencode 'msg[receiver_type]=1' \
+ --data-urlencode 'msg[msg_type]=1' \
+ --data-urlencode 'msg[msg_status]=0' \
+ --data-urlencode 'msg[dev_id]=372778FD-E359-461D-86A3-EA2BCC6FF52A' \
+ --data-urlencode 'msg[timestamp]=1626181379' \
+ --data-urlencode 'msg[new_face_version]=1' \
+ --data-urlencode 'msg[content]={"content":"up主你好,\n催更[doge]"}' \
+ --data-urlencode 'csrf=xxx' \
+ --data-urlencode 'csrf_token=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "msg_key": 6984393491767669026,
+ "e_infos": [
+ {
+ "text": "[doge]",
+ "url": "https://i0.hdslb.com/bfs/emote/3087d273a78ccaff4bb1e9972e2ba2a7583c9f11.png",
+ "size": 1
+ }
+ ],
+ "msg_content": "{\"content\":\"up主你好,\\n催更[doge]\"}",
+ "key_hit_infos": {}
+ }
+}
+```
+
+
+
+给目标用户`mid=1`发一条图片私信:
+
+>
+
+```shell
+curl 'https://api.vc.bilibili.com/web_im/v1/web_im/send_msg' \
+ --data-urlencode 'msg[sender_uid]=293793435' \
+ --data-urlencode 'msg[receiver_id]=1' \
+ --data-urlencode 'msg[receiver_type]=1' \
+ --data-urlencode 'msg[msg_type]=2' \
+ --data-urlencode 'msg[msg_status]=0' \
+ --data-urlencode 'msg[dev_id]=372778FD-E359-461D-86A3-EA2BCC6FF52A' \
+ --data-urlencode 'msg[timestamp]=1626181379' \
+ --data-urlencode 'msg[content]={"url":"https://i1.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg","height":300,"width":300,"imageType":"jpeg","original":1,"size":54.144}' \
+ --data-urlencode 'csrf=xxx' \
+ --data-urlencode 'csrf_token=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "data": {
+ "msg_key": 6852570013146024354
+ }
+}
+```
+
+
+
+给目标用户`mid=1`发送会触发提示的私信:
+
+> 支付宝
+
+```shell
+curl 'https://api.vc.bilibili.com/web_im/v1/web_im/send_msg' \
+ --data-urlencode 'msg[sender_uid]=293793435' \
+ --data-urlencode 'msg[receiver_id]=1' \
+ --data-urlencode 'msg[receiver_type]=1' \
+ --data-urlencode 'msg[msg_type]=1' \
+ --data-urlencode 'msg[msg_status]=0' \
+ --data-urlencode 'msg[dev_id]=372778FD-E359-461D-86A3-EA2BCC6FF52A' \
+ --data-urlencode 'msg[timestamp]=1626181379' \
+ --data-urlencode 'msg[content]={"content":"支付宝"}' \
+ --data-urlencode 'csrf=xxx' \
+ --data-urlencode 'csrf_token=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "msg_key": 6984393491767669026,
+ "msg_content": "{\"content\":\"支付宝\"}",
+ "key_hit_infos": {
+ "toast": "【温馨提示】为保障消费者权益,根据平台规则,如创作者在与消费者沟通中进行发布要求非法转账、欺诈转账等违规行为,平台有权对此进行处罚,感谢您的理解。",
+ "rule_id": 2,
+ "high_text": [{}]
+ }
+ }
+}
+```
+
+
diff --git a/docs/message/private_msg_content.md b/docs/message/private_msg_content.md
new file mode 100644
index 0000000..21a5deb
--- /dev/null
+++ b/docs/message/private_msg_content.md
@@ -0,0 +1,627 @@
+# 私信消息类型、内容说明
+
+## 通用消息类型
+
+以下消息类型适用于大多数会话
+
+### 文字消息(`msg_type=1`)
+
+在发送私信时,请确保下面的对象合法且 `content` 项的值为非空文本,否则会提示 `请求错误`
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---- |
+| content | str | 私信内容 | |
+
+**示例:**
+
+内容为 `Hello` 的文字消息
+
+```json
+{
+ "content": "Hello"
+}
+```
+
+### 图片消息(`msg_type=2`)
+
+在发送私信时,请确保下面的对象合法且 `url` 项的值为 B 站的图床 url,否则会报 21037 `图片格式不合法,不要调戏接口啦` 错误
+
+建议设置 `height` 与 `width` 属性为图片的尺寸,否则可能会导致消息显示异常
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ---------- | ------------------------- |
+| url | str | 图片url | 一般为 B 站图床 url |
+| height | num | 图片高度 | 单位:像素(非必要) |
+| width | num | 图片宽度 | 单位:像素(非必要) |
+| imageType | str | 图片格式 | (非必要) |
+| original | num | 是否为原图 | 当本参数值为 `1` 时,APP上会出现“下载原图”按钮(非必要) |
+| size | num | 文件大小 | 单位:千字节(非必要) |
+
+**示例:**
+
+图片 `https://message.biliimg.com/bfs/im_new/c161fdf51d901c1607a15e30f10116dd425503913.jpg`
+
+```json
+{
+ "url": "https://message.biliimg.com/bfs/im_new/c161fdf51d901c1607a15e30f10116dd425503913.jpg",
+ "height": 300,
+ "width": 300,
+ "imageType": "jpeg",
+ "original": 1,
+ "size": 55.443
+}
+```
+
+### 撤回消息(`msg_type=5`)
+
+内容为目标私信的 `msg_key`
+
+请确保目标私信存在、在撤回有效期(120 秒)里,且与发送的私信在同一会话内,只能撤回自己发送的私信
+
+成功发送此私信后,目标私信的 `msg_status` 会变成 `1`(在前端会显示目标私信被撤回)
+
+**示例:**
+
+假如存在 `msg_key` 为 `7345551441311046575` 的私信 A,用户发送了 `msg_type` 为 `5` 且 `content` 为以下内容的私信 B:
+
+```json
+7345551441311046575
+```
+
+若发送成功,则私信 A 会被撤回(在前端显示该消息被撤回),并且其 `msg_status` 也会变成 `1`
+
+### 自定义表情消息(`msg_type=6`)
+
+结构同[图片消息](#图片消息msg_type2)
+
+### 分享消息(`msg_type=7`)
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ---------------- | -------------------------------------------------------------- |
+| author | str | 分享内容作者 | 此项不实时更新,在发送私信时设置(非必要) |
+| headline | str | 分享内容主标题 | 比 `title` 更突出;此项不实时更新,在发送私信时设置(非必要) |
+| id | num | 分享内容id | |
+| source | num | 分享内容类型 | ~~1:小视频~~(已弃用) 2:相簿 3:纯文字 4:直播(此类型不常用,见[分享其他内容消息](#分享其他内容消息msg_type14)) 5:视频 6:专栏 7:番剧(`id` 为 season_id) 8:音乐 9:国产动画(`id` 为 AV 号) 10:图片 11:动态 16:番剧(`id` 为 epid) 17:番剧 |
+| source_desc | str | 分享内容类型说明 | 仅当 `source` 值为 `16` 时有此项 |
+| thumb | str | 分享内容封面 | 此项不实时更新,在发送私信时设置 |
+| title | str | 分享内容标题 | 此项不实时更新,在发送私信时设置 |
+| url | str | 分享内容url | (非必要) |
+| bvid | str | 视频BV号 | 当 `source` 值为 `5` 时有效(非必要) |
+
+**示例:**
+
+分享 UP 主 “社会易姐QwQ” 的视频 av246551172/BV16v411e7CW
+
+```json
+{
+ "author": "社会易姐QwQ",
+ "headline": "",
+ "id": 246551172,
+ "source": 5,
+ "thumb": "http://i2.hdslb.com/bfs/archive/14ba78056f946ece8c954a10677ef6b073edb178.jpg",
+ "title": "合 成 大 東 瓜",
+ "bvid": "BV16v411e7CW"
+}
+```
+
+### ~~系统撤回消息(`msg_type=8`)~~
+
+~~此消息类型由于存在安全问题,已被弃用~~
+
+
+查看此消息类型说明
+
+此类型消息在接收时的 `msg_type` 的值为 `5`(而不是 `8`)且 `sys_cancel` 的值为 `true`,**仅在用户会话中有效;目前已不可直接发送**
+
+内容为目标私信的 `msg_key`
+
+请确保目标私信存在,且与发送的私信在同一会话内,只能撤回自己发送的私信;**不限制目标私信的发送时间**
+
+成功发送此私信后,目标私信的 `msg_status` 会变成 `2`(在前端会直接隐藏目标私信,且后端也不会返回目标私信的任何信息)
+
+
+
+### 小程序消息(`msg_type=9`)
+
+由于 B 站并没有对外公开小程序,此消息类型不常用
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ------------ | ------------------------- |
+| avatar | str | 小程序图标 | |
+| cover | str | 小程序封面 | |
+| id | str | 小程序id | |
+| jump_uri | str | 小程序链接 | |
+| label_cover | str | 标签图标 | |
+| label_name | str | 标签文字内容 | 一般为 `小程序` |
+| name | str | 小程序名称 | |
+| title | str | 小程序标题 | |
+
+**示例:**
+
+分享 “主站测试专用小程序”
+
+```json
+{
+ "avatar": "http://i0.hdslb.com/bfs/mall/mall/7b/dd/7bdd072290de017593791b52e937ca29.png",
+ "cover": "http://i0.hdslb.com/bfs/mall/mall/7b/dd/7bdd072290de017593791b52e937ca29.png",
+ "id": "bili91e3e7e93af281f9",
+ "jump_uri": "https://mall.bilibili.com/miniapp/bili91e3e7e93af281f9/pages/main?___timestamp=1689526821040&_biliFrom=about_bili_message&share_medium=android&share_source=bili_message&bbid=XU8CE838022AF6625C64B2153A3EF1E571AFF&ts=1689526821048",
+ "label_cover": "https://i0.hdslb.com/bfs/mall/mall/ae/0e/ae0ee4a857df5e307e1d04b5d420cb5b.png",
+ "label_name": "小程序",
+ "name": "主站测试专用小程序",
+ "title": "主站测试专用小程序"
+}
+```
+
+### 通知消息(`msg_type=10`)
+
+此类型消息仅可接收,**不可直接发送**
+
+**按钮显示逻辑说明:**
+
+- **按钮的url**:首先尝试读取 `jump_uri_config`、`jump_uri_2_config`、`jump_uri_3_config` 对象中表示当前设备类型的 url(如 `web_uri`、`android_uri` 等);若为空值,则尝试读取 `jump_uri_config`、`jump_uri_2_config`、`jump_uri_3_config` 对象中 `all_uri` 的值;若仍为空值,则读取根对象中 `jump_uri`、`jump_uri_2`、`jump_uri_3` 的值;若仍为空值,则不显示该按钮(无论提示文字是否为空)
+- **按钮提示文字**:若按钮是可见的,则先尝试读取 `jump_uri_config`、`jump_uri_2_config`、`jump_uri_3_config` 对象中 `text` 的值;若为空值,则读取根对象中 `jump_text`、`jump_text_2`、`jump_text_3` 的值;若仍为空值,则提示文字为 `查看详情`
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ----- | ------------- | ------------------------- |
+| title | str | 通知标题 | |
+| text | str | 通知内容 | |
+| jump_text | str | 按钮1提示文字 | 若按钮1不存在则为空;若按钮1存在,此项也可能为空,此时前端显示文字为 `查看详情` |
+| jump_uri | str | 按钮1跳转链接 | 若按钮1不存在则为空 |
+| modules | 有效时:array 无效时:null | 详细信息 | |
+| jump_text_2 | str | 按钮2提示文字 | 若按钮2不存在则为空;若按钮2存在,此项也可能为空,此时前端显示文字为 `查看详情` |
+| jump_uri_2 | str | 按钮2跳转链接 | 若按钮2不存在则为空 |
+| jump_text_3 | str | 按钮3提示文字 | 若按钮3不存在则为空;若按钮3存在,此项也可能为空,此时前端显示文字为 `查看详情` |
+| jump_uri_3 | str | 按钮3跳转链接 | 若按钮3不存在则为空 |
+| notifier | 有效时:obj 无效时:null | 发送者信息 | |
+| jump_uri_config | obj | 按钮1配置 | |
+| jump_uri_2_config | obj | 按钮2配置 | |
+| jump_uri_3_config | obj | 按钮3配置 | |
+| biz_content | 有效时:obj 无效时:null | 扩展信息 | |
+
+`modules`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------- | ---- |
+| 0 | obj | 详细信息1 | |
+| n | obj | 详细信息(n+1) | |
+| …… | obj | …… | …… |
+
+`modules`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | ---- | ---- |
+| title | str | 标题 | |
+| detail | str | 内容 | |
+
+`notifier`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ---------- | ------ |
+| avatar_url | str | 发送者头像 | |
+| nickname | str | 发送者名称 | |
+| jump_url | str | 发送者链接 | 可为空 |
+
+`jump_uri_config`、`jump_uri_2_config`、`jump_uri_3_config`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ----------------------- | -------------------- |
+| all_uri | str | 所有设备的跳转链接 | 若按钮不存在则无此项 |
+| android_uri | str | Android客户端的跳转链接 | 若按钮不存在则无此项 |
+| iphone_uri | str | iPhone客户端的跳转链接 | 若按钮不存在则无此项 |
+| ipad_uri | str | iPad客户端的跳转链接 | 若按钮不存在则无此项 |
+| web_uri | str | 网页上的跳转链接 | 若按钮不存在则无此项 |
+| text | str | 按钮提示文字 | 若按钮不存在则为空 |
+
+`biz_content`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ----------- | ---------------- |
+| cover | str | 封面url | |
+| backup_cover | str | 备用封面url | |
+| refresh_type | num | (?) | **作用尚不明确** |
+| biz_type | num | (?) | **作用尚不明确** |
+| biz_id1 | str | (?) | **作用尚不明确** |
+| biz_id2 | str | (?) | **作用尚不明确** |
+| biz_status | num | (?) | **作用尚不明确** |
+
+**示例:**
+
+直播开始提醒
+
+```json
+{
+ "title": "直播开始提醒",
+ "text": "你预约的直播已开始,快来围观吧~",
+ "jump_text": "进入直播间",
+ "jump_uri": "https://live.bilibili.com/22747055?broadcast_type=0&is_room_feed=1&live_from=27040",
+ "modules": [{
+ "title": "预约主题",
+ "detail": "2024哔哩哔哩拜年纪"
+ }, {
+ "title": "开播时间",
+ "detail": "2024-02-09 19:32"
+ }, {
+ "title": "UP主",
+ "detail": "哔哩哔哩拜年纪"
+ }],
+ "jump_text_2": "",
+ "jump_uri_2": "",
+ "jump_text_3": "",
+ "jump_uri_3": "",
+ "notifier": null,
+ "jump_uri_config": {
+ "all_uri": "https://live.bilibili.com/22747055?broadcast_type=0&is_room_feed=1&live_from=27040",
+ "text": "进入直播间"
+ },
+ "jump_uri_2_config": {
+ "text": ""
+ },
+ "jump_uri_3_config": {
+ "text": ""
+ },
+ "biz_content": {
+ "cover": "",
+ "backup_cover": "http://i0.hdslb.com/bfs/live/new_room_cover/bdae2665883ec8aa4e79aca16f3c5ee2df1da64f.jpg",
+ "refresh_type": 1,
+ "biz_type": 2,
+ "biz_id1": "1868902080",
+ "biz_id2": "473923647994271663",
+ "biz_status": 0
+ }
+}
+```
+
+### 视频推送消息(`msg_type=11`)
+
+此类型消息仅可接收,**不可直接发送**;有小概率会出现即使视频存在,也只会出现 `rid`、`type`(值为 `11` 或 `8`,注意其名称后面没有下划线)和 `attach_msg` 三项的现象
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ------------ | ------------------------------------------------------ |
+| title | str | 视频标题 | 接收私信时实时更新此项,若视频失效则为空文本 |
+| times | num | 视频时长 | 以秒为单位,接收私信时实时更新此项,若视频失效则为 `0` |
+| cover | str | 视频封面 | 接收私信时实时更新此项,若视频失效则为空文本 |
+| rid | num | 视频AV号 | |
+| type_ | num | (?) | **作用尚不明确** |
+| desc | str | 视频简介 | 接收私信时实时更新此项,若视频失效则为空文本 |
+| bvid | str | 视频BV号 | |
+| view | num | 视频播放量 | 接收私信时实时更新此项,若视频失效则为 `0` |
+| danmaku | num | 视频弹幕数 | 接收私信时实时更新此项,若视频失效则为 `0` |
+| pub_date | num | 视频发布时间 | 秒级时间戳,若视频失效则为 `0` |
+| attach_msg | 有效时:obj 无效时:null | UP主赠言 | |
+
+`attach_msg`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------------------------------------------- |
+| id | num | 赠言id | |
+| content | str | 赠言内容 | 会自动加上 `UP主赠言:` 前缀,可能包含私信表情 |
+
+**示例:**
+
+推送视频 av740817783/BV1Dk4y1E7MZ
+
+```json
+{
+ "title": "【2023嵌入式大赛】浅浅测试一下龙芯开发板",
+ "times": 308,
+ "cover": "http://i2.hdslb.com/bfs/archive/880c937de9af758451aa94ee29771e0264c1903a.jpg",
+ "rid": 740817783,
+ "type_": 8,
+ "desc": "最近把龙芯开发板部分(任务一)程序完成了,时间非常紧迫,就不知道为啥突然给省赛加个(本来国赛的题\n从硬件焊接开始,到软件整完不过5天啊喂,肝疼,过几天比赛完发硬件制作过程\n硬件使用龙芯一号(LS1B010)SOC,软件使用 C 语言+FreeRTOS+VSCode 开发",
+ "bvid": "BV1Dk4y1E7MZ",
+ "view": 13492,
+ "danmaku": 5,
+ "pub_date": 1683381582,
+ "attach_msg": null
+}
+```
+
+### 专栏推送消息(`msg_type=12`)
+
+此类型消息仅可接收,**不可直接发送**;有小概率会出现即使专栏存在,也只会出现 `rid`、`type`(值为 `12`)和 `attach_msg` 三项的现象
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ------------ | ------------------------------------------------------ |
+| rid | num | 专栏CV号 | |
+| title | str | 专栏标题 | 接收私信时实时更新此项,若专栏失效则为 `内容已失效` |
+| summary | str | 专栏内容概要 | 接收私信时实时更新此项,若专栏失效则为空文本 |
+| author | str | 专栏UP主昵称 | 接收私信时实时更新此项,若专栏失效则为空文本 |
+| view | num | 专栏观看数 | 接收私信时实时更新此项,若专栏失效则为 `0` |
+| like | num | 专栏点赞数 | 接收私信时实时更新此项,若专栏失效则为 `0` |
+| reply | num | 专栏评论数 | 接收私信时实时更新此项,若专栏失效则为 `0` |
+| template_id | num | (?) | **作用尚不明确** |
+| image_urls | 有效时:array 无效时:null | 专栏封面列表 | 接收私信时实时更新此项,若专栏失效则为 `null` |
+| attach_msg | 有效时:obj 无效时:null | UP主赠言 | |
+| pub_date | num | 专栏发布时间 | 秒级时间戳,若专栏失效则为 `0` |
+
+`image_urls`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---- |
+| 0 | str | 封面1 | |
+| n | str | 封面(n+1) | |
+| …… | str | …… | …… |
+
+`attach_msg`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------------------------------------------- |
+| id | num | 赠言id | |
+| content | str | 赠言内容 | 会自动加上 `UP主赠言:` 前缀,可能包含私信表情 |
+
+**示例:**
+
+推送专栏 cv18275013
+
+```json
+{
+ "rid": 18275013,
+ "title": "【单片机】遛弯捕捉到野生U盾,点亮它!",
+ "summary": "前一阵在学校那会,偶然的机会晚上饭后出去遛弯,在路边看到个被抛弃的 U盾,这么一想应该是附近拆迁搬东西时丢出去的,随即捕捉它。作为一个啥都折腾的捡垃圾技术宅肯定要去研究一波(笑是个建行的 U盾,按键部分还有点老灰,屏幕的尺寸盲猜 128x64,不可能再大了背面除了序列号没有别的东西,顶部有个盖子,像极了上古时期的 U盘插上充电宝可以正常点亮,至少屏没坏拆解&分析电路直接开拆,用刀片沿着四周缝隙插入并挑开卡扣内部结构挺简单,只有两颗较大的芯片,屏幕的 FPC 排线直接焊接在 PCB 上中间的这颗是",
+ "author": "社会易姐QwQ",
+ "view": 872,
+ "like": 38,
+ "reply": 7,
+ "template_id": 4,
+ "image_urls": [
+ "https://i0.hdslb.com/bfs/article/c7c60e018c43c5c3a6e1520239021ea2753b2880.jpg"
+ ],
+ "attach_msg": null,
+ "pub_date": 1661358081
+}
+```
+
+### 图片卡片消息(`msg_type=13`)
+
+此类型消息仅可接收,**不可直接发送**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ------------------- | -------------------- |
+| pic_url | str | 图片url | |
+| jump_url | str | 点击图片跳转到的url | |
+| title | str | 文字说明 | 显示在聊天列表的文字 |
+
+**示例:**
+
+```json
+{
+ "pic_url": "http://i0.hdslb.com/bfs/location/9e57aff7245c226c05ba46ddd1e82667f74d5a06.png",
+ "jump_url": "https://www.bilibili.com/h5/mall/suit/detail?navhide=1&id=66359&from=Banner",
+ "title": "原神,启动!"
+}
+```
+
+### 分享其他内容消息(`msg_type=14`)
+
+常见于分享直播
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | ---------------- | -------------------------------- |
+| author | str | 分享内容作者 | 此项不实时更新,在发送私信时设置 |
+| cover | str | 分享内容封面 | 此项不实时更新,在发送私信时设置 |
+| desc | str | 分享内容简介 | 此项不实时更新,在发送私信时设置 |
+| source | str | 分享内容类型说明 | 常见的值为 `直播` |
+| title | str | 分享内容标题 | 此项不实时更新,在发送私信时设置 |
+| url | str | 分享内容url | |
+
+**示例:**
+
+分享直播 ID 21738461
+
+```json
+{
+ "author": "哔哩哔哩晚会",
+ "cover": "https://i1.hdslb.com/bfs/face/1b593d28fcd0cf63837c3ea80ac96d01bb85ec3b.jpg",
+ "desc": "主播:哔哩哔哩晚会 https://live.bilibili.com/21738461",
+ "source": "直播",
+ "title": "2023最美的夜 bilibili晚会",
+ "url": "https://live.bilibili.com/21738461?broadcast_type=0&is_room_feed=1&live_from=41000&share_medium=android&share_source=bili_message&bbid=XU8CE838022AF6625C64B2153A3EF1E571AFF&ts=1704038936971"
+}
+```
+
+### 被关注时的自动推送消息(`msg_type=16`)
+
+一般仅在开启了 B 站的 “被关注回复” 功能与勾选 “被关注后,向关注我的人推送我的往期作品” 选项(仅部分用户会显示此选项)时才会发送此类型消息,紧接在自动发送的文字消息后面
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ----- | ---------------- | -------------------------------------------- |
+| main_title | str | 主标题 | 一般为 `更多宝藏内容` |
+| reply_content | str | 自动回复文字内容 | 仅在聊天列表中的消息概要中显示此内容,在私信内容中不显示 |
+| sub_cards | array | 推送的稿件列表 | 一般为3个 |
+
+`sub_cards`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---- |
+| 0 | obj | 稿件1 | |
+| n | obj | 稿件(n+1) | |
+| …… | obj | …… | …… |
+
+`sub_cards`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | -------------------------------- |
+| card_id | num | 稿件AV号 | |
+| card_type | num | 稿件类型 | 一般为 `1` |
+| jump_url | str | 稿件链接 | |
+| cover_url | str | 稿件封面url | 此项不实时更新,在发送私信时设置 |
+| field1 | str | 稿件标题 | 此项不实时更新,在发送私信时设置 |
+| field2 | str | 稿件发布时间 | 格式:`YYYY-MM-DD` |
+| field3 | str | 字段3 | 此项不实时更新,在发送私信时设置 |
+| icon3 | num | 图标3类型 | 1:播放量 3:弹幕数 5:收藏量 |
+| field4 | str | 字段4 | 此项不实时更新,在发送私信时设置 |
+| icon4 | num | 图标4类型 | 1:播放量 3:弹幕数 5:收藏量 |
+
+**示例:**
+
+```json
+{
+ "main_title": "更多宝藏内容",
+ "reply_content": "感谢大佬关注哦~[doge][脱单doge][doge]\n这里是科技区底边小UP,日常瞎折腾,软硬件电路程序网络服务器都折腾,视频月更风格硬核略小众,咕咕咕.....\n老大二了,就不中二了\n有什么好的建议欢迎私信",
+ "sub_cards": [{
+ "card_id": 379743801,
+ "card_type": 1,
+ "jump_url": "https://b23.tv/BV1hZ4y197Cz",
+ "cover_url": "http://i2.hdslb.com/bfs/archive/bfb87f033272926efe6ff4caee8e6c49c07ff6fe.jpg",
+ "field1": "【宿舍评测】性能与便携两全 华为matebook E 2022深度体验及伪开箱",
+ "field2": "2021-12-10",
+ "field3": "20万",
+ "icon3": 1,
+ "field4": "479",
+ "icon4": 3
+ }, {
+ "card_id": 768716232,
+ "card_type": 1,
+ "jump_url": "https://b23.tv/BV13r4y187R8",
+ "cover_url": "http://i1.hdslb.com/bfs/archive/bb1d41ef0c17c2df25c8b6ef98f01466bdee0c1f.jpg",
+ "field1": "【BadApple】使用古董示波器Aron BS-601播放BadApple!!!",
+ "field2": "2022-05-03",
+ "field3": "15万",
+ "icon3": 1,
+ "field4": "297",
+ "icon4": 3
+ }, {
+ "card_id": 524989935,
+ "card_type": 1,
+ "jump_url": "https://b23.tv/BV17M411E7Kq",
+ "cover_url": "http://i1.hdslb.com/bfs/archive/17335854dfad9d7990943d8cc6dc07c85912b103.jpg",
+ "field1": "【拆解】华为 Matebook E 更换固态硬盘:从未见过如此好拆的二合一",
+ "field2": "2023-02-24",
+ "field3": "5万",
+ "icon3": 1,
+ "field4": "102",
+ "icon4": 3
+ }]
+}
+```
+
+### 系统提示消息(`msg_type=18`)
+
+此类型消息仅可接收,**不可直接发送**;由系统自动发送,但仅自己可见
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | -------------------------- |
+| content | str | 提示列表 | **经过序列化后**的JSON数组 |
+
+`content`文本经JSON解析后的数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---- |
+| 0 | obj | 提示1 | |
+| n | obj | 提示(n+1) | |
+| …… | obj | …… | …… |
+
+`content`文本经JSON解析后的数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------------------ | ----------- |
+| text | str | 提示文字 | |
+| color_day | str | 浅色模式下的提示文字颜色 | HEX颜色代码 |
+| color_nig | str | 深色模式下的提示文字颜色 | HEX颜色代码 |
+| jump_url | str | 点击提示跳转到的url | (非必要) |
+
+**示例:**
+
+若自己与对方从未聊过天,且对方未关注自己,则会有系统提示
+
+```json
+{
+ "content": "[{\"text\":\"对方主动回复或关注你前,最多发送1条消息\",\"color_day\":\"#9499A0\",\"color_nig\":\"#9499A0\"}]"
+}
+```
+
+### AI 消息(`msg_type=19`)
+
+此消息类型尚未得到广泛使用
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------- | ---- | -------------------- | ---------------- |
+| content | obj | 富文本内容 | |
+| show_like | bool | 是否显示点赞按钮 | |
+| show_change | bool | 是否显示修改内容按钮 | |
+| gpt_session_id | num | GPT 会话 id | |
+| gpt_bind_query | str | (?) | **作用尚不明确** |
+| session_closed_line | str | (?) | **作用尚不明确** |
+| voice_url | str | 语音 url(?) | |
+| sub_type | num | 子类型(?) | |
+| voice_time | num | 语音时长(?) | |
+
+`content`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | -------- | ---------------- |
+| paragraphs | array | 段落列表 | 详细信息有待补充 |
+
+**示例:**
+
+由于 B 站尚未公开此消息类型,暂无示例
+
+## 粉丝团消息类型
+
+以下消息类型仅常见于粉丝团中的系统消息(`receiver_type` 为 `2` 且 `sender_uid` 为 `0`)
+
+### 成员入群消息(`msg_type=301`)
+
+### 成员退群消息(`msg_type=302`)
+
+### 粉丝团冻结消息(`msg_type=303`)
+
+### 粉丝团解散消息(`msg_type=304`)
+
+### 粉丝团开通消息(`msg_type=305`)
+
+### 成员入群消息(`msg_type=306`)
+
+以上 6 种类型的消息均为以下数据类型结构
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | -------- | ---------- |
+| group_id | num | 粉丝团id | (非必要) |
+| content | str | 提示文字 | |
+
+**示例:**
+
+`社会易姐QwQ的应援团` 开通的消息(`msg_type=305`)
+
+```json
+{
+ "group_id": 221082140,
+ "content": "社会易姐QwQ的应援团开通啦 (>▽<)"
+}
+```
+
+成员 `wuziqian211` 进入 `社会易姐QwQ的应援团` 的消息(`msg_type=306`)
+
+```json
+{
+ "group_id": 221082140,
+ "content": "欢迎wuziqian211入群"
+}
+```
diff --git a/docs/message/settings.md b/docs/message/settings.md
new file mode 100644
index 0000000..e94ca6e
--- /dev/null
+++ b/docs/message/settings.md
@@ -0,0 +1,830 @@
+# 消息设置
+
+## 获取用户偏好设置
+
+>
+
+*请求方式:GET 或 POST*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数(GET)或 正文参数(application/x-www-form-urlencoded,POST):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------------- | ---- | -------------------------------- | ------------ | ------------------------- |
+| msg_notify | num | 是否显示 “消息提醒” 设置 | 非必要 | 若此项为任意整数,则返回数据中有 `msg_notify` 项 |
+| show_unfollowed_msg | num | 是否显示 “收起未关注人消息” 设置 | 非必要 | 若此项为任意整数,则返回数据中有 `show_unfollowed_msg` 项 |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+| csrf_token | str | CSRF Token(位于cookie) | POST方式必要 | |
+| csrf | str | CSRF Token(位于cookie) | POST方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| msg | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------------ | ---- | -------------------- | --------------------------------------------------------------------------- |
+| show_unfollowed_msg | num | 收起未关注人消息 | 请求参数 `show_unfollowed_msg` 为整数时显示此项 0:不收起 1:收起 |
+| msg_notify | num | 消息提醒 | 请求参数 `msg_notify` 为整数时显示此项 1:接收 3:不接收 |
+| set_like | num | 收到的赞提醒(旧) | 0:接收 5:不接收 |
+| set_comment | num | 回复我的提醒(旧) | 0:所有人 1:关注的人 2:不接受任何消息提醒 |
+| set_at | num | @ 我的提醒 (旧) | 0:所有人 1:关注的人 2:不接受任何消息提醒 |
+| is_group_fold | num | 收起应援团消息 | 0:不收起 1:收起 |
+| should_receive_group | num | 接收应援团消息 | 0:不接收 1:接收 |
+| receive_unfollow_msg | num | 接收未关注人消息 | 前端隐藏此开关 0:不接收 1:接收 |
+| followed_reply | num | 被关注回复 | 0:关闭 1:开启 |
+| keys_reply | num | 关键词回复 | 0:关闭 1:开启 |
+| recv_reply | num | 收到消息回复 | 0:关闭 1:开启 |
+| voyage_reply | num | 大航海上船回复 | 0:关闭 1:开启 |
+| recommend_followed_reply | num | 被关注时自动推送作品 | 0:关闭 1:开启 |
+| ai_intercept | num | 私信智能拦截 | 0:关闭 1:开启 |
+| anti_harassment | null | 防骚扰和互动人群设置 | 此接口恒返回 `null` |
+| set_recv_reply | num | 收到回复提醒(新) | 0:所有人 1:关注的人 2:不接受任何消息提醒 |
+| set_recv_like | num | 收到喜欢提醒(新) | 0:接收 2:不接收 |
+| set_new_follow | num | 新增粉丝提醒(新) | 0:接收 2:不接收 |
+
+**示例:**
+
+```shell
+curl -G 'https://api.vc.bilibili.com/link_setting/v1/link_setting/get' \
+ --data-urlencode 'msg_notify=1' \
+ --data-urlencode 'show_unfollowed_msg=1' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "show_unfollowed_msg": 0,
+ "msg_notify": 1,
+ "set_like": 0,
+ "set_comment": 0,
+ "set_at": 0,
+ "is_group_fold": 0,
+ "should_receive_group": 1,
+ "receive_unfollow_msg": 1,
+ "followed_reply": 1,
+ "keys_reply": 0,
+ "recv_reply": 1,
+ "voyage_reply": 0,
+ "recommend_followed_reply": 1,
+ "ai_intercept": 1,
+ "anti_harassment": null,
+ "set_recv_reply": 0,
+ "set_recv_like": 0,
+ "set_new_follow": 0
+ }
+}
+```
+
+
+
+## 修改用户偏好设置
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+参数名称与值基本同「[获取用户偏好设置](#获取用户偏好设置)」中的 `data` 对象,修改设置时只需提供修改的设置对应的参数即可
+
+开启自动回复功能需要 1000 粉丝及以上,否则会提示 700009 `权限不足`
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------------------ | ---- | ------------------------ | ------ | ----------------------------------------------------- |
+| show_unfollowed_msg | num | 收起未关注人消息 | 非必要 | 0:不收起 1:收起 |
+| msg_notify | num | 消息提醒 | 非必要 | 1:接收 3:不接收 |
+| set_like | num | 收到的赞提醒 | 非必要 | 0:接收 5:不接收 |
+| set_comment | num | 回复我的提醒 | 非必要 | 0:所有人 1:关注的人 2:不接受任何消息提醒 |
+| set_at | num | @ 我的提醒 | 非必要 | 0:所有人 1:关注的人 2:不接受任何消息提醒 |
+| is_group_fold | num | 收起应援团消息 | 非必要 | 0:不收起 1:收起 |
+| should_receive_group | num | 接收应援团消息 | 非必要 | 0:不接收 1:接收 |
+| receive_unfollow_msg | num | 接收未关注人消息 | 非必要 | 0:不接收 1:接收 |
+| followed_reply | num | 被关注回复 | 非必要 | 需要有自动回复权限 0:关闭 1:开启 |
+| keys_reply | num | 关键词回复 | 非必要 | 需要有自动回复权限 0:关闭 1:开启 |
+| recv_reply | num | 收到消息回复 | 非必要 | 需要有自动回复权限 0:关闭 1:开启 |
+| voyage_reply | num | 大航海上船回复 | 非必要 | 需要有自动回复权限 0:关闭 1:开启 |
+| recommend_followed_reply | num | 被关注时自动推送作品 | 非必要 | 需要有自动回复权限 0:关闭 1:开启 |
+| ai_intercept | num | 私信智能拦截 | 非必要 | 0:关闭 1:开启 |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+| csrf_token | str | CSRF Token(位于cookie) | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | -------------------------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 2:非法参数 700009:权限不足 |
+| msg | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | 空对象 |
+
+**示例:**
+
+开启接收消息提醒
+
+```shell
+curl 'https://api.vc.bilibili.com/link_setting/v1/link_setting/set' \
+ --data-urlencode 'msg_notify=1' \
+ --data-urlencode 'build=0' \
+ --data-urlencode 'mobi_app=web' \
+ --data-urlencode 'csrf_token=xxx' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
+## 获取消息屏蔽词
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ---------------- | ------ | ------------- |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| msg | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ------------------------------- | ------------------ | ---------------- |
+| words | 有效时:array 无效时:null | 消息屏蔽词列表 | |
+| message | str | (?) | **作用尚不明确** |
+| max_word_length | num | 单个屏蔽词最大长度 | 目前为 `20` |
+| max_words_size | num | 屏蔽词最大数量 | 目前为 `200` |
+
+`data` 中的 `words` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------- | ---- |
+| 0 | obj | 屏蔽词1 | |
+| n | obj | 屏蔽词(n+1) | |
+| …… | obj | …… | …… |
+
+`words` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------------- | ---------- |
+| content | str | 屏蔽词内容 | |
+| ctime | num | 屏蔽词添加时间 | 秒级时间戳 |
+
+**示例:**
+
+```shell
+curl -G 'https://api.vc.bilibili.com/x/im/link_setting/get_block_words' \
+ --data-urlencode 'build=0' \
+ --data-urlencode 'mobi_app=web' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "words": [
+ {
+ "content": "屏蔽词",
+ "ctime": 1746422088
+ }
+ ],
+ "message": "",
+ "max_word_length": 20,
+ "max_words_size": 200
+ }
+}
+```
+
+
+
+## 添加消息屏蔽词
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------ | ------ | -------------- |
+| content | str | 屏蔽词内容 | 必要 | 最多 20 个字符 |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+| csrf_token | str | CSRF Token(位于cookie) | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 1900004:添加失败,屏蔽词限制最多20个字 1900005:添加失败,最多可以添加200个屏蔽词 1900006:添加失败,屏蔽词重复 1900007:添加失败,屏蔽词不支持空格 |
+| msg | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | 空对象 |
+
+**示例:**
+
+```shell
+curl 'https://api.vc.bilibili.com/x/im/link_setting/add_block_word' \
+ --data-urlencode 'content=屏蔽词' \
+ --data-urlencode 'build=0' \
+ --data-urlencode 'mobi_app=web' \
+ --data-urlencode 'csrf_token=xxx' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
+## 删除消息屏蔽词
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------ | ------ | ------------- |
+| content | str | 屏蔽词内容 | 必要 | |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+| csrf_token | str | CSRF Token(位于cookie) | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| msg | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | 空对象 |
+
+**示例:**
+
+```shell
+curl 'https://api.vc.bilibili.com/x/im/link_setting/del_block_word' \
+ --data-urlencode 'content=屏蔽词' \
+ --data-urlencode 'build=0' \
+ --data-urlencode 'mobi_app=web' \
+ --data-urlencode 'csrf_token=xxx' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
+## 获取自动回复文本/关键词回复规则
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ---------------- | ------ | ---------------------------------------------------------------------------- |
+| type\[\] | num | 自动回复类型 | 必要 | 1:被关注回复 2:关键词回复 3:收到消息回复 5:大航海上船回复 |
+| uid | num | 自己的mid | 非必要 | |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 2:非法参数 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ----- | ------------ | -------------------------------------- |
+| texts | array | 自动回复文本 | 若未设置此类型自动回复文本,则没有此项 |
+
+`data` 中的 `texts` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | -------------------------------- |
+| 0 | obj | 文本1 | |
+| n | obj | 文本(n+1) | 当类型为 “关键词回复” 时可有多项 |
+| …… | obj | …… | …… |
+
+`texts` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | -------------- | -------------------------------------------------------------------------- |
+| id | num | 自动回复规则id | |
+| uid | num | 自己的mid | |
+| type | num | 自动回复类型 | 同请求参数 `type[]` |
+| title | str | 规则名称 | 当类型为 “关键词回复” 时有效,否则为空文本 |
+| key1 | str | 精确匹配关键词 | 当类型为 “关键词回复” 时有效,否则为空文本 以中文逗号分隔每一个关键词 |
+| key2 | str | 模糊匹配关键词 | 当类型为 “关键词回复” 时有效,否则为空文本 以中文逗号分隔每一个关键词 |
+| reply | str | 回复内容 | |
+
+**示例:**
+
+获取关键词回复规则
+
+```shell
+curl -G 'https://api.vc.bilibili.com/x/im/auto_reply/get_reply_text' \
+ --data-urlencode 'type[]=2' \
+ --data-urlencode 'uid=425503913' \
+ --data-urlencode 'build=0' \
+ --data-urlencode 'mobi_app=web' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "texts": [
+ {
+ "id": 201321,
+ "uid": 425503913,
+ "type": 2,
+ "title": "谢谢",
+ "key1": "谢谢,Thank you",
+ "key2": "感谢",
+ "reply": "我也感谢您对我的支持 (=・ω・=)"
+ },
+ {
+ "id": 201320,
+ "uid": 425503913,
+ "type": 2,
+ "title": "哭2",
+ "key1": "哭",
+ "key2": "",
+ "reply": "我是不会哭的 (=・ω・=)"
+ },
+ {
+ "id": 201318,
+ "uid": 425503913,
+ "type": 2,
+ "title": "哭",
+ "key1": "",
+ "key2": "哭",
+ "reply": "别哭了[tv_微笑]摸摸您 (^・ω・^)"
+ }
+ ]
+ }
+}
+```
+
+
+
+## 修改自动回复文本/关键词回复规则
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+仅调用本接口不会开启或关闭自动回复功能,请使用 “[修改用户偏好设置](#修改用户偏好设置)” 接口
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------ | ---------------------- | ---------------------------------------------------------------------------- |
+| type | num | 自动回复类型 | 必要 | 1:被关注回复 2:关键词回复 3:收到消息回复 5:大航海上船回复 |
+| reply | str | 回复内容 | 必要 | 最多 500 个字符 |
+| id | str | 规则id | 非必要 | 当类型为 “关键词回复” 时有效 为 `0` 或为空时新增回复规则,否则修改 id 对应的回复规则 |
+| title | str | 规则名称 | 关键词回复必要 | 当类型为 “关键词回复” 时有效,最多 30 个字符 |
+| key1 | str | 精确匹配关键词 | 关键词回复必要(可选) | 当类型为 “关键词回复” 时有效,`key1` 与 `key2` 须至少填一个参数 以中文逗号分隔每一个关键词,最多 20 项 |
+| key2 | str | 模糊匹配关键词 | 关键词回复必要(可选) | 当类型为 “关键词回复” 时有效,`key1` 与 `key2` 须至少填一个参数 以中文逗号分隔每一个关键词,最多 20 项 |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+| csrf_token | str | CSRF Token(位于cookie) | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 27011:请求参数错误 1500001:自动回复内容太长 1500002:规则数量已达上限,请删除后新建 1500003:您保存的内容含敏感信息,请修改后重试 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | 空对象 |
+
+**示例:**
+
+修改关键词回复规则 `id=201321`,规则名称为 `谢谢`,精确匹配关键词为 `谢谢,Thank you,感谢`,回复内容为 `嗯嗯,不用谢[tv_微笑]`
+
+```shell
+curl 'https://api.vc.bilibili.com/x/im/auto_reply/set_reply_text' \
+ --data-urlencode 'type=2' \
+ --data-urlencode 'reply=嗯嗯,不用谢[tv_微笑]' \
+ --data-urlencode 'id=201321' \
+ --data-urlencode 'title=谢谢' \
+ --data-urlencode 'key1=谢谢,Thank you,感谢' \
+ --data-urlencode 'key2=' \
+ --data-urlencode 'build=0' \
+ --data-urlencode 'mobi_app=web' \
+ --data-urlencode 'csrf_token=xxx' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
+## 删除关键词回复规则
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------ | ------ | ------------- |
+| id | str | 规则id | 必要 | |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+| csrf_token | str | CSRF Token(位于cookie) | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -500:服务器错误 1003:不能删除别人的规则 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | 空对象 |
+
+**示例:**
+
+删除关键词回复规则 `id=201321`
+
+```shell
+curl 'https://api.vc.bilibili.com/x/im/auto_reply/del_reply_text' \
+ --data-urlencode 'id=201321' \
+ --data-urlencode 'build=0' \
+ --data-urlencode 'mobi_app=web' \
+ --data-urlencode 'csrf_token=xxx' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
+## 获取系统设置
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+此接口中的设置一般不能由用户随意更改
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ---------------- | ------ | ------------------------- |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| msg | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------------------------- | ---- | ---------------------------------------------------------------------------------------- | -------------------------- |
+| is_create_group_available | num | 是否可创建粉丝团 | 粉丝数达到 1000 后开启 |
+| is_auto_reply_available | num | 是否可使用自动回复功能 | 粉丝数达到 1000 后开启 |
+| vc_hint_title | str | 稿件自动推送小灰条内容 | `我为什么会收到此类消息` |
+| vc_hint_title_button | str | 稿件自动推送小灰条旁的按钮内容 | `了解更多` |
+| vc_hint_detail | str | 稿件自动推送详细信息小灰条内容 | `您【特别关注】的UP主更新视频或专栏后,会第一时间在私信推送给您。如有需要可点击右上角设置关闭推送。` |
+| vc_hint_detail_button | str | 关闭稿件自动推送按钮内容 | `关闭推送` |
+| auto_reply_html | str | 自动回复H5页面url | `https://message.bilibili.com/h5/app/auto-reply` |
+| is_receive_unfollow_wl | num | 是否显示限制接收未关注人消息功能 | |
+| is_voyage | num | 是否在自动回复页面显示 “大航海自动回复” 选项 | 仅部分用户开启 |
+| is_auto_reply_recommend_available | num | 是否在自动回复中的 “被关注回复” 页面显示 “被关注后,向关注我的人推送我的往期作品” 复选框 | 仅部分用户开启 |
+| is_discuss_style_im_page | num | (?) | **作用尚不明确** |
+| discuss_unread_style_im_page | num | (?) | **作用尚不明确** |
+| old_up_assistant_door | obj | 原 “UP主小助手” 入口相关信息 | |
+| is_new_up_assistant_effective | num | 新 “UP主小助手” 是否启用 | |
+| is_archive_gray | bool | 是否不显示 “私信存档” 按钮 | |
+| session_cfg | obj | 特定私信会话配置信息 | |
+| migrate_session_api | bool | (?) | **作用尚不明确** |
+| game_msg | obj | (?) | **作用尚不明确**;仅当请求参数 `mobi_app` 不为 `web` 时有其中的项目 |
+| auto_reply_msg_desc | str | 指示消息为自动回复消息的提示内容 | `此条消息为自动回复` |
+| huahuo_group_icon_new | str | 浅色模式下的花火图标url | |
+| huahuo_group_icon_dark_new | str | 深色模式下的花火图标url | |
+| im_disabled_input_hint | str | 某UP主禁用私信功能时的提示内容 | `请到UP主空间发起咨询` |
+
+`data` 中的 `old_up_assistant_door` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------- | ---- | ---------------------------- | ------------ |
+| show_old_up_door | num | 是否显示原 “UP主小助手” 入口 | 目前恒为 `0` |
+| title | str | 原 “UP主小助手” 入口标题 | 目前为空文本 |
+| sub_title | str | 原 “UP主小助手” 入口子标题 | 目前为空文本 |
+
+`data` 中的 `session_cfg` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ---------------- | ---- |
+| {用户mid} | obj | 该会话的配置信息 | |
+
+`session_cfg` 中的 `{用户mid}` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------- | ---- | -------------------- | ------------------- |
+| hidden_emote_btn | bool | 是否隐藏表情按钮 | |
+| hidden_pic_btn | bool | 是否隐藏发送图片按钮 | |
+| max_height | num | 最大高度(?) | **作用尚不明确** |
+| hint_text | str | 私信输入框的提示内容 | `你想问什么问题呢?` |
+| hidden_top_hint | bool | (?) | **作用尚不明确** |
+| is_gpt_account | bool | 是否为AI会话 | |
+
+`data` 中的 `game_msg` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ---- | ------------------------------------------------------------- |
+| show_install | bool | true | **作用尚不明确**;仅当请求参数 `mobi_app` 不为 `web` 时有此项 |
+
+**示例:**
+
+```shell
+curl 'https://api.vc.bilibili.com/link_setting/v1/link_setting/get_sys_setting' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "is_create_group_available": 1,
+ "is_auto_reply_available": 1,
+ "vc_hint_title": "我为什么会收到此类消息",
+ "vc_hint_title_button": "了解更多",
+ "vc_hint_detail": "您【特别关注】的UP主更新视频或专栏后,会第一时间在私信推送给您。如有需要可点击右上角设置关闭推送。",
+ "vc_hint_detail_button": "关闭推送",
+ "auto_reply_html": "https://message.bilibili.com/h5/app/auto-reply",
+ "is_receive_unfollow_wl": 0,
+ "is_voyage": 1,
+ "is_auto_reply_recommend_available": 0,
+ "is_discuss_style_im_page": 0,
+ "discuss_unread_style_im_page": 0,
+ "old_up_assistant_door": {
+ "show_old_up_door": 0,
+ "title": "",
+ "sub_title": ""
+ },
+ "is_new_up_assistant_effective": 1,
+ "is_archive_gray": true,
+ "session_cfg": {
+ "100000000000001": {
+ "hidden_emote_btn": true,
+ "hidden_pic_btn": true,
+ "max_height": 62,
+ "hint_text": "你想问什么问题呢?",
+ "hidden_top_hint": true,
+ "is_gpt_account": true
+ },
+ "100000000000002": {
+ "hidden_emote_btn": true,
+ "hidden_pic_btn": true,
+ "max_height": 62,
+ "hint_text": "你想问什么问题呢?",
+ "hidden_top_hint": true,
+ "is_gpt_account": true
+ },
+ "1400565964": {
+ "hidden_emote_btn": true,
+ "hidden_pic_btn": true,
+ "max_height": 62,
+ "hint_text": "你想问什么问题呢?",
+ "hidden_top_hint": true,
+ "is_gpt_account": true
+ }
+ },
+ "migrate_session_api": false,
+ "game_msg": {
+ "show_install": true
+ },
+ "auto_reply_msg_desc": "此条消息为自动回复",
+ "huahuo_group_icon_new": "http://i0.hdslb.com/bfs/kfptfe/floor/e2e3829e514ebccab1705636b0354ec89446a4b5.png",
+ "huahuo_group_icon_dark_new": "http://i0.hdslb.com/bfs/kfptfe/floor/d09bc8c0716a15938ec427db5fa962733703f3ce.png",
+ "im_disabled_input_hint": "请到UP主空间发起咨询"
+ }
+}
+```
+
+
+
+## 获取创建粉丝团按钮可见性
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ---------------- | ------ | ------------------------- |
+| build | num | 客户端内部版本号 | 非必要 | 默认为 `0` |
+| mobi_app | str | 平台标识 | 非必要 | 可为 `web` 等 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| msg | str | 错误信息 | 默认为0 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---------------------- | ---------------------- |
+| show | num | 是否显示创建粉丝团按钮 | 粉丝数达到 1000 后显示 |
+
+**示例:**
+
+```shell
+curl 'https://api.vc.bilibili.com/link_group/v1/member/show_create_group_icon' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "0",
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "show": 1
+ }
+}
+```
+
+
diff --git a/docs/misc/b23tv.md b/docs/misc/b23tv.md
new file mode 100644
index 0000000..b90891b
--- /dev/null
+++ b/docs/misc/b23tv.md
@@ -0,0 +1,127 @@
+# b23.tv 短链
+
+## 简述
+
+b23.tv 是由 Bilibili 提供的短链服务, 主要用于站内长链接缩短便于分享, 目前仅在手机客户端生成
+
+### 格式
+
+目前已知的 b23.tv 短链格式有以下 3 种
+
+- 任意短链, 路径由7位数字或大小写英文字母组成, 为防止滥用似乎有时效限制, 如 https://b23.tv/pigt3PQ
+
+- 视频短链(AV号), 路径由字符串 `av` 尾随 视频 aid 组成, 如 https://b23.tv/av80433022
+
+- 视频短链(BV号), 路径由字符串 `BV` 尾随 视频 bvid 组成, 如 https://b23.tv/BV1GJ411x7h7
+
+## 生成
+
+### 视频短链
+
+1. 直接手动拼接字符串即可
+
+2. 参见[任意短链](#任意短链)
+
+### 任意短链
+
+> https://api.bilibili.com/x/share/click
+> https://api.biliapi.net/x/share/click
+
+*请求方式: POST*
+
+认证方式: 仅APP, 但实际上形同虚设
+
+注: 该接口参数对照表基本失效, 基本无实用价值, 已被注释, 参见 [#979](https://github.com/SocialSisterYi/bilibili-API-collect/issues/979) [Nemo2011/bilibili-api#720](https://github.com/Nemo2011/bilibili-api/pull/720)
+
+**正文参数(application/x-www-form-urlencoded):**
+
+必要:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------- | ------ | ---- |
+| buvid | str | 设备 BUVID | 必要 | 实际任意非空字符串即可 |
+| build | num | 客户端版本号 | 必要 | 大于 `5520400` 的任意有效整数, 如 `7710300` |
+| platform | str | 客户端平台 | 必要 | 实际任意非空字符串即可 |
+| share_channel | str | 分享方式? | 必要 | COPY |
+| share_mode | num | 分享模式? | 必要 | 任意有效正整数, 常见 `1`, `3`, `4` |
+| share_id | str | 分享 ID | 必要 | 见下方对照表 |
+| oid | num | 对象 ID | 必要 | 见下方对照表 |
+
+不必要:
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------ | ---- | ---- |
+| object_extra_fields| obj | 额外字段? | 非必要 | 如 `{"jumpfrom_id":30104}` `{"epid":"409808","cid":"1398781253"}` `{"season_type":"1","season_id":"39481","epid":"425006","dubbing_support":false,"background_audio":false,"role_audio_list":false}` |
+| panel_type | num | 面板类型? | 非必要 | 1 |
+| share_title | str | 分享标题? | 非必要 | 分享标题 |
+| share_content | str | 分享内容? | 非必要 | 分享内容, 当 oid 存在时无意义(可是 oid 不可能不存在啊) |
+| share_origin | str | 分享来源? | 非必要 | 如 `vinfo_share` `dynamic` `vertical-three-point-panel` `vinfo_player` |
+| share_pattern | num | 分享模式? | 非必要 | 0 |
+| share_session_id | str | 分享会话 ID? | 非必要 | 各部分用 `-` 分隔的小写的一串 UUID |
+| ts | num | UNIX 秒级时间戳 | 非必要 | |
+
+对照表:
+
+| 类型 | 分享 ID (share_id) | 对象 ID (oid) |
+| --- | ------------------ | ------------- |
+| 视频 | main.ugc-video-detail.0.0.pv | 视频 aid |
+
+
+**JSON回复:**
+
+根对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| ------ | ---- | -------- | ---- |
+| code | num | 0 | 恒为 0 |
+| message | str | 0 | 恒为 0 |
+| ttl | num | 1 | 恒为 1 |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| ------ | ---- | -------- | ---- |
+| content | str | 短链内容 | 若失败则不存在 |
+| count | num | 0 | 恒为 0 |
+
+**示例:**
+
+为 `av80433022` 生成 b23.tv 短链
+
+```shell
+curl -X POST "http://api.biliapi.net/x/share/click" \
+--data-urlencode "platform=unix" \
+--data-urlencode "share_channel=COPY" \
+--data-urlencode "share_id=main.ugc-video-detail.0.0.pv" \
+--data-urlencode "share_mode=4" \
+--data-urlencode "oid=80433022" \
+--data-urlencode "buvid=qwq" \
+--data-urlencode "build=6114514"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "content": "【【官方 MV】Never Gonna Give You Up - Rick Astley-哔哩哔哩】 https://b23.tv/5x4wy5f",
+ "count": 0
+ }
+}
+```
+
+
diff --git a/docs/misc/buvid3_4.md b/docs/misc/buvid3_4.md
new file mode 100644
index 0000000..99dc3c1
--- /dev/null
+++ b/docs/misc/buvid3_4.md
@@ -0,0 +1,132 @@
+# 获取 buvid3 / buvid4 / b_nut
+
+## 仅获取 buvid3
+
+> https://api.bilibili.com/x/web-frontend/getbuvid
+
+*请求方式: GET*
+
+
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | -------- |
+| code | num | 返回值 | 0:成功 |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | ---- |
+| buvid | str | buvid3 | 需手动存放至 cookie 中 |
+
+**示例:**
+
+注: 不要复制
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-frontend/getbuvid'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "data": {
+ "buvid": "54E5EFC1-3C8F-F690-2261-439E4F6A20A979439infoc"
+ }
+}
+```
+
+
+
+## 接口获取 buvid3 / buvid4
+
+> https://api.bilibili.com/x/frontend/finger/spi
+
+*请求方式: GET*
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | -------- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 信息 | ok: 成功 |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | ---- |
+| b_3 | str | buvid3 | 需手动存放至 cookie 中 |
+| b_4 | str | buvid4 | 同上 |
+
+**示例:**
+
+注: 建议自行生成, 不要复制本处示例的 buvid3 / buvid4.
+
+```shell
+curl -G 'https://api.bilibili.com/x/frontend/finger/spi'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "data": {
+ "b_3": "D9656DA8-9BEF-F464-5B72-C4849AFD336379044infoc",
+ "b_4": "F6E0FD4B-520C-1902-4F7B-E461D8D1F5AB79044-024072309-666onEZSnlHVPjoRp4kDYg=="
+ },
+ "message": "ok"
+}
+```
+
+
+
+## 从响应头获取 buvid3 / b_nut
+
+使用 `GET` 或 `HEAD` 方法请求 `https://www.bilibili.com/`, 且请求头中 `User-Agent` 字段不包含 `curl` `python` `awa` 等敏感子字符串, 且相同 `User-Agent` 字段不得短时多次请求. 在响应头中的 `Set-Cookie` 字段中, 即可找到 `buvid3` 和 `b_nut`.
+
+若不带任何 Cookie 请求, 则 `b_nut` 为响应生成时刻的 UNIX 秒级时间戳.
+若请求 Cookie 仅带有 `buvid3`, 则 `b_nut` 为 `100`.
+若请求 Cookie 仅带有 `b_nut`, 则与不带任何 Cookie 的响应相同.
+若请求 Cookie 仅带有 `buvid3` 和 `b_nut`, 则响应无 `Set-Cookie` 字段.
+若请求 Cookie 带有其他字段, 无影响.
+
+**示例:**
+
+```shell
+curl -I "https://www.bilibili.com/" -A "awa"
+```
+
+
+查看响应示例:
+
+```http
+HTTP/2 200
+date: Fri, 26 Jul 2024 06:38:43 GMT
+content-type: text/html; charset=utf-8
+support: nantianmen
+set-cookie: buvid3=805E4894-96A2-0684-6F00-C6EA1FFB911023315infoc; path=/; expires=Sat, 26 Jul 2025 06:38:43 GMT; domain=.bilibili.com
+set-cookie: b_nut=1721975923; path=/; expires=Sat, 26 Jul 2025 06:38:43 GMT; domain=.bilibili.com
+vary: Origin,Accept-Encoding
+idc: shjd
+expires: Fri, 26 Jul 2024 06:38:42 GMT
+cache-control: no-cache
+x-cache-webcdn: MISS from blzone01
+x-cache-time: 0
+x-save-date: Fri, 26 Jul 2024 06:38:43 GMT
+```
+
+
diff --git a/docs/misc/bvid_desc.md b/docs/misc/bvid_desc.md
new file mode 100644
index 0000000..d9e3346
--- /dev/null
+++ b/docs/misc/bvid_desc.md
@@ -0,0 +1,850 @@
+
+# bvid说明
+
+2020-03-23 B站推出了全新的稿件视频id`bvid`来接替之前的`avid`,其意义与之相同
+
+详见:
+
+1. [【升级公告】AV号全面升级至BV号(专栏)](https://www.bilibili.com/read/cv5167957)
+2. [【升级公告】AV号全面升级至BV号](https://www.bilibili.com/blackboard/activity-BV-PC.html)
+
+## 概述
+
+### 格式
+
+“bvid”恒为长度为 12 的字符串,前 3 个固定为“BV1”,后 9 个为 base58 计算结果(不包含数字 `0` 和大写字母 `I`、 `O` 以及小写字母 `l`)
+
+### 实质
+
+“bvid"为“avid”的base58编码,可通过算法进行相互转化
+
+### avid发号方式的变化
+
+从 2009-09-09 09:09:09 [av2](https://www.bilibili.com/video/av2) 的发布到 2020-03-28 19:45:02 [av99999999](https://www.bilibili.com/video/av99999999) 的发布B站结束了以投稿时间为顺序的avid发放,改为随机发放avid
+
+~~暗示B站东方要完?泪目~~
+
+## 算法概述
+
+~~算法以及程序主要参考[知乎@mcfx的回答](https://www.zhihu.com/question/381784377/answer/1099438784)~~
+~~实际上该算法并不完整,新的算法参考自[【揭秘】av号转bv号的过程](https://www.bilibili.com/video/BV1N741127Tj)~~
+实际上上面的算法依然不完整,新的算法参考自 [SocialSisterYi#740](https://github.com/SocialSisterYi/bilibili-API-collect/issues/740)~~来自 B 站某个 JS 文件?~~
+
+### av->bv算法
+
+**说明**
+
+1. 目前的 BV 格式为 BV1XXXXXXXXX,以 BV1 开头,后面包含 9 位有效数据。
+2. AV 最大值为 2⁵¹。
+
+**算法**
+
+- 定义一个包含初始值为 `['B', 'V', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0']` 的长度为 12 的数组`bytes`,用于存储转换后的字符。
+ - 定义变量 `bv_idx` 并初始化为数组 `bytes` 的最后一个索引。
+ - 将输入的 `aid` 与 avid 最大值(2⁵¹)进行按位或运算,其结果与常量 `XOR_CODE`(23442827791579)进行异或运算,得到变量 `tmp`。
+ - 当 `tmp` 大于0时,循环执行以下操作直到小于0:
+ - 将 `tmp` 除以 58(码表的长度) 的余数作为索引,从 `FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf` 码表中取出对应的字符,并将其赋值给 `bytes[bv_idx]`。
+ - 将 `tmp` 与 58 求模赋值给 `tmp`。
+ - 将 `bv_idx` 减1。
+ - 将 `bytes` 数组中索引为 3 和 9 的元素进行交换。
+ - 将 `bytes` 数组中索引为 4 和 7 的元素进行交换。
+ - 将 `bytes` 数组转换为字符串,并返回结果。
+
+### bv->av算法
+
+是 #av->bv算法 的逆向
+
+- 将 `bvid` 中索引为 3 和 9 的字符进行交换。
+- 将 `bvid` 中索引为 4 和 7 的字符进行交换。
+- 删除 `bvid` 前3个字符(固定为 BV1)。
+- 定义变量 `tmp` 并初始化为 0。
+- 遍历 `bvid` 的每个字符,执行以下操作:
+ - 获取当前字符在 `FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf` 码表中的索引,并将其赋值给变量 `idx`。
+ - 将 `tmp` 乘以常量 58,并加上 `idx`,最后赋值给 `tmp`。
+- 将 `tmp` 与常量 2⁵¹ - 1 进行按位与运算,其结果与常量 `XOR_CODE`(23442827791579) 进行异或运算,得到最终结果。
+
+## 编程实现
+
+### JavaScript/TypeScript
+
+
+
+
+```javascript
+const XOR_CODE = 23442827791579n;
+const MASK_CODE = 2251799813685247n;
+const MAX_AID = 1n << 51n;
+const BASE = 58n;
+
+const data = 'FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf';
+
+function av2bv(aid) {
+ const bytes = ['B', 'V', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0'];
+ let bvIndex = bytes.length - 1;
+ let tmp = (MAX_AID | BigInt(aid)) ^ XOR_CODE;
+ while (tmp > 0) {
+ bytes[bvIndex] = data[Number(tmp % BigInt(BASE))];
+ tmp = tmp / BASE;
+ bvIndex -= 1;
+ }
+ [bytes[3], bytes[9]] = [bytes[9], bytes[3]];
+ [bytes[4], bytes[7]] = [bytes[7], bytes[4]];
+ return bytes.join('');
+}
+
+function bv2av(bvid) {
+ const bvidArr = Array.from(bvid);
+ [bvidArr[3], bvidArr[9]] = [bvidArr[9], bvidArr[3]];
+ [bvidArr[4], bvidArr[7]] = [bvidArr[7], bvidArr[4]];
+ bvidArr.splice(0, 3);
+ const tmp = bvidArr.reduce((pre, bvidChar) => pre * BASE + BigInt(data.indexOf(bvidChar)), 0n);
+ return Number((tmp & MASK_CODE) ^ XOR_CODE);
+}
+
+console.log(av2bv(111298867365120));
+console.log(bv2av('BV1L9Uoa9EUx'));
+```
+
+
+
+
+
+```typescript
+const XOR_CODE = 23442827791579n;
+const MASK_CODE = 2251799813685247n;
+const MAX_AID = 1n << 51n;
+const BASE = 58n;
+
+const data = 'FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf';
+
+function av2bv(aid: number) {
+ const bytes = ['B', 'V', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0'];
+ let bvIndex = bytes.length - 1;
+ let tmp = (MAX_AID | BigInt(aid)) ^ XOR_CODE;
+ while (tmp > 0) {
+ bytes[bvIndex] = data[Number(tmp % BigInt(BASE))];
+ tmp = tmp / BASE;
+ bvIndex -= 1;
+ }
+ [bytes[3], bytes[9]] = [bytes[9], bytes[3]];
+ [bytes[4], bytes[7]] = [bytes[7], bytes[4]];
+ return bytes.join('') as `BV1${string}`;
+}
+
+function bv2av(bvid: `BV1${string}`) {
+ const bvidArr = Array.from(bvid);
+ [bvidArr[3], bvidArr[9]] = [bvidArr[9], bvidArr[3]];
+ [bvidArr[4], bvidArr[7]] = [bvidArr[7], bvidArr[4]];
+ bvidArr.splice(0, 3);
+ const tmp = bvidArr.reduce((pre, bvidChar) => pre * BASE + BigInt(data.indexOf(bvidChar)), 0n);
+ return Number((tmp & MASK_CODE) ^ XOR_CODE);
+}
+
+console.log(av2bv(111298867365120));
+console.log(bv2av('BV1L9Uoa9EUx'));
+```
+
+
+
+### Python
+
+来自:[#847](https://github.com/SocialSisterYi/bilibili-API-collect/issues/847#issuecomment-1807020675)
+
+```python
+XOR_CODE = 23442827791579
+MASK_CODE = 2251799813685247
+MAX_AID = 1 << 51
+ALPHABET = "FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf"
+ENCODE_MAP = 8, 7, 0, 5, 1, 3, 2, 4, 6
+DECODE_MAP = tuple(reversed(ENCODE_MAP))
+
+BASE = len(ALPHABET)
+PREFIX = "BV1"
+PREFIX_LEN = len(PREFIX)
+CODE_LEN = len(ENCODE_MAP)
+
+def av2bv(aid: int) -> str:
+ bvid = [""] * 9
+ tmp = (MAX_AID | aid) ^ XOR_CODE
+ for i in range(CODE_LEN):
+ bvid[ENCODE_MAP[i]] = ALPHABET[tmp % BASE]
+ tmp //= BASE
+ return PREFIX + "".join(bvid)
+
+def bv2av(bvid: str) -> int:
+ assert bvid[:3] == PREFIX
+
+ bvid = bvid[3:]
+ tmp = 0
+ for i in range(CODE_LEN):
+ idx = ALPHABET.index(bvid[DECODE_MAP[i]])
+ tmp = tmp * BASE + idx
+ return (tmp & MASK_CODE) ^ XOR_CODE
+
+assert av2bv(111298867365120) == "BV1L9Uoa9EUx"
+assert bv2av("BV1L9Uoa9EUx") == 111298867365120
+```
+
+### Rust
+
+参考
+
+### Swift
+
+```swift
+fileprivate let XOR_CODE: UInt64 = 23442827791579
+fileprivate let MASK_CODE: UInt64 = 2251799813685247
+fileprivate let MAX_AID: UInt64 = 1 << 51
+
+fileprivate let data: [UInt8] = [70, 99, 119, 65, 80, 78, 75, 84, 77, 117, 103, 51, 71, 86, 53, 76, 106, 55, 69, 74, 110, 72, 112, 87, 115, 120, 52, 116, 98, 56, 104, 97, 89, 101, 118, 105, 113, 66, 122, 54, 114, 107, 67, 121, 49, 50, 109, 85, 83, 68, 81, 88, 57, 82, 100, 111, 90, 102]
+
+fileprivate let BASE: UInt64 = 58
+fileprivate let BV_LEN: Int = 12
+fileprivate let PREFIX: String = "BV1"
+
+func av2bv(avid: UInt64) -> String {
+ var bytes: [UInt8] = [66, 86, 49, 48, 48, 48, 48, 48, 48, 48, 48, 48]
+ var bvIdx = BV_LEN - 1
+ var tmp = (MAX_AID | avid) ^ XOR_CODE
+
+ while tmp != 0 {
+ bytes[bvIdx] = data[Int(tmp % BASE)]
+ tmp /= BASE
+ bvIdx -= 1
+ }
+
+ bytes.swapAt(3, 9)
+ bytes.swapAt(4, 7)
+
+ return String(decoding: bytes, as: UTF8.self)
+}
+
+func bv2av(bvid: String) -> UInt64 {
+ let fixedBvid: String
+ if bvid.hasPrefix("BV") {
+ fixedBvid = bvid
+ } else {
+ fixedBvid = "BV" + bvid
+ }
+ var bvidArray = Array(fixedBvid.utf8)
+
+ bvidArray.swapAt(3, 9)
+ bvidArray.swapAt(4, 7)
+
+ let trimmedBvid = String(decoding: bvidArray[3...], as: UTF8.self)
+
+ var tmp: UInt64 = 0
+
+ for char in trimmedBvid {
+ if let idx = data.firstIndex(of: char.utf8.first!) {
+ tmp = tmp * BASE + UInt64(idx)
+ }
+ }
+
+ return (tmp & MASK_CODE) ^ XOR_CODE
+}
+
+print(av2bv(avid: 111298867365120))
+print(bv2av(bvid: "BV1L9Uoa9EUx"))
+```
+
+### Java
+
+```java
+import java.math.BigInteger;
+
+/**
+ * @author cctyl
+ */
+public class AVBVConverter {
+
+ private static final BigInteger XOR_CODE = BigInteger.valueOf(23442827791579L);
+ private static final BigInteger MASK_CODE = BigInteger.valueOf(2251799813685247L);
+ private static final BigInteger MAX_AID = BigInteger.ONE.shiftLeft(51);
+ private static final int BASE = 58;
+
+ private static final String DATA = "FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf";
+
+ public static String av2bv(long aidParam) {
+ BigInteger aid = BigInteger.valueOf(aidParam);
+ char[] bytes = {'B', 'V', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0'};
+ int bvIndex = bytes.length - 1;
+ BigInteger tmp = MAX_AID.or(aid).xor(XOR_CODE);
+ while (tmp.compareTo(BigInteger.ZERO) > 0) {
+ bytes[bvIndex] = DATA.charAt(tmp.mod(BigInteger.valueOf(BASE)).intValue());
+ tmp = tmp.divide(BigInteger.valueOf(BASE));
+ bvIndex--;
+ }
+ swap(bytes, 3, 9);
+ swap(bytes, 4, 7);
+ return new String(bytes);
+ }
+
+ public static long bv2av(String bvid) {
+ char[] bvidArr = bvid.toCharArray();
+ swap(bvidArr, 3, 9);
+ swap(bvidArr, 4, 7);
+ String adjustedBvid = new String(bvidArr, 3, bvidArr.length - 3);
+ BigInteger tmp = BigInteger.ZERO;
+ for (char c : adjustedBvid.toCharArray()) {
+ tmp = tmp.multiply(BigInteger.valueOf(BASE)).add(BigInteger.valueOf(DATA.indexOf(c)));
+ }
+ BigInteger xor = tmp.and(MASK_CODE).xor(XOR_CODE);
+ return xor.longValue();
+ }
+
+
+ private static void swap(char[] array, int i, int j) {
+ char temp = array[i];
+ array[i] = array[j];
+ array[j] = temp;
+ }
+
+ public static void main(String[] args) {
+
+ final int aid1 = 643755790;
+ final String bv1 = "BV1bY4y1j7RA";
+
+ final int aid2 = 305988942;
+ final String bv2 = "BV1aP411K7it";
+
+ //av ==> bv
+ assert av2bv(aid1).equals(bv1);
+ assert av2bv(aid2).equals(bv2);
+
+ //bv ==>av
+ assert bv2av(bv1) == aid1;
+ assert bv2av(bv2) == aid2;
+ }
+}
+```
+
+### Golang
+
+```go
+package main
+
+import (
+ "fmt"
+ "strings"
+)
+
+var (
+ XOR_CODE = int64(23442827791579)
+ MAX_CODE = int64(2251799813685247)
+ CHARTS = "FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf"
+ PAUL_NUM = int64(58)
+)
+
+func swapString(s string, x, y int) string {
+ chars := []rune(s)
+ chars[x], chars[y] = chars[y], chars[x]
+ return string(chars)
+}
+
+func Bvid2Avid(bvid string) (avid int64) {
+ s := swapString(swapString(bvid, 3, 9), 4, 7)
+ bv1 := string([]rune(s)[3:])
+ temp := int64(0)
+ for _, c := range bv1 {
+ idx := strings.IndexRune(CHARTS, c)
+ temp = temp*PAUL_NUM + int64(idx)
+ }
+ avid = (temp & MAX_CODE) ^ XOR_CODE
+ return
+}
+
+func Avid2Bvid(avid int64) (bvid string) {
+ arr := [12]string{"B", "V", "1"}
+ bvIdx := len(arr) - 1
+ temp := (avid | (MAX_CODE + 1)) ^ XOR_CODE
+ for temp > 0 {
+ idx := temp % PAUL_NUM
+ arr[bvIdx] = string(CHARTS[idx])
+ temp /= PAUL_NUM
+ bvIdx--
+ }
+ raw := strings.Join(arr[:], "")
+ bvid = swapString(swapString(raw, 3, 9), 4, 7)
+ return
+}
+
+func main() {
+ avid := int64(1054803170)
+ bvid := "BV1mH4y1u7UA"
+ resAvid := Bvid2Avid(bvid)
+ resBvid := Avid2Bvid(avid)
+
+ fmt.Printf("convert bvid to avid: %v\tvalue:%v\n", avid == resAvid, resAvid)
+ fmt.Printf("convert avid to bvid: %v\tvalue:%v\n", bvid == resBvid, resBvid)
+
+}
+
+```
+
+
+### C++
+```cpp
+#include
+#include
+#include
+#include
+
+constexpr int64_t XOR_CODE = 0x1552356C4CDB;
+constexpr int64_t MAX_AID = 0x8000000000000;
+constexpr int64_t MASK_CODE = MAX_AID - 1;
+constexpr int64_t BASE = 58;
+constexpr char Table[BASE + 1] = "FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf";
+constexpr char ReverseTable[128] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x2c, 0x2d, 0x0b, 0x1a, 0x0e, 0x27, 0x11, 0x1d, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x25, 0x2a, 0x31, 0x12, 0x00, 0x0c, 0x15, 0x00, 0x13, 0x06, 0x0f, 0x08, 0x05, 0x00,
+ 0x04, 0x32, 0x35, 0x30, 0x07, 0x2f, 0x0d, 0x17, 0x33, 0x20, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1f, 0x1c, 0x01, 0x36, 0x21, 0x39, 0x0a, 0x1e, 0x23, 0x10, 0x29, 0x00, 0x2e, 0x14, 0x37,
+ 0x16, 0x24, 0x28, 0x18, 0x1b, 0x09, 0x22, 0x02, 0x19, 0x2b, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+std::string Av2bv(const int64_t Avid) {
+ assert(Avid > 0 && "Avid must be greater than 0");
+ std::string bv = "BV1";
+ bv.resize(12, '\0');
+
+ int64_t tmp = (Avid | MAX_AID) ^ XOR_CODE;
+ for (size_t i = bv.size() - 1; tmp > 0 && i > 2; --i) {
+ bv[i] = Table[tmp % BASE];
+ tmp /= BASE;
+ }
+ std::ranges::swap(bv.at(3), bv.at(9));
+ std::ranges::swap(bv.at(4), bv.at(7));
+ return bv;
+}
+
+int64_t Bv2av(const std::string &Bvid) {
+ assert(Bvid.starts_with("BV1") && "Bvid must start with 'BV1'");
+
+ auto Bvid_ = Bvid;
+ std::ranges::swap(Bvid_.at(3), Bvid_.at(9));
+ std::ranges::swap(Bvid_.at(4), Bvid_.at(7));
+
+ int64_t tmp = 0;
+ for (int i = 3; i < Bvid_.size(); ++i) {
+ tmp = ReverseTable[Bvid_.at(i)] + BASE * tmp;
+ }
+ return (tmp & MASK_CODE) ^ XOR_CODE;
+}
+
+int main() {
+ assert(Av2bv(1004871019) == "BV16x4y1H7M1");
+ assert(Bv2av("BV16x4y1H7M1") == 1004871019);
+}
+```
+
+
+
+## 老版算法存档
+
+**以下算法已失效**,编解码函数值域有限,不推荐使用,在此仅作为存档
+
+
+查看折叠内容:
+
+算法参考自[【揭秘】av号转bv号的过程](https://www.bilibili.com/video/BV1N741127Tj)
+
+### av->bv算法
+
+注:本算法及示例程序仅能编解码`avid < 29460791296`,且暂无法验证`avid >= 29460791296`的正确性
+再注:本人不清楚新算法能否编解码`avid >= 29460791296`
+
+1. a = (avid ⊕ 177451812) + 100618342136696320
+2. 以 i 为循环变量循环 6 次 b[i] = (a / 58 ^ i) % 58
+3. 将 b[i] 中各个数字转换为以下码表中的字符
+
+码表:
+
+> fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF
+
+4. 初始化字符串 b[i]=` `
+
+5. 按照以下字符顺序编码表编码并填充至 b[i]
+
+字符顺序编码表:
+
+> 0 -> 9
+>
+> 1 -> 8
+>
+> 2 -> 1
+>
+> 3 -> 6
+>
+> 4 -> 2
+>
+> 5 -> 4
+>
+> 6 -> 0
+>
+> 7 -> 7
+>
+> 8 -> 3
+>
+> 9 -> 5
+
+### bv->av算法
+
+为以上算法的逆运算
+
+### 编程实现
+
+使用 Python C TypeScript Java Kotlin Golang Rust 等语言作为示例,欢迎社区提交更多例程
+
+#### Python
+
+```python
+XOR = 177451812
+ADD = 100618342136696320
+TABLE = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF"
+MAP = 9, 8, 1, 6, 2, 4, 0, 7, 3, 5
+
+
+def av2bv(av: int) -> str:
+ av = (av ^ XOR) + ADD
+ bv = [""] * 10
+ for i in range(10):
+ bv[MAP[i]] = TABLE[(av // 58**i) % 58]
+ return "".join(bv)
+
+
+def bv2av(bv: int) -> int:
+ av = [""] * 10
+ s = 0
+ for i in range(10):
+ s += TABLE.find(bv[MAP[i]]) * 58**i
+ av = (s - ADD) ^ XOR
+
+ return av
+
+
+def main():
+ while 1:
+ mode = input("1. AV to BV\n2. BV to AV\n3. Exit\n你的选择:")
+ if mode == "1":
+ print(f"BV号是:BV {av2bv(int(input('AV号是:')))}")
+ elif mode == "2":
+ print(f"AV号是:AV {bv2av(input('BV号是:'))}")
+ elif mode == "3":
+ break
+ else:
+ print("输入错误请重新输入")
+
+
+if __name__ == "__main__":
+ main()
+```
+
+#### C
+
+```c
+#include
+#include
+#include
+#include
+
+const char table[] = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF"; // 码表
+char tr[124]; // 反查码表
+const unsigned long long XOR = 177451812; // 固定异或值
+const unsigned long long ADD = 8728348608; // 固定加法值
+const int s[] = {11, 10, 3, 8, 4, 6}; // 位置编码表
+
+// 初始化反查码表
+void tr_init() {
+ for (int i = 0; i < 58; i++)
+ tr[table[i]] = i;
+}
+
+unsigned long long bv2av(char bv[]) {
+ unsigned long long r = 0;
+ unsigned long long av;
+ for (int i = 0; i < 6; i++)
+ r += tr[bv[s[i]]] * (unsigned long long)pow(58, i);
+ av = (r - ADD) ^ XOR;
+ return av;
+}
+
+char *av2bv(unsigned long long av) {
+ char *result = (char*)malloc(13);
+ strcpy(result,"BV1 4 1 7 ");
+ av = (av ^ XOR) + ADD;
+ for (int i = 0; i < 6; i++)
+ result[s[i]] = table[(unsigned long long)(av / (unsigned long long)pow(58, i)) % 58];
+ return result;
+}
+
+int main() {
+ tr_init();
+ printf("%s\n", av2bv(170001));
+ printf("%u\n", bv2av("BV17x411w7KC"));
+ return 0;
+}
+```
+
+输出为:
+
+```
+BV17x411w7KC
+170001
+```
+
+#### TypeScript
+
+感谢[#417](https://github.com/SocialSisterYi/bilibili-API-collect/issues/417#issuecomment-1186475063)提供
+
+```typescript
+export default class BvCode {
+ private TABEL = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'; // 码表
+ private TR: Record = {}; // 反查码表
+ private S = [11, 10, 3, 8, 4, 6]; // 位置编码表
+ private XOR = 177451812; // 固定异或值
+ private ADD = 8728348608; // 固定加法值
+ constructor() {
+ // 初始化反查码表
+ const len = this.TABEL.length;
+ for (let i = 0; i < len; i++) {
+ this.TR[this.TABEL[i]] = i;
+ }
+ }
+ av2bv(av: number): string {
+ const x_ = (av ^ this.XOR) + this.ADD;
+ const r = ['B', 'V', '1', , , '4', , '1', , '7'];
+ for (let i = 0; i < 6; i++) {
+ r[this.S[i]] = this.TABEL[Math.floor(x_ / 58 ** i) % 58];
+ }
+ return r.join('');
+ }
+ bv2av(bv: string): number {
+ let r = 0;
+ for (let i = 0; i < 6; i++) {
+ r += this.TR[bv[this.S[i]]] * 58 ** i;
+ }
+ return (r - this.ADD) ^ this.XOR;
+ }
+}
+
+const bvcode = new BvCode();
+
+console.log(bvcode.av2bv(170001));
+console.log(bvcode.bv2av('BV17x411w7KC'));
+```
+
+输出为:
+
+```
+BV17x411w7KC
+170001
+```
+
+#### Java
+
+```java
+/**
+ * 算法来自:https://www.zhihu.com/question/381784377/answer/1099438784
+ */
+public class Util {
+ private static final String TABLE = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF";
+ private static final int[] S = new int[]{11, 10, 3, 8, 4, 6};
+ private static final int XOR = 177451812;
+ private static final long ADD = 8728348608L;
+ private static final Map MAP = new HashMap<>();
+
+ static {
+ for (int i = 0; i < 58; i++) {
+ MAP.put(TABLE.charAt(i), i);
+ }
+ }
+
+ public static String aidToBvid(int aid) {
+ long x = (aid ^ XOR) + ADD;
+ char[] chars = new char[]{'B', 'V', '1', ' ', ' ', '4', ' ', '1', ' ', '7', ' ', ' '};
+ for (int i = 0; i < 6; i++) {
+ int pow = (int) Math.pow(58, i);
+ long i1 = x / pow;
+ int index = (int) (i1 % 58);
+ chars[S[i]] = TABLE.charAt(index);
+ }
+ return String.valueOf(chars);
+ }
+
+ public static int bvidToAid(String bvid) {
+ long r = 0;
+ for (int i = 0; i < 6; i++) {
+ r += MAP.get(bvid.charAt(S[i])) * Math.pow(58, i);
+ }
+ return (int) ((r - ADD) ^ XOR);
+ }
+}
+```
+
+#### Kotlin
+
+```kotlin
+/**
+ * 此程序非完全原创,改编自GH站内某大佬的Java程序,修改了部分代码,且转换为Kotlin
+ * 算法来源同上
+ */
+object VideoUtils {
+ //这里是由知乎大佬不知道用什么方法得出的转换用数字
+ var ss = intArrayOf(11, 10, 3, 8, 4, 6, 2, 9, 5, 7)
+ var xor: Long = 177451812 //二进制时加减数1
+
+ var add = 8728348608L //十进制时加减数2
+
+ //变量初始化工作,加载哈希表
+ private const val table = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF"
+ private val mp = HashMap()
+ private val mp2 = HashMap()
+
+ //现在,定义av号和bv号互转的方法
+//定义一个power乘方方法,这是转换进制必要的
+ fun power(a: Int, b: Int): Long {
+ var power: Long = 1
+ for (c in 0 until b) power *= a.toLong()
+ return power
+ }
+
+ //bv转av方法
+ fun bv2av(s: String): String {
+ var r: Long = 0
+ //58进制转换
+ for (i in 0..57) {
+ val s1 = table.substring(i, i + 1)
+ mp[s1] = i
+ }
+ for (i in 0..5) {
+ r += mp[s.substring(ss[i], ss[i] + 1)]!! * power(58, i)
+ }
+ //转换完成后,需要处理,带上两个随机数
+ return (r - add xor xor).toString()
+ }
+
+ //av转bv方法
+ fun av2bv(st: String): String {
+ try {
+ var s = java.lang.Long.valueOf(st.split("av".toRegex()).dropLastWhile { it.isEmpty() }
+ .toTypedArray()[1])
+ val sb = StringBuffer("BV1 4 1 7 ")
+ //逆向思路,先将随机数还原
+ s = (s xor xor) + add
+ //58进制转回
+ for (i in 0..57) {
+ val s1 = table.substring(i, i + 1)
+ mp2[i] = s1
+ }
+ for (i in 0..5) {
+ val r = mp2[(s / power(58, i) % 58).toInt()]
+ sb.replace(ss[i], ss[i] + 1, r!!)
+ }
+ return sb.toString()
+ } catch (e: ArrayIndexOutOfBoundsException) {
+ return ""
+ }
+ }
+
+}
+```
+
+#### Golang
+
+```go
+package main
+
+import "math"
+
+const TABLE = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF"
+var S = [11]uint{11, 10, 3, 8, 4, 6}
+const XOR = 177451812
+const ADD = 8728348608
+
+var TR = map[string]int64{}
+
+// 初始化 TR
+func init() {
+ for i := 0; i < 58; i++ {
+ TR[TABLE[i:i+1]] = int64(i)
+ }
+}
+
+func BV2AV(bv string) int64 {
+ r := int64(0)
+ for i := 0; i < 6; i++ {
+ r += TR[bv[S[i]:S[i]+1]] * int64(math.Pow(58, float64(i)))
+ }
+ return (r - ADD) ^ XOR
+}
+
+func AV2BV(av int64) string {
+ x := (av ^ XOR) + ADD
+ r := []rune("BV1 4 1 7 ")
+ for i := 0; i < 6; i++ {
+ r[S[i]] = rune(TABLE[x/int64(math.Pow(58, float64(i)))%58])
+ }
+ return string(r)
+}
+
+func main() {
+ println(AV2BV(170001))
+ println(BV2AV("BV17x411w7KC"))
+}
+```
+
+输出为:
+
+```
+BV17x411w7KC
+170001
+```
+
+#### Rust
+
+crate: https://github.com/stackinspector/bvid
+
+```rust
+// Copyright (c) 2023 stackinspector. MIT license.
+
+const XORN: u64 = 177451812;
+const ADDN: u64 = 100618342136696320;
+const TABLE: [u8; 58] = *b"fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF";
+const MAP: [usize; 10] = [9, 8, 1, 6, 2, 4, 0, 7, 3, 5];
+const REV_TABLE: [u8; 74] = [
+ 13, 12, 46, 31, 43, 18, 40, 28, 5, 0, 0, 0, 0, 0, 0, 0, 54, 20, 15, 8,
+ 39, 57, 45, 36, 0, 38, 51, 42, 49, 52, 0, 53, 7, 4, 9, 50, 10, 44, 34, 6,
+ 25, 1, 0, 0, 0, 0, 0, 0, 26, 29, 56, 3, 24, 0, 47, 27, 22, 41, 16, 0,
+ 11, 37, 2, 35, 21, 17, 33, 30, 48, 23, 55, 32, 14, 19,
+];
+const POW58: [u64; 10] = [
+ 1, 58, 3364, 195112, 11316496, 656356768, 38068692544,
+ 2207984167552, 128063081718016, 7427658739644928,
+];
+
+fn av2bv(avid: u64) -> [u8; 10] {
+ let a = (avid ^ XORN) + ADDN;
+ let mut bvid = [0; 10];
+ for i in 0..10 {
+ bvid[MAP[i]] = TABLE[(a / POW58[i]) as usize % 58];
+ }
+ bvid
+}
+
+fn bv2av(bvid: [u8; 10]) -> u64 {
+ let mut a = 0;
+ for i in 0..10 {
+ a += REV_TABLE[bvid[MAP[i]] as usize - 49] as u64 * POW58[i];
+ }
+ (a - ADDN) ^ XORN
+}
+
+// assert_eq!(*b"17x411w7KC", av2bv(170001));
+// assert_eq!(170001, bv2av(*b"17x411w7KC"));
+```
+
+
diff --git a/docs/misc/device_identity.md b/docs/misc/device_identity.md
new file mode 100644
index 0000000..0335848
--- /dev/null
+++ b/docs/misc/device_identity.md
@@ -0,0 +1,104 @@
+# 设备各类标识算法(APP 端)
+
+## 设备唯一标识 BUVID
+
+注意区分于 Web 端的 [buvid3, buvid4](buvid3_4.md).
+
+BUVID 在 APP 首次安装于某设备, 且首次启动时生成.
+
+APP 首次(即每次安装后)启动, 会向云端发送本机各类设备特征, 含 `AndroidId`, `DrmId` 等, 请求是否有匹配的 BUVID, 有就使用云端的, 否则使用本地生成的.
+
+APP 请求是否有匹配的 BUVID 发送的本机各类设备特征包括(但不限于):
+
++ `AndroidID`
++ `DrmId`
++ `IMEI`
++ `OAID`
++ 手机网卡 `MAC`
++ 设备品牌
++ 设备 Model
++ 本地生成的 BUVID
+
+### 生成方法
+
+1. 选定设备特征码, 可以是 `AndroidID`, `DrmId`, 手机网卡 `MAC` 等. 记为 `ID`. 特别地, `MAC` 应当去掉 `:`, `GUID`(即 UUID) 应当去掉 `-`.
+
+2. 计算 `ID` 的 MD5. 记为 `ID_MD5`.
+
+3. 从 `ID_MD5` 抽取第 3, 13, 23 位, 失败就默认为 000, 记为 `ID_E`.
+
+4. 根据选定的设备特征码类型确定 BUVID Prefix, 见附录. 记为 `BUVID_Prefix`.
+
+5. 按 `{BUVID_Prefix}{ID_E}{ID_MD5}` 的顺序连接起来, 共37位(2+3+32). 结果应当为大写.
+
+### Demo
+
+#### Rust
+
+代码及测试样例见 [Rust Playground](https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=40b5906cf3838a60efa83fa368b15147).
+
+## 设备指纹 fp (fp_local, fp_remote)
+
+用于请求账户相关 REST API, 及 gRPC Metadata 生成.
+
+在请求头中, `fp_local` 和 `fp_remote` 设置为同一值即可, 暂不清楚区别.
+
+### 生成方法
+
+1. 获取 BUVID. 此处一般使用 XU Prefix 的 BUVID.
+
+2. 获取设备 Model(`Build.MODEL`), 如 `NOH-AN01`.
+
+3. 获取手机无线电固件版本号(`Build.getRadioVersion()`), 失败则留空. 如 `21C20B686S000C000,21C20B686S000C000`.
+
+4. 按前述顺序拼接字符串, 计算得 MD5.
+
+5. 获取年月日, 格式 `yyyyMMddhhmmss`, 拼接到 4 得到的字符串后.
+
+6. 生成 16 位随机字符串, CharSet 为 `0123456789abcdef`, 拼接到 5 得到的字符串后, 记为 `fp_raw`.
+
+7. 计算得到一个特殊字符串, 拼接到 `fp_raw` 后, 即得到最终的 `fp`, 特殊字符串算法见下:
+
+```rust
+let mut veri_code = 0;
+// 有点像 HEX 的操作
+let fp_raw_sub_str = fp_raw
+ .as_bytes() // 将字符串 fp_raw 转换为字节数组
+ .chunks(2) // 按每两个字节一组进行切分
+ .map(|s| unsafe { ::std::str::from_utf8_unchecked(s) }) // 对每一组解析作为 UTF-8 字符串
+ .collect::>(); // 将结果收集到 Vec 中
+// 如果 fp_raw 的长度小于 62, 则向下取偶数减半作为循环终止条件, 否则终止条件为31
+for i in 0..({
+ if fp_raw.len() < 62 {
+ fp_raw.len() - fp_raw.len() % 2 // 取偶数
+ } else {
+ 62
+ }
+} / 2)
+{
+ // 将每组字符串转换为对应的 16 进制整数, 将转换得到的整数加到 veri_code 上.
+ veri_code += i32::from_str_radix(fp_raw_sub_str[i], 16).unwrap_or(0);
+}
+// 最后将 veri_code 对 256 取余, 格式化为两位的 16 进制字符串
+let veri_code = format!("{:0>2x}", veri_code % 256);
+```
+
+### Demo
+
+#### Rust
+
+代码及测试样例见 [Rust Playground](https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=40b5906cf3838a60efa83fa368b15147).
+
+## 附录
+
+### BUVID Prefix
+
+|设备特征码|BUVID Prefix|备注|
+|:-:|:-:|:-:|
+|`AndroidID`|`XX`||
+|`DrmId`|`XU`||
+|`IMEI`|`XZ`|已弃用|
+|`GUID`|`XW`|已弃用|
+|`MAC`|`XY`||
+|`GoogleId`|`XG`|东南亚版本|
+|`FacebookId`|`XF`|东南亚版本|
diff --git a/docs/misc/errcode.md b/docs/misc/errcode.md
new file mode 100644
index 0000000..3fe8264
--- /dev/null
+++ b/docs/misc/errcode.md
@@ -0,0 +1,62 @@
+# 公共错误码
+
+下表为大部分接口返回值中`code`字段值中公共的错误代码
+
+## 权限类
+
+| 代码 | 含义 |
+| ---- | -------------------------- |
+| -1 | 应用程序不存在或已被封禁 |
+| -2 | Access Key 错误 |
+| -3 | API 校验密匙错误 |
+| -4 | 调用方对该 Method 没有权限 |
+| -101 | 账号未登录 |
+| -102 | 账号被封停 |
+| -103 | 积分不足 |
+| -104 | 硬币不足 |
+| -105 | 验证码错误 |
+| -106 | 账号非正式会员或在适应期 |
+| -107 | 应用不存在或者被封禁 |
+| -108 | 未绑定手机 |
+| -110 | 未绑定手机 |
+| -111 | csrf 校验失败 |
+| -112 | 系统升级中 |
+| -113 | 账号尚未实名认证 |
+| -114 | 请先绑定手机 |
+| -115 | 请先完成实名认证 |
+
+## 请求类
+
+| 代码 | 含义 |
+| ---- | --------------------- |
+| -304 | 木有改动 |
+| -307 | 撞车跳转 |
+| -352 | 风控校验失败 (UA 或 wbi 参数不合法) |
+| -400 | 请求错误 |
+| -401 | 未认证 (或非法请求) |
+| -403 | 访问权限不足 |
+| -404 | 啥都木有 |
+| -405 | 不支持该方法 |
+| -409 | 冲突 |
+| -412 | 请求被拦截 (客户端 ip 被服务端风控) |
+| -500 | 服务器错误 |
+| -503 | 过载保护,服务暂不可用 |
+| -504 | 服务调用超时 |
+| -509 | 超出限制 |
+| -616 | 上传文件不存在 |
+| -617 | 上传文件太大 |
+| -625 | 登录失败次数太多 |
+| -626 | 用户不存在 |
+| -628 | 密码太弱 |
+| -629 | 用户名或密码错误 |
+| -632 | 操作对象数量限制 |
+| -643 | 被锁定 |
+| -650 | 用户等级太低 |
+| -652 | 重复的用户 |
+| -658 | Token 过期 |
+| -662 | 密码时间戳过期 |
+| -688 | 地理区域限制 |
+| -689 | 版权限制 |
+| -701 | 扣节操失败 |
+| -799 | 请求过于频繁,请稍后再试 |
+| -8888 | 对不起,服务器开小差了~ (ಥ﹏ಥ) |
diff --git a/docs/misc/picture.md b/docs/misc/picture.md
new file mode 100644
index 0000000..e16cfa0
--- /dev/null
+++ b/docs/misc/picture.md
@@ -0,0 +1,97 @@
+# 图片格式化
+
+已知 `*.hdslb.com` `archive.biliimg.com` 等域名作用等效, 对于请求头 `Referer` 要求留空或在 `.bilibili.com` 等 B 站域名下
+
+对于以上域名的 `/bfs/` 下的图片文件都可以使用以下可选格式化参数
+
+使用 `@` 开始参数 (无论格式如何, 无论是否有参数, 通过计算 HASH 发现, 使用 `@` 均会导致返回图片不同), 多个参数以 `_` 分隔, 图片格式无需分隔且必须放在最后
+
+参见: [#191](https://github.com/SocialSisterYi/bilibili-API-collect/issues/191)
+
+注: jpg 即 jpeg, 二者等效. 网页端常用 AVIF, WebP.
+
+| 参数 | 格式 | 含义 | 备注 |
+| ---- | ------- | ---------------- | ---------------- |
+| w | ${int}w | 图片最大限制宽度 | 范围 [1, 9223372036854775807] |
+| h | ${int}h | 图片最大限制高度 | 范围 [1, 9223372036854775807] |
+| s | ${int}s | 作用尚不明确 | 不影响输出结果, 范围 [1, 9223372036854775807] |
+| e | ${int}e | 改变大小 | 0: 保留比例取其小, 1: 保留比例取其大, 2: 不保留原比例 |
+| p | ${int}p | 缩放倍数 | 默认100, 范围 [1, 1000] |
+| o | ${int}o | 作用尚不明确 | 不影响输出结果 范围 [0, 1] |
+| q | ${int}q | 图片质量百分比 | 仅限webp/jpeg/avif |
+| c | ${int}c | 裁切图片(如果宽高允许) | 0: 不裁切但会修改图片, 1: 上传时的预设规则(若无则右下), 2: 左上, 3: 右上 |
+| f | ${int}f | 作用尚不明确 | [0, 1]: 不改变图片, 2: 会改变图片 |
+| progressive | progressive | 图片编码方式 | 仅限 jpeg(无: baseline, 有: progressive)/png(无:non-interlaced, 有: interlaced) |
+| ! | !${str} | 加载来源 | web-home-carousel-cover, header, web-dynamic, web-avatar-space-header, ... |
+| . | .${str} | 图片格式 | 仅限 png/jpeg/webp/avif/[avg_color](#avg_color格式说明) |
+
+**示例:**
+
+
+查看示例:
+
+原始图片
+
+https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg
+
+
+
+高度限制为100
+
+https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@100h
+
+
+
+宽度限制为100
+
+https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@100w
+
+
+
+转换格式为webp
+
+https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@.webp
+
+
+
+转换为webp图片质量为1%
+
+https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@1q.webp
+
+
+
+
+## avg_color格式说明
+
+当图片格式化输出格式为`avg_color`时
+
+> \*.hdslb.com/bfs/\*/\*.*@\*.avg_color
+
+*请求方式:GET*
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | ----------- | ------ |
+| RGB | str | 平均颜色值 | HEX |
+
+**示例:**
+
+获取 https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg 的平均颜色值
+
+```shell
+curl 'https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@.avg_color'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "RGB": "#7d6f6c"
+}
+```
+
+
diff --git a/docs/misc/sign/APP.md b/docs/misc/sign/APP.md
new file mode 100644
index 0000000..8b51c05
--- /dev/null
+++ b/docs/misc/sign/APP.md
@@ -0,0 +1,289 @@
+# APP API 签名与鉴权
+
+## APP API 签名特性
+
+部分客户端专用的 REST API 存在基于参数签名的鉴权,需要使用规定的`appkey`及其对应的`appsec`与原始请求参数进行签名计算,部分`AppKey`及与之对应的`AppSec`已经被公开:见该文档 [APPKey](APPKey.md)
+
+- 不同 `appkey` 对应不同的 app (如客户端、概念版、必剪、漫画、bililink等)
+
+- 不同平台同 app 也会存在不同的 `appkey` (如安卓端、ios端、TV端等)
+
+- 同平台同 app 下不同功能也会存在不同的 `appkey`(如登录专用、取流专用等)
+
+- 不同版本的客户端的 `appkey` 也可能不同
+
+- **appkey与appsec一一对应**
+
+## APP API 签名算法
+
+1. 首先为参数中添加`appkey`字段
+2. 然后按照参数的 Key 重新排序
+3. 再对这个 Key-Value 进行 url query 序列化,并拼接与之对应的`appsec` (盐) 进行 **md5 Hash 运算**(32-bit 字符小写),该 hash 便是 API 签名
+4. 最后在参数尾部增添`sign`字段,它的 Value 为上一步计算所得的 hash,一并作为表单或 Query 提交
+
+## Demo
+
+该 Demo 提供 [Python](#python)、[Java](#java)、[TS/JS](#typescript-javascript)、[Swift](#swift)、[C++](#cplusplus) 语言例程
+
+使用 appkey = `1d8b6e7d45233436`, appsec = `560c52ccd288fed045859ed18bffd973` 对如下 `params` 参数进行签名
+
+上述示例`appkey`、`AppSec`均来自文档 [APPKey](APPKey.md)
+
+### Python
+
+```python
+import hashlib
+import urllib.parse
+
+def appsign(params, appkey, appsec):
+ '为请求参数进行 APP 签名'
+ params.update({'appkey': appkey})
+ params = dict(sorted(params.items())) # 按照 key 重排参数
+ query = urllib.parse.urlencode(params) # 序列化参数
+ sign = hashlib.md5((query+appsec).encode()).hexdigest() # 计算 api 签名
+ params.update({'sign':sign})
+ return params
+
+appkey = '1d8b6e7d45233436'
+appsec = '560c52ccd288fed045859ed18bffd973'
+params = {
+ 'id':114514,
+ 'str':'1919810',
+ 'test':'いいよ,こいよ',
+}
+signed_params = appsign(params, appkey, appsec)
+query = urllib.parse.urlencode(signed_params)
+print(signed_params)
+print(query)
+```
+
+输出内容分别是进行 APP 签名的后参数的 key-Value 以及 url query 形式
+
+```
+{'appkey': '1d8b6e7d45233436', 'id': 114514, 'str': '1919810', 'test': 'いいよ,こいよ', 'sign': '01479cf20504d865519ac50f33ba3a7d'}
+appkey=1d8b6e7d45233436&id=114514&str=1919810&test=%E3%81%84%E3%81%84%E3%82%88%EF%BC%8C%E3%81%93%E3%81%84%E3%82%88&sign=01479cf20504d865519ac50f33ba3a7d
+```
+
+### Java
+
+
+```java
+package io.github.cctyl;
+
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.net.URLEncoder;
+import java.util.TreeMap;
+
+/**
+ * @author cctyl
+ */
+public class AppSigner {
+
+ private static final String APP_KEY = "1d8b6e7d45233436";
+ private static final String APP_SEC = "560c52ccd288fed045859ed18bffd973";
+
+ public static String appSign(Map params) {
+ // 为请求参数进行 APP 签名
+ params.put("appkey", APP_KEY);
+ // 按照 key 重排参数
+ Map sortedParams = new TreeMap<>(params);
+ // 序列化参数
+ StringBuilder queryBuilder = new StringBuilder();
+ for (Map.Entry entry : sortedParams.entrySet()) {
+ if (queryBuilder.length() > 0) {
+ queryBuilder.append('&');
+ }
+ queryBuilder
+ .append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8))
+ .append('=')
+ .append(URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8));
+ }
+ return generateMD5(queryBuilder .append(APP_SEC).toString());
+ }
+
+ private static String generateMD5(String input) {
+ try {
+ MessageDigest md = MessageDigest.getInstance("MD5");
+ byte[] digest = md.digest(input.getBytes());
+ StringBuilder sb = new StringBuilder();
+ for (byte b : digest) {
+ sb.append(String.format("%02x", b));
+ }
+ return sb.toString();
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public static void main(String[] args) {
+ Map params = new HashMap<>();
+ params.put("id", "114514");
+ params.put("str", "1919810");
+ params.put("test", "いいよ,こいよ");
+ System.out.println(appSign(params));
+ }
+}
+```
+
+输出结果为:01479cf20504d865519ac50f33ba3a7d
+
+### TypeScript/JavaScript
+
+```typescript
+import { createHash } from 'node:crypto'
+
+type Params = Record
+
+const md5 = (str: string) => createHash('md5').update(str).digest('hex')
+
+/**
+ * 为请求参数进行 APP 签名
+ */
+export function appSign(params: Params, appkey: string, appsec: string) {
+ params.appkey = appkey
+ const searchParams = new URLSearchParams(params)
+ searchParams.sort()
+ return md5(searchParams.toString() + appsec)
+}
+
+console.log(
+ appSign(
+ {
+ id: 114514,
+ str: '1919810',
+ test: 'いいよ,こいよ',
+ },
+ '1d8b6e7d45233436',
+ '560c52ccd288fed045859ed18bffd973',
+ ),
+ '01479cf20504d865519ac50f33ba3a7d',
+)
+```
+
+输出结果为:01479cf20504d865519ac50f33ba3a7d
+
+### Swift
+
+```swift
+import Foundation
+import CommonCrypto
+
+//Swift标准库没有MD5函数,所以我们要自己实现一个
+func MD5(string: String) -> String {
+ let length = Int(CC_MD5_DIGEST_LENGTH)
+ var digest = [UInt8](repeating: 0, count: length)
+
+ if let d = string.data(using: .utf8) {
+ _ = d.withUnsafeBytes { body -> String in
+ CC_MD5(body.baseAddress, CC_LONG(d.count), &digest)
+ return ""
+ }
+ }
+
+ return (0.. String {
+ var signedParams = params
+ signedParams["appkey"] = appKey
+ let sortedParams = signedParams.sorted { $0.key < $1.key }
+ //在制作成query时,需要显式addingPercentEncoding转换
+ let query = sortedParams.map { "\($0.key)=\($0.value.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)" }.joined(separator: "&")
+ let sign = MD5(string: query+appSec)
+ return sign
+}
+
+
+//testSign
+let appKey = "1d8b6e7d45233436"
+let appSec = "560c52ccd288fed045859ed18bffd973"
+let signResult = appSign(params: [
+ "id": "114514",
+ "str": "1919810",
+ "test": "いいよ,こいよ",
+],appKey:appKey,appSec:appSec)
+print(signResult)
+```
+
+输出结果为:01479cf20504d865519ac50f33ba3a7d
+
+
+
+### CplusPlus
+
+需要 c++ 23 标准库,[cpr](https://github.com/libcpr/cpr)、[cryptopp](https://github.com/weidai11/cryptopp)、[nlohmann/json](https://github.com/nlohmann/json) 等依赖
+
+```c++
+#include // std::println
+
+/// thrid party libraries
+#include // cpr::util::urlEncode()
+#include
+#include
+#include
+
+/*
+ * 注意,假定不会发生错误!
+ */
+
+/* 获取 md5 hex(lower) */
+std::string Get_md5_hex(const std::string &Input_str) {
+ CryptoPP::Weak1::MD5 hash;
+ std::string md5_hex;
+
+ CryptoPP::StringSource ss(Input_str, true,
+ new CryptoPP::HashFilter(hash,
+ new CryptoPP::HexEncoder(
+ new CryptoPP::StringSink(md5_hex)
+ )
+ )
+ );
+
+ std::ranges::for_each(md5_hex, [](char &x) { x = std::tolower(x); });
+ return md5_hex;
+}
+
+/* 将 json 转换为 url 编码字符串 */
+std::string Json_to_url_encode_str(const nlohmann::json &Json) {
+ std::string encode_str;
+ for (const auto &[key, value]: Json.items()) {
+ encode_str.append(key).append("=").append(cpr::util::urlEncode(value.is_string() ? value.get() : to_string(value))).append("&");
+ }
+
+ // remove the last '&'
+ encode_str.resize(encode_str.size() - 1, '\0');
+ return encode_str;
+}
+
+std::string App_sign(nlohmann::json &Params, const std::string &App_key, const std::string &App_sec) {
+ Params["appkey"] = App_key;
+ Params["sign"] = Get_md5_hex(Json_to_url_encode_str(Params) + App_sec);
+ return Json_to_url_encode_str(Params);
+}
+
+int main() {
+ nlohmann::json Params;
+ Params["id"] = 114514;
+ Params["str"] = "1919810";
+ Params["test"] = "いいよ,こいよ";
+
+ constexpr auto App_key = "1d8b6e7d45233436";
+ constexpr auto App_sec = "560c52ccd288fed045859ed18bffd973";
+ std::string sign = App_sign(Params, App_key, App_sec);
+ std::println("{}", to_string(Params));
+ std::println("{}", sign);
+}
+```
+
+```text
+{"appkey":"1d8b6e7d45233436","id":114514,"sign":"01479cf20504d865519ac50f33ba3a7d","str":"1919810","test":"いいよ,こいよ"}
+appkey=1d8b6e7d45233436&id=114514&sign=01479cf20504d865519ac50f33ba3a7d&str=1919810&test=%E3%81%84%E3%81%84%E3%82%88%EF%BC%8C%E3%81%93%E3%81%84%E3%82%88
+```
+
diff --git a/docs/misc/sign/APPKey.md b/docs/misc/sign/APPKey.md
new file mode 100644
index 0000000..398ebb0
--- /dev/null
+++ b/docs/misc/sign/APPKey.md
@@ -0,0 +1,55 @@
+# APPKey
+
+以下为已知的 APPkey / APPSec,及部分使用场景参数信息,均来自抓包与逆向工程
+
+| APPKEY | APPSEC | platform2 | APP类型 | neuronAppId1 | mobi_app2 | 备注 |
+| :--------------: | :------------------------------: | :------------------: | :----------------: | :---------------------: | :------------------: | :----------------------------------------: |
+| 9d5889cf67e615cd | 8fd9bb32efea8cef801fd895bef2713d | `android` | Ai4cCreatorAndroid | | | |
+| 1d8b6e7d45233436 | 560c52ccd288fed045859ed18bffd973 | `android` | 粉版 | `1` | `android` | 获取资源通用 |
+| 783bbb7264451d82 | 2653583c8873dea268ab9386918b1d65 | `android` | 粉版 | `1` | `android` | 仅获取用户信息时使用(7.X及更新版本) |
+| 57263273bc6b67f6 | a0488e488d1567960d3a765e8d129f90 | `android` | 粉版 | `1` | `android` | 可能来自旧版 |
+| 07da50c9a0bf829f | 25bdede4e1581c836cab73a48790ca6e | `android` | 概念版 | `3` | `android_b` | |
+| 191c3b6b975af184 | 1673b15a09ef5e4427627f47b03a0578 | `android` | 概念版 | `3` | `android_b` | 仅获取用户信息时使用(7.X及更新版本) |
+| 178cf125136ca8ea | 34381a26236dd1171185c0beb042e1c6 | `android` | 概念版 | `3` | `android_b` | 可能来自旧版 |
+| 7d336ec01856996b | a1ce6983bc89e20a36c37f40c4f1a0dd | `android` | 概念版 | `3` | `android_b` | 可能来自旧版 |
+| dfca71928277209b | b5475a8825547a4fc26c7d518eaaa02e | `android` | HD 版 | `5` | `android_hd` | |
+| bb3101000e232e27 | 36efcfed79309338ced0380abd824ac1 | `android` | 白版 | `14` | `android_i` | |
+| ae57252b0c09105d | c75875c596a69eb55bd119e74b07cfe3 | `android` | 白版 | `14` | `android_i` | 仅获取用户信息时使用(7.X及更新版本) |
+| 8e16697a1b4f8121 | f5dd03b752426f2e623d7badb28d190a | `android` | 白版 | `14` | `android_i` | 可能来自旧版 |
+| 7d089525d3611b1c | acd495b248ec528c2eed1e862d393126 | `android` | 蓝版 | `30` | `bstar_a` | |
+| iVGUTjsxvpLeuDCf | aHRmhWMLkdeMuILqORnYZocwMBpMEOdt | `android` | - | - | - | 视频取流专用, 仅5.X旧版使用 |
+| YvirImLGlLANCLvM | JNlZNgfNGKZEpaDTkCdPQVXntXhuiJEM | `ios` | - | - | - | 视频取流专用 |
+| 27eb53fc9058f8c3 | c2ed53a74eeefe3cf99fbd01d8c9c375 | `web`/`ios`? | - | - | - | 第三方授权使用 |
+| 84956560bc028eb7 | 94aba54af9065f71de72f5508f1cd42e | ? | UWP 版 | - | - | 部分API不接受此appkey, 返回-663错误 |
+| 85eb6835b0a1034e | 2ad42749773c441109bdc0191257a664 | ? | UWP 版? | - | - | 部分API不接受此appkey, 返回-663错误 |
+| 4ebafd7c4951b366 | 8cb98205e9b2ad3669aad0fce12a4c13 | `ios` | iPhone 客户端? | `iphone` | ? | |
+| 8d23902c1688a798 | 710f0212e62bd499b8d3ac6e1db9302a | `android` | AndroidBiliThings | ? | ? | |
+| 4c6e1021617d40d9 | e559a59044eb2701b7a8628c86aa12ae | `android` | AndroidMallTicket | ? | ? | |
+| c034e8b74130a886 | e4e8966b1e71847dc4a3830f2d078523 | `android` | AndroidOttSdk | `7` | ? | |
+| 4409e2ce8ffd12b8 | 59b43e04ad6965f34319062b478f83dd | `android` | 云视听小电视(TV版) | `9`? | `android_tv_yst`? | |
+| 37207f2beaebf8d7 | e988e794d4d4b6dd43bc0e89d6e90c43 | `android` | BiliLink | ? | ? | |
+| 9a75abf7de2d8947 | 35ca1c82be6c2c242ecc04d88c735f31 | `android` | BiliScan | ? | ? | |
+| aae92bc66f3edfab | af125a0d5279fd576c1b4418a3e8276d | ? | PC 投稿工具 | - | ? | |
+| bca7e84c2d947ac6 | 60698ba2f68e01ce44738920a0ffe768 | ? | login | - | ? | |
+| h9Ejat5tFh81cq8V | BdiI92bjmZ9QRcjJBWv2EEssyjekAGKt | | | | | bilibili游戏 web端 游戏详情页API |
+
+注释:
+
+1 `neuronAppId`,产品编号,由数据平台分配,详情如下:
+
+- 粉(国内版)=1
+- 白(GooglePlay 版)=2
+- 蓝(东南亚版)=3
+- 直播姬=4
+- HD=5
+- 海外=6
+- OTT=7
+- 漫画=8
+- TV野版=9
+- 小视频=10
+- 网易漫画=11
+- 网易漫画lite=12
+- 网易漫画HD=13,
+- 国际版=14
+
+2 `platform`, `mobi_app` 仅供参考, 具体值需要抓包确定.
diff --git a/docs/misc/sign/bili_ticket.md b/docs/misc/sign/bili_ticket.md
new file mode 100644
index 0000000..c0ed0d8
--- /dev/null
+++ b/docs/misc/sign/bili_ticket.md
@@ -0,0 +1,304 @@
+# BiliTicket
+
+## 简述
+
+`bili_ticket` 位于请求头 Cookie 中, 非必需, 但存在可降低风控概率
+
+由 [@aynuarance](https://github.com/aynuarance) 于 [#903](https://github.com/SocialSisterYi/bilibili-API-collect/issues/903) 提供的思路,根据时间戳使用 `hmac_sha256` 算法计算 `hexsign`。
+
+是 [JWT 令牌](https://jwt.io/),有效时长为 259260 秒,即 3 天。
+例如 `eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDI3NDI3NDYsImlhdCI6MTcwMjQ4MzQ4NiwicGx0IjotMX0.xQgtTAc41NA1gzvd9yKUPgucUy_DKcQj6OG1vj8V7ZA`
+
+```json
+{
+ "alg": "HS256",
+ "kid": "s03",
+ "typ": "JWT"
+}
+```
+
+## 算法
+
+1. 获取 UNIX 秒级时间戳存入变量如 `timestamp`
+2. 计算变量 `hexsign` 值,使用 `hmac_sha256` 算法,密钥为 `XgwSnGZ1p`,消息为字符串 `"ts"` 与变量 `timestamp` 值拼接
+3. 构造请求参数,`key_id` 为 `ec02`,`hexsign` 为变量 `hexsign` 值,`context[ts]` 为变量 `timestamp` 值,`csrf` 为 cookie 中的 `bili_jct` 值也可为空
+4. 发送 `POST` 请求,获取 `data` 字段中的 `ticket` 字段的值即为所求
+
+## 接口
+
+> https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket
+
+*请求方式: POST*
+
+鉴权方式: 请求头 `Referer` 为空或 `.bilibili.com` 子域下任意页
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----- | ---- | ---- | ------ | ---- |
+| key_id | str | ec02 | 必要 | |
+| hexsign | str | 由 `hmac_sha256` 算法计算的 `hexsign` 值 | 必要 | |
+| context[ts] | num | UNIX 秒级时间戳 | 必要 | |
+| csrf | str | cookie 中的 `bili_jct` 值 | 非必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| code | num | 返回值 | 0: 成功 400: 参数错误 |
+| message | str | 返回消息 | OK: 成功 |
+| data | obj | 数据本体 | |
+| ttl | num | 1 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| ticket | str | bili_ticket | |
+| created_at | num | 创建时间 | UNIX 秒级时间戳 |
+| ttl | num | 有效时长 | 259200 秒 (3 天) |
+| context | obj | 空 | |
+| nav | obj | wbi_img 相关 | 参见 [WBI 签名](./wbi.md) |
+
+`nav` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| img | str | img_key 值 | 参见 [WBI 签名](./wbi.md) |
+| sub | str | sub_key 值 | 参见 [WBI 签名](./wbi.md) |
+
+**示例:**
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "OK",
+ "data": {
+ "ticket": "eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjM2OTMwODAsImlhdCI6MTcyMzQzMzgyMCwicGx0IjotMX0.efOwv7i4m0ykABrXEDHGAechU2AByMcP_-3EYpQrNKs",
+ "created_at": 1723433820,
+ "ttl": 259200,
+ "context": {},
+ "nav": {
+ "img": "https://i0.hdslb.com/bfs/wbi/7cd084941338484aae1ad9425b84077c.png",
+ "sub": "https://i0.hdslb.com/bfs/wbi/4932caff0ff746eab6f01bf08b70ac45.png"
+ }
+ },
+ "ttl": 1
+}
+```
+
+
+
+## Demo
+
+此处提供 [Python](#python), [Java](#java), [JavaScript (Node.js)](#javascript-nodejs) 的示例代码
+
+### Python
+
+需要 `requests` 依赖
+
+```python
+import hmac
+import hashlib
+import requests
+import time
+
+def hmac_sha256(key, message):
+ """
+ 使用HMAC-SHA256算法对给定的消息进行加密
+ :param key: 密钥
+ :param message: 要加密的消息
+ :return: 加密后的哈希值
+ """
+ # 将密钥和消息转换为字节串
+ key = key.encode('utf-8')
+ message = message.encode('utf-8')
+
+ # 创建HMAC对象,使用SHA256哈希算法
+ hmac_obj = hmac.new(key, message, hashlib.sha256)
+
+ # 计算哈希值
+ hash_value = hmac_obj.digest()
+
+ # 将哈希值转换为十六进制字符串
+ hash_hex = hash_value.hex()
+
+ return hash_hex
+
+
+if __name__ == '__main__':
+ o = hmac_sha256("XgwSnGZ1p",f"ts{int(time.time())}")
+ url = "https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket"
+ params = {
+ "key_id":"ec02",
+ "hexsign":o,
+ "context[ts]":f"{int(time.time())}",
+ "csrf": ''
+ }
+
+ headers = {
+ 'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"
+ }
+ resp = requests.post(url, params=params,headers=headers).json()
+ print(resp)
+```
+
+### Java
+
+无需第三方依赖
+
+```java
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URI;
+import java.nio.charset.StandardCharsets;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+
+public class BiliTicketDemo {
+
+ /**
+ * Convert a byte array to a hex string.
+ *
+ * @param bytes The byte array to convert.
+ * @return The hex string representation of the given byte array.
+ */
+ public static String bytesToHex(byte[] bytes) {
+ StringBuilder sb = new StringBuilder();
+ for (byte b : bytes) {
+ String hex = Integer.toHexString(0xff & b);
+ if (hex.length() == 1) {
+ sb.append('0');
+ }
+ sb.append(hex);
+ }
+ return sb.toString();
+ }
+
+ /**
+ * Generate a HMAC-SHA256 hash of the given message string using the given key
+ * string.
+ *
+ * @param key The key string to use for the HMAC-SHA256 hash.
+ * @param message The message string to hash.
+ * @throws Exception If an error occurs during the HMAC-SHA256 hash generation.
+ * @return The HMAC-SHA256 hash of the given message string using the given key
+ * string.
+ */
+ public static String hmacSha256(String key, String message) throws Exception {
+ Mac mac = Mac.getInstance("HmacSHA256");
+ SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
+ mac.init(secretKeySpec);
+ byte[] hash = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));
+ return bytesToHex(hash);
+ }
+
+ /**
+ * Get a Bilibili web ticket for the given CSRF token.
+ *
+ * @param csrf The CSRF token to use for the web ticket, can be {@code null} or
+ * empty.
+ * @return The Bilibili web ticket raw response for the given CSRF token.
+ * @throws Exception If an error occurs during the web ticket generation.
+ * @see https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/misc/sign/bili_ticket.md
+ */
+ public static String getBiliTicket(String csrf) throws Exception {
+ // params
+ long ts = System.currentTimeMillis() / 1000;
+ String hexSign = hmacSha256("XgwSnGZ1p", "ts" + ts);
+ StringBuilder url = new StringBuilder(
+ "https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket");
+ url.append('?');
+ url.append("key_id=ec02").append('&');
+ url.append("hexsign=").append(hexSign).append('&');
+ url.append("context[ts]=").append(ts).append('&');
+ url.append("csrf=").append(csrf == null ? "" : csrf);
+ // request
+ HttpURLConnection conn = (HttpURLConnection) new URI(url.toString()).toURL().openConnection();
+ conn.setRequestMethod("POST");
+ conn.addRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0");
+ InputStream in = conn.getInputStream();
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ int b;
+ while ((b = in.read()) != -1) {
+ out.write(b);
+ }
+ return new String(out.toByteArray(), StandardCharsets.UTF_8);
+ }
+
+ /**
+ * Main method to test the BiliTicketDemo class.
+ *
+ * @param args The command line arguments (not used).
+ */
+ public static void main(String[] args) {
+ try {
+ System.out.println(getBiliTicket("")); // use empty CSRF here
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+}
+```
+
+### JavaScript (Node.js)
+
+```javascript
+const crypto = require('crypto');
+
+/**
+ * Generate HMAC-SHA256 signature
+ * @param {string} key The key string to use for the HMAC-SHA256 hash
+ * @param {string} message The message string to hash
+ * @returns {string} The HMAC-SHA256 signature as a hex string
+ */
+function hmacSha256(key, message) {
+ const hmac = crypto.createHmac('sha256', key);
+ hmac.update(message);
+ return hmac.digest('hex');
+}
+
+/**
+ * Get Bilibili web ticket
+ * @param {string} csrf CSRF token, can be empty or null
+ * @returns {Promise} Promise of the ticket response in JSON format
+ */
+async function getBiliTicket(csrf) {
+ const ts = Math.floor(Date.now() / 1000);
+ const hexSign = hmacSha256('XgwSnGZ1p', `ts${ts}`);
+ const url = 'https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket';
+ const params = new URLSearchParams({
+ key_id: 'ec02',
+ hexsign: hexSign,
+ 'context[ts]': ts,
+ csrf: csrf || ''
+ });
+ const response = await fetch(`${url}?${params.toString()}`, {
+ method: 'POST',
+ headers: {
+ 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0'
+ }
+ });
+ if (!response.ok) {
+ throw new Error(`HTTP error! status: ${response.status}`);
+ }
+ return response.json();
+}
+
+(async () => {
+ try {
+ const ticketResponse = await getBiliTicket(''); // use empty CSRF here
+ console.log(ticketResponse);
+ } catch (e) {
+ console.error('Failed to get BiliTicket:', e);
+ }
+})();
+```
diff --git a/docs/misc/sign/v_voucher.md b/docs/misc/sign/v_voucher.md
new file mode 100644
index 0000000..3804c80
--- /dev/null
+++ b/docs/misc/sign/v_voucher.md
@@ -0,0 +1,179 @@
+# v_voucher 验证
+
+## 简述
+
+当同一接口在短时间内被同一用户/IP/UA多次请求或异常时, 会触发风控, 如接口返回 `code` 为 `-352` 即 `风控校验失败`, 同时 `data` 中出现 `v_voucher` 字段, 响应头出现 `x-bili-gaia-vvoucher`
+
+`v_voucher` 结构为字符串 `voucher_` 尾随一串以 `-` 为分隔符的小写 UUID
+
+`v_voucher` 可用于申请 captcha 验证码, 若无意外发生, 根据验证结果使用 `validate` 接口获取 `grisk_id` 作为被风控接口的 `gaia_vtoken` 与 Cookie 中的 `x-bili-gaia-vtoken`, 即可恢复正常访问
+
+若该情况出现在使用 Wbi 签名的接口中, 建议先检查 Wbi 签名是否正确. 若已检查 Wbi 签名或无需签名, 检查请求头中 `User-Agent` `Referer` 是否正常, 以及 `Cookie` 中 [`bili_ticket`](bili_ticket.md) [`b_nut` `buvid3` `buvid4`](../buvid3_4.md) 等是否存在. 使用 captcha 是最后的选择, 因为 captcha 验证需要用户操作
+
+参见 [#1067](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1067)
+
+**注意: 不是所有风控都可以使用本方式通过 captcha 解决**
+
+## 操作流程
+
+1. 快速以不正确的姿势请求接口, 直到返回 `v_voucher` 字段如下. 若 `data` 中没有 `v_voucher` 字段, 则检查响应头 `x-bili-gaia-vvoucher`
+
+ ```json
+ {
+ "code": -352,
+ "message": "风控校验失败",
+ "ttl": 1,
+ "data": {
+ "v_voucher": "voucher_84a8c3ce-33f5-4551-9552-9c6b13aa7938"
+ }
+ }
+ ```
+
+2. [请求 `register` 接口](#从-v_voucher-申请-captcha), 请求体传入 `csrf` 及 `v_voucher`, 该接口返回与 [申请captcha验证码](../../login/login_action/readme.md#申请captcha验证码) 部分相同, 记录此处返回的 `token` `challenge`
+
+3. 按照 [验证captcha验证码](../../login/login_action/readme.md#验证captcha验证码) 进行验证, 记下验证结果的 `validate` 与 `seccode`
+
+4. [请求 `validate` 接口](#从验证结果获取-grisk_id), 请求体传入 `challenge` `token` `validate` `seccode` `csrf`, 该接口返回 `grisk_id` 即 `gaia_vtoken` 与 `x-bili-gaia-vtoken`
+
+5. 重新请求原接口, 原 URL 参数加入 `gaia_vtoken`, Cookie 加入 `x-bili-gaia-vtoken`, 即恢复正常
+
+## 接口列表
+
+### 从 v_voucher 申请 captcha
+
+> https://api.bilibili.com/x/gaia-vgate/v1/register
+
+注: 同一有效 `v_voucher` 只能请求一次, 请求完毕请立即 [进行验证](../../login/login_action/readme.md#进行验证) 防止过期失效
+
+*请求方式: POST*
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------- | ------ | ---- |
+| csrf | str | CSRF Token (位于 Cookie 的 bili_jct) | 非必要 | |
+| v_voucher | str | v_voucher | 必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | ------ | ---- |
+| code | num | 返回值 | 0:成功 100000: 验证码获取失败 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | ------ | ---- |
+| type | str | 验证码类型 | 目前只有 `geetest` |
+| token | str | 验证码 token | 用于验证 |
+| geetest | obj | 极验信息 | 若为 null 则说明该风控无法通过 captcha 解除 |
+| biliword | null | | |
+| phone | null | | |
+| sms | null | | |
+
+`geetest` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ----- | ------ | -------- |
+| gt | str | 极验id | 一般为固定值 |
+| challenge | str | 极验KEY | 由B站后端产生用于人机验证 |
+
+**示例:**
+
+假设此处 `v_voucher` 为 `voucher_ecca35e6-36da-4f38-bd84-b3f420ea08c1`
+
+```shell
+curl -X POST "https://api.bilibili.com/x/gaia-vgate/v1/register" \
+--data-urlencode "v_voucher=voucher_ecca35e6-36da-4f38-bd84-b3f420ea08c1"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "type": "geetest",
+ "token": "e7abdb050c3d4609979f1685137e3bc0",
+ "geetest": {
+ "challenge": "85118f8714875ca4c6d5641bb0ce9ddf",
+ "gt": "ac597a4506fee079629df5d8b66dd4fe"
+ },
+ "biliword": null,
+ "phone": null,
+ "sms": null
+ }
+}
+```
+
+
+
+## 从验证结果获取 grisk_id
+
+> https://api.bilibili.com/x/gaia-vgate/v1/validate
+
+*请求方式: POST*
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------ | ---- | ---- |
+| csrf | str | CSRF Token (位于 Cookie 的 bili_jct) | 非必要 | 若登陆则必要 |
+| challenge | str | 验证码 challenge | 必要 | |
+| token | str | 验证码 token | 必要 | |
+| validate | str | 验证结果 validate | 必要 | |
+| seccode | str | 验证结果 seccode | 必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | ------ | ---- |
+| code | num | 返回值 | 0:成功 -111: csrf 校验失败 100003: 验证码过期 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | ------ | ---- |
+| is_valid | num | 验证结果 | 1:验证成功 |
+| grisk_id | str | gaia_vtoken | 用于恢复正常访问 |
+
+**示例:**
+
+```shell
+curl -X POST "https://api.bilibili.com/x/gaia-vgate/v1/validate" \
+--data-urlencode "challenge=e4fcb337b8c0427b56320f97e1064210" \
+--data-urlencode "csrf=xxxxxxxxxxxxxxx" \
+--data-urlencode "seccode=360f7b9cf75c74c68fbb7475416d0e0d|jordan" \
+--data-urlencode "token=0e1e58bdff3d4b8aa298e346fed07eeb" \
+--data-urlencode "validate=360f7b9cf75c74c68fbb7475416d0e0d"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "is_valid": 1,
+ "grisk_id": "2e91cf2b67172ca8432fe7c9ab66a5c4"
+ }
+}
+```
+
+
diff --git a/docs/misc/sign/wbi.md b/docs/misc/sign/wbi.md
new file mode 100644
index 0000000..2eb4777
--- /dev/null
+++ b/docs/misc/sign/wbi.md
@@ -0,0 +1,1477 @@
+# WBI 签名
+
+自 2023 年 3 月起,Bilibili Web 端部分接口开始采用 WBI 签名鉴权,表现在 REST API 请求时在 Query param 中添加了 `w_rid` 和 `wts` 字段。WBI 签名鉴权独立于 [APP 鉴权](APP.md) 与其他 Cookie 鉴权,目前被认为是一种 Web 端风控手段。
+
+经持续观察,大部分查询性接口都已经或准备采用 WBI 签名鉴权,请求 WBI 签名鉴权接口时,若签名参数 `w_rid` 与时间戳 `wts` 缺失、错误,会返回 [`v_voucher`](v_voucher.md),如:
+
+```json
+{"code":0,"message":"0","ttl":1,"data":{"v_voucher":"voucher_******"}}
+```
+
+感谢 [#631](https://github.com/SocialSisterYi/bilibili-API-collect/issues/631) 的研究与逆向工程。
+
+细节更新:[#885](https://github.com/SocialSisterYi/bilibili-API-collect/issues/885)。
+
+最新进展: [#919](https://github.com/SocialSisterYi/bilibili-API-collect/issues/919)
+
+## WBI 签名算法
+
+1. 获取实时口令 `img_key`、`sub_key`
+
+ 从 [nav 接口](../../login/login_info.md#导航栏用户信息) 中获取 `img_url`、`sub_url` 两个字段的参数。
+ 或从 [bili_ticket 接口](bili_ticket.md#接口) 中获取 `img` `sub` 两个字段的参数。
+
+ **注:`img_url`、`sub_url` 两个字段的值看似为存于 BFS 中的 png 图片 url,实则只是经过伪装的实时 Token,故无需且不能试图访问这两个 url**
+
+ ```json
+ {"code":-101,"message":"账号未登录","ttl":1,"data":{"isLogin":false,"wbi_img":{"img_url":"https://i0.hdslb.com/bfs/wbi/7cd084941338484aae1ad9425b84077c.png","sub_url":"https://i0.hdslb.com/bfs/wbi/4932caff0ff746eab6f01bf08b70ac45.png"}}}
+ ```
+
+ 截取其文件名,分别记为 `img_key`、`sub_key`,如上述例子中的 `7cd084941338484aae1ad9425b84077c` 和 `4932caff0ff746eab6f01bf08b70ac45`。
+
+ `img_key`、`sub_key` 全站统一使用,观测知应为**每日更替**,使用时建议做好**缓存和刷新**处理。
+
+ 特别地,发现部分接口将 `img_key`、`sub_key` 硬编码进 JavaScript 文件内,如搜索接口 `https://s1.hdslb.com/bfs/static/laputa-search/client/assets/index.1ea39bea.js`,暂不清楚原因及影响。
+ 同时, 部分页面会在 SSR 的 `__INITIAL_STATE__` 包含 `wbiImgKey` 与 `wbiSubKey`, 具体可用性与区别尚不明确
+
+2. 打乱重排实时口令获得 `mixin_key`
+
+ 把上一步获取到的 `sub_key` 拼接在 `img_key` 后面(下例记为 `raw_wbi_key`),遍历重排映射表 `MIXIN_KEY_ENC_TAB`,取出 `raw_wbi_key` 中对应位置的字符拼接得到新的字符串,截取前 32 位,即为 `mixin_key`。
+
+ 重排映射表 `MIXIN_KEY_ENC_TAB` 长为 64,内容如下:
+
+ ```rust
+ const MIXIN_KEY_ENC_TAB: [u8; 64] = [
+ 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49,
+ 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40,
+ 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11,
+ 36, 20, 34, 44, 52
+ ]
+ ```
+
+ 重排操作如下例:
+
+ ```rust
+ fn gen_mixin_key(raw_wbi_key: impl AsRef<[u8]>) -> String {
+ const MIXIN_KEY_ENC_TAB: [u8; 64] = [
+ 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, 33, 9, 42,
+ 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, 61, 26, 17, 0, 1, 60,
+ 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, 36, 20, 34, 44, 52,
+ ];
+ let raw_wbi_key = raw_wbi_key.as_ref();
+ let mut mixin_key = {
+ let binding = MIXIN_KEY_ENC_TAB
+ .iter()
+ // 此步操作即遍历 MIXIN_KEY_ENC_TAB,取出 raw_wbi_key 中对应位置的字符
+ .map(|n| raw_wbi_key[*n as usize])
+ // 并收集进数组内
+ .collect::>();
+ unsafe { String::from_utf8_unchecked(binding) }
+ };
+ let _ = mixin_key.split_off(32); // 截取前 32 位字符
+ mixin_key
+ }
+ ```
+
+ 如 `img_key` -> `7cd084941338484aae1ad9425b84077c`、`sub_key` -> `4932caff0ff746eab6f01bf08b70ac45` 经过上述操作后得到 `mixin_key` -> `ea1db124af3c7062474693fa704f4ff8`。
+
+3. 计算签名(即 `w_rid`)
+
+ 若下方内容为欲签名的**原始**请求参数(以 JavaScript Object 为例)
+
+ ```javascript
+ {
+ foo: '114',
+ bar: '514',
+ zab: 1919810
+ }
+ ```
+
+ `wts` 字段的值应为当前以秒为单位的 Unix 时间戳,如 `1702204169`
+
+ 复制一份参数列表,添加 `wts` 参数,即:
+
+ ```javascript
+ {
+ foo: '114',
+ bar: '514',
+ zab: 1919810,
+ wts: 1702204169
+ }
+ ```
+
+ 随后按键名升序排序后百分号编码 URL Query,拼接前面得到的 `mixin_key`,如 `bar=514&foo=114&wts=1702204169&zab=1919810ea1db124af3c7062474693fa704f4ff8`,计算其 MD5 即为 `w_rid`。
+
+ 需要注意的是:如果参数值含中文或特殊字符等,编码字符字母应当**大写** (部分库会错误编码为小写字母),空格应当编码为 `%20`(部分库按 `application/x-www-form-urlencoded` 约定编码为 `+`), 具体正确行为可参考 [encodeURIComponent 函数](https://tc39.es/ecma262/multipage/global-object.html#sec-encodeuricomponent-uricomponent)
+
+ 例如:
+
+ ```javascript
+ {
+ foo: 'one one four',
+ bar: '五一四',
+ baz: 1919810
+ }
+ ```
+
+ 应该被编码为 `bar=%E4%BA%94%E4%B8%80%E5%9B%9B&baz=1919810&foo=one%20one%20four`。
+
+4. 向原始请求参数中添加 `w_rid`、`wts` 字段
+
+ 将上一步得到的 `w_rid` 以及前面的 `wts` 追加到**原始**请求参数编码得到的 URL Query 后即可,目前看来无需对原始请求参数排序。
+
+ 如前例最终得到 `bar=514&foo=114&zab=1919810&w_rid=8f6f2b5b3d485fe1886cec6a0be8c5d4&wts=1702204169`。
+
+## Demo
+
+含 [Python](#python)、[JavaScript](#javascript)、[Golang](#golang)、[C#](#csharp)、[Java](#java)、[Kotlin](#kotlin)、[Swift](#swift)、[C++](#cplusplus)、[Rust](#rust)、[Haskell](#haskell) 语言编写的 Demo
+
+### Python
+
+需要`requests`依赖
+
+```python
+from functools import reduce
+from hashlib import md5
+import urllib.parse
+import time
+import requests
+
+mixinKeyEncTab = [
+ 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49,
+ 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40,
+ 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11,
+ 36, 20, 34, 44, 52
+]
+
+def getMixinKey(orig: str):
+ '对 imgKey 和 subKey 进行字符顺序打乱编码'
+ return reduce(lambda s, i: s + orig[i], mixinKeyEncTab, '')[:32]
+
+def encWbi(params: dict, img_key: str, sub_key: str):
+ '为请求参数进行 wbi 签名'
+ mixin_key = getMixinKey(img_key + sub_key)
+ curr_time = round(time.time())
+ params['wts'] = curr_time # 添加 wts 字段
+ params = dict(sorted(params.items())) # 按照 key 重排参数
+ # 过滤 value 中的 "!'()*" 字符
+ params = {
+ k : ''.join(filter(lambda chr: chr not in "!'()*", str(v)))
+ for k, v
+ in params.items()
+ }
+ query = urllib.parse.urlencode(params) # 序列化参数
+ wbi_sign = md5((query + mixin_key).encode()).hexdigest() # 计算 w_rid
+ params['w_rid'] = wbi_sign
+ return params
+
+def getWbiKeys() -> tuple[str, str]:
+ '获取最新的 img_key 和 sub_key'
+ headers = {
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
+ 'Referer': 'https://www.bilibili.com/'
+ }
+ resp = requests.get('https://api.bilibili.com/x/web-interface/nav', headers=headers)
+ resp.raise_for_status()
+ json_content = resp.json()
+ img_url: str = json_content['data']['wbi_img']['img_url']
+ sub_url: str = json_content['data']['wbi_img']['sub_url']
+ img_key = img_url.rsplit('/', 1)[1].split('.')[0]
+ sub_key = sub_url.rsplit('/', 1)[1].split('.')[0]
+ return img_key, sub_key
+
+img_key, sub_key = getWbiKeys()
+
+signed_params = encWbi(
+ params={
+ 'foo': '114',
+ 'bar': '514',
+ 'baz': 1919810
+ },
+ img_key=img_key,
+ sub_key=sub_key
+)
+query = urllib.parse.urlencode(signed_params)
+print(signed_params)
+print(query)
+```
+
+输出内容分别是进行 Wbi 签名的后参数的 key-Value 以及 url query 形式
+
+```
+{'bar': '514', 'baz': '1919810', 'foo': '114', 'wts': '1702204169', 'w_rid': 'd3cbd2a2316089117134038bf4caf442'}
+bar=514&baz=1919810&foo=114&wts=1702204169&w_rid=d3cbd2a2316089117134038bf4caf442
+```
+
+### JavaScript
+
+需要 `fetch`(浏览器、NodeJS等环境自带)、`md5` 依赖
+
+
+
+
+```javascript
+import md5 from 'md5'
+
+const mixinKeyEncTab = [
+ 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49,
+ 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40,
+ 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11,
+ 36, 20, 34, 44, 52
+]
+
+// 对 imgKey 和 subKey 进行字符顺序打乱编码
+const getMixinKey = (orig) => mixinKeyEncTab.map(n => orig[n]).join('').slice(0, 32)
+
+// 为请求参数进行 wbi 签名
+function encWbi(params, img_key, sub_key) {
+ const mixin_key = getMixinKey(img_key + sub_key),
+ curr_time = Math.round(Date.now() / 1000),
+ chr_filter = /[!'()*]/g
+
+ Object.assign(params, { wts: curr_time }) // 添加 wts 字段
+ // 按照 key 重排参数
+ const query = Object
+ .keys(params)
+ .sort()
+ .map(key => {
+ // 过滤 value 中的 "!'()*" 字符
+ const value = params[key].toString().replace(chr_filter, '')
+ return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`
+ })
+ .join('&')
+
+ const wbi_sign = md5(query + mixin_key) // 计算 w_rid
+
+ return query + '&w_rid=' + wbi_sign
+}
+
+// 获取最新的 img_key 和 sub_key
+async function getWbiKeys() {
+ const res = await fetch('https://api.bilibili.com/x/web-interface/nav', {
+ headers: {
+ // SESSDATA 字段
+ Cookie: 'SESSDATA=xxxxxx',
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
+ Referer: 'https://www.bilibili.com/'//对于直接浏览器调用可能不适用
+ }
+ })
+ const { data: { wbi_img: { img_url, sub_url } } } = await res.json()
+
+ return {
+ img_key: img_url.slice(
+ img_url.lastIndexOf('/') + 1,
+ img_url.lastIndexOf('.')
+ ),
+ sub_key: sub_url.slice(
+ sub_url.lastIndexOf('/') + 1,
+ sub_url.lastIndexOf('.')
+ )
+ }
+}
+
+async function main() {
+ const web_keys = await getWbiKeys()
+ const params = { foo: '114', bar: '514', baz: 1919810 },
+ img_key = web_keys.img_key,
+ sub_key = web_keys.sub_key
+ const query = encWbi(params, img_key, sub_key)
+ console.log(query)
+}
+
+main()
+```
+
+
+
+
+
+```typescript
+import md5 from 'md5'
+
+const mixinKeyEncTab = [
+ 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49,
+ 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40,
+ 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11,
+ 36, 20, 34, 44, 52
+]
+
+// 对 imgKey 和 subKey 进行字符顺序打乱编码
+const getMixinKey = (orig: string) =>
+ mixinKeyEncTab
+ .map((n) => orig[n])
+ .join("")
+ .slice(0, 32);
+
+// 为请求参数进行 wbi 签名
+function encWbi(
+ params: { [key: string]: string | number | object },
+ img_key: string,
+ sub_key: string
+) {
+ const mixin_key = getMixinKey(img_key + sub_key),
+ curr_time = Math.round(Date.now() / 1000),
+ chr_filter = /[!'()*]/g;
+
+ Object.assign(params, { wts: curr_time }); // 添加 wts 字段
+ // 按照 key 重排参数
+ const query = Object.keys(params)
+ .sort()
+ .map((key) => {
+ // 过滤 value 中的 "!'()*" 字符
+ const value = params[key].toString().replace(chr_filter, "");
+ return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
+ })
+ .join("&");
+
+ const wbi_sign = md5(query + mixin_key); // 计算 w_rid
+
+ return query + "&w_rid=" + wbi_sign;
+}
+// 获取最新的 img_key 和 sub_key
+async function getWbiKeys(SESSDATA: string) {
+ const res = await fetch('https://api.bilibili.com/x/web-interface/nav', {
+ headers: {
+ // SESSDATA 字段
+ Cookie: `SESSDATA=${SESSDATA}`,
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
+ Referer: 'https://www.bilibili.com/'//对于直接浏览器调用可能不适用
+ }
+ })
+ const {
+ data: {
+ wbi_img: { img_url, sub_url },
+ },
+ } = (await res.json()) as {
+ data: {
+ wbi_img: { img_url: string; sub_url: string };
+ };
+ };
+
+ return {
+ img_key: img_url.slice(
+ img_url.lastIndexOf('/') + 1,
+ img_url.lastIndexOf('.')
+ ),
+ sub_key: sub_url.slice(
+ sub_url.lastIndexOf('/') + 1,
+ sub_url.lastIndexOf('.')
+ )
+ }
+}
+
+async function main() {
+ const web_keys = await getWbiKeys("SESSDATA的值")
+ const params = { foo: '114', bar: '514', baz: 1919810 },
+ img_key = web_keys.img_key,
+ sub_key = web_keys.sub_key
+ const query = encWbi(params, img_key, sub_key)
+ console.log(query)
+}
+
+main()
+```
+
+
+
+
+输出内容为进行 Wbi 签名的后参数的 url query 形式
+
+```
+bar=514&baz=1919810&foo=114&wts=1684805578&w_rid=bb97e15f28edf445a0e4420d36f0157e
+```
+
+### Golang
+
+无第三方库
+
+```go
+package main
+
+import (
+ "bytes"
+ "crypto/md5"
+ "encoding/hex"
+ "encoding/json"
+ "fmt"
+ "io"
+ "net/http"
+ "net/url"
+ "strconv"
+ "strings"
+ "time"
+)
+
+func main() {
+ u, err := url.Parse("https://api.bilibili.com/x/space/wbi/acc/info?mid=1850091")
+ if err != nil {
+ panic(err)
+ }
+ fmt.Printf("orig: %s\n", u.String())
+ err = Sign(u)
+ if err != nil {
+ panic(err)
+ }
+ fmt.Printf("signed: %s\n", u.String())
+
+ // 获取 wbi 时未修改 header
+ // 但实际使用签名后的 url 时发现风控较为严重
+}
+
+// Sign 为链接签名
+func Sign(u *url.URL) error {
+ return wbiKeys.Sign(u)
+}
+
+// Update 无视过期时间更新
+func Update() error {
+ return wbiKeys.Update()
+}
+
+func Get() (wk WbiKeys, err error) {
+ if err = wk.update(false); err != nil {
+ return WbiKeys{}, err
+ }
+ return wbiKeys, nil
+}
+
+var wbiKeys WbiKeys
+
+type WbiKeys struct {
+ Img string
+ Sub string
+ Mixin string
+ lastUpdateTime time.Time
+}
+
+// Sign 为链接签名
+func (wk *WbiKeys) Sign(u *url.URL) (err error) {
+ if err = wk.update(false); err != nil {
+ return err
+ }
+
+ values := u.Query()
+
+ values = removeUnwantedChars(values, '!', '\'', '(', ')', '*') // 必要性存疑?
+
+ values.Set("wts", strconv.FormatInt(time.Now().Unix(), 10))
+
+ // [url.Values.Encode] 内会对参数排序,
+ // 且遍历 map 时本身就是无序的
+ hash := md5.Sum([]byte(values.Encode() + wk.Mixin)) // Calculate w_rid
+ values.Set("w_rid", hex.EncodeToString(hash[:]))
+ u.RawQuery = values.Encode()
+ return nil
+}
+
+// Update 无视过期时间更新
+func (wk *WbiKeys) Update() (err error) {
+ return wk.update(true)
+}
+
+// update 按需更新
+func (wk *WbiKeys) update(purge bool) error {
+ if !purge && time.Since(wk.lastUpdateTime) < time.Hour {
+ return nil
+ }
+
+ // 测试下来不用修改 header 也能过
+ resp, err := http.Get("https://api.bilibili.com/x/web-interface/nav")
+ if err != nil {
+ return err
+ }
+ defer resp.Body.Close()
+ body, err := io.ReadAll(resp.Body)
+ if err != nil {
+ return err
+ }
+
+ nav := Nav{}
+ err = json.Unmarshal(body, &nav)
+ if err != nil {
+ return err
+ }
+
+ if nav.Code != 0 && nav.Code != -101 { // -101 未登录时也会返回两个 key
+ return fmt.Errorf("unexpected code: %d, message: %s", nav.Code, nav.Message)
+ }
+ img := nav.Data.WbiImg.ImgUrl
+ sub := nav.Data.WbiImg.SubUrl
+ if img == "" || sub == "" {
+ return fmt.Errorf("empty image or sub url: %s", body)
+ }
+
+ // https://i0.hdslb.com/bfs/wbi/7cd084941338484aae1ad9425b84077c.png
+ imgParts := strings.Split(img, "/")
+ subParts := strings.Split(sub, "/")
+
+ // 7cd084941338484aae1ad9425b84077c.png
+ imgPng := imgParts[len(imgParts)-1]
+ subPng := subParts[len(subParts)-1]
+
+ // 7cd084941338484aae1ad9425b84077c
+ wbiKeys.Img = strings.TrimSuffix(imgPng, ".png")
+ wbiKeys.Sub = strings.TrimSuffix(subPng, ".png")
+
+ wbiKeys.mixin()
+ wbiKeys.lastUpdateTime = time.Now()
+ return nil
+}
+
+func (wk *WbiKeys) mixin() {
+ var mixin [32]byte
+ wbi := wk.Img + wk.Sub
+ for i := range mixin { // for i := 0; i < len(mixin); i++ {
+ mixin[i] = wbi[mixinKeyEncTab[i]]
+ }
+ wk.Mixin = string(mixin[:])
+}
+
+var mixinKeyEncTab = [...]int{
+ 46, 47, 18, 2, 53, 8, 23, 32,
+ 15, 50, 10, 31, 58, 3, 45, 35,
+ 27, 43, 5, 49, 33, 9, 42, 19,
+ 29, 28, 14, 39, 12, 38, 41, 13,
+ 37, 48, 7, 16, 24, 55, 40, 61,
+ 26, 17, 0, 1, 60, 51, 30, 4,
+ 22, 25, 54, 21, 56, 59, 6, 63,
+ 57, 62, 11, 36, 20, 34, 44, 52,
+}
+
+func removeUnwantedChars(v url.Values, chars ...byte) url.Values {
+ b := []byte(v.Encode())
+ for _, c := range chars {
+ b = bytes.ReplaceAll(b, []byte{c}, nil)
+ }
+ s, err := url.ParseQuery(string(b))
+ if err != nil {
+ panic(err)
+ }
+ return s
+}
+
+type Nav struct {
+ Code int `json:"code"`
+ Message string `json:"message"`
+ Ttl int `json:"ttl"`
+ Data struct {
+ WbiImg struct {
+ ImgUrl string `json:"img_url"`
+ SubUrl string `json:"sub_url"`
+ } `json:"wbi_img"`
+
+ // ......
+ } `json:"data"`
+}
+```
+
+### CSharp
+
+无需依赖外部库
+
+```cs
+using System.Security.Cryptography;
+using System.Text;
+using System.Text.Json.Nodes;
+
+class Program
+{
+ private static HttpClient _httpClient = new();
+
+ private static readonly int[] MixinKeyEncTab =
+ {
+ 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, 33, 9, 42, 19, 29, 28, 14, 39,
+ 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63,
+ 57, 62, 11, 36, 20, 34, 44, 52
+ };
+
+ //对 imgKey 和 subKey 进行字符顺序打乱编码
+ private static string GetMixinKey(string orig)
+ {
+ return MixinKeyEncTab.Aggregate("", (s, i) => s + orig[i])[..32];
+ }
+
+ private static Dictionary EncWbi(Dictionary parameters, string imgKey,
+ string subKey)
+ {
+ string mixinKey = GetMixinKey(imgKey + subKey);
+ string currTime = DateTimeOffset.Now.ToUnixTimeSeconds().ToString();
+ //添加 wts 字段
+ parameters["wts"] = currTime;
+ // 按照 key 重排参数
+ parameters = parameters.OrderBy(p => p.Key).ToDictionary(p => p.Key, p => p.Value);
+ //过滤 value 中的 "!'()*" 字符
+ parameters = parameters.ToDictionary(
+ kvp => kvp.Key,
+ kvp => new string(kvp.Value.Where(chr => !"!'()*".Contains(chr)).ToArray())
+ );
+ // 序列化参数
+ string query = new FormUrlEncodedContent(parameters).ReadAsStringAsync().Result;
+ //计算 w_rid
+ using MD5 md5 = MD5.Create();
+ byte[] hashBytes = md5.ComputeHash(Encoding.UTF8.GetBytes(query + mixinKey));
+ string wbiSign = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
+ parameters["w_rid"] = wbiSign;
+
+ return parameters;
+ }
+
+ // 获取最新的 img_key 和 sub_key
+ private static async Task<(string, string)> GetWbiKeys()
+ {
+ var httpClient = new HttpClient();
+ httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36");
+ httpClient.DefaultRequestHeaders.Referrer = new Uri("https://www.bilibili.com/");
+
+ HttpResponseMessage responseMessage = await httpClient.SendAsync(new HttpRequestMessage
+ {
+ Method = HttpMethod.Get,
+ RequestUri = new Uri("https://api.bilibili.com/x/web-interface/nav"),
+ });
+
+ JsonNode response = JsonNode.Parse(await responseMessage.Content.ReadAsStringAsync())!;
+
+ string imgUrl = (string)response["data"]!["wbi_img"]!["img_url"]!;
+ imgUrl = imgUrl.Split("/")[^1].Split(".")[0];
+
+ string subUrl = (string)response["data"]!["wbi_img"]!["sub_url"]!;
+ subUrl = subUrl.Split("/")[^1].Split(".")[0];
+ return (imgUrl, subUrl);
+ }
+
+
+ public static async Task Main()
+ {
+ var (imgKey, subKey) = await GetWbiKeys();
+
+ Dictionary signedParams = EncWbi(
+ parameters: new Dictionary
+ {
+ { "foo", "114" },
+ { "bar", "514" },
+ { "baz", "1919810" }
+ },
+ imgKey: imgKey,
+ subKey: subKey
+ );
+
+ string query = await new FormUrlEncodedContent(signedParams).ReadAsStringAsync();
+
+ Console.WriteLine(query);
+ }
+}
+```
+输出内容为进行 Wbi 签名的后参数的 url query 形式
+
+```
+bar=514&baz=1919810&foo=114&wts=1687541921&w_rid=26e82b1b9b3a11dbb1807a9228a40d3b
+```
+
+### Java
+
+```java
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+public class WbiTest {
+ private static final int[] mixinKeyEncTab = new int[]{
+ 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49,
+ 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40,
+ 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11,
+ 36, 20, 34, 44, 52
+ };
+
+ private static final char[] hexDigits = "0123456789abcdef".toCharArray();
+
+ public static String md5(String input) {
+ try {
+ MessageDigest md = MessageDigest.getInstance("MD5");
+ byte[] messageDigest = md.digest(input.getBytes(StandardCharsets.UTF_8));
+ char[] result = new char[messageDigest.length * 2];
+ for (int i = 0; i < messageDigest.length; i++) {
+ result[i * 2] = hexDigits[(messageDigest[i] >> 4) & 0xF];
+ result[i * 2 + 1] = hexDigits[messageDigest[i] & 0xF];
+ }
+ return new String(result);
+ } catch (NoSuchAlgorithmException e) {
+ return null;
+ }
+ }
+
+ public static String getMixinKey(String imgKey, String subKey) {
+ String s = imgKey + subKey;
+ StringBuilder key = new StringBuilder();
+ for (int i = 0; i < 32; i++)
+ key.append(s.charAt(mixinKeyEncTab[i]));
+ return key.toString();
+ }
+
+ public static String encodeURIComponent(Object o) {
+ return URLEncoder.encode(o.toString(), StandardCharsets.UTF_8).replace("+", "%20");
+ }
+
+ public static void main(String[] args) {
+ String imgKey = "653657f524a547ac981ded72ea172057";
+ String subKey = "6e4909c702f846728e64f6007736a338";
+ String mixinKey = getMixinKey(imgKey, subKey);
+ System.out.println(mixinKey); // 72136226c6a73669787ee4fd02a74c27
+
+ // 用TreeMap自动排序
+ TreeMap map = new TreeMap<>();
+ map.put("foo", "one one four");
+ map.put("bar", "五一四");
+ map.put("baz", 1919810);
+ map.put("wts", System.currentTimeMillis() / 1000);
+ String param = map.entrySet().stream()
+ .map(it -> String.format("%s=%s", it.getKey(), encodeURIComponent(it.getValue())))
+ .collect(Collectors.joining("&"));
+ String s = param + mixinKey;
+
+ String wbiSign = md5(s);
+ System.out.println(wbiSign);
+ String finalParam = param + "&w_rid=" + wbiSign;
+ System.out.println(finalParam);
+ }
+}
+```
+
+### Kotlin
+
+说明: 为了便于使用和缓存, 重新编写为实体类形式, 并拆分了多个文件. 使用官方的JSON序列化. (可以根据需要换成其他的)
+
+WbiParams.kt
+
+```kotlin
+import kotlinx.serialization.Serializable
+import kotlinx.serialization.json.JsonElement
+import kotlinx.serialization.json.JsonObject
+import kotlinx.serialization.json.jsonPrimitive
+
+private fun JsonElement?.get(): String {
+ check(this != null) { "No contents found" }
+ return this.jsonPrimitive.content.split('/').last().removeSuffix(".png")
+}
+
+private val mixinKeyEncTab = intArrayOf(
+ 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49,
+ 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40,
+ 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11,
+ 36, 20, 34, 44, 52
+)
+
+@Serializable
+data class WbiParams(
+ val imgKey: String,
+ val subKey: String,
+) {
+ // 此处整合了切分参数(直接传入{img_url:string, sub_url:string}即可), 不需要可以删掉
+ constructor(wbiImg: JsonObject) : this(wbiImg["img_url"].get(), wbiImg["sub_url"].get())
+
+ private val mixinKey: String
+ get() = (imgKey + subKey).let { s ->
+ buildString {
+ repeat(32) {
+ append(s[mixinKeyEncTab[it]])
+ }
+ }
+ }
+
+ // 创建对象(GET获取或者读缓存, 比如Redis)之后, 直接调用此函数处理
+ fun enc(params: Map): String {
+ val sorted = params.filterValues { it != null }.toSortedMap()
+ return buildString {
+ append(sorted.toQueryString())
+ val wts = System.currentTimeMillis() / 1000
+ sorted["wts"] = wts
+ append("&wts=")
+ append(wts)
+ append("&w_rid=")
+ append((sorted.toQueryString() + mixinKey).toMD5())
+ }
+ }
+}
+```
+
+Extensions.kt
+
+```kotlin
+import java.security.MessageDigest
+
+private val hexDigits = "0123456789abcdef".toCharArray()
+
+fun ByteArray.toHexString() = buildString(this.size shl 1) {
+ this@toHexString.forEach { byte ->
+ append(hexDigits[byte.toInt() ushr 4 and 15])
+ append(hexDigits[byte.toInt() and 15])
+ }
+}
+
+fun String.toMD5(): String {
+ val md = MessageDigest.getInstance("MD5")
+ val digest = md.digest(this.toByteArray())
+ return digest.toHexString()
+}
+
+fun Map.toQueryString() = this.filterValues { it != null }.entries.joinToString("&") { (k, v) ->
+ "${k.encodeURIComponent()}=${v!!.encodeURIComponent()}"
+}
+```
+
+获取和使用案例略
+
+### PHP
+
+来自[SocialSisterYi/bilibili-API-collect#813](https://github.com/SocialSisterYi/bilibili-API-collect/issues/813)
+
+```php
+getWbiKeys();
+ return $this->encWbi($query, $wbi_keys['img_key'], $wbi_keys['sub_key']);
+ }
+
+ private function getMixinKey($orig) {
+ $t = '';
+ foreach ($this->mixinKeyEncTab as $n) $t .= $orig[$n];
+ return substr($t, 0, 32);
+ }
+
+ private function encWbi($params, $img_key, $sub_key) {
+ $mixin_key = $this->getMixinKey($img_key . $sub_key);
+ $curr_time = time();
+ $chr_filter = "/[!'()*]/";
+
+ $query = [];
+ $params['wts'] = $curr_time;
+
+ ksort($params);
+
+ foreach ($params as $key => $value) {
+ $value = preg_replace($chr_filter, '', $value);
+ $query[] = urlencode($key) . '=' . urlencode($value);
+ }
+
+ $query = implode('&', $query);
+ $wbi_sign = md5($query . $mixin_key);
+
+ return $query . '&w_rid=' . $wbi_sign;
+ }
+
+ private function getWbiKeys() {
+ $resp = @json_decode(
+ $this->curl_get(
+ 'https://api.bilibili.com/x/web-interface/nav',
+ null,
+ 'https://www.bilibili.com/'
+ ), true
+ );
+
+ if (!$resp) throw new Exception('请求失败');
+
+ $img_url = $resp['data']['wbi_img']['img_url'];
+ $sub_url = $resp['data']['wbi_img']['sub_url'];
+
+ return [
+ 'img_key' => substr(basename($img_url), 0, strpos(basename($img_url), '.')),
+ 'sub_key' => substr(basename($sub_url), 0, strpos(basename($sub_url), '.'))
+ ];
+ }
+
+ private function curl_get($url, $cookies = null, $referer = 'https://www.bilibili.com/', $ua = null, $proxy = null, $header = []) {
+ $ch = curl_init();
+ $header[] = "Accept: */*";
+ $header[] = "Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7";
+ $header[] = "Connection: close";
+ $header[]="Referer:https://www.bilibili.com/";
+ $header[] = "Cache-Control: max-age=0";
+ curl_setopt_array($ch, [
+ CURLOPT_HTTPGET => 1,
+ CURLOPT_CUSTOMREQUEST => 'GET',
+ CURLOPT_RETURNTRANSFER => 1,
+ CURLOPT_HTTPHEADER => $header,
+ CURLOPT_ENCODING => '',
+ CURLOPT_URL => $url,
+ CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245.39',
+ CURLOPT_TIMEOUT => 15
+ ]);
+
+ if ($cookies) curl_setopt(
+ $ch,
+ CURLOPT_COOKIE,
+ $cookies
+ );
+
+ if ($referer) curl_setopt_array($ch, [
+ CURLOPT_AUTOREFERER => $referer,
+ CURLOPT_REFERER => $referer
+ ]);
+
+ $content = curl_exec($ch);
+ curl_close($ch);
+ return $content;
+ }
+}
+
+$c = new Bilibili();
+echo $c->reQuery(['foo' => '114', 'bar' => '514', 'baz' => 1919810]);
+// bar=514&baz=1919810&foo=114&wts=1700384803&w_rid=4614cb98d60a43e50c3a3033fe3d116b
+```
+
+### Rust
+
+需要 serde、serde_json、reqwest、tokio 以及 md5
+
+```rust
+use reqwest::header::USER_AGENT;
+use serde::Deserialize;
+use std::time::{SystemTime, UNIX_EPOCH};
+
+const MIXIN_KEY_ENC_TAB: [usize; 64] = [
+ 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, 33, 9, 42, 19, 29,
+ 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25,
+ 54, 21, 56, 59, 6, 63, 57, 62, 11, 36, 20, 34, 44, 52,
+];
+
+#[derive(Deserialize)]
+struct WbiImg {
+ img_url: String,
+ sub_url: String,
+}
+
+#[derive(Deserialize)]
+struct Data {
+ wbi_img: WbiImg,
+}
+
+#[derive(Deserialize)]
+struct ResWbi {
+ data: Data,
+}
+
+// 对 imgKey 和 subKey 进行字符顺序打乱编码
+fn get_mixin_key(orig: &[u8]) -> String {
+ MIXIN_KEY_ENC_TAB
+ .iter()
+ .take(32)
+ .map(|&i| orig[i] as char)
+ .collect::()
+}
+
+fn get_url_encoded(s: &str) -> String {
+ s.chars()
+ .filter_map(|c| match c.is_ascii_alphanumeric() || "-_.~".contains(c) {
+ true => Some(c.to_string()),
+ false => {
+ // 过滤 value 中的 "!'()*" 字符
+ if "!'()*".contains(c) {
+ return None;
+ }
+ let encoded = c
+ .encode_utf8(&mut [0; 4])
+ .bytes()
+ .fold("".to_string(), |acc, b| acc + &format!("%{:02X}", b));
+ Some(encoded)
+ }
+ })
+ .collect::()
+}
+
+// 为请求参数进行 wbi 签名
+fn encode_wbi(params: Vec<(&str, String)>, (img_key, sub_key): (String, String)) -> String {
+ let cur_time = match SystemTime::now().duration_since(UNIX_EPOCH) {
+ Ok(t) => t.as_secs(),
+ Err(_) => panic!("SystemTime before UNIX EPOCH!"),
+ };
+ _encode_wbi(params, (img_key, sub_key), cur_time)
+}
+
+fn _encode_wbi(
+ mut params: Vec<(&str, String)>,
+ (img_key, sub_key): (String, String),
+ timestamp: u64,
+) -> String {
+ let mixin_key = get_mixin_key((img_key + &sub_key).as_bytes());
+ // 添加当前时间戳
+ params.push(("wts", timestamp.to_string()));
+ // 重新排序
+ params.sort_by(|a, b| a.0.cmp(b.0));
+ // 拼接参数
+ let query = params
+ .iter()
+ .map(|(k, v)| format!("{}={}", get_url_encoded(k), get_url_encoded(v)))
+ .collect::>()
+ .join("&");
+ // 计算签名
+ let web_sign = format!("{:?}", md5::compute(query.clone() + &mixin_key));
+ // 返回最终的 query
+ query + &format!("&w_rid={}", web_sign)
+}
+
+async fn get_wbi_keys() -> Result<(String, String), reqwest::Error> {
+ let client = reqwest::Client::new();
+ let ResWbi { data:Data{wbi_img} } = client
+ .get("https://api.bilibili.com/x/web-interface/nav")
+ .header(USER_AGENT,"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36")
+ .header("Referer","https://www.bilibili.com/")
+ // SESSDATA=xxxxx
+ .header("Cookie", "SESSDATA=xxxxx")
+ .send()
+ .await?
+ .json::()
+ .await?;
+ Ok((
+ take_filename(wbi_img.img_url).unwrap(),
+ take_filename(wbi_img.sub_url).unwrap(),
+ ))
+}
+
+fn take_filename(url: String) -> Option {
+ url.rsplit_once('/')
+ .and_then(|(_, s)| s.rsplit_once('.'))
+ .map(|(s, _)| s.to_string())
+}
+
+#[tokio::main]
+async fn main() {
+ let keys = get_wbi_keys().await.unwrap();
+ let params = vec![
+ ("foo", String::from("114")),
+ ("bar", String::from("514")),
+ ("baz", String::from("1919810")),
+ ];
+ let query = encode_wbi(params, keys);
+ println!("{}", query);
+}
+
+// 取自文档描述的测试用例
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_get_filename() {
+ assert_eq!(
+ take_filename(
+ "https://i0.hdslb.com/bfs/wbi/7cd084941338484aae1ad9425b84077c.png".to_string()
+ ),
+ Some("7cd084941338484aae1ad9425b84077c".to_string())
+ );
+ }
+
+ #[test]
+ fn test_get_mixin_key() {
+ let concat_key =
+ "7cd084941338484aae1ad9425b84077c".to_string() + "4932caff0ff746eab6f01bf08b70ac45";
+ assert_eq!(
+ get_mixin_key(concat_key.as_bytes()),
+ "ea1db124af3c7062474693fa704f4ff8"
+ );
+ }
+
+ #[test]
+ fn test_encode_wbi() {
+ let params = vec![
+ ("foo", String::from("114")),
+ ("bar", String::from("514")),
+ ("zab", String::from("1919810")),
+ ];
+ assert_eq!(
+ _encode_wbi(
+ params,
+ (
+ "7cd084941338484aae1ad9425b84077c".to_string(),
+ "4932caff0ff746eab6f01bf08b70ac45".to_string()
+ ),
+ 1702204169
+ ),
+ "bar=514&foo=114&wts=1702204169&zab=1919810&w_rid=8f6f2b5b3d485fe1886cec6a0be8c5d4"
+ .to_string()
+ )
+ }
+}
+```
+
+### Swift
+
+需要 [Alamofire](https://github.com/Alamofire/Alamofire) 和 [SwiftyJSON](https://github.com/SwiftyJSON/SwiftyJSON) 库
+
+```swift
+import Alamofire
+import CommonCrypto
+import Foundation
+import SwiftyJSON
+
+func biliWbiSign(param: String, completion: @escaping (String?) -> Void) {
+ func getMixinKey(orig: String) -> String {
+ return String(mixinKeyEncTab.map { orig[orig.index(orig.startIndex, offsetBy: $0)] }.prefix(32))
+ }
+
+ func encWbi(params: [String: Any], imgKey: String, subKey: String) -> [String: Any] {
+ var params = params
+ let mixinKey = getMixinKey(orig: imgKey + subKey)
+ let currTime = round(Date().timeIntervalSince1970)
+ params["wts"] = currTime
+ params = params.sorted { $0.key < $1.key }.reduce(into: [:]) { $0[$1.key] = $1.value }
+ params = params.mapValues { value in
+ if let doubleValue = value as? Double, doubleValue.truncatingRemainder(dividingBy: 1) == 0 {
+ return String(Int(doubleValue)).filter { !"!'()*".contains($0) }
+ }
+ return String(describing: value).filter { !"!'()*".contains($0) }
+ }
+ let query = params.map { "\($0.key)=\($0.value)" }.joined(separator: "&")
+ let wbiSign = calculateMD5(string: query + mixinKey)
+ params["w_rid"] = wbiSign
+ return params
+ }
+
+ func getWbiKeys(completion: @escaping (Result<(imgKey: String, subKey: String), Error>) -> Void) {
+ let headers: HTTPHeaders = [
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
+ "Referer": "https://www.bilibili.com/"
+ ]
+
+ AF.request("https://api.bilibili.com/x/web-interface/nav", headers: headers).responseJSON { response in
+ switch response.result {
+ case .success(let value):
+ let json = JSON(value)
+ let imgURL = json["data"]["wbi_img"]["img_url"].string ?? ""
+ let subURL = json["data"]["wbi_img"]["sub_url"].string ?? ""
+ let imgKey = imgURL.components(separatedBy: "/").last?.components(separatedBy: ".").first ?? ""
+ let subKey = subURL.components(separatedBy: "/").last?.components(separatedBy: ".").first ?? ""
+ completion(.success((imgKey, subKey)))
+ case .failure(let error):
+ completion(.failure(error))
+ }
+ }
+ }
+
+ func calculateMD5(string: String) -> String {
+ let data = Data(string.utf8)
+ var digest = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH))
+ _ = data.withUnsafeBytes {
+ CC_MD5($0.baseAddress, CC_LONG(data.count), &digest)
+ }
+ return digest.map { String(format: "%02hhx", $0) }.joined()
+ }
+
+ let mixinKeyEncTab = [
+ 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49,
+ 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40,
+ 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11,
+ 36, 20, 34, 44, 52
+ ]
+
+ getWbiKeys { result in
+ switch result {
+ case .success(let keys):
+ let spdParam = param.components(separatedBy: "&")
+ var spdDicParam = [String: String]()
+ for pair in spdParam {
+ let components = pair.components(separatedBy: "=")
+ if components.count == 2 {
+ spdDicParam[components[0]] = components[1]
+ }
+ }
+
+ let signedParams = encWbi(params: spdDicParam, imgKey: keys.imgKey, subKey: keys.subKey)
+ let query = signedParams.map { "\($0.key)=\($0.value)" }.joined(separator: "&")
+ completion(query)
+ case .failure(let error):
+ print("Error getting keys: \(error)")
+ completion(nil)
+ }
+ }
+}
+
+// 使用示例
+biliWbiSign(param: "bar=514&foo=114&zab=1919810") {
+ signedQuery in
+ if let signedQuery = signedQuery {
+ print("签名后的参数: \(signedQuery)")
+ } else {
+ print("签名失败")
+ }
+}
+
+RunLoop.main.run()//程序类型为命令行程序时需要添加这行代码
+
+```
+
+```text
+签名后的参数: bar=514&wts=1741082093&foo=114&zab=1919810&w_rid=04775bb3debbb45bab86a93a1c08d12a
+```
+
+
+### CPlusPlus
+
+需要 c++ 23 标准库,[cpr](https://github.com/libcpr/cpr)、[cryptopp](https://github.com/weidai11/cryptopp)、[nlohmann/json](https://github.com/nlohmann/json) 等依赖
+
+```c++
+#include // std::array
+#include // std::locale
+#include // std::println
+
+/// thrid party libraries
+#include
+#include
+#include
+#include
+
+/*
+ * 注意,假定不会发生错误!
+ */
+class Wbi {
+ constexpr static std::array MIXIN_KEY_ENC_TAB_ = {
+ 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35,
+ 27, 43, 5, 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13,
+ 37, 48, 7, 16, 24, 55, 40, 61, 26, 17, 0, 1, 60, 51, 30, 4,
+ 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, 36, 20, 34, 44, 52
+ };
+
+ /* 获取 md5 hex(lower) */
+ static std::string Get_md5_hex(const std::string &Input_str) {
+ CryptoPP::Weak1::MD5 hash;
+ std::string md5_hex;
+
+ CryptoPP::StringSource ss(Input_str, true,
+ new CryptoPP::HashFilter(hash,
+ new CryptoPP::HexEncoder(
+ new CryptoPP::StringSink(md5_hex)
+ )
+ )
+ );
+
+ std::ranges::for_each(md5_hex, [](char &x) { x = std::tolower(x); });
+ return md5_hex;
+ }
+
+public:
+ /* 将 json 转换为 url 编码字符串 */
+ static std::string Json_to_url_encode_str(const nlohmann::json &Json) {
+ std::string encode_str;
+ for (const auto &[key, value]: Json.items()) {
+ encode_str.append(key).append("=").append(cpr::util::urlEncode(value.is_string() ? value.get() : to_string(value))).append("&");
+ }
+
+ // remove the last '&'
+ encode_str.resize(encode_str.size() - 1, '\0');
+ return encode_str;
+ }
+
+ /* 获取 wbi key */
+ static std::pair Get_wbi_key() {
+ const auto url = cpr::Url {"https://api.bilibili.com/x/web-interface/nav"};
+ const auto cookie = cpr::Cookies {
+ {"SESSDATA", "xxxxxxxxxxxx"},
+ };
+ const auto header = cpr::Header {
+ {"User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"},
+ {"Referer", "https://www.bilibili.com/"},
+ };
+ const auto response = cpr::Get(url, cookie, header);
+
+ nlohmann::json json = nlohmann::json::parse(response.text);
+
+ const std::string img_url = json["data"]["wbi_img"]["img_url"];
+ const std::string sub_url = json["data"]["wbi_img"]["sub_url"];
+
+ std::string img_key = img_url.substr(img_url.find("wbi/") + 4, img_url.find(".png") - img_url.find("wbi/") - 4);
+ std::string sub_key = sub_url.substr(sub_url.find("wbi/") + 4, sub_url.find(".png") - sub_url.find("wbi/") - 4);
+ return {img_key, sub_key};
+ }
+
+ /* 获取 mixin key */
+ static std::string Get_mixin_key(const std::string &Img_key, const std::string &Sub_key) {
+ std::string raw_wbi_key_str = Img_key + Sub_key;
+ std::string result;
+
+ std::ranges::for_each(MIXIN_KEY_ENC_TAB_, [&result, &raw_wbi_key_str](const uint8_t x) {
+ result.push_back(raw_wbi_key_str.at(x));
+ });
+
+ return result.substr(0, 32);
+ }
+
+ /* 计算签名(w_rid) */
+ static std::string Calc_sign(nlohmann::json &Params, const std::string &Mixin_key) {
+ Params["wts"] = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count();
+
+ const std::string encode_str = Json_to_url_encode_str(Params).append(Mixin_key);
+ return Get_md5_hex(encode_str);
+ }
+};
+
+
+int main() {
+ nlohmann::json Params;
+ // qn=32&fnver=0&fnval=4048&fourk=1&avid=1755630705&cid=1574294582
+ Params["qn"] = 32;
+ Params["fnver"] = 0;
+ Params["fnval"] = 4048;
+ Params["fourk"] = 1;
+ Params["avid"] = 1755630705;
+ Params["cid"] = 1574294582;
+
+ auto [img_key, sub_key] = Wbi::Get_wbi_key();
+ const auto mixin_key = Wbi::Get_mixin_key(img_key, sub_key);
+ const auto w_rid = Wbi::Calc_sign(Params, mixin_key);
+ std::println("{}", Wbi::Json_to_url_encode_str(Params) + "&w_rid=" + w_rid);
+}
+```
+
+```text
+avid=1755630705&cid=1574294582&fnval=4048&fnver=0&fourk=1&qn=32&wts=1717922933&w_rid=43571b838a1611fa121189083cfc1784
+```
+
+### Haskell
+
+无第三方依赖: `base`, `Cabal-syntax`, `bytestring`, `containers`
+注: 此处使用自写的 URI 编码模块, 实际可用别的第三方库替代
+
+`Main.hs`:
+```hs
+module Main (wbi, main) where
+
+import Data.ByteString.Char8 (pack)
+import qualified Data.Map.Strict as Map
+import Distribution.Utils.MD5 (md5, showMD5)
+import URIEncoder (encodeURIComponent)
+import Data.Time.Clock.System (getSystemTime, systemSeconds)
+
+mixinKeyEncTab :: [Int]
+mixinKeyEncTab = [
+ 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49,
+ 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40,
+ 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11,
+ 36, 20, 34, 44, 52
+ ]
+
+getMixinKey :: String -> String -> String
+getMixinKey imgKey subKey =
+ let s = imgKey ++ subKey
+ in map (\i -> s !! (mixinKeyEncTab !! i)) [0..31]
+
+join :: [String] -> String -> String
+join arr ins = concatMap (++ ins) (init arr) ++ last arr
+
+wbi :: String -> String -> Integer -> Map.Map String String -> String
+wbi imgKey subKey wts params =
+ let orig = join (map (\(k, v) -> encodeURIComponent k ++ "=" ++ encodeURIComponent v) (Map.toList $ Map.insert "wts" (show wts) params)) "&"
+ in orig ++ "&w_rid=" ++ showMD5 (md5 $ pack $ orig ++ getMixinKey imgKey subKey)
+
+main :: IO ()
+main = do -- hard encode for test
+ let params1 = Map.fromList [("aid", "2")]
+ params2 = Map.fromList [("foo", "114")
+ ,("bar", "514")
+ ,("hello", "世 界")
+ ]
+ imgKey = "7cd084941338484aae1ad9425b84077c"
+ subKey = "4932caff0ff746eab6f01bf08b70ac45"
+ wts1 <- getSystemTime
+ putStrLn $ wbi imgKey subKey (toInteger $ systemSeconds wts1) params1
+ wts2 <- getSystemTime
+ putStrLn $ wbi imgKey subKey (toInteger $ systemSeconds wts2) params2
+```
+
+`URIEncoder.hs`:
+```hs
+module URIEncoder (encodeURIComponent) where
+
+import Data.Char (ord, chr, intToDigit)
+import Data.Bits (shiftL, shiftR, (.&.))
+import Data.List (isInfixOf)
+
+-- ES 19.2.6.4 encodeURIComponent ( uriComponent )
+encodeURIComponent :: String -> String
+encodeURIComponent input = case encode input "" of
+ Right result -> result
+ Left err -> error err
+
+-- ES 19.2.6.5 Encode ( string, extraUnescaped )
+encode :: String -> String -> Either String String
+encode string extraUnescaped = loop 0 string
+ where
+ alwaysUnescaped = ['A'..'Z'] ++ ['a'..'z'] ++ ['0'..'9'] ++ "-.!~*'()"
+ unescapedSet = alwaysUnescaped ++ extraUnescaped
+
+ loop k str
+ | k >= length str = Right []
+ | otherwise = case codePointAt str k of
+ (Nothing, _) -> Left "Unpaired surrogate"
+ (Just (cp, _), newK) ->
+ if [str !! k] `isInfixOf` unescapedSet
+ then (str !! k :) <$> loop (k + 1) str
+ else do
+ bytes <- utf8Encode cp
+ let escaped = concatMap percentEncode bytes
+ rest <- loop newK str
+ Right (escaped ++ rest)
+
+codePointAt :: String -> Int -> (Maybe (Int, Int), Int)
+codePointAt s k
+ | k >= length s = (Nothing, k)
+ | otherwise =
+ let c1 = ord (s !! k)
+ in if 0xD800 <= c1 && c1 <= 0xDBFF && k+1 < length s
+ then let c2 = ord (s !! (k+1))
+ in if 0xDC00 <= c2 && c2 <= 0xDFFF
+ then ( Just (0x10000 + ((c1 - 0xD800) `shiftL` 10) + (c2 - 0xDC00), 2)
+ , k + 2 )
+ else (Just (c1, 1), k + 1)
+ else (Just (c1, 1), k + 1)
+
+utf8Encode :: Int -> Either String [Int]
+utf8Encode cp
+ | cp < 0 = Left "Invalid code point"
+ | cp <= 0x007F = Right [cp]
+ | cp <= 0x07FF = Right
+ [ 0xC0 + (cp `shiftR` 6)
+ , 0x80 + (cp .&. 0x3F) ]
+ | cp <= 0xFFFF = Right
+ [ 0xE0 + (cp `shiftR` 12)
+ , 0x80 + ((cp `shiftR` 6) .&. 0x3F)
+ , 0x80 + (cp .&. 0x3F) ]
+ | cp <= 0x10FFFF = Right
+ [ 0xF0 + (cp `shiftR` 18)
+ , 0x80 + ((cp `shiftR` 12) .&. 0x3F)
+ , 0x80 + ((cp `shiftR` 6) .&. 0x3F)
+ , 0x80 + (cp .&. 0x3F) ]
+ | otherwise = Left "Code point out of range"
+
+percentEncode :: Int -> String
+percentEncode byte = '%' : toHex byte
+ where
+ toHex n = [hexDigit (n `div` 16), hexDigit (n `mod` 16)]
+ hexDigit x
+ | x < 10 = intToDigit x
+ | otherwise = chr (x - 10 + ord 'A')
+```
+
+输出:
+```text
+aid=2&wts=1744823207&w_rid=a3cd246bd42c066932752b24694eaf0d
+bar=514&foo=114&hello=%E4%B8%96%20%E7%95%8C&wts=1744823207&w_rid=93acf59d85f74453e40cea00056c3daf
+```
diff --git a/docs/misc/time_stamp.md b/docs/misc/time_stamp.md
new file mode 100644
index 0000000..58e0709
--- /dev/null
+++ b/docs/misc/time_stamp.md
@@ -0,0 +1,127 @@
+# 获取当前时间戳
+
+## 获取当前时间戳
+
+> https://api.bilibili.com/x/report/click/now
+> https://api.bilibili.com/x/click-interface/click/now
+
+*请求方式:GET*
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------ | ---- |
+| now | num | 当前的时间戳 | |
+
+**示例:**
+
+```shell
+curl 'https://api.bilibili.com/x/report/click/now'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "now": 1592666471
+ }
+}
+```
+
+
+
+## 获取适用于 RTC 的时间戳
+
+> https://api.live.bilibili.com/xlive/open-interface/v1/rtc/getTimestamp
+
+*请求方法: GET*
+
+
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | - | - |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | - | - |
+| timestamp | num | 服务器端UTC时间戳 | |
+| microtime | num | 服务器端UTC时间戳 (毫秒) | |
+
+**示例:**
+
+```shell
+curl 'https://api.live.bilibili.com/xlive/open-interface/v1/rtc/getTimestamp'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "timestamp": 1723899823,
+ "microtime": 1723899823683
+ }
+}
+```
+
+
+
+## 获取服务器端UTC时间
+
+> https://interface.bilibili.com/serverdate.js
+
+*请求方式:GET*
+
+**js回复:**
+
+```js
+window.serverdate = Date.UTC(YYYY, M, D, h, m, s);
+```
+
+**示例:**
+
+```shell
+curl 'https://interface.bilibili.com/serverdate.js'
+```
+
+
+查看响应示例:
+
+```js
+window.serverdate = Date.UTC(2021, 4, 16, 17, 31, 8);
+```
+
+
diff --git a/newbie_exam/action.md b/docs/newbie_exam/action.md
similarity index 93%
rename from newbie_exam/action.md
rename to docs/newbie_exam/action.md
index 04fb863..d75967a 100644
--- a/newbie_exam/action.md
+++ b/docs/newbie_exam/action.md
@@ -1,21 +1,10 @@
# 操作
-- [提交答题](#提交答题)
- - [提交基础题](#提交基础题)
- - [提交附加题](#提交附加题)
- - [提交自选题](#提交自选题)
-- [获取验证码](#获取验证码)
-- [提交验证码](#提交验证码)
-- [提交自选题分类](#提交自选题分类)
-- [提前交卷](#提前交卷)
-
----
-
## 提交答题
### 提交基础题
-> http://api.bilibili.com/x/answer/v4/base/check
+> https://api.bilibili.com/x/answer/v4/base/check
*请求方式:POST*
@@ -51,7 +40,7 @@
提交题目id为`104`的题,选项hash为`cb4c8cc9424fc771f7c1598e74de498f`
```shell
-curl 'http://api.bilibili.com/x/answer/v4/base/check' \
+curl 'https://api.bilibili.com/x/answer/v4/base/check' \
--data-urlencode 'question_id=104' \
--data-urlencode 'ans_hash=cb4c8cc9424fc771f7c1598e74de498f' \
--data-urlencode 'csrf=xxxx' \
@@ -76,7 +65,7 @@ curl 'http://api.bilibili.com/x/answer/v4/base/check' \
### 提交附加题
-> http://api.bilibili.com/x/answer/v4/base/check
+> https://api.bilibili.com/x/answer/v4/base/check
*请求方式:POST*
@@ -112,7 +101,7 @@ curl 'http://api.bilibili.com/x/answer/v4/base/check' \
提交题目id为`104`的题,选项hash为`cb4c8cc9424fc771f7c1598e74de498f`
```shell
-curl 'http://api.bilibili.com/x/answer/v4/base/check' \
+curl 'https://api.bilibili.com/x/answer/v4/base/check' \
--data-urlencode 'question_id=104' \
--data-urlencode 'ans_hash=cb4c8cc9424fc771f7c1598e74de498f' \
--data-urlencode 'csrf=xxxx' \
@@ -137,7 +126,7 @@ curl 'http://api.bilibili.com/x/answer/v4/base/check' \
### 提交自选题
-> http://api.bilibili.com/x/answer/v4/pro/check
+> https://api.bilibili.com/x/answer/v4/pro/check
*请求方式:POST*
@@ -173,7 +162,7 @@ curl 'http://api.bilibili.com/x/answer/v4/base/check' \
提交题目id为`2935`的题,选项hash为`ffd55cbe0624f466bee2ea3eb576a4d0`
```shell
-curl -G 'http://api.bilibili.com/x/answer/v4/pro/check' \
+curl -G 'https://api.bilibili.com/x/answer/v4/pro/check' \
--data-urlencode 'question_id=2935' \
--data-urlencode 'ans_hash=ffd55cbe0624f466bee2ea3eb576a4d0' \
--data-urlencode 'csrf=xxxx' \
@@ -198,7 +187,7 @@ curl -G 'http://api.bilibili.com/x/answer/v4/pro/check' \
## 获取验证码
-> http://api.bilibili.com/x/answer/v4/captcha
+> https://api.bilibili.com/x/answer/v4/captcha
*请求方式:GET*
@@ -228,7 +217,7 @@ curl -G 'http://api.bilibili.com/x/answer/v4/pro/check' \
**示例:**
```shell
-curl 'http://api.bilibili.com/x/answer/v4/captcha' \
+curl 'https://api.bilibili.com/x/answer/v4/captcha' \
-b 'SESSDATA=xxxx'
```
@@ -254,7 +243,7 @@ curl 'http://api.bilibili.com/x/answer/v4/captcha' \
## 提交验证码
-> http://api.bilibili.com/x/answer/v4/captcha/check
+> https://api.bilibili.com/x/answer/v4/captcha/check
*请求方式:POST*
@@ -292,7 +281,7 @@ curl 'http://api.bilibili.com/x/answer/v4/captcha' \
**示例:**
```shell
-curl 'http://api.bilibili.com/x/answer/v4/captcha/check' \
+curl 'https://api.bilibili.com/x/answer/v4/captcha/check' \
--data-urlencode 'types=' \
--data-urlencode 'type=geetest' \
--data-urlencode 'bilibili_token=' \
@@ -319,7 +308,7 @@ curl 'http://api.bilibili.com/x/answer/v4/captcha/check' \
## 提交自选题分类
-> http://api.bilibili.com/x/answer/v4/pro/type/check
+> https://api.bilibili.com/x/answer/v4/pro/type/check
*请求方式:POST*
@@ -347,7 +336,7 @@ curl 'http://api.bilibili.com/x/answer/v4/captcha/check' \
选择`游戏` `影视` `科教/知识` `动画/动漫`分类
```shell
-curl 'http://api.bilibili.com/x/answer/v4/pro/type/check' \
+curl 'https://api.bilibili.com/x/answer/v4/pro/type/check' \
--data-urlencode 'types=1,2,3,4' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxxx'
@@ -368,7 +357,7 @@ curl 'http://api.bilibili.com/x/answer/v4/pro/type/check' \
## 提前交卷
-> http://api.bilibili.com/x/answer/v4/submit
+> https://api.bilibili.com/x/answer/v4/submit
*请求方式:POST*
@@ -418,7 +407,7 @@ curl 'http://api.bilibili.com/x/answer/v4/pro/type/check' \
**示例:**
```shell
-curl 'http://api.bilibili.com/x/answer/v4/submit' \
+curl 'https://api.bilibili.com/x/answer/v4/submit' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxxx'
```
diff --git a/newbie_exam/fetch.md b/docs/newbie_exam/fetch.md
similarity index 95%
rename from newbie_exam/fetch.md
rename to docs/newbie_exam/fetch.md
index 91b58f6..f5fbd74 100644
--- a/newbie_exam/fetch.md
+++ b/docs/newbie_exam/fetch.md
@@ -1,14 +1,8 @@
# 拉取题目
-- [拉取基础题](#拉取基础题)
-- [拉取附加题](#拉取附加题)
-- [拉取自选题](#拉取自选题)
-
----
-
## 拉取基础题
-> http://api.bilibili.com/x/answer/v4/base
+> https://api.bilibili.com/x/answer/v4/base
*请求方式:GET*
@@ -67,7 +61,7 @@
**示例:**
```shell
-curl -G 'http://api.bilibili.com/x/answer/v4/base' \
+curl -G 'https://api.bilibili.com/x/answer/v4/base' \
-b 'SESSDATA=xxx'
```
@@ -112,7 +106,7 @@ curl -G 'http://api.bilibili.com/x/answer/v4/base' \
## 拉取附加题
-> http://api.bilibili.com/x/answer/v4/extra
+> https://api.bilibili.com/x/answer/v4/extra
*请求方式:GET*
@@ -136,7 +130,7 @@ curl -G 'http://api.bilibili.com/x/answer/v4/base' \
**示例:**
```shell
-curl -G 'http://api.bilibili.com/x/answer/v4/extra' \
+curl -G 'https://api.bilibili.com/x/answer/v4/extra' \
-b 'SESSDATA=xxx'
```
@@ -181,7 +175,7 @@ curl -G 'http://api.bilibili.com/x/answer/v4/extra' \
## 拉取自选题
-> http://api.bilibili.com/x/answer/v4/pro
+> https://api.bilibili.com/x/answer/v4/pro
*请求方式:GET*
@@ -205,7 +199,7 @@ curl -G 'http://api.bilibili.com/x/answer/v4/extra' \
**示例:**
```shell
-curl -G 'http://api.bilibili.com/x/answer/v4/pro' \
+curl -G 'https://api.bilibili.com/x/answer/v4/pro' \
-b 'SESSDATA=xxx'
```
diff --git a/newbie_exam/info.md b/docs/newbie_exam/info.md
similarity index 97%
rename from newbie_exam/info.md
rename to docs/newbie_exam/info.md
index 10f2c38..b200aa4 100644
--- a/newbie_exam/info.md
+++ b/docs/newbie_exam/info.md
@@ -1,14 +1,8 @@
# 查询信息
-- [查询答题状态](#查询答题状态)
-- [查询自选题分类](#查询自选题分类)
-- [查询答题结果](#查询答题结果)
-
----
-
## 查询答题状态
-> http://api.bilibili.com/x/answer/v4/status
+> https://api.bilibili.com/x/answer/v4/status
*请求方式:GET*
@@ -48,7 +42,7 @@
**示例:**
```shell
-curl -G 'http://api.bilibili.com/x/answer/v4/status' \
+curl -G 'https://api.bilibili.com/x/answer/v4/status' \
-b 'SESSDATA=xxx'
```
@@ -85,7 +79,7 @@ curl -G 'http://api.bilibili.com/x/answer/v4/status' \
## 查询自选题分类
-> http://api.bilibili.com/x/answer/v4/pro/type
+> https://api.bilibili.com/x/answer/v4/pro/type
*请求方式:GET*
@@ -136,7 +130,7 @@ curl -G 'http://api.bilibili.com/x/answer/v4/status' \
**示例:**
```shell
-curl -G 'http://api.bilibili.com/x/answer/v4/pro/type' \
+curl -G 'https://api.bilibili.com/x/answer/v4/pro/type' \
-b 'SESSDATA=xxx'
```
@@ -403,7 +397,7 @@ curl -G 'http://api.bilibili.com/x/answer/v4/pro/type' \
## 查询答题结果
-> http://api.bilibili.com/x/answer/v4/result
+> https://api.bilibili.com/x/answer/v4/result
*请求方式:GET*
@@ -455,7 +449,7 @@ curl -G 'http://api.bilibili.com/x/answer/v4/pro/type' \
**示例:**
```shell
-curl -G 'http://api.bilibili.com/x/answer/v4/result' \
+curl -G 'https://api.bilibili.com/x/answer/v4/result' \
--data-urlencode 'hid=1615088061307609' \
-b 'SESSDATA=xxx'
```
diff --git a/note/action.md b/docs/note/action.md
similarity index 95%
rename from note/action.md
rename to docs/note/action.md
index f8bdb84..15c40e9 100644
--- a/note/action.md
+++ b/docs/note/action.md
@@ -1,13 +1,8 @@
# 笔记操作
-- [保存视频笔记](#保存视频笔记)
-- [删除视频笔记](#删除视频笔记)
-
----
-
## 保存视频笔记
-> http://api.bilibili.com/x/note/add
+> https://api.bilibili.com/x/note/add
*请求方式:POST*
@@ -54,7 +49,7 @@
保存内容为加粗的STRONG的笔记`3809605586518023`于`av970322090`
```shell
-curl 'http://api.bilibili.com/x/note/add' \
+curl 'https://api.bilibili.com/x/note/add' \
--data-urlencode 'oid=970322090' \
--data-urlencode 'oid_type=0' \
--data-urlencode 'note_id=3809605586518023'
@@ -86,7 +81,7 @@ curl 'http://api.bilibili.com/x/note/add' \
## 删除视频笔记
-> http://api.bilibili.com/x/note/del
+> https://api.bilibili.com/x/note/del
*请求方式:POST*
@@ -115,7 +110,7 @@ curl 'http://api.bilibili.com/x/note/add' \
删除稿件`av457253380`下的笔记`4075968478576647`
```shell
-curl 'http://api.bilibili.com/x/note/del' \
+curl 'https://api.bilibili.com/x/note/del' \
--data-urlencode 'oid=457253380' \
--data-urlencode 'note_id=4075968478576647' \
--data-urlencode 'csrf=xxx'
@@ -124,6 +119,7 @@ curl 'http://api.bilibili.com/x/note/del' \
查看响应示例:
+
```json
{
"code": 0,
diff --git a/note/info.md b/docs/note/info.md
similarity index 97%
rename from note/info.md
rename to docs/note/info.md
index 962db9d..5793ee3 100644
--- a/note/info.md
+++ b/docs/note/info.md
@@ -1,14 +1,8 @@
# 笔记详细信息
-- [查询该稿件是否禁止笔记](#查询该稿件是否禁止笔记)
-- [查询私有笔记内容](#查询私有笔记内容)
-- [查询公开笔记内容](#查询公开笔记内容)
-
----
-
## 查询该稿件是否禁止笔记
-> http://api.bilibili.com/x/note/is_forbid
+> https://api.bilibili.com/x/note/is_forbid
*请求方式:GET*
@@ -40,12 +34,13 @@
查询视频稿件`av338677252`是否禁止笔记
```shell
-curl 'http://api.bilibili.com/x/note/info' \
+curl 'https://api.bilibili.com/x/note/info' \
--data-urlencode 'aid=338677252'
```
查看响应示例:
+
```json
{
"code": 0,
@@ -61,7 +56,7 @@ curl 'http://api.bilibili.com/x/note/info' \
## 查询私有笔记内容
-> http://api.bilibili.com/x/note/info
+> https://api.bilibili.com/x/note/info
*请求方式:GET*
@@ -136,7 +131,7 @@ curl 'http://api.bilibili.com/x/note/info' \
查询视频`av338677252`中笔记`24508729145690112`的内容
```shell
-curl 'http://api.bilibili.com/x/note/info' \
+curl 'https://api.bilibili.com/x/note/info' \
--data-urlencode 'oid=338677252' \
--data-urlencode 'oid_type=0' \
--data-urlencode 'note_id=24508729145690112' \
@@ -178,7 +173,7 @@ curl 'http://api.bilibili.com/x/note/info' \
## 查询公开笔记内容
-> http://api.bilibili.com/x/note/publish/info
+> https://api.bilibili.com/x/note/publish/info
*请求方式:GET*
@@ -242,7 +237,7 @@ curl 'http://api.bilibili.com/x/note/info' \
查看公开笔记`cv15160286`的信息
```shell
-curl 'http://api.bilibili.com/x/note/publish/info' \
+curl 'https://api.bilibili.com/x/note/publish/info' \
--data-urlencode 'cvid=15160286'
```
@@ -311,4 +306,4 @@ curl 'http://api.bilibili.com/x/note/publish/info' \
}
```
-
\ No newline at end of file
+
diff --git a/note/list.md b/docs/note/list.md
similarity index 97%
rename from note/list.md
rename to docs/note/list.md
index a42a666..d0d3851 100644
--- a/note/list.md
+++ b/docs/note/list.md
@@ -1,15 +1,8 @@
# 笔记列表
-- [查询稿件私有笔记](#查询稿件私有笔记)
-- [查询用户私有笔记](#查询用户私有笔记)
-- [查询稿件公开笔记](#查询稿件公开笔记)
-- [查询用户公开笔记](#查询用户公开笔记)
-
----
-
## 查询稿件私有笔记
-> http://api.bilibili.com/x/note/list/archive
+> https://api.bilibili.com/x/note/list/archive
*请求方式:GET*
@@ -53,7 +46,7 @@
查询视频`av970322090`的笔记id
```shell
-curl 'http://api.bilibili.com/x/note/list/archive' \
+curl 'https://api.bilibili.com/x/note/list/archive' \
--data-urlencode 'oid=970322090' \
--data-urlencode 'oid_type=0' \
-b 'SESSDATA=xxx'
@@ -79,7 +72,7 @@ curl 'http://api.bilibili.com/x/note/list/archive' \
## 查询用户私有笔记
-> http://api.bilibili.com/x/note/list
+> https://api.bilibili.com/x/note/list
*请求方式:GET*
@@ -159,7 +152,7 @@ curl 'http://api.bilibili.com/x/note/list/archive' \
**示例:**
```shell
-curl 'http://api.bilibili.com/x/note/list' \
+curl 'https://api.bilibili.com/x/note/list' \
--data-urlencode 'ps=10' \
--data-urlencode 'pn=1'
-b 'SESSDATA=xxx'
@@ -211,7 +204,7 @@ curl 'http://api.bilibili.com/x/note/list' \
## 查询稿件公开笔记
-> http://api.bilibili.com/x/note/publish/list/archive
+> https://api.bilibili.com/x/note/publish/list/archive
*请求方式:GET*
@@ -282,7 +275,7 @@ curl 'http://api.bilibili.com/x/note/list' \
查询视频`av338677252`的公开笔记列表
```shell
-curl 'http://api.bilibili.com/x/note/publish/list/archive' \
+curl 'https://api.bilibili.com/x/note/publish/list/archive' \
--data-urlencode 'oid=338677252' \
--data-urlencode 'oid_type=0' \
--data-urlencode 'ps=10' \
@@ -581,7 +574,7 @@ curl 'http://api.bilibili.com/x/note/publish/list/archive' \
## 查询用户公开笔记
-> http://api.bilibili.com/x/note/publish/list/user
+> https://api.bilibili.com/x/note/publish/list/user
*请求方式:GET*
@@ -632,7 +625,7 @@ curl 'http://api.bilibili.com/x/note/publish/list/archive' \
**示例:**
```shell
-curl 'http://api.bilibili.com/x/note/publish/list/user' \
+curl 'https://api.bilibili.com/x/note/publish/list/user' \
--data-urlencode 'ps=10' \
--data-urlencode 'pn=1'
-b 'SESSDATA=xxx'
diff --git a/note/readme.md b/docs/note/readme.md
similarity index 100%
rename from note/readme.md
rename to docs/note/readme.md
diff --git a/docs/search/hot.md b/docs/search/hot.md
new file mode 100644
index 0000000..6c7cdb9
--- /dev/null
+++ b/docs/search/hot.md
@@ -0,0 +1,693 @@
+# 默认搜索&热搜
+
+## 获取默认搜索内容(web端)
+
+> https://api.bilibili.com/x/web-interface/wbi/search/default
+
+> ~~https://api.bilibili.com/x/web-interface/search/default~~ (旧链接)
+
+*请求方式:GET*
+
+鉴权方式:[Wbi 签名](../misc/sign/wbi.md)
+
+默认搜索为搜索框中默认填充内容,用于官方推荐内容,若不输入点击搜索按钮跳转为`url`中的链接
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | --------------- | -------------- |
+| seid | str | 搜索seid | |
+| id | num | 默认搜索id | |
+| type | num | 0 | |
+| show_name | str | 显示文字 | |
+| name | str | 空 | |
+| goto_type | num | 跳转类型 | 1:视频 |
+| goto_value | str | 搜索目标id | 视频:稿件avid |
+| url | str | 搜索目标跳转url | |
+
+**示例:**
+
+```shell
+curl 'https://api.bilibili.com/x/web-interface/search/default'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "seid": "17607543598496143098",
+ "id": 3296036255232726331,
+ "type": 0,
+ "show_name": "歪果仁在中国做模特能赚多少钱?",
+ "name": "",
+ "goto_type": 1,
+ "goto_value": "243920322",
+ "url": "https://www.bilibili.com/video/BV1Tv411q7gx"
+ }
+}
+```
+
+
+
+## 获取热搜列表
+
+> https://api.bilibili.com/x/web-interface/wbi/search/square
+> ~~https://api.bilibili.com/x/web-interface/search/square~~
+
+*请求方式: GET*
+
+**URL参数:**
+
+|参数名|类型|内容|必要性|备注|
+|-|-|-|-|-|
+|limit|num|结果限制|必要|范围 [1, 50]|
+|platform|str|平台标识|不必要|web: web 端|
+
+**JSON回复:**
+
+根对象:
+
+|字段|类型|内容|备注|
+|-|-|-|-|
+|code|num|返回值|0: 成功 -400: 请求错误|
+|message|str|错误信息|默认为空|
+|ttl|num|1||
+|data|obj|数据本体||
+
+`data`对象:
+
+|字段|类型|内容|备注|
+|-|-|-|-|
+|trending|obj|热搜榜单|套了个娃|
+
+`data`中的`trending`对象:
+
+|字段|类型|内容|备注|
+|-|-|-|-|
+|title|str|标题||
+|trackid|str|跟踪 ID?||
+|list|array|热搜列表||
+|top_list|array|空||
+
+`trending`中的`list`数组:
+
+|项|类型|内容|备注|
+|-|-|-|-|
+|0|obj|热搜 1||
+|1|obj|热搜 2||
+|……|obj|……||
+|n|obj|热搜 (n+1)||
+
+`list`数组中的对象:
+
+|字段|类型|内容|备注|
+|-|-|-|-|
+|keyword|str|关键词||
+|show_name|str|显示文字||
+|icon|str|图标 URL||
+|uri|str|空||
+|goto|str|空||
+
+**示例:**
+
+获取热搜列表, 数量限制 4
+
+```shell
+curl -G --url 'https://api.bilibili.com/x/web-interface/search/square' \
+--url-query 'limit=4'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "trending": {
+ "title": "bilibili热搜",
+ "trackid": "8079760748892487175",
+ "list": [
+ {
+ "keyword": "马克龙祝贺中国世界前两名",
+ "show_name": "马克龙祝贺中国世界前两名",
+ "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221213/eaf2dd702d7cc14d8d9511190245d057/lrx9rnKo24.png",
+ "uri": "",
+ "goto": ""
+ },
+ {
+ "keyword": "小孩电竞世界杯夺冠",
+ "show_name": "小孩电竞世界杯夺冠",
+ "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221213/eaf2dd702d7cc14d8d9511190245d057/lrx9rnKo24.png",
+ "uri": "",
+ "goto": ""
+ },
+ {
+ "keyword": "孙颖莎说我全勤下班了",
+ "show_name": "孙颖莎说我全勤下班了",
+ "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221118/eaf2dd702d7cc14d8d9511190245d057/UF7B1wVKT2.png",
+ "uri": "",
+ "goto": ""
+ },
+ {
+ "keyword": "7月广东新冠新增一万余例",
+ "show_name": "7月广东新冠新增一万余例",
+ "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221213/eaf2dd702d7cc14d8d9511190245d057/lrx9rnKo24.png",
+ "uri": "",
+ "goto": ""
+ }
+ ],
+ "top_list": []
+ }
+ }
+}
+```
+
+
+
+## 获取热搜列表(web端)
+
+> https://s.search.bilibili.com/main/hotword
+
+*请求方式:GET*
+
+榜单每隔固定时间统计一次,请求后返回搜索前10的关键词
+
+带有转义
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ----- | ------------ | ------------- |
+| exp_str | str | ??? | |
+| code | num | 返回值 | 0:成功 |
+| cost | obj | 详细搜索用时 | 大概是吧? |
+| seid | str | 搜索seid | |
+| timestamp | num | 榜单统计时间 | 时间戳 |
+| message | str | 错误信息 | 默认为success |
+| list | array | 热搜列表 | |
+
+`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ------------ |
+| 0 | obj | 榜单第1名 | |
+| n | obj | 榜单第(n+1)名 | 按照名次顺序 |
+| 10 | obj | 榜单第10名 | 最后一项 |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | -------- | ------- |
+| status | str | 空 | |
+| hot_id | num | 热词id | 大概是吧? |
+| keyword | str | 关键词 | |
+| resource_id| num | 资源id | |
+| goto_type | num | 0 | |
+| res | array| null | |
+| show_name | str | 完整关键词| |
+| pos | num | 名次 | 1-10 |
+| word_type | num | 条目属性 | 4: 新 5: 热 6: [雾,咒,小丑(愚人节)] 具体看icon 7: 直播中 8: 默认(无标签) 9: 梗 11: 话题 12: 独家 |
+| id | num | 名次 | 1-10 |
+| goto_value | str | 空 | |
+| live_id | array| null | |
+| name_type | str | 空 | |
+| icon | str | 图标url | |
+
+**示例:**
+
+```shell
+curl 'https://s.search.bilibili.com/main/hotword'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "exp_str": "8104#8200#8300#8401#8500#5502#6699",
+ "code": 0,
+ "cost": {
+ "reas_request": "0.001895",
+ "params_check": "0.000127",
+ "reas_response_format": "0.000098",
+ "deserialize_response": "0.000080",
+ "reas_request_format": "0.000076",
+ "total": "0.002479",
+ "main_handler": "0.002252"
+ },
+ "seid": "9318821020548476185",
+ "timestamp": 1596034742,
+ "message": "success",
+ "list": [{
+ "status": "",
+ "hot_id": 11003,
+ "keyword": "流浪地球2刘德华",
+ "resource_id": 0,
+ "goto_type": 0,
+ "res": [
+
+ ],
+ "show_name": "流浪地球2刘德华造型",
+ "pos": 1,
+ "word_type": 8,
+ "id": 1,
+ "goto_value": "",
+ "live_id": [
+
+ ],
+ "name_type": "",
+ "icon": "http://i0.hdslb.com/bfs/feed-admin/e9e7a2d8497d4063421b685e72680bf1cfb99a0d.png"
+ },
+ {
+ "status": "",
+ "hot_id": 11012,
+ "keyword": "QQ飞车手游飞跃黄河",
+ "resource_id": 0,
+ "goto_type": 0,
+ "res": [
+
+ ],
+ "show_name": "QQ飞车手游飞跃黄河",
+ "pos": 2,
+ "word_type": 8,
+ "id": 2,
+ "goto_value": "",
+ "live_id": [
+
+ ],
+ "name_type": "",
+ "icon": "http://i0.hdslb.com/bfs/feed-admin/4d579fb61f9655316582db193118bba3a721eec0.png"
+ },
+ {
+ "status": "",
+ "hot_id": 10996,
+ "keyword": "西工大遭网络攻击最新调查",
+ "resource_id": 0,
+ "goto_type": 0,
+ "res": [
+
+ ],
+ "show_name": "西工大遭网络攻击最新调查",
+ "pos": 3,
+ "word_type": 8,
+ "id": 3,
+ "goto_value": "",
+ "live_id": [
+
+ ],
+ "name_type": "",
+ "icon": "http://i0.hdslb.com/bfs/feed-admin/e9e7a2d8497d4063421b685e72680bf1cfb99a0d.png"
+ },
+ {
+ "status": "",
+ "hot_id": 11004,
+ "keyword": "EDG 起诉",
+ "resource_id": 0,
+ "goto_type": 0,
+ "res": [
+
+ ],
+ "show_name": "EDGJieJie已起诉多家企业",
+ "pos": 4,
+ "word_type": 8,
+ "id": 4,
+ "goto_value": "",
+ "live_id": [
+
+ ],
+ "name_type": "",
+ "icon": "http://i0.hdslb.com/bfs/feed-admin/4d579fb61f9655316582db193118bba3a721eec0.png"
+ },
+ {
+ "status": "",
+ "hot_id": 10992,
+ "keyword": "隐入尘烟",
+ "resource_id": 0,
+ "goto_type": 0,
+ "res": [
+
+ ],
+ "show_name": "隐入尘烟全平台下架",
+ "pos": 5,
+ "word_type": 8,
+ "id": 5,
+ "goto_value": "",
+ "live_id": [
+
+ ],
+ "name_type": "",
+ "icon": "http://i0.hdslb.com/bfs/feed-admin/e9e7a2d8497d4063421b685e72680bf1cfb99a0d.png"
+ },
+ {
+ "status": "",
+ "hot_id": 10987,
+ "keyword": "原神半年内最良心封神池",
+ "resource_id": 0,
+ "goto_type": 0,
+ "res": [
+
+ ],
+ "show_name": "原神半年内最良心封神池",
+ "pos": 6,
+ "word_type": 8,
+ "id": 6,
+ "goto_value": "",
+ "live_id": [
+
+ ],
+ "name_type": "",
+ "icon": ""
+ },
+ {
+ "status": "",
+ "hot_id": 10988,
+ "keyword": "高校回应设国内首个元宇宙院系",
+ "resource_id": 0,
+ "goto_type": 0,
+ "res": [
+
+ ],
+ "show_name": "高校回应设国内首个元宇宙院系",
+ "pos": 7,
+ "word_type": 8,
+ "id": 7,
+ "goto_value": "",
+ "live_id": [
+
+ ],
+ "name_type": "",
+ "icon": ""
+ },
+ {
+ "status": "",
+ "hot_id": 10994,
+ "keyword": "美宇宙飞船成功撞击小行星",
+ "resource_id": 0,
+ "goto_type": 0,
+ "res": [
+
+ ],
+ "show_name": "美宇宙飞船成功撞击小行星",
+ "pos": 8,
+ "word_type": 8,
+ "id": 8,
+ "goto_value": "",
+ "live_id": [
+
+ ],
+ "name_type": "",
+ "icon": ""
+ },
+ {
+ "status": "",
+ "hot_id": 10991,
+ "keyword": "你薅的羊毛可能已违法",
+ "resource_id": 0,
+ "goto_type": 0,
+ "res": [
+
+ ],
+ "show_name": "你薅的羊毛可能已违法",
+ "pos": 9,
+ "word_type": 8,
+ "id": 9,
+ "goto_value": "",
+ "live_id": [
+
+ ],
+ "name_type": "",
+ "icon": ""
+ },
+ {
+ "status": "",
+ "hot_id": 11013,
+ "keyword": "辛普森一家",
+ "resource_id": 0,
+ "goto_type": 0,
+ "res": [
+
+ ],
+ "show_name": "辛普森一家",
+ "pos": 10,
+ "word_type": 8,
+ "id": 10,
+ "goto_value": "",
+ "live_id": [
+
+ ],
+ "name_type": "",
+ "icon": "http://i0.hdslb.com/bfs/feed-admin/4d579fb61f9655316582db193118bba3a721eec0.png"
+ }
+ ]
+}
+```
+
+
+
+## 获取热搜列表(手机端)
+
+> https://app.bilibili.com/x/v2/search/trending/ranking
+
+*请求方式:GET*
+
+榜单每隔固定时间统计一次
+
+带有转义
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------- | ---- | ---------------- | ------ | ---- |
+| limit | num | 热搜数量 | 非必要 | 留空为20, 最大为100 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ----- | ------------ | ------------- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 返回值 | 默认为1 |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ------------ |
+| trackid | num | | 不知用途 |
+| list | array | 热搜列表 | |
+
+`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ------------ |
+| 0 | obj | 榜单第1名 | |
+| n | obj | 榜单第(n+1)名 | 按照名次顺序 |
+| 20/limit | obj | 榜单第20名 | 最后一项 |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | -------- | ------- |
+| position | num | 名次 | 1-20/limit |
+| keyword | str | 关键词 | |
+| show_name | str | 完整关键词| |
+| word_type | num | 条目属性 | 同 web 端 |
+| icon | str | 图标url | |
+| hot_id | num | 热词id | 大概是吧? |
+
+**示例:**
+
+```shell
+curl 'https://app.bilibili.com/x/v2/search/trending/ranking'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "trackid": "2578006123492681222",
+ "list": [{
+ "position": 1,
+ "keyword": "列车延误乘务员哽咽安抚乘客",
+ "show_name": "列车延误乘务员哽咽安抚乘客",
+ "word_type": 5,
+ "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221213/eaf2dd702d7cc14d8d9511190245d057/lrx9rnKo24.png",
+ "hot_id": 107814,
+ "is_commercial": "0"
+ }, {
+ "position": 2,
+ "keyword": "黑神话悟空首次线下试玩",
+ "show_name": "黑神话悟空首次线下试玩",
+ "word_type": 5,
+ "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221213/eaf2dd702d7cc14d8d9511190245d057/lrx9rnKo24.png",
+ "hot_id": 107781,
+ "is_commercial": "0"
+ }, {
+ "position": 3,
+ "keyword": "22万人打出9.9分的动画",
+ "show_name": "22万人打出9.9分的动画",
+ "word_type": 6,
+ "icon": "https://i0.hdslb.com/bfs/legacy/463fa23613670218608e68247a137dd071c0e9c8.png",
+ "hot_id": 107818,
+ "is_commercial": "0"
+ }, {
+ "position": 4,
+ "keyword": "冰冻近五万年线虫被复活",
+ "show_name": "冰冻近五万年线虫被复活",
+ "word_type": 5,
+ "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221213/eaf2dd702d7cc14d8d9511190245d057/lrx9rnKo24.png",
+ "hot_id": 107774,
+ "is_commercial": "0"
+ }, {
+ "position": 5,
+ "keyword": "LNG前任和现任的较量",
+ "show_name": "LNG前任和现任的较量",
+ "word_type": 4,
+ "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221118/eaf2dd702d7cc14d8d9511190245d057/UF7B1wVKT2.png",
+ "hot_id": 107853,
+ "is_commercial": "0"
+ }, {
+ "position": 6,
+ "keyword": "LOL手游剑姬女警新皮",
+ "show_name": "LOL手游剑姬女警新皮",
+ "word_type": 8,
+ "hot_id": 107841,
+ "is_commercial": "0"
+ }, {
+ "position": 7,
+ "keyword": "抽奖中金条却因过号被取消",
+ "show_name": "抽奖中金条却因过号被取消",
+ "word_type": 8,
+ "hot_id": 107817,
+ "is_commercial": "0"
+ }, {
+ "position": 8,
+ "keyword": "雪王到长城开蜜雪冰城",
+ "show_name": "雪王到长城开蜜雪冰城",
+ "word_type": 4,
+ "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221118/eaf2dd702d7cc14d8d9511190245d057/UF7B1wVKT2.png",
+ "hot_id": 107849,
+ "is_commercial": "0"
+ }, {
+ "position": 9,
+ "keyword": "堡垒之夜联动终结者",
+ "show_name": "堡垒之夜联动终结者",
+ "word_type": 8,
+ "hot_id": 107846,
+ "is_commercial": "0"
+ }, {
+ "position": 10,
+ "keyword": "王者新英雄海诺动画",
+ "show_name": "王者新英雄海诺动画",
+ "word_type": 4,
+ "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221118/eaf2dd702d7cc14d8d9511190245d057/UF7B1wVKT2.png",
+ "hot_id": 107870,
+ "is_commercial": "0"
+ }, {
+ "position": 11,
+ "keyword": "周星驰功夫10万字拆解",
+ "show_name": "周星驰功夫10万字拆解",
+ "word_type": 4,
+ "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221118/eaf2dd702d7cc14d8d9511190245d057/UF7B1wVKT2.png",
+ "hot_id": 107848,
+ "is_commercial": "0"
+ }, {
+ "position": 12,
+ "keyword": "张杰铁粉彭奶奶去世",
+ "show_name": "张杰铁粉彭奶奶去世",
+ "word_type": 4,
+ "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221118/eaf2dd702d7cc14d8d9511190245d057/UF7B1wVKT2.png",
+ "hot_id": 107840,
+ "is_commercial": "0"
+ }, {
+ "position": 13,
+ "keyword": "李玟二姐回应礼服争议",
+ "show_name": "李玟二姐回应礼服争议",
+ "word_type": 8,
+ "hot_id": 107833,
+ "is_commercial": "0"
+ }, {
+ "position": 14,
+ "keyword": "洪水中飘来冰箱市民取走饮料",
+ "show_name": "洪水中飘来冰箱市民取走饮料",
+ "word_type": 8,
+ "hot_id": 107802,
+ "is_commercial": "0"
+ }, {
+ "position": 15,
+ "keyword": "LOL斗魂觉醒佛耶戈语音",
+ "show_name": "LOL斗魂觉醒佛耶戈语音",
+ "word_type": 8,
+ "hot_id": 107790,
+ "is_commercial": "0"
+ }, {
+ "position": 16,
+ "keyword": "全面落实带薪休假制度",
+ "show_name": "全面落实带薪休假制度",
+ "word_type": 4,
+ "icon": "http://i0.hdslb.com/bfs/activity-plat/static/20221118/eaf2dd702d7cc14d8d9511190245d057/UF7B1wVKT2.png",
+ "hot_id": 107839,
+ "is_commercial": "0"
+ }, {
+ "position": 17,
+ "keyword": "花少北 把病娇治好了",
+ "show_name": "花少北 把病娇治好了",
+ "word_type": 8,
+ "hot_id": 107782,
+ "is_commercial": "0"
+ }, {
+ "position": 18,
+ "keyword": "2.28米高的村超娃",
+ "show_name": "2.28米高的村超娃",
+ "word_type": 8,
+ "hot_id": 107805,
+ "is_commercial": "0"
+ }, {
+ "position": 19,
+ "keyword": "当在动漫中不小心撞到",
+ "show_name": "当在动漫中不小心撞到",
+ "word_type": 8,
+ "hot_id": 107832,
+ "is_commercial": "0"
+ }, {
+ "position": 20,
+ "keyword": "台风卡努路径趋向日本",
+ "show_name": "台风卡努路径趋向日本",
+ "word_type": 8,
+ "hot_id": 107800,
+ "is_commercial": "0"
+ }],
+ "exp_str": "8000#5508#6604#7703",
+ "hotword_egg_info": "0"
+ }
+}
+```
+
+
diff --git a/search/search_request.md b/docs/search/search_request.md
similarity index 98%
rename from search/search_request.md
rename to docs/search/search_request.md
index d65a4c6..038c8f7 100644
--- a/search/search_request.md
+++ b/docs/search/search_request.md
@@ -1,17 +1,16 @@
# 搜索
-- [综合搜索(web端)](#综合搜索(web端))
-- [分类搜索(web端)](#分类搜索(web端))
-
----
+> **B站于2022年8月24日更新了搜索api,增加了一大堆Cookies的校验,如果Cookies不足会返回-412搜索被拦截。如果没有cookies的话,请在搜索之前先GET一遍 https://bilibili.com 以获取cookies**
## 综合搜索(web端)
-> http://api.bilibili.com/x/web-interface/search/all/v2
+> https://api.bilibili.com/x/web-interface/wbi/search/all/v2
+
+> ~~https://api.bilibili.com/x/web-interface/search/all/v2~~ (旧链接)
*方式:GET*
-认证方式:Cookie(SESSDATA)
+鉴权方式:[Wbi 签名](../misc/sign/wbi.md), Cookie 中含有 [`buvid3`](../misc/buvid3_4.md) 字段
返回和关键字相关的20条信息
@@ -29,7 +28,7 @@
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
+| code | num | 返回值 | 0:成功 -400:请求错误 -412:请求被拦截 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
@@ -40,7 +39,7 @@
| ---------------- | ----- | ---------------- | ---------------- |
| seid | str | 搜索id | |
| page | num | 页数 | 固定为1 |
-| pagesize | num | 每页条数 | 固定为20 |
+| page_size | num | 每页条数 | 固定为20 |
| numResults | num | 总条数 | 最大值为1000 |
| numPages | num | 分页数 | 最大值为50 |
| suggest_keyword | str | 空 | **作用尚不明确** |
@@ -177,7 +176,7 @@
使用综合搜索进行搜索关键字`洛天依`
```shell
-curl -G 'http://api.bilibili.com/x/web-interface/search/all/v2' \
+curl -G 'https://api.bilibili.com/x/web-interface/search/all/v2' \
--data-urlencode 'keyword=洛天依' \
-b 'SESSDATA=xxx'
```
@@ -578,15 +577,15 @@ curl -G 'http://api.bilibili.com/x/web-interface/search/all/v2' \
-
-
## 分类搜索(web端)
-> http://api.bilibili.com/x/web-interface/search/type
+> https://api.bilibili.com/x/web-interface/wbi/search/type
+
+> ~~https://api.bilibili.com/x/web-interface/search/type~~ (旧链接)
*请求方式:GET*
-认证方式:Cookie(SESSDATA)
+鉴权方式:[Wbi 签名](../misc/sign/wbi.md), Cookie 中含有 [`buvid3`](../misc/buvid3_4.md) 字段, Referer 在 `.bilibili.com` 下, User-Agent 不含敏感子串
根据关键词进行搜索,返回结果每页20项
@@ -610,7 +609,7 @@ curl -G 'http://api.bilibili.com/x/web-interface/search/all/v2' \
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
+| code | num | 返回值 | 0: 成功 -400: 请求错误 -412: 请求被拦截 -1200: 被降级过滤的请求(搜索目标类型不存在) |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
@@ -703,7 +702,7 @@ curl -G 'http://api.bilibili.com/x/web-interface/search/all/v2' \
按照关键词` 少年 `搜索视频,默认排序,全部时长,全部分区,第1页
```shell
-curl -G 'http://api.bilibili.com/x/web-interface/search/type' \
+curl -G 'https://api.bilibili.com/x/web-interface/search/type' \
--data-urlencode 'search_type=video' \
--data-urlencode 'keyword=少年' \
--data-urlencode 'order=totalrank' \
diff --git a/search/search_response.md b/docs/search/search_response.md
similarity index 98%
rename from search/search_response.md
rename to docs/search/search_response.md
index ed064d2..fb97747 100644
--- a/search/search_response.md
+++ b/docs/search/search_response.md
@@ -2,19 +2,6 @@
本页为搜索结果数组`result`中的对象的说明
----
-
-- [对象类型1-结果为视频](#对象类型1-结果为视频)
-- [对象类型2-结果为番剧&影视](#对象类型2-结果为番剧&影视)
-- [对象类型3-结果为直播间](#对象类型3-结果为直播间)
-- [对象类型4-结果为主播](#对象类型4-结果为主播)
-- [对象类型5-结果为专栏](#对象类型5-结果为专栏)
-- [对象类型6-结果为话题](#对象类型6-结果为话题)
-- [对象类型7-结果为用户](#对象类型7-结果为用户)
-- [对象类型8-结果为相簿](#对象类型8-结果为相簿)
-
----
-
## 对象类型1-结果为视频
| 字段 | 类型 | 内容 | 备注 |
diff --git a/docs/search/suggest.md b/docs/search/suggest.md
new file mode 100644
index 0000000..276b0d0
--- /dev/null
+++ b/docs/search/suggest.md
@@ -0,0 +1,175 @@
+# 搜索建议
+
+## 获取搜索建议关键词(web端)
+
+> https://s.search.bilibili.com/main/suggest
+
+*请求方式:GET*
+
+搜索建议最多提供10个候选关键词
+
+搜索建议内容可为任意语言(中 英 日等....),中文拼音支持全拼联想词
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --------------- | ---- | ---------------------- | ------ | ------------------------ |
+| term | str | 需要获得建议的输入内容 | 必要 | |
+| main_ver | str | v1 | 非必要 | 默认为 `v1` |
+| highlight | str | 任意, 无明显作用 | 非必要 | 默认为空 |
+| func | str | 函数? | 非必要 | 默认为 `suggest` |
+| suggest_type | str | 建议类型? | 非必要 | 默认为 `accurate` |
+| sub_type | str | 子类型? | 非必要 | 默认为 `tag` |
+| userid | num | 本用户 mid | 非必要 | 可能用于个性化推荐 |
+| bangumi_acc_num | num | 番剧累积数? | 非必要 | 默认为 `1` |
+| special_acc_num | num | 特殊累积数? | 非必要 | 默认为 `1` |
+| topic_acc_num | num | 话题累积数? | 非必要 | 默认为 `1` |
+| upuser_acc_num | num | UP主累积数? | 非必要 | 默认为 `1` |
+| tag_num | num | Tag 数? | 非必要 | 默认为 `10` |
+| special_num | num | 特殊推荐数? | 非必要 | 默认为 `10` |
+| bangumi_num | num | 番剧推荐数? | 非必要 | 默认为 `10` |
+| upuser_num | num | UP主推荐数? | 非必要 | 默认为 `3` |
+| rnd | num | 一个随机浮点数 | 非必要 | 由 `Math.random()` 生成? |
+| buvid | str | 同 Cookie 中 buvid3 | 非必要 | |
+| spmid | str | 333.1007 | 非必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ------------ | ------------ |
+| exp_str | str | 实验字符串? | 作用尚不明确 |
+| code | num | 返回值 | 0:成功 |
+| result | obj | 搜索建议结果 | |
+| stoken | str | ??? | 作用尚不明确 |
+
+`result`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ----- | -------- | ---- |
+| tag | array | 套了个娃 | |
+
+`result`中的`tag`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------------- | ---------------------- |
+| 0 | obj | 第1建议关键词 | |
+| n | obj | 第(n+1)建议关键词 | 按照相关程度与热度顺序 |
+| 9 | obj | 第10建议关键词 | 最后一项 |
+
+`tag`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | ---------- | -------------------------------------------------- |
+| value | str | 关键词内容 | |
+| ref | num | 0 | 作用尚不明确 |
+| name | str | 显示内容 | 带有 `` 的 XML 标签 |
+| spid | num | 5 | 作用尚不明确 |
+| type | str | 空 | |
+
+**示例:**
+
+获取关于 `洛天依` 的搜索建议
+
+```shell
+curl -G 'https://s.search.bilibili.com/main/suggest' \
+--data-urlencode 'term=洛天依'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "exp_str": "106301_106700",
+ "code": 0,
+ "result": {
+ "tag": [
+ {
+ "value": "洛天依",
+ "term": "洛天依",
+ "ref": 0,
+ "name": "洛天依 ",
+ "spid": 5,
+ "type": ""
+ },
+ {
+ "value": "洛天依十二周年",
+ "term": "洛天依十二周年",
+ "ref": 0,
+ "name": "洛天依 十二周年",
+ "spid": 5,
+ "type": ""
+ },
+ {
+ "value": "洛天依演唱会",
+ "term": "洛天依演唱会",
+ "ref": 0,
+ "name": "洛天依 演唱会",
+ "spid": 5,
+ "type": ""
+ },
+ {
+ "value": "洛天依手办",
+ "term": "洛天依手办",
+ "ref": 0,
+ "name": "洛天依 手办",
+ "spid": 5,
+ "type": ""
+ },
+ {
+ "value": "洛天依歌曲",
+ "term": "洛天依歌曲",
+ "ref": 0,
+ "name": "洛天依 歌曲",
+ "spid": 5,
+ "type": ""
+ },
+ {
+ "value": "洛天依童话镇",
+ "term": "洛天依童话镇",
+ "ref": 0,
+ "name": "洛天依 童话镇",
+ "spid": 5,
+ "type": ""
+ },
+ {
+ "value": "洛天依东京不太热",
+ "term": "洛天依东京不太热",
+ "ref": 0,
+ "name": "洛天依 东京不太热",
+ "spid": 5,
+ "type": ""
+ },
+ {
+ "value": "洛天依霜雪千年",
+ "term": "洛天依霜雪千年",
+ "ref": 0,
+ "name": "洛天依 霜雪千年",
+ "spid": 5,
+ "type": ""
+ },
+ {
+ "value": "洛天依生日会",
+ "term": "洛天依生日会",
+ "ref": 0,
+ "name": "洛天依 生日会",
+ "spid": 5,
+ "type": ""
+ },
+ {
+ "value": "洛天依生日",
+ "term": "洛天依生日",
+ "ref": 0,
+ "name": "洛天依 生日",
+ "spid": 5,
+ "type": ""
+ }
+ ]
+ },
+ "stoken": "4020133863501304726"
+}
+```
+
+
diff --git a/docs/teenager/teenager_mode.md b/docs/teenager/teenager_mode.md
new file mode 100644
index 0000000..e7f5a1b
--- /dev/null
+++ b/docs/teenager/teenager_mode.md
@@ -0,0 +1,84 @@
+# 青少年模式
+## 开启/关闭
+> https://app.bilibili.com/x/v2/account/teenagers/update
+
+*请求方式:POST*
+
+认证方式:APP(详见[设备各类标识算法](../misc/device_identity.md))
+
+**POST参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|--------|-----|-------|---------|-----|
+| appkey | str | APP密钥 | APP必要 | |
+| ts | num | 当前时间戳 | APP必要 | |
+| sign | str | APP签名 | APP必要 | |
+| access_key | str | APP登录Token | APP必要 | |
+| device_model | str | 设备 Model | APP必要 | |
+| channel | str | APP下载渠道 | APP必要 | 比如yingyongbao |
+| mobi_app | str |APP 包类型 | APP必要 | |
+| platform | str |平台类型| APP必要 | android |
+| c_locale | str |语言| 非必要 | zh_CN |
+| s_locale | str |语言| 非必要 | zh_CN |
+| statistics | str | ? | 必要 | 一般固定为{"appId":1,"platform":3,"version":"7.27.0","abtest":""},非key-value入参需要转URL编码 |
+| pwd | num |密码| 必要 | 开启时为4位,关闭时必须为空 |
+| teenagers_mode | num |开启/关闭模式| 必要 | 0为开启,1为关闭 |
+| teenagers_status | num |当前模式状态| 必要 | 0为已经开启,1为目前关闭 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------ | -------- | ---------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+
+**示例:**
+关闭本账号的青少年模式(pwd=&teenagers_mode=1&teenagers_status=0)
+```shell
+curl --location 'https://app.bilibili.com/x/v2/account/teenagers/update' \
+--header 'Device-Id: 你的设备id' \
+--header 'Fp_local: 你的本地设备指纹' \
+--header 'Fp_remote: 你的远程设备指纹' \
+--header 'Session_id: 会话id' \
+--header 'App-Key: android' \
+--header 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \
+--data-urlencode 'access_key=你的access_key' \
+--data-urlencode 'appkey=1d8b6e7d45233436' \
+--data-urlencode 'build=6270200' \
+--data-urlencode 'c_locale=zh_CN' \
+--data-urlencode 'channel=yingyongbao' \
+--data-urlencode 'device_model=samsung%257CSM-G955N' \
+--data-urlencode 'mobi_app=android' \
+--data-urlencode 'platform=android' \
+--data-urlencode 's_locale=zh_CN' \
+--data-urlencode 'statistics=%257B%2522appId%2522%253A1%252C%2522platform%2522%253A3%252C%2522version%2522%253A%25226.27.0%2522%252C%2522abtest%2522%253A%2522%2522%257D' \
+--data-urlencode 'pwd=' \
+--data-urlencode 'teenagers_mode=1' \
+--data-urlencode 'teenagers_status=0' \
+--data-urlencode 'ts=1699301298' \
+--data-urlencode 'sign=0666c38cb79691c4a0d9570a0669ec96' \
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+pwd有数值时
+```json
+{
+ "code": -400,
+ "message": "关闭时密码必须为空",
+ "ttl": 1
+}
+```
+
+
diff --git a/user/check_nickname.md b/docs/user/check_nickname.md
similarity index 80%
rename from user/check_nickname.md
rename to docs/user/check_nickname.md
index 5e747bd..b006dbc 100644
--- a/user/check_nickname.md
+++ b/docs/user/check_nickname.md
@@ -1,12 +1,11 @@
# 检查昵称是否可注册
-- [检查昵称](#检查昵称)
+## ~~检查昵称(已失效)~~
----
+
+查看折叠内容
-## 检查昵称
-
-> http://passport.bilibili.com/web/generic/check/nickname
+> https://passport.bilibili.com/web/generic/check/nickname
*请求方式:GET*
@@ -44,7 +43,7 @@
查询昵称 `xijinping` 是否被使用:
```shell
-curl -G 'http://passport.bilibili.com/web/generic/check/nickname' \
+curl -G 'https://passport.bilibili.com/web/generic/check/nickname' \
--data-urlencode 'nickName=xijinping'
```
@@ -63,7 +62,7 @@ curl -G 'http://passport.bilibili.com/web/generic/check/nickname' \
查询昵称 `//` 是否被使用:
```shell
-curl -G 'http://passport.bilibili.com/web/generic/check/nickname' \
+curl -G 'https://passport.bilibili.com/web/generic/check/nickname' \
--data-urlencode 'nickName=//'
```
@@ -82,7 +81,7 @@ curl -G 'http://passport.bilibili.com/web/generic/check/nickname' \
查询昵称 `test0000000000000 ` 是否被使用:
```shell
-curl -G 'http://passport.bilibili.com/web/generic/check/nickname' \
+curl -G 'https://passport.bilibili.com/web/generic/check/nickname' \
--data-urlencode 'nickName=test0000000000000 '
```
@@ -101,7 +100,7 @@ curl -G 'http://passport.bilibili.com/web/generic/check/nickname' \
查询昵称 `0` 是否被使用:
```shell
-curl -G 'http://passport.bilibili.com/web/generic/check/nickname' \
+curl -G 'https://passport.bilibili.com/web/generic/check/nickname' \
--data-urlencode 'nickName=0'
```
@@ -120,7 +119,7 @@ curl -G 'http://passport.bilibili.com/web/generic/check/nickname' \
查询昵称 `test` 是否被使用:
```shell
-curl -G 'http://passport.bilibili.com/web/generic/check/nickname' \
+curl -G 'https://passport.bilibili.com/web/generic/check/nickname' \
--data-urlencode 'nickName=test'
```
@@ -135,3 +134,12 @@ curl -G 'http://passport.bilibili.com/web/generic/check/nickname' \
```
+
+
+
+目前该接口无论参数,稳定返回:
+```json
+{
+ "code": 0
+}
+```
diff --git a/docs/user/contract.md b/docs/user/contract.md
new file mode 100644
index 0000000..7080164
--- /dev/null
+++ b/docs/user/contract.md
@@ -0,0 +1,131 @@
+# 加入老粉计划
+
+> https://api.bilibili.com/x/v1/contract/add_contract
+
+*请求方式:POST*
+
+是否需要登录:`是`
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|----------|-----|--------|-----|-----|
+| aid | str | `空串` | | |
+| up_mid | str | UP主UID | 必要 | |
+| source | str | `4` | | |
+| scene | str | `105` | | |
+| platform | str | `web` | | |
+| mobi_app | str | `pc` | | |
+| csrf | str | 用户csrf | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+|---------|-----|------|-------------------------|
+| code | num | 响应码 | 0:成功 158001:`不满足条件` |
+| message | str | 0 | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|---------------|------|-----------------------------------|-----|
+| allow_message | bool | `true` | |
+| input_text | str | `UP主加油!看好你噢` | |
+| input_title | str | `感谢你对UP主的特别支持,“老粉”可期!私信留言鼓励下TA吧 ` | |
+
+**示例:**
+
+```shell
+curl --location --request POST 'https://api.bilibili.com/x/v1/contract/add_contract' \
+--header 'Cookie: SESSDATA=xxx' \
+--header 'Content-Type: application/x-www-form-urlencoded' \
+--data-urlencode 'up_mid=2' \
+--data-urlencode 'csrf=xxx'
+```
+
+
+点击查看
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "allow_message": true,
+ "input_text": "UP主加油!看好你噢",
+ "input_title": "感谢你对UP主的特别支持,“老粉”可期!私信留言鼓励下TA吧 "
+ }
+}
+```
+
+
+
+# 老粉计划发送留言
+
+> https://api.bilibili.com/x/v1/contract/add_message
+
+*请求方式:POST*
+
+认证方式:Cookie (SESSDATA)
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|---------|-----|--------|-----|-----|
+| aid | str | `空串` | | |
+| up_mid | str | UP主UID | 必要 | |
+| source | str | `4` | | |
+| scene | str | `105` | | |
+| content | str | 留言内容 | 必要 | |
+| csrf | str | 用户csrf | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+|---------|-----|------|------------------------------|
+| code | num | 响应码 | 0:成功 158005:您跟up主还不是契约关系 |
+| message | str | 0 | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|---------------|-----|------------------|-----|
+| success_toast | str | `提交成功,UP主已收到留言~` | |
+
+**示例:**
+
+```shell
+curl --location --request POST 'https://api.bilibili.com/x/v1/contract/add_message' \
+--header 'Cookie: SESSDATA=xxx' \
+--header 'Content-Type: application/x-www-form-urlencoded' \
+--data-urlencode 'up_mid=2' \
+--data-urlencode 'content=..' \
+--data-urlencode 'csrf=xxx'
+```
+
+
+点击查看
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "success_toast": "提交成功,UP主已收到留言~"
+ }
+}
+```
+
+
\ No newline at end of file
diff --git a/docs/user/info.md b/docs/user/info.md
new file mode 100644
index 0000000..3532f1b
--- /dev/null
+++ b/docs/user/info.md
@@ -0,0 +1,1252 @@
+# 用户基本信息
+
+
+
+## 用户空间详细信息
+
+> https://api.bilibili.com/x/space/wbi/acc/info
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:[Wbi 签名](../misc/sign/wbi.md), Cookie (对于某些 IP 地址,需要在 Cookie 中提供任意非空的 `buvid3` 字段)
+
+~~该接口的旧版 API :~~(已废弃,不建议使用)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ------------------------------------ |
+| mid | num | 目标用户mid | 必要 | |
+| w_rid | str | Wbi 签名 | 必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) |
+| wts | num | 当前时间戳 | 必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -400:请求错误 -403:访问权限不足 -404:用户不存在(如注销账号) |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------- | ---- | ---------------- | ------------------------------------------------------------ |
+| mid | num | mid | |
+| name | str | 昵称 | |
+| sex | str | 性别 | 男/女/保密 |
+| face | str | 头像链接 | |
+| face_nft | num | 是否为 NFT 头像 | 0:不是 NFT 头像 1:是 NFT 头像 |
+| face_nft_type | num | NFT 头像类型? | |
+| sign | str | 签名 | |
+| rank | num | 用户权限等级 | 目前应该无任何作用 5000:0级未答题 10000:普通会员 20000:字幕君 25000:VIP 30000:真·职人 32000:管理员 |
+| level | num | 当前等级 | 0-6 级 |
+| jointime | num | 注册时间 | 此接口返回恒为`0` |
+| moral | num | 节操值 | 此接口返回恒为`0` |
+| silence | num | 封禁状态 | 0:正常 1:被封 |
+| coins | num | 硬币数 | 需要登录(Cookie) 只能查看自己的 默认为`0` |
+| fans_badge | bool | 是否具有粉丝勋章 | false:无 true:有 |
+| fans_medal | obj | 粉丝勋章信息 | |
+| official | obj | 认证信息 | |
+| vip | obj | 会员信息 | |
+| pendant | obj | 头像框信息 | |
+| nameplate | obj | 勋章信息 | |
+| user_honour_info | obj | (?) | |
+| is_followed | bool | 是否关注此用户 | true:已关注 false:未关注 需要登录(Cookie) 未登录恒为`false` |
+| top_photo | str | 主页头图链接 | |
+| theme | obj | (?) | |
+| sys_notice | obj | 系统通知 | 无内容则为空对象 主要用于展示如用户争议、纪念账号等等的小黄条 |
+| live_room | obj | 直播间信息 | |
+| birthday | str | 生日 | MM-DD 如设置隐私为空 |
+| school | obj | 学校 | |
+| profession | obj | 专业资质信息 | |
+| tags | 有效时:array 无效时:null | 个人标签 | |
+| series | obj | (?) | |
+| is_senior_member | num | 是否为硬核会员 | 0:否 1:是 |
+| mcn_info | null | (?) | |
+| gaia_res_type | num | (?) | |
+| gaia_data | null | (?) | |
+| is_risk | bool | (?) | |
+| elec | obj | 充电信息 | |
+| contract | obj | 是否显示老粉计划 | |
+| certificate_show | bool | (?) | |
+| name_render | 有效时:obj 无效时:null | 昵称渲染信息 | |
+
+`rank`示例
+
+| UID | rank |
+| --------- | ----- |
+| 2 | 20000 |
+| 16765 | 20000 |
+| 15773384 | 20000 |
+| 124416 | 20000 |
+| 429736362 | 25000 |
+| 424261768 | 25000 |
+| 41273726 | 25000 |
+| 15080107 | 25000 |
+| 9847497 | 25000 |
+| 4856007 | 25000 |
+| 928123 | 25000 |
+| 132704 | 25000 |
+| 70093 | 25000 |
+| 47291 | 25000 |
+| 27380 | 25000 |
+| 22445 | 25000 |
+| 3351 | 25000 |
+| 1101 | 25000 |
+| 93066 | 30000 |
+| 2443068 | 30000 |
+| 46368 | 30000 |
+| 11167 | 30000 |
+
+`profession`示例
+
+| UID |
+| ---------- |
+| 654391 |
+| 1440295 |
+| 1785155 |
+| 2990100 |
+| 3875803 |
+
+`data`中的`official`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | -------- | ---------------------------------------- |
+| role | num | 认证类型 | 见 [用户认证类型一览](official_role.md) |
+| title | str | 认证信息 | 无为空 |
+| desc | str | 认证备注 | 无为空 |
+| type | num | 是否认证 | -1:无 0:个人认证 1:机构认证 |
+
+`data`中的`vip`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------------- | ---- | ------------------ | ------------------------------------------------------------ |
+| type | num | 会员类型 | 0:无 1:月大会员 2:年度及以上大会员 |
+| status | num | 会员状态 | 0:无 1:有 |
+| due_date | num | 会员过期时间 | 毫秒时间戳 |
+| vip_pay_type | num | 支付类型 | 0:未开启自动续费 1:已开启自动续费 |
+| theme_type | num | 0 | 作用尚不明确 |
+| label | obj | 会员标签 | |
+| avatar_subscript | num | 是否显示会员图标 | 0:不显示 1:显示 |
+| nickname_color | str | 会员昵称颜色 | 颜色码,一般为`#FB7299`,曾用于愚人节改变大会员配色 |
+| role | num | 大角色类型 | 1:月度大会员 3:年度大会员 7:十年大会员 15:百年大会员 |
+| avatar_subscript_url | str | 大会员角标地址 | |
+| tv_vip_status | num | 电视大会员状态 | 0:未开通 |
+| tv_vip_pay_type | num | 电视大会员支付类型 | |
+| tv_due_date | num | 电视大会员过期时间 | 秒级时间戳 |
+| avatar_icon | obj | 大会员角标信息 | |
+
+`vip`中的`label`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------------------------|------|----------|------------------------------------------------------------------------------------------------------------------------------|
+| path | str | 空 | 作用尚不明确 |
+| text | str | 会员类型文案 | `大会员` `年度大会员` `十年大会员` `百年大会员` `最强绿鲤鱼` |
+| label_theme | str | 会员标签 | vip:大会员 annual_vip:年度大会员 ten_annual_vip:十年大会员 hundred_annual_vip:百年大会员 fools_day_hundred_annual_vip:最强绿鲤鱼 |
+| text_color | str | 会员标签 | |
+| bg_style | num | 1 | |
+| bg_color | str | 会员标签背景颜色 | 颜色码,一般为`#FB7299`,曾用于愚人节改变大会员配色 |
+| border_color | str | 会员标签边框颜色 | 未使用 |
+| use_img_label | bool | `true` | |
+| img_label_uri_hans | str | `空串` | |
+| img_label_uri_hant | str | `空串` | |
+| img_label_uri_hans_static | str | 大会员牌子图片 | 简体版 |
+| img_label_uri_hant_static | str | 大会员牌子图片 | 繁体版 |
+
+`vip`中的`avatar_icon`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ------ | ------------ |
+| icon_type | num | (?) | 作用尚不明确 |
+| icon_resource | obj | (?) | 作用尚不明确 |
+
+`data`中的`pendant`对象:
+
+**普通头像框的`image`与`image_enhance`内容相同**
+
+**动态头像框的`image`为png静态图片,`image_enhance`为webp动态图片,`image_enhance_frame`为png逐帧序列**
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------- | ---- | --------------------- | ----------------- |
+| pid | num | 头像框id | |
+| name | str | 头像框名称 | |
+| image | str | 头像框图片url | |
+| expire | num | 过期时间 | 此接口返回恒为`0` |
+| image_enhance | str | 头像框图片url | |
+| image_enhance_frame | str | 头像框图片逐帧序列url | |
+| n_pid | num | 新版头像框id | |
+
+`data`中的`nameplate`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | -------------- | ---- |
+| nid | num | 勋章id | |
+| name | str | 勋章名称 | |
+| image | str | 勋章图标 | |
+| image_small | str | 勋章图标(小) | |
+| level | str | 勋章等级 | |
+| condition | str | 获取条件 | |
+
+`data`中的`fans_medal`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------|------|-----------|-----|
+| show | bool | | |
+| wear | bool | 是否佩戴了粉丝勋章 | |
+| medal | obj | 粉丝勋章信息 | |
+
+`fans_medal`中的`medal`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------------------|-----|--------------|------------------|
+| uid | num | 此用户mid | |
+| target_id | num | 粉丝勋章所属UP的mid | |
+| medal_id | num | 粉丝勋章id | |
+| level | num | 粉丝勋章等级 | |
+| medal_name | str | 粉丝勋章名称 | |
+| medal_color | num | 颜色 | |
+| intimacy | num | 当前亲密度 | |
+| next_intimacy | num | 下一等级所需亲密度 | |
+| day_limit | num | 每日亲密度获取上限 | |
+| today_feed | num | 今日已获得亲密度 | |
+| medal_color_start | num | 粉丝勋章颜色 | 十进制数,可转为十六进制颜色代码 |
+| medal_color_end | num | 粉丝勋章颜色 | 十进制数,可转为十六进制颜色代码 |
+| medal_color_border | num | 粉丝勋章边框颜色 | 十进制数,可转为十六进制颜色代码 |
+| is_lighted | num | | |
+| light_status | num | | |
+| wearing_status | num | 当前是否佩戴 | 0:未佩戴 1:已佩戴 |
+| score | num | | |
+
+`data`中的`sys_notice`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------|-----|------|-----|
+| id | num | id | |
+| content | str | 显示文案 | |
+| url | str | 跳转地址 | |
+| notice_type | num | 提示类型 | 1,2 |
+| icon | str | 前缀图标 | |
+| text_color | str | 文字颜色 | |
+| bg_color | str | 背景颜色 | |
+
+`sys_notice`示例
+
+| id | content | notice_type | 示例用户 |
+|-----|-------------------------------------------------|-------------|-------------------------------------------------------------------------------------------------|
+| 5 | 该用户存在争议行为,已冻结其帐号功能的使用 | 1 ||
+| 8 | 该用户存在较大争议,请谨慎甄别其内容 | 1 | [28062215](https://space.bilibili.com/28062215) |
+| 11 | 该账号涉及合约争议,暂冻结其账号功能使用。详见公告-> | 1 ||
+| 16 | 该UP主内容存在争议,请注意甄别视频内信息 | 1 | [382534165](https://space.bilibili.com/382534165) |
+| 20 | 请允许我们在此献上最后的告别,以此纪念其在哔哩哔哩留下的回忆与足迹。请点此查看纪念账号相关说明 | 2 |[212535360](https://space.bilibili.com/212535360)|
+|22| 该账号涉及合约诉讼,封禁其账号使用 | ||
+| 24 | 该账号涉及合约争议,暂冻结其账号功能使用 | 1 | [291229008](https://space.bilibili.com/291229008) |
+| 25 | 该用户涉及严重指控,暂冻结其账号功能使用 | 1 | [81447581](https://space.bilibili.com/81447581) |
+| 31 | 该用户涉及严重指控,暂冻结其账号功能使用 | 1 | [22439273](https://space.bilibili.com/22439273) |
+| 34 | 该用户涉及严重指控,暂冻结其账号功能使用 | 1 | [1640486775](https://space.bilibili.com/1640486775) |
+| 36 | 该账户存在争议,请谨慎甄别 | 1 ||
+
+`data`中的`live_room`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|----------------|-----|------------|------------------|
+| roomStatus | num | 直播间状态 | 0:无房间 1:有房间 |
+| liveStatus | num | 直播状态 | 0:未开播 1:直播中 |
+| url | str | 直播间网页 url | |
+| title | str | 直播间标题 | |
+| cover | str | 直播间封面 url | |
+| watched_show | obj | | |
+| roomid | num | 直播间 id | |
+| roundStatus | num | 轮播状态 | 0:未轮播 1:轮播 |
+| broadcast_type | num | 0 | |
+
+`live_room`中的`watched_show`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------------|------|---------------------|-----|
+| switch | bool | ? | |
+| num | num | total watched users | |
+| text_small | str | | |
+| text_large | str | | |
+| icon | str | watched icon url | |
+| icon_location | str | ? | |
+| icon_web | str | watched icon url | |
+
+`data`中的`school`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------|-----|--------|-------|
+| name | str | 就读大学名称 | 没有则为空 |
+
+`data`中的`profession`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------------|-----|------|----------------|
+| name | str | 资质名称 | |
+| department | str | 职位 | |
+| title | str | 所属机构 | |
+| is_show | num | 是否显示 | 0:不显示 1:显示 |
+
+`data`中的`user_honour_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------|-------|------|-----|
+| mid | num | 0 | |
+| colour | str | null | |
+| tags | array | null | |
+
+`data`中的`series`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------------------|------|-----|-----|
+| user_upgrade_status | num | (?) | |
+| show_upgrade_window | bool | (?) | |
+
+`data`中的`elec`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | -------------- | ---- |
+| show_info | obj | 显示的充电信息 | |
+
+`elec`中的`show_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ---------------- | ---------------- |
+| show | bool | 是否显示充电按钮 | |
+| state | num | 充电功能开启状态 | -1:未开通充电功能 1:已开通自定义充电 2:已开通包月、自定义充电 3:已开通包月高档、自定义充电 |
+| title | str | 充电按钮显示文字 | 空字符串或 `充电` 或 `充电中` |
+| icon | str | 充电图标 | |
+| jump_url | str | 跳转url | |
+
+`data`中的`contract`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+|-------------------|------|-----------|---------------------------|
+| is_display | bool | | true/false 在页面中未使用此字段 |
+| is_follow_display | bool | 是否在显示老粉计划 | true:显示 false:不显示 |
+
+**示例:**
+
+查询用户`mid=2`的详细信息,Wbi 签名的 `wts`、`w_rid`生成方式详见 [Wbi 签名](../misc/sign/wbi.md) 文档
+
+```shell
+curl -G 'https://api.bilibili.com/x/space/wbi/acc/info' \
+ --data-urlencode 'mid=2' \
+ --data-urlencode 'wts=1685070149' \
+ --data-urlencode 'w_rid=f7b376124782ae8cb42c56fdd69144ed' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "mid": 2,
+ "name": "碧诗",
+ "sex": "男",
+ "face": "https://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg",
+ "face_nft": 0,
+ "face_nft_type": 0,
+ "sign": "https://kami.im 直男过气网红 # We Are Star Dust",
+ "rank": 20000,
+ "level": 6,
+ "jointime": 0,
+ "moral": 0,
+ "silence": 0,
+ "coins": 0,
+ "fans_badge": true,
+ "fans_medal": {
+ "show": true,
+ "wear": true,
+ "medal": {
+ "uid": 2,
+ "target_id": 548076,
+ "medal_id": 32525,
+ "level": 28,
+ "medal_name": "桜樱怪",
+ "medal_color": 398668,
+ "intimacy": 25364,
+ "next_intimacy": 160000,
+ "day_limit": 250000,
+ "today_feed": 2382,
+ "medal_color_start": 398668,
+ "medal_color_end": 6850801,
+ "medal_color_border": 6809855,
+ "is_lighted": 1,
+ "guard_level": 3,
+ "light_status": 1,
+ "wearing_status": 1,
+ "score": 50185364
+ }
+ },
+ "official": {
+ "role": 2,
+ "title": "bilibili创始人(站长)",
+ "desc": "",
+ "type": 0
+ },
+ "vip": {
+ "type": 2,
+ "status": 1,
+ "due_date": 3979555200000,
+ "vip_pay_type": 0,
+ "theme_type": 0,
+ "label": {
+ "path": "",
+ "text": "十年大会员",
+ "label_theme": "ten_annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": "",
+ "use_img_label": true,
+ "img_label_uri_hans": "https://i0.hdslb.com/bfs/activity-plat/static/20220608/e369244d0b14644f5e1a06431e22a4d5/wltavwHAkL.gif",
+ "img_label_uri_hant": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/802418ff03911645648b63aa193ba67997b5a0bc.png",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/8u7iRTPE7N.png"
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "role": 7,
+ "avatar_subscript_url": "",
+ "tv_vip_status": 1,
+ "tv_vip_pay_type": 1,
+ "tv_due_date": 2003500800,
+ "avatar_icon": {
+ "icon_type": 1,
+ "icon_resource": {}
+ }
+ },
+ "pendant": {
+ "pid": 32257,
+ "name": "EveOneCat2",
+ "image": "https://i2.hdslb.com/bfs/garb/item/488870931b1bba66da36d22848f0720480d3d79a.png",
+ "expire": 0,
+ "image_enhance": "https://i2.hdslb.com/bfs/garb/item/5974f17f9d96a88bafba2f6d18d647a486e88312.webp",
+ "image_enhance_frame": "https://i2.hdslb.com/bfs/garb/item/4316a3910bb0bd6f2f1c267a3e9187f0b9fe5bd0.png",
+ "n_pid": 32257
+ },
+ "nameplate": {
+ "nid": 10,
+ "name": "见习偶像",
+ "image": "https://i2.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png",
+ "image_small": "https://i2.hdslb.com/bfs/face/275b468b043ec246737ab8580a2075bee0b1263b.png",
+ "level": "普通勋章",
+ "condition": "所有自制视频总播放数>=10万"
+ },
+ "user_honour_info": {
+ "mid": 0,
+ "colour": null,
+ "tags": [],
+ "is_latest_100honour": 0
+ },
+ "is_followed": false,
+ "top_photo": "http://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png",
+ "theme": {},
+ "sys_notice": {},
+ "live_room": {
+ "roomStatus": 1,
+ "liveStatus": 0,
+ "url": "https://live.bilibili.com/1024?broadcast_type=0&is_room_feed=0",
+ "title": "试图恰鸡",
+ "cover": "http://i0.hdslb.com/bfs/live/new_room_cover/96ee5bfd0279a0f18b190340334f43f473038288.jpg",
+ "roomid": 1024,
+ "roundStatus": 0,
+ "broadcast_type": 0,
+ "watched_show": {
+ "switch": true,
+ "num": 3,
+ "text_small": "3",
+ "text_large": "3人看过",
+ "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "icon_location": "",
+ "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png"
+ }
+ },
+ "birthday": "09-19",
+ "school": {
+ "name": ""
+ },
+ "profession": {
+ "name": "",
+ "department": "",
+ "title": "",
+ "is_show": 0
+ },
+ "tags": null,
+ "series": {
+ "user_upgrade_status": 3,
+ "show_upgrade_window": false
+ },
+ "is_senior_member": 0,
+ "mcn_info": null,
+ "gaia_res_type": 0,
+ "gaia_data": null,
+ "is_risk": false,
+ "elec": {
+ "show_info": {
+ "show": true,
+ "state": 1,
+ "title": "",
+ "icon": "",
+ "jump_url": "?oid=2"
+ }
+ },
+ "contract": {
+ "is_display": false,
+ "is_follow_display": false
+ },
+ "certificate_show": false,
+ "name_render": null
+ }
+}
+```
+
+
+
+## 用户名片信息
+
+> https://api.bilibili.com/x/web-interface/card
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------------------- | ------ | ----------------------- |
+| mid | num | 目标用户mid | 必要 | |
+| photo | bool | 是否请求用户主页头图 | 非必要 | true:是 false:否 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ----- | -------------- | ------------------------------------------------------------ |
+| card | obj | 卡片信息 | |
+| following | bool | 是否关注此用户 | true:已关注 false:未关注 需要登录(Cookie) 未登录为false |
+| archive_count | num | 用户稿件数 | |
+| article_count | num | 0 | **作用尚不明确** |
+| follower | num | 粉丝数 | |
+| like_num | num | 点赞数 | |
+
+`data`中的`card`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ----- | -------------- | ------------------------------------------------------------ |
+| mid | str | 用户mid | |
+| approve | bool | false | **作用尚不明确** |
+| name | str | 用户昵称 | |
+| sex | str | 用户性别 | 男 女 保密 |
+| face | str | 用户头像链接 | |
+| DisplayRank | str | 0 | **作用尚不明确** |
+| regtime | num | 0 | **作用尚不明确** |
+| spacesta | num | 用户状态 | 0:正常 -2:被封禁 |
+| birthday | str | 空 | **作用尚不明确** |
+| place | str | 空 | **作用尚不明确** |
+| description | str | 空 | **作用尚不明确** |
+| article | num | 0 | **作用尚不明确** |
+| attentions | array | 空 | **作用尚不明确** |
+| fans | num | 粉丝数 | |
+| friend | num | 关注数 | |
+| attention | num | 关注数 | |
+| sign | str | 签名 | |
+| level_info | obj | 等级 | |
+| pendant | obj | 挂件 | |
+| nameplate | obj | 勋章 | |
+| Official | obj | 认证信息 | |
+| official_verify | obj | 认证信息2 | |
+| vip | obj | 大会员状态 | |
+| space | obj | 主页头图 | |
+
+`card`中的`level_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | -------- | ---------------- |
+| current_level | num | 当前等级 | 0-6级 |
+| current_min | num | 0 | **作用尚不明确** |
+| current_exp | num | 0 | **作用尚不明确** |
+| next_exp | num | 0 | **作用尚不明确** |
+
+`card`中的`pendant`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | ----------- | ---------------- |
+| pid | num | 挂件id | |
+| name | str | 挂件名称 | |
+| image | str | 挂件图片url | |
+| expire | num | 0 | **作用尚不明确** |
+
+`card`中的`nameplate`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ---------------- | -------------------- |
+| nid | num | 勋章id | **详细说明有待补充** |
+| name | str | 勋章名称 | |
+| image | str | 挂件图片url 正常 | |
+| image_small | str | 勋章图片url 小 | |
+| level | str | 勋章等级 | |
+| condition | str | 勋章条件 | |
+
+`card`中的`Official`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | -------- | ---------------------------------------- |
+| role | num | 认证类型 | 见[用户认证类型一览](official_role.md) |
+| title | str | 认证信息 | 无为空 |
+| desc | str | 认证备注 | 无为空 |
+| type | num | 是否认证 | -1:无 0:UP主认证 1:机构认证 |
+
+`card`中的`official_verify`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ---------------------------------------- |
+| type | num | 是否认证 | -1:无 0:UP主认证 1:机构认证 |
+| desc | str | 认证信息 | 无为空 |
+
+`card`中的`vip`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | ---------- | ------------------------------------------------- |
+| vipType | num | 大会员类型 | 0:无 1:月度大会员 2:年度及以上大会员 |
+| dueRemark | str | 空 | **作用尚不明确** |
+| accessStatus | num | 0 | **作用尚不明确** |
+| vipStatus | num | 大会员状态 | 0:无 1:有 |
+| vipStatusWarn | str | 空 | **作用尚不明确** |
+| theme_type | num | 0 | **作用尚不明确** |
+
+`card`中的`space`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | ---------------- | ---- |
+| s_img | str | 主页头图url 小图 | |
+| l_img | str | 主页头图url 正常 | |
+
+**示例:**
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/card' \
+--data-urlencode 'mid=2' \
+--data-urlencode 'photo=true'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "card": {
+ "mid": "2",
+ "name": "碧诗",
+ "approve": false,
+ "sex": "男",
+ "rank": "20000",
+ "face": "http://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg",
+ "DisplayRank": "0",
+ "regtime": 0,
+ "spacesta": 0,
+ "birthday": "",
+ "place": "",
+ "description": "",
+ "article": 0,
+ "attentions": [],
+ "fans": 969999,
+ "friend": 234,
+ "attention": 234,
+ "sign": "kami.im 直男过气网红 # av362830 “We Are Star Dust”",
+ "level_info": {
+ "current_level": 6,
+ "current_min": 0,
+ "current_exp": 0,
+ "next_exp": 0
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": ""
+ },
+ "nameplate": {
+ "nid": 10,
+ "name": "见习偶像",
+ "image": "http://i2.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png",
+ "image_small": "http://i2.hdslb.com/bfs/face/275b468b043ec246737ab8580a2075bee0b1263b.png",
+ "level": "普通勋章",
+ "condition": "所有自制视频总播放数\u003e=10万"
+ },
+ "Official": {
+ "role": 2,
+ "title": "bilibili创始人(站长)",
+ "desc": "",
+ "type": 0
+ },
+ "official_verify": {
+ "type": 0,
+ "desc": "bilibili创始人(站长)"
+ },
+ "vip": {
+ "type": 2,
+ "status": 1,
+ "due_date": 3896524800000,
+ "vip_pay_type": 0,
+ "theme_type": 0,
+ "label": {
+ "path": "",
+ "text": "十年大会员",
+ "label_theme": "ten_annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "role": 7,
+ "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png",
+ "vipType": 2,
+ "vipStatus": 1
+ }
+ },
+ "space": {
+ "s_img": "http://i1.hdslb.com/bfs/space/768cc4fd97618cf589d23c2711a1d1a729f42235.png",
+ "l_img": "http://i1.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png"
+ },
+ "following": true,
+ "archive_count": 37,
+ "article_count": 0,
+ "follower": 969999,
+ "like_num": 3547978
+ }
+}
+```
+
+
+
+## 登录用户空间详细信息
+
+> https://api.bilibili.com/x/space/myinfo
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------- |
+| code | num | 返回值 | 0:成功 -101:未登录 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ---- | ------------ | ------------------------ |
+| mid | num | mid | |
+| name | str | 昵称 | |
+| sex | str | 性别 | 男 女 保密 |
+| face | str | 头像图片url | |
+| sign | str | 签名 | |
+| rank | num | 10000 | **作用尚不明确** |
+| level | num | 当前等级 | 0-6级 |
+| jointime | num | 0 | **作用尚不明确** |
+| moral | num | 节操 | 默认70 |
+| silence | num | 封禁状态 | 0:正常 1:被封 |
+| email_status | num | 已验证邮箱 | 0:未验证 1:已验证 |
+| tel_status | num | 已验证手机号 | 0:未验证 1:已验证 |
+| identification | num | 1 | **作用尚不明确** |
+| vip | obj | 大会员状态 | |
+| birthday | num | 生日 | 时间戳 |
+| is_tourist | num | 0 | **作用尚不明确** |
+| is_fake_account | num | 0 | **作用尚不明确** |
+| pin_prompting | num | 0 | **作用尚不明确** |
+| is_deleted | num | 0 | **作用尚不明确** |
+| coins | num | 硬币数 | |
+| following | num | 粉丝数 | |
+| follower | num | 粉丝数 | |
+
+`data`中的`vip`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------- | ---- | ---------------- | ----------------------------------------------- |
+| type | num | 会员类型 | 0:无 1:月大会员 2:年度及以上大会员 |
+| status | num | 会员状态 | 0:无 1:有 |
+| due_date | num | 会员过期时间 | Unix时间戳(毫秒) |
+| theme_type | num | 0 | 作用尚不明确 |
+| label | obj | 会员标签 | |
+| avatar_subscript | num | 是否显示会员图标 | 0:不显示 1:显示 |
+| nickname_color | str | 会员昵称颜色 | 颜色码 |
+
+`vip`中的`label`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | -------- | ------------------------------------------------------------ |
+| path | str | 空 | 作用尚不明确 |
+| text | str | 会员名称 | |
+| label_theme | str | 会员标签 | vip:大会员 annual_vip:年度大会员 ten_annual_vip:十年大会员 hundred_annual_vip:百年大会员 |
+
+`data`中的`pendant`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | ----------- | -------------------- |
+| pid | num | 挂件id | **详细说明有待补充** |
+| name | str | 挂件名称 | |
+| image | str | 挂件图片url | |
+| expire | num | 0 | **作用尚不明确** |
+
+`data`中的`nameplate`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ---------------- | -------------------- |
+| nid | num | 勋章id | **详细说明有待补充** |
+| name | str | 勋章名称 | |
+| image | str | 挂件图片url 正常 | |
+| image_small | str | 勋章图片url 小 | |
+| level | str | 勋章等级 | |
+| condition | str | 勋章条件 | |
+
+`data`中的`Official`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | -------- | ------------------------------------------------- |
+| role | num | 认证类型 | 见[用户认证类型一览](official_role.md) |
+| title | str | 认证信息 | 无为空 |
+| desc | str | 认证备注 | 无为空 |
+| type | num | 是否认证 | -1:无 0:认证 |
+
+`data`中的`level_exp`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | -------- | ---------------- |
+| current_level | num | 当前等级 | 0-6级 |
+| current_min | num | 0 | 指当前等级从多少经验值开始 |
+| current_exp | num | 0 | 当前账户的经验值 |
+| next_exp | num | 0 | 下一个等级所需的经验值**(不是还需要多少)** |
+
+**示例:**
+
+```shell
+curl -G 'https://api.bilibili.com/x/space/myinfo' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "mid": 293793435,
+ "name": "社会易姐QwQ",
+ "sex": "男",
+ "face": "http://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg",
+ "sign": "高考刚结束的普通技术宅一枚,喜欢MC和编程以及电子,是车车人也是术术人,粉丝群:1136462265",
+ "rank": 10000,
+ "level": 5,
+ "jointime": 0,
+ "moral": 70,
+ "silence": 0,
+ "email_status": 1,
+ "tel_status": 1,
+ "identification": 1,
+ "vip": {
+ "type": 2,
+ "status": 1,
+ "due_date": 1644163200000,
+ "vip_pay_type": 0,
+ "theme_type": 0,
+ "label": {
+ "path": "",
+ "text": "年度大会员",
+ "label_theme": "annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
+ },
+ "pendant": {
+ "pid": 2511,
+ "name": "初音未来13周年",
+ "image": "http://i0.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png",
+ "expire": 0,
+ "image_enhance": "http://i0.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp",
+ "image_enhance_frame": "http://i0.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png"
+ },
+ "nameplate": {
+ "nid": 4,
+ "name": "青铜殿堂",
+ "image": "http://i0.hdslb.com/bfs/face/2879cd5fb8518f7c6da75887994c1b2a7fe670bd.png",
+ "image_small": "http://i0.hdslb.com/bfs/face/6707c120e00a3445933308fd9b7bd9fad99e9ec4.png",
+ "level": "普通勋章",
+ "condition": "单个自制视频总播放数\u003e=1万"
+ },
+ "official": {
+ "role": 0,
+ "title": "",
+ "desc": "",
+ "type": -1
+ },
+ "birthday": 1015257600,
+ "is_tourist": 0,
+ "is_fake_account": 0,
+ "pin_prompting": 0,
+ "is_deleted": 0,
+ "in_reg_audit": 0,
+ "is_rip_user": false,
+ "profession": {
+ "id": 0,
+ "name": "",
+ "show_name": ""
+ },
+ "level_exp": {
+ "current_level": 5,
+ "current_min": 10800,
+ "current_exp": 27125,
+ "next_exp": 28800
+ },
+ "coins": 9,
+ "following": 1122,
+ "follower": 1122
+ }
+}
+```
+
+
+
+## 多用户详细信息
+
+> https://api.bilibili.com/x/polymer/pc-electron/v1/user/cards
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------------- | ------ | ---------------------------------- |
+| uids | nums | 目标用户的mid列表 | 必要 | 每个成员间用`,`分隔,最多50个成员 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----- | -------- | -------------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 40143:批量大小超过限制 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | 用户信息随机排序 |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ----------------------- | ---- |
+| {用户mid} | obj | 该mid对应的用户信息 | |
+| …… | obj | …… | …… |
+
+`data`中的`{用户mid}`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ------------------- | -------------------- |
+| mid | str | mid | |
+| face | str | 头像链接 | |
+| name | str | 昵称 | |
+| official | obj | 认证信息 | 基本同「[用户空间详细信息](#用户空间详细信息)」中的 `data.official` 对象 |
+| vip | obj | 会员信息 | 基本同「[用户空间详细信息](#用户空间详细信息)」中的 `data.vip` 对象,其中有些类型为 `num` 的字段在本接口中类型为 `str` |
+| name_render | 有效时:obj 无效时:null | 昵称渲染信息 | |
+
+`{用户mid}`中的`name_render`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | --------------------------- | ---------------- |
+| colors_info | obj | 昵称颜色信息(?) | **作用尚不明确** |
+| render_scheme | str | `"Default"` 或 `"Colorful"` | **作用尚不明确** |
+
+`name_render`中的`colors_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ----- | -------------- | ---------------- |
+| color | array | 昵称颜色(?) | **作用尚不明确** |
+| color_ids | array | `["6"]` | **作用尚不明确** |
+
+`color`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---- |
+| 0 | obj | 颜色1 | |
+| n | obj | 颜色(n+1) | |
+| …… | obj | …… | …… |
+
+`color`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ---------------- | ---------------- |
+| color_day | str | 浅色模式昵称颜色 | HEX颜色代码 |
+| color_night | str | 深色模式昵称颜色 | HEX颜色代码 |
+
+**示例:**
+
+查询用户`uids=1,2,3`的详细信息
+
+```shell
+curl -G 'https://api.bilibili.com/x/polymer/pc-electron/v1/user/cards' \
+--data-urlencode 'uids=1,2,3'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "1": {
+ "mid": "1",
+ "face": "http://i1.hdslb.com/bfs/face/34c5b30a990c7ce4a809626d8153fa7895ec7b63.gif",
+ "name": "bishi",
+ "official": {
+ "desc": "",
+ "role": 0,
+ "title": "",
+ "type": -1
+ },
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": "1912521600000",
+ "nickname_color": "#FB7299",
+ "role": "7",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/adb599797dd171e2d3d6d012f448b49679258344.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/sGu57N6pgK.png",
+ "label_theme": "ten_annual_vip",
+ "path": "",
+ "text": "十年大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ }
+ },
+ "name_render": null
+ },
+ "2": {
+ "mid": "2",
+ "face": "https://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg",
+ "name": "碧诗",
+ "official": {
+ "desc": "",
+ "role": 2,
+ "title": "bilibili创始人(站长)",
+ "type": 0
+ },
+ "vip": {
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "",
+ "due_date": "3995625600000",
+ "nickname_color": "#FB7299",
+ "role": "7",
+ "status": 1,
+ "theme_type": 0,
+ "type": 2,
+ "label": {
+ "bg_color": "#FB7299",
+ "bg_style": 1,
+ "border_color": "",
+ "img_label_uri_hans": "https://i0.hdslb.com/bfs/activity-plat/static/20220608/e369244d0b14644f5e1a06431e22a4d5/wltavwHAkL.gif",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/802418ff03911645648b63aa193ba67997b5a0bc.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/8u7iRTPE7N.png",
+ "label_theme": "ten_annual_vip",
+ "path": "",
+ "text": "十年大会员",
+ "text_color": "#FFFFFF",
+ "use_img_label": true
+ }
+ },
+ "name_render": null
+ },
+ "3": {
+ "mid": "3",
+ "face": "http://i0.hdslb.com/bfs/face/d4de6a84557eea8f18510a3f61115d96832aa071.jpg",
+ "name": "囧囧倉",
+ "official": {
+ "desc": "",
+ "role": 0,
+ "title": "",
+ "type": -1
+ },
+ "vip": {
+ "avatar_subscript": 0,
+ "avatar_subscript_url": "",
+ "due_date": "0",
+ "nickname_color": "",
+ "role": "0",
+ "status": 0,
+ "theme_type": 0,
+ "type": 0,
+ "label": {
+ "bg_color": "",
+ "bg_style": 0,
+ "border_color": "",
+ "img_label_uri_hans": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png",
+ "img_label_uri_hant": "",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png",
+ "label_theme": "",
+ "path": "",
+ "text": "",
+ "text_color": "",
+ "use_img_label": true
+ }
+ },
+ "name_render": null
+ }
+ }
+}
+```
+
+
+
+## 多用户详细信息2
+
+> https://api.vc.bilibili.com/account/v1/user/cards
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+本接口较其他接口相比,只会返回非常有限的信息
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------------- | ------ | --------------------------------------------------------------------- |
+| uids | nums | 目标用户的mid列表 | 必要 | 每个成员间用`,`分隔,最多50个成员,若超过此限制则返回的`data`数组为空 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | array | 信息本体 | 用户信息随机排序 |
+
+`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---- |
+| 0 | obj | 用户1 | |
+| n | obj | 用户(n+1) | |
+| …… | obj | …… | …… |
+
+`data`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ------------ | -------------------- |
+| mid | num | mid | |
+| name | str | 昵称 | |
+| face | str | 头像链接 | |
+| sign | str | 签名 | |
+| rank | num | 用户权限等级 | |
+| level | num | 当前等级 | 0-6 级 |
+| silence | num | 封禁状态 | 0:正常 1:被封 |
+
+**示例:**
+
+查询用户`uids=1,2,3`的详细信息
+
+```shell
+curl -G 'https://api.vc.bilibili.com/account/v1/user/cards' \
+--data-urlencode 'uids=1,2,3'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [
+ {
+ "mid": 3,
+ "name": "囧囧倉",
+ "face": "http://i0.hdslb.com/bfs/face/d4de6a84557eea8f18510a3f61115d96832aa071.jpg",
+ "sign": "富强、民主、文明、和谐、自由、平等、公正、法治、爱国、敬业、诚信、友善。",
+ "rank": 10000,
+ "level": 6,
+ "silence": 0
+ },
+ {
+ "mid": 2,
+ "name": "碧诗",
+ "face": "https://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg",
+ "sign": "https://kami.im 直男过气网红 # We Are Star Dust",
+ "rank": 20000,
+ "level": 6,
+ "silence": 0
+ },
+ {
+ "mid": 1,
+ "name": "bishi",
+ "face": "http://i1.hdslb.com/bfs/face/34c5b30a990c7ce4a809626d8153fa7895ec7b63.gif",
+ "sign": "",
+ "rank": 10000,
+ "level": 6,
+ "silence": 0
+ }
+ ]
+}
+```
+
+
diff --git a/docs/user/medals.md b/docs/user/medals.md
new file mode 100644
index 0000000..d2374bc
--- /dev/null
+++ b/docs/user/medals.md
@@ -0,0 +1,822 @@
+# 所有粉丝勋章
+
+## 指定用户的所有粉丝勋章信息
+
+> https://api.live.bilibili.com/xlive/web-ucenter/user/MedalWall
+
+*请求方法: GET*
+
+认证方式: Cookie (SESSDATA)
+
+
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --------- | ---- | -------- | ------ | ---- |
+| target_id | num | 目标 mid | 必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------- |
+| code | num | 返回值 | 0: 成功 -101: 账号未登录 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | 失败时不存在 |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ----- | --------------------- | ----- |
+| list | array | 勋章列表 | |
+| count | num | 勋章数 | |
+| close_space_medal | num | 关闭空间粉丝勋章显示? | 0: 否 |
+| only_show_wearing | num | 只显示当前佩戴的? | 0: 否 |
+| name | str | 目标用户名 | |
+| icon | str | 目标用户头像 URL | |
+| uid | num | 目标用户 mid | |
+| level | num | 目标用户等级 | |
+
+`data` 对象中 `list` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ------------ | ---- |
+| medal_info | obj | 勋章信息 | |
+| target_name | str | 主播名称 | |
+| target_icon | str | 主播头像 URL | |
+| link | str | 主播主页 URL | |
+| live_status | num | 直播状态 | 0: 未直播 1: 正在直播 2: 轮播中 |
+| offical | num | 主播认证类型 | 参见 [用户认证类型一览](official_role.md) |
+| uinfo_medal | str | 用户勋章信息 | |
+
+`list` 数组中的对象中的 `medal_info` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ---- | -------- | ---- |
+| target_id | num | 主播 mid | |
+| level | num | 勋章等级 | |
+| medal_name | str | 勋章名称 | |
+| medal_color_start | num | 勋章开始颜色 | 十进制(自行转换为16进制) |
+| medal_color_end | num | 勋章结束颜色 | 同上 |
+| medal_color_border | num | 勋章边框颜色 | 同上 |
+| guard_level | num | 守护等级? | 1: 总督 2: 提督 3: 舰长 |
+| wearing_status | num | 佩戴状态 | 0: 未佩戴 1: 佩戴中 |
+| medal_id | num | 勋章 ID | |
+| intimacy | num | 当前亲密度 | |
+| next_intimacy | num | 下一等级所需亲密度 | |
+| today_feed | num | 今日已获得亲密度 | |
+| day_limit | num | 亲密度每日上限? | |
+| guard_icon | str | 守护徽章图标 URL? | |
+| honor_icon | str | 荣誉徽章图标 URL? | |
+
+`list` 数组中的对象中的 `uinfo_medal` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| name | str | 勋章名称 | |
+| level | num | 勋章等级 | |
+| color_start | num | 勋章渐变开始颜色 | 十进制(自行转换为16进制) |
+| color_end | num | 勋章渐变结束颜色 | 同上 |
+| color_border | num | 勋章边框颜色 | 同上 |
+| color | num | 勋章颜色 | 同上 |
+| id | num | 勋章 ID | |
+| typ | num | 勋章类型? | |
+| is_light | num | 是否点亮? | |
+| ruid | num | 主播 mid | |
+| guard_level | num | 大航海等级 | 1: 总督 2: 提督 3: 舰长 |
+| score | num | 勋章分数? | |
+| guard_icon | str | 大航海图标 URL? | 粉丝牌左边的图标 |
+| honor_icon | str | 荣誉徽章图标 URL? | |
+| v2_medal_color_start | str | 勋章开始颜色 | 16进制 |
+| v2_medal_color_end | str | 勋章结束颜色 | 同上 |
+| v2_medal_color_border | str | 勋章边框颜色 | 同上 |
+| v2_medal_color_text | str | 勋章文本色 | 同上 |
+| v2_medal_color_level | str | 勋章等级颜色 | 同上 |
+| user_receive_count | num | 勋章已获得数量? | |
+
+**示例:**
+
+```shell
+curl -G 'https://api.live.bilibili.com/xlive/web-ucenter/user/MedalWall' \
+--url-query 'target_id=293793435' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "medal_info": {
+ "target_id": 178429408,
+ "level": 3,
+ "medal_name": "滑稽果",
+ "medal_color_start": 6067854,
+ "medal_color_end": 6067854,
+ "medal_color_border": 6067854,
+ "guard_level": 0,
+ "wearing_status": 1,
+ "medal_id": 113190,
+ "intimacy": 248,
+ "next_intimacy": 500,
+ "today_feed": 0,
+ "day_limit": 2000,
+ "guard_icon": "",
+ "honor_icon": ""
+ },
+ "target_name": "老弟一号",
+ "target_icon": "https://i1.hdslb.com/bfs/face/21426275f3d3149b96b88783275205ba574c09e3.jpg",
+ "link": "https://space.bilibili.com/178429408",
+ "live_status": 2,
+ "official": 1,
+ "uinfo_medal": {
+ "name": "滑稽果",
+ "level": 3,
+ "color_start": 6067854,
+ "color_end": 6067854,
+ "color_border": 6067854,
+ "color": 0,
+ "id": 113190,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 178429408,
+ "guard_level": 0,
+ "score": 0,
+ "guard_icon": "",
+ "honor_icon": "",
+ "v2_medal_color_start": "#5762A799",
+ "v2_medal_color_end": "#5762A799",
+ "v2_medal_color_border": "#5762A799",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ }
+ },
+ {
+ "medal_info": {
+ "target_id": 15858903,
+ "level": 9,
+ "medal_name": "二技猿",
+ "medal_color_start": 9272486,
+ "medal_color_end": 9272486,
+ "medal_color_border": 9272486,
+ "guard_level": 0,
+ "wearing_status": 0,
+ "medal_id": 159670,
+ "intimacy": 168,
+ "next_intimacy": 1900,
+ "today_feed": 0,
+ "day_limit": 3000,
+ "guard_icon": "",
+ "honor_icon": ""
+ },
+ "target_name": "暮光小猿wzt",
+ "target_icon": "https://i0.hdslb.com/bfs/face/4113913241f83b03301c316fec6e4c3923bef64e.jpg",
+ "link": "https://space.bilibili.com/15858903",
+ "live_status": 0,
+ "official": 0,
+ "uinfo_medal": {
+ "name": "二技猿",
+ "level": 9,
+ "color_start": 9272486,
+ "color_end": 9272486,
+ "color_border": 9272486,
+ "color": 0,
+ "id": 159670,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 15858903,
+ "guard_level": 0,
+ "score": 0,
+ "guard_icon": "",
+ "honor_icon": "",
+ "v2_medal_color_start": "#596FE099",
+ "v2_medal_color_end": "#596FE099",
+ "v2_medal_color_border": "#596FE099",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ }
+ },
+ {
+ "medal_info": {
+ "target_id": 24022863,
+ "level": 7,
+ "medal_name": "粉丝团",
+ "medal_color_start": 6126494,
+ "medal_color_end": 6126494,
+ "medal_color_border": 6126494,
+ "guard_level": 0,
+ "wearing_status": 0,
+ "medal_id": 233401,
+ "intimacy": 1499,
+ "next_intimacy": 1600,
+ "today_feed": 0,
+ "day_limit": 2000,
+ "guard_icon": "",
+ "honor_icon": ""
+ },
+ "target_name": "黄禄轩电脑专用账号",
+ "target_icon": "https://i0.hdslb.com/bfs/face/a70ec7d2a3822980a915ef4b30371af0cbc79132.jpg",
+ "link": "https://space.bilibili.com/24022863",
+ "live_status": 2,
+ "official": 0,
+ "uinfo_medal": {
+ "name": "粉丝团",
+ "level": 7,
+ "color_start": 6126494,
+ "color_end": 6126494,
+ "color_border": 6126494,
+ "color": 0,
+ "id": 233401,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 24022863,
+ "guard_level": 0,
+ "score": 0,
+ "guard_icon": "",
+ "honor_icon": "",
+ "v2_medal_color_start": "#5866C799",
+ "v2_medal_color_end": "#5866C799",
+ "v2_medal_color_border": "#5866C799",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ }
+ },
+ {
+ "medal_info": {
+ "target_id": 1347373376,
+ "level": 6,
+ "medal_name": "Geek范",
+ "medal_color_start": 6126494,
+ "medal_color_end": 6126494,
+ "medal_color_border": 6126494,
+ "guard_level": 0,
+ "wearing_status": 0,
+ "medal_id": 658512,
+ "intimacy": 999,
+ "next_intimacy": 1500,
+ "today_feed": 0,
+ "day_limit": 2000,
+ "guard_icon": "",
+ "honor_icon": ""
+ },
+ "target_name": "GeekLogic",
+ "target_icon": "https://i2.hdslb.com/bfs/face/fc4ba4087efa80dce11dfdd1c2bc07d84fb603b9.jpg",
+ "link": "https://space.bilibili.com/1347373376",
+ "live_status": 0,
+ "official": 1,
+ "uinfo_medal": {
+ "name": "Geek范",
+ "level": 6,
+ "color_start": 6126494,
+ "color_end": 6126494,
+ "color_border": 6126494,
+ "color": 0,
+ "id": 658512,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 1347373376,
+ "guard_level": 0,
+ "score": 0,
+ "guard_icon": "",
+ "honor_icon": "",
+ "v2_medal_color_start": "#5866C799",
+ "v2_medal_color_end": "#5866C799",
+ "v2_medal_color_border": "#5866C799",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ }
+ },
+ {
+ "medal_info": {
+ "target_id": 451664,
+ "level": 5,
+ "medal_name": "粉丝团",
+ "medal_color_start": 6126494,
+ "medal_color_end": 6126494,
+ "medal_color_border": 6126494,
+ "guard_level": 0,
+ "wearing_status": 0,
+ "medal_id": 408689,
+ "intimacy": 799,
+ "next_intimacy": 1000,
+ "today_feed": 0,
+ "day_limit": 2000,
+ "guard_icon": "",
+ "honor_icon": ""
+ },
+ "target_name": "刘师兄_liujun",
+ "target_icon": "https://i2.hdslb.com/bfs/face/90665d1613cc5501a3f7bbc79b5dc83bcc30667d.jpg",
+ "link": "https://space.bilibili.com/451664",
+ "live_status": 0,
+ "official": 0,
+ "uinfo_medal": {
+ "name": "粉丝团",
+ "level": 5,
+ "color_start": 6126494,
+ "color_end": 6126494,
+ "color_border": 6126494,
+ "color": 0,
+ "id": 408689,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 451664,
+ "guard_level": 0,
+ "score": 0,
+ "guard_icon": "",
+ "honor_icon": "",
+ "v2_medal_color_start": "#5866C799",
+ "v2_medal_color_end": "#5866C799",
+ "v2_medal_color_border": "#5866C799",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ }
+ },
+ {
+ "medal_info": {
+ "target_id": 89240844,
+ "level": 5,
+ "medal_name": "六零",
+ "medal_color_start": 6126494,
+ "medal_color_end": 6126494,
+ "medal_color_border": 6126494,
+ "guard_level": 0,
+ "wearing_status": 0,
+ "medal_id": 306526,
+ "intimacy": 799,
+ "next_intimacy": 1000,
+ "today_feed": 0,
+ "day_limit": 2000,
+ "guard_icon": "",
+ "honor_icon": ""
+ },
+ "target_name": "A60_OnE",
+ "target_icon": "https://i0.hdslb.com/bfs/face/483513f7b0533d666fdf7eff96a70b69992056fd.jpg",
+ "link": "https://space.bilibili.com/89240844",
+ "live_status": 0,
+ "official": 0,
+ "uinfo_medal": {
+ "name": "六零",
+ "level": 5,
+ "color_start": 6126494,
+ "color_end": 6126494,
+ "color_border": 6126494,
+ "color": 0,
+ "id": 306526,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 89240844,
+ "guard_level": 0,
+ "score": 0,
+ "guard_icon": "",
+ "honor_icon": "",
+ "v2_medal_color_start": "#5866C799",
+ "v2_medal_color_end": "#5866C799",
+ "v2_medal_color_border": "#5866C799",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ }
+ },
+ {
+ "medal_info": {
+ "target_id": 1850091,
+ "level": 5,
+ "medal_name": "観測者",
+ "medal_color_start": 6126494,
+ "medal_color_end": 6126494,
+ "medal_color_border": 6126494,
+ "guard_level": 0,
+ "wearing_status": 0,
+ "medal_id": 118910,
+ "intimacy": 98,
+ "next_intimacy": 1000,
+ "today_feed": 0,
+ "day_limit": 2000,
+ "guard_icon": "",
+ "honor_icon": ""
+ },
+ "target_name": "Jannchie见齐",
+ "target_icon": "https://i0.hdslb.com/bfs/face/983034448f81f45f05956d0455a86fe0639d6a36.jpg",
+ "link": "https://space.bilibili.com/1850091",
+ "live_status": 2,
+ "official": 1,
+ "uinfo_medal": {
+ "name": "観測者",
+ "level": 5,
+ "color_start": 6126494,
+ "color_end": 6126494,
+ "color_border": 6126494,
+ "color": 0,
+ "id": 118910,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 1850091,
+ "guard_level": 0,
+ "score": 0,
+ "guard_icon": "",
+ "honor_icon": "",
+ "v2_medal_color_start": "#5866C799",
+ "v2_medal_color_end": "#5866C799",
+ "v2_medal_color_border": "#5866C799",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ }
+ },
+ {
+ "medal_info": {
+ "target_id": 4911405,
+ "level": 4,
+ "medal_name": "毛狐狸",
+ "medal_color_start": 6067854,
+ "medal_color_end": 6067854,
+ "medal_color_border": 6067854,
+ "guard_level": 0,
+ "wearing_status": 0,
+ "medal_id": 18887,
+ "intimacy": 658,
+ "next_intimacy": 700,
+ "today_feed": 0,
+ "day_limit": 2000,
+ "guard_icon": "",
+ "honor_icon": ""
+ },
+ "target_name": "粉毛变态老狐狸",
+ "target_icon": "https://i0.hdslb.com/bfs/face/5924e9201ac87066e76534472303b636a9961647.jpg",
+ "link": "https://space.bilibili.com/4911405",
+ "live_status": 0,
+ "official": 0,
+ "uinfo_medal": {
+ "name": "毛狐狸",
+ "level": 4,
+ "color_start": 6067854,
+ "color_end": 6067854,
+ "color_border": 6067854,
+ "color": 0,
+ "id": 18887,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 4911405,
+ "guard_level": 0,
+ "score": 0,
+ "guard_icon": "",
+ "honor_icon": "",
+ "v2_medal_color_start": "#5762A799",
+ "v2_medal_color_end": "#5762A799",
+ "v2_medal_color_border": "#5762A799",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ }
+ },
+ {
+ "medal_info": {
+ "target_id": 130914376,
+ "level": 3,
+ "medal_name": "江草",
+ "medal_color_start": 6067854,
+ "medal_color_end": 6067854,
+ "medal_color_border": 6067854,
+ "guard_level": 0,
+ "wearing_status": 0,
+ "medal_id": 166326,
+ "intimacy": 463,
+ "next_intimacy": 500,
+ "today_feed": 0,
+ "day_limit": 2000,
+ "guard_icon": "",
+ "honor_icon": ""
+ },
+ "target_name": "江灵夏草",
+ "target_icon": "https://i1.hdslb.com/bfs/face/63eb615514fddbc6024a34ddcacfb0bc6103d019.jpg",
+ "link": "https://space.bilibili.com/130914376",
+ "live_status": 0,
+ "official": 1,
+ "uinfo_medal": {
+ "name": "江草",
+ "level": 3,
+ "color_start": 6067854,
+ "color_end": 6067854,
+ "color_border": 6067854,
+ "color": 0,
+ "id": 166326,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 130914376,
+ "guard_level": 0,
+ "score": 0,
+ "guard_icon": "",
+ "honor_icon": "",
+ "v2_medal_color_start": "#5762A799",
+ "v2_medal_color_end": "#5762A799",
+ "v2_medal_color_border": "#5762A799",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ }
+ },
+ {
+ "medal_info": {
+ "target_id": 316568752,
+ "level": 3,
+ "medal_name": "SEAL",
+ "medal_color_start": 6067854,
+ "medal_color_end": 6067854,
+ "medal_color_border": 6067854,
+ "guard_level": 0,
+ "wearing_status": 0,
+ "medal_id": 312420,
+ "intimacy": 428,
+ "next_intimacy": 500,
+ "today_feed": 0,
+ "day_limit": 2000,
+ "guard_icon": "",
+ "honor_icon": ""
+ },
+ "target_name": "马督工",
+ "target_icon": "https://i1.hdslb.com/bfs/face/1c56737dfc0deffffc31c78e0cefb0c3ecf7e000.jpg",
+ "link": "https://space.bilibili.com/316568752",
+ "live_status": 0,
+ "official": 1,
+ "uinfo_medal": {
+ "name": "SEAL",
+ "level": 3,
+ "color_start": 6067854,
+ "color_end": 6067854,
+ "color_border": 6067854,
+ "color": 0,
+ "id": 312420,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 316568752,
+ "guard_level": 0,
+ "score": 0,
+ "guard_icon": "",
+ "honor_icon": "",
+ "v2_medal_color_start": "#5762A799",
+ "v2_medal_color_end": "#5762A799",
+ "v2_medal_color_border": "#5762A799",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ }
+ },
+ {
+ "medal_info": {
+ "target_id": 633003,
+ "level": 3,
+ "medal_name": "器材党",
+ "medal_color_start": 6067854,
+ "medal_color_end": 6067854,
+ "medal_color_border": 6067854,
+ "guard_level": 0,
+ "wearing_status": 0,
+ "medal_id": 57027,
+ "intimacy": 198,
+ "next_intimacy": 500,
+ "today_feed": 0,
+ "day_limit": 2000,
+ "guard_icon": "",
+ "honor_icon": ""
+ },
+ "target_name": "和光Channel",
+ "target_icon": "https://i0.hdslb.com/bfs/face/c34413202f3f4ab6c7955a2c9ca5a9ac8e86d8c2.jpg",
+ "link": "https://space.bilibili.com/633003",
+ "live_status": 0,
+ "official": 0,
+ "uinfo_medal": {
+ "name": "器材党",
+ "level": 3,
+ "color_start": 6067854,
+ "color_end": 6067854,
+ "color_border": 6067854,
+ "color": 0,
+ "id": 57027,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 633003,
+ "guard_level": 0,
+ "score": 0,
+ "guard_icon": "",
+ "honor_icon": "",
+ "v2_medal_color_start": "#5762A799",
+ "v2_medal_color_end": "#5762A799",
+ "v2_medal_color_border": "#5762A799",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ }
+ },
+ {
+ "medal_info": {
+ "target_id": 5760446,
+ "level": 2,
+ "medal_name": "花泪",
+ "medal_color_start": 6067854,
+ "medal_color_end": 6067854,
+ "medal_color_border": 6067854,
+ "guard_level": 0,
+ "wearing_status": 0,
+ "medal_id": 32283,
+ "intimacy": 298,
+ "next_intimacy": 300,
+ "today_feed": 0,
+ "day_limit": 2000,
+ "guard_icon": "",
+ "honor_icon": ""
+ },
+ "target_name": "花儿不哭",
+ "target_icon": "https://i2.hdslb.com/bfs/face/4f220d57ca877167f3efdc60e40d0cb53ca58b72.jpg",
+ "link": "https://space.bilibili.com/5760446",
+ "live_status": 0,
+ "official": 1,
+ "uinfo_medal": {
+ "name": "花泪",
+ "level": 2,
+ "color_start": 6067854,
+ "color_end": 6067854,
+ "color_border": 6067854,
+ "color": 0,
+ "id": 32283,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 5760446,
+ "guard_level": 0,
+ "score": 0,
+ "guard_icon": "",
+ "honor_icon": "",
+ "v2_medal_color_start": "#5762A799",
+ "v2_medal_color_end": "#5762A799",
+ "v2_medal_color_border": "#5762A799",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ }
+ },
+ {
+ "medal_info": {
+ "target_id": 3644545,
+ "level": 2,
+ "medal_name": "东方狗",
+ "medal_color_start": 6067854,
+ "medal_color_end": 6067854,
+ "medal_color_border": 6067854,
+ "guard_level": 0,
+ "wearing_status": 0,
+ "medal_id": 249059,
+ "intimacy": 98,
+ "next_intimacy": 300,
+ "today_feed": 0,
+ "day_limit": 2000,
+ "guard_icon": "",
+ "honor_icon": ""
+ },
+ "target_name": "白倉カナ",
+ "target_icon": "https://i1.hdslb.com/bfs/face/ae839f221a5812683fe0a3967f4a612dd65a05d2.jpg",
+ "link": "https://space.bilibili.com/3644545",
+ "live_status": 0,
+ "official": 0,
+ "uinfo_medal": {
+ "name": "东方狗",
+ "level": 2,
+ "color_start": 6067854,
+ "color_end": 6067854,
+ "color_border": 6067854,
+ "color": 0,
+ "id": 249059,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 3644545,
+ "guard_level": 0,
+ "score": 0,
+ "guard_icon": "",
+ "honor_icon": "",
+ "v2_medal_color_start": "#5762A799",
+ "v2_medal_color_end": "#5762A799",
+ "v2_medal_color_border": "#5762A799",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ }
+ },
+ {
+ "medal_info": {
+ "target_id": 614801,
+ "level": 1,
+ "medal_name": "神油",
+ "medal_color_start": 6067854,
+ "medal_color_end": 6067854,
+ "medal_color_border": 6067854,
+ "guard_level": 0,
+ "wearing_status": 0,
+ "medal_id": 627,
+ "intimacy": 119,
+ "next_intimacy": 201,
+ "today_feed": 0,
+ "day_limit": 2000,
+ "guard_icon": "",
+ "honor_icon": ""
+ },
+ "target_name": "神游八方",
+ "target_icon": "https://i2.hdslb.com/bfs/face/98f8e0f609ff2403cc086f7254f388336b6f5366.jpg",
+ "link": "https://space.bilibili.com/614801",
+ "live_status": 0,
+ "official": 1,
+ "uinfo_medal": {
+ "name": "神油",
+ "level": 1,
+ "color_start": 6067854,
+ "color_end": 6067854,
+ "color_border": 6067854,
+ "color": 0,
+ "id": 627,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 614801,
+ "guard_level": 0,
+ "score": 0,
+ "guard_icon": "",
+ "honor_icon": "",
+ "v2_medal_color_start": "#5762A799",
+ "v2_medal_color_end": "#5762A799",
+ "v2_medal_color_border": "#5762A799",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ }
+ },
+ {
+ "medal_info": {
+ "target_id": 12246,
+ "level": 1,
+ "medal_name": "纯色派",
+ "medal_color_start": 6067854,
+ "medal_color_end": 6067854,
+ "medal_color_border": 6067854,
+ "guard_level": 0,
+ "wearing_status": 0,
+ "medal_id": 5171,
+ "intimacy": 99,
+ "next_intimacy": 201,
+ "today_feed": 0,
+ "day_limit": 2000,
+ "guard_icon": "",
+ "honor_icon": ""
+ },
+ "target_name": "囧仙",
+ "target_icon": "https://i0.hdslb.com/bfs/face/b7ee967282a33a59908218df5b240b45f51afda8.jpg",
+ "link": "https://space.bilibili.com/12246",
+ "live_status": 0,
+ "official": 1,
+ "uinfo_medal": {
+ "name": "纯色派",
+ "level": 1,
+ "color_start": 6067854,
+ "color_end": 6067854,
+ "color_border": 6067854,
+ "color": 0,
+ "id": 5171,
+ "typ": 0,
+ "is_light": 1,
+ "ruid": 12246,
+ "guard_level": 0,
+ "score": 0,
+ "guard_icon": "",
+ "honor_icon": "",
+ "v2_medal_color_start": "#5762A799",
+ "v2_medal_color_end": "#5762A799",
+ "v2_medal_color_border": "#5762A799",
+ "v2_medal_color_text": "#FFFFFFFF",
+ "v2_medal_color_level": "#000B7099",
+ "user_receive_count": 0
+ }
+ }
+ ],
+ "count": 15,
+ "close_space_medal": 0,
+ "only_show_wearing": 0,
+ "name": "社会易姐QwQ",
+ "icon": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg",
+ "uid": 645769214,
+ "level": 6
+ }
+}
+```
+
+
diff --git a/docs/user/official_role.md b/docs/user/official_role.md
new file mode 100644
index 0000000..fb70aac
--- /dev/null
+++ b/docs/user/official_role.md
@@ -0,0 +1,12 @@
+# 用户认证类型一览
+| ID | 认证类型 | 详细类型 |
+| -- | ------- | ------- |
+| 0 | 无 | |
+| 1 | 个人认证 | 知名UP主 |
+| 2 | 个人认证 | 大V达人 |
+| 3 | 机构认证 | 企业 |
+| 4 | 机构认证 | 组织 |
+| 5 | 机构认证 | 媒体 |
+| 6 | 机构认证 | 政府 |
+| 7 | 个人认证 | 高能主播 |
+| 9 | 个人认证 | 社会知名人士 |
\ No newline at end of file
diff --git a/docs/user/register.md b/docs/user/register.md
new file mode 100644
index 0000000..21be1d6
--- /dev/null
+++ b/docs/user/register.md
@@ -0,0 +1,100 @@
+# 用户注册
+
+## 人机验证
+
+[完成人机验证(参考验证登录)](../login/login_action/readme.md#验证登录)
+
+完成后得到`key`, `challenge`, `validate`, `seccode`四个参数
+
+## 发送短信验证码
+
+[发送短信验证码(参考短信登录)](../login/login_action/SMS.md#发送短信验证码(web端))
+
+**注意不同的是这里type=1而非21**,推测此参数决定短信内容
+
+```bash
+curl 'https://passport.bilibili.com/web/sms/general/v2/send' \
+ --data-urlencode 'key=6eeb28e7bbd64b389da2be3a2778c7e3' \
+ --data-urlencode 'captchaType=6' \
+ --data-urlencode 'type=1' \
+ --data-urlencode 'cid=1' \
+ --data-urlencode 'tel=13888888888' \
+ --data-urlencode 'challenge=c52148f88a28b6011db52bb213483ee8' \
+ --data-urlencode 'validate=a98841cd6ea58e1b1f5783fca73cddb6' \
+ --data-urlencode 'seccode=a98841cd6ea58e1b1f5783fca73cddb6|jordan'
+```
+
+
+查看示例
+
+```json
+{
+ "code": 0,
+ "message": "验证码短信已下发"
+}
+```
+
+
+
+## 提交注册请求
+
+> https://passport.bilibili.com/web/reg/tel
+
+*请求方式:POST*
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------- | ---- | ---------------- | ------ | ------------------------------------------------------------ |
+| cid | num | 国际冠字码 | 必要 | 可以从 [获取国际冠字码](../login/login_action/SMS.md#获取国际冠字码_web端) 接口中获取 |
+| tel | num | 手机号码 | 必要 | |
+| code | num | 短信验证码 | 必要 | |
+| nickName | str | 昵称 | 必要 | |
+| pwd | str | 密码 | 必要 | 密码为明文 |
+| plat | num | 0 | 必要 | 平台? |
+| gourl | str | 注册成功跳转地址 | 非必要 | 默认为主页`https://www.bilibili.com/` |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------------------------- |
+| code | num | 返回值 | 0:成功 1005:验证码错误 1007:验证码过期 |
+| message | str | 错误信息 | 成功时无此字段 |
+| data | obj | 信息本体 | 只在成功时存在 |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ---------- | ----------------------------- |
+| redirectUrl | str | 跳转链接 | |
+| hint | str | "注册成功" | 成功后不提示成功还能提示什么? |
+| in_reg_audit | num | (?) | |
+
+```bash
+curl 'https://passport.bilibili.com/web/reg/tel' \
+ --data-urlencode 'plat=0' \
+ --data-urlencode 'cid=1' \
+ --data-urlencode 'tel=13888888888' \
+ --data-urlencode 'code=121314' \
+ --data-urlencode 'nickName=萌系小妹纸わ'
+ --data-urlencode 'pwd=Password1234' \
+ --data-urlencode 'gourl=https://www.bilibili.com'
+```
+
+
+查看示例
+
+```json
+{
+ "code": 0,
+ "data": {
+ "redirectUrl": "https://www.bilibili.com",
+ "hint": "注册成功",
+ "in_reg_audit": 0
+ }
+}
+```
+
+
\ No newline at end of file
diff --git a/docs/user/relation.md b/docs/user/relation.md
new file mode 100644
index 0000000..6b5d143
--- /dev/null
+++ b/docs/user/relation.md
@@ -0,0 +1,2648 @@
+# 用户关系相关
+
+## 查询关系列表
+
+
+
+### 关系列表对象
+
+以下说明中的 “目标用户” 指被查询的用户,“对方” 指返回的关系列表中的用户。
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ------------------------------------------- | -------------------------- | ------------------------------------------------------------ |
+| mid | num | 用户 mid | |
+| attribute | num | 对方对于**自己**的关系属性 | 0:未关注 ~~1:悄悄关注(现已下线)~~ 2:已关注 6:已互粉 128:已拉黑 |
+| mtime | num | 对方关注目标用户时间 | 秒级时间戳 互关后刷新 |
+| tag | 默认分组:null 存在至少一个分组:array | 目标用户将对方分组到的 id | |
+| special | num | 目标用户特别关注对方标识 | 0:否 1:是 |
+| contract_info | obj | 契约计划相关信息 | |
+| uname | str | 用户昵称 | |
+| face | str | 用户头像url | |
+| sign | str | 用户签名 | |
+| face_nft | num | 是否为 NFT 头像 | 0:非 NFT 头像 1:NFT 头像 |
+| official_verify | obj | 认证信息 | |
+| vip | obj | 会员信息 | |
+| name_render | 有效时:obj 无效时:null | 昵称渲染信息 | |
+| nft_icon | str | (?) | |
+| rec_reason | str | 推荐该用户的原因 | 大多数情况下为空;如:`xxx关注了TA`、`xx粉丝 xx视频` |
+| track_id | str | 内部记录id | 大多数情况下为空;如:`up_rec_0.router-main-2021485-5f84c987cf-dv8fg.1746380060327.607` |
+| follow_time | str | (?) | |
+
+`list`中的对象中的`tag`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------------------ | ---- |
+| 0 | num | 位于分组 1 的分组 id | |
+| n | num | 位于分组(n+1)的分组 id | |
+| …… | num | …… | …… |
+
+`list`中的对象中的`contract_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | ------------------------------ | ----------------------------------------------------------- |
+| is_contract | bool | 目标用户是否为对方的契约者 | 仅当为 `true` 时才有此项 |
+| is_contractor | bool | 对方是否为目标用户的契约者 | 仅当为 `true` 时才有此项 |
+| ts | num | 对方成为目标用户的契约者的时间 | 秒级时间戳,仅当 `is_contractor` 项的值为 `true` 时才有此项 |
+| user_attr | num | 对方作为目标用户的契约者的属性 | 1:老粉 否则为原始粉丝 仅当有特殊属性时才有此项 |
+
+`list`中的对象中的`official_verify`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------ | ------------------- |
+| type | num | 用户认证类型 | -1:无 0:UP 主认证 1:机构认证 |
+| desc | str | 用户认证信息 | 无为空 |
+
+`list`中的对象中的`vip`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | ------------ | ----------------------------------------------- |
+| vipType | num | 会员类型 | 0:无 1:月度大会员 2:年度以上大会员 |
+| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 |
+| dueRemark | str | (?) | |
+| accessStatus | num | (?) | |
+| vipStatus | num | 大会员状态 | 0:无 1:有 |
+| vipStatusWarn | str | (?) | |
+| themeType | num | (?) | |
+| label | obj | (?) | |
+
+`vip`中的`label`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | ---- |
+| path | str | (?) | |
+
+### 查询用户粉丝明细(新)
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+本接口只有登录、标头 `referer` 为 `bilibili.com` 下的子域名、UA 不含 `python` 时才会返回列表
+
+由于接口实现不同,本接口的返回可能出现以下三种情况:
+
+1. 返回列表按关注时间排序,此时当前用户**仅返回前 1000 名粉丝**,其他用户仅返回前 100 名粉丝,若继续往后查询则返回空列表
+2. 返回列表按粉丝 mid 的**文本形式**排序,此时对于任意用户均可返回全部粉丝
+3. 返回列表按照**智能推荐算法**排序,此时请求参数 `from=main` 且目标用户为自己,**仅返回前 1000 名粉丝**
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| -------------- | ---- | ---------------------- | ------------ | ------------------------------------------------------------------- |
+| vmid | num | 目标用户 mid | 必要 | |
+| ps | num | 每页项数 | 非必要 | 默认为 50 |
+| pn | num | 页码 | 非必要 | 默认为 1 |
+| offset | str | 偏移量 | 非必要 | 从上次请求的响应数据中的 `data.offset` 获取 此项有效且不为 `rcmd` 时会从此偏移量开始返回粉丝列表,忽略参数 `pn` |
+| last_access_ts | num | 上次访问粉丝列表的时间 | 非必要 | 秒级时间戳,从[获取自己粉丝列表的未读状态](#获取自己粉丝列表的未读状态)接口获取 当按照**智能推荐算法**排序时,会优先展示此时间后关注的粉丝 |
+| from | str | 请求来源 | 非必要 | 当为 `main` 且目标用户为自己时,粉丝列表按照**智能推荐算法**排序,此时响应数据中的 `data.list` 的成员中的 `rec_reason` 与 `track_id` 为非空 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -352:请求被拦截 -400:请求错误 22118:由于该用户隐私设置,粉丝列表不可见 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | -------- | ---- |
+| list | array | 明细列表 | |
+| offset | str | 偏移量 | 供下次请求使用 普通:`{列表最后的粉丝的 mtime}:{列表最后的粉丝的 mid}` 智能推荐算法:`rcmd` |
+| re_version | num | (?) | |
+| total | num | 粉丝总数 | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------ | ---------------------------------- |
+| 0 | obj | 粉丝 1 | 详见 [关系列表对象](#关系列表对象) |
+| n | obj | 粉丝 (n+1) | |
+| …… | obj | …… | …… |
+
+**示例:**
+
+获取用户`mid=293793435`的粉丝明细
+
+```shell
+curl -G 'https://api.bilibili.com/x/relation/fans' \
+ --data-urlencode 'vmid=293793435' \
+ --data-urlencode 'ps=2' \
+ --data-urlencode 'pn=1' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "mid": 289796932,
+ "attribute": 0,
+ "mtime": 1746199088,
+ "tag": null,
+ "special": 0,
+ "contract_info": {},
+ "uname": "Astlinga_星灵",
+ "face": "https://i1.hdslb.com/bfs/face/005264524d05c0b8c132acc3ee88bb839351025b.jpg",
+ "sign": "",
+ "face_nft": 0,
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1734278400000,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 0,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "avatar_subscript_url": ""
+ },
+ "name_render": {},
+ "nft_icon": "",
+ "rec_reason": "",
+ "track_id": "",
+ "follow_time": ""
+ },
+ {
+ "mid": 3494375621396821,
+ "attribute": 0,
+ "mtime": 1746098997,
+ "tag": null,
+ "special": 0,
+ "contract_info": {},
+ "uname": "JSRCode",
+ "face": "https://i1.hdslb.com/bfs/face/f6c74700c72d27ae224c5311634b4a3770e3cdcf.jpg",
+ "sign": "一个喜欢码代码的高中牲",
+ "face_nft": 0,
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 0,
+ "vipDueDate": 0,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 0,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "avatar_subscript_url": ""
+ },
+ "name_render": {},
+ "nft_icon": "",
+ "rec_reason": "",
+ "track_id": "",
+ "follow_time": ""
+ }
+ ],
+ "offset": "1746098997:3494375621396821",
+ "re_version": 0,
+ "total": 3776
+ }
+}
+```
+
+
+
+### 查询用户粉丝明细(旧)
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+本接口只有登录、标头 `referer` 为 `bilibili.com` 下的子域名、UA 不含 `python` 时才会返回列表
+
+**本接口仅可返回前 1000 名粉丝**,若继续往后查询则返回空列表
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | ------------------------------------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| vmid | num | 目标用户 mid | 必要 | |
+| ps | num | 每页项数 | 非必要 | 默认为 50 |
+| pn | num | 页码 | 非必要 | 默认为 1 仅可查看前 1000 名粉丝 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -352:请求被拦截 -400:请求错误 22118:由于该用户隐私设置,粉丝列表不可见 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | -------- | ---- |
+| list | array | 明细列表 | |
+| re_version | num | (?) | |
+| total | num | 粉丝总数 | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------ | ---------------------------------- |
+| 0 | obj | 粉丝 1 | 详见 [关系列表对象](#关系列表对象) |
+| n | obj | 粉丝 (n+1) | 按照添加顺序排列 |
+| …… | obj | …… | …… |
+
+**示例:**
+
+获取用户`mid=293793435`的粉丝明细
+
+```shell
+curl -G 'https://api.bilibili.com/x/relation/followers' \
+ --data-urlencode 'vmid=293793435' \
+ --data-urlencode 'ps=2' \
+ --data-urlencode 'pn=1' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "mid": 289796932,
+ "attribute": 0,
+ "mtime": 1746199088,
+ "tag": null,
+ "special": 0,
+ "contract_info": {},
+ "uname": "Astlinga_星灵",
+ "face": "https://i1.hdslb.com/bfs/face/005264524d05c0b8c132acc3ee88bb839351025b.jpg",
+ "sign": "",
+ "face_nft": 0,
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1734278400000,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 0,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "avatar_subscript_url": ""
+ },
+ "name_render": {},
+ "nft_icon": "",
+ "rec_reason": "",
+ "track_id": "",
+ "follow_time": ""
+ },
+ {
+ "mid": 3494375621396821,
+ "attribute": 0,
+ "mtime": 1746098997,
+ "tag": null,
+ "special": 0,
+ "contract_info": {},
+ "uname": "JSRCode",
+ "face": "https://i1.hdslb.com/bfs/face/f6c74700c72d27ae224c5311634b4a3770e3cdcf.jpg",
+ "sign": "一个喜欢码代码的高中牲",
+ "face_nft": 0,
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 0,
+ "vipDueDate": 0,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 0,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "avatar_subscript_url": ""
+ },
+ "name_render": {},
+ "nft_icon": "",
+ "rec_reason": "",
+ "track_id": "",
+ "follow_time": ""
+ }
+ ],
+ "re_version": 0,
+ "total": 3776
+ }
+}
+```
+
+
+
+### 获取自己粉丝列表的未读状态
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+调用此接口后会重置未读状态
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | -------------------------- | ---------------------------------- |
+| count | num | 自上次访问后新增的粉丝个数 | |
+| time | num | 上次访问粉丝列表时间 | 秒级时间戳;当没有新增粉丝时为 `0` |
+
+**示例:**
+
+```shell
+curl 'https://api.bilibili.com/x/relation/followers/unread/count' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "count": 55,
+ "time": 1743677191
+ }
+}
+```
+
+
+
+### 查询用户关注明细
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+本接口只有登录、标头 `referer` 为 `bilibili.com` 下的子域名、UA 不含 `python` 时才会返回列表
+
+登录可看当前用户全部,其他用户仅可查看前 100 个,访问超过 100 个时返回空列表(但 `code` 值为 `0`)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | ------------------------------------------------------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| vmid | num | 目标用户 mid | 必要 | |
+| order_type | str | 排序方式 | 非必要 | 当目标用户为自己时有效 按照关注顺序排列:留空 按照最常访问排列:attention |
+| ps | num | 每页项数 | 非必要 | 默认为 50 |
+| pn | num | 页码 | 非必要 | 默认为 1 其他用户仅可查看前 100 个 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------------------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -352:请求被拦截 -400:请求错误 22115:用户已设置隐私,无法查看 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | -------- | ---- |
+| list | array | 明细列表 | |
+| re_version | num | (?) | |
+| total | num | 关注总数 | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------- | -------------------------------- |
+| 0 | obj | 关注1 | 见 [关系列表对象](#关系列表对象) |
+| n | obj | 关注(n+1) | 按照添加顺序排列 |
+| …… | obj | …… | …… |
+
+**示例:**
+
+获取用户`mid=293793435`的关注明细,按照关注顺序
+
+```shell
+curl -G 'https://api.bilibili.com/x/relation/followings' \
+ --data-urlencode 'vmid=293793435' \
+ --data-urlencode 'order_type=' \
+ --data-urlencode 'ps=2' \
+ --data-urlencode 'pn=1' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [{
+ "mid": 14082,
+ "attribute": 2,
+ "mtime": 1584271945,
+ "tag": null,
+ "special": 0,
+ "contract_info": {},
+ "uname": "山新",
+ "face": "https://i0.hdslb.com/bfs/face/74c82caee6d9eb623e56161ea8ed6d68afabfeae.jpg",
+ "sign": "都说了是天依爹地,不是妈咪。\r私信有点多回复不过来~商业合作啥的请移步Weibo私信@山新 哦哦哦~",
+ "official_verify": {
+ "type": 0,
+ "desc": "配音演员、声优。洛天依声源提供者。"
+ },
+ "vip": {
+ "vipType": 2,
+ "vipDueDate": 1601654400000,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 1,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "avatar_subscript_url": ""
+ },
+ "name_render": {},
+ "nft_icon": "",
+ "rec_reason": "",
+ "track_id": "",
+ "follow_time": ""
+ }, {
+ "mid": 420831218,
+ "attribute": 2,
+ "mtime": 1584208169,
+ "tag": [207542],
+ "special": 0,
+ "contract_info": {},
+ "uname": "支付宝Alipay",
+ "face": "https://i2.hdslb.com/bfs/face/aaf18aeb2d9822e28a590bd8d878572ca8c59e04.jpg",
+ "sign": "阿支来了,关注点赞转发投币四连走起!",
+ "official_verify": {
+ "type": 1,
+ "desc": "支付宝官方账号"
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1585065600000,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 1,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "avatar_subscript_url": ""
+ },
+ "name_render": {},
+ "nft_icon": "",
+ "rec_reason": "",
+ "track_id": "",
+ "follow_time": ""
+ }],
+ "re_version": 0,
+ "total": 1028
+ }
+}
+```
+
+
+
+### 查询用户关注明细2
+
+>
+
+*请求方式:GET*
+
+仅可查看前 5 页,对于已设置可见性隐私关注列表的用户,响应数据中的 `data.list` 为 null,且 `data.total` 为0
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------ | ------ | ----------------------------- |
+| vmid | num | 目标用户 mid | 必要 | |
+| order | str | 排序方式 | 非必要 | 按照降序排列:desc 按照升序排列:asc 默认降序排列 |
+| ps | num | 每页项数 | 非必要 | 默认为 50 |
+| pn | num | 页码 | 非必要 | 默认为 1 仅可查看前 5 页 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 22007:访问超过 5 页 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | -------- | ---- |
+| list | array | 明细列表 | |
+| re_version | num | (?) | |
+| total | num | 关注总数 | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------- | --------------------------------------------- |
+| 0 | obj | 关注 1 | 与 [关系列表对象](#关系列表对象) 数据结构**不同** |
+| n | obj | 关注(n+1) | 按照添加顺序排列 |
+| …… | obj | …… | …… |
+
+数组`list`中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ---------------------------------------- | ------------ | --------------------------------------- |
+| mid | num | 用户 mid | |
+| attribute | num | 关注属性 | 0:未关注 2:已关注 6:已互粉 |
+| mtime | num | 关注对方时间 | 时间戳 互关后刷新 |
+| tag | 默认分组:null 存在至少一个分组:array | 分组 id | |
+| special | num | 特别关注标志 | 0:否 1:是 |
+| uname | str | 用户昵称 | |
+| face | str | 用户头像 url | |
+| sign | str | 用户签名 | |
+| official_verify | obj | 认证信息 | |
+| vip | obj | 会员信息 | |
+| live | num | 是否直播 | 0:未直播 1:直播中 |
+
+数组`list`中的对象中的`tag`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------------------ | ---- |
+| 0 | num | 位于分组 1 的分组 id | |
+| n | num | 位于分组(n+1)的分组 id | |
+| …… | num | …… | …… |
+
+`list`中的对象中的`official_verify`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------ | ------------------- |
+| type | num | 用户认证类型 | -1:无 0:UP主认证 1:机构认证 |
+| desc | str | 用户认证信息 | 无为空 |
+
+`list`中的对象中的`vip`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | ------------ | ----------------------------------------------- |
+| vipType | num | 会员类型 | 0:无 1:月度大会员 2:年度以上大会员 |
+| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 |
+| dueRemark | str | (?) | |
+| accessStatus | num | (?) | |
+| vipStatus | num | 大会员状态 | 0:无 1:有 |
+| vipStatusWarn | str | (?) | |
+| themeType | num | (?) | |
+| label | obj | (?) | |
+
+`vip`中的`label`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------ | ---- |
+| path | str | (?) | |
+
+**示例:**
+
+获取用户`mid=293793435`的关注明细,按照关注顺序
+
+```shell
+curl -G 'https://app.biliapi.net/x/v2/relation/followings' \
+ --data-urlencode 'vmid=293793435' \
+ --data-urlencode 'ps=2' \
+ --data-urlencode 'pn=1' \
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [{
+ "mid": 14082,
+ "attribute": 2,
+ "mtime": 1584271945,
+ "tag": null,
+ "special": 0,
+ "uname": "山新",
+ "face": "https://i0.hdslb.com/bfs/face/74c82caee6d9eb623e56161ea8ed6d68afabfeae.jpg",
+ "sign": "都说了是天依爹地,不是妈咪。\r私信有点多回复不过来~商业合作啥的请移步Weibo私信@山新 哦哦哦~",
+ "official_verify": {
+ "type": 0,
+ "desc": "配音演员、声优。洛天依声源提供者。"
+ },
+ "vip": {
+ "vipType": 2,
+ "vipDueDate": 1601654400000,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 1,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": ""
+ }
+ },
+ "live": 0
+ }, {
+ "mid": 420831218,
+ "attribute": 2,
+ "mtime": 1584208169,
+ "tag": [207542],
+ "special": 0,
+ "uname": "支付宝Alipay",
+ "face": "https://i2.hdslb.com/bfs/face/aaf18aeb2d9822e28a590bd8d878572ca8c59e04.jpg",
+ "sign": "阿支来了,关注点赞转发投币四连走起!",
+ "official_verify": {
+ "type": 1,
+ "desc": "支付宝官方账号"
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1585065600000,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 1,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": ""
+ }
+ },
+ "live": 0
+ }],
+ "re_version": 3228575555,
+ "total": 699
+ }
+}
+```
+
+
+
+### 查询用户关注明细3
+
+>
+
+*请求方式:GET*
+
+对于设置了可见性隐私关注列表的用户会返回空列表
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------ | ----------- | -------- |
+| vmid | num | 目标用户mid | 必要 | |
+| ps | num | 每页项数 | 非必要 | 默认为20 |
+| pn | num | 页码 | 非必要 | 默认为1 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ---------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 成功时无此项 |
+| data | obj | 信息本体 | 失败时无此项 |
+| ts | num | 当前时间戳 | 单位为毫秒 |
+| request_id | str | 请求id | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | -------- | ------------ |
+| list | array | 明细列表 | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---------------- |
+| 0 | obj | 关注1 | |
+| n | obj | 关注(n+1) | 按照关注顺序排列 |
+| …… | obj | …… | …… |
+
+数组`list`中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ---- | ------------------------------ | --------------------------------------- |
+| mid | str | 用户mid | |
+| attribute | num | 对方对于**目标用户**的关注属性 | 0:未关注 2:已关注 6:已互粉 |
+| uname | str | 用户昵称 | |
+| face | str | 用户头像url | |
+| attention_display | obj | 用户认证信息 | |
+
+`attention_display`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ------------------------------------------------------------ |
+| type | num | 是否认证 | 0:无 1:UP主专业认证 2:UP主认证 3:机构认证 |
+| desc | str | 认证信息 | |
+
+**示例:**
+
+获取用户`mid=293793435`的关注明细
+
+```shell
+curl -G 'https://line3-h5-mobile-api.biligame.com/game/center/h5/user/relationship/following_list' \
+ --data-urlencode 'vmid=293793435' \
+ --data-urlencode 'ps=2' \
+ --data-urlencode 'pn=1'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "data": {
+ "list": [{
+ "mid": "14082",
+ "attribute": 2,
+ "uname": "山新",
+ "face": "https://i0.hdslb.com/bfs/face/74c82caee6d9eb623e56161ea8ed6d68afabfeae.jpg",
+ "attestation_display": { "type": 0, "desc": "" }
+ }, {
+ "mid": "420831218",
+ "attribute": 2,
+ "uname": "支付宝Alipay",
+ "face": "https://i2.hdslb.com/bfs/face/aaf18aeb2d9822e28a590bd8d878572ca8c59e04.jpg",
+ "attestation_display": { "type": 3, "desc": "bilibili机构认证:支付宝官方账号" }
+ }]
+ },
+ "ts": 1677410818395,
+ "request_id": "d9d541b9f2d24e21821e2d6d2d16c17d"
+}
+```
+
+
+
+### 搜索关注明细
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | --------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| vmid | str | 目标用户 mid | 必要 | |
+| name | str | 搜索关键词 | 非必要 | |
+| ps | num | 每页项数 | 非必要 | 默认为 50 |
+| pn | num | 页码 | 非必要 | 默认为 1 |
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 22007:访问超过 5 页 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | -------- | ---- |
+| list | array | 明细列表 | |
+| re_version | num | (?) | |
+| total | num | 关注总数 | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | -------------------------------- |
+| 0 | obj | 匹配项目 1 | 见 [关系列表对象](#关系列表对象) |
+| n | obj | 匹配项目(n+1) | 按照添加顺序排列 |
+| …… | obj | …… | …… |
+
+**示例:**
+
+搜索我的关注列表中关键词`warma`
+
+```shell
+curl -G 'https://api.bilibili.com/x/relation/followings/search' \
+ --data-urlencode 'vmid=293793435' \
+ --data-urlencode 'name=warma' \
+ --data-urlencode 'ps=2' \
+ --data-urlencode 'pn=1' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "mid": 53456,
+ "attribute": 2,
+ "mtime": 1586415053,
+ "tag": [-10],
+ "special": 1,
+ "uname": "Warma",
+ "face": "https://i2.hdslb.com/bfs/face/c1bbee6d255f1e7fc434e9930f0f288c8b24293a.jpg",
+ "sign": "我是沃玛,做点傻开心的视频。日常发在微博:@_warma_ ",
+ "official_verify": {
+ "type": 0,
+ "desc": "bilibili 知名UP主"
+ },
+ "vip": {
+ "vipType": 2,
+ "vipDueDate": 1637424000000,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 1,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": ""
+ }
+ }
+ }
+ ],
+ "total": 1
+ }
+}
+```
+
+
+
+### 查询共同关注明细
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | --------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| vmid | num | 目标用户 mid | 必要 | |
+| ps | num | 每页项数 | 非必要 | 默认为 50 |
+| pn | num | 页码 | 非必要 | 默认为 1 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | -------- | ---- |
+| list | array | 明细列表 | |
+| re_version | num | (?) | |
+| total | num | 关注总数 | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | -------------------------------- |
+| 0 | obj | 共同关注 1 | 见 [关系列表对象](#关系列表对象) |
+| n | obj | 共同关注(n+1) | 按照添加顺序排列 |
+| …… | obj | …… | …… |
+
+**示例:**
+
+获取自己与用户`mid=2`的共同关注明细
+
+```shell
+curl -G 'https://api.bilibili.com/x/relation/same/followings' \
+ --data-urlencode 'vmid=2' \
+ --data-urlencode 'ps=2' \
+ --data-urlencode 'pn=1' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "mid": 116683,
+ "attribute": 2,
+ "mtime": 1564627532,
+ "tag": null,
+ "special": 0,
+ "uname": "=咬人猫=",
+ "face": "https://i0.hdslb.com/bfs/face/8fad84a4470f3d894d8f0dc95555ab8f2cb10a83.jpg",
+ "sign": "面瘫女仆酱~小粗腿~事业线什么的!!吐槽你就输了!喵~",
+ "official_verify": {
+ "type": 0,
+ "desc": "bilibili 2019百大UP主、高能联盟成员"
+ },
+ "vip": {
+ "vipType": 2,
+ "vipDueDate": 1618934400000,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 1,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": ""
+ }
+ }
+ },
+ {
+ "mid": 517717593,
+ "attribute": 2,
+ "mtime": 1592126052,
+ "tag": [207542],
+ "special": 0,
+ "uname": "上海爱丽丝幻乐团",
+ "face": "https://i0.hdslb.com/bfs/face/851a9191cbe93e66304d7577c0f6f83834e52109.jpg",
+ "sign": "日本同人社团 上海爱丽丝幻乐团",
+ "official_verify": {
+ "type": 0,
+ "desc": "上海爱丽丝幻乐团官方账号"
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1593792000000,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 0,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": ""
+ }
+ }
+ }
+ ],
+ "re_version": 2498273968,
+ "total": 38
+ }
+}
+```
+
+
+
+### 查询悄悄关注明细
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | ---- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | -------- | ---- |
+| list | array | 明细列表 | |
+| re_version | num | (?) | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | -------------------------------- |
+| 0 | obj | 悄悄关注 1 | 见 [关系列表对象](#关系列表对象) |
+| n | obj | 悄悄关注(n+1) | 按照操作顺序排列 |
+| …… | obj | …… | …… |
+
+**示例:**
+
+```shell
+curl -G 'https://api.bilibili.com/x/relation/whispers' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "mid": 178429408,
+ "attribute": 1,
+ "mtime": 1605972105,
+ "tag": null,
+ "special": 0,
+ "uname": "老弟一号",
+ "face": "https://i2.hdslb.com/bfs/face/21426275f3d3149b96b88783275205ba574c09e3.jpg",
+ "sign": "萌新硬件玩家,前垃圾佬~(◦˙▽˙◦某宝店 老弟一号 粉丝群679540094商务合作V13869651328",
+ "official_verify": {
+ "type": 0,
+ "desc": "知识领域优质UP主"
+ },
+ "vip": {
+ "vipType": 2,
+ "vipDueDate": 1632499200000,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 1,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": ""
+ }
+ }
+ }
+ ],
+ "re_version": 2137574562
+ }
+}
+```
+
+
+
+### 查询互相关注明细
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+查询与自己互关的用户明细,可看全部
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | ---- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | -------- | ---- |
+| list | array | 明细列表 | |
+| re_version | num | (?) | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------- | -------------------------------- |
+| 0 | obj | 互关 1 | 见 [关系列表对象](#关系列表对象) |
+| n | obj | 互关(n+1) | 按照添加顺序排列 |
+| …… | obj | …… | …… |
+
+**示例:**
+
+```shell
+curl -G 'https://api.bilibili.com/x/relation/friends' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```jsonc
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "mid": 596000,
+ "attribute": 6,
+ "mtime": 1685110154,
+ "tag": null,
+ "special": 0,
+ "uname": "椛椛在睡觉",
+ "face": "https://i2.hdslb.com/bfs/face/365c1ef3b2a3afe21d6832796338fad5119b2592.jpg",
+ "sign": "欢迎来找椛椛玩~ https://blogs.momiji-jin.com/",
+ "face_nft": 0,
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 2,
+ "vipDueDate": 1702742400000,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 1,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "年度大会员",
+ "label_theme": "annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "avatar_subscript_url": ""
+ },
+ "nft_icon": "",
+ "rec_reason": "",
+ "track_id": ""
+ },
+ {
+ "mid": 24022863,
+ "attribute": 6,
+ "mtime": 1685026230,
+ "tag": [-10],
+ "special": 1,
+ "uname": "黄禄轩电脑专用账号",
+ "face": "https://i0.hdslb.com/bfs/face/a70ec7d2a3822980a915ef4b30371af0cbc79132.jpg",
+ "sign": "若要私信,请私信「黄禄轩手机专用账号」http://space.bilibili.com/17640193/,群:410311648",
+ "face_nft": 0,
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 2,
+ "vipDueDate": 1686412800000,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 1,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "年度大会员",
+ "label_theme": "annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "avatar_subscript_url": ""
+ },
+ "nft_icon": "",
+ "rec_reason": "",
+ "track_id": ""
+ },
+ {
+ "mid": 85438718,
+ "attribute": 6,
+ "mtime": 1684759843,
+ "tag": [194110],
+ "special": 0,
+ "uname": "忘忧北萱草Official",
+ "face": "https://i2.hdslb.com/bfs/face/68d8cba01aab907dbb2cf2e17074f20947156237.jpg",
+ "sign": "现已加入 OrangeFire 豪华套餐!",
+ "face_nft": 0,
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 2,
+ "vipDueDate": 1691683200000,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 1,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "年度大会员",
+ "label_theme": "annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": ""
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "avatar_subscript_url": ""
+ },
+ "nft_icon": "",
+ "rec_reason": "",
+ "track_id": ""
+ },
+ {
+ "mid": 41620134,
+ "attribute": 6,
+ "mtime": 1684759649,
+ "tag": null,
+ "special": 0,
+ "uname": "Tiggy_Chan",
+ "face": "https://i0.hdslb.com/bfs/face/8c8d9f43eda207f8cb8503bfdf6cc3802a1cd6c1.jpg",
+ "sign": "此号只发科技类视频,娱乐类转至:虎子酱233",
+ "face_nft": 0,
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1669219200000,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 0,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "avatar_subscript_url": ""
+ },
+ "nft_icon": "",
+ "rec_reason": "",
+ "track_id": ""
+ },
+ // ……
+ ],
+ "re_version": 0
+ }
+}
+```
+
+
+
+### 查询黑名单明细
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | --------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| ps | num | 每页项数 | 非必要 | 默认为 50 |
+| pn | num | 页码 | 非必要 | 默认为 1 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ----- | ------------ | ---- |
+| list | array | 明细列表 | |
+| re_version | num | (?) | |
+| total | num | 黑名单总计数 | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | -------------------------------- |
+| 0 | obj | 黑名单 1 | 见 [关系列表对象](#关系列表对象) |
+| n | obj | 黑名单 (n+1) | 按照添加顺序排列 |
+| …… | obj | …… | …… |
+
+**示例:**
+
+获取黑名单明细
+
+```shell
+curl -G 'https://api.bilibili.com/x/relation/blacks' \
+ --data-urlencode 'ps=2' \
+ --data-urlencode 'pn=1' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "mid": 22179720,
+ "attribute": 128,
+ "mtime": 1603032789,
+ "tag": null,
+ "special": 0,
+ "uname": "咩2016",
+ "face": "https://i0.hdslb.com/bfs/face/41fe435a7e62eae605a5908652f32f3afff2ae74.jpg",
+ "sign": "",
+ "official_verify": {
+ "type": 0,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 0,
+ "vipDueDate": 0,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 0,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": ""
+ }
+ }
+ },
+ {
+ "mid": 16174624,
+ "attribute": 128,
+ "mtime": 1603026420,
+ "tag": null,
+ "special": 0,
+ "uname": "其实死亡没有那么痛",
+ "face": "https://i2.hdslb.com/bfs/face/79257f5a2e7194a71337ccca5927afba7706d316.jpg",
+ "sign": "等我,我马上就来",
+ "official_verify": {
+ "type": 0,
+ "desc": ""
+ },
+ "vip": {
+ "vipType": 0,
+ "vipDueDate": 0,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 0,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": ""
+ }
+ }
+ }
+ ],
+ "re_version": 897205356,
+ "total": 2
+ }
+}
+```
+
+
+
+## 操作关系
+
+
+
+### 操作用户关系
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------- | --------------- | -------------------------------------------------------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| fid | num | 目标用户mid | 必要 | |
+| act | num | 操作代码 | 必要 | **操作代码见下表** |
+| re_src | num | 关注来源代码 | 非必要 | 包月充电:1 个人空间:11 视频:14 评论区:15 视频播放器结束页面:17 H5推荐关注:58 H5关注列表:106 H5粉丝列表:107 专栏:115 私信:118 搜索:120 视频播放器左上角关注按钮:164 H5共同关注:167 创作激励计划:192 活动页面:222 联合投稿视频:229 消息中心点赞详情:235 视频播放器关注弹幕:245 |
+| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | |
+
+操作代码`act`:
+
+| 代码 | 含义 | 备注 |
+| ---- | ------------ | ------------------------------------------------ |
+| 1 | 关注 | 无法对已注销或不存在的用户进行此操作 |
+| 2 | 取关 | |
+| 3 | 悄悄关注 | **现已下线**,使用本操作代码请求接口会提示“请求错误” |
+| 4 | 取消悄悄关注 | |
+| 5 | 拉黑 | 无法对已注销或不存在的用户进行此操作 |
+| 6 | 取消拉黑 | |
+| 7 | 踢出粉丝 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -102:账号被封停 -111:csrf校验失败 -400:请求错误 22001:不能对自己进行此操作 22002:因对方隐私设置,你还不能关注 22003:关注失败,请将该用户移除黑名单之后再试 22008:黑名单达到上限 22009:关注失败,已达关注上限 22013:账号已注销,无法完成操作 22014:已经关注用户,无法重复关注 22120:重复加入黑名单 40061:用户不存在 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+关注`mid=14082`的用户
+
+```shell
+curl 'https://api.bilibili.com/x/relation/modify' \
+ --data-urlencode 'fid=14082' \
+ --data-urlencode 'act=1' \
+ --data-urlencode 're_src=11' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+### 批量操作用户关系
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+此接口只支持关注和拉黑操作
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------- | --------------- | ------------------------------------------------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| fids | nums | 目标用户 mid 列表 | 必要 | 每个成员之间用 `,` 间隔,最多 50 个成员,不能包含自己的 mid |
+| act | num | 操作代码 | 必要 | 同上 仅可为 1 或 5,故只能进行批量关注和拉黑 |
+| re_src | num | 关注来源代码 | 非必要 | 同上 |
+| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -102:账号被封停 -111:csrf校验失败 -400:请求错误 22003:用户位于黑名单 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ----- | ------------------- | ---- |
+| failed_fids | array | 操作失败的 mid 列表 | |
+
+`data`中的`failed_fids`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------------- | ---- |
+| 0 | num | 操作失败的 mid 1 | |
+| n | num | 操作失败的 mid(n+1) | |
+| …… | num | …… | …… |
+
+**示例:**
+
+批量关注`mid=1,2,3,4,5`的用户
+
+```shell
+curl 'https://api.bilibili.com/x/relation/batch/modify' \
+ --data-urlencode 'fid=1,2,3,4,5' \
+ --data-urlencode 'act=1' \
+ --data-urlencode 're_src=11' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "failed_fids": []
+ }
+}
+```
+
+
+
+## 查询关系属性
+
+### 关系属性对象
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | --------------------------------------- | ------------ | -------------------------------------------------------- |
+| mid | num | 目标用户 mid | |
+| attribute | num | 关系属性 | 0:未关注 ~~1:悄悄关注(已弃用)~~ 2:已关注 6:已互粉 128:已拉黑 |
+| mtime | num | 关注对方时间 | 时间戳 未关注为 0 |
+| tag | 默认分组:null 存在至少一个分组:array | 分组 id | |
+| special | num | 特别关注标志 | 0:否 1:是 |
+
+`tag`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------------- | ---- |
+| 0 | num | 位于分组 1 的分组 | |
+| n | num | 位于分组(n+1)的分组 | |
+| …… | num | …… | …… |
+
+### 查询用户与自己关系(仅关注)
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | ---- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| fid | num | 目标用户 mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | 详见 [关系属性对象](#关系属性对象) |
+
+**示例:**
+
+可得对于`mid=258150656`的用户,在`2018/10/28 0:51:41`时关注,且设为特别关注,并位于为`-10`分组中
+
+```shell
+curl -G 'https://api.bilibili.com/x/relation' \
+ --data-urlencode 'fid=258150656' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "mid": 258150656,
+ "attribute": 2,
+ "mtime": 1540659101,
+ "tag": [-10],
+ "special": 1
+ }
+}
+```
+
+
+
+### 查询用户与自己关系(互相关系)
+
+> 接口1:
+
+> 接口2:
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+鉴权方式(仅接口1):[Wbi 签名](../misc/sign/wbi.md)
+
+~~该接口的旧版 API :~~(已废弃,不建议使用)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------ | ----------- | ------------------------------------ |
+| access_key | str | APP登录Token | APP方式必要 | |
+| mid | num | 目标用户mid | 必要 | |
+| w_rid | str | Wbi 签名 | 仅接口1必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) |
+| wts | num | 当前时间戳 | 仅接口1必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | -------------------------- | ---------------------------------- |
+| relation | obj | 目标用户对于当前用户的关系 | 详见 [关系属性对象](#关系属性对象) |
+| be_relation | obj | 当前用户对于目标用户的关系 | 详见 [关系属性对象](#关系属性对象) |
+
+**示例:**
+
+可得对于`mid=15858903`的用户,在`2019/1/24 14:24:19`时关注了对方,且互相关注,自己将对方特别关注,并同时位于为`-10`和`194110`的分组中,对方也将自己设为特别关注,并同时位于为`-10`和`56502`的分组中(虽然我看不到)
+
+Wbi 签名的 `wts`、`w_rid`生成方式详见 [Wbi 签名](../misc/sign/wbi.md) 文档
+
+```shell
+curl -G 'https://api.bilibili.com/x/space/acc/relation' \
+ --data-urlencode 'mid=15858903' \
+ --data-urlencode 'wts=1686015899' \
+ --data-urlencode 'w_rid=e10a3c566c9be80a7cebe7bcdf262588' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "relation": {
+ "mid": 15858903,
+ "attribute": 6,
+ "mtime": 1548311059,
+ "tag": [-10, 194110, 248468],
+ "special": 1
+ },
+ "be_relation": {
+ "mid": 293793435,
+ "attribute": 6,
+ "mtime": 1548311059,
+ "tag": [56502, -10],
+ "special": 1
+ }
+ }
+}
+```
+
+
+
+### 批量查询用户与自己关系
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | ----------------------------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| fids | nums | 目标用户 mid | 必要 | 每个之间用`,`间隔,无成员限制 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ---------- | ---------------------------------- |
+| {用户mid} | obj | 关注的用户 | 详见 [关系属性对象](#关系属性对象) |
+| …… | obj | …… | 下同 |
+
+**示例:**
+
+批量查询`mid=1,2,3,4,5`的关系
+
+```shell
+curl -G 'https://api.bilibili.com/x/relation/relations' \
+ --data-urlencode 'fid=258150656' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "1": {
+ "mid": 1,
+ "attribute": 2,
+ "mtime": 1601654227,
+ "tag": null,
+ "special": 0
+ },
+ "2": {
+ "mid": 2,
+ "attribute": 2,
+ "mtime": 1601654225,
+ "tag": null,
+ "special": 0
+ }
+ }
+}
+```
+
+
+
+## 关注分组相关
+
+分组 id 特殊值:
+
+| id | 含义 |
+| ---- | -------- |
+| 0 | 默认分组 |
+| -10 | 特别关心 |
+
+### 查询关注分组列表
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | ---- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------ | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | array | 分组列表 | |
+
+`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------- | ---- |
+| 0 | obj | 分组 1 | |
+| n | obj | 分组(n+1) | |
+| …… | num | …… | …… |
+
+数组`data`中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | ---------- | ---- |
+| tagid | num | 分组 id | -10:特别关注 0:默认分组 |
+| name | str | 分组名称 | |
+| count | num | 分组成员数 | |
+| tip | str | 提示信息 | |
+
+**示例:**
+
+查询所有的分组的名字以及id
+
+```shell
+curl 'https://api.bilibili.com/x/relation/tags' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```jsonc
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [
+ {
+ "tagid": -10,
+ "name": "特别关注",
+ "count": 19,
+ "tip": "第一时间收到该分组下用户更新稿件的通知"
+ },
+ {
+ "tagid": 0,
+ "name": "默认分组",
+ "count": 340,
+ "tip": ""
+ },
+ {
+ "tagid": 194110,
+ "name": "基友们",
+ "count": 127,
+ "tip": ""
+ },
+ {
+ "tagid": 194111,
+ "name": "我的同学",
+ "count": 22,
+ "tip": ""
+ },
+ // ……
+ ]
+}
+```
+
+
+
+### 查询关注分组明细
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+只可查询属于自己的分组
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | ------------------------------------------------------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| tagid | num | 分组 id | 必要 | 0:默认分组 -10:特别关注 -20:所有 |
+| order_type | str | 排序方式 | 非必要 | 按照关注顺序排列:留空 按照最常访问排列:attention |
+| ps | num | 每页项数 | 非必要 | 默认为 20 |
+| pn | num | 页数 | 非必要 | 默认为1 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 22104:该分组不存在 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | array | 成员列表 | |
+
+`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | --------------------------------------- |
+| 0 | obj | 成员信息 1 | 与[关系列表对象](#关系列表对象)**不同** |
+| n | obj | 成员信息(n+1) | 按照添加顺序排序 |
+| …… | obj | …… | …… |
+
+`data` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ---- | --------------- | -------------- |
+| mid | num | 用户mid | |
+| attribute | num | 关系属性 | 恒为 `0` |
+| tag | null | 关注分组id | 恒为 `null` |
+| special | num | 是否特别关注 | 恒为 `0` |
+| contract_info | obj | 契约计划信息 | |
+| uname | str | 用户昵称 | |
+| face | str | 用户头像url | |
+| sign | str | 用户签名 | |
+| face_nft | num | 是否为 NFT 头像 | |
+| official_verify | obj | 认证信息 | 具体见下 |
+| vip | obj | 会员信息 | |
+| live | obj | 直播状态 | 具体见下 |
+| nft_icon | str | (?) | |
+| rec_reason | str | (?) | |
+| track_id | str | (?) | |
+| follow_time | str | (?) | |
+
+`data`中的对象中的`official_verify`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------ | ------------------- |
+| type | num | 用户认证类型 | -1:无 0:UP 主认证 1:机构认证 |
+| desc | str | 用户认证信息 | 无为空 |
+
+`data`中的对象中的`vip`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | ------------ | ----------------------------------------------- |
+| vipType | num | 会员类型 | 0:无 1:月度大会员 2:年度以上大会员 |
+| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 |
+| dueRemark | str | (?) | |
+| accessStatus | num | (?) | |
+| vipStatus | num | 大会员状态 | 0:无 1:有 |
+| vipStatusWarn | str | (?) | |
+| themeType | num | (?) | |
+| label | obj | (?) | |
+
+`data`数组中的对象中的`live`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | -------- | ------------------------ |
+| live_status | num | 直播状态 | 0:未开播 1:已直播 |
+| jump_url | str | 直播链接 | |
+
+`data`数组中的对象中的`contract_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | ------------------------------ | ----------------------------------------------------------- |
+| is_contract | bool | 目标用户是否为对方的契约者 | 仅当为 `true` 时才有此项 |
+| is_contractor | bool | 对方是否为目标用户的契约者 | 仅当为 `true` 时才有此项 |
+| ts | num | 对方成为目标用户的契约者的时间 | 秒级时间戳,仅当 `is_contractor` 项的值为 `true` 时才有此项 |
+| user_attr | num | 对方作为目标用户的契约者的属性 | 1:老粉 否则为原始粉丝 仅当有特殊属性时才有此项 |
+
+**示例:**
+
+以每页2项的方式获取了id为`207542`分组的第1页的粉丝明细,按照关注顺序
+
+```shell
+curl -G 'https://api.bilibili.com/x/relation/tag' \
+ --data-urlencode 'tagid=207542' \
+ --data-urlencode 'order_type=' \
+ --data-urlencode 'ps=2' \
+ --data-urlencode 'pn=1' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [{
+ "mid": 420831218,
+ "uname": "支付宝Alipay",
+ "face": "https://i2.hdslb.com/bfs/face/aaf18aeb2d9822e28a590bd8d878572ca8c59e04.jpg",
+ "sign": "阿支来了,关注点赞转发投币四连走起!",
+ "official_verify": {
+ "type": 1,
+ "desc": "支付宝官方账号"
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1585065600000,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 1,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": ""
+ }
+ }
+ }, {
+ "mid": 125086406,
+ "uname": "MSI微星科技",
+ "face": "https://i1.hdslb.com/bfs/face/a844760e4e491677615b39399bc761e74c579bb4.jpg",
+ "sign": "你好,这里是微星显卡官方!专注显卡三十年,欢迎私信咨询或提问MSI",
+ "official_verify": {
+ "type": 1,
+ "desc": "微星科技官方账号"
+ },
+ "vip": {
+ "vipType": 1,
+ "vipDueDate": 1540656000000,
+ "dueRemark": "",
+ "accessStatus": 0,
+ "vipStatus": 0,
+ "vipStatusWarn": "",
+ "themeType": 0,
+ "label": {
+ "path": ""
+ }
+ }
+ }]
+}
+```
+
+
+
+### 查询目标用户所在的分组
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | ---- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| fid | num | 目标用户 mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------- | ---- | --------- | ---- |
+| {加入的分组 id} | str | 分组名称 | 若目标用户存在默认分组中,则不显示 |
+| …… | str | …… | 下同 |
+
+**示例:**
+
+查询用户`mid=319214221`存在的所有分组和名称
+
+```shell
+curl -G 'https://api.bilibili.com/x/relation/tag/user' \
+ --data-urlencode 'fid=319214221' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "-10": "特别关注",
+ "194111": "我的同学"
+ }
+}
+```
+
+
+
+### 查询所有特别关注 mid
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | ---- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----- | -------- | ----------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | array | 成员列表 | |
+
+`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ---- |
+| 0 | num | 成员 1 mid | |
+| n | num | 成员(n+1)mid | |
+| …… | num | …… | …… |
+
+**示例:**
+
+```shell
+curl 'https://api.bilibili.com/x/relation/tag/special' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [
+ 500716647,
+ 32832243,
+ 53456,
+ 25944552,
+ 301839556,
+ 427494870,
+ 319214221,
+ 31949159,
+ 382666849,
+ 258318451,
+ 15858903,
+ 54992199,
+ 3379951,
+ 392279807,
+ 23215368,
+ 258150656,
+ 20165629,
+ 22179720
+ ]
+}
+```
+
+
+
+### 创建分组
+
+
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------- | --------------- | ------------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| tag | str | 分组名 | 必要 | 最长 16 字符 |
+| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -111:csrf校验失败 -101:账号未登录 -400:请求错误 22101:分组名称存在不允许的字符 22102:分组数量超过限制 22103:分组名过长 22106:该分组已经存在 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | --------------- | ---- |
+| tagid | num | 创建的分组的 id | |
+
+**示例:**
+
+创建了名为`测试`的分组,得到id为`216677`
+
+```shell
+curl 'https://api.bilibili.com/x/relation/tag/create' \
+ --data-urlencode 'tag=测试' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "tagid": 216677
+ }
+}
+```
+
+
+
+### 重命名分组
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------- | --------------- | ------------ |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| tagid | num | 分组 id | 必要 | |
+| name | str | 新名称 | 必要 | 最长 16 字符 |
+| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -111:csrf校验失败 -101:账号未登录 -400:请求错误 22101:分组名称存在不允许的字符 22103:分组名过长 22104:该分组不存在 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+把id为`194112`的分组更名为`膜法师`
+
+```shell
+curl 'https://api.bilibili.com/x/relation/tag/update' \
+ --data-urlencode 'tagid=194112' \
+ --data-urlencode 'name=膜法师' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+### 删除分组
+
+
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------- | --------------- | ---- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| tagid | num | 分组 id | 必要 | |
+| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -111:csrf校验失败 -101:账号未登录 -400:请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+
+示例:
+
+删除分组id为`216699`的分组
+
+```shell
+curl 'https://api.bilibili.com/x/relation/tag/del' \
+ --data-urlencode 'tagid=216699' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+### 修改分组成员
+
+
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+如需删除分组中的成员,请将`tagids`设为 0,即移动至默认分组,而不是取关
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------ | -------------- | ------------------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| fids | nums | 目标用户 mid 列表 | 必要 | 每个之间用`,`间隔 |
+| tagids | nums | 分组 id 列表 | 必要 | 每个之间用`,`间隔 |
+| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -111:csrf校验失败 -101:账号未登录 -400:请求错误 22104:分组不存在 22105:未关注 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+把关注用户`mid=205631797`同时添加分组关系到id为`-10`和`207542`的分组中
+
+```shell
+curl 'https://api.bilibili.com/x/relation/tags/addUsers' \
+ --data-urlencode 'fids=205631797' \
+ --data-urlencode 'tagids=-10,207542' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+### 复制关注到分组
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------ | -------------- | ------------------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| fids | nums | 待复制的用户 mid 列表 | 必要 | 每个之间用`,`间隔 |
+| tagids | nums | 目标分组 id 列表 | 必要 | 每个之间用`,`间隔 |
+| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -111:csrf校验失败 -101:账号未登录 -400:请求错误 22104:分组不存在 22105:未关注 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+把关注用户`mid=4856007`和`mid=326499679`同时复制到为`231305`的分组id中
+
+```shell
+curl 'https://api.bilibili.com/x/relation/tags/copyUsers' \
+ --data-urlencode 'fids=4856007,326499679' \
+ --data-urlencode 'tagids=231305' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+### 移动关注到分组
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)或 APP
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------ | ---- | ------------------------ | -------------- | ------------------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| beforeTagids | nums | 原分组 id 列表 | 必要 | 每个之间用`,`间隔 |
+| afterTagids | nums | 新分组 id 列表 | 必要 | 每个之间用`,`间隔 |
+| fids | nums | 待移动的用户 mid 列表 | 必要 | 每个之间用`,`间隔 |
+| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -111:csrf校验失败 -101:账号未登录 -400:请求错误 22104:分组不存在 22105:未关注 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+把关注用户`mid=321173469`和`mid=327086920`同时从id为`207542`的分组移动到为`231305`的分组中
+
+```shell
+curl 'https://api.bilibili.com/x/relation/tags/moveUsers' \
+ --data-urlencode 'beforeTagids=207542' \
+ --data-urlencode 'afterTagids=23130' \
+ --data-urlencode 'fids=321173469,327086920' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
diff --git a/docs/user/space.md b/docs/user/space.md
new file mode 100644
index 0000000..36142af
--- /dev/null
+++ b/docs/user/space.md
@@ -0,0 +1,4688 @@
+# 用户空间相关
+
+## 主页
+
+
+
+### 置顶视频
+
+#### 查询用户置顶视频
+
+>https://api.bilibili.com/x/space/top/arc
+
+*请求方式:GET*
+
+粉丝在其主页上可见
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ---- |
+| vmid | num | 目标用户mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 53016:没有置顶视频 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | ------------------------------ | ------------------------------------------------------------ |
+| aid | num | 稿件avid | |
+| videos | num | 视频分P总数 | 默认为1 |
+| tid | num | 分区tid | |
+| tname | str | 子分区名称 | |
+| copyright | num | 是否转载 | 1:原创 2:转载 |
+| pic | str | 视频封面图片url | |
+| title | str | 稿件标题 | |
+| pubdate | num | 稿件发布时间 | 时间戳 |
+| ctime | num | 用户提交稿件的时间 | 时间戳 |
+| desc | str | 视频简介 | |
+| state | num | 视频状态 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中的`state`备注 |
+| attribute | num | 稿件属性位配置 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中的`attribute`备注 |
+| duration | num | 视频总计持续时长(所有分P) | 单位为秒 |
+| rights | obj | 视频属性标志 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中的`rights`对象 |
+| owner | obj | 视频UP主信息 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中的`owner`对象 |
+| stat | obj | 视频状态数 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中的`stat`对象 |
+| dynamic | str | 视频同步发布的的动态的文字内容 | 无为空 |
+| cid | num | 视频1P cid | |
+| dimension | obj | 视频1P分辨率 | 略,见[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中的`dimension`对象 |
+| bvid | str | 稿件bvid | |
+| reason | str | 置顶视频备注 | |
+| inter_video | bool | 是否为合作视频 | false:否 true:是 |
+
+**示例:**
+
+查询用户`mid=23215368`的置顶视频
+
+```shell
+curl -G 'https://api.bilibili.com/x/space/top/arc' \
+--data-urlencode 'vmid=23215368'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "aid": 37896701,
+ "videos": 1,
+ "tid": 28,
+ "tname": "原创音乐",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/cc9e72822d68fffdd0406144f1b5348a13c89652.jpg",
+ "title": "燃烧吧!铃声!把主流手机铃声编成一首曲子",
+ "pubdate": 1544469671,
+ "ctime": 1544469671,
+ "desc": "各品牌的手机铃声大合奏,毫无违和感~",
+ "state": 0,
+ "attribute": 16768,
+ "duration": 208,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0
+ },
+ "owner": {
+ "mid": 23215368,
+ "name": "Wayjon冰冰酱",
+ "face": "http://i2.hdslb.com/bfs/face/7c9715f1768191137eb7ebf91918ca0f99532012.jpg"
+ },
+ "stat": {
+ "aid": 37896701,
+ "view": 1058237,
+ "danmaku": 16821,
+ "reply": 3725,
+ "favorite": 76888,
+ "coin": 100694,
+ "share": 17091,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 90521,
+ "dislike": 0
+ },
+ "dynamic": "#编曲##FL##纯音乐#",
+ "cid": 66621209,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "bvid": "BV18t411q7zz",
+ "reason": "",
+ "inter_video": false
+ }
+}
+```
+
+
+
+#### 设置置顶视频
+
+> https://api.bilibili.com/x/space/top/arc/set
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------------------ | ------------ | -------------------------------- |
+| aid | num | 置顶目标稿件avid | 必要(可选) | avid与bvid任选一个 |
+| bvid | str | 置顶目标稿件bvid | 必要(可选) | avid与bvid任选一个 |
+| reason | str | 置顶视频备注 | 非必要 | 置顶备注最大40字符 默认为空 |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -304:未修改 -400:请求错误 53014:稿件已失效 53015:备注过长 53017:置顶非自己的稿件 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+置顶视频`av98948772`/`BV1n741127LD`
+
+avid方式:
+
+```shell
+curl 'https://api.bilibili.com/x/space/top/arc/set' \
+--data-urlencode 'aid=98948772' \
+-b 'SESSDATA=xxx'
+```
+
+bvid方式:
+
+```shell
+curl 'https://api.bilibili.com/x/space/top/arc/set' \
+--data-urlencode 'bvid=BV1n741127LD' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+#### 取消置顶视频
+
+> https://api.bilibili.com/x/space/top/arc/cancel
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------------------ | ------ | ---- |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误(重复取消) |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+```shell
+curl 'https://api.bilibili.com/x/space/top/arc/cancel' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+### 代表作视频
+
+#### 查询用户代表作视频列表
+
+> https://api.bilibili.com/x/space/masterpiece
+
+*请求方式:GET*
+
+新访客在其主页上可见
+
+最多可以设置3个
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ---- |
+| vmid | num | 目标用户mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------ | ---------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | array | 代表作列表 | |
+
+`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------- | ------------------------- |
+| 0 | obj | 代表作1 | 无则为空 |
+| 1 | obj | 代表作2 | 无则为空 |
+| 2 | obj | 代表作3 | 无则为空 最多设置3个 |
+
+`data`数组中的对象:
+
+同[查询用户置顶视频](#查询用户置顶视频)中的`data`对象
+
+**示例:**
+
+查询用户`mid=23215368`的代表作视频列表
+
+```shell
+curl -G 'https://api.bilibili.com/x/space/masterpiece' \
+--data-urlencode 'vmid=23215368'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [{
+ "aid": 37896701,
+ "videos": 1,
+ "tid": 28,
+ "tname": "原创音乐",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/cc9e72822d68fffdd0406144f1b5348a13c89652.jpg",
+ "title": "燃烧吧!铃声!把主流手机铃声编成一首曲子",
+ "pubdate": 1544469671,
+ "ctime": 1544469671,
+ "desc": "各品牌的手机铃声大合奏,毫无违和感~",
+ "state": 0,
+ "attribute": 16768,
+ "duration": 208,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0
+ },
+ "owner": {
+ "mid": 23215368,
+ "name": "Wayjon冰冰酱",
+ "face": "http://i2.hdslb.com/bfs/face/7c9715f1768191137eb7ebf91918ca0f99532012.jpg"
+ },
+ "stat": {
+ "aid": 37896701,
+ "view": 1058241,
+ "danmaku": 16821,
+ "reply": 3725,
+ "favorite": 76888,
+ "coin": 100694,
+ "share": 17091,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 90521,
+ "dislike": 0
+ },
+ "dynamic": "#编曲##FL##纯音乐#",
+ "cid": 66621209,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "bvid": "BV18t411q7zz",
+ "reason": "",
+ "inter_video": false
+ }, {
+ "aid": 39596658,
+ "videos": 1,
+ "tid": 21,
+ "tname": "日常",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/431e51d0e40e3461e1c1b0f59c755ae8843b1adb.jpg",
+ "title": "MY2018 - 纪念我的2018年",
+ "pubdate": 1546328392,
+ "ctime": 1546328392,
+ "desc": "",
+ "state": 0,
+ "attribute": 16768,
+ "duration": 239,
+ "mission_id": 10996,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0
+ },
+ "owner": {
+ "mid": 23215368,
+ "name": "Wayjon冰冰酱",
+ "face": "http://i2.hdslb.com/bfs/face/7c9715f1768191137eb7ebf91918ca0f99532012.jpg"
+ },
+ "stat": {
+ "aid": 39596658,
+ "view": 1518,
+ "danmaku": 16,
+ "reply": 40,
+ "favorite": 22,
+ "coin": 60,
+ "share": 9,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 112,
+ "dislike": 0
+ },
+ "dynamic": "#vlog##记录##生活记录#",
+ "cid": 69561078,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "bvid": "BV1Jt411B7La",
+ "reason": "",
+ "inter_video": false
+ }, {
+ "aid": 44721369,
+ "videos": 1,
+ "tid": 28,
+ "tname": "原创音乐",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/9887797402599c42f74a7624f3db4a92a0ebf465.jpg",
+ "title": "【铃声串烧系列】华米两开花;中华有为,国之荣耀!把主流手机铃声编成一首曲子",
+ "pubdate": 1551128445,
+ "ctime": 1551128445,
+ "desc": "把主流手机铃声编成一首曲子,这一版用华为的铃声作为主旋律,毫无违和感~伴随着2019mwc的开幕,希望国产厂商能获得全世界的目光,并且将属于中国人的科技自信传递到全世界!",
+ "state": 0,
+ "attribute": 16768,
+ "duration": 174,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0
+ },
+ "owner": {
+ "mid": 23215368,
+ "name": "Wayjon冰冰酱",
+ "face": "http://i2.hdslb.com/bfs/face/7c9715f1768191137eb7ebf91918ca0f99532012.jpg"
+ },
+ "stat": {
+ "aid": 44721369,
+ "view": 306757,
+ "danmaku": 7713,
+ "reply": 1520,
+ "favorite": 17216,
+ "coin": 16489,
+ "share": 2917,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 21439,
+ "dislike": 0
+ },
+ "dynamic": "#铃声##纯音乐##音乐#【铃声串烧】Mix Ringtones!船新的版本来啦!这一版用华为的铃声作为主旋律,毫无违和感~伴随着2019mwc的开幕,希望国产厂商能获得全世界的目光,并且将属于中国人的科技自信传递到全世界!",
+ "cid": 78290138,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "bvid": "BV1vb411879C",
+ "reason": "",
+ "inter_video": false
+ }]
+}
+```
+
+
+
+#### 添加代表作视频
+
+> https://api.bilibili.com/x/space/masterpiece/add
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+代表作上限为3个稿件
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------------------ | ------------ | -------------------------------- |
+| aid | num | 置顶目标稿件avid | 必要(可选) | avid与bvid任选一个 |
+| bvid | str | 置顶目标稿件bvid | 必要(可选) | avid与bvid任选一个 |
+| reason | str | 代表作备注 | 非必要 | 置顶备注最大40字符 默认为空 |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 53014:稿件已失效 53015:备注过长 53017:置顶非自己的稿件 53019:达到上限 53020:已经存在该稿件 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+添加视频`av94916552`/`BV1ZE411K7ux`到代表作列表
+
+avid方式:
+
+```shell
+curl 'https://api.bilibili.com/x/space/masterpiece/add' \
+--data-urlencode 'aid=94916552' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx'
+```
+
+bvid方式:
+
+```shell
+curl 'https://api.bilibili.com/x/space/masterpiece/add' \
+--data-urlencode 'bvid=BV1ZE411K7ux' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+#### 删除代表作视频
+
+> https://api.bilibili.com/x/space/masterpiece/cancel
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------------------ | ------------ | ------------------ |
+| aid | num | 要删除的目标稿件avid | 必要(可选) | avid与bvid任选一个 |
+| bvid | str | 要删除的目标稿件bvid | 必要(可选) | avid与bvid任选一个 |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 53021:置顶列表中没有该视频 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | 作用尚不明确 |
+
+**示例:**
+
+删除置顶视频`av59765630`/`BV1Yt41137T6`
+
+avid方式:
+
+```shell
+curl 'https://api.bilibili.com/x/space/masterpiece/cancel' \
+--data-urlencode 'aid=59765630' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx'
+```
+
+bvid方式:
+
+```shell
+curl 'https://api.bilibili.com/x/space/masterpiece/cancel' \
+--data-urlencode 'bvid=BV1Yt41137T6' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx'
+```
+
+### 个人TAG
+
+#### 查看用户个人TAG
+
+> https://api.bilibili.com/x/space/acc/tags
+
+*请求方式:GET*
+
+上限5条,且内容由用户自定义
+
+带有转义
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ---- |
+| mid | num | 目标用户mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | array | 信息本体 | |
+
+`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ------------- |
+| 0 | obj | 套了个娃 | 只有1项??? |
+
+`data`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ----- | ----------- | ---- |
+| mid | num | 目标用户mid | |
+| tags | array | TAG名称 | |
+
+`data`数组中的对象中的`tags`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ------- |
+| 0 | str | TAG1 | |
+| n | str | TAG(n+1) | |
+| …… | str | …… | |
+| 4 | str | TAG5 | 上限5条 |
+
+**示例:**
+
+查看用户`mid=53456`的个人TAG
+
+```shell
+curl -G 'https://api.bilibili.com/x/space/acc/tags' \
+--data-urlencode 'mid=53456'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [
+ {
+ "mid": 53456,
+ "tags": [
+ "游戏",
+ "音乐",
+ "warma",
+ "搞笑",
+ "动画"
+ ]
+ }
+ ]
+}
+```
+
+
+
+#### 修改个人TAG
+
+> https://api.bilibili.com/x/space/acc/tags/set
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:Cookie中`DedeUserID`存在且不为0
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------------------ | ------ | ------------------------------------------------------------ |
+| tags | strs | 要设置的TAG内容 | 非必要 | 删除公告留空或省去即可 各TAG长度小于10字符 最多5个TAG 各TAG之间用","(%2C)分隔 重复TAG无效 |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误(超出长度限制) |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+修改个人TAG为`minecraft,技术宅,大佬,小哥哥,可爱`
+
+```shell
+curl 'https://api.bilibili.com/x/space/acc/tags/set' \
+--data-urlencode 'tags=minecraft,技术宅,大佬,小哥哥,可爱' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx;DedeUserID=1'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+### 空间公告
+
+#### 查看用户空间公告
+
+> https://api.bilibili.com/x/space/notice
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ---- |
+| mid | num | 目标用户mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | str | 公告信息 | 无则为空 |
+
+**示例:**
+
+查看用户`mid=53456`的空间公告
+
+```shell
+curl -G 'https://api.bilibili.com/x/space/notice' \
+--data-urlencode 'mid=53456'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code":0,
+ "message":"0",
+ "ttl":1,
+ "data":"我的微博 @_warma_\n直播录像上传到:warma养鸽场\n头像画师是:微博@Dr-H_喵_\n横幅画师:@薬屋"
+}
+```
+
+
+
+#### 修改空间公告
+
+> https://api.bilibili.com/x/space/notice/set
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------------------ | ------ | --------------------------------------- |
+| notice | str | 要设置的公告内容 | 非必要 | 删除公告留空或省去即可 少于150字符 |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -304:未修改 -400:请求错误(超出长度限制) |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | 作用尚不明确 |
+
+**示例:**
+
+修改个人空间公告为`鸽子`
+
+```shell
+curl 'https://api.bilibili.com/x/space/notice/set' \
+--data-urlencode 'notice=鸽子' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+### 主页板块布局与权限
+
+#### 查询空间设置
+
+> http://space.bilibili.com/ajax/settings/getSettings
+
+*请求方式:GET*
+
+注:带有转义
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ---- |
+| mid | num | 目标用户mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ------------------- | -------- | ---- |
+| status | bool | 用户是否存在 | true:存在 false:不存在 |
+| data | 用户存在时:obj 用户不存在时:str| 用户存在时:信息本体 用户不存在时:错误信息 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------------- | ----- | ---------------- | ------------ |
+| privacy | obj | 空间隐私权限 | |
+| index_order | array | 空间板块布局 | |
+| theme | str | default主题? | 作用尚不明确 |
+| theme_preview_img_path | str | 主题预览图路径? | 作用尚不明确 |
+| toutu | obj | 空间头图 | |
+
+`privacy`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | -------------- | ------------------------------ |
+| bangumi | num | 追番及追剧 | 0:隐藏 1:公开 **下同** |
+| bbq | num | 轻视频 | |
+| channel | num | 频道 | |
+| coins_video | num | 最近投币的视频 | |
+| comic | num | 追漫 | |
+| dress_up | num | 装扮 | |
+| fav_video | num | 收藏夹 | |
+| groups | num | 圈子? | 作用尚不明确 |
+| likes_video | num | 最近点赞的视频 | |
+| played_game | num | 最近玩过的游戏 | |
+| tags | num | 订阅标签 | |
+| user_info | num | 个人资料 | |
+
+`index_order`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | -------------------------------------------- |
+| 0 | obj | 板块1 | 根据板块布局顺序排序 先左侧布局后右侧布局 |
+| n | obj | 板块(n+1) | |
+| …… | obj | …… | …… |
+
+`index_order`数组内对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ---- |
+| id | num | 板块编号 | |
+| name | str | 板块名称 | |
+
+`toutu`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | -------------------- | -------------------------------------------------- |
+| sid | num | 空间头图ID | |
+| expire | num | 到期时间? | 时间戳? 作用尚不明确 |
+| s_img | str | 空间头图小图相对路径 | 完整url为`http://i0.hdslb.com/`+相对路径 |
+| l_img | str | 空间头图相对路径 | **同上** |
+| android_img | str | 空 | 注:**手机端头图与web端不同,需要用另一个api获取** |
+| iphone_img | str | 空 | |
+| ipad_img | str | 空 | |
+| thumbnail_img | str | 缩略图 | |
+| platform | num | 0 | 作用尚不明确 |
+
+**示例:**
+
+查看`mid=2`的空间设置
+
+```shell
+curl -G 'http://space.bilibili.com/ajax/settings/getSettings' \
+--data-urlencode 'mid=2'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "status":true,
+ "data":{
+ "privacy":{
+ "bangumi":1,
+ "bbq":1,
+ "channel":1,
+ "coins_video":0,
+ "comic":1,
+ "dress_up":1,
+ "fav_video":0,
+ "groups":0,
+ "likes_video":0,
+ "played_game":1,
+ "tags":1,
+ "user_info":1
+ },
+ "index_order":[
+ {
+ "id":1,
+ "name":"我的稿件"
+ },
+ {
+ "id":8,
+ "name":"我的专栏"
+ },
+ {
+ "id":7,
+ "name":"我的频道"
+ },
+ {
+ "id":2,
+ "name":"我的收藏夹"
+ },
+ {
+ "id":3,
+ "name":"订阅番剧"
+ },
+ {
+ "id":4,
+ "name":"订阅标签"
+ },
+ {
+ "id":5,
+ "name":"最近投币的视频"
+ },
+ {
+ "id":6,
+ "name":"我的圈子"
+ },
+ {
+ "id":9,
+ "name":"我的相簿"
+ },
+ {
+ "id":21,
+ "name":"公告"
+ },
+ {
+ "id":22,
+ "name":"直播间"
+ },
+ {
+ "id":23,
+ "name":"个人资料"
+ },
+ {
+ "id":24,
+ "name":"官方活动"
+ },
+ {
+ "id":25,
+ "name":"最近玩过的游戏"
+ }
+ ],
+ "theme":"default",
+ "theme_preview_img_path":"",
+ "toutu":{
+ "sid":1,
+ "expire":2861874560,
+ "s_img":"bfs/space/768cc4fd97618cf589d23c2711a1d1a729f42235.png",
+ "l_img":"bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png",
+ "android_img":"",
+ "iphone_img":"",
+ "ipad_img":"",
+ "thumbnail_img":"",
+ "platform":0
+ }
+ }
+}
+```
+
+
+
+#### 查询可用头图列表 (Web端)
+
+> https://space.bilibili.com/ajax/topphoto/getlist
+
+*请求方式: GET*
+
+注: 带有转义
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | -------------------------- |
+| mid | num | 目标用户mid | 必要 | 非负数, 即使该用户并不存在 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ------------------------- | -------------------------------------- | ---- |
+| status | bool | 成功: true 失败: false | |
+| data | 成功: array 失败: str | 成功: 信息本体 失败: "用户id错误" | |
+
+`data`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | ----------- | ------------------------------------ |
+| id | num | 空间头图 ID | |
+| product_name | str | 显示名称 | |
+| price | num | 价格 | |
+| coin_type | num | 支付类型? | |
+| vip_free | num | 大会员免费 | |
+| s_img | str | 小图 URI | 需要自行与 `i0.hdslb.com` 拼接成 URL |
+| l_img | str | 大图 URI | 同 s_img |
+| thumbnail_img | str | 空 | 并不存在的缩略图? |
+| sort_num | num | 排序编号 | |
+| is_disable | num | 已禁用 | 0: 未禁用 |
+| expire | num | 过期时间? | UNIX 时间戳, 或 0 为永不过期 |
+| had | num | 是否拥有? | 当 expire 不为 0 时 为 1, 否则为 0 |
+
+**示例:**
+
+查询`mid=1145141919810000000`的可用空间头图
+
+```shell
+curl -G "https://space.bilibili.com/ajax/topphoto/getlist" \
+--data-urlencode "mid=1145141919810000000"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "status": true,
+ "data": [
+ {
+ "id": 1,
+ "product_name": "bilibili春",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/768cc4fd97618cf589d23c2711a1d1a729f42235.png",
+ "l_img": "bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png",
+ "thumbnail_img": "",
+ "sort_num": 19,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 2,
+ "product_name": "两人单车",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/d60a4be11f1bca6168a60a53c64bca18eddd6443.jpg",
+ "l_img": "bfs/space/44873d3568bdcb3d850d234e02a19602972450f1.png",
+ "thumbnail_img": "",
+ "sort_num": 16,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 5,
+ "product_name": "成为偶像",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/5fe2632486a5a91a234f0e7cb368ab6397477da4.jpg",
+ "l_img": "bfs/space/87277d30cd19edcec9db466a9a3e556aeb0bc0ed.png",
+ "thumbnail_img": "",
+ "sort_num": 15,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 11,
+ "product_name": "星际勘探",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/6849abc6e67000ad807b35a970aba31dd1e400dd.jpg",
+ "l_img": "bfs/space/c919a9818172a8297f8b0597722f96504a1e1d88.png",
+ "thumbnail_img": "",
+ "sort_num": 14,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 10,
+ "product_name": "星O大战",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/ff3b0882e55c1099738e59616e5956ad357d9948.jpg",
+ "l_img": "bfs/space/e22f5b8e06ea3ee4de9e4da702ce8ef9a2958f5a.png",
+ "thumbnail_img": "",
+ "sort_num": 13,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 12,
+ "product_name": "王牌特工",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/f5d38e2af44fd12fa65423aff55933fcf9071419.jpg",
+ "l_img": "bfs/space/8cd85a382756ab938df23a856017abccd187188e.png",
+ "thumbnail_img": "",
+ "sort_num": 12,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 3,
+ "product_name": "仰望星空",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/c9dae917e24b4fc17c4d544caf6b6c0b17f8692b.jpg",
+ "l_img": "bfs/space/9ccc0447aebf0656809b339b41aa5b3705f27c47.png",
+ "thumbnail_img": "",
+ "sort_num": 11,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 14,
+ "product_name": "雨过天晴",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/1115b2fdabd128337f892feada4ce32e51f3a5ad.jpg",
+ "l_img": "bfs/space/6a1198e25f8764bd30d53411dac9fdf840bc3265.png",
+ "thumbnail_img": "",
+ "sort_num": 10,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 6,
+ "product_name": "绿荫秘境",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/dc02d22a718c1c436f1a355b3cd726b04098ef7d.jpg",
+ "l_img": "bfs/space/265ecddc52d74e624dc38cf0cff13317085aedf7.png",
+ "thumbnail_img": "",
+ "sort_num": 9,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 13,
+ "product_name": "漫游仙境",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/184abe52a5ea9390b506c064cfba4f8f20ae9cca.jpg",
+ "l_img": "bfs/space/24d0815514951bb108fbb360b04a969441079315.png",
+ "thumbnail_img": "",
+ "sort_num": 7,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 15,
+ "product_name": "放课后time",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/aea2dd7b8894ce31d578d4fad6a7188c7b49cb2f.jpg",
+ "l_img": "bfs/space/6e799ff2de2de55d27796707a283068d66cdf3f4.png",
+ "thumbnail_img": "",
+ "sort_num": 6,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 4,
+ "product_name": "昴宿星团",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/1f4eaf70d1bb981f6057b3e440249d7a1f65774f.jpg",
+ "l_img": "bfs/space/3ab888c1d149e864ab44802dea8c1443e940fa0d.png",
+ "thumbnail_img": "",
+ "sort_num": 5,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 7,
+ "product_name": "蔷薇洛丽塔",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/718eac8c71e29b8a80431c46110805c3a40e30a6.jpg",
+ "l_img": "bfs/space/70ce28bcbcb4b7d0b4f644b6f082d63a702653c1.png",
+ "thumbnail_img": "",
+ "sort_num": 4,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 9,
+ "product_name": "黑暗之门",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/ef1b08e62fdc35b06e39795bc6de8e510935bf97.jpg",
+ "l_img": "bfs/space/cd52d4ac1d336c940cc4958120170f7928d9e606.png",
+ "thumbnail_img": "",
+ "sort_num": 3,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ },
+ {
+ "id": 19,
+ "product_name": "你的名字",
+ "price": 0,
+ "coin_type": 0,
+ "vip_free": 0,
+ "s_img": "bfs/space/373e127e8784d3e4c1b5e6db0c27702ba077643f.jpg",
+ "l_img": "bfs/space/f49642b3683a08e3190f29d5a095386451f8952c.jpg",
+ "thumbnail_img": "",
+ "sort_num": 2,
+ "is_disable": 0,
+ "expire": 0,
+ "had": 0
+ }
+ ]
+}
+```
+
+
+
+### 设置空间头图 (Web端)
+
+> https://space.bilibili.com/ajax/settings/setToutu
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+鉴权方式: referer为 `.bilibili.com` 域名下
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ---------------------------------- | ------ | ---- |
+| id | num | 头图 ID | 必要 | |
+| csrf | str | CSRF Token (即 Cookie bili_jct 值) | 不必要 | |
+
+**JSON回复:**
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | -------- | --------------------------- |
+| status | bool | 状态 | true: 成功 false: 失败 |
+| data | str | 错误信息 | 正确时无此项 (带有转义) |
+
+**示例:**
+
+设置空间头图为为`王牌特工(id=12)`
+
+```shell
+curl -X POST "https://space.bilibili.com/ajax/settings/setToutu" \
+--referer "https://space.bilibili.com/" \
+--data-urlencode "id=12" \
+--data-urlencode "csrf=xxx" \
+-b "SESSDATA=xxx; bili_jct=xxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "status": true
+}
+```
+
+
+
+#### 调整空间板块布局
+
+> http://space.bilibili.com/ajax/settings/setIndexOrder
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:Cookie中`DedeUserID`及`DedeUserID__ckMd5`存在且不为0,referer为 `.bilibili.com`域名下
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----------- | ---- | ------------------------ | ------ | ------------------------------------------------------------ |
+| index_order | nums | 布局列表 | 必要 | 每个值之间用","(%2C)分隔 先左侧布局再右侧布局 值的意义见下表 |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+布局参数`index_order`:
+
+| 值 | 含义 |
+| ---- | ------------------------------------ |
+| 1 | (左侧)我的稿件 |
+| 2 | (左侧)我的收藏夹 |
+| 3 | (左侧)订阅番剧 |
+| 4 | (左侧)订阅标签 |
+| 5 | (左侧)最近投币的视频 |
+| 6 | (左侧)我的圈子 **(此板块被隐藏)** |
+| 7 | (左侧)我的频道 |
+| 8 | (左侧)我的专栏 |
+| 9 | (左侧)我的相簿 |
+| 21 | (右侧)公告 |
+| 22 | (右侧)直播间 |
+| 23 | (右侧)个人资料 |
+| 24 | (右侧)官方活动 |
+| 25 | (右侧)最近玩的游戏 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | -------- | ----------------------------------- |
+| status | bool | 操作结果 | true:操作成功 false:操作失败 |
+| data | str | 错误信息 | 正确时无此项 |
+
+**示例:**
+
+调整空间布局为:
+
+```text
+我的稿件 直播间
+我的专栏 个人资料
+订阅番剧 公告
+我的收藏夹 官方活动
+我的相簿 最近玩的游戏
+最近投币的视频
+订阅标签
+我的频道
+```
+
+```shell
+curl 'https://space.bilibili.com/ajax/settings/setIndexOrder' \
+--data-urlencode 'index_order=1,8,3,2,9,5,4,7,22,23,21,24,25,6' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx;DedeUserID=1;DedeUserID__ckMd5=1;' \
+-e 'https://www.bilibili.com'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "status": true
+}
+```
+
+
+
+#### 修改空间隐私权限
+
+> http://space.bilibili.com/ajax/settings/setPrivacy
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:Cookie中`DedeUserID`及`DedeUserID__ckMd5`存在且不为0,referer为 `.bilibili.com`域名下
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----------- | ---- | ------------------------ | ------ | ---------------------------------- |
+| fav_video | num | 收藏视频 | 非必要 | 0:隐藏 1:公开 **下同** |
+| bangumi | num | 追番及追剧 | 非必要 | |
+| tags | num | 关注的TAG | 非必要 | |
+| coins_video | num | 投币的视频 | 非必要 | |
+| user_info | num | 个人信息 | 非必要 | |
+| played_game | num | 玩过的游戏 | 非必要 | |
+| csrf | nstr | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---- | -------- | ----------------------------------- |
+| status | bool | 操作结果 | true:操作成功 false:操作失败 |
+| data | str | 错误信息 | 正确时无此项 |
+
+**示例:**
+
+设置`关注的TAG`为隐藏
+
+```shell
+curl 'https://space.bilibili.com/ajax/settings/setPrivacy' \
+--data-urlencode 'tags=0' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx;DedeUserID=1;DedeUserID__ckMd5=1;' \
+-e 'https://www.bilibili.com'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "status": true
+}
+```
+
+
+
+### 查询用户最近访问内容
+
+#### 查询用户最近玩过的游戏
+
+> https://api.bilibili.com/x/space/lastplaygame
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+如设置隐私查看自己的需要认证
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ---- |
+| mid | num | 目标用户mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------------------------------- | -------- | ---------------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 53013:用户隐私设置未公开 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | 隐藏时:null 公开时:array | 信息本体 | |
+
+`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---------------- |
+| 0 | obj | 游戏1 | |
+| n | obj | 游戏(n+1) | 项数为总计游戏数 |
+| …… | obj | …… | …… |
+
+`data`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | ---------- | ---- |
+| website | str | 游戏主页 url | |
+| image | str | 游戏图标 url | |
+| name | str | 游戏名 | |
+
+**示例:**
+
+查询`mid=2`的最近玩过的游戏
+
+```shell
+curl -G 'https://api.bilibili.com/x/space/lastplaygame' \
+ --data-urlencode 'mid=2'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [
+ {
+ "website": "https://game.bilibili.com/fgo/event_meihosou",
+ "image": "http://i0.hdslb.com/bfs/game/f7d4ee0877089e4079b8f0b4f5c95dd4ceba512a.png",
+ "name": "命运-冠位指定(Fate/GO)"
+ },
+ {
+ "website": "https://game.bilibili.com/pcr/xxtix",
+ "image": "http://i0.hdslb.com/bfs/game/7922ecea5cc76fe3c8c177e1d4a6c8cf1c36a700.jpg",
+ "name": "公主连结Re:Dive"
+ },
+ {
+ "website": "https://game.bilibili.com/dwbgx/",
+ "image": "http://i0.hdslb.com/bfs/game/6d5b2df70dfa987408d8d09110cdc327949885e3.png",
+ "name": "大王不高兴"
+ },
+ {
+ "website": "https://game.bilibili.com/bangdream/1stanniversary-yxzx/",
+ "image": "http://i0.hdslb.com/bfs/game/4a7d0b7272dffe5a489ee935b6bd2d4f7d5f1257.png",
+ "name": "BanG Dream!"
+ },
+ {
+ "website": "http://www.biligame.com/detail/?id=101772",
+ "image": "http://i0.hdslb.com/bfs/game/8e8b04e7bd2170c2ba2c9f563a62c72bac2eba2c.jpg",
+ "name": "明日方舟"
+ }
+ ]
+}
+```
+
+
+
+#### 查询用户最近玩过的游戏V2
+
+> https://api.bilibili.com/x/space/lastplaygame/v2
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+如设置隐私查看自己的需要认证
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ---- |
+| mid | num | 目标用户mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------------------------------- | -------- | ---------------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 53013:用户隐私设置未公开 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | 隐藏时:null 公开时:obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ----- | ------ | --- |
+| page_num | num | 当前页码 | |
+| page_size | num | 每页项数 | |
+| total_count | num | 游戏总数 | |
+| list | array | 游戏列表 | |
+
+`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---------------- |
+| 0 | obj | 游戏1 | |
+| n | obj | 游戏(n+1) | 项数为总计游戏数 |
+| …… | obj | …… | …… |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | ----- | ----------- | ----------------- |
+| game_base_id | num | 游戏 id | biligame 的游戏 id |
+| game_name | str | 游戏名 | |
+| game_icon | str | 游戏图标 url | |
+| grade | num | 游戏评分 | 如`8.2`、`6.8` |
+| detail_url | str | 游戏主页 url | |
+| game_tags | array | 游戏标签 | |
+| notice | str | 游戏简介文案 | |
+| gift_title | str | 游戏礼物文案 | |
+| game_status_v2 | num | (?) | |
+
+`game_tags`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------ | --------------------------- |
+| 0 | obj | 游戏标签1 | 如`角色扮演`、`音乐节奏`、`休闲` |
+| n | obj | 游戏标签(n+1) | |
+| …… | obj | …… | …… |
+
+**示例:**
+
+查询`mid=2`的最近玩过的游戏
+
+```shell
+curl -G 'https://api.bilibili.com/x/space/lastplaygame/v2' \
+ --data-urlencode 'mid=2'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "page_num": 0,
+ "page_size": 15,
+ "total_count": 8,
+ "list": [
+ {
+ "game_base_id": 102567,
+ "game_name": "坎特伯雷公主与骑士唤醒冠军之剑的奇幻冒险",
+ "game_icon": "https://i0.hdslb.com/bfs/game/fc2f4fd3a347eeb9b8b6ab59d961269bdd05d4e0.png",
+ "grade": 8.2,
+ "detail_url": "https://www.biligame.com/detail/?id=102567",
+ "game_tags": [
+ "角色扮演",
+ "像素风"
+ ],
+ "notice": "像素风欢脱冒险RPG",
+ "gift_title": "",
+ "game_status_v2": 0
+ },
+ {
+ "game_base_id": 101661,
+ "game_name": "光·遇",
+ "game_icon": "https://i0.hdslb.com/bfs/game/9a1be39915f057597f9328afe503a2bbd0de7754.png",
+ "grade": 6.8,
+ "detail_url": "https://www.biligame.com/detail/?id=101661",
+ "game_tags": [
+ "休闲",
+ "治愈",
+ "唯美"
+ ],
+ "notice": "九色鹿季开启,探索本真之旅",
+ "gift_title": "光·遇九色鹿季回归礼包",
+ "game_status_v2": 0
+ },
+ {
+ "game_base_id": 103496,
+ "game_name": "原神",
+ "game_icon": "https://i0.hdslb.com/bfs/game/2b29383536b3d1a2517bfcb73767f78c242f0458.png",
+ "grade": 6.5,
+ "detail_url": "https://www.biligame.com/detail/?id=103496",
+ "game_tags": [
+ "角色扮演",
+ "二次元",
+ "冒险"
+ ],
+ "notice": "跨越尘世的探索之旅",
+ "gift_title": "bilibili-原神4.4版本独家礼包",
+ "game_status_v2": 0
+ },
+ {
+ "game_base_id": 49,
+ "game_name": "命运-冠位指定(Fate/GO)",
+ "game_icon": "https://i0.hdslb.com/bfs/game/ca5d8d4b3a042beddf7cabca20ae0c946527d1bf.png",
+ "grade": 6,
+ "detail_url": "https://www.biligame.com/detail/?id=49",
+ "game_tags": [
+ "卡牌",
+ "fate",
+ "厨向"
+ ],
+ "notice": "第2部现已开启!",
+ "gift_title": "",
+ "game_status_v2": 0
+ },
+ {
+ "game_base_id": 102216,
+ "game_name": "公主连结Re:Dive",
+ "game_icon": "https://i0.hdslb.com/bfs/game/3bb819e010fe6d594d8f4d417ee380f40e8b5b06.png",
+ "grade": 8.4,
+ "detail_url": "https://www.biligame.com/detail/?id=102216",
+ "game_tags": [
+ "角色扮演"
+ ],
+ "notice": "新角色「璃乃(圣诞节)」登场!",
+ "gift_title": "",
+ "game_status_v2": 0
+ },
+ {
+ "game_base_id": 168,
+ "game_name": "BanG Dream!",
+ "game_icon": "https://i0.hdslb.com/bfs/game/d196365d9f112a5adede7eedea1e4154e98c5e53.png",
+ "grade": 9.2,
+ "detail_url": "https://www.biligame.com/detail/?id=168",
+ "game_tags": [
+ "音乐节奏",
+ "BanG Dream"
+ ],
+ "notice": "「迎风展翅的我们」活动开启!",
+ "gift_title": "",
+ "game_status_v2": 0
+ },
+ {
+ "game_base_id": 101772,
+ "game_name": "明日方舟",
+ "game_icon": "https://i0.hdslb.com/bfs/game/faa556b00d29fffc88281c1ee038b1b7f23aa5c2.jpg",
+ "grade": 7.4,
+ "detail_url": "https://www.biligame.com/detail/?id=101772",
+ "game_tags": [
+ "策略",
+ "架空文明",
+ "末世"
+ ],
+ "notice": "2023感谢庆典正式开启",
+ "gift_title": "",
+ "game_status_v2": 0
+ },
+ {
+ "game_base_id": 97,
+ "game_name": "碧蓝航线",
+ "game_icon": "https://i0.hdslb.com/bfs/game/b141a7690c226a0eae66518c713d3af62613b21d.png",
+ "grade": 8.7,
+ "detail_url": "https://www.biligame.com/detail/?id=97",
+ "game_tags": [
+ "养成"
+ ],
+ "notice": "指挥官,欢迎回港",
+ "gift_title": "",
+ "game_status_v2": 0
+ }
+ ]
+ }
+}
+```
+
+
+
+#### 查询用户最近投币视频(Web)
+
+> https://api.bilibili.com/x/space/coin/video
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+如设置隐私查看自己的需要认证
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | --------- | ------ | ---- |
+| vmid | num | 目标用户mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------------------------------- | -------- | ---------------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 53013:用户隐私设置未公开 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | 隐藏时:null 公开时:array | 信息本体 | |
+
+`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ---- |
+| 0 | obj | 投币视频1 | |
+| n | obj | 投币视频(n+1) | |
+| …… | obj | …… | |
+
+`data`数组中的对象:
+
+基本与[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中`data`对象字段一致
+
+**示例:**
+
+查看用户`mid=15858903`的最近投币视频
+
+```shell
+curl -G 'http://space.bilibili.com/x/space/coin/video' \
+ --data-urlencode 'vmid=15858903' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [
+ {
+ "aid": 669644066,
+ "videos": 1,
+ "tid": 75,
+ "tname": "动物圈",
+ "copyright": 2,
+ "pic": "http://i1.hdslb.com/bfs/archive/0f73a68b8f449cc72e9ef109685bd295dc0c0c9d.jpg",
+ "title": "在人类幼崽身上用尽了温柔",
+ "pubdate": 1600608261,
+ "ctime": 1600608261,
+ "desc": "https://weibo.com/tv/show/1034:4551253766897703?from=old_pc_videoshow",
+ "state": 0,
+ "attribute": 16384,
+ "duration": 29,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0
+ },
+ "owner": {
+ "mid": 258457966,
+ "name": "卧龙寺",
+ "face": "http://i2.hdslb.com/bfs/face/f868d1f522733fdcf72a6267e0237157dd0e9948.jpg"
+ },
+ "stat": {
+ "aid": 669644066,
+ "view": 3412898,
+ "danmaku": 719,
+ "reply": 1481,
+ "favorite": 21909,
+ "coin": 2864,
+ "share": 13702,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 86970,
+ "dislike": 0
+ },
+ "dynamic": "",
+ "cid": 237319289,
+ "dimension": {
+ "width": 576,
+ "height": 1024,
+ "rotate": 0
+ },
+ "bvid": "BV1sa4y1j7jk",
+ "coins": 1,
+ "time": 1601802763,
+ "ip": "",
+ "inter_video": false
+ },
+ {
+ "aid": 202267998,
+ "videos": 1,
+ "tid": 138,
+ "tname": "搞笑",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/ca7746f2207114513f1a421d7f744523275ee679.jpg",
+ "title": "充 电 器 の 痛",
+ "pubdate": 1601750952,
+ "ctime": 1601750952,
+ "desc": "这个简介吓到我了!",
+ "state": 0,
+ "attribute": 16512,
+ "duration": 50,
+ "mission_id": 14725,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0
+ },
+ "owner": {
+ "mid": 129922746,
+ "name": "-白糖洒一地-",
+ "face": "http://i0.hdslb.com/bfs/face/1f581f3b20a380c2fd13ecb8bbe409f8b49c6418.jpg"
+ },
+ "stat": {
+ "aid": 202267998,
+ "view": 109,
+ "danmaku": 2,
+ "reply": 11,
+ "favorite": 5,
+ "coin": 9,
+ "share": 0,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 20,
+ "dislike": 0
+ },
+ "dynamic": "",
+ "cid": 241861687,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "bvid": "BV1oh411X7iA",
+ "coins": 2,
+ "time": 1601773750,
+ "ip": "",
+ "inter_video": false
+ },
+ {
+ "aid": 839722373,
+ "videos": 1,
+ "tid": 208,
+ "tname": "校园学习",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/11ed53241ceab314c919adba9f85582d24d9313c.jpg",
+ "title": "“白piáo”用日语到底怎么说?油管人气日语老师来教你!",
+ "pubdate": 1601026026,
+ "ctime": 1601026026,
+ "desc": "志方老师的B站用语日语课又来了~\n欢迎大家来看哦,\n如果喜欢我们的作品的话,欢迎大家用2~3连+转发来支持我们~\n如果拒绝的话,也可以用日语在评论和弹幕里刷上一波~即可以锻炼日语又可以拒绝我们,岂不美哉~~",
+ "state": 0,
+ "attribute": 16768,
+ "duration": 310,
+ "mission_id": 14655,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0
+ },
+ "owner": {
+ "mid": 677926489,
+ "name": "日语志方老师",
+ "face": "http://i2.hdslb.com/bfs/face/d465e5cd42e3523a52b3bef38dce7b23627b7723.jpg"
+ },
+ "stat": {
+ "aid": 839722373,
+ "view": 130688,
+ "danmaku": 1320,
+ "reply": 799,
+ "favorite": 3722,
+ "coin": 5883,
+ "share": 339,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 17585,
+ "dislike": 0
+ },
+ "dynamic": "志方老师的B站用语日语课又来了~\n欢迎大家来看哦,\n如果喜欢我们的作品的话,欢迎大家用2~3连+转发来支持我们~\n如果拒绝的话,也可以用日语在评论和弹幕里刷上一波~即可以锻炼日语又可以拒绝我们,岂不美哉~~",
+ "cid": 238876133,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "bvid": "BV1n54y117kq",
+ "coins": 2,
+ "time": 1601036198,
+ "ip": "",
+ "inter_video": false
+ }
+ ]
+}
+```
+
+
+
+#### 查询用户最近投币视频(APP)
+
+> https://app.bilibili.com/x/v2/space/coinarc
+
+*请求方式:GET*
+
+认证方式:APP
+
+如设置隐私查看自己的需要认证
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ----------- | ------ | -------- |
+| access_key | str | APP登录Token | APP方式必要 | |
+| appkey | str | APP密钥 | APP方式必要 | |
+| vmid | num | 目标用户mid | 必要 | |
+| pn | num | 页码 | 非必要 | 默认为1 |
+| ps | num | 每页项数 | 非必要 | 默认为20 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------ |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ----- | ---------- | ---- |
+| count | num | 投币的视频数 | |
+| item | array | 投币视频列表 | |
+
+`item`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------------ | ---- |
+| 0 | obj | 投币的视频信息1 | |
+| n | obj | 投币的视频信息(n+1) | |
+| …… | obj | …… | |
+
+`item`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ---- | ------------ | ---------------------- |
+| title | str | 稿件标题 | |
+| subtitle | str | 空 | |
+| tname | str | 空 | |
+| cover | str | 封面图片 url | |
+| cover_icon | str | 空 | |
+| uri | str | APP 跳转 uri | 如`bilibili://video/2` |
+| param | str | 稿件 avid | |
+| goto | str | av | |
+| length | num | 空 | |
+| duration | num | 稿件视频长度 | 单位为秒 |
+| is_popular | bool | (?) | |
+| is_steins | bool | (?) | |
+| is_ugcpay | bool | (?) | |
+| is_cooperation | str | (?) | |
+| is_pgc | str | (?) | |
+| is_live_playback | str | (?) | |
+| is_pugv | str | (?) | |
+| is_fold | num | (?) | |
+| play | num | 播放量 | |
+| danmaku | num | 弹幕量 | |
+| ctime | num | 发布时间 | 时间戳 |
+| ugc_pay | num | 0 | |
+| author | str | UP主昵称 | |
+| state | bool | true | |
+| videos | num | 0 | |
+| view_content | str | 稿件播放量文案 | |
+| icon_type | num | 0 | |
+| publish_time_text | str | 空 | |
+
+**示例:**
+
+用户`mid=2`的投币列表
+
+```shell
+curl -G 'https://app.bilibili.com/x/v2/space/coinarc' \
+ --data-urlencode 'appkey=1d8b6e7d45233436' \
+ --data-urlencode 'access_key=xxx' \
+ --data-urlencode 'vmid=2' \
+ --data-urlencode 'ps=2' \
+ --data-urlencode 'pn=1' \
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "count": 2,
+ "item": [
+ {
+ "title": "请打开麦克风交流",
+ "subtitle": "",
+ "tname": "",
+ "cover": "http://i1.hdslb.com/bfs/archive/cf9aea43b72354ee8c9486e4bf8e07cb38920a65.jpg",
+ "cover_icon": "",
+ "uri": "bilibili://video/496832459?player_width=1080\u0026player_height=1920\u0026player_rotate=0",
+ "param": "496832459",
+ "goto": "av",
+ "length": "",
+ "duration": 134,
+ "is_popular": false,
+ "is_steins": false,
+ "is_ugcpay": false,
+ "is_cooperation": false,
+ "is_pgc": false,
+ "is_live_playback": false,
+ "is_pugv": false,
+ "is_fold": false,
+ "play": 706480,
+ "danmaku": 167,
+ "ctime": 1706431476,
+ "ugc_pay": 0,
+ "author": "三个猪鼓励",
+ "state": true,
+ "videos": 0,
+ "view_content": "70.6万",
+ "icon_type": 0,
+ "publish_time_text": ""
+ },
+ {
+ "title": "【裏命】地球的内部【いよわ】【中文CC字幕】",
+ "subtitle": "",
+ "tname": "",
+ "cover": "http://i0.hdslb.com/bfs/archive/e087224ae4a5ff9ef3f2f6b7644d635276b8f5c6.jpg",
+ "cover_icon": "",
+ "uri": "bilibili://video/860645391?player_width=1920\u0026player_height=1080\u0026player_rotate=0",
+ "param": "860645391",
+ "goto": "av",
+ "length": "",
+ "duration": 264,
+ "is_popular": false,
+ "is_steins": false,
+ "is_ugcpay": false,
+ "is_cooperation": false,
+ "is_pgc": false,
+ "is_live_playback": false,
+ "is_pugv": false,
+ "is_fold": false,
+ "play": 194375,
+ "danmaku": 173,
+ "ctime": 1669713070,
+ "ugc_pay": 0,
+ "author": "精神安定剤",
+ "state": true,
+ "videos": 0,
+ "view_content": "19.4万",
+ "icon_type": 0,
+ "publish_time_text": ""
+ }
+ ]
+ }
+}
+```
+
+
+
+#### 查询用户最近点赞视频(Web)
+
+> https://api.bilibili.com/x/space/like/video
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+如设置隐私查看自己的需要认证
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | --------- | ------ | ---- |
+| vmid | num | 目标用户mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------------------------------- | -------- | ---------------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 53013:用户隐私设置未公开 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | 隐藏时:null 公开时:array | 信息本体 | |
+
+`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ---- |
+| 0 | obj | 点赞视频1 | |
+| n | obj | 点赞视频(n+1) | |
+| …… | obj | …… | |
+
+`data`数组中的对象:
+
+基本与[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中`data`对象字段一致
+
+**示例:**
+
+查看用户`mid=15858903`的最近点赞视频
+
+```shell
+curl -G 'http://space.bilibili.com/x/space/like/video' \
+ --data-urlencode 'vmid=15858903' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "aid": 1700085880,
+ "videos": 1,
+ "tid": 21,
+ "tname": "日常",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/7fad4ca408c66eb7ea72188f56bcf952306d5807.jpg",
+ "title": "你是从什么时候,意识到自己缺爱的呢?",
+ "pubdate": 1706706000,
+ "ctime": 1706602115,
+ "desc": "关于个人情感问题,私信发“2024”我来帮你~",
+ "state": 0,
+ "duration": 91,
+ "mission_id": 4009559,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 2104592226,
+ "name": "鲸落艳红尘",
+ "face": "https://i0.hdslb.com/bfs/face/80160fbcf71958e6f5ad3a4fdfa39a55cc0699a5.jpg"
+ },
+ "stat": {
+ "aid": 1700085880,
+ "view": 930,
+ "danmaku": 1,
+ "reply": 5,
+ "favorite": 18,
+ "coin": 0,
+ "share": 4,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 27,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 930
+ },
+ "dynamic": "",
+ "cid": 1424231007,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1XK421y7ZL",
+ "first_frame": "http://i2.hdslb.com/bfs/storyff/n240130sa1k9birz4lwlsm21ya1w3p2c_firsti.jpg",
+ "pub_location": "湖北",
+ "bvid": "BV1XK421y7ZL",
+ "inter_video": false,
+ "resource_type": "ugc",
+ "subtitle": "",
+ "enable_vt": 0
+ },
+ {
+ "aid": 836926413,
+ "videos": 1,
+ "tid": 21,
+ "tname": "日常",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/dceaf79d1cc4f74ab8cd862f454a8ec4b4a44343.jpg",
+ "title": "内心的创伤,是建立深度亲密关系的桥梁!",
+ "pubdate": 1706594400,
+ "ctime": 1706515438,
+ "desc": "关于个人情感问题,私信发“2024”我来帮你~",
+ "state": 0,
+ "duration": 297,
+ "mission_id": 4009559,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 2104592226,
+ "name": "鲸落艳红尘",
+ "face": "https://i0.hdslb.com/bfs/face/80160fbcf71958e6f5ad3a4fdfa39a55cc0699a5.jpg"
+ },
+ "stat": {
+ "aid": 836926413,
+ "view": 1903,
+ "danmaku": 0,
+ "reply": 7,
+ "favorite": 142,
+ "coin": 34,
+ "share": 30,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 118,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 1903
+ },
+ "dynamic": "",
+ "cid": 1423127570,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1xg4y1e7kY",
+ "first_frame": "http://i0.hdslb.com/bfs/storyff/n240129qn55at7dr1775k12hp34tw284_firsti.jpg",
+ "pub_location": "湖北",
+ "bvid": "BV1xg4y1e7kY",
+ "inter_video": false,
+ "resource_type": "ugc",
+ "subtitle": "",
+ "enable_vt": 0
+ },
+ ……
+ ]
+ }
+}
+```
+
+
+
+#### 查询用户最近点赞视频(APP)
+
+> https://app.bilibili.com/x/v2/space/likearc
+
+*请求方式:GET*
+
+认证方式:APP
+
+如设置隐私查看自己的需要认证
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ----------- | ------ | -------- |
+| access_key | str | APP登录Token | APP方式必要 | |
+| appkey | str | APP密钥 | APP方式必要 | |
+| vmid | num | 目标用户mid | 必要 | |
+| pn | num | 页码 | 非必要 | 默认为1 |
+| ps | num | 每页项数 | 非必要 | 默认为20 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ----- | ---------- | ---- |
+| count | num | 点赞的视频数 | |
+| item | array | 点赞视频列表 | |
+
+`item`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------------ | ---- |
+| 0 | obj | 点赞的视频信息1 | |
+| n | obj | 点赞的视频信息(n+1) | |
+| …… | obj | …… | |
+
+`item`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ---- | ------------ | ---------------------- |
+| title | str | 稿件标题 | |
+| subtitle | str | 空 | |
+| tname | str | 空 | |
+| cover | str | 封面图片 url | |
+| cover_icon | str | 空 | |
+| uri | str | APP 跳转 uri | 如`bilibili://video/2` |
+| param | str | 稿件 avid | |
+| goto | str | av | |
+| length | num | 空 | |
+| duration | num | 稿件视频长度 | 单位为秒 |
+| is_popular | bool | (?) | |
+| is_steins | bool | (?) | |
+| is_ugcpay | bool | (?) | |
+| is_cooperation | str | (?) | |
+| is_pgc | str | (?) | |
+| is_live_playback | str | (?) | |
+| is_pugv | str | (?) | |
+| is_fold | num | (?) | |
+| play | num | 播放量 | |
+| danmaku | num | 弹幕量 | |
+| ctime | num | 发布时间 | 时间戳 |
+| ugc_pay | num | 0 | |
+| author | str | UP主昵称 | |
+| state | bool | true | |
+| videos | num | 0 | |
+| view_content | str | 稿件播放量文案 | |
+| icon_type | num | 0 | |
+| publish_time_text | str | 空 | |
+
+**示例:**
+
+用户`mid=2`的点赞列表
+
+```shell
+curl -G 'https://app.bilibili.com/x/v2/space/likearc' \
+ --data-urlencode 'appkey=1d8b6e7d45233436' \
+ --data-urlencode 'access_key=xxx' \
+ --data-urlencode 'vmid=2' \
+ --data-urlencode 'ps=2' \
+ --data-urlencode 'pn=1' \
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "count": 2,
+ "item": [
+ {
+ "title": "兄弟难舍也难分",
+ "subtitle": "",
+ "tname": "",
+ "cover": "http://i1.hdslb.com/bfs/archive/58f031a52eab6d5faec5a39dfaab5728f65672d5.jpg",
+ "cover_icon": "",
+ "uri": "bilibili://video/624351941?player_width=1080\u0026player_height=1920\u0026player_rotate=0",
+ "param": "624351941",
+ "goto": "av",
+ "length": "",
+ "duration": 216,
+ "is_popular": false,
+ "is_steins": false,
+ "is_ugcpay": false,
+ "is_cooperation": false,
+ "is_pgc": false,
+ "is_live_playback": false,
+ "is_pugv": false,
+ "is_fold": false,
+ "play": 423652,
+ "danmaku": 362,
+ "ctime": 1706320200,
+ "ugc_pay": 0,
+ "author": "甜蜜老张",
+ "state": true,
+ "videos": 0,
+ "view_content": "42.4万",
+ "icon_type": 0,
+ "publish_time_text": ""
+ },
+ {
+ "title": "技能搭配不累,共赴热血团战!",
+ "subtitle": "",
+ "tname": "",
+ "cover": "http://i2.hdslb.com/bfs/archive/2094b8e0be819222d320e2841ee1c39f5f2e4357.jpg",
+ "cover_icon": "",
+ "uri": "bilibili://video/793597196?player_width=1280\u0026player_height=720\u0026player_rotate=0",
+ "param": "793597196",
+ "goto": "av",
+ "length": "",
+ "duration": 41,
+ "is_popular": false,
+ "is_steins": false,
+ "is_ugcpay": false,
+ "is_cooperation": false,
+ "is_pgc": false,
+ "is_live_playback": false,
+ "is_pugv": false,
+ "is_fold": false,
+ "play": 1237,
+ "danmaku": 2,
+ "ctime": 1704855559,
+ "ugc_pay": 0,
+ "author": "38047aa1-cb8a-4",
+ "state": true,
+ "videos": 0,
+ "view_content": "1237",
+ "icon_type": 0,
+ "publish_time_text": ""
+ }
+ ]
+ }
+}
+```
+
+
+
+## 投稿
+
+
+
+### 查询用户投稿视频明细
+
+> https://api.bilibili.com/x/space/wbi/arc/search
+
+> ~~https://api.bilibili.com/x/space/arc/search~~ (已废弃,保留是方便遇到问题的人搜索到此处)
+
+*请求方式:GET*
+
+鉴权方式:[Wbi 签名](../misc/sign/wbi.md)
+
+另见 [根据关键词查找视频](../video/collection.md#根据关键词查找视频), 功能基本相同, 暂未发现风控校验
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------- | ---- | ------------ | ------ | ----------------------------------------------------------------------------- |
+| mid | num | 目标用户mid | 必要 | |
+| order | str | 排序方式 | 非必要 | 默认为pubdate 最新发布:pubdate 最多播放:click 最多收藏:stow |
+| tid | num | 筛选目标分区 | 非必要 | 默认为0 0:不进行分区筛选 分区tid为所筛选的分区 |
+| keyword | str | 关键词筛选 | 非必要 | 用于使用关键词搜索该UP主视频稿件 |
+| pn | num | 页码 | 非必要 | 默认为 `1` |
+| ps | num | 每页项数 | 非必要 | 默认为 `30` |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 -412:请求被拦截 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ---- | -------------- | ---- |
+| list | obj | 列表信息 | |
+| page | obj | 页面信息 | |
+| episodic_button | obj | “播放全部“按钮 | |
+| is_risk | bool | | |
+| gaia_res_type | num | | |
+| gaia_data | obj | | |
+
+`data`中的`list`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ------ | ---------------- | ---- |
+| slist | array | 空数组 | |
+| tlist | obj | 投稿视频分区索引 | |
+| vlist | array | 投稿视频列表 | |
+
+`list`中的`tlist`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | ------------ | --------------------- |
+| {tid} | obj | 该分区的详情 | 字段名为存在的分区tid |
+| …… | obj | …… | 向下扩展 |
+
+`tlist`中的`{tid}`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | -------------------- | ---- |
+| count | num | 投稿至该分区的视频数 | |
+| name | str | 该分区名称 | |
+| tid | num | 该分区tid | |
+
+`list`中的`vlist`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ---- |
+| 0 | obj | 投稿视频1 | |
+| n | obj | 投稿视频(n+1) | |
+| …… | obj | …… | …… |
+
+`list`中的`vlist`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------ | ---- | -------------- | ---------------------------- |
+| aid | num | 稿件avid | |
+| attribute | num | | |
+| author | str | 视频UP主 | 不一定为目标用户(合作视频) |
+| bvid | str | 稿件bvid | |
+| comment | num | 视频评论数 | |
+| copyright | str | 视频版权类型 | |
+| created | num | 投稿时间 | 时间戳 |
+| description | str | 视频简介 | |
+| elec_arc_type | num | 充电为1,否则0 | 可能还有其他情况 |
+| enable_vt | num | 0 | 作用尚不明确 |
+| hide_click | bool | false | 作用尚不明确 |
+| is_avoided | num | 0 | 作用尚不明确 |
+| is_charging_arc | bool | 是否为充电视频 | |
+| is_lesson_video | num | 是否为课堂视频 | 0:否 1:是 |
+| is_lesson_finished | num | 课堂是否已完结 | 0:否 1:是 |
+| is_live_playback | num | 是否为直播回放 | 0:否 1:是 |
+| is_pay | num | 0 | 作用尚不明确 |
+| is_self_view | bool | false | 作用尚不明确 |
+| is_steins_gate | num | 是否为互动视频 | 0:否 1:是 |
+| is_union_video | num | 是否为合作视频 | 0:否 1:是 |
+| jump_url | str | 跳转链接 | 跳转到课堂的链接,否则为"" |
+| length | str | 视频长度 | MM:SS |
+| mid | num | 视频UP主mid | 不一定为目标用户(合作视频) |
+| meta | obj | 所属合集或课堂 | 无数据时为 null |
+| pic | str | 视频封面 | |
+| play | num | 视频播放次数 | |
+| playback_position | num | 百分比播放进度 | 封面下方显示的粉色条 |
+| review | num | 0 | 作用尚不明确 |
+| season_id | num | 合集或课堂编号 | 都不属于时为0 |
+| subtitle | str | 空 | 作用尚不明确 |
+| title | str | 视频标题 | |
+| typeid | num | 视频分区tid | |
+| video_review | num | 视频弹幕数 | |
+| vt | num | 0 | 作用尚不明确 |
+| vt_display | str | 空 | 作用尚不明确 |
+
+`list`中的`vlist`数组中的对象中的`meta`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ------------ | ---------------- |
+| attribute | num | 0 | 作用尚不明确 |
+| cover | str | 合集封面URL | |
+| ep_count | num | 合集视频数量 | |
+| ep_num | num | 合集视频数量 | |
+| first_aid | num | 首个视频av号 | |
+| id | num | 合集id | |
+| intro | str | 合集介绍 | |
+| mid | num | UP主uid | 若为课堂,则为0 |
+| ptime | num | unix时间(s) | 最后更新时间 |
+| sign_state | num | 0 | 作用尚不明确 |
+| stat | obj | 合集统计数据 | |
+| title | str | 合集名称 | |
+
+`list`中的`vlist`数组中的对象中的`meta`对象中的`stat`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ------------ | -------------------- |
+| coin | num | 合集总投币数 | |
+| danmaku | num | 合集总弹幕数 | |
+| favorite | num | 合集总收藏数 | |
+| like | num | 合集总点赞数 | |
+| mtime | num | unix时间(s) | 其他统计数据更新时间 |
+| reply | num | 合集总评论数 | |
+| season_id | num | 合集id | |
+| share | num | 合集总分享数 | |
+| view | num | 合集总播放量 | |
+| vt | num | 0 | 作用尚不明确 |
+| vv | num | 0 | 作用尚不明确 |
+
+`data`中的`page`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | ---------- | ---- |
+| count | num | 总计稿件数 | |
+| pn | num | 当前页码 | |
+| ps | num | 每页项数 | |
+
+`data`中的`episodic_button`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------- | ---- |
+| text | str | 按钮文字 | |
+| uri | str | 全部播放页url | |
+
+**示例:**
+
+`pn`(页码)和`ps`(每页项数)只改变`vlist`中成员的多少与内容
+
+以每页2项查询用户`mid=53456`的第1页投稿视频明细
+
+```shell
+curl -G 'https://api.bilibili.com/x/space/arc/search' \
+--data-urlencode 'mid=53456' \
+--data-urlencode 'ps=2' \
+--data-urlencode 'pn=1'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": {
+ "slist": [],
+ "tlist": {
+ "1": {
+ "tid": 1,
+ "count": 3,
+ "name": "动画"
+ },
+ "129": {
+ "tid": 129,
+ "count": 1,
+ "name": "舞蹈"
+ },
+ "160": {
+ "tid": 160,
+ "count": 96,
+ "name": "生活"
+ },
+ "177": {
+ "tid": 177,
+ "count": 4,
+ "name": "纪录片"
+ },
+ "181": {
+ "tid": 181,
+ "count": 50,
+ "name": "影视"
+ },
+ "188": {
+ "tid": 188,
+ "count": 444,
+ "name": "科技"
+ },
+ "196": {
+ "tid": 196,
+ "count": 2,
+ "name": "课堂"
+ }
+ },
+ "vlist": [{
+ "comment": 985,
+ "typeid": 250,
+ "play": 224185,
+ "pic": "http://i0.hdslb.com/bfs/archive/5e56c10a9bd67f2fcac46fdd0fc2caa8769700c8.jpg",
+ "subtitle": "",
+ "description": "这一次,我们的样片日记首次来到了西藏,在桃花季开启了藏东样片之旅!这趟“开荒”之旅我们跋山涉水,一路硬刚,多亏有路虎卫士这样的神队友撑全场!这次的素材我们也上传到了官网(ysjf.com/material),欢迎大家去看看~如果你喜欢这期视频,请多多支持我们,并把视频分享给你的朋友们一起看看!",
+ "copyright": "1",
+ "title": "和朋友去西藏拍样片日记……",
+ "review": 0,
+ "author": "影视飓风",
+ "mid": 946974,
+ "created": 1745290800,
+ "length": "22:11",
+ "video_review": 2365,
+ "aid": 114375683741573,
+ "bvid": "BV1ac5yzhE94",
+ "hide_click": false,
+ "is_pay": 0,
+ "is_union_video": 1,
+ "is_steins_gate": 0,
+ "is_live_playback": 0,
+ "is_lesson_video": 0,
+ "is_lesson_finished": 0,
+ "lesson_update_info": "",
+ "jump_url": "",
+ "meta": {
+ "id": 2046621,
+ "title": "样片日记",
+ "cover": "https://archive.biliimg.com/bfs/archive/e2ca3e5a6672cf35c9e61ac02e8d739cc0aafa8b.jpg",
+ "mid": 946974,
+ "intro": "",
+ "sign_state": 0,
+ "attribute": 140,
+ "stat": {
+ "season_id": 2046621,
+ "view": 31755096,
+ "danmaku": 171253,
+ "reply": 33685,
+ "favorite": 409505,
+ "coin": 935105,
+ "share": 199467,
+ "like": 1791607,
+ "mtime": 1745309513,
+ "vt": 0,
+ "vv": 0
+ },
+ "ep_count": 13,
+ "first_aid": 238588630,
+ "ptime": 1745290800,
+ "ep_num": 13
+ },
+ "is_avoided": 0,
+ "season_id": 2046621,
+ "attribute": 16793984,
+ "is_charging_arc": false,
+ "elec_arc_type": 0,
+ "vt": 0,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 0,
+ "is_self_view": false
+ }, {
+ "comment": 0,
+ "typeid": 197,
+ "play": 8506,
+ "pic": "https://archive.biliimg.com/bfs/archive/489f3df26a190a152ad479bfe50a73f1cd4c43c5.jpg",
+ "subtitle": "",
+ "description": "8节课,Tim和青青带你用iPhone拍出电影感",
+ "copyright": "1",
+ "title": "【影视飓风】只看8节课,用iPhone拍出电影感",
+ "review": 0,
+ "author": "影视飓风",
+ "mid": 946974,
+ "created": 1744865737,
+ "length": "00:00",
+ "video_review": 9,
+ "aid": 114351440726681,
+ "bvid": "BV1WB5ezxEnz",
+ "hide_click": false,
+ "is_pay": 0,
+ "is_union_video": 0,
+ "is_steins_gate": 0,
+ "is_live_playback": 0,
+ "is_lesson_video": 1,
+ "is_lesson_finished": 1,
+ "lesson_update_info": "8",
+ "jump_url": "https://www.bilibili.com/cheese/play/ss190402215",
+ "meta": {
+ "id": 190402215,
+ "title": "【影视飓风】只看8节课,用iPhone拍出电影感",
+ "cover": "https://archive.biliimg.com/bfs/archive/489f3df26a190a152ad479bfe50a73f1cd4c43c5.jpg",
+ "mid": 0,
+ "intro": "",
+ "sign_state": 0,
+ "attribute": 0,
+ "stat": {
+ "season_id": 190402215,
+ "view": 1111222,
+ "danmaku": 1853,
+ "reply": 0,
+ "favorite": 0,
+ "coin": 0,
+ "share": 0,
+ "like": 0,
+ "mtime": 0,
+ "vt": 0,
+ "vv": 0
+ },
+ "ep_count": 0,
+ "ptime": 1744865737,
+ "ep_num": 0
+ },
+ "is_avoided": 0,
+ "season_id": 190402215,
+ "attribute": 1073758592,
+ "is_charging_arc": false,
+ "elec_arc_type": 0,
+ "vt": 0,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 0,
+ "is_self_view": false
+ }]
+ },
+ "page": {
+ "pn": 1,
+ "ps": 42,
+ "count": 786
+ },
+ "episodic_button": {
+ "text": "播放全部",
+ "uri": "//www.bilibili.com/medialist/play/946974?from=space"
+ },
+ "is_risk": false,
+ "gaia_res_type": 0,
+ "gaia_data": null
+ }
+}
+```
+
+
+
+### 查询用户投稿相簿预览
+
+
+相簿功能已下线, 以下接口失效, 参见
+#801
+
+
+> https://api.bilibili.com/x/space/album/index
+
+*请求方式:GET*
+
+所有类型的相簿
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------ | ------ | ------- |
+| mid | num | 目标用户mid | 必要 | |
+| ps | num | 获取的相簿量 | 非必要 | 默认为8 定义域 1-大于1700 (注意滥用风险) |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------ | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | array | 相簿列表 | |
+
+`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ---- |
+| 0 | obj | 相簿内容1 | |
+| n | obj | 相簿内容(n+1) | |
+| …… | obj | …… | …… |
+
+`data`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ------ | ----------- | -------------- |
+| count | num | 总计图片数 | |
+| ctime | num | 发布时间 | 时间戳 |
+| description | str | 简介 | |
+| doc_id | num | 相簿id | 非动态!!! |
+| like | num | 点赞数 | |
+| pictures | array | 图片内容 | |
+| poster_uid | num | 上传用户mid | |
+| title | str | 标题 | 动态内容无 |
+| view | num | 浏览数 | |
+
+`data`数组中的对象中的`pictures`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | --------------------- |
+| 0 | obj | 内容图片1 | |
+| n | obj | 内容图片(n+1) | 项数取决于`count`的值 |
+| …… | obj | …… | …… |
+
+`pictures`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | -------- | ----------- |
+| img_height | num | 图片高度 | |
+| img_size | num | 图片大小 | 单位为KByte |
+| img_src | str | 图片url | |
+| img_width | num | 图片宽度 | |
+
+**示例:**
+
+查询用户`mid=53456`的投稿相簿预览
+
+```shell
+curl -G 'https://api.bilibili.com/x/space/album/index' \
+--data-urlencode 'mid=53456' \
+--data-urlencode 'ps=2'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [{
+ "doc_id": 60470424,
+ "poster_uid": 53456,
+ "title": "",
+ "description": "你醒啦![tv_大佬]\n之前说到过的百万粉纪念的视频已经定时在了今天下午七点,欢迎来看呀!",
+ "pictures": [{
+ "img_src": "https://i0.hdslb.com/bfs/album/2840366e30bf7c0aba9da5adde1a771255a57bc7.jpg",
+ "img_width": 625,
+ "img_height": 134,
+ "img_size": 14
+ }],
+ "count": 1,
+ "ctime": 1583444859,
+ "view": 1677521,
+ "like": 29974
+ }, {
+ "doc_id": 58962388,
+ "poster_uid": 53456,
+ "title": "",
+ "description": "上次的那些写实儿童画发出来啦!可以打印下来辟邪[tv_大佬]",
+ "pictures": [{
+ "img_src": "https://i0.hdslb.com/bfs/album/8acaf7c7897cb858cccab36c33a5e875adfef177.jpg",
+ "img_width": 2172,
+ "img_height": 3258,
+ "img_size": 2831
+ }, {
+ "img_src": "https://i0.hdslb.com/bfs/album/1611b6b56d3d4328889a62b9f9bdc92e9d065532.jpg",
+ "img_width": 3456,
+ "img_height": 5184,
+ "img_size": 3024
+ }, {
+ "img_src": "https://i0.hdslb.com/bfs/album/f3a30a2ef5b39711af8b945d54d85ffd1e932b8a.jpg",
+ "img_width": 1200,
+ "img_height": 757,
+ "img_size": 313
+ }],
+ "count": 3,
+ "ctime": 1582881332,
+ "view": 1176646,
+ "like": 25734
+ }]
+}
+```
+
+
+
+
+
+### 查询用户投稿相簿明细
+
+
+
+相簿功能已下线, 以下接口失效
+
+
+> https://api.vc.bilibili.com/link_draw/v1/doc/doc_list
+> https://api.bilibili.com/x/dynamic/feed/draw/doc_list
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --------- | ---- | ----------- | ------ | ------------------------------------------------------------ |
+| uid | num | 目标用户mid | 必要 | |
+| page_num | num | 页码 | 必要 | 默认为0 |
+| page_size | num | 每页项数 | 必要 | 默认为30 |
+| biz | str | 查询类型 | 非必要 | 全部:all 绘画:draw 摄影:photo 日常:daily 默认为all |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------- |
+| code | num | 返回值 | 0:成功 |
+| msg | str | 错误信息 | 默认为success |
+| message | str | 错误信息 | 默认为success |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ------ | -------- | ---- |
+| items | array | 相簿列表 | |
+
+`items`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ---- |
+| 0 | obj | 相簿内容1 | |
+| n | obj | 相簿内容(n+1) | |
+| …… | obj | …… | …… |
+
+`items`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ------ | ----------- | -------------- |
+| count | num | 总计图片数 | |
+| ctime | num | 发布时间 | 时间戳 |
+| description | str | 简介 | |
+| doc_id | num | 相簿id | 非动态!!! |
+| like | num | 点赞数 | |
+| pictures | array | 图片内容 | |
+| poster_uid | num | 上传用户mid | |
+| title | str | 标题 | 动态内容无 |
+| view | num | 浏览数 | |
+
+`items`数组中的对象中的`pictures`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | --------------------- |
+| 0 | obj | 内容图片1 | |
+| n | obj | 内容图片(n+1) | 项数取决于`count`的值 |
+| …… | obj | …… | …… |
+
+`pictures`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | -------- | ----------- |
+| img_height | num | 图片高度 | |
+| img_size | num | 图片大小 | 单位为KByte |
+| img_src | str | 图片url | |
+| img_width | num | 图片宽度 | |
+
+**示例:**
+
+查询用户`mid=53456`的投稿明细中的全部类型
+
+```shell
+curl -G 'https://api.vc.bilibili.com/link_draw/v1/doc/doc_list' \
+--data-urlencode 'uid=2' \
+--data-urlencode 'page_num=1' \
+--data-urlencode 'page_size=2' \
+--data-urlencode 'biz=all'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "success",
+ "message": "success",
+ "data": {
+ "items": [{
+ "doc_id": 59015720,
+ "poster_uid": 2,
+ "title": "",
+ "description": "6影是真的无脑,2个宝石都护不住(设计师:这真是太酷了)",
+ "pictures": [{
+ "img_src": "http://i0.hdslb.com/bfs/album/8456f050ec8639c6e0cef36aba27bfdedc550590.jpg",
+ "img_width": 1824,
+ "img_height": 840,
+ "img_size": 1024
+ }],
+ "count": 1,
+ "ctime": 1582894607,
+ "view": 707073,
+ "like": 7055
+ }, {
+ "doc_id": 46853140,
+ "poster_uid": 2,
+ "title": "",
+ "description": "#年度报告# #新年Flag# https://www.bilibili.com/blackboard/timemachine2019.html\n决定了,这就是我的新年Flag!今年我一定要…",
+ "pictures": [{
+ "img_src": "http://i0.hdslb.com/bfs/album/5b3ae76f79d7cf2501afc3ca7c7da509dcf0e38a.jpg",
+ "img_width": 1125,
+ "img_height": 2184,
+ "img_size": 465
+ }, {
+ "img_src": "http://i0.hdslb.com/bfs/album/87789fe9644337a1f7e6a0655a32584705af8bda.jpg",
+ "img_width": 1125,
+ "img_height": 2184,
+ "img_size": 421
+ }, {
+ "img_src": "http://i0.hdslb.com/bfs/album/f752d7f3bb7952f6c0013b3f48ddcb07060b4721.jpg",
+ "img_width": 1125,
+ "img_height": 2184,
+ "img_size": 524
+ }, {
+ "img_src": "http://i0.hdslb.com/bfs/active/7a52a411bccb716c8e67fe70e6c330d5209346de.jpg",
+ "img_width": 1125,
+ "img_height": 2184,
+ "img_size": 534
+ }],
+ "count": 4,
+ "ctime": 1577966163,
+ "view": 833193,
+ "like": 5667
+ }]
+ }
+}
+```
+
+
+
+
+
+### 查询用户投稿专栏明细
+
+> https://api.bilibili.com/x/space/wbi/article
+
+> ~~https://api.bilibili.com/x/space/article~~(旧链接)
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:[Wbi 签名](../misc/sign/wbi.md)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|------|-----|-------|--------------------------------------------------------------------------|-----|
+| mid | num | 用户uid | | √ |
+| pn | num | | 默认:1 | |
+| ps | num | | 默认:30 范围:\[1,30\] | |
+| sort | str | | `publish_time`:最新发布 `view`:最多阅读 `fav`:最多收藏 默认:`publish_time` | |
+
+**json回复:**
+
+根对象
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|--------------------|
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|----------|-------|----------|-----|
+| articles | array | 专栏文章信息列表 | |
+| pn | num | 本次请求分页页数 | |
+| ps | num | 本次请求分页大小 | |
+| count | num | 专栏文章总数 | |
+
+`data`对象 -> `articles`数组中的对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|-------------------|-------|----------|------|
+| id | num | 专栏文章id | |
+| category | obj | 分类 | |
+| categories | array | 分类 | |
+| title | str | 标题 | |
+| summary | str | 摘要 | |
+| banner_url | str | 封面图 | |
+| template_id | num | | |
+| state | num | | |
+| author | obj | UP主信息 | |
+| reprint | num | | |
+| image_urls | array | | |
+| publish_time | num | 发布时间戳 | 单位:秒 |
+| ctime | num | 提交时间戳 | 单位:秒 |
+| stats | obj | 专栏文章数据统计 | |
+| tags | array | 标签 | |
+| words | num | | |
+| dynamic | str | 粉丝动态文案 | |
+| origin_image_urls | array | | |
+| list | | `null` | |
+| is_like | bool | | |
+| media | obj | | |
+| apply_time | str | `空串` | |
+| check_time | str | `空串` | |
+| original | num | | |
+| act_id | num | | |
+| dispute | | `null` | |
+| authenMark | | `null` | |
+| cover_avid | num | | |
+| top_video_info | | `null` | |
+| type | num | | |
+
+`data`对象 -> `articles`数组中的对象 -> `category`对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|-----------|-----|--------|-----|
+| id | num | 分类id | |
+| parent_id | num | 父级分类id | |
+| name | str | 分类名称 | |
+
+`data`对象 -> `articles`数组中的对象 -> `categories`数组中的对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|-----------|-----|--------|-----|
+| id | num | 分类id | |
+| parent_id | num | 父级分类id | |
+| name | str | 分类名称 | |
+
+`data`对象 -> `articles`数组中的对象 -> `author`对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|-----------------|-----|--------|-----|
+| mid | num | 用户uid | |
+| name | str | 用户名 | |
+| face | str | 头像 | |
+| pendant | obj | 头像框信息 | |
+| official_verify | obj | 账号认证信息 | |
+| nameplate | obj | 成就勋章信息 | |
+| vip | obj | 大会员信息 | |
+
+`data`对象 -> `articles`数组中的对象 -> `author`对象 -> `pendant`对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|--------|-----|----------|-----|
+| pid | num | 头像框id | |
+| name | str | 头像框名称 | |
+| image | str | 头像框图片url | |
+| expire | num | 过期时间 | |
+
+`data`对象 -> `articles`数组中的对象 -> `author`对象 -> `official_verify`对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|------|-----|------|------------------------------|
+| type | num | 是否认证 | -1:无 0:个人认证 1:机构认证 |
+| desc | str | 认证备注 | |
+
+`data`对象 -> `articles`数组中的对象 -> `author`对象 -> `nameplate`对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|-------------|-----|---------|-----|
+| nid | num | 勋章id | |
+| name | str | 勋章名称 | |
+| image | str | 勋章图标 | |
+| image_small | str | 勋章图标(小) | |
+| level | str | 勋章等级 | |
+| condition | str | 获取条件 | |
+
+`data`对象 -> `articles`数组中的对象 -> `author`对象 -> `vip`对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|------------------|-----|------------|---------------------------------|
+| type | num | 大会员类型 | 0:无 1:月大会员 2:年度及以上大会员 |
+| status | num | 大会员状态 | 0:无 1:有 |
+| due_date | num | 大会员过期时间时间戳 | 单位:毫秒 |
+| vip_pay_type | num | 支付类型 | |
+| theme_type | num | `0` | |
+| label | obj | 大会员标签 | |
+| avatar_subscript | num | 是否显示大会员图标 | 0:不显示 1:显示 |
+| nickname_color | str | 大会员昵称颜色 | |
+
+`data`对象 -> `articles`数组中的对象 -> `author`对象 -> `vip`对象 -> `label`对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|-------------|-----|--------|------------------------------------------------------------------------------------------------------------------------------|
+| path | str | `空串` | |
+| text | str | 会员类型文案 | `大会员` `年度大会员` `十年大会员` `百年大会员` `最强绿鲤鱼` |
+| label_theme | str | 会员标签 | vip:大会员 annual_vip:年度大会员 ten_annual_vip:十年大会员 hundred_annual_vip:百年大会员 fools_day_hundred_annual_vip:最强绿鲤鱼 |
+
+`data`对象 -> `articles`数组中的对象 -> `stats`对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|----------|-----|-----|-------|
+| view | num | 浏览数 | |
+| favorite | num | 收藏数 | |
+| like | num | 点赞数 | |
+| dislike | num | 点踩数 | 恒为`0` |
+| reply | num | 回复数 | |
+| share | num | 转发数 | |
+| coin | num | 投币数 | |
+| dynamic | num | | |
+
+`data`对象 -> `articles`数组中的对象 -> `tags`数组中的对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|------|-----|------|-----|
+| tid | num | 标签id | |
+| name | str | 标签名称 | |
+
+`data`对象 -> `articles`数组中的对象 -> `media`对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|-----------|-----|------|-----|
+| score | num | `0` | |
+| media_id | num | `0` | |
+| title | str | `空串` | |
+| cover | str | `空串` | |
+| area | str | `空串` | |
+| type_id | num | `0` | |
+| type_name | str | `空串` | |
+| spoiler | num | `0` | |
+
+**示例:**
+
+```shell
+curl -L -X GET 'https://api.bilibili.com/x/space/article?mid=300021061&pn=1&ps=2&sort=publish_time'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "articles": [
+ {
+ "id": 18989884,
+ "category": {
+ "id": 15,
+ "parent_id": 3,
+ "name": "日常"
+ },
+ "categories": [
+ {
+ "id": 3,
+ "parent_id": 0,
+ "name": "生活"
+ },
+ {
+ "id": 15,
+ "parent_id": 3,
+ "name": "日常"
+ }
+ ],
+ "title": "B站UP主日报2022年10月08日23点(v1.1)",
+ "summary": "冠:罗翔说刑法(2485.45万粉,+7204) 涨:肯德基(+18.37万粉) 掉:Overidea_China(-186850粉) 播:开心锤锤(+927.56万) 赞:荒草音乐(+31.02万) 赞:飞翔的丘丘人(+22.08万) 充:冰糖IO(+210)",
+ "banner_url": "https://i0.hdslb.com/bfs/article/5e53260f58f77fff0b8ba6b20179db85b8741b76.jpg",
+ "template_id": 4,
+ "state": 0,
+ "author": {
+ "mid": 300021061,
+ "name": "狸工智能",
+ "face": "https://i1.hdslb.com/bfs/face/4cba9bc9d6cf6935a37ec156dedb8f8d26c1df95.jpg",
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0
+ },
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "nameplate": {
+ "nid": 3,
+ "name": "白银殿堂",
+ "image": "https://i2.hdslb.com/bfs/face/f6a31275029365ae5dc710006585ddcf1139bde1.png",
+ "image_small": "https://i2.hdslb.com/bfs/face/b09cdb4c119c467cf2d15db5263b4f539fa6e30b.png",
+ "level": "高级勋章",
+ "condition": "单个自制视频总播放数>=10万"
+ },
+ "vip": {
+ "type": 0,
+ "status": 0,
+ "due_date": 0,
+ "vip_pay_type": 0,
+ "theme_type": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": ""
+ }
+ },
+ "reprint": 0,
+ "image_urls": [
+ "https://i0.hdslb.com/bfs/article/8e5497f7854e7df3468fbc29b0dd10fcf17d1223.png"
+ ],
+ "publish_time": 1665278884,
+ "ctime": 1665278884,
+ "stats": {
+ "view": 689,
+ "favorite": 2,
+ "like": 61,
+ "dislike": 0,
+ "reply": 18,
+ "share": 0,
+ "coin": 1,
+ "dynamic": 0
+ },
+ "words": 0,
+ "dynamic": "狸子的UP主日报📰v1.1,每天稳定更新~(如果咕咕咕了,请艾特狸子LePtC检查狐务器 [tv_微笑] #排行榜##大数据##狸工智能#",
+ "origin_image_urls": [
+ "https://i0.hdslb.com/bfs/article/5e53260f58f77fff0b8ba6b20179db85b8741b76.jpg"
+ ],
+ "list": null,
+ "is_like": false,
+ "media": {
+ "score": 0,
+ "media_id": 0,
+ "title": "",
+ "cover": "",
+ "area": "",
+ "type_id": 0,
+ "type_name": "",
+ "spoiler": 0
+ },
+ "apply_time": "",
+ "check_time": "",
+ "original": 1,
+ "act_id": 0,
+ "dispute": null,
+ "authenMark": null,
+ "cover_avid": 0,
+ "top_video_info": null,
+ "type": 0
+ },
+ {
+ "id": 18972446,
+ "category": {
+ "id": 15,
+ "parent_id": 3,
+ "name": "日常"
+ },
+ "categories": [
+ {
+ "id": 3,
+ "parent_id": 0,
+ "name": "生活"
+ },
+ {
+ "id": 15,
+ "parent_id": 3,
+ "name": "日常"
+ }
+ ],
+ "title": "B站UP主日报2022年10月07日23点(v1.1)",
+ "summary": "冠:罗翔说刑法(2484.73万粉,+8020) 涨:靖菌命(+3.61万粉) 掉:Overidea_China(-8593粉) 播:开心锤锤(+971.44万) 赞:荒草音乐(+53.14万) 赞:南方都市报(+18.05万) 充:内德维德(+190)",
+ "banner_url": "https://i0.hdslb.com/bfs/article/5e53260f58f77fff0b8ba6b20179db85b8741b76.jpg",
+ "template_id": 4,
+ "state": 0,
+ "author": {
+ "mid": 300021061,
+ "name": "狸工智能",
+ "face": "https://i1.hdslb.com/bfs/face/4cba9bc9d6cf6935a37ec156dedb8f8d26c1df95.jpg",
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0
+ },
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "nameplate": {
+ "nid": 3,
+ "name": "白银殿堂",
+ "image": "https://i2.hdslb.com/bfs/face/f6a31275029365ae5dc710006585ddcf1139bde1.png",
+ "image_small": "https://i2.hdslb.com/bfs/face/b09cdb4c119c467cf2d15db5263b4f539fa6e30b.png",
+ "level": "高级勋章",
+ "condition": "单个自制视频总播放数>=10万"
+ },
+ "vip": {
+ "type": 0,
+ "status": 0,
+ "due_date": 0,
+ "vip_pay_type": 0,
+ "theme_type": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": ""
+ }
+ },
+ "reprint": 0,
+ "image_urls": [
+ "https://i0.hdslb.com/bfs/article/8e5497f7854e7df3468fbc29b0dd10fcf17d1223.png"
+ ],
+ "publish_time": 1665189149,
+ "ctime": 1665189149,
+ "stats": {
+ "view": 1021,
+ "favorite": 1,
+ "like": 66,
+ "dislike": 0,
+ "reply": 21,
+ "share": 2,
+ "coin": 2,
+ "dynamic": 0
+ },
+ "tags": [
+ {
+ "tid": 1598,
+ "name": "粉丝"
+ },
+ {
+ "tid": 422982,
+ "name": "狸子"
+ },
+ {
+ "tid": 526616,
+ "name": "大数据"
+ },
+ {
+ "tid": 14082112,
+ "name": "狸工智能"
+ },
+ {
+ "tid": 438,
+ "name": "排行榜"
+ }
+ ],
+ "words": 0,
+ "dynamic": "狸子的UP主日报📰v1.1,每天稳定更新~(如果咕咕咕了,请艾特狸子LePtC检查狐务器 [tv_微笑] #排行榜##大数据##狸工智能#",
+ "origin_image_urls": [
+ "https://i0.hdslb.com/bfs/article/5e53260f58f77fff0b8ba6b20179db85b8741b76.jpg"
+ ],
+ "list": null,
+ "is_like": false,
+ "media": {
+ "score": 0,
+ "media_id": 0,
+ "title": "",
+ "cover": "",
+ "area": "",
+ "type_id": 0,
+ "type_name": "",
+ "spoiler": 0
+ },
+ "apply_time": "",
+ "check_time": "",
+ "original": 1,
+ "act_id": 0,
+ "dispute": null,
+ "authenMark": null,
+ "cover_avid": 0,
+ "top_video_info": null,
+ "type": 0
+ }
+ ],
+ "pn": 1,
+ "ps": 2,
+ "count": 1563
+ }
+}
+```
+
+
+
+### 查询用户专栏文集明细
+
+> https://api.bilibili.com/x/article/up/lists
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|----------|-----|-------|-----|-------------------|
+| mid | num | 用户uid | √ | |
+| sort | num | 排序方式 | | 0:最近更新 1:最多阅读 |
+| jsonp | str | | | |
+| callback | str | | | |
+
+**json回复:**
+
+根对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|---------|-----|------|--------------------|
+| code | num | 响应码 | 0:成功 -400:请求错误 |
+| message | str | 0 | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|-------|-------|--------|-----|
+| lists | array | 文集信息列表 | |
+| total | num | 文集总数 | |
+
+`data`对象 -> `lists`数组中的对象
+
+| 字段名 | 类型 | 内容 | 备注 |
+|----------------|-----|---------|------|
+| id | num | 文集id | |
+| mid | num | 作者uid | |
+| name | str | 文集名称 | |
+| image_url | str | 封面 | |
+| update_time | num | 最后更新时间戳 | 单位:秒 |
+| ctime | num | 创建时间戳 | 单位:秒 |
+| publish_time | num | | 单位:秒 |
+| summary | str | `空串` | |
+| words | num | 总字数 | |
+| read | num | 阅读量 | |
+| articles_count | num | 包含文章数 | |
+| state | num | `1` | |
+| reason | str | `空串` | |
+| apply_time | str | `空串` | |
+| check_time | str | `空串` | |
+
+**示例:**
+
+```shell
+curl -X GET 'https://api.bilibili.com/x/article/up/lists' \
+ --data-urlencode 'mid=2859372' \
+ --data-urlencode 'sort=0'
+```
+
+
+点击查看
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "lists": [
+ {
+ "id": 77163,
+ "mid": 2859372,
+ "name": "碟报",
+ "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png",
+ "update_time": 1664854854,
+ "ctime": 1554785697,
+ "publish_time": 1664863200,
+ "summary": "",
+ "words": 71532,
+ "read": 478726,
+ "articles_count": 113,
+ "state": 1,
+ "reason": "",
+ "apply_time": "",
+ "check_time": ""
+ },
+ {
+ "id": 26407,
+ "mid": 2859372,
+ "name": "周榜",
+ "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png",
+ "update_time": 1664721205,
+ "ctime": 1537942450,
+ "publish_time": 1664721307,
+ "summary": "",
+ "words": 102099,
+ "read": 1366280,
+ "articles_count": 206,
+ "state": 1,
+ "reason": "",
+ "apply_time": "",
+ "check_time": ""
+ },
+ {
+ "id": 107952,
+ "mid": 2859372,
+ "name": "制作委员会",
+ "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png",
+ "update_time": 1646663919,
+ "ctime": 1563107348,
+ "publish_time": 1646910000,
+ "summary": "",
+ "words": 47564,
+ "read": 72911,
+ "articles_count": 10,
+ "state": 1,
+ "reason": "",
+ "apply_time": "",
+ "check_time": ""
+ },
+ {
+ "id": 26457,
+ "mid": 2859372,
+ "name": "实时榜",
+ "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png",
+ "update_time": 1603115712,
+ "ctime": 1537955117,
+ "publish_time": 1603115719,
+ "summary": "",
+ "words": 206741,
+ "read": 1136352,
+ "articles_count": 76,
+ "state": 1,
+ "reason": "",
+ "apply_time": "",
+ "check_time": ""
+ },
+ {
+ "id": 49769,
+ "mid": 2859372,
+ "name": "预测",
+ "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png",
+ "update_time": 1593933314,
+ "ctime": 1546153226,
+ "publish_time": 1593933314,
+ "summary": "",
+ "words": 2518,
+ "read": 55123,
+ "articles_count": 6,
+ "state": 1,
+ "reason": "",
+ "apply_time": "",
+ "check_time": ""
+ },
+ {
+ "id": 96916,
+ "mid": 2859372,
+ "name": "书籍周榜",
+ "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png",
+ "update_time": 1559815260,
+ "ctime": 1559815159,
+ "publish_time": 1559815577,
+ "summary": "",
+ "words": 272,
+ "read": 2955,
+ "articles_count": 1,
+ "state": 1,
+ "reason": "",
+ "apply_time": "",
+ "check_time": ""
+ },
+ {
+ "id": 96610,
+ "mid": 2859372,
+ "name": "原始周榜存档",
+ "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png",
+ "update_time": 1559721231,
+ "ctime": 1559720762,
+ "publish_time": 1559721271,
+ "summary": "",
+ "words": 290,
+ "read": 1498,
+ "articles_count": 1,
+ "state": 1,
+ "reason": "",
+ "apply_time": "",
+ "check_time": ""
+ },
+ {
+ "id": 26453,
+ "mid": 2859372,
+ "name": "杂谈",
+ "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png",
+ "update_time": 1557303117,
+ "ctime": 1537954625,
+ "publish_time": 1557303168,
+ "summary": "",
+ "words": 10673,
+ "read": 38363,
+ "articles_count": 4,
+ "state": 1,
+ "reason": "",
+ "apply_time": "",
+ "check_time": ""
+ },
+ {
+ "id": 59028,
+ "mid": 2859372,
+ "name": "新春访谈",
+ "image_url": "https://i0.hdslb.com/bfs/article/96d2b3d2a72e6497a011c885ab9245c51507ce18.png",
+ "update_time": 1549878596,
+ "ctime": 1549343048,
+ "publish_time": 1549884125,
+ "summary": "",
+ "words": 33472,
+ "read": 34597,
+ "articles_count": 13,
+ "state": 1,
+ "reason": "",
+ "apply_time": "",
+ "check_time": ""
+ }
+ ],
+ "total": 9
+ }
+}
+```
+
+
+
+### 查询用户投稿音频明细
+
+> https://api.bilibili.com/audio/music-service/web/song/upper
+
+*请求方法: GET*
+
+
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --- | --- | --- | --- | --- |
+| mid | num | 用户 mid | 必要 | |
+| pn | num | 页码 | 必要 | 默认为 1 |
+| ps | num | 每页项数 | 必要 | 默认为 30 |
+| order | str | 排序方式 | 必要 | 1: 最新发布 2: 最多播放 3: 最多收藏 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| code | num | 返回值 | 0: 成功 72000000: 缺少参数 |
+| msg | str | 返回信息 | 成功为 `success` |
+| data | str | 数据本体 | 失败时不存在 |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| curPage | num | 当前页码 | |
+| pageCount | num | 总页数 | |
+| totalSize | num | 总计数 | |
+| pageSize | num | 每页项数 | |
+| data | array | 音频列表 | |
+
+`data` 对象中的 `data` 数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| id | num | 音频 AU 号 | |
+| uid | num | 用户 mid | |
+| uname | str | 用户名 | |
+| author | null | | |
+| title | str | 音频标题 | |
+| cover | str | 音频封面图片 URL | |
+| intro | null | | |
+| lyric | str | 音频歌词 URL | |
+| crtype | num | 1 | |
+| duration | num | 音频时长 | 单位为 秒 |
+| passtime | num | 发布时间 | UNIX 秒级时间戳 |
+| curtime | num | 0 | |
+| aid | null | | |
+| cid | null | | |
+| msid | null | | |
+| attr | null | | |
+| limit | null | | |
+| activityId | null | | |
+| limitdesc | null | | |
+| ctime | num | 发布时间 | UNIX 毫秒时间戳 |
+| statistic | obj | 统计数 | |
+| coin_num | num | 硬币数量 | |
+| is_cooper | null | | |
+
+`data` 数组中的对象中的 `statistic` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| sid | num | 音频 AU 号 | |
+| play | num | 播放数 | |
+| collect | num | 收藏数 | |
+| comment | num | 评论数 | |
+| share | num | 分享数 | |
+
+**示例:**
+
+```shell
+curl -G 'https://api.bilibili.com/audio/music-service/web/song/upper' \
+--url-query 'uid=8047632' \
+--url-query 'pn=1' \
+--url-query 'ps=30' \
+--url-query 'order=2'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "msg": "success",
+ "data": {
+ "curPage": 1,
+ "pageCount": 1,
+ "totalSize": 2,
+ "pageSize": 30,
+ "data": [
+ {
+ "id": 257709,
+ "uid": 8047632,
+ "uname": "哔哩哔哩弹幕网",
+ "author": null,
+ "title": "【2018拜年祭单品】与你同行~B With U~",
+ "cover": "http://i0.hdslb.com/bfs/music/0f890889c8e1101f37317def0c4c555068054c88.jpg",
+ "intro": null,
+ "lyric": "http://i0.hdslb.com/bfs/music/1519959250257709.lrc",
+ "crtype": 1,
+ "duration": 301,
+ "passtime": 1519878405,
+ "curtime": 0,
+ "aid": null,
+ "cid": null,
+ "msid": null,
+ "attr": null,
+ "limit": null,
+ "activityId": null,
+ "limitdesc": null,
+ "ctime": 1519875632000,
+ "statistic": {
+ "sid": 257709,
+ "play": 845264,
+ "collect": 21978,
+ "comment": 1983,
+ "share": 1685
+ },
+ "coin_num": 13368,
+ "is_cooper": null
+ },
+ {
+ "id": 378521,
+ "uid": 8047632,
+ "uname": "哔哩哔哩弹幕网",
+ "author": null,
+ "title": "《B TOGETHER》-bilibili九周年主题曲",
+ "cover": "http://i0.hdslb.com/bfs/music/109136c63e16d83fbad5ec9282a6fb96498d8144.jpg",
+ "intro": null,
+ "lyric": "http://i0.hdslb.com/bfs/music/1529979007378521.lrc",
+ "crtype": 1,
+ "duration": 261,
+ "passtime": 1529928347,
+ "curtime": 0,
+ "aid": null,
+ "cid": null,
+ "msid": null,
+ "attr": null,
+ "limit": null,
+ "activityId": null,
+ "limitdesc": null,
+ "ctime": 1529928235000,
+ "statistic": {
+ "sid": 378521,
+ "play": 123264,
+ "collect": 5501,
+ "comment": 1591,
+ "share": 535
+ },
+ "coin_num": 3640,
+ "is_cooper": null
+ }
+ ]
+ }
+}
+```
+
+
+
+## 频道
+
+
+
+[所有旧接口](https://github.com/SocialSisterYi/bilibili-API-collect/blob/7d89ece2ac46425810647c4ac92acf5f3721cb68/docs/user/space.md#%E9%A2%91%E9%81%93) 已弃用, 现可用接口参见 [合集和视频列表信息](../video/collection.md)
+
+## 课程
+
+
+
+### 查询用户发布的课程列表
+
+> https://api.bilibili.com/pugv/app/web/season/page
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | -------- |
+| mid | num | 目标用户mid | 必要 | |
+| pn | num | 页码 | 非必要 | 默认为1 |
+| ps | num | 每页项数 | 非必要 | 默认为20 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 53013:用户隐私设置未公开 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ----- | -------- | ---- |
+| list | array | 课程列表 | |
+| page | obj | 页面信息 | |
+
+`data`中的`page`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | -------------- | ------------------------------------- |
+| next | bool | 是否存在下一页 | false:最后一页 true:存在下一页 |
+| num | num | 当前页码 | |
+| size | num | 每页项数 | |
+| total | num | 总计项数 | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------- | -------------------------- |
+| 0 | obj | 课程1 | |
+| n | obj | 课程(n+1) | 按照目标用户的发布顺序排列 |
+| …… | obj | …… | |
+
+`data`中的`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | ------------- |
+| cover | str | 课程封面url | |
+| ep_count | num | 课程集数 | |
+| link | str | 课程页面url | 手机版页面url |
+| page | num | 1 | 作用尚不明确 |
+| play | num | 课程播放数 | |
+| season_id | num | 课程ssid | |
+| status | str | 更新状态说明 | |
+| subtitle | str | 课程副标题 | |
+| title | str | 课程标题 | |
+
+**示例:**
+
+查询用户`mid=33683045`的课程发布列表
+
+```shell
+curl -G 'https://api.bilibili.com/pugv/app/web/season/page' \
+--data-urlencode 'mid=33683045' \
+--data-urlencode 'ps=5' \
+--data-urlencode 'pn=1'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "data": {
+ "items": [
+ {
+ "cover": "http://i0.hdslb.com/bfs/archive/596575057885fff7f0ceff047437186cba459358.jpg",
+ "ep_count": 10,
+ "link": "https://m.bilibili.com/cheese/play/ss80",
+ "page": 1,
+ "play": 174467,
+ "season_id": 80,
+ "status": "共10期",
+ "subtitle": "百科全书式军事科普短视频系列",
+ "title": "《战忽知道》第一季"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/archive/322aa94d27cece62d2a859caf71ac2426f29eee2.jpg",
+ "ep_count": 1,
+ "link": "https://m.bilibili.com/cheese/play/ss145",
+ "page": 1,
+ "play": 22155,
+ "season_id": 145,
+ "status": "更新至第1期",
+ "subtitle": "此课程为《局座:第四次工业革命来了》部分集数,请谨慎购买",
+ "title": "【体验课】局座讲5G:5G如何改变我们的生活?"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/archive/b9794ac4507f8764e219df413b661b5faf499a19.jpg",
+ "ep_count": 10,
+ "link": "https://m.bilibili.com/cheese/play/ss113",
+ "page": 1,
+ "play": 49833,
+ "season_id": 113,
+ "status": "更新至第10期",
+ "subtitle": "百科全书式军事科普短视频系列",
+ "title": "《战忽知道》第二季"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/archive/7351fcb33592a4bc7aac9f71d421b4b5ce0177d3.jpg",
+ "ep_count": 10,
+ "link": "https://m.bilibili.com/cheese/play/ss51",
+ "page": 1,
+ "play": 4981037,
+ "season_id": 51,
+ "status": "共10期",
+ "subtitle": "洞悉国际局势,学习战略思维",
+ "title": "局座的国际战略课"
+ },
+ {
+ "cover": "http://i0.hdslb.com/bfs/archive/31e2a170b5a815e34f0537a2727b28f1b87dca18.jpg",
+ "ep_count": 10,
+ "link": "https://m.bilibili.com/cheese/play/ss121",
+ "page": 1,
+ "play": 30754,
+ "season_id": 121,
+ "status": "更新至第10期",
+ "subtitle": "百科全书式军事科普短视频系列",
+ "title": "《战忽知道》第三季"
+ }
+ ],
+ "page": {
+ "next": true,
+ "num": 1,
+ "size": 5,
+ "total": 8
+ }
+ },
+ "message": "success"
+}
+```
+
+
+
+## 订阅
+
+
+
+### 查询用户追番预览列表
+
+> http://space.bilibili.com/ajax/Bangumi/getList
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+如设置隐私查看自己的需要认证
+
+带有转义,且只能获取最多15条
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ---- |
+| mid | num | 目标用户mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ------------------------ | ---------------------------------- | --------------------------- |
+| status | bool | 状态 | false:失败 true:成功 |
+| data | 失败:str 成功:obj | 失败:错误信息 成功:信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ----- | ------------ | ------------ |
+| count | num | 总计追番数 | |
+| pages | num | 0 | 作用尚不明确 |
+| result | array | 追番预览列表 | |
+
+`data`中的`result`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------- | -------------------------- |
+| 0 | obj | 追番1 | |
+| n | obj | 追番(n+1) | 按照目标用户的关注顺序排列 |
+| …… | obj | …… | |
+| 14 | obj | 追番15 | 最后一项 |
+
+`data`中的`result`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ---- | --------------- | --------------------------------- |
+| brief | str | 简介 | |
+| cover | str | 封面图片url | |
+| evaluate | str | 空 | |
+| favorites | num | 追番数 | |
+| is_finish | num | 是否已完结 | 0:未完结 1:已完结 |
+| last_ep_index | num | 0 | 作用尚不明确 |
+| newest_ep_index | num | 最新一话 | 可能为0 |
+| season_id | str | 番剧ssid | |
+| share_url | str | 播放页面链接url | |
+| title | str | 标题 | |
+| total_count | num | 总计集数 | 未完结:-1 已完结:非0正整数 |
+
+**示例:**
+
+查看用户`mid=14082`的追番预览列表
+
+```shell
+curl -G 'http://space.bilibili.com/ajax/Bangumi/getList' \
+--data-urlencode 'mid=14082' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "status": true,
+ "data": {
+ "count": 25,
+ "pages": 0,
+ "result": [{
+ "season_id": "29310",
+ "share_url": "http:\/\/bangumi.bilibili.com\/anime\/29310\/",
+ "title": "异度侵入 ID:INVADED",
+ "is_finish": 1,
+ "favorites": 3479220,
+ "newest_ep_index": 13,
+ "last_ep_index": 0,
+ "total_count": 13,
+ "cover": "http:\/\/i0.hdslb.com\/bfs\/bangumi\/image\/9bf9e66968f85b33ec3769a16c86b36dc984abbc.png",
+ "evaluate": "",
+ "brief": "本片讲述利用能检测出人们杀意的装置以及利用思想粒子做出的“井”,来探知事件真相的科幻故事。"
+ }, {
+ "season_id": "25739",
+ "share_url": "http:\/\/bangumi.bilibili.com\/anime\/25739\/",
+ "title": "关于我转生变成史莱姆这档事",
+ "is_finish": 1,
+ "favorites": 5518829,
+ "newest_ep_index": 0,
+ "last_ep_index": 0,
+ "total_count": 27,
+ "cover": "http:\/\/i0.hdslb.com\/bfs\/bangumi\/a4c0e0ccc44fe3949a734f546cf5bb07da925bad.png",
+ "evaluate": "",
+ "brief": "史莱姆生活,开始了。\n上班族的三上悟在道路上被歹徒给刺杀身亡后,回过神来发现自己转生到了异世界。\n不..."
+ },
+ …………
+ ]
+ }
+}
+```
+
+
+
+### 查询用户追番(追剧)明细
+
+> https://api.bilibili.com/x/space/bangumi/follow/list
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+如设置隐私查看自己的需要认证
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | -------------------- |
+| vmid | num | 目标用户mid | 必要 | |
+| pn | num | 页码 | 非必要 | 默认为1 |
+| ps | num | 每页项数 | 非必要 | 默认为15 定义域1-30 |
+| type | num | 查询类型 | 必要 | 1:追番 2:追剧 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 53013:用户隐私设置未公开 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ----- | ---------- | ---- |
+| list | array | 追番列表 | |
+| pn | num | 当前页码 | |
+| ps | num | 每页项数 | |
+| total | num | 总计追番数 | |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------- | -------------------------- |
+| 0 | obj | 追番1 | |
+| n | obj | 追番(n+1) | 按照目标用户的关注顺序排列 |
+| …… | obj | …… | |
+
+`data`中的`list`数组中的对象:
+
+基本同「番剧详细信息」中的result对象(未完工)
+
+**示例:**
+
+查看用户`mid=14082`的追番明细
+
+```shell
+curl -G 'https://api.bilibili.com/x/space/bangumi/follow/list' \
+--data-urlencode 'vmid=14082' \
+--data-urlencode 'type=1' \
+--data-urlencode 'ps=2' \
+--data-urlencode 'pn=1' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [{
+ "season_id": 29310,
+ "media_id": 28224080,
+ "season_type": 1,
+ "season_type_name": "番剧",
+ "title": "异度侵入 ID:INVADED",
+ "cover": "http://i0.hdslb.com/bfs/bangumi/image/9bf9e66968f85b33ec3769a16c86b36dc984abbc.png",
+ "total_count": 13,
+ "is_finish": 1,
+ "is_started": 1,
+ "is_play": 1,
+ "badge": "会员专享",
+ "badge_type": 0,
+ "rights": {
+ "allow_review": 1,
+ "is_selection": 1,
+ "selection_style": 1
+ },
+ "stat": {
+ "follow": 3475768,
+ "view": 87500861,
+ "danmaku": 1334654,
+ "reply": 316632,
+ "coin": 835150,
+ "series_follow": 3475242,
+ "series_view": 87500861
+ },
+ "new_ep": {
+ "id": 307774,
+ "index_show": "全13话",
+ "cover": "http://i0.hdslb.com/bfs/archive/3dce2b856a7b0ea667aa288b51b7c0478fa56c4d.jpg",
+ "title": "13",
+ "long_title": "CHANNELEDⅡ",
+ "pub_time": "2020-03-23 00:30:00",
+ "duration": 1481000
+ },
+ "rating": {
+ "score": 9.8,
+ "count": 262589
+ },
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/664dbf039ec2da8dd982b697a108e28e87b9897e.jpg",
+ "season_status": 13,
+ "season_title": "TV",
+ "badge_ep": "会员",
+ "media_attr": 196608,
+ "season_attr": 0,
+ "evaluate": "本片讲述利用能检测出人们杀意的装置以及利用思想粒子做出的“井”,来探知事件真相的科幻故事。...",
+ "areas": [{
+ "id": 2,
+ "name": "日本"
+ }],
+ "subtitle": "",
+ "first_ep": 307446,
+ "can_watch": 1,
+ "series": {
+ "series_id": 4760,
+ "title": "ID:INVADED",
+ "season_count": 1,
+ "new_season_id": 29310
+ },
+ "publish": {
+ "pub_time": "2020-01-06 00:30:00",
+ "pub_time_show": "敬请期待",
+ "release_date": "2020-01-06",
+ "release_date_show": "2020年1月6日"
+ },
+ "mode": 2,
+ "section": [{
+ "section_id": 39327,
+ "season_id": 29310,
+ "limit_group": 328,
+ "watch_platform": 15,
+ "copyright": "dujia",
+ "ban_area_show": 1
+ }, {
+ "section_id": 39633,
+ "season_id": 29310,
+ "limit_group": 328,
+ "watch_platform": 15,
+ "type": 1,
+ "copyright": "dujia",
+ "title": "其他",
+ "ban_area_show": 1
+ }, {
+ "section_id": 44101,
+ "season_id": 29310,
+ "limit_group": 316,
+ "watch_platform": 15,
+ "type": 4,
+ "copyright": "ugc",
+ "ban_area_show": 1
+ }],
+ "url": "https://www.bilibili.com/bangumi/play/ss29310",
+ "follow_status": 2,
+ "is_new": 0,
+ "progress": "",
+ "both_follow": true
+ }, {
+ "season_id": 25739,
+ "media_id": 139252,
+ "season_type": 1,
+ "season_type_name": "番剧",
+ "title": "关于我转生变成史莱姆这档事",
+ "cover": "http://i0.hdslb.com/bfs/bangumi/a4c0e0ccc44fe3949a734f546cf5bb07da925bad.png",
+ "total_count": 27,
+ "is_finish": 1,
+ "is_started": 1,
+ "is_play": 1,
+ "badge": "会员专享",
+ "badge_type": 0,
+ "rights": {
+ "allow_review": 1,
+ "is_selection": 1,
+ "selection_style": 1
+ },
+ "stat": {
+ "follow": 5516519,
+ "view": 246739631,
+ "danmaku": 3802465,
+ "reply": 460225,
+ "coin": 1338958,
+ "series_follow": 5516535,
+ "series_view": 246739631
+ },
+ "new_ep": {
+ "id": 316957,
+ "index_show": "全27话",
+ "cover": "http://i0.hdslb.com/bfs/archive/81d07d1a478ce3a6209b557e14df9b9c78c42abb.jpg",
+ "title": "OAD03",
+ "long_title": "外传:利姆鲁的华丽教师生活 其一",
+ "pub_time": "2020-03-27 00:00:03",
+ "duration": 1493000
+ },
+ "rating": {
+ "score": 9.4,
+ "count": 83354
+ },
+ "square_cover": "http://i0.hdslb.com/bfs/bangumi/8d9f5b4a566d0547bc2e3f6f733b732a09c0d3d4.jpg",
+ "season_status": 13,
+ "season_title": "TV",
+ "badge_ep": "会员",
+ "media_attr": 0,
+ "season_attr": 0,
+ "evaluate": "史莱姆生活,开始了。\n上班族的三上悟在道路上被歹徒给刺杀身亡后,回过神来发现自己转生到了异世界。\n不过,自己居然是“史莱姆”!\n他在得到利姆鲁这个名字后开始了自己的史莱姆人生,随着与各个种族相处交流的...",
+ "areas": [{
+ "id": 2,
+ "name": "日本"
+ }],
+ "subtitle": "",
+ "first_ep": 250460,
+ "can_watch": 1,
+ "series": {
+ "series_id": 4188,
+ "title": "关于我转生变成史莱姆这档事",
+ "season_count": 1,
+ "new_season_id": 25739
+ },
+ "publish": {
+ "pub_time": "2018-10-02 00:30:00",
+ "pub_time_show": "2018年10月02日00:30",
+ "release_date": "2018-10-02",
+ "release_date_show": "2018年10月2日"
+ },
+ "mode": 2,
+ "section": [{
+ "section_id": 34988,
+ "season_id": 25739,
+ "limit_group": 328,
+ "watch_platform": 15,
+ "copyright": "bilibili",
+ "ban_area_show": 1
+ }],
+ "url": "https://www.bilibili.com/bangumi/play/ss25739",
+ "follow_status": 2,
+ "is_new": 0,
+ "progress": "",
+ "both_follow": true
+ }],
+ "pn": 1,
+ "ps": 2,
+ "total": 25
+ }
+}
+```
+
+
+
+### 查询用户关注的TAG(话题)
+
+> http://space.bilibili.com/ajax/tags/getSubList
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+如设置隐私查看自己的需要认证
+
+带有转义
+
+只显示前100个
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ---- |
+| mid | num | 目标用户mid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------ | ---------------------------- | -------------------------------------- | --------------------------- |
+| status | bool | 返回值 | false:错误 true:正确 |
+| data | 错误时:str 正确时:obj | 错误时:错误信息 正确时:数据本体 | 正确时不返回错误信息 |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ----- | ----------- | ---- |
+| tags | array | 关注TAG列表 | |
+| count | num | 关注TAG的数 | |
+
+`data`中的`tags`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | -------- |
+| 0 | obj | 关注TAG1 | |
+| n | obj | 关注TAG(n+1) | |
+| …… | obj | …… | …… |
+| 99 | obj | 关注TAG100 | 最后一项 |
+
+`data`中的`tags`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | ------------------- | ------------ |
+| archive_count | num | 0 | 作用尚不明确 |
+| cover | str | TAG图片url | 无则为空 |
+| name | str | TAG名 | |
+| notify | num | 1 | 作用尚不明确 |
+| tag_id | num | tag_id | |
+| updated_ts | str | 1970-01-01 08:00:00 | 作用尚不明确 |
+
+**示例:**
+
+查询用户`mid=2`的关注TAG
+
+```shell
+curl -G 'http://space.bilibili.com/ajax/tags/getSubList' \
+--data-urlencode 'mid=2' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "status": true,
+ "data": {
+ "tags": [{
+ "name": "豪宅",
+ "cover": "",
+ "tag_id": 47637,
+ "notify": 1,
+ "archive_count": 0,
+ "updated_ts": "1970-01-01 08:00:00"
+ }, {
+ "name": "死亡搁浅",
+ "cover": "",
+ "tag_id": 1737239,
+ "notify": 1,
+ "archive_count": 0,
+ "updated_ts": "1970-01-01 08:00:00"
+ },
+ …………
+ ],
+ "count": 58
+ }
+}
+```
+
+
diff --git a/user/status_number.md b/docs/user/status_number.md
similarity index 82%
rename from user/status_number.md
rename to docs/user/status_number.md
index 36435d4..e33ac45 100644
--- a/user/status_number.md
+++ b/docs/user/status_number.md
@@ -1,14 +1,7 @@
# 用户状态数
-- [关系状态数](#关系状态数)
-- [UP主状态数](#UP主状态数)
-- [~~订阅&投稿状态数(已弃用)~~](#~~订阅&投稿状态数(已弃用)~~)
-- [相簿投稿数](#相簿投稿数)
-
----
-
## 关系状态数
-> http://api.bilibili.com/x/relation/stat
+> https://api.bilibili.com/x/relation/stat
*请求方式:GET*
@@ -47,7 +40,7 @@
查询用户`mid=332704117`的关系状态数
```shell
-curl -G 'http://api.bilibili.com/x/relation/stat' \
+curl -G 'https://api.bilibili.com/x/relation/stat' \
--data-urlencode 'vmid=332704117' \
-b 'SESSDATA=xxx'
```
@@ -74,7 +67,7 @@ curl -G 'http://api.bilibili.com/x/relation/stat' \
## UP主状态数
-> http://api.bilibili.com/x/space/upstat
+> https://api.bilibili.com/x/space/upstat
*请求方式:GET*
@@ -125,7 +118,7 @@ curl -G 'http://api.bilibili.com/x/relation/stat' \
查询用户`mid=456664753`的UP主状态数
```shell
-curl -G 'http://api.bilibili.com/x/space/upstat' \
+curl -G 'https://api.bilibili.com/x/space/upstat' \
--data-urlencode 'mid=456664753' \
-b 'SESSDATA=xxx'
```
@@ -152,11 +145,9 @@ curl -G 'http://api.bilibili.com/x/space/upstat' \
-## ~~订阅&投稿状态数(已弃用)~~
+## 用户导航栏状态数
-
-查看折叠内容
-> http://api.bilibili.com/x/space/navnum
+> https://api.bilibili.com/x/space/navnum
*请求方式:GET*
@@ -165,6 +156,7 @@ curl -G 'http://api.bilibili.com/x/space/upstat' \
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | ----------- | ------ | ---- |
| mid | num | 目标用户mid | 必要 | |
+| web_location | str | 333.999 | 不必要 ||
**json回复:**
@@ -184,37 +176,38 @@ curl -G 'http://api.bilibili.com/x/space/upstat' \
| video | num | 投稿视频数 | |
| bangumi | num | 追番数 | 无视隐私设置 |
| cinema | num | 追剧数 | 无视隐私设置 |
-| channel | obj | 频道数 | |
-| favourite | obj | 收藏夹数 | 无视隐私设置 |
+| channel | obj | 视频列表数 | |
+| favourite | obj | 收藏夹数 | |
| tag | num | 关注TAG数 | 无视隐私设置 |
| article | num | 投稿专栏数 | |
| playlist | num | 0 | 作用尚不明确 |
-| album | num | 投稿相簿数 | |
+| album | num | 投稿图文数 | |
| audio | num | 投稿音频数 | |
| pugv | num | 投稿课程数 | |
+| upos | num | 动态数 | |
+| season_num | num | 视频合集数 | |
`data`中的`channel`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ----- | ---------- | ------------ |
-| master | num | 频道数 | |
-| guest | num | 频道数 | |
+| master | num | 视频列表数 | |
+| guest | num | 视频列表数 | |
`data`中的`favourite`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------ | ---- | ------------ | --------------------------------------- |
| master | num | 全部收藏夹数 | 需要登录(SESSDATA) 只能查看自己的 |
-| guest | num | 公开收藏夹数 | 无视隐私设置 |
+| guest | num | 公开收藏夹数 | |
**示例:**
-查询用户`mid=239202390`的订阅&投稿状态数
+查询用户`mid=645769214`的订阅&投稿状态数
```shell
-curl -G 'http://api.bilibili.com/x/space/navnum' \
---data-urlencode 'mid=239202390' \
--b 'SESSDATA=xxx'
+curl -G 'https://api.bilibili.com/x/space/navnum' \
+--data-urlencode 'mid=645769214'
```
@@ -222,37 +215,38 @@ curl -G 'http://api.bilibili.com/x/space/navnum' \
```json
{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "video": 290,
- "bangumi": 25,
- "cinema": 13,
- "channel": {
- "master": 2,
- "guest": 2
- },
- "favourite": {
- "master": 6,
- "guest": 6
- },
- "tag": 0,
- "article": 1,
- "playlist": 0,
- "album": 150,
- "audio": 4,
- "pugv": 0
- }
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "video": 34,
+ "bangumi": 1,
+ "cinema": 0,
+ "channel": {
+ "master": 5,
+ "guest": 5
+ },
+ "favourite": {
+ "master": 0,
+ "guest": 0
+ },
+ "tag": 0,
+ "article": 1,
+ "playlist": 0,
+ "album": 59,
+ "audio": 0,
+ "pugv": 0,
+ "season_num": 1,
+ "opus": 59
+ }
}
```
-
## 相簿投稿数
-> http://api.vc.bilibili.com/link_draw/v1/doc/upload_count
+> https://api.vc.bilibili.com/link_draw/v1/doc/upload_count
*请求方式:GET*
@@ -287,7 +281,7 @@ curl -G 'http://api.bilibili.com/x/space/navnum' \
查询用户`mid=53456`的投稿相簿数
```shell
-curl -G 'http://api.vc.bilibili.com/link_draw/v1/doc/upload_count' \
+curl -G 'https://api.vc.bilibili.com/link_draw/v1/doc/upload_count' \
--data-urlencode 'uid=53456'
```
diff --git a/video/like_coin_fav.md b/docs/video/action.md
similarity index 54%
rename from video/like_coin_fav.md
rename to docs/video/action.md
index 38984e9..c6ecb1a 100644
--- a/video/like_coin_fav.md
+++ b/docs/video/action.md
@@ -1,55 +1,37 @@
-# 视频点赞&投币&收藏&分享
-
-- [视频点赞&投币&收藏&分享](#视频点赞投币收藏分享)
- - [点赞](#点赞)
- - [点赞视频(web端)](#点赞视频web端)
- - [点赞视频(APP端)](#点赞视频app端)
- - [判断视频是否被点赞(双端)](#判断视频是否被点赞双端)
- - [投币](#投币)
- - [投币视频(web端)](#投币视频web端)
- - [投币视频(APP端)](#投币视频app端)
- - [判断视频是否被投币(双端)](#判断视频是否被投币双端)
- - [收藏](#收藏)
- - [收藏视频(双端)](#收藏视频双端)
- - [判断视频是否被收藏(双端)](#判断视频是否被收藏双端)
- - [一键三连](#一键三连)
- - [一键三连视频(web端)](#一键三连视频web端)
- - [一键三连视频(APP端)](#一键三连视频app端)
- - [分享](#分享)
- - [分享视频 (Web端)](#分享视频-web端)
-
----
+# 稿件观众操作
## 点赞
-
+
### 点赞视频(web端)
-> http://api.bilibili.com/x/web-interface/archive/like
+> https://api.bilibili.com/x/web-interface/archive/like
*请求方式:POST*
认证方式:仅可Cookie(SESSDATA)
+需验证 Cookie 中`buvid3`字段存在且正常, 否则将导致触发风控
+
**正文参数( application/x-www-form-urlencoded ):**
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------------ | ---------------------- |
-| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
-| like | num | 操作方式 | 必要 | 1:点赞 2:取消赞 |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------------------- | ------------ | ---------------------- |
+| aid | num | 稿件 avid | 必要(可选) | avid 与 bvid 任选一个 |
+| bvid | str | 稿件 bvid | 必要(可选) | avid 与 bvid 任选一个 |
+| like | num | 操作方式 | 必要 | 1:点赞 2:取消赞 |
+| csrf | str | CSRF Token(位于 Cookie) | 必要 | |
**json回复:**
根对象:
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 10003:不存在该稿件 65004:取消点赞失败 65006:重复点赞 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 -403: 账号异常 10003:不存在该稿件 65004:取消点赞失败 65006:重复点赞 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
**示例:**
@@ -58,7 +40,7 @@
avid方式:
```shell
-curl 'http://api.bilibili.com/x/web-interface/archive/like' \
+curl 'https://api.bilibili.com/x/web-interface/archive/like' \
--data-urlencode 'aid=79677524' \
--data-urlencode 'like=1' \
--data-urlencode 'csrf=xxx' \
@@ -68,7 +50,7 @@ curl 'http://api.bilibili.com/x/web-interface/archive/like' \
bvid方式:
```shell
-curl 'http://api.bilibili.com/x/web-interface/archive/like' \
+curl 'https://api.bilibili.com/x/web-interface/archive/like' \
--data-urlencode 'bvid=BV1uJ411r7hL' \
--data-urlencode 'like=1' \
--data-urlencode 'csrf=xxx' \
@@ -90,7 +72,7 @@ curl 'http://api.bilibili.com/x/web-interface/archive/like' \
### 点赞视频(APP端)
-> http://app.bilibili.com/x/v2/view/like
+> https://app.bilibili.com/x/v2/view/like
*请求方式:POST*
@@ -98,22 +80,22 @@ curl 'http://api.bilibili.com/x/web-interface/archive/like' \
**正文参数( application/x-www-form-urlencoded ):**
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | ---------------------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| aid | num | 稿件avid | 必要 | |
-| like | num | 操作方式 | 必要 | 0:点赞 1:取消赞 |
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | ---------------------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| aid | num | 稿件 avid | 必要 | |
+| like | num | 操作方式 | 必要 | 0:点赞 1:取消赞 |
**json回复:**
根对象:
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | --------------------------------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 10003:不存在该稿件 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 数据本体 | |
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 -403: 账号异常 10003:不存在该稿件 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
`data`对象:
@@ -126,7 +108,7 @@ curl 'http://api.bilibili.com/x/web-interface/archive/like' \
点赞视频`av79677524`
```shell
-curl 'http://app.bilibili.com/x/v2/view/like' \
+curl 'https://app.bilibili.com/x/v2/view/like' \
--data-urlencode 'access_key=xxx' \
--data-urlencode 'aid=79677524' \
--data-urlencode 'like=0'
@@ -148,21 +130,24 @@ curl 'http://app.bilibili.com/x/v2/view/like' \
-### 判断视频是否被点赞(双端)
+### 判断视频近期是否被点赞(双端)
-> http://api.bilibili.com/x/web-interface/archive/has/like
+> https://api.bilibili.com/x/web-interface/archive/has/like
*请求方式:GET*
认证方式:APP或Cookie(SESSDATA)
+注: 这一 API 实际上只能判断出视频**在近期内**是否被点赞, 并不能判断出视频是否被点赞.
+「近期」的定义不明, 但至少半年前点赞过的视频, 用这一接口获取到的结果就已经是 `0` 了. 参见 [#380](https://github.com/SocialSisterYi/bilibili-API-collect/issues/380).
+
**url参数:**
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ------------ | ------------------ |
-| access_key | str | APP登录Token | APP方式必要 | |
-| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | --------------------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| aid | num | 稿件 avid | 必要(可选) | avid 与 bvid 任选一个 |
+| bvid | str | 稿件 bvid | 必要(可选) | avid 与 bvid 任选一个 |
**json回复:**
@@ -182,7 +167,7 @@ curl 'http://app.bilibili.com/x/v2/view/like' \
avid方式:
```shell
-curl -G 'http://api.bilibili.com/x/web-interface/archive/has/like' \
+curl -G 'https://api.bilibili.com/x/web-interface/archive/has/like' \
--data-urlencode 'aid=39330059' \
-b 'SESSDATA=xxx'
```
@@ -190,7 +175,7 @@ curl -G 'http://api.bilibili.com/x/web-interface/archive/has/like' \
bvid方式:
```shell
-curl -G 'api.bilibili.com/x/web-interface/archive/has/like' \
+curl -G 'https://api.bilibili.com/x/web-interface/archive/has/like' \
--data-urlencode 'bvid=BV1Bt411z799' \
-b 'SESSDATA=xxx'
```
@@ -209,39 +194,89 @@ curl -G 'api.bilibili.com/x/web-interface/archive/has/like' \
+## 点踩
+
+### 点踩视频(App端)
+
+> https://app.biliapi.net/x/v2/view/dislike
+
+*请求方式:POST*
+
+认证方式:仅可App
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------ | ----------------------- |
+| access_key | str | APP 登录 Token | 必要 | |
+| aid | num | 视频 aid | 必要 | |
+| dislike | num | 操作类型 | 必要 | 0:点踩 1:取消点踩 |
+
+**json回复:**
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|-----------------------------------------------------------------------------------------|
+| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 -404:啥都木有 65005:取消踩失败 未点踩过 65007:已踩过 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+点踩视频
+
+```shell
+curl -L -X POST 'https://app.biliapi.net/x/v2/view/dislike' \
+-H 'Content-Type: application/x-www-form-urlencoded' \
+--data-urlencode 'access_key=xxx' \
+--data-urlencode 'aid=xxx' \
+--data-urlencode 'dislike=0'
+```
+
+取消点踩
+
+```shell
+curl -L -X POST 'https://app.biliapi.net/x/v2/view/dislike' \
+-H 'Content-Type: application/x-www-form-urlencoded' \
+--data-urlencode 'access_key=xxx' \
+--data-urlencode 'aid=xxx' \
+--data-urlencode 'dislike=1'
+```
+
## 投币
-
+
### 投币视频(web端)
-> http://api.bilibili.com/x/web-interface/coin/add
+> https://api.bilibili.com/x/web-interface/coin/add
*请求方式:POST*
认证方式:仅可Cookie(SESSDATA)
+需验证 Cookie 中`buvid3`字段存在且正常, 否则将导致触发风控
+
**正文参数( application/x-www-form-urlencoded ):**
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ----------- | ---- | ------------------------ | ------------ | --------------------------------------- |
-| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
-| multiply | num | 投币数量 | 必要 | 上限为2 |
-| select_like | num | 是否附加点赞 | 非必要 | 0:不点赞 1:同时点赞 默认为0 |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----------- | ---- | ------------------------- | ------------ | --------------------------------------- |
+| aid | num | 稿件 avid | 必要(可选) | avid 与 bvid 任选一个 |
+| bvid | str | 稿件 bvid | 必要(可选) | avid 与 bvid 任选一个 |
+| multiply | num | 投币数量 | 必要 | 上限为2 |
+| select_like | num | 是否附加点赞 | 非必要 | 0:不点赞 1:同时点赞 默认为0 |
+| csrf | str | CSRF Token(位于 Cookie) | 必要 | |
**json回复:**
根对象:
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -102:账号被封停 -104:硬币不足 -111:csrf校验失败 -400:请求错误 10003:不存在该稿件 34002:不能给自己投币 34003:非法的投币数量 34004:投币间隔太短 34005:超过投币上限 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -102:账号被封停 -104:硬币不足 -111:csrf校验失败 -400:请求错误 -403: 账号异常 10003:不存在该稿件 34002:不能给自己投币 34003:非法的投币数量 34004:投币间隔太短 34005:超过投币上限 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
data 对象:
@@ -256,7 +291,7 @@ data 对象:
avid方式:
```shell
-curl 'http://api.bilibili.com/x/web-interface/coin/add' \
+curl 'https://api.bilibili.com/x/web-interface/coin/add' \
--data-urlencode 'aid=90671873' \
--data-urlencode 'select_like=1' \
--data-urlencode 'multiply=2' \
@@ -267,7 +302,7 @@ curl 'http://api.bilibili.com/x/web-interface/coin/add' \
bvid方式:
```shell
-curl 'http://api.bilibili.com/x/web-interface/coin/add' \
+curl 'https://api.bilibili.com/x/web-interface/coin/add' \
--data-urlencode 'bvid=BV1N7411A7wC' \
--data-urlencode 'select_like=1' \
--data-urlencode 'multiply=2' \
@@ -293,7 +328,7 @@ curl 'http://api.bilibili.com/x/web-interface/coin/add' \
### 投币视频(APP端)
-> http://app.bilibili.com/x/v2/view/coin/add
+> https://app.bilibili.com/x/v2/view/coin/add
*请求方式:POST*
@@ -301,12 +336,12 @@ curl 'http://api.bilibili.com/x/web-interface/coin/add' \
**正文参数( application/x-www-form-urlencoded ):**
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ----------- | ---- | ------------ | ----------- | --------------------------------------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| aid | num | 稿件avid | 必要 | |
-| multiply | num | 投币数量 | 必要 | 上限为2 |
-| select_like | num | 附加点赞 | 非必要 | 0:不点赞 1:同时点赞 默认为0 |
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----------- | ---- | -------------- | ------------ | --------------------------------------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| aid | num | 稿件 avid | 必要 | |
+| multiply | num | 投币数量 | 必要 | 上限为2 |
+| select_like | num | 附加点赞 | 非必要 | 0:不点赞 1:同时点赞 默认为0 |
**json回复:**
@@ -328,7 +363,7 @@ data 对象:
为视频`av90671873`投币2枚
```shell
-curl 'http://app.bilibili.com/x/v2/view/coin/add' \
+curl 'https://app.bilibili.com/x/v2/view/coin/add' \
--data-urlencode 'access_key=xxx' \
--data-urlencode 'aid=90671873' \
--data-urlencode 'select_like=1' \
@@ -353,7 +388,7 @@ curl 'http://app.bilibili.com/x/v2/view/coin/add' \
### 判断视频是否被投币(双端)
-> http://api.bilibili.com/x/web-interface/archive/coins
+> https://api.bilibili.com/x/web-interface/archive/coins
*请求方式:GET*
@@ -361,11 +396,11 @@ curl 'http://app.bilibili.com/x/v2/view/coin/add' \
**url参数:**
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ------------ | ------------------ |
-| access_key | str | APP登录Token | APP方式必要 | |
-| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | --------------------- |
+| access_key | str | APP 登录 Token | APP方式必要 | |
+| aid | num | 稿件 avid | 必要(可选) | avid 与 bvid 任选一个 |
+| bvid | str | 稿件 bvid | 必要(可选) | avid 与 bvid 任选一个 |
**json回复:**
@@ -391,7 +426,7 @@ curl 'http://app.bilibili.com/x/v2/view/coin/add' \
avid方式:
```shell
-curl -G 'api.bilibili.com/x/web-interface/archive/coins' \
+curl -G 'https://api.bilibili.com/x/web-interface/archive/coins' \
--data-urlencode 'aid=37896701' \
-b 'SESSDATA=xxx'
```
@@ -399,7 +434,7 @@ curl -G 'api.bilibili.com/x/web-interface/archive/coins' \
bvid方式:
```shell
-curl -G 'api.bilibili.com/x/web-interface/archive/coins' \
+curl -G 'https://api.bilibili.com/x/web-interface/archive/coins' \
--data-urlencode 'bvid=BV18t411q7zz' \
-b 'SESSDATA=xxx'
```
@@ -422,13 +457,11 @@ curl -G 'api.bilibili.com/x/web-interface/archive/coins' \
## 收藏
-
+
### 收藏视频(双端)
-> http://api.bilibili.com/medialist/gateway/coll/resource/deal
->
-> http://api.bilibili.com/x/v3/fav/resource/deal
+> https://api.bilibili.com/medialist/gateway/coll/resource/deal
*请求方式:POST*
@@ -440,12 +473,12 @@ curl -G 'api.bilibili.com/x/web-interface/archive/coins' \
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------------- | ---- | ------------------------ | -------------- | ------------------------------ |
-| access_key | str | APP登录Token | APP方式必要 | |
-| rid | num | 稿件avid | 必要 | |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| rid | num | 稿件 avid | 必要 | |
| type | num | 必须为2 | 必要 | |
-| add_media_ids | nums | 需要加入的收藏夹mlid | 非必要 | 同时添加多个,用`,`(%2C)分隔 |
-| del_media_ids | nums | 需要取消的收藏夹mlid | 非必要 | 同时取消多个,用`,`(%2C)分隔 |
-| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
+| add_media_ids | nums | 需要加入的收藏夹 mlid | 必要(可选) | 同时添加多个,用`,`(%2C)分隔 |
+| del_media_ids | nums | 需要取消的收藏夹 mlid | 必要(可选) | 同时取消多个,用`,`(%2C)分隔 |
+| csrf | str | CSRF Token(位于 Cookie) | Cookie 方式必要 | |
**json回复:**
@@ -453,7 +486,7 @@ curl -G 'api.bilibili.com/x/web-interface/archive/coins' \
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 -403:访问权限不足 10003:不存在该稿件 11201:已经收藏过了 11202:已经取消收藏了 11203:达到收藏上限 72010017:参数错误 |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 -403:访问权限不足 10003:不存在该稿件 11010: 您访问的内容不存在 11201:已经收藏过了 11202:已经取消收藏了 11203:达到收藏上限 72010017:参数错误 |
| message | str | 错误信息 | 正确为success |
| data | obj | 信息本体 | |
@@ -470,7 +503,7 @@ curl -G 'api.bilibili.com/x/web-interface/archive/coins' \
Cookie方式:
```shell
-curl 'http://api.bilibili.com/medialist/gateway/coll/resource/deal' \
+curl 'https://api.bilibili.com/medialist/gateway/coll/resource/deal' \
--data-urlencode 'rid=90671873' \
--data-urlencode 'type=2' \
--data-urlencode 'add_media_ids=49166435' \
@@ -483,7 +516,7 @@ curl 'http://api.bilibili.com/medialist/gateway/coll/resource/deal' \
APP方式:
```shell
-curl 'http://api.bilibili.com/medialist/gateway/coll/resource/deal' \
+curl 'https://api.bilibili.com/medialist/gateway/coll/resource/deal' \
--data-urlencode 'access_key=xxx' \
--data-urlencode 'rid=90671873' \
--data-urlencode 'type=2' \
@@ -506,9 +539,84 @@ curl 'http://api.bilibili.com/medialist/gateway/coll/resource/deal' \
+### 收藏视频(Web端)
+
+> https://api.bilibili.com/x/v3/fav/resource/deal
+
+*请求方式: POST*
+
+认证方式: Cookie(SESSDATA)
+
+**正文参数(application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------- | ---- | ---------------------------------- | ------------ | ------------------------------ |
+| rid | num | 稿件 avid | 必要 | |
+| type | num | 必须为2 | 必要 | |
+| add_media_ids | nums | 需要加入的收藏夹 mlid | 必要(可选) | 同时添加多个,用`,`(%2C)分隔 |
+| del_media_ids | nums | 需要取消的收藏夹 mlid | 必要(可选) | 同时取消多个,用`,`(%2C)分隔 |
+| csrf | str | CSRF Token (即 Cookie 中 bili_jct) | 必要 | |
+| platform | str | 平台标识? | 非必要 | web端: web |
+| eab_x | num | 1 | 非必要 | 作用尚不明确 |
+| ramval | num | 正整数 | 非必要 | 可能与在该页面的停留时间相关? |
+| ga | num | 1 | 非必要 | 作用尚不明确 |
+| gaia_source | str | ??? | 非必要 | web端: web_normal |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------- |
+| code | num | 返回值 | 0: 成功 -101: 账号未登录 -111: csrf 校验失败 2001000: 参数错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | 错误时为 null 或不存在 |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | --------------------- | ----------------------- |
+| prompt | bool | 是否为未关注用户收藏? | false:否 true:是 |
+| ga_data | null | | 作用尚不明确 |
+| toast_msg | str | 空 | 作用尚不明确 |
+| success_num | num | 0 | 作用尚不明确 |
+
+**示例:**
+
+将视频 `av2` 添加到收藏夹 `645769214` 中
+
+```shell
+curl -X POST "https://api.bilibili.com/x/v3/fav/resource/deal" \
+--data-urlencode "rid=2" \
+--data-urlencode "type=2" \
+--data-urlencode "csrf=xxx" \
+--data-urlencode "add_media_ids=1428261914" \
+-b "SESSDATA=xxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "prompt": false,
+ "ga_data": null,
+ "toast_msg": "",
+ "success_num": 0
+ }
+}
+```
+
+
+
### 判断视频是否被收藏(双端)
-> http://api.bilibili.com/x/v2/fav/video/favoured
+> https://api.bilibili.com/x/v2/fav/video/favoured
*请求方式:GET*
@@ -516,10 +624,10 @@ curl 'http://api.bilibili.com/medialist/gateway/coll/resource/deal' \
**url参数:**
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | -------- | ------------------ | ----------- | ---- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| aid | num或str | 稿件avid或稿件bvid | 必要 | |
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---------- | --------------------- | ------------ | ---- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| aid | num 或 str | 稿件 avid 或稿件 bvid | 必要 | |
**json回复:**
@@ -546,7 +654,7 @@ data 对象:
avid方式:
```shell
-curl -G 'http://api.bilibili.com/x/v2/fav/video/favoured' \
+curl -G 'https://api.bilibili.com/x/v2/fav/video/favoured' \
--data-urlencode 'aid=46281123' \
-b 'SESSDATA=xxx'
```
@@ -554,7 +662,7 @@ curl -G 'http://api.bilibili.com/x/v2/fav/video/favoured' \
bvid方式:
```shell
-curl -G 'http://api.bilibili.com/x/v2/fav/video/favoured' \
+curl -G 'https://api.bilibili.com/x/v2/fav/video/favoured' \
--data-urlencode 'aid=BV1Bb411H7Dv' \
-b 'SESSDATA=xxx'
```
@@ -578,11 +686,11 @@ curl -G 'http://api.bilibili.com/x/v2/fav/video/favoured' \
## 一键三连
-
+
### 一键三连视频(web端)
-> http://api.bilibili.com/x/web-interface/archive/like/triple
+> https://api.bilibili.com/x/web-interface/archive/like/triple
*请求方式:POST*
@@ -590,24 +698,26 @@ curl -G 'http://api.bilibili.com/x/v2/fav/video/favoured' \
同时点赞投币收藏视频,收藏于默认收藏夹中
+需验证 Cookie 中`buvid3`字段存在且正常, 否则将导致触发风控
+
**正文参数( application/x-www-form-urlencoded ):**
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------------ | ------------------ |
-| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------------------- | ------------ | --------------------- |
+| aid | num | 稿件 avid | 必要(可选) | avid 与 bvid 任选一个 |
+| bvid | str | 稿件 bvid | 必要(可选) | avid 与 bvid 任选一个 |
+| csrf | str | CSRF Token(位于 Cookie) | 必要 | |
**json回复:**
根对象:
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | -------------------------------------------------------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 10003:不存在该稿件 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- |------------------------------------------------------------------------------------------|
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 10003:不存在该稿件 -403: 账号异常 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
`data`对象:
@@ -625,7 +735,7 @@ curl -G 'http://api.bilibili.com/x/v2/fav/video/favoured' \
avid方式:
```shell
-curl 'http://api.bilibili.com/x/web-interface/archive/like/triple' \
+curl 'https://api.bilibili.com/x/web-interface/archive/like/triple' \
--data-urlencode 'aid=91003840' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
@@ -634,7 +744,7 @@ curl 'http://api.bilibili.com/x/web-interface/archive/like/triple' \
bvid方式:
```shell
-curl 'http://api.bilibili.com/x/web-interface/archive/like/triple' \
+curl 'https://api.bilibili.com/x/web-interface/archive/like/triple' \
--data-urlencode 'bvid=BV1Wj411f79U' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
@@ -661,7 +771,7 @@ curl 'http://api.bilibili.com/x/web-interface/archive/like/triple' \
### 一键三连视频(APP端)
-> http://app.bilibili.com/x/v2/view/like/triple
+> https://app.bilibili.com/x/v2/view/like/triple
*请求方式:POST*
@@ -671,10 +781,10 @@ curl 'http://api.bilibili.com/x/web-interface/archive/like/triple' \
**正文参数( application/x-www-form-urlencoded ):**
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | ---- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| aid | num | 稿件avid | 必要 | |
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | -------------- | ------------ | ---- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| aid | num | 稿件 avid | 必要 | |
**json回复:**
@@ -701,7 +811,7 @@ curl 'http://api.bilibili.com/x/web-interface/archive/like/triple' \
将视频`av91003840`一键三连
```shell
-curl 'http://app.bilibili.com/x/v2/view/like/triple' \
+curl 'https://app.bilibili.com/x/v2/view/like/triple' \
--data-urlencode 'access_key=xxx' \
--data-urlencode 'aid=91003840'
```
@@ -729,19 +839,23 @@ curl 'http://app.bilibili.com/x/v2/view/like/triple' \
### 分享视频 (Web端)
-> http://api.bilibili.com/x/web-interface/share/add
+> https://api.bilibili.com/x/web-interface/share/add
*请求方式:POST*
-认证方式 csrf token
+鉴权方式: Cookie (buvid3)
**正文参数( application/x-www-form-urlencoded ):**
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------------ | ------------------ |
-| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------------------- | ------------ | --------------------- |
+| aid | num | 稿件 aid | 必要 (可选) | aid 与 bvid 任选一个 |
+| bvid | str | 稿件 bvid | 必要 (可选) | aid 与 bvid 任选一个 |
+| csrf | str | CSRF Token (即 Cookie 中 bili_jct) | 不必要 | |
+| eab_x | num | 2 | 不必要 | 作用尚不明确 |
+| ramval | num | 0 | 不必要 | 作用尚不明确 |
+| source | str | web_normal | 不必要 | |
+| ga | num | 1 | 不必要 | 可能与风控有关? |
**json回复:**
@@ -749,18 +863,17 @@ curl 'http://app.bilibili.com/x/v2/view/like/triple' \
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | ---------- | ------------------------------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 |
+| code | num | 返回值 | 0: 成功 -101: 账号未登录 -111: csrf校验失败 -400: 请求错误 403: 账号异常,操作失败 71000: 重复分享 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | num | 当前分享数 | |
-
**示例:**
分享视频`BV1oA411776z`
```shell
-curl 'http://api.bilibili.com/x/web-interface/share/add' \
+curl 'https://api.bilibili.com/x/web-interface/share/add' \
--data-urlencode 'csrf=xxx' \
--data-urlencode 'bvid=BV1oA411776z'
```
diff --git a/docs/video/appeal.md b/docs/video/appeal.md
new file mode 100644
index 0000000..2324e45
--- /dev/null
+++ b/docs/video/appeal.md
@@ -0,0 +1,425 @@
+# 稿件投诉
+
+## 附件上传
+
+> 附件上传与视频封面上传共用一个api。
+
+## 获取投诉类型
+
+> https://api.bilibili.com/x/web-interface/archive/appeal/tags
+
+*请求类型:GET*
+
+**json回复:**
+
+| 参数名 | 类型 | 内容 | 备注 |
+| ------- | ------------- | ---- | ------- |
+| code | num | | 成功为0 |
+| message | str | | 成功为0 |
+| ttl | num | 1 | |
+| data | array | | |
+
+`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ------------------ |
+| 0 | obj | 类型条目 1 | |
+| n | obj | 类型条目 (n+1) | 按照指定的顺序排列 |
+| …… | obj | …… | …… |
+
+`data`数组中的对象
+
+| 项 | 类型 | 内容 | 备注 |
+| -------- | ------------------------------ | ---------------- | -------- |
+| tid | num | 类型tid | |
+| business | num | | 意义不明 |
+| weight | num | 权重 | |
+| round | num | | 意义不明 |
+| state | num | | 意义不明 |
+| name | str | 类型名称 | |
+| remark | str | 类型备注 | |
+| ctime | str | | 意义不明 |
+| mtime | str | | 意义不明 |
+| controls | 拥有时:array 没有时:null | 详细信息填写提示 | |
+
+`controls`数组中的对象:
+
+| 项 | 类型 | 内容 | 备注 |
+| ----------- | ---- | -------------- | -------- |
+| tid | num | 同上 | |
+| bid | num | | 意义不明 |
+| name | str | 提示名称 | |
+| title | str | 提示标题 | |
+| component | str | 需要填入的类型 | |
+| placeholder | str | 文本框占位符 | |
+| required | num | 是否为必填 | |
+
+**示例:**
+
+```bash
+curl --location --request GET 'https://api.bilibili.com/x/web-interface/archive/appeal/tags'
+```
+
+
+查看响应示例
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [
+ {
+ "tid": 1,
+ "business": 1,
+ "weight": 1,
+ "round": 2,
+ "state": 1,
+ "name": "其他",
+ "remark": "为帮助审核人员更快处理,请补充问题类型和出现位置等详细信息",
+ "ctime": "2018-08-13T15:41:20+08:00",
+ "mtime": "2023-09-21T18:40:20+08:00",
+ "controls": null
+ },
+ {
+ "tid": 8,
+ "business": 1,
+ "weight": 40,
+ "round": 2,
+ "state": 1,
+ "name": "与站内其他视频撞车",
+ "remark": "为帮助审核人员更快处理, 请描述撞车信息",
+ "ctime": "2018-08-13T15:41:20+08:00",
+ "mtime": "2023-03-06T16:36:02+08:00",
+ "controls": [
+ {
+ "tid": 8,
+ "bid": 1,
+ "name": "撞车对象",
+ "title": "撞车对象",
+ "component": "input",
+ "placeholder": "BVID",
+ "required": 1
+ }
+ ]
+ },
+ {
+ "tid": 9,
+ "business": 1,
+ "weight": 30,
+ "round": 2,
+ "state": 1,
+ "name": "引战",
+ "remark": "为帮助审核人员更快处理, 请补充引战的话题和出现位置",
+ "ctime": "2018-08-13T15:41:20+08:00",
+ "mtime": "2018-08-13T15:41:20+08:00",
+ "controls": null
+ },
+ {
+ "tid": 10,
+ "business": 1,
+ "weight": 20,
+ "round": 2,
+ "state": 1,
+ "name": "不能参加充电",
+ "remark": "为帮助审核人员更快处理, 请补充问题类型和出现位置等详细信息",
+ "ctime": "2018-08-13T15:41:20+08:00",
+ "mtime": "2018-08-23T11:35:28+08:00",
+ "controls": null
+ },
+ {
+ "tid": 52,
+ "business": 1,
+ "weight": 35,
+ "round": 2,
+ "state": 1,
+ "name": "转载/自制错误",
+ "remark": "为帮助审核人员更快处理, 请补充原创作品出处",
+ "ctime": "2018-08-13T15:41:20+08:00",
+ "mtime": "2023-09-20T16:23:39+08:00",
+ "controls": [
+ {
+ "tid": 52,
+ "bid": 1,
+ "name": "出处",
+ "title": "原创视频出处",
+ "component": "link",
+ "placeholder": "请填写链接",
+ "required": 1
+ }
+ ]
+ },
+ {
+ "tid": 10018,
+ "business": 1,
+ "weight": 36,
+ "round": 2,
+ "state": 1,
+ "name": "违规推广",
+ "remark": "",
+ "ctime": "2023-09-21T17:56:21+08:00",
+ "mtime": "2023-09-22T14:36:41+08:00",
+ "controls": null
+ },
+ {
+ "tid": 10019,
+ "business": 1,
+ "weight": 34,
+ "round": 2,
+ "state": 1,
+ "name": "其他不规范行为",
+ "remark": "",
+ "ctime": "2023-09-21T18:05:33+08:00",
+ "mtime": "2023-09-22T14:37:03+08:00",
+ "controls": null
+ },
+ {
+ "tid": 10020,
+ "business": 1,
+ "weight": 89,
+ "round": 2,
+ "state": 1,
+ "name": "危险行为",
+ "remark": "",
+ "ctime": "2023-09-21T18:05:51+08:00",
+ "mtime": "2023-09-22T14:38:08+08:00",
+ "controls": null
+ },
+ {
+ "tid": 10022,
+ "business": 1,
+ "weight": 1,
+ "round": 2,
+ "state": 1,
+ "name": "其他",
+ "remark": "",
+ "ctime": "2023-09-21T19:07:01+08:00",
+ "mtime": "2023-09-22T14:38:59+08:00",
+ "controls": null
+ },
+ {
+ "tid": 10023,
+ "business": 1,
+ "weight": 59,
+ "round": 2,
+ "state": 1,
+ "name": "企业商誉侵权",
+ "remark": "",
+ "ctime": "2023-12-01T14:06:58+08:00",
+ "mtime": "2023-12-01T15:33:26+08:00",
+ "controls": null
+ },
+ {
+ "tid": 10024,
+ "business": 1,
+ "weight": 58,
+ "round": 2,
+ "state": 1,
+ "name": "侵权申诉",
+ "remark": "",
+ "ctime": "2023-12-01T14:07:18+08:00",
+ "mtime": "2023-12-01T15:33:37+08:00",
+ "controls": null
+ },
+ {
+ "tid": 2,
+ "business": 1,
+ "weight": 100,
+ "round": 1,
+ "state": 1,
+ "name": "违法违禁",
+ "remark": "为帮助审核人员更快处理,补充违规内容出现位置",
+ "ctime": "2018-08-13T15:41:20+08:00",
+ "mtime": "2018-08-13T15:41:20+08:00",
+ "controls": null
+ },
+ {
+ "tid": 3,
+ "business": 1,
+ "weight": 90,
+ "round": 1,
+ "state": 1,
+ "name": "色情低俗",
+ "remark": "为帮助审核人员更快处理,补充违规内容出现位置",
+ "ctime": "2018-08-13T15:41:20+08:00",
+ "mtime": "2023-09-21T19:07:10+08:00",
+ "controls": null
+ },
+ {
+ "tid": 4,
+ "business": 1,
+ "weight": 80,
+ "round": 1,
+ "state": 1,
+ "name": "低俗",
+ "remark": "为帮助审核人员更快处理,补充违规内容出现位置",
+ "ctime": "2018-08-13T15:41:20+08:00",
+ "mtime": "2018-08-13T15:41:20+08:00",
+ "controls": null
+ },
+ {
+ "tid": 5,
+ "business": 1,
+ "weight": 70,
+ "round": 1,
+ "state": 1,
+ "name": "赌博诈骗",
+ "remark": "为帮助审核人员更快处理,补充违规内容出现位置",
+ "ctime": "2018-08-13T15:41:20+08:00",
+ "mtime": "2018-08-13T15:41:20+08:00",
+ "controls": null
+ },
+ {
+ "tid": 6,
+ "business": 1,
+ "weight": 60,
+ "round": 1,
+ "state": 1,
+ "name": "血腥暴力",
+ "remark": "为帮助审核人员更快处理,补充违规内容出现位置",
+ "ctime": "2018-08-13T15:41:20+08:00",
+ "mtime": "2018-08-13T15:41:20+08:00",
+ "controls": null
+ },
+ {
+ "tid": 7,
+ "business": 1,
+ "weight": 50,
+ "round": 1,
+ "state": 1,
+ "name": "人身攻击",
+ "remark": "为帮助审核人员更快处理,补充违规内容出现位置",
+ "ctime": "2018-08-13T15:41:20+08:00",
+ "mtime": "2018-08-13T15:41:20+08:00",
+ "controls": null
+ },
+ {
+ "tid": 10000,
+ "business": 1,
+ "weight": 10,
+ "round": 1,
+ "state": 1,
+ "name": "青少年不良信息",
+ "remark": "为帮助审核人员更快处理, 请补充违规内容出现位置",
+ "ctime": "2018-08-13T15:41:20+08:00",
+ "mtime": "2018-08-13T15:41:20+08:00",
+ "controls": null
+ },
+ {
+ "tid": 10013,
+ "business": 1,
+ "weight": 37,
+ "round": 1,
+ "state": 1,
+ "name": "不良封面/标题",
+ "remark": "为帮助审核人员更快处理, 请描述详细信息",
+ "ctime": "2019-04-17T19:18:09+08:00",
+ "mtime": "2019-04-17T20:42:25+08:00",
+ "controls": null
+ },
+ {
+ "tid": 10014,
+ "business": 1,
+ "weight": 8,
+ "round": 1,
+ "state": 1,
+ "name": "涉政谣言",
+ "remark": "为帮助审核人员更快处理,请补充谣言内容出现位置",
+ "ctime": "2022-09-15T17:23:44+08:00",
+ "mtime": "2022-09-16T09:56:07+08:00",
+ "controls": null
+ },
+ {
+ "tid": 10015,
+ "business": 1,
+ "weight": 7,
+ "round": 1,
+ "state": 1,
+ "name": "涉社会事件谣言",
+ "remark": "为帮助审核人员更快处理,请补充谣言内容出现位置",
+ "ctime": "2022-09-15T17:25:56+08:00",
+ "mtime": "2022-09-16T09:56:07+08:00",
+ "controls": null
+ },
+ {
+ "tid": 10017,
+ "business": 1,
+ "weight": 5,
+ "round": 1,
+ "state": 1,
+ "name": "虚假不实信息",
+ "remark": "为帮助审核人员更快处理,请补充不实内容出现位置",
+ "ctime": "2022-09-15T17:28:16+08:00",
+ "mtime": "2022-09-16T09:56:08+08:00",
+ "controls": null
+ },
+ {
+ "tid": 10021,
+ "business": 1,
+ "weight": 88,
+ "round": 1,
+ "state": 1,
+ "name": "观感不适",
+ "remark": "",
+ "ctime": "2023-09-21T18:06:15+08:00",
+ "mtime": "2023-09-21T18:06:15+08:00",
+ "controls": null
+ }
+ ]
+}
+```
+
+
+
+## 投诉稿件
+
+> https://api.bilibili.com/x/web-interface/appeal/v2/submit
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+**正文参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------------------ | ------ | ------------------------ |
+| csrf | str | csrf token(位于cookie bili_jct) | 必要 | 位于request body |
+| aid | num | 稿件aid | 必要 | 位于request body |
+| tid | num | 投诉理由tid | 必要 | 位于request body |
+| desc | str | 投诉理由详细描述 | 必要 | 位于request body |
+| attach | str | 附件(多个附件用逗号隔开 | 非必要 | 位于request body |
+| buid | str | 风控代码 | 必要 | 位于request header |
+| Buid | str | 风控代码 | 必要 | 位于request cookies |
+
+上下两个buid值必须相同,可随机
+
+**json回复:**
+
+| 参数名 | 类型 | 内容 | 备注 |
+| ------- | ---- | ------ | ------- |
+| code | num | 返回码 | 成功为0 |
+| message | str | | 成功为0 |
+| ttl | | 1 | |
+
+**示例:举报av号为61080066的视频,理由为人身攻击,描述为“xxxxx”,并附带了一个图片附件
+
+```bash
+curl --location --request POST 'https://api.bilibili.com/x/web-interface/appeal/v2/submit' \
+--form 'csrf="xxxx"'\
+--form 'aid="61080066"' \
+--form 'tid="7"' \
+--form 'desc="xxxxx"' \
+--form 'attach="https://archive.biliimg.com/bfs/archive/xxxxx.png"'
+```
+
+
+ 查看响应示例
+
+```json
+{
+ "code":0,
+ "message":"0",
+ "ttl":1
+}
+```
+
+
diff --git a/video/attribute_data.md b/docs/video/attribute_data.md
similarity index 91%
rename from video/attribute_data.md
rename to docs/video/attribute_data.md
index 4dfdec0..a3d1e70 100644
--- a/video/attribute_data.md
+++ b/docs/video/attribute_data.md
@@ -1,12 +1,11 @@
# 视频属性数据说明
-(PS:以下部分内容来源不明,且部分值前端不可见,有待验证)
-
-- [attribute字段值(视频属性位)](#attribute字段值(视频属性位))
-- [state字段值(稿件状态)](#state字段值(稿件状态))
+**PS**:以下部分内容来源不明,且部分值前端不可见,有待验证
## attribute字段值(稿件属性位)
+该字段前端已弃用, 相关接口返回恒为 `0`, 参见 [验证视频属性字段,实锤B站视频限流](https://shakaianee.top/archives/9/)
+
该字段为二进制标志位,多个标志请用`OR`运算叠加
| 位 | 内容 | 备注 |
@@ -32,7 +31,7 @@
| 18 | 是否付费 | |
| 19 | 推送动态 | |
| 20 | 家长模式 | |
-| 21 | 是否限制游客和外链 | 分为两种情况,默认全部网页限制referer跳转,但第二种未登录无法访问,可以通过未登陆b站访问http://api.bilibili.com/x/web-interface/view 返回的code为-403来判断 |
+| 21 | 是否限制游客和外链 | 分为两种情况,默认全部网页限制referer跳转,但第二种未登录无法访问,可以通过未登陆b站访问https://api.bilibili.com/x/web-interface/view 返回的code为-403来判断 |
| 22 | ? | |
| 23 | ? | |
| 24 | 是否为联合投稿 | |
@@ -67,5 +66,6 @@
| -20 | 创建未提交 | |
| -30 | 创建已提交 | |
| -40 | 定时发布 | |
+| -50 | 仅UP主可见 | |
| -100 | 用户删除 | |
diff --git a/docs/video/collection.md b/docs/video/collection.md
new file mode 100644
index 0000000..0e79db7
--- /dev/null
+++ b/docs/video/collection.md
@@ -0,0 +1,1986 @@
+# 合集和视频列表信息
+
+请注意区分 **合集(seasons_archives)** 和 **视频列表(seasons_series)**
+
+合集是后加入的功能, 图标为立体叠放的正方形(.icon-heji), 可以在创作中心管理, 参见 [合集管理](../creativecenter/season.md)
+
+列表即系列(series)或频道(channel), 图标为平面叠放的矩形且中央有播放按钮标识(.icon-ic_channel1), 在个人空间直接操作
+
+此处保留原 Issue 的表述, 参见 [#945](https://github.com/SocialSisterYi/bilibili-API-collect/issues/945)
+
+## 获取视频合集信息
+
+> https://api.bilibili.com/x/polymer/web-space/seasons_archives_list (需验证referer)
+>
+> https://api.bilibili.com/x/polymer/space/seasons_archives_list (旧接口, 不推荐使用, 无鉴权验证)
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|--------|-----|------|--------|-----|
+| mid | num | 用户 mid | 必要 | 创建者的 mid,但也可以是任意的非负整数 |
+| season_id | num | 视频合集 ID | 必要 | |
+| sort_reverse | bool | 排序方式 | 可选 | true: 升序排序 false: 默认排序 |
+| page_num | num | 页码索引 | 可选 | 默认为 1 |
+| page_size | num | 单页内容数量 | 可选 | 默认为 30 |
+| gaia_vtoken | str | 风控验证? | 可选 | 若被风控则必要(如User-Agent不正常) |
+| web_location | str | 页面位置? | 可选 | 333.999 |
+| w_rid | str | WBI 签名 | 可选 | 参见 [WBI 签名](../misc/sign/wbi.md) |
+| wts | num | UNIX 秒级时间戳 | 可选 | 参见 [WBI 签名](../misc/sign/wbi.md) |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|------------------------------------------------------------------------------------|
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------------- | ------- | ------------------------------ | ----------------------------------------------------------- |
+| aids | array | 稿件 avid 列表 | 对应下方数组中内容 aid |
+| archives | array | 合集中的视频 | |
+| meta | obj | 合集元数据 | |
+| page | obj | 分页信息 | |
+
+`data`中的`archives`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|----------|---------|
+| 0 | obj | 合集内容 | |
+| n | obj | (n+1)P内容 | |
+| …… | obj | …… | …… |
+
+`archives`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|----------|-----|------|-----|
+| aid | num | 稿件 avid ||
+| bvid | str | 稿件 bvid ||
+| ctime | num | 创建时间 | Unix 时间戳 |
+| duration | num | 视频时长 | 单位为秒 |
+| enable_vt | bool | false | 旧接口无 |
+| interactive_video | bool | 是否是互动视频 | |
+| pic | str | 封面 URL ||
+| playback_position | num || 会随着播放时间增长,播放完成后为 -1 。单位为 % |
+| pubdate | num | 发布日期 | Unix 时间戳 |
+| stat | obj | 稿件信息 ||
+| state | num | 0 ||
+| title | str | 稿件标题||
+| ugc_pay | num | UGC 付费? | 0: 否 |
+| vt_display | str | 空 | 旧接口无 |
+
+`archives`中的`stat`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|----------|-----|------|-----|
+| view | num | 稿件播放量 ||
+| vt | num | 0 ||
+
+`data`中的`meta`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-----------------|-----|--------------|--------|
+| category | num | 0 | |
+| cover | str | 合集封面 URL | |
+| description | str | 合集描述 | |
+| mid | num | UP 主 ID | |
+| name | str | 合集标题 | |
+| ptime | num | 发布时间 | Unix 时间戳 |
+| season_id | num | 合集 ID | |
+| total | num | 合集内视频数量 | |
+
+`data`中的`page`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-----------------|-----|--------------|--------|
+| page_num | num | 分页页码 | |
+| page_size | num | 单页个数 | |
+| total | num | 合集内视频数量 | |
+
+**示例:**
+
+获取 `mid=37737161` 的 `season_id=1227671` 视频合集信息,默认排序,第 1 页,每页 30 个视频
+
+```shell
+curl -G "https://api.bilibili.com/x/polymer/space/seasons_archives_list" \
+--data-urlencode "mid=37737161" \
+--data-urlencode "sort_reverse=false" \
+--data-urlencode "season_id=1227671" \
+--data-urlencode "page_num=1" \
+--data-urlencode "page_size=30"
+```
+
+
+查看响应示例:
+
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "aids": [
+ 311606079,
+ 400546145
+ ],
+ "archives": [
+ {
+ "aid": 311606079,
+ "bvid": "BV1XN411K7g9",
+ "ctime": 1679651747,
+ "duration": 261,
+ "interactive_video": false,
+ "pic": "http://i2.hdslb.com/bfs/archive/234e6bd061176dba9e148f4373c52fa7cd2d801f.jpg",
+ "pubdate": 1679651747,
+ "stat": {
+ "view": 12145
+ },
+ "state": 0,
+ "title": "某些IT社区平台乱象,文章千篇一律,毫不注重版权,文章互相抄袭成潮流,希望能够好好管管!",
+ "ugc_pay": 0
+ },
+ {
+ "aid": 400546145,
+ "bvid": "BV1qo4y1L73P",
+ "ctime": 1682777426,
+ "duration": 335,
+ "interactive_video": false,
+ "pic": "http://i2.hdslb.com/bfs/archive/a6b6fb0330bbf6c500720a024e5a9ade24d888c3.jpg",
+ "pubdate": 1682777425,
+ "stat": {
+ "view": 52743
+ },
+ "state": 0,
+ "title": "某些搜索引擎得到的结果,官方网站反而排在一些诈骗广告后面,诱导用户下载大量捆绑垃圾软件",
+ "ugc_pay": 0
+ }
+ ],
+ "meta": {
+ "category": 0,
+ "cover": "https://archive.biliimg.com/bfs/archive/5e1c1f77c3065ec31eec43d7e35f7a061602e4d6.jpg",
+ "description": "白马首席讲师吐槽系列视频",
+ "mid": 37737161,
+ "name": "水浅王八多,真假白马说",
+ "ptime": 1682777425,
+ "season_id": 1227671,
+ "total": 2
+ },
+ "page": {
+ "page_num": 1,
+ "page_size": 30,
+ "total": 2
+ }
+ }
+}
+```
+
+
+
+## 只获取系列视频
+
+> https://api.bilibili.com/x/polymer/web-space/home/seasons_series
+
+*请求方式: GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --------- | ---- | ------------ | ------ | ---- |
+| mid | num | 用户 mid | 必要 | |
+| page_num | num | 页码索引 | 必要 | |
+| page_size | num | 单页内容数量 | 必要 | |
+| gaia_vtoken | str | 风控验证? | 可选 | 若被风控则必要(如User-Agent不正常) |
+| w_rid | str | WBI 签名 | 不必要 | 参见 [WBI 签名](../misc/sign/wbi.md) |
+| wts | num | UNIX 秒级时间戳 | 不必要 | 参见 [WBI 签名](../misc/sign/wbi.md) |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------- |
+| code | num | 返回值 | 0:成功 -352: 请求被风控 -400: 请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ---- | -------- | -------- |
+| items_lists | obj | 内容列表 | 套了个娃 |
+
+`data`中的`items_lists`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ----- | -------- | ---- |
+| page | obj | 分页信息 | |
+| seasons_list | array | 空 | |
+| series_list | array | 系列列表 | |
+
+`items_lists`中的`page`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | -------- | ---- |
+| page_num | num | 分页页码 | |
+| page_size | num | 单页个数 | |
+| total | num | 总页数 | |
+
+`items_lists`中的`series_list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| -- | ---- | ----------------- | ---- |
+| 0 | obj | 第1个系列内容 | |
+| 1 | obj | 第2个系列内容 | |
+| …… | obj | …… | …… |
+| n | obj | 第(n+1)个系列内容 | |
+
+`series_list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------- | ----- | ----------------- | ------------- |
+| archives | array | 系列视频列表 | |
+| meta | obj | 系列元数据 | |
+| recent_aids | array | 系列视频 aid 列表 | 内容类型为num |
+
+`series_list`中的`archives`数组:
+
+同[获取视频合集信息](#获取视频合集信息)中的`archives`数组
+
+`series_list`中的`meta`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ----- | -------------- | ------------- |
+| category | num | 1 | |
+| cover | str | 系列封面 URL | |
+| creator | str | auto | |
+| ctime | num | 创建时间 | Unix 时间戳 |
+| description | str | 系列描述 | |
+| keywords | array | 系列关键词列表 | 内容类型为str |
+| last_update_ts | num | 最近更新时间 | Unix 时间戳 |
+| mid | num | UP 主 ID | |
+| mtime | num | 修改时间 | Unix 时间戳 |
+| name | str | 系列标题 | |
+| raw_keywords | str | 原始系列关键词 | |
+| series_id | num | 系列 ID | |
+| state | num | 2 | |
+| total | num | 系列视频数量 | |
+
+**示例:**
+
+```shell
+curl -G "https://api.bilibili.com/x/polymer/web-space/home/seasons_series" \
+--data-urlencode "mid=37737161" \
+--data-urlencode "page_num=1" \
+--data-urlencode "page_size=10"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "items_lists": {
+ "page": {
+ "page_num": 1,
+ "page_size": 10,
+ "total": 1
+ },
+ "seasons_list": [],
+ "series_list": [
+ {
+ "archives": [
+ {
+ "aid": 284063097,
+ "bvid": "BV1Fc411x7xF",
+ "ctime": 1705925782,
+ "duration": 8885,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i0.hdslb.com/bfs/archive/5aa1bb0a121d89969e9bd2634bc7ae23272bf850.jpg",
+ "playback_position": 0,
+ "pubdate": 1705925781,
+ "stat": {
+ "view": 14683,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Gradle 教程 已完结 (基于Kotlin DSL讲解) 4K蓝光画质 超强的脚本式项目依赖和构建工具",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 367948632,
+ "bvid": "BV1P94y1c7tV",
+ "ctime": 1703844221,
+ "duration": 52036,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i2.hdslb.com/bfs/archive/499aeb41a0428e05523b766e367540b04f7c3ae2.jpg",
+ "playback_position": 0,
+ "pubdate": 1703844220,
+ "stat": {
+ "view": 82997,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Kotlin 教程 已完结 (IDEA 2024 最新版) 4K蓝光画质+杜比音效 零基础入门一套搞定 入门到入土经典版",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 836303388,
+ "bvid": "BV1Hg4y1m7Ca",
+ "ctime": 1705401362,
+ "duration": 5873,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i1.hdslb.com/bfs/archive/a20b09d1cc1a81f6a9c5ed8ea322656e406be725.jpg",
+ "playback_position": 0,
+ "pubdate": 1705401362,
+ "stat": {
+ "view": 8417,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Kotlin 扩展篇 已完结 (IDEA 2024 最新版) 4K蓝光画质 与Java语言混合编程",
+ "ugc_pay": 0,
+ "vt_display": ""
+ }
+ ],
+ "meta": {
+ "category": 1,
+ "cover": "http://i0.hdslb.com/bfs/archive/5aa1bb0a121d89969e9bd2634bc7ae23272bf850.jpg",
+ "creator": "auto",
+ "ctime": 1705401630,
+ "description": "包含Kotlin语言学习的完整流程,正在不断完善中哦~",
+ "keywords": [
+ "Kotlin"
+ ],
+ "last_update_ts": 1705925782,
+ "mid": 37737161,
+ "mtime": 1705925782,
+ "name": "Kotlin开心路线",
+ "raw_keywords": "Kotlin",
+ "series_id": 3908327,
+ "state": 2,
+ "total": 3
+ },
+ "recent_aids": [
+ 284063097,
+ 367948632,
+ 836303388
+ ]
+ },
+ {
+ "archives": [
+ {
+ "aid": 848832470,
+ "bvid": "BV1CL4y1i7qR",
+ "ctime": 1635258883,
+ "duration": 106474,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i0.hdslb.com/bfs/archive/45dddea811257f78ddd6f1e70197d95d7d6b5187.jpg",
+ "playback_position": 0,
+ "pubdate": 1635258883,
+ "stat": {
+ "view": 438645,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "JavaWeb 教程 已完结(IDEA 2021版本)4K蓝光画质 入土到起立",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 566880413,
+ "bvid": "BV1Kv4y1x7is",
+ "ctime": 1676544280,
+ "duration": 25149,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i1.hdslb.com/bfs/archive/cc59de5afebc66447ba93ad9ea0ba73a9b09c117.jpg",
+ "playback_position": 0,
+ "pubdate": 1676544280,
+ "stat": {
+ "view": 87171,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Spring 核心教程 已完结(IDEA 2023最新版)4K蓝光画质 基于Spring6的全新重制版本 起立到起飞",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 615286308,
+ "bvid": "BV1Lh4y1M7kx",
+ "ctime": 1688117457,
+ "duration": 10373,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i0.hdslb.com/bfs/archive/5f860de4bc0fab30651ae93396f9c572be8380b2.jpg",
+ "playback_position": 0,
+ "pubdate": 1688117457,
+ "stat": {
+ "view": 41428,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Spring MVC 教程 已完结(IDEA 2023最新版)4K蓝光画质 基于Spring6的全新重制版本 起立到起飞",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 403104913,
+ "bvid": "BV1fV411M7aS",
+ "ctime": 1688560394,
+ "duration": 17611,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i1.hdslb.com/bfs/archive/c4557a16aa3519183d6ae0114e1c64107bb23703.jpg",
+ "playback_position": 0,
+ "pubdate": 1688560394,
+ "stat": {
+ "view": 59298,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Spring Security 教程 已完结(IDEA 2023最新版)4K蓝光画质 基于Spring6的全新重制版本 起立到起飞",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 828666773,
+ "bvid": "BV1xu4y1m7UP",
+ "ctime": 1689767299,
+ "duration": 29696,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i1.hdslb.com/bfs/archive/06cf686d4d3f7ce6731975ef59938d759283318e.jpg",
+ "playback_position": 0,
+ "pubdate": 1689767299,
+ "stat": {
+ "view": 108078,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Spring Boot 教程 已完结(IDEA 2023最新版)4K蓝光画质 基于SpringBoot 3 的全新重制版本 起飞到删库跑路",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 852857221,
+ "bvid": "BV1AL4y1j7RY",
+ "ctime": 1648811079,
+ "duration": 55544,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i2.hdslb.com/bfs/archive/629755f79c13c96c9b6d91da80257a352b29dd86.jpg",
+ "playback_position": 0,
+ "pubdate": 1648811079,
+ "stat": {
+ "view": 168251,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "SpringCloud 教程 已完结(IDEA 2022.1最新版)4K蓝光画质 微服务开发",
+ "ugc_pay": 0,
+ "vt_display": ""
+ }
+ ],
+ "meta": {
+ "category": 1,
+ "cover": "http://i0.hdslb.com/bfs/archive/45dddea811257f78ddd6f1e70197d95d7d6b5187.jpg",
+ "creator": "auto",
+ "ctime": 1669273103,
+ "description": "已排序完成,共4个系列,请至少完成Java SE篇视频之后再开始JavaEE路线哦~ 整个路线大致为:JavaWeb基础篇、SSM成长篇、SpringBoot成熟篇、SpringCloud进阶篇",
+ "keywords": [
+ ""
+ ],
+ "last_update_ts": 1696249622,
+ "mid": 37737161,
+ "mtime": 1696249622,
+ "name": "JavaEE通关路线",
+ "raw_keywords": "",
+ "series_id": 2800548,
+ "state": 2,
+ "total": 9
+ },
+ "recent_aids": [
+ 848832470,
+ 566880413,
+ 615286308,
+ 403104913,
+ 828666773,
+ 852857221
+ ]
+ },
+ {
+ "archives": [
+ {
+ "aid": 445283537,
+ "bvid": "BV14j411S76G",
+ "ctime": 1687946670,
+ "duration": 7008,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i1.hdslb.com/bfs/archive/208bb09ecf97fbbd73e45b3839715276ffbbe8f4.jpg",
+ "playback_position": 0,
+ "pubdate": 1687946670,
+ "stat": {
+ "view": 9483,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Apache Maven 依赖管理 极速上手 已完结(2021 版本)4K蓝光画质+杜比音效 从导入到冲突",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 813084463,
+ "bvid": "BV1r34y1p7j9",
+ "ctime": 1656909478,
+ "duration": 17457,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i2.hdslb.com/bfs/archive/798135f31dc9e03121458f32825dc81d8e403887.jpg",
+ "playback_position": 0,
+ "pubdate": 1656909478,
+ "stat": {
+ "view": 46179,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Docker 容器技术 已完结(2022 最新版)4K蓝光画质+杜比音效 从内卷到开摆",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 432905025,
+ "bvid": "BV1a3411f7nh",
+ "ctime": 1669296029,
+ "duration": 10393,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i2.hdslb.com/bfs/archive/d14c0fad064a224de7afb7edd147f8b335324c53.jpg",
+ "playback_position": 0,
+ "pubdate": 1669296029,
+ "stat": {
+ "view": 37040,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Linux 操作系统 光速入门 已完结(2021 版本)4K蓝光画质+杜比音效 从讨厌到喜欢",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 390385576,
+ "bvid": "BV19d4y147Df",
+ "ctime": 1669272992,
+ "duration": 23389,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i0.hdslb.com/bfs/archive/8ba763e1a1e14c47c1c178ecf21240896d3fbb5e.jpg",
+ "playback_position": 0,
+ "pubdate": 1669272992,
+ "stat": {
+ "view": 32189,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "MySQL 数据库技术 已完结(2021版本)4K蓝光画质+杜比音效 从内卷到开摆",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 647924810,
+ "bvid": "BV1ce4y1W7YB",
+ "ctime": 1669275447,
+ "duration": 8492,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i0.hdslb.com/bfs/archive/f5bcc92a4e181cb12a8b80499cea255f43f2d97b.jpg",
+ "playback_position": 0,
+ "pubdate": 1669275447,
+ "stat": {
+ "view": 20004,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Git 版本控制 快速上手 已完结(2021版本)4K蓝光画质+杜比音效 从开摆到放弃",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 347934006,
+ "bvid": "BV1vR4y1o7Z2",
+ "ctime": 1669295228,
+ "duration": 10631,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i0.hdslb.com/bfs/archive/f95d39b0bc1a2bdad07461a8f4b1ea48c174902c.jpg",
+ "playback_position": 0,
+ "pubdate": 1669295228,
+ "stat": {
+ "view": 25860,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Redis 缓存技术 已完结(2021版本)4K蓝光画质+杜比音效 从内卷到开摆",
+ "ugc_pay": 0,
+ "vt_display": ""
+ }
+ ],
+ "meta": {
+ "category": 1,
+ "cover": "http://i1.hdslb.com/bfs/archive/208bb09ecf97fbbd73e45b3839715276ffbbe8f4.jpg",
+ "creator": "auto",
+ "ctime": 1669273164,
+ "description": "包含主线中讲解的中间件归档视频与当下必学的火热技术。",
+ "keywords": [
+ ""
+ ],
+ "last_update_ts": 1688123428,
+ "mid": 37737161,
+ "mtime": 1688123428,
+ "name": "必学技术与中间件",
+ "raw_keywords": "",
+ "series_id": 2800550,
+ "state": 2,
+ "total": 7
+ },
+ "recent_aids": [
+ 445283537,
+ 813084463,
+ 432905025,
+ 390385576,
+ 647924810,
+ 347934006
+ ]
+ },
+ {
+ "archives": [
+ {
+ "aid": 900707014,
+ "bvid": "BV1YP4y1o75f",
+ "ctime": 1663494406,
+ "duration": 103542,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i0.hdslb.com/bfs/archive/291dd3b60b67a8f74567a81999612bd50b4e8017.jpg",
+ "playback_position": 0,
+ "pubdate": 1663494406,
+ "stat": {
+ "view": 312144,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "JavaSE 教程 已完结 (IDEA 2022 最新版) 4K蓝光画质+杜比音效 零基础入门一套搞定 入门到入土",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 604837097,
+ "bvid": "BV1G84y1v7Vj",
+ "ctime": 1667815711,
+ "duration": 19395,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i0.hdslb.com/bfs/archive/4a4522194a1d0c8ae684976b26fb2fe43ce28f39.jpg",
+ "playback_position": 0,
+ "pubdate": 1667815711,
+ "stat": {
+ "view": 74496,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "JavaSE AWT/Swing 图形化编程 (IDEA 2022 最新版) 4K蓝光画质+杜比音效 快速上手桌面程序 用IDEA写IDEA",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 766688029,
+ "bvid": "BV1Er4y1r7as",
+ "ctime": 1645157763,
+ "duration": 21585,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i2.hdslb.com/bfs/archive/ced6a8c8548f0f921f306ea3589f9d470adc0446.jpg",
+ "playback_position": 0,
+ "pubdate": 1645157763,
+ "stat": {
+ "view": 133409,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Java JVM 虚拟机 已完结(IDEA 2021版本)4K蓝光画质 全程劝退",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 936955310,
+ "bvid": "BV1JT4y1S7K8",
+ "ctime": 1646391131,
+ "duration": 31736,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i1.hdslb.com/bfs/archive/9347ef3cdb6cf0e5bca29ce32e211b488e90ab7b.jpg",
+ "playback_position": 0,
+ "pubdate": 1646391131,
+ "stat": {
+ "view": 74731,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Java JUC 并发编程 已完结(IDEA 2021版本)4K蓝光画质 玩转多线程",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 768437265,
+ "bvid": "BV1ar4y1J7mC",
+ "ctime": 1650881312,
+ "duration": 26314,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i0.hdslb.com/bfs/archive/7f97549147c09a386d9402b121cc6206c36e4079.jpg",
+ "playback_position": 0,
+ "pubdate": 1650881312,
+ "stat": {
+ "view": 67900,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Java NIO Netty网络编程 已完结(IDEA 2022.1最新版)4K蓝光画质 网络I/O进阶编程",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 684547077,
+ "bvid": "BV1tU4y1y7Fg",
+ "ctime": 1653900327,
+ "duration": 10243,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i2.hdslb.com/bfs/archive/dc0cc9464c6fc274c1f23f682a01dab5a358217b.jpg",
+ "playback_position": 0,
+ "pubdate": 1653900327,
+ "stat": {
+ "view": 47693,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "JavaSE 9-17 新特性 已完结(IDEA 2022.1最新版)4K蓝光画质 Java9/10/11/12/13/14/15/16/17讲解",
+ "ugc_pay": 0,
+ "vt_display": ""
+ }
+ ],
+ "meta": {
+ "category": 1,
+ "cover": "http://i0.hdslb.com/bfs/archive/291dd3b60b67a8f74567a81999612bd50b4e8017.jpg",
+ "creator": "auto",
+ "ctime": 1648810702,
+ "description": "已排序完成,共3个系列,完成JavaSE篇之后,就可以开启JavaEE路线了",
+ "keywords": [
+ ""
+ ],
+ "last_update_ts": 1667816253,
+ "mid": 37737161,
+ "mtime": 1667816253,
+ "name": "JavaSE基础路线",
+ "raw_keywords": "",
+ "series_id": 2158988,
+ "state": 2,
+ "total": 6
+ },
+ "recent_aids": [
+ 900707014,
+ 604837097,
+ 766688029,
+ 936955310,
+ 768437265,
+ 684547077
+ ]
+ },
+ {
+ "archives": [
+ {
+ "aid": 770027221,
+ "bvid": "BV1Cr4y137os",
+ "ctime": 1655371329,
+ "duration": 48185,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i0.hdslb.com/bfs/archive/5d9bd135f068e623e50c7341244635f6cc96c3ea.jpg",
+ "playback_position": 0,
+ "pubdate": 1655371329,
+ "stat": {
+ "view": 275378,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "C语言程序设计 已完结(CLion 2022 最新版)4K蓝光画质+杜比音效 梦开始的地方",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 941207928,
+ "bvid": "BV13W4y127Ey",
+ "ctime": 1658474799,
+ "duration": 69081,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i2.hdslb.com/bfs/archive/0bf055a0961c0f9bbb7f869b47c3e3d7df21f55c.jpg",
+ "playback_position": 0,
+ "pubdate": 1658474798,
+ "stat": {
+ "view": 220072,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "数据结构与算法 已完结(CLion 2022 最新版)4K蓝光画质+杜比音效 全程高能",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 426681358,
+ "bvid": "BV1u3411P7Na",
+ "ctime": 1653033628,
+ "duration": 12346,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i0.hdslb.com/bfs/archive/4174e2976f750d5410d6cef374c3035190717cac.jpg",
+ "playback_position": 0,
+ "pubdate": 1653033628,
+ "stat": {
+ "view": 71911,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Java 设计模式 已完结(IDEA 2022.1最新版)4K蓝光画质+杜比音效",
+ "ugc_pay": 0,
+ "vt_display": ""
+ }
+ ],
+ "meta": {
+ "category": 1,
+ "cover": "http://i0.hdslb.com/bfs/archive/5d9bd135f068e623e50c7341244635f6cc96c3ea.jpg",
+ "creator": "auto",
+ "ctime": 1653296733,
+ "description": "Java设计模式系列视频,提升你的代码编写规范。",
+ "keywords": [
+ ""
+ ],
+ "last_update_ts": 1658735292,
+ "mid": 37737161,
+ "mtime": 1658735292,
+ "name": "高等院校计算机必修课",
+ "raw_keywords": "",
+ "series_id": 2318088,
+ "state": 2,
+ "total": 3
+ },
+ "recent_aids": [
+ 770027221,
+ 941207928,
+ 426681358
+ ]
+ }
+ ]
+ }
+ }
+}
+```
+
+
+
+## 获取系列和合集视频
+
+> https://api.bilibili.com/x/polymer/web-space/seasons_series_list
+
+*请求方式: GET*
+
+鉴权方式: 请求头 User-Agent 为正常浏览器, 若仍被风控则请求头再带上 Referer 为 `.bilibili.com` 下任意页
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| mid | num | 用户 mid | 必要 | |
+| page_num | num | 页码 | 必要 | 默认为 1 |
+| page_size | num | 每页数量 | 必要 | 默认为 20 |
+| w_rid | str | WBI 签名 | 可选 | 参见 [WBI 签名](../misc/sign/wbi.md) |
+| wts | num | UNIX 秒级时间戳 | 可选 | 参见 [WBI 签名](../misc/sign/wbi.md) |
+| web_location | str | 页面位置? | 可选 | 333.999 |
+
+**JSON回复:**
+
+与 [只获取系列视频](#只获取系列视频) 基本一致, 但 `.data.items_lists.seasons_list` 数组不为空,
+且该数组中的元素结构与 `.data.items_lists.series_list` 相同, 略
+
+**示例:**
+
+获取 `mid=37737161` 的系列视频列表,每页 5 条,页码为 1
+
+```shell
+curl -G "https://api.bilibili.com/x/polymer/web-space/seasons_series_list" \
+--data-urlencode "mid=37737161" \
+--data-urlencode "page_num=1" \
+--data-urlencode "page_size=5" \
+--data-urlencode "w_rid=xxx" \
+--data-urlencode "wts=xxx"
+```
+
+
+查看响应示例:
+
+```jsonc
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "items_lists": {
+ "page": {
+ "page_num": 1,
+ "page_size": 5,
+ "total": 9
+ },
+ "seasons_list": [
+ {
+ "archives": [
+ {
+ "aid": 343807541,
+ "bvid": "BV1t94y1D79E",
+ "ctime": 1658907465,
+ "duration": 2164,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i1.hdslb.com/bfs/archive/0af0faa77a1921db4cf86c115db70aa2594983f0.jpg",
+ "playback_position": 0,
+ "pubdate": 1658907465,
+ "stat": {
+ "view": 43096,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "Java学习路线两条龙版,让你不再迷茫!包含各个知识点梳理,常用技术栈介绍等。",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 429032764,
+ "bvid": "BV11G411h7NB",
+ "ctime": 1659499261,
+ "duration": 197,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i2.hdslb.com/bfs/archive/5235a0ab2738e288b08654aa8e0cd3a509a7ef96.jpg",
+ "playback_position": 0,
+ "pubdate": 1659499200,
+ "stat": {
+ "view": 22700,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "好书推荐《On Java》都什么年代了,还在看传统Java书籍?",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ // ...
+ ],
+ "meta": {
+ "category": 0,
+ "cover": "https://archive.biliimg.com/bfs/archive/27733cf13514d990c880154b937cd8633f583aa4.jpg",
+ "description": "除教程视频外其他的视频,均在此。",
+ "mid": 37737161,
+ "name": "合集·拾枝杂谈",
+ "ptime": 1694682652,
+ "season_id": 587216,
+ "total": 10
+ },
+ "recent_aids": [
+ 343807541,
+ 429032764,
+ 857089796,
+ 560181990,
+ 774119786,
+ 859397126
+ ]
+ },
+ {
+ "archives": [
+ {
+ "aid": 311606079,
+ "bvid": "BV1XN411K7g9",
+ "ctime": 1679651747,
+ "duration": 261,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i2.hdslb.com/bfs/archive/234e6bd061176dba9e148f4373c52fa7cd2d801f.jpg",
+ "playback_position": 0,
+ "pubdate": 1679651747,
+ "stat": {
+ "view": 12150,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "某些IT社区平台乱象,文章千篇一律,毫不注重版权,文章互相抄袭成潮流,希望能够好好管管!",
+ "ugc_pay": 0,
+ "vt_display": ""
+ },
+ {
+ "aid": 400546145,
+ "bvid": "BV1qo4y1L73P",
+ "ctime": 1682777426,
+ "duration": 335,
+ "enable_vt": false,
+ "interactive_video": false,
+ "pic": "http://i2.hdslb.com/bfs/archive/a6b6fb0330bbf6c500720a024e5a9ade24d888c3.jpg",
+ "playback_position": 0,
+ "pubdate": 1682777425,
+ "stat": {
+ "view": 52744,
+ "vt": 0
+ },
+ "state": 0,
+ "title": "某些搜索引擎得到的结果,官方网站反而排在一些诈骗广告后面,诱导用户下载大量捆绑垃圾软件",
+ "ugc_pay": 0,
+ "vt_display": ""
+ }
+ ],
+ "meta": {
+ "category": 0,
+ "cover": "https://archive.biliimg.com/bfs/archive/5e1c1f77c3065ec31eec43d7e35f7a061602e4d6.jpg",
+ "description": "白马首席讲师吐槽系列视频",
+ "mid": 37737161,
+ "name": "合集·水浅王八多,真假白马说",
+ "ptime": 1682777425,
+ "season_id": 1227671,
+ "total": 2
+ },
+ "recent_aids": [
+ 311606079,
+ 400546145
+ ]
+ },
+ // ...
+ ],
+ "series_list": [
+ // 与前接口基本相同
+ ]
+ }
+ }
+}
+```
+
+
+
+## 查询指定系列
+
+> https://api.bilibili.com/x/series/series
+
+*请求方式: GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| series_id | num | 系列ID | 必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ------------ | ---- |
+| meta | obj | 系列信息 | |
+| recent_aids | array | 系列 aid 列表 | 内容类型为 num |
+
+`data`中的`meta`对象:
+
+同[只获取系列视频](#只获取系列视频)中的`meta`对象
+
+**示例:**
+
+```shell
+curl -G 'https://api.bilibili.com/x/series/series' \
+--data-urlencode 'series_id=2158988'
+```
+
+
+查看响应示例
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "meta": {
+ "series_id": 2158988,
+ "mid": 37737161,
+ "name": "JavaSE基础路线",
+ "description": "已排序完成,共3个系列,完成JavaSE篇之后,就可以开启JavaEE路线了",
+ "keywords": [
+ ""
+ ],
+ "creator": "auto",
+ "state": 2,
+ "last_update_ts": 1667816253,
+ "total": 6,
+ "ctime": 1648810702,
+ "mtime": 1667816253,
+ "raw_keywords": "",
+ "category": 1
+ },
+ "recent_aids": [
+ 900707014,
+ 604837097,
+ 766688029,
+ 936955310,
+ 768437265,
+ 684547077
+ ]
+ }
+}
+```
+
+
+
+## 获取指定系列视频
+
+> https://api.bilibili.com/x/series/archives
+
+*请求方式: GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| mid | num | 用户 mid | 必要 | |
+| series_id | num | 系列ID | 必要 | |
+| only_normal | bool | 作用尚不明确 | 可选 | 默认为 true |
+| sort | str | 排序方式 | 可选 | desc: 默认排序 asc: 升序排序 |
+| pn | num | 页码 | 可选 | 默认为 1 |
+| ps | num | 每页数量 | 可选 | 默认为 20 |
+| current_mid | num | 当前用户 mid | 可选 | 用于 `playback_position` 播放进度 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------- |
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ------------ | ---- |
+| aids | array | 视频 aid 列表 | 内容类型为 num |
+| page | obj | 页码信息 | |
+| archives | array | 视频信息列表 | |
+
+`data`中的`page`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------- | ---- |
+| num | num | 当前页码 | |
+| size | num | 每页数量 | |
+| total | num | 视频总数 | |
+
+`data`中的`archives`数组:
+
+基本同[获取视频合集信息](#获取视频合集信息)中的`archives`数组
+
+**示例:**
+
+获取 `mid=39665558` 的 `series_id=534501` 系列视频列表,每页 16 条,页码为 1,默认排序, 当前用户 mid 为 `1070915568`
+
+```shell
+curl -G "https://api.bilibili.com/x/series/archives" \
+--data-urlencode "mid=39665558" \
+--data-urlencode "series_id=534501" \
+--data-urlencode "only_normal=true" \
+--data-urlencode "sort=desc" \
+--data-urlencode "pn=1" \
+--data-urlencode "ps=16" \
+--data-urlencode "current_mid=1070915568"
+```
+
+
+查看响应示例:
+
+```jsonc
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "aids": [
+ 695029098,
+ 724599872,
+ 594794875,
+ 41565264,
+ 541053051,
+ 499696652,
+ 673071936,
+ 462891077,
+ 973903762,
+ 61692380,
+ 336713491,
+ 372661682,
+ 550840795,
+ 51839931,
+ 718592873,
+ 87838863
+ ],
+ "page": {
+ "num": 1,
+ "size": 16,
+ "total": 25
+ },
+ "archives": [
+ {
+ "aid": 695029098,
+ "title": "Python控制Minecraft教程(下):自动建造",
+ "pubdate": 1677321251,
+ "ctime": 1677321251,
+ "state": 0,
+ "pic": "http://i1.hdslb.com/bfs/archive/187c0ba21b9ceba908a8760e83d49f466316824b.jpg",
+ "duration": 275,
+ "stat": {
+ "view": 26555
+ },
+ "bvid": "BV1k24y1J78X",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 0
+ },
+ {
+ "aid": 724599872,
+ "title": "『教程』一看就懂!Github基础教程",
+ "pubdate": 1646740815,
+ "ctime": 1646740824,
+ "state": 0,
+ "pic": "http://i0.hdslb.com/bfs/archive/1401ebe64e88deddf2b44ad6a740ff8872c2fda6.jpg",
+ "duration": 296,
+ "stat": {
+ "view": 2412054
+ },
+ "bvid": "BV1hS4y1S7wL",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 0
+ },
+ {
+ "aid": 594794875,
+ "title": "『教程』手把手教你流畅访问Github",
+ "pubdate": 1647345613,
+ "ctime": 1647336725,
+ "state": 0,
+ "pic": "http://i0.hdslb.com/bfs/archive/71cc640a84087cc99399449c00b93212fe78ee6f.jpg",
+ "duration": 236,
+ "stat": {
+ "view": 910491
+ },
+ "bvid": "BV1Aq4y1q7hr",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 0
+ },
+ {
+ "aid": 41565264,
+ "title": "《Python负基础到入门教程》专为\"非计算机专业和编程困难户\"制作(全13集 配音字幕重制版)",
+ "pubdate": 1548316071,
+ "ctime": 1548316072,
+ "state": 0,
+ "pic": "http://i0.hdslb.com/bfs/archive/5f4f6acfc00723c84f726d35add94b1d4b4ee482.jpg",
+ "duration": 6395,
+ "stat": {
+ "view": 261286
+ },
+ "bvid": "BV1et411b76c",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 0
+ },
+ {
+ "aid": 541053051,
+ "title": "『教程』文字频频乱码 这背后是显卡的扭曲还是规则的沦丧?",
+ "pubdate": 1592996906,
+ "ctime": 1592996907,
+ "state": 0,
+ "pic": "http://i0.hdslb.com/bfs/archive/8a3c3e3d01a91776763d34bba79add698869c82d.jpg",
+ "duration": 381,
+ "stat": {
+ "view": 1184937
+ },
+ "bvid": "BV1ai4y1x7Uz",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 0
+ },
+ {
+ "aid": 499696652,
+ "title": "『教程』VsCode五分钟上手教程 无一句废话",
+ "pubdate": 1601207369,
+ "ctime": 1601207369,
+ "state": 0,
+ "pic": "http://i1.hdslb.com/bfs/archive/cb78c07a090ed456bdcc217b0417670867772a29.jpg",
+ "duration": 329,
+ "stat": {
+ "view": 417610
+ },
+ "bvid": "BV1bK411P767",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 0
+ },
+ {
+ "aid": 673071936,
+ "title": "『教程』补码怎么来的?",
+ "pubdate": 1620994814,
+ "ctime": 1620986531,
+ "state": 0,
+ "pic": "http://i1.hdslb.com/bfs/archive/12c02599321a0b1386b29ddc4653ff7df9bd54b4.jpg",
+ "duration": 445,
+ "stat": {
+ "view": 247578
+ },
+ "bvid": "BV16U4y1t7LD",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 0
+ },
+ {
+ "aid": 462891077,
+ "title": "『教程』回调函数是个啥?",
+ "pubdate": 1631274885,
+ "ctime": 1631274885,
+ "state": 0,
+ "pic": "http://i0.hdslb.com/bfs/archive/df294350462558601f65b743ca25e2fdc01de628.jpg",
+ "duration": 452,
+ "stat": {
+ "view": 213895
+ },
+ "bvid": "BV1vL411t78b",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 98
+ },
+ {
+ "aid": 973903762,
+ "title": "『教程』堆栈是个啥?",
+ "pubdate": 1625227205,
+ "ctime": 1625227209,
+ "state": 0,
+ "pic": "http://i0.hdslb.com/bfs/archive/bf7956b6311ec0787fd52d1293bb4287d16b7e65.jpg",
+ "duration": 370,
+ "stat": {
+ "view": 535174
+ },
+ "bvid": "BV1P44y1q7uL",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 99
+ },
+ {
+ "aid": 61692380,
+ "title": "『教程』什么是递归?",
+ "pubdate": 1564660818,
+ "ctime": 1564637347,
+ "state": 0,
+ "pic": "http://i1.hdslb.com/bfs/archive/4af853671204b9bc631fada1934a3e86145a7d19.jpg",
+ "duration": 658,
+ "stat": {
+ "view": 487397
+ },
+ "bvid": "BV194411f71o",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 79
+ },
+ {
+ "aid": 336713491,
+ "title": "『教程』几分钟听懂迭代器",
+ "pubdate": 1636713476,
+ "ctime": 1636713476,
+ "state": 0,
+ "pic": "http://i0.hdslb.com/bfs/archive/6e255cce7c0303ab0211acd0f9d1ec5980ff03f7.jpg",
+ "duration": 453,
+ "stat": {
+ "view": 110688
+ },
+ "bvid": "BV18R4y1t7Hg",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 97
+ },
+ {
+ "aid": 372661682,
+ "title": "『教程』桌面精灵是怎样实现的?",
+ "pubdate": 1604916264,
+ "ctime": 1604916264,
+ "state": 0,
+ "pic": "http://i0.hdslb.com/bfs/archive/aaa8bb7b6fced63dd4792e28c1f78ba903fcc4cc.jpg",
+ "duration": 326,
+ "stat": {
+ "view": 168775
+ },
+ "bvid": "BV1aZ4y1V7aa",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 0
+ },
+ {
+ "aid": 550840795,
+ "title": "『教程』什么是钩子技术?",
+ "pubdate": 1642744335,
+ "ctime": 1642744335,
+ "state": 0,
+ "pic": "http://i0.hdslb.com/bfs/archive/380b1ff9726c673411cf916b03268c7fb16aff68.jpg",
+ "duration": 240,
+ "stat": {
+ "view": 237568
+ },
+ "bvid": "BV1Cq4y1c7kK",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 0
+ },
+ {
+ "aid": 51839931,
+ "title": "『教程』学编程前必知的8个电脑操作",
+ "pubdate": 1557313623,
+ "ctime": 1557313623,
+ "state": 0,
+ "pic": "http://i2.hdslb.com/bfs/archive/b54535ee3ff27006912d8013f2ea1667b2a50f80.jpg",
+ "duration": 641,
+ "stat": {
+ "view": 139385
+ },
+ "bvid": "BV1t4411v78E",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 0
+ },
+ {
+ "aid": 718592873,
+ "title": "『教程』这些常见编程单词到底该怎么读?看你能否读对?对✔❌✅☑",
+ "pubdate": 1634300675,
+ "ctime": 1634265090,
+ "state": 0,
+ "pic": "http://i1.hdslb.com/bfs/archive/de43275f44aea9f6d79c13ee68c6dcdfc9e5fc5e.jpg",
+ "duration": 783,
+ "stat": {
+ "view": 81193
+ },
+ "bvid": "BV1JQ4y1D79p",
+ "ugc_pay": 0,
+ "interactive_video": true,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 100
+ },
+ {
+ "aid": 87838863,
+ "title": "『教程』什么是环境变量",
+ "pubdate": 1581258353,
+ "ctime": 1581258353,
+ "state": 0,
+ "pic": "http://i0.hdslb.com/bfs/archive/331b2304d8262c4252f338599846761d6a5a8e0c.jpg",
+ "duration": 353,
+ "stat": {
+ "view": 99797
+ },
+ "bvid": "BV1w741147G9",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 0
+ }
+ ]
+ }
+}
+```
+
+
+
+## 根据关键词查找视频
+
+> https://api.bilibili.com/x/series/recArchivesByKeywords
+
+*请求方式:GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| mid | num | 用户 mid | 必要 | |
+| keywords | str | 关键词 | 必要 | 可为空, 即获取所有视频 |
+| ps | num | 每页视频数 | 非必要 | 默认为 0, 留空为 20 |
+| pn | num | 页码 | 非必要 | 留空为 1 |
+| orderby | str | 排序方式 | 非必要 | 最新发布: pubdate(默认) 最多播放: views senddate: 最新发布 |
+| series_id | num | 系列 ID | 非必要 | 用于过滤结果, 即若某一视频包含在系列内则不返回该视频 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------- |
+| code | num | 返回值 | 0: 成功 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | ---- |
+| archives | arr | 视频列表 | |
+| page | obj | 页码信息 | |
+
+`archives` 数组:
+
+同[获取视频合集信息](#获取视频合集信息)中的`archives`数组
+
+`page` 对象:
+
+同[获取视频合集信息](#获取视频合集信息)中的`page`对象
+
+**示例:**
+
+查询用户 `mid=2` 关键词为 `幕` 的视频, 不限制每页视频数
+
+```shell
+curl -G "https://api.bilibili.com/x/series/recArchivesByKeywords" \
+--data-urlencode "mid=2" \
+--data-urlencode "keywords=幕" \
+--data-urlencode "ps=0"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "archives": [
+ {
+ "aid": 120040,
+ "title": "高级语言弹幕测试",
+ "pubdate": 1311616515,
+ "ctime": 1497344798,
+ "state": 0,
+ "pic": "http://i1.hdslb.com/bfs/archive/55a553659799d8a6fcb645d8f1f9df418ad6fe4e.jpg",
+ "duration": 911,
+ "stat": {
+ "view": 3584767
+ },
+ "bvid": "BV1Xx411c7cH",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 0
+ },
+ {
+ "aid": 2,
+ "title": "字幕君交流场所",
+ "pubdate": 1252458549,
+ "ctime": 1497344798,
+ "state": 0,
+ "pic": "http://static.hdslb.com/images/transparent.gif",
+ "duration": 2055,
+ "stat": {
+ "view": 4609291
+ },
+ "bvid": "BV1xx411c7mD",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 0
+ },
+ {
+ "aid": 271,
+ "title": "弹幕测试专用",
+ "pubdate": 1249886475,
+ "ctime": 1497344798,
+ "state": 0,
+ "pic": "http://i1.hdslb.com/bfs/archive/a5980672f3d03e8292148748a63de99cd45679d3.jpg",
+ "duration": 1213,
+ "stat": {
+ "view": 4857422
+ },
+ "bvid": "BV1xx411c7Xg",
+ "ugc_pay": 0,
+ "interactive_video": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "playback_position": 0
+ }
+ ],
+ "page": {
+ "num": 1,
+ "size": 0,
+ "total": 3
+ }
+ }
+}
+```
+
+
+
+## 创建视频列表
+
+> https://api.bilibili.com/x/series/series/createAndAddArchives
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ----| ---- | ------ | ---- |
+| csrf | str | CSRF Token (即 Cookies 中 bili_jct ) | 必要 | |
+
+**正文参数 (multipart/form-data):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| mid | num | 用户 mid | 必要 | |
+| name | str | 标题 | 必要 | |
+| keywords | str | 关键词 | 不必要 | |
+| description | str | 简介 | 不必要 | |
+| aids | str | 视频 aid 列表 | 不必要 | 以 `,` 分隔, 如 `2,112861,112861976201494,976201494` |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------- |
+| code | num | 返回值 | 0: 成功 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ---- | ------------ | ---- |
+| series_id | num | 视频列表 ID | |
+
+**示例:**
+
+为 `mid=616368979` 创建视频列表, 标题为 `NAME`, 视频为 `112861976201494`
+
+```shell
+curl -X POST --url "https://api.bilibili.com/x/series/series/createAndAddArchives" \
+--url-query "csrf=xxxxxxxxxx" \
+--data-urlencode "mid=616368979" \
+--data-urlencode "name=NAME" \
+--data-urlencode "aids=112861976201494" \
+-b "SESSDATA=xxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "series_id": 4269765
+ }
+}
+```
+
+
+
+## 删除视频列表
+
+> https://api.bilibili.com/x/series/series/delete
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ----| ---- | ------ | ---- |
+| csrf | str | CSRF Token (即 Cookies 中 bili_jct ) | 必要 | |
+| mid | num | 用户 mid | 必要 | |
+| series_id | num | 视频列表 ID | 必要 | |
+| aids | str | 空 | 不必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------- |
+| code | num | 返回值 | 0: 成功 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 空 | |
+
+**示例:**
+
+为 `mid=616368979` 删除视频列表 `series_id=4269765`
+
+```shell
+curl -X POST --url "https://api.bilibili.com/x/series/series/delete" \
+--url-query "csrf=xxxxxxxxxx" \
+--url-query "series_id=4269765" \
+--url-query "mid=616368979" \
+-b "SESSDATA=xxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
+## 删除视频列表中的稿件
+
+> https://api.bilibili.com/x/series/series/delArchives
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ----| ---- | ------ | ---- |
+| csrf | str | CSRF Token (即 Cookies 中 bili_jct ) | 必要 | |
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| mid | num | 用户 mid | 必要 | |
+| series_id | num | 视频列表 ID | 必要 | |
+| aids | str | 视频 aid 列表 | 必要 | 以 `,` 分隔, 如 `2,112861,112861976201494,976201494` |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------- |
+| code | num | 返回值 | 0: 成功 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 空 | |
+
+**示例:**
+
+为 `mid=616368979` 删除视频列表 `series_id=4269782` 中的 `112861976201494`
+
+```shell
+curl -X POST --url "https://api.bilibili.com/x/series/series/delArchives" \
+--url-query "csrf=xxxxxxxxxx" \
+--data-urlencode "mid=616368979" \
+--data-urlencode "series_id=4269782" \
+--data-urlencode "aids=112861976201494" \
+-b "SESSDATA=xxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
+## 添加稿件至视频列表
+
+> https://api.bilibili.com/x/series/series/addArchives
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+**URL参数:**
+
+同[删除视频列表中的稿件](#删除视频列表中的稿件)
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+同[删除视频列表中的稿件](#删除视频列表中的稿件)
+
+**JSON回复:**
+
+同[删除视频列表中的稿件](#删除视频列表中的稿件)
+
+**示例:**
+
+为 `mid=616368979` 添加视频 `112861976201494` 至视频列表 `series_id=4269782`
+
+```shell
+curl -X POST --url "https://api.bilibili.com/x/series/series/addArchives" \
+--url-query "csrf=xxxxxxxxxx" \
+--data-urlencode "mid=616368979" \
+--data-urlencode "series_id=4269782" \
+--data-urlencode "aids=112861976201494" \
+-b "SESSDATA=xxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
+
+## 编辑视频列表信息
+
+> https://api.bilibili.com/x/series/series/update
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ----| ---- | ------ | ---- |
+| csrf | str | CSRF Token (即 Cookies 中 bili_jct ) | 必要 | |
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| mid | num | 用户 mid | 必要 | |
+| series_id | num | 视频列表 ID | 必要 | |
+| name | str | 标题 | 必要 | |
+| keywords | str | 关键词 | 不必要 | |
+| description | str | 简介 | 不必要 | |
+| add_aids | str | 视频 aid 列表 | 不必要 | 以 `,` 分隔 |
+| del_aids | str | 视频 aid 列表 | 不必要 | |
+| aids | str | 空 | 不必要 | |
+
+**JSON回复:**
+
+同[删除视频列表中的稿件](#删除视频列表中的稿件)
+
+**示例:**
+
+为 `mid=616368979` 编辑视频列表 `series_id=4269782`, 设置标题为 `NAME`, 设置简介为空, 设置关键词 `Telnet`, 添加视频 `112861976201494`
+
+```shell
+curl -X POST --url "https://api.bilibili.com/x/series/series/update" \
+--url-query "csrf=xxxxxxxxxx" \
+--data-urlencode "name=NAME" \
+--data-urlencode "mid=616368979" \
+--data-urlencode "series_id=4269782" \
+--data-urlencode "keywords=Telnet" \
+--data-urlencode "add_aids=112861976201494" \
+-b "SESSDATA=xxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {}
+}
+```
+
+
diff --git a/docs/video/info.md b/docs/video/info.md
new file mode 100644
index 0000000..78f5943
--- /dev/null
+++ b/docs/video/info.md
@@ -0,0 +1,4564 @@
+# 视频基本信息
+
+
+
+## 获取视频详细信息(web端)
+
+> https://api.bilibili.com/x/web-interface/wbi/view
+> https://api.bilibili.com/x/web-interface/view
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+限制游客访问的视频需要登录
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|------|-----|--------|--------|---------------|
+| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
+| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|------------------------------------------------------------------------------------|
+| code | num | 返回值 | 0:成功 -400:请求错误 -403:权限不足 -404:无视频 62002:稿件不可见 62004:稿件审核中 62012:仅UP主自己可见 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------------- | ------- | ------------------------------ | ------------------------------------------------------------ |
+| bvid | str | 稿件bvid | |
+| aid | num | 稿件avid | |
+| videos | num | 稿件分P总数 | 默认为1 |
+| tid | num | 分区tid | 详情见[视频分区一览](video_zone.md) |
+| tid_v2 | num | 分区tid (v2) | 详情见[视频分区一览 (v2)](video_zone_v2.md) |
+| tname | str | 子分区名称 | |
+| tname_v2 | str | 子分区名称 (v2) | |
+| copyright | num | 视频类型 | 1:原创 2:转载 |
+| pic | str | 稿件封面图片url | |
+| title | str | 稿件标题 | |
+| pubdate | num | 稿件发布时间 | 秒级时间戳 |
+| ctime | num | 用户投稿时间 | 秒级时间戳 |
+| desc | str | 视频简介 | |
+| desc_v2 | array | 新版视频简介 | |
+| state | num | 视频状态 | 详情见[属性数据文档](attribute_data.md#state字段值稿件状态) |
+| ~~attribute~~(已经弃用) | ~~num~~ | ~~稿件属性位配置~~ | 详情见[属性数据文档](attribute_data.md#attribute字段值稿件属性位) |
+| duration | num | 稿件总时长(所有分P) | 单位为秒 |
+| forward | num | 撞车视频跳转avid | 仅撞车视频存在此字段 |
+| mission_id | num | 稿件参与的活动id | |
+| redirect_url | str | 重定向url | 仅番剧或影视视频存在此字段 用于番剧&影视的av/bv->ep |
+| rights | obj | 视频属性标志 | |
+| owner | obj | 视频UP主信息 | |
+| stat | obj | 视频状态数 | |
+| argue_info | obj | 争议/警告信息 | |
+| dynamic | str | 视频同步发布的的动态的文字内容 | |
+| cid | num | 视频1P cid | |
+| dimension | obj | 视频1P分辨率 | |
+| premiere | | null | |
+| teenage_mode | num | | 用于青少年模式 |
+| is_chargeable_season | bool | | |
+| is_story | bool | 是否可以在 Story Mode 展示? | |
+| is_upower_exclusive | bool | 是否为充电专属视频 | |
+| is_upower_play | bool | | |
+| is_upower_preview | bool | 充电专属视频是否支持试看 | |
+| no_cache | bool | 是否不允许缓存? | |
+| pages | array | 视频分P列表 | |
+| subtitle | obj | 视频CC字幕信息 | |
+| staff | array | 合作成员列表 | 非合作视频无此项 |
+| is_season_display | bool | | |
+| user_garb | obj | 用户装扮信息 | |
+| honor_reply | obj | | |
+| like_icon | str | 空串 | |
+| need_jump_bv | bool | 需要跳转到BV号? | |
+| disable_show_up_info | bool | 禁止展示UP主信息? | |
+| is_story_play | bool | 是否为 Story Mode 视频? | |
+| is_view_self | bool | 是否为自己投稿的视频? | |
+
+`data`中的`desc_v2`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|--------|-----|
+| 0 | obj | 新版简介内容 | |
+
+`desc_v2`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|----------|-----|------|-----|
+| raw_text | str | 简介内容 |type=1时显示原文 type=2时显示'@'+raw_text+' '并链接至biz_id的主页|
+| type | num | 类型 |1:普通,2:@他人|
+| biz_id | num |被@用户的mid|=0,当type=1|
+
+`data`中的`rights`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-----------------|-----|--------------|--------|
+| bp | num | 是否允许承包 | |
+| elec | num | 是否支持充电 | |
+| download | num | 是否允许下载 | |
+| movie | num | 是否电影 | |
+| pay | num | 是否PGC付费 | |
+| hd5 | num | 是否有高码率 | |
+| no_reprint | num | 是否显示“禁止转载”标志 | |
+| autoplay | num | 是否自动播放 | |
+| ugc_pay | num | 是否UGC付费 | |
+| is_cooperation | num | 是否为联合投稿 | |
+| ugc_pay_preview | num | 0 | 作用尚不明确 |
+| no_background | num | 0 | 作用尚不明确 |
+| clean_mode | num | 0 | 作用尚不明确 |
+| is_stein_gate | num | 是否为互动视频 | |
+| is_360 | num | 是否为全景视频 | |
+| no_share | num | 0 | 作用尚不明确 |
+| arc_pay | num | 0 | 作用尚不明确 |
+| free_watch | num | 0 | 作用尚不明确 |
+
+`data`中的`owner`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------|-----|--------|-----|
+| mid | num | UP主mid | |
+| name | str | UP主昵称 | |
+| face | str | UP主头像 | |
+
+`data`中的`stat`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ------------ | ------- |
+| aid | num | 稿件avid | |
+| view | num | 播放数 | |
+| danmaku | num | 弹幕数 | |
+| reply | num | 评论数 | |
+| favorite | num | 收藏数 | |
+| coin | num | 投币数 | |
+| share | num | 分享数 | |
+| now_rank | num | 当前排名 | |
+| his_rank | num | 历史最高排行 | |
+| like | num | 获赞数 | |
+| dislike | num | 点踩数 | 恒为`0` |
+| evaluation | str | 视频评分 | |
+| vt | int | 作用尚不明确 | 恒为`0` |
+
+`data`中的`argue_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | ----------------- | ------------ |
+| argue_link | str | | 作用尚不明确 |
+| argue_msg | str | 警告/争议提示信息 | |
+| argue_type | int | | 作用尚不明确 |
+
+`data`中的`pages`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|----------|---------|
+| 0 | obj | 1P内容 | 无分P仅有此项 |
+| n | obj | (n+1)P内容 | |
+| …… | obj | …… | …… |
+
+`pages`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-----------|-----|-----------|---------------------------------------------|
+| cid | num | 分P cid | |
+| page | num | 分P序号 | 从1开始 |
+| from | str | 视频来源 | vupload:普通上传(B站) hunan:芒果TV qq:腾讯 |
+| part | str | 分P标题 | |
+| duration | num | 分P持续时间 | 单位为秒 |
+| vid | str | 站外视频vid | 仅站外视频有效 |
+| weblink | str | 站外视频跳转url | 仅站外视频有效 |
+| dimension | obj | 当前分P分辨率 | 部分较老视频无分辨率值 |
+
+`pages`数组中的对象中的`dimension`对象(同`data`中的`dimension`对象):
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------|-----|---------|----------------|
+| width | num | 当前分P 宽度 | |
+| height | num | 当前分P 高度 | |
+| rotate | num | 是否将宽高对换 | 0:正常 1:对换 |
+
+`subtitle`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------------|-------|----------|-----|
+| allow_submit | bool | 是否允许提交字幕 | |
+| list | array | 字幕列表 | 未登录为空 |
+
+`subtitle`对象中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|---------|-----|
+| 0 | obj | 字幕1 | |
+| n | obj | 字幕(n+1) | |
+| …… | obj | …… | …… |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------------|------|---------------|-----|
+| id | num | 字幕id | |
+| lan | str | 字幕语言 | |
+| lan_doc | str | 字幕语言名称 | |
+| is_lock | bool | 是否锁定 | |
+| author_mid | num | 字幕上传者mid | |
+| subtitle_url | str | json格式字幕文件url | |
+| author | obj | 字幕上传者信息 | |
+
+`list`数组中的对象中的`author`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-----------------|-----|------------|--------|
+| mid | num | 字幕上传者mid | |
+| name | str | 字幕上传者昵称 | |
+| sex | str | 字幕上传者性别 | 男 女 保密 |
+| face | str | 字幕上传者头像url | |
+| sign | str | 字幕上传者签名 | |
+| rank | num | 10000 | 作用尚不明确 |
+| birthday | num | 0 | 作用尚不明确 |
+| is_fake_account | num | 0 | 作用尚不明确 |
+| is_deleted | num | 0 | 作用尚不明确 |
+
+`staff`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|-----------|-----|
+| 0 | obj | 合作成员1 | |
+| n | obj | 合作成员(n+1) | |
+| …… | obj | …… | …… |
+
+`staff`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|----------|-----|---------|-----|
+| mid | num | 成员mid | |
+| title | str | 成员名称 | |
+| name | str | 成员昵称 | |
+| face | str | 成员头像url | |
+| vip | obj | 成员大会员状态 | |
+| official | obj | 成员认证信息 | |
+| follower | num | 成员粉丝数 | |
+| label_style | num | | |
+
+`staff`数组中的对象中的`vip`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------------|-----|--------|---------------------------|
+| type | num | 成员会员类型 | 0:无 1:月会员 2:年会员 |
+| status | num | 会员状态 | 0:无 1:有 |
+| due_date | num | 到期时间 | UNIX 毫秒时间戳 |
+| vip_pay_type | num | | |
+| theme_type | num | 0 | |
+| label | obj | | |
+
+`staff`数组中的对象中的`official`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------|-----|--------|---------------------------------------|
+| role | num | 成员认证级别 | 见[用户认证类型一览](../user/official_role.md) |
+| title | str | 成员认证名 | 无为空 |
+| desc | str | 成员认证备注 | 无为空 |
+| type | num | 成员认证类型 | -1:无 0:有 |
+
+`data`中的`user_garb`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------------|-----|-------|-----|
+| url_image_ani_cut | str | 某url? | |
+
+`data`中的`honor_reply`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------|-------|-----|-----|
+| honor | array | | |
+
+`honor`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|----------------------|-----|-------------------------------------|-----|
+| aid | num | 当前稿件aid | |
+| type | num | 1:入站必刷收录 2:第?期每周必看 3:全站排行榜最高第?名 4:热门 | |
+| desc | num | 描述 | |
+| weekly_recommend_num | num | | |
+
+**示例:**
+
+获取视频`av85440373`/`BV117411r7R1`的基本信息
+
+avid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/view' \
+--data-urlencode 'aid=85440373'
+```
+
+bvid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/view' \
+--data-urlencode 'bvid=BV117411r7R1'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "bvid": "BV117411r7R1",
+ "aid": 85440373,
+ "videos": 1,
+ "tid": 28,
+ "tid_v2": 2061,
+ "tname": "原创音乐",
+ "tname_v2": "人力VOCALOID",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/ea0dd34bf41e23a68175680a00e3358cd249105f.jpg",
+ "title": "当我给拜年祭的快板加了电音配乐…",
+ "pubdate": 1580377255,
+ "ctime": 1580212263,
+ "desc": "【CB想说的】看完拜年祭之后最爱的一个节目!给有快板的部分简单加了一些不同风格的配乐hhh,感谢沃玛画的我!太可爱了哈哈哈哈哈哈哈!!!\n【Warma想说的】我画了打碟的CB,画风为了还原原版视频所以参考了四迹老师的画风,四迹老师的画真的太可爱啦!不过其实在画的过程中我遇到了一个问题,CB的耳机……到底是戴在哪个耳朵上呢?\n\n原版:av78977080\n编曲(配乐):Crazy Bucket\n人声(配音):Warma/谢拉\n曲绘:四迹/Warma\n动画:四迹/Crazy Bucket\n剧本:Mokurei-木灵君\n音频后期:DMYoung/纳兰寻风/Crazy Bucket\n包装:破晓天",
+ "desc_v2": [
+ {
+ "raw_text": "【CB想说的】看完拜年祭之后最爱的一个节目!给有快板的部分简单加了一些不同风格的配乐hhh,感谢沃玛画的我!太可爱了哈哈哈哈哈哈哈!!!\n【Warma想说的】我画了打碟的CB,画风为了还原原版视频所以参考了四迹老师的画风,四迹老师的画真的太可爱啦!不过其实在画的过程中我遇到了一个问题,CB的耳机……到底是戴在哪个耳朵上呢?\n\n原版:av78977080\n编曲(配乐):Crazy Bucket\n人声(配音):Warma/谢拉\n曲绘:四迹/Warma\n动画:四迹/Crazy Bucket\n剧本:Mokurei-木灵君\n音频后期:DMYoung/纳兰寻风/Crazy Bucket\n包装:破晓天",
+ "type": 1,
+ "biz_id": 0
+ }
+ ],
+ "state": 0,
+ "duration": 486,
+ "mission_id": 11838,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 1,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 1,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "clean_mode": 0,
+ "is_stein_gate": 0,
+ "is_360": 0,
+ "no_share": 0,
+ "arc_pay": 0,
+ "free_watch": 0
+ },
+ "owner": {
+ "mid": 66606350,
+ "name": "陈楒潼桶桶桶",
+ "face": "https://i2.hdslb.com/bfs/face/c9af3b32cf74baec5a4b65af8ca18ae5ff571f77.jpg"
+ },
+ "stat": {
+ "aid": 85440373,
+ "view": 2404179,
+ "danmaku": 12348,
+ "reply": 2676,
+ "favorite": 58329,
+ "coin": 72793,
+ "share": 9620,
+ "now_rank": 0,
+ "his_rank": 55,
+ "like": 161270,
+ "dislike": 0,
+ "evaluation": "",
+ "vt": 0
+ },
+ "argue_info": {
+ "argue_msg": "",
+ "argue_type": 0,
+ "argue_link": ""
+ },
+ "dynamic": "进来就出不去了!!!\n#全民音乐UP主##CB##warma##电音##快板##拜年祭##诸神的奥运##编曲##Remix#",
+ "cid": 146044693,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "premiere": null,
+ "teenage_mode": 0,
+ "is_chargeable_season": false,
+ "is_story": false,
+ "is_upower_exclusive": false,
+ "is_upower_play": false,
+ "is_upower_preview": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "is_upower_exclusive_with_qa": false,
+ "no_cache": false,
+ "pages": [
+ {
+ "cid": 146044693,
+ "page": 1,
+ "from": "vupload",
+ "part": "建议改成:建议改成:诸 神 的 电 音 节(不是)",
+ "duration": 486,
+ "vid": "",
+ "weblink": "",
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "ctime": 1580212263
+ }
+ ],
+ "subtitle": {
+ "allow_submit": false,
+ "list": [
+ {
+ "id": 1061981378473779968,
+ "lan": "ai-zh",
+ "lan_doc": "中文(自动生成)",
+ "is_lock": false,
+ "subtitle_url": "",
+ "type": 1,
+ "id_str": "1061981378473779968",
+ "ai_type": 0,
+ "ai_status": 2,
+ "author": {
+ "mid": 0,
+ "name": "",
+ "sex": "",
+ "face": "",
+ "sign": "",
+ "rank": 0,
+ "birthday": 0,
+ "is_fake_account": 0,
+ "is_deleted": 0,
+ "in_reg_audit": 0,
+ "is_senior_member": 0,
+ "name_render": null
+ }
+ }
+ ]
+ },
+ "staff": [
+ {
+ "mid": 66606350,
+ "title": "UP主",
+ "name": "陈楒潼桶桶桶",
+ "face": "https://i2.hdslb.com/bfs/face/c9af3b32cf74baec5a4b65af8ca18ae5ff571f77.jpg",
+ "vip": {
+ "type": 2,
+ "status": 1,
+ "due_date": 1769443200000,
+ "vip_pay_type": 1,
+ "theme_type": 0,
+ "label": {
+ "path": "",
+ "text": "年度大会员",
+ "label_theme": "annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": "",
+ "use_img_label": true,
+ "img_label_uri_hans": "",
+ "img_label_uri_hant": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png"
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "avatar_subscript_url": "",
+ "tv_vip_status": 0,
+ "tv_vip_pay_type": 0,
+ "tv_due_date": 0,
+ "avatar_icon": {
+ "icon_type": 1,
+ "icon_resource": {}
+ }
+ },
+ "official": {
+ "role": 1,
+ "title": "bilibili 知名音乐UP主",
+ "desc": "",
+ "type": 0
+ },
+ "follower": 616428,
+ "label_style": 0
+ },
+ {
+ "mid": 53456,
+ "title": "曲绘",
+ "name": "Warma",
+ "face": "https://i2.hdslb.com/bfs/face/87c0b7e4d3eedf04c458a82b9271013beaa4bc59.jpg",
+ "vip": {
+ "type": 2,
+ "status": 1,
+ "due_date": 1770480000000,
+ "vip_pay_type": 0,
+ "theme_type": 0,
+ "label": {
+ "path": "",
+ "text": "年度大会员",
+ "label_theme": "annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": "",
+ "use_img_label": true,
+ "img_label_uri_hans": "https://i0.hdslb.com/bfs/activity-plat/static/20220608/e369244d0b14644f5e1a06431e22a4d5/0DFy9BHgwE.gif",
+ "img_label_uri_hant": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d7e624d13d3e134251e4174a7318c19a8edbd71.png",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/uckjAv3Npy.png"
+ },
+ "avatar_subscript": 1,
+ "nickname_color": "#FB7299",
+ "role": 3,
+ "avatar_subscript_url": "",
+ "tv_vip_status": 1,
+ "tv_vip_pay_type": 1,
+ "tv_due_date": 1753286400,
+ "avatar_icon": {
+ "icon_type": 1,
+ "icon_resource": {}
+ }
+ },
+ "official": {
+ "role": 1,
+ "title": "bilibili 知名UP主",
+ "desc": "",
+ "type": 0
+ },
+ "follower": 4818052,
+ "label_style": 0
+ }
+ ],
+ "is_season_display": false,
+ "user_garb": {
+ "url_image_ani_cut": "https://i0.hdslb.com/bfs/garb/item/e4c1c34e8b87fc05a893ed4a04ad322f75edbed9.bin"
+ },
+ "honor_reply": {
+ "honor": [
+ {
+ "aid": 85440373,
+ "type": 2,
+ "desc": "第45期每周必看",
+ "weekly_recommend_num": 45
+ },
+ {
+ "aid": 85440373,
+ "type": 3,
+ "desc": "全站排行榜最高第55名",
+ "weekly_recommend_num": 0
+ },
+ {
+ "aid": 85440373,
+ "type": 4,
+ "desc": "热门",
+ "weekly_recommend_num": 0
+ },
+ {
+ "aid": 85440373,
+ "type": 7,
+ "desc": "热门收录",
+ "weekly_recommend_num": 0
+ }
+ ]
+ },
+ "like_icon": "",
+ "need_jump_bv": false,
+ "disable_show_up_info": false,
+ "is_story_play": 1,
+ "is_view_self": false
+ }
+}
+```
+
+
+
+视频标题为:`当我给拜年祭的快板加了电音配乐…`
+
+视频分区为:`tid=28(音乐->原创音乐)`
+
+视频时长:`486s`
+
+视频发布时间:`2020/1/30 17:40:55`
+
+视频投稿时间:`2020/1/28 19:51:3`
+
+视频分P为:`1`
+
+视频类型为:`1(原创)`
+
+视频UP主为:`66606350(Crazy_Bucket_陈楒潼)`
+
+视频简介为:
+
+`【CB想说的】看完拜年祭之后最爱的一个节目!给有快板的部分简单加了一些不同风格的配乐hhh,感谢沃玛画的我!太可爱了哈哈哈哈哈哈哈!!!\n【Warma想说的】我画了打碟的CB,画风为了还原原版视频所以参考了四迹老师的画风,四迹老师的画真的太可爱啦!不过其实在画的过程中我遇到了一个问题,CB的耳机……到底是戴在哪个耳朵上呢?\n\n原版:av78977080\n编曲(配乐):Crazy Bucket\n人声(配音):Warma/谢拉\n曲绘:四迹/Warma\n动画:四迹/Crazy Bucket\n剧本:Mokurei-木灵君\n音频后期:DMYoung/纳兰寻风/Crazy Bucket\n包装:破晓天`
+
+视频状态为:`0(开放浏览)`
+
+视频属性为: `显示“禁止转载“标志`、`高清`、`禁止其他人添加TAG`、`联合投稿视频`
+
+视频封面为:
+
+https://i1.hdslb.com/bfs/archive/ea0dd34bf41e23a68175680a00e3358cd249105f.jpg
+
+
+
+## 获取视频超详细信息(web端)
+
+> https://api.bilibili.com/x/web-interface/view/detail
+
+> https://api.bilibili.com/x/web-interface/wbi/view/detail
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:[Wbi 签名](../misc/sign/wbi.md)
+
+限制游客访问的视频需要登录
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| --------- | ---- | -------------------- | ---------- | ------------------ |
+| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
+| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
+| need_elec | num | 是否获取UP主充电信息 | 非必要 | 0:否 1:是 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -400:请求错误 -403:权限不足 -404:无视频 62002:稿件不可见 62004:稿件审核中 62012:仅UP主自己可见 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ----- | ---------------- | ------------ |
+| View | obj | 视频基本信息 | |
+| Card | obj | 视频UP主信息 | |
+| Tags | array | 视频TAG信息 | |
+| Reply | obj | 视频热评信息 | |
+| Related | array | 推荐视频信息 | |
+| Spec | null | ? | 作用尚不明确 |
+| hot_share | obj | ? | 作用尚不明确 |
+| elec | 有效时:obj 无效时:null | 充电信息 | 当请求参数 `need_elec=1` 且有充电信息时有效 |
+| recommend | null | ? | 作用尚不明确 |
+| emergency | obj | 视频操作按钮信息 | |
+| view_addit | obj | ? | 作用尚不明确 |
+| guide | null | ? | 作用尚不明确 |
+| query_tags | null | ? | 作用尚不明确 |
+| participle | array | 分词信息 | 用于推荐 |
+| module_ctrl | null | ? | 作用尚不明确 |
+| replace_recommend | bool | ? | 作用尚不明确 |
+
+`data`中的`View`对象:
+
+基本同「[获取视频详细信息(web端)](#获取视频详细信息web端)」中的data对象
+
+`data`中的`Card`对象:
+
+基本同「[用户名片信息](../user/info.md#用户名片信息)」中的data对象
+
+`data`中的`Tags`数组:
+
+基本同「[获取视频TAG信息(新)](tags.md#获取视频TAG信息新)」中的data数组
+
+`data`中的`Reply`对象:
+
+基本同「[获取评论区热评](../comment/list.md#获取评论区热评)」中的data对象
+
+`data`中的`Related`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|-----------|-----|
+| 0 | obj | 推荐视频1 | |
+| n | obj | 推荐视频(n+1) | |
+| …… | obj | …… | …… |
+
+`Related`数组中的对象:
+
+基本同「[获取视频详细信息(web端)](#获取视频详细信息web端)」中的data对象,已知部分字段有差异,如没有分P信息
+
+`data`中的`hot_share`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------|-------|-------|--------|
+| show | bool | false | 作用尚不明确 |
+| list | array | 空 | 作用尚不明确 |
+
+`data`中的`elec`对象:
+
+基本同「[获取视频充电鸣谢名单](../electric/charge_list.md#获取视频充电鸣谢名单)」中的data对象
+
+`data`中的`emergency`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ------------------ | -------- |
+| no_like | bool | 是否不显示点赞按钮 | |
+| no_coin | bool | 是否不显示投币按钮 | |
+| no_fav | bool | 是否不显示收藏按钮 | |
+| no_share | bool | 是否不显示分享按钮 | |
+
+`data`中的`view_addit`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------------- | ------------ |
+| 63 | bool | 是否不显示直播推荐 | |
+| 64 | bool | 是否不显示活动推荐 | |
+| 69 | bool | ? | 作用尚不明确 |
+| 71 | bool | 是否不显示标签与笔记 | |
+| 72 | bool | ? | 作用尚不明确 |
+
+**示例:**
+
+获取视频`av170001`/`BV17x411w7KC`的详细信息
+
+avid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/view/detail' \
+--data-urlencode 'aid=170001' \
+--data-urlencode 'need_elec=1'
+```
+
+bvid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/view/detail' \
+--data-urlencode 'bvid=BV17x411w7KC' \
+--data-urlencode 'need_elec=1'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "View": {
+ "bvid": "BV17x411w7KC",
+ "aid": 170001,
+ "videos": 10,
+ "tid": 193,
+ "tid_v2": 2017,
+ "tname": "MV",
+ "tname_v2": "MV",
+ "copyright": 2,
+ "pic": "http://i2.hdslb.com/bfs/archive/1ada8c32a9d168e4b2ee3e010f24789ba3353785.jpg",
+ "title": "【MV】保加利亚妖王AZIS视频合辑",
+ "pubdate": 1320850533,
+ "ctime": 1497380562,
+ "desc": "sina 保加利亚超级天王 Azis1999年出道。他的音乐融合保加利亚名族曲风chalga和pop、rap等元素,不过他惊艳的易装秀与浮夸的角色诠释才是他最为出名的地方 Azis与众多保加利亚天王天后级歌手都有过合作.06年,他作为Mariana Popova的伴唱,在欧洲半决赛上演唱了他们的参赛曲Let Me Cry 06年他被Velikite Balgari评为保加利亚有史以来最伟大的名人之一",
+ "desc_v2": [
+ {
+ "raw_text": "sina 保加利亚超级天王 Azis1999年出道。他的音乐融合保加利亚名族曲风chalga和pop、rap等元素,不过他惊艳的易装秀与浮夸的角色诠释才是他最为出名的地方 Azis与众多保加利亚天王天后级歌手都有过合作.06年,他作为Mariana Popova的伴唱,在欧洲半决赛上演唱了他们的参赛曲Let Me Cry 06年他被Velikite Balgari评为保加利亚有史以来最伟大的名人之一",
+ "type": 1,
+ "biz_id": 0
+ }
+ ],
+ "state": 0,
+ "duration": 2412,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 1,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "clean_mode": 0,
+ "is_stein_gate": 0,
+ "is_360": 0,
+ "no_share": 0,
+ "arc_pay": 0,
+ "free_watch": 0
+ },
+ "owner": {
+ "mid": 122541,
+ "name": "冰封.虾子",
+ "face": "http://i0.hdslb.com/bfs/face/40c46ee74dd6ea33d46c38cd6083e6a1286aa482.gif"
+ },
+ "stat": {
+ "aid": 170001,
+ "view": 45252521,
+ "danmaku": 914336,
+ "reply": 184686,
+ "favorite": 883733,
+ "coin": 291585,
+ "share": 12779204,
+ "now_rank": 0,
+ "his_rank": 13,
+ "like": 928358,
+ "dislike": 0,
+ "evaluation": "",
+ "vt": 0
+ },
+ "argue_info": {
+ "argue_msg": "",
+ "argue_type": 0,
+ "argue_link": ""
+ },
+ "dynamic": "",
+ "cid": 279786,
+ "dimension": {
+ "width": 512,
+ "height": 288,
+ "rotate": 0
+ },
+ "premiere": null,
+ "teenage_mode": 0,
+ "is_chargeable_season": false,
+ "is_story": false,
+ "is_upower_exclusive": false,
+ "is_upower_play": false,
+ "is_upower_preview": false,
+ "enable_vt": 0,
+ "vt_display": "",
+ "is_upower_exclusive_with_qa": false,
+ "no_cache": false,
+ "pages": [
+ {
+ "cid": 279786,
+ "page": 1,
+ "from": "vupload",
+ "part": "Хоп",
+ "duration": 199,
+ "vid": "",
+ "weblink": "",
+ "dimension": {
+ "width": 512,
+ "height": 288,
+ "rotate": 0
+ },
+ "ctime": 1497380562
+ },
+ {
+ "cid": 275431,
+ "page": 2,
+ "from": "vupload",
+ "part": "Imash li surce",
+ "duration": 205,
+ "vid": "",
+ "weblink": "",
+ "dimension": {
+ "width": 640,
+ "height": 360,
+ "rotate": 0
+ },
+ "ctime": 1497380562
+ },
+ {
+ "cid": 279787,
+ "page": 3,
+ "from": "vupload",
+ "part": "No Kazvam Ti Stiga",
+ "duration": 308,
+ "vid": "",
+ "weblink": "",
+ "dimension": {
+ "width": 432,
+ "height": 324,
+ "rotate": 0
+ },
+ "ctime": 1497380562
+ },
+ {
+ "cid": 280467,
+ "page": 4,
+ "from": "vupload",
+ "part": "Samo za teb",
+ "duration": 273,
+ "vid": "",
+ "weblink": "",
+ "dimension": {
+ "width": 360,
+ "height": 288,
+ "rotate": 0
+ },
+ "ctime": 1497380562
+ },
+ {
+ "cid": 280468,
+ "page": 5,
+ "from": "vupload",
+ "part": "Tochno sega",
+ "duration": 241,
+ "vid": "",
+ "weblink": "",
+ "dimension": {
+ "width": 584,
+ "height": 360,
+ "rotate": 0
+ },
+ "ctime": 1497380562
+ },
+ {
+ "cid": 280469,
+ "page": 6,
+ "from": "vupload",
+ "part": "Kak boli",
+ "duration": 336,
+ "vid": "",
+ "weblink": "",
+ "dimension": {
+ "width": 384,
+ "height": 288,
+ "rotate": 0
+ },
+ "ctime": 1497380562
+ },
+ {
+ "cid": 274491,
+ "page": 7,
+ "from": "vupload",
+ "part": "Obicham Te",
+ "duration": 250,
+ "vid": "",
+ "weblink": "",
+ "dimension": {
+ "width": 402,
+ "height": 208,
+ "rotate": 0
+ },
+ "ctime": 1497380562
+ },
+ {
+ "cid": 267410,
+ "page": 8,
+ "from": "vupload",
+ "part": "Mrazish",
+ "duration": 201,
+ "vid": "",
+ "weblink": "",
+ "dimension": {
+ "width": 540,
+ "height": 360,
+ "rotate": 0
+ },
+ "ctime": 1497380562
+ },
+ {
+ "cid": 267714,
+ "page": 9,
+ "from": "vupload",
+ "part": "Няма накъде",
+ "duration": 201,
+ "vid": "",
+ "weblink": "",
+ "dimension": {
+ "width": 450,
+ "height": 360,
+ "rotate": 0
+ },
+ "ctime": 1497380562
+ },
+ {
+ "cid": 270380,
+ "page": 10,
+ "from": "vupload",
+ "part": "Gadna poroda",
+ "duration": 198,
+ "vid": "",
+ "weblink": "",
+ "dimension": {
+ "width": 432,
+ "height": 324,
+ "rotate": 0
+ },
+ "ctime": 1497380562
+ }
+ ],
+ "subtitle": {
+ "allow_submit": false,
+ "list": []
+ },
+ "is_season_display": false,
+ "user_garb": {
+ "url_image_ani_cut": "https://i0.hdslb.com/bfs/garb/item/e4c1c34e8b87fc05a893ed4a04ad322f75edbed9.bin"
+ },
+ "honor_reply": {
+ "honor": [
+ {
+ "aid": 170001,
+ "type": 3,
+ "desc": "全站排行榜最高第13名",
+ "weekly_recommend_num": 0
+ }
+ ]
+ },
+ "like_icon": "",
+ "need_jump_bv": false,
+ "disable_show_up_info": false,
+ "is_story_play": 0,
+ "is_view_self": false
+ },
+ "Card": {
+ "card": {
+ "mid": "122541",
+ "name": "冰封.虾子",
+ "approve": false,
+ "sex": "保密",
+ "rank": "10000",
+ "face": "http://i0.hdslb.com/bfs/face/40c46ee74dd6ea33d46c38cd6083e6a1286aa482.gif",
+ "face_nft": 0,
+ "face_nft_type": 0,
+ "DisplayRank": "0",
+ "regtime": 0,
+ "spacesta": 0,
+ "birthday": "",
+ "place": "",
+ "description": "",
+ "article": 0,
+ "attentions": [],
+ "fans": 64052,
+ "friend": 45,
+ "attention": 45,
+ "sign": "路亚钓鱼爱好者交流群411267154",
+ "level_info": {
+ "current_level": 6,
+ "current_min": 0,
+ "current_exp": 0,
+ "next_exp": 0
+ },
+ "pendant": {
+ "pid": 0,
+ "name": "",
+ "image": "",
+ "expire": 0,
+ "image_enhance": "",
+ "image_enhance_frame": "",
+ "n_pid": 0
+ },
+ "nameplate": {
+ "nid": 9,
+ "name": "出道偶像",
+ "image": "https://i0.hdslb.com/bfs/face/3f2d64f048b39fb6c26f3db39df47e6080ec0f9c.png",
+ "image_small": "https://i0.hdslb.com/bfs/face/90c35d41d8a19b19474d6bac672394c17b444ce8.png",
+ "level": "高级勋章",
+ "condition": "所有自制视频总播放数>=50万"
+ },
+ "Official": {
+ "role": 0,
+ "title": "",
+ "desc": "",
+ "type": -1
+ },
+ "official_verify": {
+ "type": -1,
+ "desc": ""
+ },
+ "vip": {
+ "type": 1,
+ "status": 0,
+ "due_date": 1493827200000,
+ "vip_pay_type": 0,
+ "theme_type": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": "",
+ "use_img_label": true,
+ "img_label_uri_hans": "",
+ "img_label_uri_hant": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png"
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "role": 0,
+ "avatar_subscript_url": "",
+ "tv_vip_status": 0,
+ "tv_vip_pay_type": 0,
+ "tv_due_date": 0,
+ "avatar_icon": {
+ "icon_resource": {}
+ },
+ "vipType": 1,
+ "vipStatus": 0
+ },
+ "is_senior_member": 0,
+ "name_render": null
+ },
+ "space": {
+ "s_img": "http://i1.hdslb.com/bfs/activity-plat/static/LRjqHhi0wL.png",
+ "l_img": "http://i1.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png"
+ },
+ "following": false,
+ "archive_count": 382,
+ "article_count": 0,
+ "follower": 64052,
+ "like_num": 1048712
+ },
+ "Tags": [
+ {
+ "tag_id": 0,
+ "tag_name": "发现《Hop》",
+ "music_id": "MA407124762800730394",
+ "tag_type": "bgm",
+ "jump_url": "https://music.bilibili.com/h5/music-detail?music_id=MA407124762800730394&cid=279786&aid=170001&na_close_hide=1"
+ },
+ {
+ "tag_id": 117552,
+ "tag_name": "保加利亚妖王",
+ "music_id": "",
+ "tag_type": "old_channel",
+ "jump_url": ""
+ },
+ {
+ "tag_id": 112503,
+ "tag_name": "保加利亚",
+ "music_id": "",
+ "tag_type": "old_channel",
+ "jump_url": ""
+ },
+ {
+ "tag_id": 2958988,
+ "tag_name": "Азис",
+ "music_id": "",
+ "tag_type": "old_channel",
+ "jump_url": ""
+ },
+ {
+ "tag_id": 2622213,
+ "tag_name": "azis",
+ "music_id": "",
+ "tag_type": "old_channel",
+ "jump_url": ""
+ },
+ {
+ "tag_id": 2512079,
+ "tag_name": "mv",
+ "music_id": "",
+ "tag_type": "old_channel",
+ "jump_url": ""
+ }
+ ],
+ "Reply": {
+ "page": null,
+ "replies": [
+ {
+ "rpid": 1,
+ "oid": 0,
+ "type": 0,
+ "mid": 0,
+ "root": 0,
+ "parent": 0,
+ "dialog": 0,
+ "count": 0,
+ "rcount": 0,
+ "state": 0,
+ "fansgrade": 0,
+ "attr": 0,
+ "ctime": 0,
+ "like": 0,
+ "action": 0,
+ "content": null,
+ "replies": null,
+ "assist": 0,
+ "show_follow": false
+ }
+ ]
+ },
+ "Related": [
+ {
+ "aid": 1252180876,
+ "videos": 1,
+ "tid": 130,
+ "tname": "音乐综合",
+ "copyright": 2,
+ "pic": "http://i2.hdslb.com/bfs/archive/5a4eef19e38a3fa27f9db53cc45e7233e714ae03.jpg",
+ "title": "Ricardo Milos - Dancin song [1080p]",
+ "pubdate": 1711002767,
+ "ctime": 1711002768,
+ "desc": "https://www.youtube.com/watch?v=e9ASqhs9770",
+ "state": 0,
+ "duration": 259,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 477132,
+ "name": "TAKERA",
+ "face": "https://i0.hdslb.com/bfs/face/5af8b319889ba7a7d20ac59edb8464d65f43c1e1.gif"
+ },
+ "stat": {
+ "aid": 1252180876,
+ "view": 1590321,
+ "danmaku": 2766,
+ "reply": 2405,
+ "favorite": 58654,
+ "coin": 13468,
+ "share": 15966,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 144640,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 1590321,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 1483741030,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1hJ4m177RN",
+ "first_frame": "http://i0.hdslb.com/bfs/storyff/n240327ad1t4c11o1bbzfc2bkvg5fkuc_firsti.jpg",
+ "pub_location": "中国香港",
+ "cover43": "",
+ "tidv2": 2036,
+ "tnamev2": "舞蹈综合",
+ "pid_v2": 1004,
+ "pid_name_v2": "舞蹈",
+ "bvid": "BV1hJ4m177RN",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 1252180876,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 80433022,
+ "videos": 1,
+ "tid": 193,
+ "tname": "MV",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/5242750857121e05146d5d5b13a47a2a6dd36e98.jpg",
+ "title": "【官方 MV】Never Gonna Give You Up - Rick Astley",
+ "pubdate": 1577835803,
+ "ctime": 1577835803,
+ "desc": "-",
+ "state": 0,
+ "duration": 213,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 0,
+ "autoplay": 0,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 1,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 486906719,
+ "name": "索尼音乐中国",
+ "face": "https://i2.hdslb.com/bfs/face/6bc95d0670863d36bf9167a37b825c39ce258506.jpg"
+ },
+ "stat": {
+ "aid": 80433022,
+ "view": 91790223,
+ "danmaku": 128050,
+ "reply": 170137,
+ "favorite": 1286326,
+ "coin": 1061915,
+ "share": 396054,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 2464595,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 91790223,
+ "fav_g": 10,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 137649199,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1GJ411x7h7",
+ "up_from_v2": 15,
+ "pub_location": "未知",
+ "cover43": "",
+ "tidv2": 2017,
+ "tnamev2": "MV",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV1GJ411x7h7",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 80433022,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 718913090,
+ "videos": 1,
+ "tid": 27,
+ "tname": "综合",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/6567760d676268e2bf2e2c57486085a31427ed79.jpg",
+ "title": "【咩栗】镇 站 之 宝",
+ "pubdate": 1636448401,
+ "ctime": 1636448403,
+ "desc": "可以关注一下可爱的小羊和小狼呀~\n小羊主页:https://space.bilibili.com/745493\n小狼主页:https://space.bilibili.com/617459493\n⚡️☀️\n微博@电击咩阿栗\n微博@呜米嗷呜\n⚡️☀️\n网易云@咩栗\n网易云@呜米",
+ "state": 0,
+ "duration": 188,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 674421433,
+ "name": "呜米咩栗的草原日常",
+ "face": "https://i1.hdslb.com/bfs/face/5566e3a4786959527a72545f908b5664693a2945.jpg"
+ },
+ "stat": {
+ "aid": 718913090,
+ "view": 315224,
+ "danmaku": 195,
+ "reply": 462,
+ "favorite": 2897,
+ "coin": 702,
+ "share": 202,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 15615,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 315224,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "咩栗,不可以。",
+ "cid": 436835160,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV14Q4y1S7HU",
+ "first_frame": "http://i0.hdslb.com/bfs/storyff/n211105a23d8ue6bh0m1ed1cu6yztac5_firsti.jpg",
+ "cover43": "",
+ "tidv2": 2047,
+ "tnamev2": "虚拟UP主",
+ "pid_v2": 1005,
+ "pid_name_v2": "二次元",
+ "bvid": "BV14Q4y1S7HU",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 718913090,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 895258574,
+ "videos": 2,
+ "tid": 130,
+ "tname": "音乐综合",
+ "copyright": 2,
+ "pic": "http://i2.hdslb.com/bfs/archive/b94b8be43cd0a9a12bf1a334541b017a3bd24cb6.jpg",
+ "title": "【全弹幕】av10388 武器A",
+ "pubdate": 1648906567,
+ "ctime": 1648906567,
+ "desc": "sm9307581\n武器A\n[日常]UP主:博丽·灵梦(UID:13308)\n播放:1605344 | 收藏:20926 | 弹幕:42522\n投稿时间:2010/06/20 10:13\n啊哈哈哈,啊哈哈,啊哈,啊……总之就是武器……",
+ "state": 0,
+ "duration": 144,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 104657830,
+ "name": "尚宜鼎MEMZ",
+ "face": "https://i1.hdslb.com/bfs/face/6761798442c6e9607c62803ac4fa5fe4a3e7b25b.jpg"
+ },
+ "stat": {
+ "aid": 895258574,
+ "view": 3769820,
+ "danmaku": 22377,
+ "reply": 2776,
+ "favorite": 12271,
+ "coin": 484,
+ "share": 3748,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 47622,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 3769820,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 1491314436,
+ "dimension": {
+ "width": 2848,
+ "height": 1600,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1NP4y1K7Ze",
+ "first_frame": "http://i0.hdslb.com/bfs/storyff/n240402sa2muwqb7q7sbvedoskth1279_firsti.jpg",
+ "pub_location": "广东",
+ "cover43": "",
+ "tidv2": 2041,
+ "tnamev2": "动漫剪辑",
+ "pid_v2": 1005,
+ "pid_name_v2": "二次元",
+ "bvid": "BV1NP4y1K7Ze",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 895258574,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 56927206,
+ "videos": 1,
+ "tid": 138,
+ "tname": "搞笑",
+ "copyright": 2,
+ "pic": "http://i2.hdslb.com/bfs/archive/fd8324a72f0c6629f6d9b6af0daa11d950863993.jpg",
+ "title": "【每天一遍,网抑再见】万恶之源,抖就完事了",
+ "pubdate": 1561555314,
+ "ctime": 1561555314,
+ "desc": "【带字幕版】本人亲自翻译\nBGM:coincidance \n有些人看着看着就抖起来了,别说了,护士姐姐真漂亮\nhttps://www.youtube.com/watch?v=nBHkIWAJitg&feature=share\n肩膀好了,就来摇头吧\nav65659850",
+ "state": 0,
+ "duration": 139,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 34232005,
+ "name": "200斤的五条艾",
+ "face": "https://i1.hdslb.com/bfs/face/5135289ba858105ae466429ba9610e7980cf73f0.jpg"
+ },
+ "stat": {
+ "aid": 56927206,
+ "view": 43534329,
+ "danmaku": 77687,
+ "reply": 19894,
+ "favorite": 1584517,
+ "coin": 721148,
+ "share": 563420,
+ "now_rank": 0,
+ "his_rank": 15,
+ "like": 2118557,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 43534329,
+ "fav_g": 3,
+ "like_g": 0
+ },
+ "dynamic": "#沙雕##搞笑视频##魔性#",
+ "cid": 99428737,
+ "dimension": {
+ "width": 960,
+ "height": 720,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1Ax411d7jD",
+ "up_from_v2": 11,
+ "cover43": "",
+ "tidv2": 2059,
+ "tnamev2": "鬼畜调教",
+ "pid_v2": 1007,
+ "pid_name_v2": "鬼畜",
+ "bvid": "BV1Ax411d7jD",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 56927206,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 3643130,
+ "videos": 1,
+ "tid": 138,
+ "tname": "搞笑",
+ "copyright": 2,
+ "pic": "http://i1.hdslb.com/bfs/archive/bc23ac6f17c82700d5c1941e0991bc8a6fcbd46c.png",
+ "title": "金坷垃原版",
+ "pubdate": 1453518942,
+ "ctime": 1497431869,
+ "desc": "http://v.youku.com/v_show/id_XNTkzMDUxNzI0.html?from=y1.2-1-102.3.1-1.1-1-1-0-0#paction 给知道金坷垃的孩子们补补课",
+ "state": 0,
+ "duration": 101,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 11374676,
+ "name": "LX秦先生",
+ "face": "https://i2.hdslb.com/bfs/face/90a808cdd9414d5f53e04d85b8929333eb61f474.jpg"
+ },
+ "stat": {
+ "aid": 3643130,
+ "view": 11110768,
+ "danmaku": 29385,
+ "reply": 7168,
+ "favorite": 287656,
+ "coin": 61435,
+ "share": 190334,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 379164,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 11110768,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 5827830,
+ "dimension": {
+ "width": 640,
+ "height": 354,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1Rs411R7Hi",
+ "cover43": "",
+ "tidv2": 2059,
+ "tnamev2": "鬼畜调教",
+ "pid_v2": 1007,
+ "pid_name_v2": "鬼畜",
+ "bvid": "BV1Rs411R7Hi",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 3643130,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 1601123876,
+ "videos": 1,
+ "tid": 130,
+ "tname": "音乐综合",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/bc7442c6c54ef573ebe0455104ad87703703fad5.jpg",
+ "title": "「保加利亚妖王」Hop - Azis 阿吉斯 百万级装备试听【Hi-Res】",
+ "pubdate": 1709023713,
+ "ctime": 1709023713,
+ "desc": "作词 : Azis\n作曲 : Azis\n\n\n\n音响:天朗皇家西敏寺\n功放:麦景图 \n录音MIC:纽曼149 \n录音设备:SSL+ Protools",
+ "state": 0,
+ "duration": 189,
+ "mission_id": 4009709,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 440121192,
+ "name": "JLRS日落fm",
+ "face": "https://i0.hdslb.com/bfs/face/008f2cf802f48e1d7f837887a3cefd95b918a0e5.jpg"
+ },
+ "stat": {
+ "aid": 1601123876,
+ "view": 549485,
+ "danmaku": 1576,
+ "reply": 1569,
+ "favorite": 7872,
+ "coin": 5056,
+ "share": 4117,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 22458,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 549485,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "还记得这位妖王吗?",
+ "cid": 1452568619,
+ "dimension": {
+ "width": 3840,
+ "height": 2160,
+ "rotate": 0
+ },
+ "season_id": 4499678,
+ "short_link_v2": "https://b23.tv/BV1e1421f7rA",
+ "first_frame": "http://i2.hdslb.com/bfs/storyff/n240227sauzmn6l1y49t5cjnklc5tyvk_firsti.jpg",
+ "pub_location": "吉林",
+ "cover43": "",
+ "tidv2": 2024,
+ "tnamev2": "电台·歌单",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV1e1421f7rA",
+ "season_type": 1,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 1601123876,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 1581914,
+ "videos": 1,
+ "tid": 130,
+ "tname": "音乐综合",
+ "copyright": 2,
+ "pic": "http://i2.hdslb.com/bfs/archive/7437f19df1061f4a9cd2972b81dbd3a6723bf74c.jpg",
+ "title": "妖王都开始男人了,怎么办!",
+ "pubdate": 1412259320,
+ "ctime": 1497428704,
+ "desc": "音悦台 保加利亚妖男Azis /Азис携手流行男歌手Giorgos Tsalikis/Тсаликис 最新单曲 Estar Loco /Полудяваме\n纯爷们,男人就该干男人,该干的事。",
+ "state": 0,
+ "duration": 227,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 4685783,
+ "name": "FoolishJoker",
+ "face": "https://i2.hdslb.com/bfs/face/a81786a76af0cbd6d7e35adc488ccc22b0030d72.jpg"
+ },
+ "stat": {
+ "aid": 1581914,
+ "view": 2303678,
+ "danmaku": 5815,
+ "reply": 6856,
+ "favorite": 28958,
+ "coin": 5696,
+ "share": 14014,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 24255,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 2303678,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 2403522,
+ "dimension": {
+ "width": 640,
+ "height": 360,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1gx411P77L",
+ "up_from_v2": 8,
+ "cover43": "",
+ "tidv2": 2027,
+ "tnamev2": "音乐综合",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV1gx411P77L",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 1581914,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 31130726,
+ "videos": 1,
+ "tid": 130,
+ "tname": "音乐综合",
+ "copyright": 2,
+ "pic": "http://i0.hdslb.com/bfs/archive/e9755c62c5a38ec352e424aa0d7d20417c1a3fde.jpg",
+ "title": "PPAP原版完整视频",
+ "pubdate": 1536122369,
+ "ctime": 1536122367,
+ "desc": "视频时长令强迫症不爽(我故意的)",
+ "state": 0,
+ "duration": 121,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 180305935,
+ "name": "不懂事的记忆",
+ "face": "https://i1.hdslb.com/bfs/face/7c1510f2fc8911cf885c9b14a94a99db738813c2.jpg"
+ },
+ "stat": {
+ "aid": 31130726,
+ "view": 3810989,
+ "danmaku": 5269,
+ "reply": 2587,
+ "favorite": 76845,
+ "coin": 7721,
+ "share": 21117,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 122042,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 3810989,
+ "fav_g": 8,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 54379754,
+ "dimension": {
+ "width": 640,
+ "height": 360,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1BW411Z7J3",
+ "up_from_v2": 8,
+ "cover43": "",
+ "tidv2": 2027,
+ "tnamev2": "音乐综合",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV1BW411Z7J3",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 31130726,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 675490509,
+ "videos": 1,
+ "tid": 138,
+ "tname": "搞笑",
+ "copyright": 2,
+ "pic": "http://i1.hdslb.com/bfs/archive/58f8f3c8dfcf3b1ac6cf7a7b0eda660aa2e1e1fc.jpg",
+ "title": "奥地利美术生就业经历",
+ "pubdate": 1631273645,
+ "ctime": 1631272999,
+ "desc": "https://m.youtube.com/watch?v=h7s410TPnWg",
+ "state": 0,
+ "duration": 128,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 489656132,
+ "name": "古米廖夫",
+ "face": "https://i2.hdslb.com/bfs/face/633ed3ba1ec5bcde5db105849c2498b03f6b7eee.jpg"
+ },
+ "stat": {
+ "aid": 675490509,
+ "view": 40823108,
+ "danmaku": 48676,
+ "reply": 12360,
+ "favorite": 952804,
+ "coin": 557605,
+ "share": 256173,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 1531015,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 40823108,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 405970117,
+ "dimension": {
+ "width": 1280,
+ "height": 720,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1jU4y1N7vg",
+ "up_from_v2": 35,
+ "first_frame": "http://i1.hdslb.com/bfs/storyff/n210910a2u7yjx97xzec435kyzziyn8s_firsti.jpg",
+ "pub_location": "黑龙江",
+ "cover43": "",
+ "tidv2": 2060,
+ "tnamev2": "鬼畜剧场",
+ "pid_v2": 1007,
+ "pid_name_v2": "鬼畜",
+ "bvid": "BV1jU4y1N7vg",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 675490509,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 44501,
+ "videos": 1,
+ "tid": 26,
+ "tname": "音MAD",
+ "copyright": 2,
+ "pic": "http://i0.hdslb.com/bfs/archive/1dff881735a73cdc4757237e45eff03d42c81137.jpg",
+ "title": "久本雅美の頭がカービィのBGMに合わせて爆発したようです",
+ "pubdate": 1293118092,
+ "ctime": 1497366357,
+ "desc": "sm6999999 恭请四代御本尊様,45秒后大量召唤三色弹幕,顺带头像同步测试┗(^o^ )┓",
+ "state": 0,
+ "duration": 72,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 59948,
+ "name": "高興帝",
+ "face": "http://i2.hdslb.com/bfs/face/68a4fb8cf9442f0db277d58a9dbccbf02eacdad4.jpg"
+ },
+ "stat": {
+ "aid": 44501,
+ "view": 2450853,
+ "danmaku": 16774,
+ "reply": 5627,
+ "favorite": 25342,
+ "coin": 3316,
+ "share": 3531,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 47552,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 2450853,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 74884,
+ "dimension": {
+ "width": 480,
+ "height": 360,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1Bx411c7NF",
+ "cover43": "",
+ "tidv2": 2062,
+ "tnamev2": "音MAD",
+ "pid_v2": 1007,
+ "pid_name_v2": "鬼畜",
+ "bvid": "BV1Bx411c7NF",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 44501,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 1706416465,
+ "videos": 1,
+ "tid": 193,
+ "tname": "MV",
+ "copyright": 2,
+ "pic": "http://i2.hdslb.com/bfs/archive/2365889cfca6e33566104487604138906a610c59.jpg",
+ "title": "【4K珍藏】诈骗神曲《Never Gonna Give You Up》!愿者上钩!",
+ "pubdate": 1723457882,
+ "ctime": 1723042776,
+ "desc": "《Never Gonna Give You Up》这首歌曲发行于1987年11月16日。这首歌曲由Rick Astley演唱,并收录于他的专辑《Whenever You Need Somebody》中。",
+ "state": 0,
+ "duration": 213,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 2043250564,
+ "name": "4K音乐馆",
+ "face": "https://i1.hdslb.com/bfs/face/4be964615e70e18ab469e4403cb0fa320f8d2fdc.jpg"
+ },
+ "stat": {
+ "aid": 1706416465,
+ "view": 1001774,
+ "danmaku": 1150,
+ "reply": 1204,
+ "favorite": 20440,
+ "coin": 2354,
+ "share": 12072,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 28749,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 1001774,
+ "fav_g": 38,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 1641702404,
+ "dimension": {
+ "width": 3840,
+ "height": 2160,
+ "rotate": 0
+ },
+ "season_id": 257515,
+ "short_link_v2": "https://b23.tv/BV1UT42167xb",
+ "first_frame": "http://i1.hdslb.com/bfs/storyff/n240807sa3h3ta5x4y8t48d3i1ld43yn_firsti.jpg",
+ "pub_location": "山东",
+ "cover43": "",
+ "tidv2": 2017,
+ "tnamev2": "MV",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV1UT42167xb",
+ "season_type": 1,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 1706416465,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 70025529,
+ "videos": 1,
+ "tid": 130,
+ "tname": "音乐综合",
+ "copyright": 2,
+ "pic": "http://i0.hdslb.com/bfs/archive/49948624e5b18fda60ec255eeffe9fb86e2a73a0.jpg",
+ "title": "大悲咒(高品质珍藏版)",
+ "pubdate": 1570435422,
+ "ctime": 1570183927,
+ "desc": "净化心情,佛祖保佑,大吉大利!!!",
+ "state": 0,
+ "duration": 1792,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 362819520,
+ "name": "抹茶牛油果",
+ "face": "http://i0.hdslb.com/bfs/face/3b2571027baef2a954c2fc1b5473ed609ef00fb3.jpg"
+ },
+ "stat": {
+ "aid": 70025529,
+ "view": 15194194,
+ "danmaku": 126652,
+ "reply": 36609,
+ "favorite": 447623,
+ "coin": 115299,
+ "share": 201225,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 432430,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 15194194,
+ "fav_g": 49,
+ "like_g": 0
+ },
+ "dynamic": "#大悲咒##高音质##循环#",
+ "cid": 121325699,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1XE411S7Ew",
+ "cover43": "",
+ "tidv2": 2192,
+ "tnamev2": "疗愈成长",
+ "pid_v2": 1028,
+ "pid_name_v2": "神秘学",
+ "bvid": "BV1XE411S7Ew",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 70025529,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 827984205,
+ "videos": 1,
+ "tid": 193,
+ "tname": "MV",
+ "copyright": 2,
+ "pic": "http://i1.hdslb.com/bfs/archive/ffacd250c10ca7cea1a665e89b691b3b7b837587.jpg",
+ "title": "燃!保加利亚妖王2023新歌MV!",
+ "pubdate": 1688208848,
+ "ctime": 1688208848,
+ "desc": "youtube\n保加利亚妖王azis新歌mv",
+ "state": 0,
+ "duration": 225,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 1295732260,
+ "name": "蒂尼黄DiniHuang",
+ "face": "https://i1.hdslb.com/bfs/face/71cc994f3b717fb64dec53cab8b825b471f3886a.jpg"
+ },
+ "stat": {
+ "aid": 827984205,
+ "view": 168546,
+ "danmaku": 188,
+ "reply": 343,
+ "favorite": 851,
+ "coin": 79,
+ "share": 2315,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 4373,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 168546,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 1181623685,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV19g4y1A7xq",
+ "up_from_v2": 8,
+ "first_frame": "http://i0.hdslb.com/bfs/storyff/n230701qn3tfuifpjvvh0e2pctwqbkep_firsti.jpg",
+ "pub_location": "上海",
+ "cover43": "",
+ "tidv2": 2017,
+ "tnamev2": "MV",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV19g4y1A7xq",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 827984205,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 80573606,
+ "videos": 1,
+ "tid": 29,
+ "tname": "音乐现场",
+ "copyright": 2,
+ "pic": "http://i0.hdslb.com/bfs/archive/b0433e71df7f856cf1a45a926361661eca28b8fb.jpg",
+ "title": "满级大佬屠杀新手村",
+ "pubdate": 1577243562,
+ "ctime": 1577243562,
+ "desc": "YouTube\n\n*《She Taught Me How to Yodel》\n\n约德尔唱法(Yodeling)是瑞士阿尔卑斯山区的一种特殊唱法,采用真假声迅速切换的方式演唱。“约德尔”,在当地方言中是“树林歌唱”的意思,因此有时也将其翻译为“woods sing”。\n\n小女孩叫Sofia Shkidchenko,演唱于乌克兰达人秀,她有自己的油管频道可以去订阅哦~\n\n自己也没想到随手上传的个视频突然播放量这么多,不是专业的搬运博主,此视频留作纪念,但更新随缘啦。祝大家万事如意。",
+ "state": 0,
+ "duration": 126,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 247412150,
+ "name": "Ueroey",
+ "face": "https://i2.hdslb.com/bfs/face/f8cef132ebaeac9da8c73ad52f6c53b7d1f74637.jpg"
+ },
+ "stat": {
+ "aid": 80573606,
+ "view": 62129265,
+ "danmaku": 106580,
+ "reply": 27081,
+ "favorite": 1259191,
+ "coin": 453054,
+ "share": 189609,
+ "now_rank": 0,
+ "his_rank": 7,
+ "like": 2766708,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 62129265,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "#音乐#",
+ "cid": 137890032,
+ "dimension": {
+ "width": 638,
+ "height": 312,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1LJ411W7Bo",
+ "up_from_v2": 9,
+ "pub_location": "浙江",
+ "cover43": "",
+ "tidv2": 2018,
+ "tnamev2": "音乐现场",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV1LJ411W7Bo",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 80573606,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 370010949,
+ "videos": 2,
+ "tid": 138,
+ "tname": "搞笑",
+ "copyright": 2,
+ "pic": "http://i1.hdslb.com/bfs/archive/8339e4a40c1a10cfb0e0abe0bc4ef6ecbd61a45f.jpg",
+ "title": "黑人抬棺原版视频",
+ "pubdate": 1585735296,
+ "ctime": 1585735296,
+ "desc": "up主关于本条视频收入的说明戳:BV1YK41157dT\n转载自https://www.youtube.com/watch?v=b3Y_9bTRGVg\n其他:抖棺(肩)舞:BV1kt4y127Ee\n苏卡棺裂:BV1GZ4y1x7mZ\n我是比划,感谢您的观看感谢点赞感谢一切!改天一定陪老铁好好比划比划!(咕)\n(建议大家戳一下宝藏2p)",
+ "state": 0,
+ "duration": 200,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 479724334,
+ "name": "比划大魔王",
+ "face": "http://i1.hdslb.com/bfs/face/910e60494f7deff1b3bdcf1eaaead6779d77bac5.jpg"
+ },
+ "stat": {
+ "aid": 370010949,
+ "view": 65490009,
+ "danmaku": 454078,
+ "reply": 47875,
+ "favorite": 1008732,
+ "coin": 445010,
+ "share": 783444,
+ "now_rank": 0,
+ "his_rank": 2,
+ "like": 1912992,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 65490009,
+ "fav_g": 24,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 172423516,
+ "dimension": {
+ "width": 1280,
+ "height": 720,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1NZ4y1j7nw",
+ "cover43": "",
+ "tidv2": 2059,
+ "tnamev2": "鬼畜调教",
+ "pid_v2": 1007,
+ "pid_name_v2": "鬼畜",
+ "bvid": "BV1NZ4y1j7nw",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 370010949,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 161596,
+ "videos": 1,
+ "tid": 21,
+ "tname": "日常",
+ "copyright": 2,
+ "pic": "http://i2.hdslb.com/bfs/archive/90bc3229e862994ac021a5f0894f232bc49b36bf.jpg",
+ "title": "据说80%的男生都听过这段音乐,有木有?",
+ "pubdate": 1319379031,
+ "ctime": 1497399731,
+ "desc": "据说男生都听过,为啥我没有呢? ",
+ "state": 0,
+ "duration": 0,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 211322,
+ "name": "卍解←死神",
+ "face": "https://i2.hdslb.com/bfs/face/2cb86d5f33a409732e4a0dcc7cda70bc8c199a7f.jpg"
+ },
+ "stat": {
+ "aid": 161596,
+ "view": 576962,
+ "danmaku": 1042,
+ "reply": 1638,
+ "favorite": 6576,
+ "coin": 227,
+ "share": 931,
+ "now_rank": 0,
+ "his_rank": 612,
+ "like": 9845,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 576962,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 266868,
+ "dimension": {
+ "width": 448,
+ "height": 336,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1Nx411w7tR",
+ "cover43": "",
+ "tidv2": 2027,
+ "tnamev2": "音乐综合",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV1Nx411w7tR",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 161596,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 112699505707398,
+ "videos": 1,
+ "tid": 22,
+ "tname": "鬼畜调教",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/54c8218801e90a957e67541ea7d76e6d310614fe.jpg",
+ "title": "【范小勤】HOP",
+ "pubdate": 1719658405,
+ "ctime": 1719658405,
+ "desc": "",
+ "state": 0,
+ "duration": 200,
+ "mission_id": 1729431,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 40488241,
+ "name": "帅气的五岁少年",
+ "face": "https://i1.hdslb.com/bfs/face/0438443dd2bbb2fe1b46aa1d2134745f8d9f26c8.jpg"
+ },
+ "stat": {
+ "aid": 112699505707398,
+ "view": 47395,
+ "danmaku": 176,
+ "reply": 125,
+ "favorite": 566,
+ "coin": 242,
+ "share": 1366,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 1598,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 47395,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 500001599795260,
+ "dimension": {
+ "width": 1440,
+ "height": 1080,
+ "rotate": 0
+ },
+ "season_id": 3617308,
+ "short_link_v2": "https://b23.tv/BV1J63veXEvH",
+ "first_frame": "http://i1.hdslb.com/bfs/storyff/n240629sabnqqnvswrfyh2h8capwsas5_firsti.jpg",
+ "pub_location": "上海",
+ "cover43": "",
+ "tidv2": 2059,
+ "tnamev2": "鬼畜调教",
+ "pid_v2": 1007,
+ "pid_name_v2": "鬼畜",
+ "bvid": "BV1J63veXEvH",
+ "season_type": 1,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 112699505707398,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 345957866,
+ "videos": 1,
+ "tid": 193,
+ "tname": "MV",
+ "copyright": 2,
+ "pic": "http://i2.hdslb.com/bfs/archive/2327de6051626e9f263e265805cbb1be3a05ad8d.jpg",
+ "title": "【越南神曲】-《Kẻ Cắp Gặp Bà Già 》!终于找到原版了!",
+ "pubdate": 1664102700,
+ "ctime": 1664027264,
+ "desc": "提到「越南电音」,大家可能会感到比较陌生,甚至摸不着头脑。 事实上,越南电音已经席卷国内短视频平台,没有人可以逃过它的轰炸。 音乐一开,无人不嗨~",
+ "state": 0,
+ "duration": 234,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 0,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 2043250564,
+ "name": "4K音乐馆",
+ "face": "https://i1.hdslb.com/bfs/face/4be964615e70e18ab469e4403cb0fa320f8d2fdc.jpg"
+ },
+ "stat": {
+ "aid": 345957866,
+ "view": 8519264,
+ "danmaku": 3892,
+ "reply": 3755,
+ "favorite": 143914,
+ "coin": 9867,
+ "share": 8152,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 136218,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 8519264,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 842321779,
+ "dimension": {
+ "width": 3840,
+ "height": 2160,
+ "rotate": 0
+ },
+ "season_id": 725909,
+ "short_link_v2": "https://b23.tv/BV1Ud4y1M7C7",
+ "first_frame": "http://i1.hdslb.com/bfs/storyff/n220924qn371jsgk4te6781w32102ovo_firsti.jpg",
+ "pub_location": "山东",
+ "cover43": "",
+ "tidv2": 2017,
+ "tnamev2": "MV",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV1Ud4y1M7C7",
+ "season_type": 1,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 345957866,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 456093155,
+ "videos": 1,
+ "tid": 59,
+ "tname": "演奏",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/9c160af2907ba2c161d565a99e61032ba72868ff.png",
+ "title": "太羞耻了!敢于琴行挑战演奏《Hop》!",
+ "pubdate": 1592883074,
+ "ctime": 1592883074,
+ "desc": "太羞耻了!敢于琴行挑战演奏《Hop》! Hop改编版",
+ "state": 0,
+ "duration": 168,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 13677047,
+ "name": "Piano莱特",
+ "face": "https://i2.hdslb.com/bfs/face/edf6a0ae7dfe9adb5e8d5e813a69455554931c73.jpg"
+ },
+ "stat": {
+ "aid": 456093155,
+ "view": 1432473,
+ "danmaku": 3867,
+ "reply": 1839,
+ "favorite": 14907,
+ "coin": 7949,
+ "share": 5164,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 75832,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 1432473,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 204234033,
+ "dimension": {
+ "width": 3840,
+ "height": 2160,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1r5411W71r",
+ "cover43": "",
+ "tidv2": 2021,
+ "tnamev2": "演奏",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV1r5411W71r",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 456093155,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 88379669,
+ "videos": 1,
+ "tid": 138,
+ "tname": "搞笑",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/44deb7e35de1c0d19fc79e6f838ad334585755f6.jpg",
+ "title": "当你怂恿网课老师放HOP",
+ "pubdate": 1581481509,
+ "ctime": 1581481509,
+ "desc": "我受不了了我要笑死了\n网课欢乐多",
+ "state": 0,
+ "duration": 131,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 8307655,
+ "name": "-Holog-",
+ "face": "https://i1.hdslb.com/bfs/face/797edf7cf269bdf89d1deb46b2b5068e65920b88.jpg"
+ },
+ "stat": {
+ "aid": 88379669,
+ "view": 1553672,
+ "danmaku": 5349,
+ "reply": 1662,
+ "favorite": 7998,
+ "coin": 2519,
+ "share": 6023,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 57979,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 1553672,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "#保加利亚妖王##搞笑视频##HOP#\n把害怕打在公屏上_(:з」∠)_",
+ "cid": 150977310,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1D7411G76q",
+ "up_from_v2": 8,
+ "cover43": "",
+ "tidv2": 2207,
+ "tnamev2": "随拍·综合",
+ "pid_v2": 1032,
+ "pid_name_v2": "其他",
+ "bvid": "BV1D7411G76q",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 88379669,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 752882938,
+ "videos": 1,
+ "tid": 21,
+ "tname": "日常",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/f5a60b4edaef1b44faab4ffc47384843a7d47c56.jpg",
+ "title": "【av100000000】b站视频破亿了!第一亿个视频十小时循环(补档)",
+ "pubdate": 1588142976,
+ "ctime": 1588142976,
+ "desc": "【av100000000】b站视频破亿了!第一亿个视频十小时循环(补档)\nBV1y7411Q743/av100000000",
+ "state": 0,
+ "duration": 36000,
+ "mission_id": 13243,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 382043832,
+ "name": "輝夜姬想讓人告白",
+ "face": "https://i0.hdslb.com/bfs/face/647d2a40ac51b8e1379d6c46c64f5a8e28b269ab.jpg"
+ },
+ "stat": {
+ "aid": 752882938,
+ "view": 161614,
+ "danmaku": 357,
+ "reply": 497,
+ "favorite": 1217,
+ "coin": 165,
+ "share": 166,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 4623,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 161614,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "#B站##BILIBILI##哔哩哔哩#",
+ "cid": 184673331,
+ "dimension": {
+ "width": 960,
+ "height": 600,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1Yk4y1r7g2",
+ "cover43": "",
+ "tidv2": 2207,
+ "tnamev2": "随拍·综合",
+ "pid_v2": 1032,
+ "pid_name_v2": "其他",
+ "bvid": "BV1Yk4y1r7g2",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 752882938,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 676186170,
+ "videos": 1,
+ "tid": 193,
+ "tname": "MV",
+ "copyright": 2,
+ "pic": "http://i1.hdslb.com/bfs/archive/24e8bd7eb31bbc142cd2676d28efa4c45c06bc33.jpg",
+ "title": "【4K60FPS】查理·普斯《See You Again》爆火神曲!珍惜身边的人!",
+ "pubdate": 1634983053,
+ "ctime": 1634983053,
+ "desc": "官方MV\n原盘提取制作,进行了部分调整\n中英文双语字幕制作,自己双语翻译\n《See You Again》是由美国说唱歌手维兹·卡利法与歌手查理·普斯合作演唱的一首歌曲\n这首歌,我想不用多说了,因为太多人点这首歌了\n希望大家珍惜身边的人",
+ "state": 0,
+ "duration": 229,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 0,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 229733301,
+ "name": "音乐私藏馆",
+ "face": "https://i0.hdslb.com/bfs/face/91a6526445f61e2d491523242b532d5e76f0435a.jpg"
+ },
+ "stat": {
+ "aid": 676186170,
+ "view": 19331747,
+ "danmaku": 55418,
+ "reply": 19047,
+ "favorite": 459123,
+ "coin": 125647,
+ "share": 58270,
+ "now_rank": 0,
+ "his_rank": 30,
+ "like": 560583,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 19331747,
+ "fav_g": 208,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 429657756,
+ "dimension": {
+ "width": 3840,
+ "height": 2160,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1qU4y1F73A",
+ "first_frame": "http://i1.hdslb.com/bfs/storyff/n211023qn35uju26iwo4pw2enpricqvy_firsti.jpg",
+ "pub_location": "陕西",
+ "cover43": "",
+ "tidv2": 2017,
+ "tnamev2": "MV",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV1qU4y1F73A",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 676186170,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 11841799,
+ "videos": 1,
+ "tid": 236,
+ "tname": "竞技体育",
+ "copyright": 2,
+ "pic": "http://i2.hdslb.com/bfs/archive/20b223c72345a544272f70014f3a9ce2e30b39c8.jpg",
+ "title": "【万恶之源】游泳教练原视频",
+ "pubdate": 1499056716,
+ "ctime": 1499056716,
+ "desc": "在网盘里翻出来的不知道有没有人上传过。不断地摸索和练习,你就学会了游泳\n其中重点不能上传,我试过一次了。",
+ "state": 0,
+ "duration": 231,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 25844288,
+ "name": "希爾薇",
+ "face": "https://i2.hdslb.com/bfs/face/67b49b90952cd64320432ae561e78e54ea3ecb53.jpg"
+ },
+ "stat": {
+ "aid": 11841799,
+ "view": 693786,
+ "danmaku": 4253,
+ "reply": 1097,
+ "favorite": 20296,
+ "coin": 2820,
+ "share": 14821,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 13990,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 693786,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 19555184,
+ "dimension": {
+ "width": 352,
+ "height": 288,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1ox411B7jr",
+ "cover43": "",
+ "tidv2": 2063,
+ "tnamev2": "鬼畜综合",
+ "pid_v2": 1007,
+ "pid_name_v2": "鬼畜",
+ "bvid": "BV1ox411B7jr",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 11841799,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 96842562,
+ "videos": 1,
+ "tid": 193,
+ "tname": "MV",
+ "copyright": 2,
+ "pic": "http://i0.hdslb.com/bfs/archive/5c33d3957fee3dac7376ab12b3e9a2b595600d84.jpg",
+ "title": "真正的冰雪女王",
+ "pubdate": 1584448702,
+ "ctime": 1584448702,
+ "desc": "转载https://weibo.com/tv/v/FlXRiE62K?fid=1034:217aa2b6ddb0f47e65468914c7d2c9af\n妖王的歌简直可以洗涤灵魂",
+ "state": 0,
+ "duration": 219,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 388982725,
+ "name": "萌萌四海为家",
+ "face": "https://i1.hdslb.com/bfs/face/f4ce35193db8743094a4efb4e00e97442244f2aa.jpg"
+ },
+ "stat": {
+ "aid": 96842562,
+ "view": 39902,
+ "danmaku": 47,
+ "reply": 32,
+ "favorite": 372,
+ "coin": 39,
+ "share": 627,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 507,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 39902,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "#欧美MV##BGM##歌曲#",
+ "cid": 165335972,
+ "dimension": {
+ "width": 480,
+ "height": 360,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1V7411Z7HX",
+ "cover43": "",
+ "tidv2": 2017,
+ "tnamev2": "MV",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV1V7411Z7HX",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 96842562,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 84204989,
+ "videos": 1,
+ "tid": 267,
+ "tname": "电台",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/c6533d1b6c9fcd3cd574a0117acaa4e5ddbe7fa4.jpg",
+ "title": "【B站入站曲】(全站最清晰音质)",
+ "pubdate": 1579462179,
+ "ctime": 1579462179,
+ "desc": "【B站音乐同名】本曲是本人使用Chrome+多种技术手段历时4个小时扒出的原曲,扒曲不易(如有异议请自行尝试即可知之),请多支持!",
+ "state": 0,
+ "duration": 131,
+ "mission_id": 12642,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 189708807,
+ "name": "Yc云灿",
+ "face": "https://i0.hdslb.com/bfs/face/c815a0c66ab6adbd208558a0fe25c59c6ee916fa.jpg"
+ },
+ "stat": {
+ "aid": 84204989,
+ "view": 113298,
+ "danmaku": 2640,
+ "reply": 426,
+ "favorite": 6659,
+ "coin": 1578,
+ "share": 238,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 8192,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 113298,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "#2019##2019年度报告##年度报告#",
+ "cid": 144036516,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV157411v76Z",
+ "pub_location": "山西",
+ "cover43": "",
+ "tidv2": 2024,
+ "tnamev2": "电台·歌单",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV157411v76Z",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 84204989,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 45213203,
+ "videos": 1,
+ "tid": 138,
+ "tname": "搞笑",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/1c73c8c16fe733568c3b6a5332c85be3ddc41acd.jpg",
+ "title": "如果把极乐净土的背景音乐换成hop会怎么样",
+ "pubdate": 1551585358,
+ "ctime": 1551585358,
+ "desc": "-",
+ "state": 0,
+ "duration": 222,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 300015102,
+ "name": "砂糖血块",
+ "face": "https://i0.hdslb.com/bfs/face/77d73e4aa3fa669255be492596e02f1570f4fb5d.jpg"
+ },
+ "stat": {
+ "aid": 45213203,
+ "view": 521576,
+ "danmaku": 4054,
+ "reply": 867,
+ "favorite": 12646,
+ "coin": 12832,
+ "share": 8799,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 31530,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 521576,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 79166580,
+ "dimension": {
+ "width": 1144,
+ "height": 640,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1bb411B7dn",
+ "cover43": "",
+ "tidv2": 2036,
+ "tnamev2": "舞蹈综合",
+ "pid_v2": 1004,
+ "pid_name_v2": "舞蹈",
+ "bvid": "BV1bb411B7dn",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 45213203,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 66372123,
+ "videos": 1,
+ "tid": 21,
+ "tname": "日常",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/a12315d2efc49f1862be996093c8076284719e43.jpg",
+ "title": "学校食堂公然放HOP,这到底是人性的泯灭,还是道德的伦桑?",
+ "pubdate": 1567398824,
+ "ctime": 1567398825,
+ "desc": "吃饭时的我惊呆了。。。",
+ "state": 0,
+ "duration": 61,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 298061175,
+ "name": "Dusk-氵夕",
+ "face": "https://i0.hdslb.com/bfs/face/803bf620ead9c25168935e31797b25d51f2cb614.jpg"
+ },
+ "stat": {
+ "aid": 66372123,
+ "view": 270243,
+ "danmaku": 238,
+ "reply": 211,
+ "favorite": 1443,
+ "coin": 116,
+ "share": 427,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 7846,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 270243,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "#自制##奇葩##HOP#",
+ "cid": 115113475,
+ "dimension": {
+ "width": 1280,
+ "height": 720,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV174411177w",
+ "up_from_v2": 8,
+ "pub_location": "宁夏",
+ "cover43": "",
+ "tidv2": 2088,
+ "tnamev2": "社会观察",
+ "pid_v2": 1010,
+ "pid_name_v2": "知识",
+ "bvid": "BV174411177w",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 66372123,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 669351541,
+ "videos": 1,
+ "tid": 138,
+ "tname": "搞笑",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/fa08f65dc87fa6a26a99d0dc6fbc141adcef917b.jpg",
+ "title": "这TM才是东京热!!!",
+ "pubdate": 1597827562,
+ "ctime": 1597827562,
+ "desc": "祝大家长高3cm!",
+ "state": 0,
+ "duration": 73,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 641529005,
+ "name": "海胆君の日本留学日记",
+ "face": "https://i2.hdslb.com/bfs/face/75b3ddf5767533667d08c4475823fdf6ed7111d0.jpg"
+ },
+ "stat": {
+ "aid": 669351541,
+ "view": 183005,
+ "danmaku": 78,
+ "reply": 54,
+ "favorite": 685,
+ "coin": 101,
+ "share": 225,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 1310,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 183005,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "#bilibili新星计划##搞笑##全程高能#",
+ "cid": 226269297,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1ea4y177Rj",
+ "pub_location": "辽宁",
+ "cover43": "",
+ "tidv2": 2002,
+ "tnamev2": "影视剪辑",
+ "pid_v2": 1001,
+ "pid_name_v2": "影视",
+ "bvid": "BV1ea4y177Rj",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 669351541,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 239236582,
+ "videos": 1,
+ "tid": 22,
+ "tname": "鬼畜调教",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/60e0c8b0bdb8781ae5213d06e35a80e416b624fd.jpg",
+ "title": "av10388闪版",
+ "pubdate": 1706161150,
+ "ctime": 1706160987,
+ "desc": "-",
+ "state": 0,
+ "duration": 72,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 352435610,
+ "name": "尼911a",
+ "face": "https://i2.hdslb.com/bfs/face/dca0c49ddabaae204209764e73a1eeddd4e94fa3.jpg"
+ },
+ "stat": {
+ "aid": 239236582,
+ "view": 98736,
+ "danmaku": 149,
+ "reply": 201,
+ "favorite": 700,
+ "coin": 45,
+ "share": 379,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 875,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 98736,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 1418632218,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1he411Y7MB",
+ "up_from_v2": 11,
+ "first_frame": "http://i2.hdslb.com/bfs/storyff/n240125saqkgdlb6aio291t2cc5qola0_firsti.jpg",
+ "pub_location": "江苏",
+ "cover43": "",
+ "tidv2": 2207,
+ "tnamev2": "随拍·综合",
+ "pid_v2": 1032,
+ "pid_name_v2": "其他",
+ "bvid": "BV1he411Y7MB",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 239236582,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 294464399,
+ "videos": 1,
+ "tid": 21,
+ "tname": "日常",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/8327a7955381a3a7fc0606b08ad87dd74a948a4b.png",
+ "title": "B站的两个极限AV号被我找到了!",
+ "pubdate": 1638019819,
+ "ctime": 1638019819,
+ "desc": "-",
+ "state": 0,
+ "duration": 71,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 495847991,
+ "name": "Tedsan",
+ "face": "https://i2.hdslb.com/bfs/face/d3689b9a5f93d82deb1f8b6a081767a16b16e5ca.jpg"
+ },
+ "stat": {
+ "aid": 294464399,
+ "view": 86852,
+ "danmaku": 25,
+ "reply": 280,
+ "favorite": 338,
+ "coin": 54,
+ "share": 61,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 450,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 86852,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 450235439,
+ "dimension": {
+ "width": 1440,
+ "height": 720,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1fF411b7Hm",
+ "up_from_v2": 19,
+ "first_frame": "http://i1.hdslb.com/bfs/storyff/n211127a23442em8g5nug2775mg3789m_firsti.jpg",
+ "pub_location": "四川",
+ "cover43": "",
+ "tidv2": 2207,
+ "tnamev2": "随拍·综合",
+ "pid_v2": 1032,
+ "pid_name_v2": "其他",
+ "bvid": "BV1fF411b7Hm",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 294464399,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 592220402,
+ "videos": 1,
+ "tid": 193,
+ "tname": "MV",
+ "copyright": 2,
+ "pic": "http://i2.hdslb.com/bfs/archive/234b7c4a99412224007bf21a0e3902946dc45cd6.jpg",
+ "title": "【4K50帧】“我在东北玩泥巴”原曲 Daler Mehndi - Tunak Tunak Tun",
+ "pubdate": 1638883948,
+ "ctime": 1638883948,
+ "desc": "-",
+ "state": 0,
+ "duration": 257,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 0,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 472562429,
+ "name": "智英武54",
+ "face": "https://i2.hdslb.com/bfs/face/e7bb5b2f16863992562f10ce2a686035bf33a1b4.jpg"
+ },
+ "stat": {
+ "aid": 592220402,
+ "view": 2711581,
+ "danmaku": 7298,
+ "reply": 1980,
+ "favorite": 58898,
+ "coin": 5115,
+ "share": 17577,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 72931,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 2711581,
+ "fav_g": 11,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 456563995,
+ "dimension": {
+ "width": 2880,
+ "height": 2160,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1bq4y1q7Ho",
+ "up_from_v2": 8,
+ "first_frame": "http://i2.hdslb.com/bfs/storyff/n211207a24niqqktio4no1wmwd5tsget_firsti.jpg",
+ "pub_location": "江苏",
+ "cover43": "",
+ "tidv2": 2017,
+ "tnamev2": "MV",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV1bq4y1q7Ho",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 592220402,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 441264199,
+ "videos": 1,
+ "tid": 26,
+ "tname": "音MAD",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/4e36449edad0021385e5477bbe427ca9243d549a.jpg",
+ "title": "五大哲学",
+ "pubdate": 1679426636,
+ "ctime": 1679426636,
+ "desc": "-",
+ "state": 0,
+ "duration": 13,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 613658683,
+ "name": "长瀞重度依赖",
+ "face": "https://i1.hdslb.com/bfs/face/c53f852b5ca574eed9be9877d7ce3f28a2e89385.jpg"
+ },
+ "stat": {
+ "aid": 441264199,
+ "view": 671881,
+ "danmaku": 92,
+ "reply": 230,
+ "favorite": 2720,
+ "coin": 228,
+ "share": 1060,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 9049,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 671881,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 1064182352,
+ "dimension": {
+ "width": 720,
+ "height": 720,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1nL411r7mS",
+ "up_from_v2": 8,
+ "first_frame": "http://i2.hdslb.com/bfs/storyff/n230322qntglnzeqo4m1c23cnoyehccs_firsti.jpg",
+ "pub_location": "广西",
+ "cover43": "",
+ "tidv2": 2015,
+ "tnamev2": "娱乐综合",
+ "pid_v2": 1002,
+ "pid_name_v2": "娱乐",
+ "bvid": "BV1nL411r7mS",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 441264199,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 49016435,
+ "videos": 1,
+ "tid": 31,
+ "tname": "翻唱",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/9b7da84975469b7ddcd78717d06c092c4433ccf4.jpg",
+ "title": "【喵会长】妹子竟被逼着翻唱保加利亚妖王!⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄!",
+ "pubdate": 1555135227,
+ "ctime": 1554999201,
+ "desc": "这次视频改了N遍,剪的好累~希望大家能多多支持一下\n网易云音频链接:https://music.163.com/#/song?id=1358976277\n关注微博有惊喜!@隔壁班的喵会长",
+ "state": 0,
+ "duration": 200,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 21330948,
+ "name": "隔壁班的喵会长",
+ "face": "https://i0.hdslb.com/bfs/face/75a4a80496daacb478496f6a0aaf4d3ab357393d.jpg"
+ },
+ "stat": {
+ "aid": 49016435,
+ "view": 1988312,
+ "danmaku": 8866,
+ "reply": 5413,
+ "favorite": 53008,
+ "coin": 136074,
+ "share": 13019,
+ "now_rank": 0,
+ "his_rank": 4,
+ "like": 268302,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 1988312,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "那个曾经制霸b站的男银又肥来了!!!!",
+ "cid": 86290623,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1vb411M79s",
+ "pub_location": "山西",
+ "cover43": "",
+ "tidv2": 2061,
+ "tnamev2": "人力VOCALOID",
+ "pid_v2": 1007,
+ "pid_name_v2": "鬼畜",
+ "bvid": "BV1vb411M79s",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 49016435,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 730704908,
+ "videos": 1,
+ "tid": 193,
+ "tname": "MV",
+ "copyright": 2,
+ "pic": "http://i1.hdslb.com/bfs/archive/2fd2b442a3f42ed0ba20c5204afdd92dbdfb9a68.jpg",
+ "title": "【越南神曲】-《Cứ Chill Thôi》!终于找到原版了!",
+ "pubdate": 1663586400,
+ "ctime": 1663574508,
+ "desc": "听完以后瞬间心情舒畅,太绝了!",
+ "state": 0,
+ "duration": 281,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 0,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 2043250564,
+ "name": "4K音乐馆",
+ "face": "https://i1.hdslb.com/bfs/face/4be964615e70e18ab469e4403cb0fa320f8d2fdc.jpg"
+ },
+ "stat": {
+ "aid": 730704908,
+ "view": 4715077,
+ "danmaku": 3141,
+ "reply": 4132,
+ "favorite": 75716,
+ "coin": 9002,
+ "share": 7597,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 79627,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 4715077,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 837595821,
+ "dimension": {
+ "width": 3840,
+ "height": 2160,
+ "rotate": 0
+ },
+ "season_id": 725909,
+ "short_link_v2": "https://b23.tv/BV1GD4y1i7dA",
+ "first_frame": "http://i2.hdslb.com/bfs/storyff/n220919qn29hpyl52if2k1dthb32a0ji_firsti.jpg",
+ "pub_location": "山东",
+ "cover43": "",
+ "tidv2": 2017,
+ "tnamev2": "MV",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV1GD4y1i7dA",
+ "season_type": 1,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 730704908,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 413754644,
+ "videos": 1,
+ "tid": 59,
+ "tname": "演奏",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/4769bc9c91af6fc8598d1b22d16033b540af33a8.jpg",
+ "title": "【东京热】TOKY HOT THEME SONG ( FULL VERSION)",
+ "pubdate": 1594208253,
+ "ctime": 1594208253,
+ "desc": "-",
+ "state": 0,
+ "duration": 157,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 476156735,
+ "name": "星际的小喵",
+ "face": "http://i2.hdslb.com/bfs/face/b6fcd4d4d23047432012576dda4239b5d0b5fa6e.jpg"
+ },
+ "stat": {
+ "aid": 413754644,
+ "view": 476215,
+ "danmaku": 166,
+ "reply": 906,
+ "favorite": 6630,
+ "coin": 627,
+ "share": 3116,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 6086,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 476215,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "#日本##音乐##东京#",
+ "cid": 210245452,
+ "dimension": {
+ "width": 426,
+ "height": 240,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1pV41167y7",
+ "cover43": "",
+ "tidv2": 2027,
+ "tnamev2": "音乐综合",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV1pV41167y7",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 413754644,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 468509831,
+ "videos": 1,
+ "tid": 193,
+ "tname": "MV",
+ "copyright": 2,
+ "pic": "http://i0.hdslb.com/bfs/archive/03971484b4c3931e89cbcf5862f8c10645e6aaec.jpg",
+ "title": "补裆 av3440 -",
+ "pubdate": 1651067890,
+ "ctime": 1651067890,
+ "desc": "新浪\nbiliplus,里面只有残缺的信息,发布时间应该是2010-2-27",
+ "state": 0,
+ "duration": 215,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 675115853,
+ "name": "゚゙゙゙゚゚゙゚゚",
+ "face": "https://i2.hdslb.com/bfs/face/8706d12c0df1f27aff5ae3c045b7da0133bd8c4a.png"
+ },
+ "stat": {
+ "aid": 468509831,
+ "view": 280276,
+ "danmaku": 89,
+ "reply": 324,
+ "favorite": 4518,
+ "coin": 151,
+ "share": 209,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 6403,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 280276,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 586522933,
+ "dimension": {
+ "width": 320,
+ "height": 240,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1H541117sZ",
+ "up_from_v2": 8,
+ "first_frame": "http://i2.hdslb.com/bfs/storyff/n220427qn2g6emv26rnqxq247csj5kgn_firsti.jpg",
+ "cover43": "",
+ "tidv2": 2027,
+ "tnamev2": "音乐综合",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV1H541117sZ",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 468509831,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 19390801,
+ "videos": 1,
+ "tid": 22,
+ "tname": "鬼畜调教",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/d52994a1876d07a975dc6683b78a898d9b581208.png",
+ "title": "【春晚鬼畜】赵本山:我就是念诗之王!【改革春风吹满地】",
+ "pubdate": 1518339644,
+ "ctime": 1518230987,
+ "desc": "小时候每次吃完年夜饭,都会急急忙忙跑回自己房间跟朋友玩彩虹岛,街头篮球,泡泡堂,极品飞车,CS。一旦听到外面大人们喊“哦!赵本山来咯!”,就马上暂停手上的游戏赶紧跑出去看。对我来说没有赵本山的春晚根本不是春晚。\n鬼畜本家:av18521530\n【举起手来】花姑娘又要吸旺仔牛奶!\nby @疯猴pme",
+ "state": 0,
+ "duration": 152,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 353246678,
+ "name": "UP-Sings",
+ "face": "http://i2.hdslb.com/bfs/face/224815f69567dfbdacffc64185b89568bf8da0f3.jpg"
+ },
+ "stat": {
+ "aid": 19390801,
+ "view": 123739584,
+ "danmaku": 667864,
+ "reply": 325458,
+ "favorite": 3047850,
+ "coin": 4800461,
+ "share": 1494973,
+ "now_rank": 0,
+ "his_rank": 3,
+ "like": 5445710,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 123739584,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "不管今年春晚有没有本山叔,鬼畜区总归是有的!",
+ "cid": 31621681,
+ "dimension": {
+ "width": 640,
+ "height": 360,
+ "rotate": 0
+ },
+ "season_id": 879555,
+ "short_link_v2": "https://b23.tv/BV1bW411n7fY",
+ "cover43": "",
+ "tidv2": 2059,
+ "tnamev2": "鬼畜调教",
+ "pid_v2": 1007,
+ "pid_name_v2": "鬼畜",
+ "bvid": "BV1bW411n7fY",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 19390801,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 305593327,
+ "videos": 1,
+ "tid": 255,
+ "tname": "颜值·网红舞",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/b4917bb0a9147f205e6af9d87d6d50b864a7a97f.jpg",
+ "title": "蝴蝶步2.0(◦˙▽˙◦)",
+ "pubdate": 1669474753,
+ "ctime": 1669474753,
+ "desc": "-",
+ "state": 0,
+ "duration": 15,
+ "mission_id": 1039224,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 43724742,
+ "name": "怎么这样的呐",
+ "face": "https://i0.hdslb.com/bfs/face/f9e9ae6025a9e02b134eec3dd84b87c3689216a3.jpg"
+ },
+ "stat": {
+ "aid": 305593327,
+ "view": 13909975,
+ "danmaku": 1401,
+ "reply": 7111,
+ "favorite": 235000,
+ "coin": 83120,
+ "share": 24633,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 383239,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 13909975,
+ "fav_g": 14,
+ "like_g": 0
+ },
+ "dynamic": "双更一下~",
+ "cid": 904012490,
+ "dimension": {
+ "width": 1456,
+ "height": 2592,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1kP411u7jr",
+ "up_from_v2": 19,
+ "first_frame": "http://i2.hdslb.com/bfs/storyff/n221126qn2i92o9zf8m22h34kykxw0dl_firsti.jpg",
+ "pub_location": "浙江",
+ "cover43": "",
+ "tidv2": 2030,
+ "tnamev2": "颜值·网红舞",
+ "pid_v2": 1004,
+ "pid_name_v2": "舞蹈",
+ "bvid": "BV1kP411u7jr",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 305593327,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ },
+ {
+ "aid": 114075187020133,
+ "videos": 1,
+ "tid": 256,
+ "tname": "短片",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/3d3aaf0ab2da5e41f4de7ed3e7995babbfd1168a.jpg",
+ "title": "中国人自己的保加利亚妖王",
+ "pubdate": 1740649401,
+ "ctime": 1740649401,
+ "desc": "-",
+ "state": 0,
+ "duration": 53,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 1247190580,
+ "name": "麦克瑟瑟大型纪录片",
+ "face": "https://i1.hdslb.com/bfs/face/98df710e5e76e7fe37c0d5fd8047b899b21943d5.jpg"
+ },
+ "stat": {
+ "aid": 114075187020133,
+ "view": 9167,
+ "danmaku": 1,
+ "reply": 12,
+ "favorite": 24,
+ "coin": 2,
+ "share": 9,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 166,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 9167,
+ "fav_g": 0,
+ "like_g": 0
+ },
+ "dynamic": "",
+ "cid": 28602729880,
+ "dimension": {
+ "width": 1440,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1Xg9cYYEDZ",
+ "up_from_v2": 19,
+ "first_frame": "http://i0.hdslb.com/bfs/storyff/n250227sao3m0apa1gc9g2yxt3vx2l53_firsti.jpg",
+ "pub_location": "河南",
+ "cover43": "",
+ "tidv2": 2026,
+ "tnamev2": "乐评盘点",
+ "pid_v2": 1003,
+ "pid_name_v2": "音乐",
+ "bvid": "BV1Xg9cYYEDZ",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": {
+ "id": 114075187020133,
+ "goto": "av",
+ "trackid": "web_related_0.router-related-2004712-fdb74c5f6-v6rmv.1744730526909.62",
+ "uniq_id": ""
+ }
+ }
+ ],
+ "Spec": null,
+ "hot_share": {
+ "show": false,
+ "list": []
+ },
+ "elec": null,
+ "emergency": {
+ "no_like": false,
+ "no_coin": false,
+ "no_fav": false,
+ "no_share": false
+ },
+ "view_addit": {
+ "63": false,
+ "64": false,
+ "69": false,
+ "71": false,
+ "72": false
+ },
+ "guide": null,
+ "query_tags": null,
+ "participle": [
+ "保加利亚",
+ "azis",
+ "mv"
+ ],
+ "module_ctrl": null,
+ "replace_recommend": false
+ }
+}
+```
+
+
+
+## 获取视频简介
+
+> https://api.bilibili.com/x/web-interface/archive/desc
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|------|-----|--------|--------|---------------|
+| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
+| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|--------------------------------------|
+| code | num | 返回值 | 0:成功 -400:请求错误 62002:稿件不可见 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | str | 简介内容 | |
+
+**示例:**
+
+查看视频(教主的咕鸽)`av39330059`/`BV1Bt411z799`的简介
+
+avid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/archive/desc' \
+--data-urlencode 'aid=39330059'
+```
+
+bvid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/archive/desc' \
+--data-urlencode 'bvid=BV1Bt411z799'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": "1.小朋友们大家好,我是你们爷爷最喜欢的超威一列姆!\r\n2.在过去的一年里,我创作了无数脍炙人口的歌曲,常常被人夸赞高产似雌豚。\r\n3.接下来的日子里我会一如既往地勤勉创作,争取继续保持现在的产量,文体两开花。\r\n4.我感觉照这个势头和速度下去别说日常更新不在话下,连出张新专辑都指日可待了啊。\r\n5.也感谢你们一如既往的支持和鼓励,我会注意身体,不把自己累垮掉的。\r\n6.我个人不建议你们在评论区里艾特任何UP主,我真的不建议,当然你们非要这么做我也没办法的。"
+}
+```
+
+
+
+## 查询视频分P列表 (avid/bvid转cid)
+
+> https://api.bilibili.com/x/player/pagelist
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|------|-----|--------|--------|---------------|
+| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
+| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-------|------|-----------------------------------|
+| code | num | 返回值 | 0:成功 -400:请求错误 -404:无视频 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | array | 分P列表 | |
+
+数组`data`:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|----------|---------|
+| 0 | obj | 1P内容 | 无分P仅有此项 |
+| n | obj | (n+1)P内容 | |
+| …… | obj | …… | …… |
+
+数组`data`中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------|-----|-----------|---------------------------------------------|
+| cid | num | 当前分P cid | |
+| page | num | 当前分P | |
+| from | str | 视频来源 | vupload:普通上传(B站) hunan:芒果TV qq:腾讯 |
+| part | str | 当前分P标题 | |
+| duration | num | 当前分P持续时间 | 单位为秒 |
+| vid | str | 站外视频vid | |
+| weblink | str | 站外视频跳转url | |
+| dimension | obj | 当前分P分辨率 | 有部分视频无法获取分辨率 |
+| first_frame | str | 分P封面 | |
+
+数组`data`中的对象中的`dimension`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------|-----|---------|----------------|
+| width | num | 当前分P 宽度 | |
+| height | num | 当前分P 高度 | |
+| rotate | num | 是否将宽高对换 | 0:正常 1:对换 |
+
+**示例:**
+
+查询视频`av13502509`/`BV1ex411J7GE`的分P列表
+
+avid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/player/pagelist' \
+--data-urlencode 'aid=13502509'
+```
+
+bvid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/player/pagelist' \
+--data-urlencode 'bvid=BV1ex411J7GE'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [{
+ "cid": 66445301,
+ "page": 1,
+ "from": "vupload",
+ "part": "00. 宣传短片",
+ "duration": 33,
+ "vid": "",
+ "weblink": "",
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ }
+ }, {
+ "cid": 35039663,
+ "page": 2,
+ "from": "vupload",
+ "part": "01. 火柴人与动画师",
+ "duration": 133,
+ "vid": "",
+ "weblink": "",
+ "dimension": {
+ "width": 1484,
+ "height": 1080,
+ "rotate": 0
+ }
+ }, {
+ "cid": 35039678,
+ "page": 3,
+ "from": "vupload",
+ "part": "02. 火柴人与动画师 II",
+ "duration": 210,
+ "vid": "",
+ "weblink": "",
+ "dimension": {
+ "width": 1484,
+ "height": 1080,
+ "rotate": 0
+ }
+ }, {
+ "cid": 35039693,
+ "page": 4,
+ "from": "vupload",
+ "part": "03. 火柴人与动画师 III",
+ "duration": 503,
+ "vid": "",
+ "weblink": "",
+ "dimension": {
+ "width": 992,
+ "height": 720,
+ "rotate": 0
+ }
+ }]
+}
+```
+
+
diff --git a/video/interact_video.md b/docs/video/interact_video.md
similarity index 98%
rename from video/interact_video.md
rename to docs/video/interact_video.md
index 1d0a956..103bf2f 100644
--- a/video/interact_video.md
+++ b/docs/video/interact_video.md
@@ -2,15 +2,9 @@
注:互动视频分P与普通视频分P不互通
----
-
-- [获取互动视频模块详细信息](#获取互动视频模块详细信息)
-
----
-
## 获取互动视频模块详细信息
-> http://api.bilibili.com/x/stein/edgeinfo_v2
+> https://api.bilibili.com/x/stein/edgeinfo_v2
*请求方式:GET*
@@ -196,7 +190,7 @@
avid方式:
```shell
-curl -G 'http://api.bilibili.com/x/stein/edgeinfo_v2' \
+curl -G 'https://api.bilibili.com/x/stein/edgeinfo_v2' \
--data-urlencode 'aid=73267982' \
--data-urlencode 'graph_version=155446' \
--data-urlencode 'edge_id=5556092' \
@@ -206,7 +200,7 @@ curl -G 'http://api.bilibili.com/x/stein/edgeinfo_v2' \
bvid方式:
```shell
-curl -G 'http://api.bilibili.com/x/stein/edgeinfo_v2' \
+curl -G 'https://api.bilibili.com/x/stein/edgeinfo_v2' \
--data-urlencode 'bvid=BV1UE411y7Wy' \
--data-urlencode 'graph_version=155446' \
--data-urlencode 'edge_id=5556092' \
diff --git a/video/online.md b/docs/video/online.md
similarity index 91%
rename from video/online.md
rename to docs/video/online.md
index 89b6e90..4b80f0e 100644
--- a/video/online.md
+++ b/docs/video/online.md
@@ -1,11 +1,8 @@
# 视频在线人数
-- [获取视频在线人数_web端](#获取视频在线人数_web端)
-- [获取视频在线人数_APP端](#获取视频在线人数_APP端)
-
## 获取视频在线人数_web端
-> http://api.bilibili.com/x/player/online/total
+> https://api.bilibili.com/x/player/online/total
*请求方式:GET*
@@ -48,7 +45,7 @@
查询视频`av759949922`/`BV1y64y1q757`中1P(`392402545`)的在线人数
```shell
-curl -G 'http://api.bilibili.com/x/player/online/total' \
+curl -G 'https://api.bilibili.com/x/player/online/total' \
--data-urlencode 'aid=759949922' \
--data-urlencode 'cid=392402545'
```
@@ -76,7 +73,7 @@ curl -G 'http://api.bilibili.com/x/player/online/total' \
## 获取视频在线人数_APP端
-> http://app.bilibili.com/x/v2/view/video/online
+> https://app.bilibili.com/x/v2/view/video/online
*请求方式:GET*
@@ -118,7 +115,7 @@ curl -G 'http://api.bilibili.com/x/player/online/total' \
查询视频`av759949922`/`BV1y64y1q757`中1P(`392402545`)的在线人数
```shell
-curl -G 'http://app.bilibili.com/x/v2/view/video/online' \
+curl -G 'https://app.bilibili.com/x/v2/view/video/online' \
--data-urlencode 'aid=759949922' \
--data-urlencode 'appkey=1d8b6e7d45233436' \
--data-urlencode 'cid=392402545' \
diff --git a/video/pbp.md b/docs/video/pbp.md
similarity index 93%
rename from video/pbp.md
rename to docs/video/pbp.md
index b2cab6d..9ce5824 100644
--- a/video/pbp.md
+++ b/docs/video/pbp.md
@@ -4,15 +4,9 @@
并用曲线顶点表示在进度条上,实现可视化
----
-
-- [获取弹幕趋势顶点列表](#获取弹幕趋势顶点列表)
-
----
-
## 获取弹幕趋势顶点列表
-> http://bvc.bilivideo.com/pbp/data
+> https://bvc.bilivideo.com/pbp/data
*请求方式:GET*
@@ -54,7 +48,7 @@
获取视频`cid=3724723`的获取弹幕趋势顶点列表
```shell
-curl -G 'http://api.bilibili.com/pbp/data' \
+curl -G 'https://api.bilibili.com/pbp/data' \
--data-urlencode 'cid=3724723'
```
diff --git a/docs/video/player.md b/docs/video/player.md
new file mode 100644
index 0000000..5b18cdf
--- /dev/null
+++ b/docs/video/player.md
@@ -0,0 +1,509 @@
+# 播放器
+
+## web 播放器信息
+
+web 播放器的信息接口,提供正常播放需要的元数据,包括:智能防挡弹幕、字幕、章节看点等。
+
+> https://api.bilibili.com/x/player/wbi/v2
+> https://api.bilibili.com/x/player/v2
+
+*请求方式:GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | --------- | ----------- | ----------------- |
+| aid | num | 稿件 avid | 必要 (可选) | aid 与 bvid 任选 |
+| bvid | str | 稿件 bvid | 必要 (可选) | aid 与 bvid 任选 |
+| cid | num | 稿件 cid | 必要 | |
+| season_id | num | 番剧 season_id | 不必要 | |
+| ep_id | num | 剧集 ep_id | 不必要 | |
+| w_rid | str | WBI 签名 | 不必要 | |
+| wts | num | 当前 unix 时间戳 | 不必要 | |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------------------------- |
+| code | num | 返回值 | 0: 成功 -400: 请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ----- | -------- | ---- |
+| aid | num | 视频 aid | |
+| bvid | str | 视频 bvid | |
+| allow_bp | bool | | |
+| no_share | bool | 禁止分享? | |
+| cid | num | 视频 cid | |
+| dm_mask | obj | webmask 防挡字幕信息 | 若无则没有防挡功能 |
+| subtitle | obj | 字幕信息 | 若无则没有字幕, 若不登陆则为空 |
+| view_points | array | 分段章节信息 | |
+| ip_info | obj | 请求 IP 信息 | |
+| login_mid | num | 登录用户 mid | |
+| login_mid_hash | str | | |
+| is_owner | bool | 是否为该视频 UP 主 | |
+| name | str | | |
+| permission | num | | |
+| level_info | obj | 登录用户等级信息 | |
+| vip | obj | 登录用户 VIP 信息 | |
+| answer_status | num | 答题状态 | |
+| block_time | num | 封禁时间? | |
+| role | str | | |
+| last_play_time | num | 上次观看时间? | |
+| last_play_cid | num | 上次观看 cid? | |
+| now_time | num | 当前 UNIX 秒级时间戳 | |
+| online_count | num | 在线人数 | |
+| need_login_subtitle | bool | 是否必须登陆才能查看字幕 | 是的 |
+| preview_toast | str | `为创作付费,购买观看完整视频\|购买观看` | |
+| options | obj | | |
+| guide_attention | any | | |
+| jump_card | any | | |
+| operation_card | any | | |
+| online_switch | obj | | |
+| fawkes | obj | 播放器相关信息? | |
+| show_switch | obj | | |
+| bgm_info | obj | 背景音乐信息 | |
+| toast_block | bool | | |
+| is_upower_exclusive | bool | 是否为充电专属视频 | |
+| is_upower_play | bool | | |
+| is_ugc_pay_preview | bool | | |
+| elec_high_level | obj | 充电专属视频信息 | |
+| disable_show_up_info | bool | | |
+
+`data` 对象中的 `options` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | --- | --- |
+| is_360 | bool | 是否 360 全景视频 | |
+| without_vip | bool | | |
+
+`data` 对象中的 `bgm_info` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| music_id | str | 音乐 id | |
+| music_title | str | 音乐标题 | |
+| jump_url | str | 跳转 URL | |
+
+`data` 对象中的 `dm_mask` 对象 (如果有):
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ----- | -------- | ---- |
+|cid | num | 视频 cid | |
+|plat | num | 未知 | |
+|fps | num | webmask 取样 fps | |
+|time | num | 未知 | |
+|mask_url | str | webmask 资源 url | |
+
+解析 webmask 请看 [智能防挡弹幕](../danmaku/webmask.md)
+
+`data` 对象中的 `subtitle` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ----- | -------- | ---- |
+|allow_submit|bool | true | |
+| lan | str | "" | |
+|lan_doc | str | "" | |
+|subtitles| array | | 不登录为 `[]` |
+
+`subtitle` 对象中的 `subtitles` 数组内的元素:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ----- | -------- | ---- |
+| ai_status | num | | |
+| ai_type | num | | |
+| id | num | | |
+|id_str | str| | 和 id 不一样 |
+| is_lock | bool | | |
+| lan | str | 语言类型英文字母缩写 ||
+| lan_doc | str| 语言类型中文名称 | |
+|subtitle_url|str| 资源 url 地址 | |
+|type| num | 0 | |
+
+`data`对象中的`view_point` 数组内的元素:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------- | ----- | -------- | ---- |
+| content | str | 分段章节名 | |
+| from | num | 分段章节起始秒数 | |
+| to | num | 分段章节结束秒数 | |
+| type | num | | |
+| imgUrl | str | 图片资源地址 | |
+| logoUrl | str | "" | |
+| team_type | str | | |
+| team_name | str | | |
+
+`data`对象中的`elec_high_level`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | ---- | ------------------------------ | ---------------- |
+| privilege_type | num | 解锁视频所需最低定价档位的代码 | 见[充电档位代码与定价](../electric/monthly.md#充电档位代码privilege_type与定价) |
+| title | str | 提示标题 | `该视频为「{充电档位名称}」专属视频` |
+| sub_title | str | 提示子标题 | `开通「{充电档位定价}元档包月充电」即可观看` |
+| show_button | bool | 是否显示按钮 | |
+| button_text | str | 按钮文本 | `去开通` |
+| jump_url | obj | 跳转url信息 | 详细信息有待补充 |
+| intro | str | 充电介绍语 | |
+| open | bool | (?) | |
+| new | bool | (?) | |
+| question_text | str | (?) | |
+| qa_detail_link | str | (?) | |
+
+**示例:**
+
+未登录, `aid=1906473802`
+
+```shell
+curl -G 'https://api.bilibili.com/x/player/wbi/v2' \
+--url-query 'bvid=BV1MU411S7iJ' \
+--url-query 'aid=1906473802' \
+--url-query 'cid=1625992822'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "aid": 1906473802,
+ "bvid": "BV1MU411S7iJ",
+ "allow_bp": false,
+ "no_share": false,
+ "cid": 1625992822,
+ "max_limit": 1000,
+ "page_no": 1,
+ "has_next": false,
+ "ip_info": {
+ "ip": "104.28.152.138",
+ "zone_ip": " 10.163.150.25",
+ "zone_id": 29409280,
+ "country": "美国",
+ "province": "加利福尼亚州",
+ "city": "东洛杉矶"
+ },
+ "login_mid": 0,
+ "login_mid_hash": "",
+ "is_owner": false,
+ "name": "",
+ "permission": "0",
+ "level_info": {
+ "current_level": 0,
+ "current_min": 0,
+ "current_exp": 0,
+ "next_exp": 0,
+ "level_up": 0
+ },
+ "vip": {
+ "type": 0,
+ "status": 0,
+ "due_date": 0,
+ "vip_pay_type": 0,
+ "theme_type": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": "",
+ "use_img_label": false,
+ "img_label_uri_hans": "",
+ "img_label_uri_hant": "",
+ "img_label_uri_hans_static": "",
+ "img_label_uri_hant_static": ""
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "role": 0,
+ "avatar_subscript_url": "",
+ "tv_vip_status": 0,
+ "tv_vip_pay_type": 0,
+ "tv_due_date": 0,
+ "avatar_icon": {
+ "icon_resource": {}
+ }
+ },
+ "answer_status": 0,
+ "block_time": 0,
+ "role": "",
+ "last_play_time": 0,
+ "last_play_cid": 0,
+ "now_time": 1725002188,
+ "online_count": 1,
+ "need_login_subtitle": false,
+ "view_points": [],
+ "preview_toast": "为创作付费,购买观看完整视频|购买观看",
+ "options": {
+ "is_360": false,
+ "without_vip": false
+ },
+ "guide_attention": [],
+ "jump_card": [],
+ "operation_card": [],
+ "online_switch": {
+ "enable_gray_dash_playback": "500",
+ "new_broadcast": "1",
+ "realtime_dm": "1",
+ "subtitle_submit_switch": "1"
+ },
+ "fawkes": {
+ "config_version": 30787,
+ "ff_version": 21289
+ },
+ "show_switch": {
+ "long_progress": false
+ },
+ "bgm_info": {
+ "music_id": "MA436038343856245020",
+ "music_title": "Unwelcome school",
+ "jump_url": "https://music.bilibili.com/h5/music-detail?music_id=MA436038343856245020&cid=1625992822&aid=1906473802"
+ },
+ "toast_block": false,
+ "is_upower_exclusive": false,
+ "is_upower_play": false,
+ "is_ugc_pay_preview": false,
+ "elec_high_level": {
+ "privilege_type": 0,
+ "title": "",
+ "sub_title": "",
+ "show_button": false,
+ "button_text": "",
+ "jump_url": "",
+ "intro": "",
+ "new": false
+ },
+ "disable_show_up_info": false
+ }
+}
+```
+
+
+
+已登陆, `aid=60977932`
+
+```shell
+curl -G 'https://api.bilibili.com/x/player/v2' \
+--url-query 'aid=60977932' \
+--url-query 'cid=106101299' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "aid": 60977932,
+ "bvid": "BV1Jt411P77c",
+ "allow_bp": false,
+ "no_share": false,
+ "cid": 106101299,
+ "max_limit": 1000,
+ "page_no": 1,
+ "has_next": true,
+ "ip_info": {
+ "ip": "108.181.22.55",
+ "zone_ip": " 172.27.132.5",
+ "zone_id": 29409296,
+ "country": "美国",
+ "province": "加利福尼亚州",
+ "city": "洛杉矶"
+ },
+ "login_mid": 616368979,
+ "login_mid_hash": "445e7035",
+ "is_owner": false,
+ "name": "淡紫玲儿",
+ "permission": "10000,1001",
+ "level_info": {
+ "current_level": 3,
+ "current_min": 1500,
+ "current_exp": 2962,
+ "next_exp": 4500,
+ "level_up": -62135596800
+ },
+ "vip": {
+ "type": 1,
+ "status": 0,
+ "due_date": 1665417600000,
+ "vip_pay_type": 0,
+ "theme_type": 0,
+ "label": {
+ "path": "",
+ "text": "",
+ "label_theme": "",
+ "text_color": "",
+ "bg_style": 0,
+ "bg_color": "",
+ "border_color": "",
+ "use_img_label": true,
+ "img_label_uri_hans": "",
+ "img_label_uri_hant": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png"
+ },
+ "avatar_subscript": 0,
+ "nickname_color": "",
+ "role": 0,
+ "avatar_subscript_url": "",
+ "tv_vip_status": 0,
+ "tv_vip_pay_type": 0,
+ "tv_due_date": 0,
+ "avatar_icon": {
+ "icon_resource": {}
+ }
+ },
+ "answer_status": 0,
+ "block_time": 0,
+ "role": "0",
+ "last_play_time": 0,
+ "last_play_cid": 0,
+ "now_time": 1725003260,
+ "online_count": 1,
+ "need_login_subtitle": false,
+ "subtitle": {
+ "allow_submit": true,
+ "lan": "zh-CN",
+ "lan_doc": "中文(中国)",
+ "subtitles": [
+ {
+ "id": 13643112644608002,
+ "lan": "zh-Hans",
+ "lan_doc": "中文(简体)",
+ "is_lock": true,
+ "subtitle_url": "//aisubtitle.hdslb.com/bfs/subtitle/c49b18a284739d99df1e3723cdf72c0c82db98e0.json?auth_key=1725003260-5d0391a07f4f47f6960f60cf5045dff3-0-fc16c1f67a6b41edcb2a89d5e0c9bfdd",
+ "type": 0,
+ "id_str": "13643112644608002",
+ "ai_type": 0,
+ "ai_status": 0
+ },
+ {
+ "id": 13643200114196484,
+ "lan": "en-US",
+ "lan_doc": "英语(美国)",
+ "is_lock": true,
+ "subtitle_url": "//aisubtitle.hdslb.com/bfs/subtitle/2b38bc0f5d7671176964d4c3de441ed37568500c.json?auth_key=1725003260-5f709a74aa884751b77f86b6f6a48078-0-9b2fc3c18b99b1bf0cc7c7e63d18f686",
+ "type": 0,
+ "id_str": "13643200114196484",
+ "ai_type": 0,
+ "ai_status": 0
+ }
+ ]
+ },
+ "view_points": [],
+ "preview_toast": "为创作付费,购买观看完整视频|购买观看",
+ "options": {
+ "is_360": false,
+ "without_vip": false
+ },
+ "guide_attention": [],
+ "jump_card": [],
+ "operation_card": [],
+ "online_switch": {
+ "enable_gray_dash_playback": "500",
+ "new_broadcast": "1",
+ "realtime_dm": "1",
+ "subtitle_submit_switch": "1"
+ },
+ "fawkes": {
+ "config_version": 30787,
+ "ff_version": 21289
+ },
+ "show_switch": {
+ "long_progress": false
+ },
+ "bgm_info": null,
+ "toast_block": false,
+ "is_upower_exclusive": false,
+ "is_upower_play": false,
+ "is_ugc_pay_preview": false,
+ "elec_high_level": {
+ "privilege_type": 0,
+ "title": "",
+ "sub_title": "",
+ "show_button": false,
+ "button_text": "",
+ "jump_url": "",
+ "intro": "",
+ "new": false
+ },
+ "disable_show_up_info": false
+ }
+}
+```
+
+
+
+## 播放反馈
+
+> https://app.bilibili.com/x/resource/laser2
+
+*请求方式: POST*
+
+注: 该接口不传 Cookie
+
+**URL参数:**
+
+|参数名|类型|内容|必要性|备注|
+|-|-|-|-|-|
+|mid|num|当前用户 mid|不必要|未登录为空|
+|buvid|str|BUVID (APP) 或 buvid3 (Web)|必要|可为任意非空字符串|
+|app_key|str|APP 密钥|必要|Web: web_player 可为任意非空字符串|
+|url|str|日志 URL|非必要|从 [上传接口](../creativecenter/upload.md#上传接口) 得到的 upos 协议 URL|
+|task_type|num|任务类型|非必要|300: 播放卡顿 301: 进度条君无法调戏 354: 校园网无法访问 303: 弹幕无法显示 553: 跳过首尾时间有误 304: 出现浮窗广告 305: 无限小电视 302: 音画不同步 306: 黑屏 307: 其他|
+
+**JSON回复:**
+
+|字段|类型|内容|备注|
+|-|-|-|-|
+|code|num|返回值|0: 成功 -400: 请求错误|
+|message|str|错误信息|默认为 0|
+|ttl|num|1||
+|data|obj|数据本体| |
+
+`data` 对象:
+
+|字段|类型|内容|备注|
+|-|-|-|-|
+|task_id|num|任务 ID?||
+
+**示例:**
+
+播放反馈无限小电视, 不登录, 不传文件, buvid 为 `chenrui-in-icu`
+
+```shell
+curl -X POST "https://app.bilibili.com/x/resource/laser2" \
+--data-urlencode "buvid=chenrui-in-icu" \
+--data-urlencode "app_key=web_player" \
+--data-urlencode "task_type=305"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "task_id": 850448532
+ }
+}
+```
+
+
diff --git a/docs/video/recommend.md b/docs/video/recommend.md
new file mode 100644
index 0000000..c7dea12
--- /dev/null
+++ b/docs/video/recommend.md
@@ -0,0 +1,1639 @@
+# 视频推荐
+
+## 获取单视频推荐列表(web端)
+
+> https://api.bilibili.com/x/web-interface/archive/related
+
+*请求方式:GET*
+
+最多获取40条推荐视频
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------------ | ------------------ |
+| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
+| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ------ | -------- | ---------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | array | 推荐列表 | |
+
+`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------- | ---- |
+| 0 | obj | 推荐视频1 | |
+| n | obj | 推荐视频(n+1) | |
+| …… | obj | …… | …… |
+| 39 | obj | 推荐视频40 | |
+
+`data`数组中的对象:
+
+基本同「[获取视频详细信息(web端)](info.md#获取视频详细信息(web端))」中的data对象,已知没有分P信息
+
+**示例:**
+
+查询视频`av7`/`BV1xx411c7m9`的推荐视频列表
+
+avid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/archive/related' \
+--data-urlencode 'aid=7'
+```
+
+bvid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/archive/related' \
+--data-urlencode 'bvid=BV1xx411c7m9'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [{
+ "aid": 21322566,
+ "videos": 1,
+ "tid": 124,
+ "tname": "趣味科普人文",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/37f383ac35d386af1fc578108ad643e5952ff66a.jpg",
+ "title": "bilibili上市宣传视频",
+ "pubdate": 1522205992,
+ "ctime": 1522205994,
+ "desc": "今天晚上9点30分(北京时间),bilibili将在美国纳斯达克(NASDAQ)证券交易所挂牌上市。",
+ "state": 0,
+ "attribute": 16768,
+ "duration": 155,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0
+ },
+ "owner": {
+ "mid": 208259,
+ "name": "陈睿",
+ "face": "http://i2.hdslb.com/bfs/face/8920e6741fc2808cce5b81bc27abdbda291655d3.png"
+ },
+ "stat": {
+ "aid": 21322566,
+ "view": 2129084,
+ "danmaku": 51108,
+ "reply": 18119,
+ "favorite": 46524,
+ "coin": 85223,
+ "share": 16669,
+ "now_rank": 0,
+ "his_rank": 1,
+ "like": 95621,
+ "dislike": 0
+ },
+ "dynamic": "今天晚上9点30分(北京时间),bilibili将在美国纳斯达克(NASDAQ)证券交易所挂牌上市。",
+ "cid": 35063529,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "bvid": ""
+ }, {
+ "aid": 271,
+ "videos": 1,
+ "tid": 53,
+ "tname": "",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/a5980672f3d03e8292148748a63de99cd45679d3.jpg",
+ "title": "弹幕测试专用",
+ "pubdate": 1249886475,
+ "ctime": 1497344798,
+ "desc": "给职人发射弹幕定位用.",
+ "state": 0,
+ "attribute": 32768,
+ "duration": 4558,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0
+ },
+ "owner": {
+ "mid": 2,
+ "name": "碧诗",
+ "face": "http://i1.hdslb.com/bfs/face/3e60b20604b6fdc7d081eb6a1ec72aa47c5a3964.jpg"
+ },
+ "stat": {
+ "aid": 271,
+ "view": 2532266,
+ "danmaku": 699214,
+ "reply": 10224,
+ "favorite": 34927,
+ "coin": 9712,
+ "share": 3586,
+ "now_rank": 0,
+ "his_rank": 182,
+ "like": 27257,
+ "dislike": 0
+ },
+ "dynamic": "",
+ "cid": 3659795,
+ "dimension": {
+ "width": 0,
+ "height": 0,
+ "rotate": 0
+ },
+ "bvid": ""
+ }, {
+ "aid": 106,
+ "videos": 1,
+ "tid": 26,
+ "tname": "音MAD",
+ "copyright": 2,
+ "pic": "http://i2.hdslb.com/bfs/archive/34d8fdf08d1fe28c229dec2fd122815a1d012908.jpg",
+ "title": "最终鬼畜蓝蓝路",
+ "pubdate": 1350316631,
+ "ctime": 1497348932,
+ "desc": "sm2057168 把这个音mad的图腾和支柱从UP的怒火中搬出来重新立好,这是我所能做的最后的事情了。",
+ "state": 0,
+ "attribute": 32768,
+ "duration": 318,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0
+ },
+ "owner": {
+ "mid": 8839,
+ "name": "TSA",
+ "face": "http://i0.hdslb.com/bfs/face/0ef5daf622bf4789034b3c15147a45e11c48c9b3.jpg"
+ },
+ "stat": {
+ "aid": 106,
+ "view": 7607070,
+ "danmaku": 212896,
+ "reply": 41521,
+ "favorite": 200705,
+ "coin": 51673,
+ "share": 38049,
+ "now_rank": 0,
+ "his_rank": 22,
+ "like": 148550,
+ "dislike": 0
+ },
+ "dynamic": "",
+ "cid": 3635863,
+ "dimension": {
+ "width": 0,
+ "height": 0,
+ "rotate": 0
+ },
+ "bvid": ""
+ }, {
+ "aid": 50025934,
+ "videos": 1,
+ "tid": 122,
+ "tname": "野生技术协会",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/af534399612085dbd916381b3377b18c765fab2d.png",
+ "title": "B站又一位Lv9的up诞生了",
+ "pubdate": 1555829289,
+ "ctime": 1555829289,
+ "desc": "要不关注一下?",
+ "state": 0,
+ "attribute": 16512,
+ "duration": 45,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0
+ },
+ "owner": {
+ "mid": 174161216,
+ "name": "血色红茶Xenomprph",
+ "face": "http://i1.hdslb.com/bfs/face/5a5ececb9b7a688751024c60063ba5853bed7e1e.jpg"
+ },
+ "stat": {
+ "aid": 50025934,
+ "view": 159595,
+ "danmaku": 62,
+ "reply": 153,
+ "favorite": 301,
+ "coin": 1059,
+ "share": 55,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 1219,
+ "dislike": 0
+ },
+ "dynamic": "",
+ "cid": 87577929,
+ "dimension": {
+ "width": 2560,
+ "height": 1440,
+ "rotate": 0
+ },
+ "bvid": ""
+ },
+ …………
+ ]
+}
+```
+
+
+
+
+## 获取首页视频推荐列表(web端)
+
+> https://api.bilibili.com/x/web-interface/wbi/index/top/feed/rcmd
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+最多获取30条推荐视频,直播及推荐边栏
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|---------------|------|------------------------|--------|-------------------------------------------------------|
+| fresh_type | num | 相关性 | 非必要 | 默认为 4 值越大推荐内容越相关 |
+| ps | num | 单页返回的记录条数 | 非必要 | 默认为 12, 留空即最大值为 30 |
+| fresh_idx | num | 当前翻页号 | 非必要 | 以 1 开始 |
+| fresh_idx_1h | num | 当前翻页号(一小时前?) | 非必要 | 以 1 开始, 默认与 fresh_idx 内容相同 |
+| brush | num | 刷子? | 非必要 | 以 1 开始, 默认与 fresh_idx 内容相同 |
+| fetch_row | num | 本次抓取的最后一行行号 | 非必要 | 1 递归加上本次抓取总行数 |
+| web_location | num | 网页位置 | 非必要 | 主页为 1430650 |
+| y_num | num | 普通列数 | 非必要 | 一行中视频,直播及广告数 |
+| last_y_num | num | 总列数 | 非必要 | 普通列数 + 边栏列数 |
+| feed_version | str | V8 | 非必要 | 作用尚不明确 |
+| homepage_ver | num | 1 | 非必要 | 首页版本 |
+| screen | str | 浏览器视口大小 | 非必要 | 水平在前垂直在后以减号分割 |
+| seo_info | str | 空 | 非必要 | 作用尚不明确 |
+| last_showlist | str | 上次抓取的视频av号列表 | 非必要 | av与数字间用下划线分隔, 若视频UP主已关注则中间再插入n |
+| uniq_id | str | ??? | 非必要 | 作用尚不明确 |
+| w_rid | str | WBI 签名 | 非必要 | 见[WBI 签名](../misc/sign/wbi.md) |
+| wts | num | UNIX 时间戳 | 非必要 | 见[WBI 签名](../misc/sign/wbi.md) |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------|------|----------|------------------------------|
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------------------------|-------|-----------|--------------------------------|
+| business_card | null | | |
+| floor_info | null | | |
+| item | array | 推荐列表 | |
+| mid | num | 用户mid | 未登录为0 |
+| preload_expose_pct | num | 0.5 | 用于预加载? |
+| preload_floor_expose_pct | num | 0.5 | 用于预加载? |
+| side_bar_column | array | 边栏列表? | 可参考字段 item 及对应功能文档 |
+| user_feature | null | | |
+
+`data`对象中`item`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------------------------|------|--------------------|-------------------------------------------|
+| av_feature | null | | |
+| business_info | obj | 商业推广信息 | 无为null 对于推广内容,视频信息会在这个dict的"archive"属性下 |
+| bvid | str | 视频bvid | |
+| cid | num | 稿件cid | |
+| dislike_switch | num | 1 | 显示不感兴趣开关? |
+| dislike_switch_pc | num | 0 | 显示不感兴趣开关(PC)? |
+| duraion | num | 视频时长 | |
+| enable_vt | num | 0 | 作用尚不明确 |
+| goto | num | 目标类型 | av: 视频 ogv: 边栏 live: 直播 |
+| duraion | num | 视频时长 | |
+| id | num | 视频aid / 直播间id | |
+| is_followed | num | 已关注 | 0: 未关注 1: 已关注 |
+| is_stock | num | 0 | 作用尚不明确 |
+| ogv_info | null | | |
+| owner | obj | UP主 | |
+| pic | str | 封面 | |
+| pic_4_3 | str | 封面(4:3) | |
+| pos | num | 0 | 位置? |
+| pubdate | num | 发布时间 | |
+| rcmd_reason | obj | 推荐理由 | 直播等为null |
+| room_info | obj | 直播间信息 | 普通视频等为null, 参见[直播](../live) |
+| show_info | num | 展示信息 | 1: 普通视频 0: 直播 |
+| stat | obj | 视频状态信息 | 直播等为null, 参见[视频基本信息](info.md) |
+| title | str | 标题 | |
+| track_id | str | 跟踪标识? | |
+| uri | str | 目标页 URI | |
+| vt_display | str | 空 | 作用尚不明确 |
+
+`item`数组中的对象中的`owner`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|------|------|---------|-------|
+| face | str | 头像URL | |
+| mid | num | UP主mid | |
+| name | str | UP昵称 | |
+
+`item`数组中的对象中的`rcmd_reason`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------|------|---------|--------------------------------------|
+| reason_type | num | 原因类型 | 0: 无 1: 已关注 3: 高点赞量 |
+| content | str | 原因描述 | 当 reason_type 为 3 时存在 |
+
+**示例:**
+
+获取新版web端首页推荐视频列表
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/wbi/index/top/feed/rcmd' \
+--data-urlencode 'fresh_type=4' \
+--data-urlencode 'ps=12' \
+--data-urlencode 'fresh_idx=5' \
+--data-urlencode 'fresh_idx_1h=5' \
+--data-urlencode 'fetch_row=16'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "item": [
+ {
+ "id": 1354614895,
+ "bvid": "BV1Dz42117GZ",
+ "cid": 1548835687,
+ "goto": "av",
+ "uri": "https://www.bilibili.com/video/BV1Dz42117GZ",
+ "pic": "http://i1.hdslb.com/bfs/archive/b47154987b4c0f40a39779c09a9d485176d1238f.jpg",
+ "pic_4_3": "http://i0.hdslb.com/bfs/archive/b47154987b4c0f40a39779c09a9d485176d1238f.jpg",
+ "title": "做数学题总是抄错 | 看错 | 算错 怎么破?决定高考分数的这个非智力因素不容忽视",
+ "duration": 882,
+ "pubdate": 1715946937,
+ "owner": {
+ "mid": 374484802,
+ "name": "数学阮禾老师",
+ "face": "https://i1.hdslb.com/bfs/face/4df57e4b48b04206bce7572831688741580ca0e1.jpg"
+ },
+ "stat": {
+ "view": 48250,
+ "like": 2959,
+ "danmaku": 433,
+ "vt": 0
+ },
+ "av_feature": null,
+ "is_followed": 0,
+ "rcmd_reason": {
+ "reason_type": 0
+ },
+ "show_info": 1,
+ "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133",
+ "pos": 0,
+ "room_info": null,
+ "ogv_info": null,
+ "business_info": null,
+ "is_stock": 0,
+ "enable_vt": 0,
+ "vt_display": "",
+ "dislike_switch": 1,
+ "dislike_switch_pc": 0
+ },
+ {
+ "id": 1255924089,
+ "bvid": "BV1DJ4m1u7Mp",
+ "cid": 1600833978,
+ "goto": "av",
+ "uri": "https://www.bilibili.com/video/BV1DJ4m1u7Mp",
+ "pic": "http://i0.hdslb.com/bfs/archive/5068d860e8bbc37679ece933aa8e6d8428cfb5c1.jpg",
+ "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-07-01-1145021255924089_1612_gener.jpg",
+ "title": "人类这种生物,看到按钮就会按下去。",
+ "duration": 326,
+ "pubdate": 1719805500,
+ "owner": {
+ "mid": 5616993,
+ "name": "马夫鱼33",
+ "face": "https://i0.hdslb.com/bfs/face/4c2af23046147e91ce5a4af3375464fdcf1956e6.jpg"
+ },
+ "stat": {
+ "view": 667067,
+ "like": 28529,
+ "danmaku": 483,
+ "vt": 0
+ },
+ "av_feature": null,
+ "is_followed": 0,
+ "rcmd_reason": {
+ "content": "2万点赞",
+ "reason_type": 3
+ },
+ "show_info": 1,
+ "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133",
+ "pos": 0,
+ "room_info": null,
+ "ogv_info": null,
+ "business_info": null,
+ "is_stock": 0,
+ "enable_vt": 0,
+ "vt_display": "",
+ "dislike_switch": 1,
+ "dislike_switch_pc": 0
+ },
+ {
+ "id": 1306020278,
+ "bvid": "BV1rM4m117Ry",
+ "cid": 1608959606,
+ "goto": "av",
+ "uri": "https://www.bilibili.com/video/BV1rM4m117Ry",
+ "pic": "http://i0.hdslb.com/bfs/archive/49f62c70f17d0afe00e5e620dd366c68149c780e.jpg",
+ "pic_4_3": "http://i0.hdslb.com/bfs/archive/49f62c70f17d0afe00e5e620dd366c68149c780e.jpg",
+ "title": "Axios 前后端对接教程|HTTP",
+ "duration": 352,
+ "pubdate": 1720440325,
+ "owner": {
+ "mid": 260736087,
+ "name": "三分钟实验室",
+ "face": "https://i0.hdslb.com/bfs/face/6172aa089ed0b26ffffb72018422eb4280d4da41.jpg"
+ },
+ "stat": {
+ "view": 7527,
+ "like": 365,
+ "danmaku": 1,
+ "vt": 0
+ },
+ "av_feature": null,
+ "is_followed": 0,
+ "rcmd_reason": {
+ "reason_type": 0
+ },
+ "show_info": 1,
+ "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133",
+ "pos": 0,
+ "room_info": null,
+ "ogv_info": null,
+ "business_info": null,
+ "is_stock": 0,
+ "enable_vt": 0,
+ "vt_display": "",
+ "dislike_switch": 1,
+ "dislike_switch_pc": 0
+ },
+ {
+ "id": 1755972439,
+ "bvid": "BV1g4421D7qn",
+ "cid": 1597039275,
+ "goto": "av",
+ "uri": "https://www.bilibili.com/video/BV1g4421D7qn",
+ "pic": "http://i2.hdslb.com/bfs/archive/35ee2ffaab4206d17893a3f48cdf512b4f028fdc.jpg",
+ "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-06-26-21354756381755972439_16_12_5326_crop.jpg",
+ "title": "《我爱发明》里那些抽象发明 歹徒兴奋床!",
+ "duration": 659,
+ "pubdate": 1719408945,
+ "owner": {
+ "mid": 348989367,
+ "name": "沫子瞪片",
+ "face": "https://i0.hdslb.com/bfs/face/a2131d38a2ea73f16ff25e61dbeb40377233f552.jpg"
+ },
+ "stat": {
+ "view": 1540767,
+ "like": 65409,
+ "danmaku": 5383,
+ "vt": 0
+ },
+ "av_feature": null,
+ "is_followed": 0,
+ "rcmd_reason": {
+ "reason_type": 0
+ },
+ "show_info": 1,
+ "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133",
+ "pos": 0,
+ "room_info": null,
+ "ogv_info": null,
+ "business_info": null,
+ "is_stock": 0,
+ "enable_vt": 0,
+ "vt_display": "",
+ "dislike_switch": 1,
+ "dislike_switch_pc": 0
+ },
+ {
+ "id": 1055953358,
+ "bvid": "BV1jH4y1w7A6",
+ "cid": 1598484848,
+ "goto": "av",
+ "uri": "https://www.bilibili.com/video/BV1jH4y1w7A6",
+ "pic": "http://i1.hdslb.com/bfs/archive/accdb655b4f2bef665e6fdedb4de28de2feda078.jpg",
+ "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-06-28-12560692491055953358_16_12_2438_crop.jpg",
+ "title": "为什么一个数的5次方个位数是自己!",
+ "duration": 327,
+ "pubdate": 1719550565,
+ "owner": {
+ "mid": 483522694,
+ "name": "火星课堂",
+ "face": "https://i1.hdslb.com/bfs/face/fe751f0d7062c8e8adcef501390d48330fac0514.jpg"
+ },
+ "stat": {
+ "view": 244673,
+ "like": 5406,
+ "danmaku": 210,
+ "vt": 0
+ },
+ "av_feature": null,
+ "is_followed": 0,
+ "rcmd_reason": {
+ "reason_type": 0
+ },
+ "show_info": 1,
+ "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133",
+ "pos": 0,
+ "room_info": null,
+ "ogv_info": null,
+ "business_info": {
+ "id": 0,
+ "contract_id": "",
+ "res_id": 1055953358,
+ "asg_id": 0,
+ "pos_num": 0,
+ "name": "",
+ "pic": "",
+ "litpic": "",
+ "url": "",
+ "style": 0,
+ "agency": "",
+ "label": "",
+ "intro": "",
+ "creative_type": 0,
+ "request_id": "1721098961752q172a25a216a162q1363",
+ "src_id": 5637,
+ "area": 0,
+ "is_ad_loc": true,
+ "ad_cb": "",
+ "title": "",
+ "server_type": 0,
+ "cm_mark": 0,
+ "stime": 0,
+ "mid": "",
+ "activity_type": 0,
+ "epid": 0,
+ "sub_title": "",
+ "ad_desc": "",
+ "adver_name": "",
+ "null_frame": false,
+ "pic_main_color": "",
+ "card_type": 0,
+ "business_mark": null,
+ "inline": {
+ "inline_use_same": 0,
+ "inline_type": 0,
+ "inline_url": "",
+ "inline_barrage_switch": 0
+ },
+ "operater": "",
+ "jump_target": 0,
+ "show_urls": null,
+ "click_urls": null
+ },
+ "is_stock": 1,
+ "enable_vt": 0,
+ "vt_display": "",
+ "dislike_switch": 1,
+ "dislike_switch_pc": 0
+ },
+ {
+ "id": 1763571437,
+ "bvid": "",
+ "cid": 0,
+ "goto": "live",
+ "uri": "https://live.bilibili.com/1763571437",
+ "pic": "http://i0.hdslb.com/bfs/live/new_room_cover/f1787ef2ce4a2a031fb4a6a63b62d15493268d71.jpg",
+ "pic_4_3": "",
+ "title": "【新V】今天不要再把自己笨哭了",
+ "duration": 0,
+ "pubdate": 0,
+ "owner": {
+ "mid": 3546712666802274,
+ "name": "伊柒璇儿_鹤熙冠",
+ "face": "https://i0.hdslb.com/bfs/face/3e0ff3d7d53b9ac1a2d90ea563e22d3f70ad28cc.jpg"
+ },
+ "stat": null,
+ "av_feature": null,
+ "is_followed": 0,
+ "rcmd_reason": null,
+ "show_info": 0,
+ "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133",
+ "pos": 0,
+ "room_info": {
+ "room_id": 1763571437,
+ "uid": 3546712666802274,
+ "live_status": 1,
+ "show": {
+ "short_id": 0,
+ "title": "【新V】今天不要再把自己笨哭了",
+ "cover": "http://i0.hdslb.com/bfs/live/new_room_cover/f1787ef2ce4a2a031fb4a6a63b62d15493268d71.jpg",
+ "keyframe": "http://i0.hdslb.com/bfs/live-key-frame/keyframe07161101001763571437k9l40v.jpg",
+ "popularity_count": 8539,
+ "tag_list": null,
+ "live_start_time": 0,
+ "live_id": 0,
+ "hidden_online": false
+ },
+ "area": {
+ "area_id": 0,
+ "area_name": "虚拟日常",
+ "parent_area_id": 9,
+ "parent_area_name": "虚拟主播",
+ "old_area_id": 0,
+ "old_area_name": "",
+ "old_area_tag": "",
+ "area_pk_status": 0,
+ "is_video_room": false
+ },
+ "watched_show": {
+ "switch": true,
+ "num": 168,
+ "text_small": "168",
+ "text_large": "168人看过",
+ "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
+ "icon_location": "",
+ "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png"
+ }
+ },
+ "ogv_info": null,
+ "business_info": null,
+ "is_stock": 0,
+ "enable_vt": 0,
+ "vt_display": "",
+ "dislike_switch": 1,
+ "dislike_switch_pc": 0
+ },
+ {
+ "id": 1855792572,
+ "bvid": "BV16s421T7CU",
+ "cid": 1587596195,
+ "goto": "av",
+ "uri": "https://www.bilibili.com/video/BV16s421T7CU",
+ "pic": "http://i2.hdslb.com/bfs/archive/1b9d9799260a075b094212bf79e3d7ccb9e04087.jpg",
+ "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-06-19-14044883851855792572_16_12_7260_crop.jpg",
+ "title": "压缩蚊件.zip",
+ "duration": 66,
+ "pubdate": 1718777086,
+ "owner": {
+ "mid": 173947574,
+ "name": "好奇五先生",
+ "face": "https://i2.hdslb.com/bfs/face/1c69fff12a2d0d50e71931cef0486ab919a818a2.jpg"
+ },
+ "stat": {
+ "view": 951633,
+ "like": 22930,
+ "danmaku": 932,
+ "vt": 0
+ },
+ "av_feature": null,
+ "is_followed": 0,
+ "rcmd_reason": {
+ "reason_type": 0
+ },
+ "show_info": 1,
+ "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133",
+ "pos": 0,
+ "room_info": null,
+ "ogv_info": null,
+ "business_info": null,
+ "is_stock": 0,
+ "enable_vt": 0,
+ "vt_display": "",
+ "dislike_switch": 1,
+ "dislike_switch_pc": 0
+ },
+ {
+ "id": 1405866842,
+ "bvid": "BV11r421F7E8",
+ "cid": 1589772517,
+ "goto": "av",
+ "uri": "https://www.bilibili.com/video/BV11r421F7E8",
+ "pic": "http://i2.hdslb.com/bfs/archive/50b1bb8d227d17a3b6195e80128ab295d152d3be.jpg",
+ "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-06-20-2148551405866842_1612_gener.jpg",
+ "title": "【音游推荐】暑期音游推荐,不同基础都可入坑",
+ "duration": 311,
+ "pubdate": 1718891332,
+ "owner": {
+ "mid": 592146708,
+ "name": "Qc天水",
+ "face": "https://i0.hdslb.com/bfs/face/2998a9e762aa07559b2acf54234f07979c959ffe.jpg"
+ },
+ "stat": {
+ "view": 278997,
+ "like": 6698,
+ "danmaku": 303,
+ "vt": 0
+ },
+ "av_feature": null,
+ "is_followed": 0,
+ "rcmd_reason": {
+ "reason_type": 0
+ },
+ "show_info": 1,
+ "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133",
+ "pos": 0,
+ "room_info": null,
+ "ogv_info": null,
+ "business_info": null,
+ "is_stock": 0,
+ "enable_vt": 0,
+ "vt_display": "",
+ "dislike_switch": 1,
+ "dislike_switch_pc": 0
+ },
+ {
+ "id": 1055540151,
+ "bvid": "BV1in4y197U4",
+ "cid": 1582190043,
+ "goto": "av",
+ "uri": "https://www.bilibili.com/video/BV1in4y197U4",
+ "pic": "http://i2.hdslb.com/bfs/archive/9a366971fadd6e4dfd1813c42b180c8779038627.jpg",
+ "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-06-15-18004087071055540151_16_12_7856_crop.jpg",
+ "title": "我把裁判罚下场了",
+ "duration": 217,
+ "pubdate": 1718445600,
+ "owner": {
+ "mid": 475304452,
+ "name": "生姜蛋包饭",
+ "face": "https://i1.hdslb.com/bfs/face/40feee36c71f7f53931854fc54c88d530360b1a7.jpg"
+ },
+ "stat": {
+ "view": 678085,
+ "like": 62171,
+ "danmaku": 832,
+ "vt": 0
+ },
+ "av_feature": null,
+ "is_followed": 0,
+ "rcmd_reason": {
+ "content": "6万点赞",
+ "reason_type": 3
+ },
+ "show_info": 1,
+ "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133",
+ "pos": 0,
+ "room_info": null,
+ "ogv_info": null,
+ "business_info": null,
+ "is_stock": 0,
+ "enable_vt": 0,
+ "vt_display": "",
+ "dislike_switch": 1,
+ "dislike_switch_pc": 0
+ },
+ {
+ "id": 1505823466,
+ "bvid": "BV1vS421d7No",
+ "cid": 1596567774,
+ "goto": "av",
+ "uri": "https://www.bilibili.com/video/BV1vS421d7No",
+ "pic": "http://i2.hdslb.com/bfs/archive/b2b19b067cdbf7dd93be5fc01009e72c20572184.jpg",
+ "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-06-26-1241021505823466_1612_gener.jpg",
+ "title": "AI 视频:两小儿辩日",
+ "duration": 138,
+ "pubdate": 1719376858,
+ "owner": {
+ "mid": 589397373,
+ "name": "宝玉xp",
+ "face": "https://i0.hdslb.com/bfs/face/c2c29f6e1bb9b0860241f0df4d2cdea8242ab5d2.jpg"
+ },
+ "stat": {
+ "view": 1216188,
+ "like": 54839,
+ "danmaku": 194,
+ "vt": 0
+ },
+ "av_feature": null,
+ "is_followed": 0,
+ "rcmd_reason": {
+ "reason_type": 0
+ },
+ "show_info": 1,
+ "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133",
+ "pos": 0,
+ "room_info": null,
+ "ogv_info": null,
+ "business_info": null,
+ "is_stock": 0,
+ "enable_vt": 0,
+ "vt_display": "",
+ "dislike_switch": 1,
+ "dislike_switch_pc": 0
+ },
+ {
+ "id": 1055744039,
+ "bvid": "BV1Zn4y1Q7zj",
+ "cid": 1575814128,
+ "goto": "av",
+ "uri": "https://www.bilibili.com/video/BV1Zn4y1Q7zj",
+ "pic": "http://i0.hdslb.com/bfs/archive/5288cf0830e49de414084c4168b11033b08f8507.jpg",
+ "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-06-09-17404720501055744039_16_12_294_crop.jpg",
+ "title": "【诺子】重新“看见”世界是一种什么样的感觉?",
+ "duration": 579,
+ "pubdate": 1717926045,
+ "owner": {
+ "mid": 10276136,
+ "name": "诺子喵呜",
+ "face": "https://i2.hdslb.com/bfs/face/7e6846ed5619b945c888b8f8db5000469f6353ff.jpg"
+ },
+ "stat": {
+ "view": 1016467,
+ "like": 97886,
+ "danmaku": 979,
+ "vt": 0
+ },
+ "av_feature": null,
+ "is_followed": 0,
+ "rcmd_reason": {
+ "reason_type": 0
+ },
+ "show_info": 1,
+ "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133",
+ "pos": 0,
+ "room_info": null,
+ "ogv_info": null,
+ "business_info": null,
+ "is_stock": 0,
+ "enable_vt": 0,
+ "vt_display": "",
+ "dislike_switch": 1,
+ "dislike_switch_pc": 0
+ },
+ {
+ "id": 1706215690,
+ "bvid": "BV1tT421k7By",
+ "cid": 1611364587,
+ "goto": "av",
+ "uri": "https://www.bilibili.com/video/BV1tT421k7By",
+ "pic": "http://i1.hdslb.com/bfs/archive/cd3308109e8726fe4147dd25ed7ca0dbeeda1dc1.jpg",
+ "pic_4_3": "http://i0.hdslb.com/bfs/aistory/2024-07-11-00194836761706215690_16_12_3934_crop.jpg",
+ "title": "谷歌翻译20遍《河中石兽》泌尿系统",
+ "duration": 145,
+ "pubdate": 1720628387,
+ "owner": {
+ "mid": 1030835113,
+ "name": "象哥嘎",
+ "face": "https://i1.hdslb.com/bfs/face/aa0ae89fa72dab7b8bc082433769b1768f51c3dc.jpg"
+ },
+ "stat": {
+ "view": 78600,
+ "like": 3437,
+ "danmaku": 328,
+ "vt": 0
+ },
+ "av_feature": null,
+ "is_followed": 0,
+ "rcmd_reason": {
+ "reason_type": 0
+ },
+ "show_info": 1,
+ "track_id": "web_pegasus_4.router-web-pegasus-1554782-5c89895477-smhn8.1721098961744.133",
+ "pos": 0,
+ "room_info": null,
+ "ogv_info": null,
+ "business_info": null,
+ "is_stock": 0,
+ "enable_vt": 0,
+ "vt_display": "",
+ "dislike_switch": 1,
+ "dislike_switch_pc": 0
+ }
+ ],
+ "side_bar_column": [
+ {
+ "id": 25502,
+ "goto": "comic",
+ "track_id": "",
+ "pos": 1,
+ "card_type": "漫画",
+ "card_type_en": "comic",
+ "cover": "http://i0.hdslb.com/bfs/manga-static/5e410bf6f73ff87f87b543e4b918de5f024652e8.jpg",
+ "url": "https://manga.bilibili.com/detail/mc25502",
+ "title": "头文字D",
+ "sub_title": "",
+ "duration": 0,
+ "stats": null,
+ "room_info": null,
+ "styles": [
+ "游戏竞技"
+ ],
+ "comic": {
+ "comic_id": 25502,
+ "title": "头文字D",
+ "horizontal_cover": "http://i0.hdslb.com/bfs/manga-static/5e410bf6f73ff87f87b543e4b918de5f024652e8.jpg",
+ "square_cover": "http://i0.hdslb.com/bfs/manga-static/da660f6274730af82d557f21a6247d4f6b1e300b.jpg",
+ "vertical_cover": "http://i0.hdslb.com/bfs/manga-static/64df8b860d2bf6bf2edd0426b4aefbff25b51386.jpg",
+ "is_finish": 1,
+ "status": 0,
+ "last_ord": 724,
+ "total": 724,
+ "release_time": "",
+ "last_short_title": "番外05",
+ "discount_type": 0,
+ "recommendation": "秋名山下坡最快的AE86神话!",
+ "last_read_ep_id": 0,
+ "latest_ep_short_title": "",
+ "style": [
+ "游戏竞技"
+ ],
+ "author_name": [
+ "重野秀一 ",
+ "讲谈社"
+ ],
+ "allow_wait_free": false,
+ "type": 0,
+ "rank": null,
+ "operate_cover": "",
+ "rookie_type": 0
+ },
+ "producer": null,
+ "source": "",
+ "av_feature": null,
+ "is_rec": 0,
+ "is_finish": 0,
+ "is_started": 0,
+ "is_play": 0,
+ "enable_vt": 0,
+ "vt_display": ""
+ },
+ {
+ "id": 47800,
+ "goto": "ogv",
+ "track_id": "",
+ "pos": 2,
+ "card_type": "番剧",
+ "card_type_en": "bangumi",
+ "cover": "https://i0.hdslb.com/bfs/bangumi/image/1c61f75b571fffb8c5a2bd0396b49ce3529776f4.png",
+ "url": "https://www.bilibili.com/bangumi/play/ss47800",
+ "title": "铁甲小宝 重制版 中文配音",
+ "sub_title": "童年经典回归!",
+ "duration": 1382000,
+ "stats": {
+ "follow": 116644,
+ "view": 10864687,
+ "danmaku": 42428,
+ "reply": 11448,
+ "coin": 18904,
+ "series_follow": 209046,
+ "series_view": 17474247,
+ "likes": 61376,
+ "favorite": 116644
+ },
+ "room_info": null,
+ "new_ep": {
+ "id": 824212,
+ "index_show": "更新至第30话",
+ "cover": "http://i0.hdslb.com/bfs/archive/e185c054588945a1de6648ff7fb5001852df39f4.png",
+ "title": "30",
+ "long_title": "巨大机器来袭!!",
+ "pub_time": "2024-07-15 18:00:01",
+ "duration": 1382000,
+ "day_of_week": 1
+ },
+ "styles": [
+ "日常",
+ "热血",
+ "搞笑",
+ "原创",
+ "特摄"
+ ],
+ "comic": null,
+ "producer": [
+ {
+ "mid": 928123,
+ "name": "哔哩哔哩番剧",
+ "type": 3,
+ "is_contribute": 1
+ }
+ ],
+ "source": "",
+ "av_feature": null,
+ "is_rec": 0,
+ "is_finish": 0,
+ "is_started": 1,
+ "is_play": 1,
+ "horizontal_cover_16_9": "https://i0.hdslb.com/bfs/bangumi/image/ec5065dc0e88417abd4792d5caa96dacc99d1d51.png",
+ "horizontal_cover_16_10": "https://i0.hdslb.com/bfs/bangumi/image/5cc132e336cc72e6521bba928d8a0e50bd5a6d34.png",
+ "enable_vt": 0,
+ "vt_display": ""
+ },
+ {
+ "id": 48020,
+ "goto": "ogv",
+ "track_id": "",
+ "pos": 3,
+ "card_type": "国创",
+ "card_type_en": "guochuang",
+ "cover": "https://i0.hdslb.com/bfs/bangumi/image/fcb176fcbf5a66fd122fa99f9fdf2cabf22468bb.png",
+ "url": "https://www.bilibili.com/bangumi/play/ss48020",
+ "title": "不白吃古诗词漫游记 第二季",
+ "sub_title": "古诗词这动人的浪漫",
+ "duration": 179000,
+ "stats": {
+ "follow": 2173495,
+ "view": 325366,
+ "danmaku": 110,
+ "reply": 208,
+ "coin": 443,
+ "series_follow": 2208624,
+ "series_view": 3322752487,
+ "likes": 8794,
+ "favorite": 2173495
+ },
+ "room_info": null,
+ "new_ep": {
+ "id": 830238,
+ "index_show": "更新至第7话",
+ "cover": "http://i0.hdslb.com/bfs/archive/6db74bc8ab2670181562314a24abe525cebb7c76.jpg",
+ "title": "7",
+ "long_title": "王维当个官怎么还郁闷了?",
+ "pub_time": "2024-07-15 19:00:00",
+ "duration": 179000,
+ "day_of_week": 1
+ },
+ "styles": [
+ "少儿",
+ "历史",
+ "原创",
+ "古风"
+ ],
+ "comic": null,
+ "producer": [],
+ "source": "",
+ "av_feature": null,
+ "is_rec": 0,
+ "is_finish": 0,
+ "is_started": 1,
+ "is_play": 1,
+ "horizontal_cover_16_9": "https://i0.hdslb.com/bfs/bangumi/image/f19013ddd7f87b0e03df10feccc4a61a3a43774a.png",
+ "horizontal_cover_16_10": "https://i0.hdslb.com/bfs/bangumi/image/966553b199829aae7e47882edbe053463ee85276.png",
+ "enable_vt": 0,
+ "vt_display": ""
+ }
+ ],
+ "business_card": null,
+ "floor_info": null,
+ "user_feature": null,
+ "preload_expose_pct": 0.5,
+ "preload_floor_expose_pct": 0.5,
+ "mid": 645769214
+ }
+}
+```
+
+
+
+
+## 获取短视频模式视频列表
+
+> https://app.bilibili.com/x/v2/feed/index
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+有大量不明意义的参数 备注仅供参考
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|--------------|-----|---------------------------|-----|------------------------------|
+| fnval | num | 视频流格式标识 | 非必要 | 默认为272 |
+| fnver | num | 视频流版本标识 | 非必要 | 恒为1 |
+| force_host | num | 源url类型 | 非必要 | 0:无限制 1:使用http 2:使用https |
+| fourk | num | 是否允许 4K 视频 | 非必要 | 画质最高 1080P:0(默认) 画质最高 4K:1 |
+| guidance | num | 0 | 非必要 | |
+| https_url_req | num | 0 | 非必要 | |
+| inline_danmu | num | 2 | 非必要 | |
+| inline_sound | num | 1 | 非必要 | |
+| interest_id | num | 0 | 非必要 | |
+| login_event | num | 登录状态 | 非必要 | 0为登录 1为未登录 |
+| mobi_app | num | android | 非必要 | 设备类型 |
+| network | num | wifi | 非必要 | 网络类型 |
+| open_event | num | | 非必要 | |
+| platform | num | android | 非必要 | 设备类型 |
+| pull | boll | false | 非必要 | |
+| qn | num | 32 | 非必要 | 似乎是画质 |
+| recsys_mode | num | 0 | 非必要 | |
+| s_locale | str | zh_CN | 非必要 | 语言 |
+| video_mode | num | 1 | 非必要 | |
+| voice_balance | num | 音量均衡? | 非必要 | 默认为1 |
+
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------|-------|------|----------------------|
+| code | num | 返回值 | 0:成功 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | | |
+
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------|-------|------|----------------------|
+| config | obj | 一些界面相关的内容 | 此处省略 |
+| items | array | 视频列表 | |
+
+`data`中的`items`数组的对象:
+
+以下为视频类型
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------|-------|------|----------------------|
+| can_play | num | 1 | 字面意思 |
+| card_goto | str | av | |
+| card_type | str | 卡片类型 | 视频为small_cover_v2 |
+| cover | str | 封面url | |
+| cover_left_1_content_description | str | 播放量 | 8.9万观看 |
+| cover_left_2_content_description | str | 弹幕数 | 250弹幕 |
+| cover_left_text_1 | str | 播放量 | 8.9万 |
+| cover_left_text_2 | str | 弹幕数 | 250 |
+| cover_right_content_description | str | 视频长度 | 1分钟20秒 |
+| cover_right_text | str | 视频长度 | 1:20 |
+| desc_button | obj | up主信息 | |
+| param | str | 视频aid | |
+| player_args | obj | 视频信息 | |
+| talk_back | str | | |
+| title | str | 标题 | |
+| uri | str | 跳转链接 | |
+
+`desc_button`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------|-------|------|----------------------|
+| event | str | | |
+| text | str | up名称 | |
+| type | num | 1 | |
+| uri | str | 跳转链接 | |
+
+
+`player_args`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------|-------|------|----------------------|
+| aid | num | 视频aid | |
+| cid | num | 视频cid | |
+| duration | num | 视频长度 | 秒数 |
+| type | str | | |
+
+
+**示例:**
+
+获取短视频模式视频列表
+
+```shell
+curl -G 'https://app.bilibili.com/x/v2/feed/index'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "items": [
+ {
+ "card_type": "small_cover_v2",
+ "card_goto": "av",
+ "goto": "av",
+ "param": "411978753",
+ "cover": "http://i2.hdslb.com/bfs/archive/a1bda1e57e6812ca8822a8839fc4a1d3539255a8.jpg",
+ "title": "帕 鲁 现 状",
+ "uri": "bilibili://video/411978753?cid=1423365216\u0026player_height=1920\u0026player_preload=%7B%22cid%22%3A1423365216%2C%22expire_time%22%3A1706633200%2C%22file_info%22%3A%7B%2216%22%3A%5B%7B%22timelength%22%3A79970%2C%22filesize%22%3A3782665%7D%5D%2C%2264%22%3A%5B%7B%22timelength%22%3A79900%2C%22filesize%22%3A9552030%7D%5D%7D%2C%22support_quality%22%3Anull%2C%22support_formats%22%3Anull%2C%22support_description%22%3Anull%2C%22quality%22%3A16%2C%22url%22%3A%22http%3A%2F%2Fcn-gdst-cm-01-12.bilivideo.com%2Fupgcxcode%2F16%2F52%2F1423365216%2F1423365216-1-16.mp4%3Fe%3Dig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_%5Cu0026uipk%3D5%5Cu0026nbs%3D1%5Cu0026deadline%3D1706636800%5Cu0026gen%3Dplayurlv2%5Cu0026os%3Dbcache%5Cu0026oi%3D0%5Cu0026trid%3D00000ccc07d4b7a34140a25493d51003bd95U%5Cu0026mid%3D0%5Cu0026platform%3D%5Cu0026upsig%3D2bf8e99202a181300981ab6ba9d2305d%5Cu0026uparams%3De%2Cuipk%2Cnbs%2Cdeadline%2Cgen%2Cos%2Coi%2Ctrid%2Cmid%2Cplatform%5Cu0026cdnid%3D6876%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026orderid%3D0%2C3%5Cu0026buvid%3D%5Cu0026build%3D0%5Cu0026f%3DU_0_0%5Cu0026bw%3D47881%5Cu0026logo%3D80000000%22%2C%22video_codecid%22%3A7%2C%22video_project%22%3Atrue%2C%22fnver%22%3A0%2C%22fnval%22%3A0%7D\u0026player_rotate=0\u0026player_width=1080\u0026report_flow_data=%7B%22flow_card_type%22%3A%22av%22%7D",
+ "three_point": {
+ "dislike_reasons": [
+ {
+ "id": 4,
+ "name": "UP主:锤子game",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 2,
+ "name": "分区:网络游戏",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 3,
+ "name": "频道:搞笑",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 12,
+ "name": "此类内容过多",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 13,
+ "name": "推荐过",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 1,
+ "name": "不感兴趣",
+ "toast": "将减少相似内容推荐"
+ }
+ ],
+ "feedbacks": [
+ {
+ "id": 1,
+ "name": "恐怖血腥",
+ "toast": "将优化首页此类内容"
+ },
+ {
+ "id": 2,
+ "name": "色情低俗",
+ "toast": "将优化首页此类内容"
+ },
+ {
+ "id": 3,
+ "name": "封面恶心",
+ "toast": "将优化首页此类内容"
+ },
+ {
+ "id": 4,
+ "name": "标题党/封面党",
+ "toast": "将优化首页此类内容"
+ }
+ ],
+ "watch_later": 1
+ },
+ "args": {
+ "up_id": 495695169,
+ "up_name": "锤子game",
+ "rid": 65,
+ "rname": "网络游戏",
+ "tid": 1833,
+ "tname": "搞笑",
+ "aid": 411978753
+ },
+ "player_args": {
+ "aid": 411978753,
+ "cid": 1423365216,
+ "type": "av",
+ "duration": 80
+ },
+ "idx": 1706629610,
+ "three_point_v2": [
+ {
+ "title": "添加至稍后再看",
+ "type": "watch_later",
+ "icon": "https://i0.hdslb.com/bfs/activity-plat/static/ce06d65bc0a8d8aa2a463747ce2a4752/NyPAqcn0QF.png"
+ },
+ {
+ "title": "反馈",
+ "subtitle": "(选择后将优化首页此类内容)",
+ "reasons": [
+ {
+ "id": 1,
+ "name": "恐怖血腥",
+ "toast": "将优化首页此类内容"
+ },
+ {
+ "id": 2,
+ "name": "色情低俗",
+ "toast": "将优化首页此类内容"
+ },
+ {
+ "id": 3,
+ "name": "封面恶心",
+ "toast": "将优化首页此类内容"
+ },
+ {
+ "id": 4,
+ "name": "标题党/封面党",
+ "toast": "将优化首页此类内容"
+ }
+ ],
+ "type": "feedback"
+ },
+ {
+ "title": "不感兴趣",
+ "subtitle": "(选择后将减少相似内容推荐)",
+ "reasons": [
+ {
+ "id": 4,
+ "name": "UP主:锤子game",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 2,
+ "name": "分区:网络游戏",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 3,
+ "name": "频道:搞笑",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 12,
+ "name": "此类内容过多",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 13,
+ "name": "推荐过",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 1,
+ "name": "不感兴趣",
+ "toast": "将减少相似内容推荐"
+ }
+ ],
+ "type": "dislike"
+ }
+ ],
+ "talk_back": "视频,帕 鲁 现 状,32.5万观看,257弹幕,时长1分钟20秒,UP主锤子game,",
+ "report_flow_data": "{\"flow_card_type\":\"av\"}",
+ "cover_left_text_1": "32.5万",
+ "cover_left_icon_1": 1,
+ "cover_left_1_content_description": "32.5万观看",
+ "cover_left_text_2": "257",
+ "cover_left_icon_2": 3,
+ "cover_left_2_content_description": "257弹幕",
+ "cover_right_text": "1:20",
+ "cover_right_content_description": "1分钟20秒",
+ "desc_button": {
+ "text": "锤子game",
+ "uri": "bilibili://space/495695169",
+ "event": "nickname",
+ "type": 1
+ },
+ "official_icon": 16,
+ "can_play": 1,
+ "goto_icon": {
+ "icon_url": "https://i0.hdslb.com/bfs/activity-plat/static/20230227/0977767b2e79d8ad0a36a731068a83d7/077GOeHOfO.png",
+ "icon_night_url": "https://i0.hdslb.com/bfs/activity-plat/static/20230227/0977767b2e79d8ad0a36a731068a83d7/ldbCXtkoK2.png",
+ "icon_width": 16,
+ "icon_height": 16
+ }
+ },
+ {
+ "card_type": "small_cover_v2",
+ "card_goto": "av",
+ "goto": "av",
+ "param": "836990443",
+ "cover": "http://i1.hdslb.com/bfs/archive/d16a125d6ec1c68cc9e0815bc28dcb62a1df9932.jpg",
+ "title": "【Phigros自制/崩坏:星穹铁道】欢迎来到匹诺康尼! 不眠之夜 IN Lv.13",
+ "uri": "bilibili://video/836990443?cid=1422516399\u0026player_height=1080\u0026player_preload=%7B%22cid%22%3A1422516399%2C%22expire_time%22%3A1706633200%2C%22file_info%22%3A%7B%2216%22%3A%5B%7B%22timelength%22%3A102818%2C%22filesize%22%3A4441802%7D%5D%2C%2264%22%3A%5B%7B%22timelength%22%3A102748%2C%22filesize%22%3A12468618%7D%5D%7D%2C%22support_quality%22%3Anull%2C%22support_formats%22%3Anull%2C%22support_description%22%3Anull%2C%22quality%22%3A16%2C%22url%22%3A%22http%3A%2F%2Fupos-sz-mirrorali.bilivideo.com%2Fupgcxcode%2F99%2F63%2F1422516399%2F1422516399-1-16.mp4%3Fe%3Dig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEuENvNC8aNEVEtEvE9IMvXBvE2ENvNCImNEVEIj0Y2J_aug859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_%5Cu0026uipk%3D5%5Cu0026nbs%3D1%5Cu0026deadline%3D1706636800%5Cu0026gen%3Dplayurlv2%5Cu0026os%3Dalibv%5Cu0026oi%3D0%5Cu0026trid%3D0ccc07d4b7a34140a25493d51003bd95U%5Cu0026mid%3D0%5Cu0026platform%3D%5Cu0026upsig%3D06ea793aa573018646c0096adf0dcb9e%5Cu0026uparams%3De%2Cuipk%2Cnbs%2Cdeadline%2Cgen%2Cos%2Coi%2Ctrid%2Cmid%2Cplatform%5Cu0026bvc%3Dvod%5Cu0026nettype%3D0%5Cu0026orderid%3D0%2C3%5Cu0026buvid%3D%5Cu0026build%3D0%5Cu0026f%3DU_0_0%5Cu0026bw%3D43547%5Cu0026logo%3D80000000%22%2C%22video_codecid%22%3A7%2C%22video_project%22%3Atrue%2C%22fnver%22%3A0%2C%22fnval%22%3A0%7D\u0026player_rotate=0\u0026player_width=1920\u0026report_flow_data=%7B%22flow_card_type%22%3A%22av%22%7D",
+ "three_point": {
+ "dislike_reasons": [
+ {
+ "id": 4,
+ "name": "UP主:早期陈总",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 2,
+ "name": "分区:音游",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 3,
+ "name": "频道:音乐游戏",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 12,
+ "name": "此类内容过多",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 13,
+ "name": "推荐过",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 1,
+ "name": "不感兴趣",
+ "toast": "将减少相似内容推荐"
+ }
+ ],
+ "feedbacks": [
+ {
+ "id": 1,
+ "name": "恐怖血腥",
+ "toast": "将优化首页此类内容"
+ },
+ {
+ "id": 2,
+ "name": "色情低俗",
+ "toast": "将优化首页此类内容"
+ },
+ {
+ "id": 3,
+ "name": "封面恶心",
+ "toast": "将优化首页此类内容"
+ },
+ {
+ "id": 4,
+ "name": "标题党/封面党",
+ "toast": "将优化首页此类内容"
+ }
+ ],
+ "watch_later": 1
+ },
+ "args": {
+ "up_id": 1515475415,
+ "up_name": "早期陈总",
+ "rid": 136,
+ "rname": "音游",
+ "tid": 10174,
+ "tname": "音乐游戏",
+ "aid": 836990443
+ },
+ "player_args": {
+ "aid": 836990443,
+ "cid": 1422516399,
+ "type": "av",
+ "duration": 103
+ },
+ "idx": 1706629609,
+ "three_point_v2": [
+ {
+ "title": "添加至稍后再看",
+ "type": "watch_later",
+ "icon": "https://i0.hdslb.com/bfs/activity-plat/static/ce06d65bc0a8d8aa2a463747ce2a4752/NyPAqcn0QF.png"
+ },
+ {
+ "title": "反馈",
+ "subtitle": "(选择后将优化首页此类内容)",
+ "reasons": [
+ {
+ "id": 1,
+ "name": "恐怖血腥",
+ "toast": "将优化首页此类内容"
+ },
+ {
+ "id": 2,
+ "name": "色情低俗",
+ "toast": "将优化首页此类内容"
+ },
+ {
+ "id": 3,
+ "name": "封面恶心",
+ "toast": "将优化首页此类内容"
+ },
+ {
+ "id": 4,
+ "name": "标题党/封面党",
+ "toast": "将优化首页此类内容"
+ }
+ ],
+ "type": "feedback"
+ },
+ {
+ "title": "不感兴趣",
+ "subtitle": "(选择后将减少相似内容推荐)",
+ "reasons": [
+ {
+ "id": 4,
+ "name": "UP主:早期陈总",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 2,
+ "name": "分区:音游",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 3,
+ "name": "频道:音乐游戏",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 12,
+ "name": "此类内容过多",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 13,
+ "name": "推荐过",
+ "toast": "将减少相似内容推荐"
+ },
+ {
+ "id": 1,
+ "name": "不感兴趣",
+ "toast": "将减少相似内容推荐"
+ }
+ ],
+ "type": "dislike"
+ }
+ ],
+ "talk_back": "视频,【Phigros自制/崩坏:星穹铁道】欢迎来到匹诺康尼! 不眠之夜 IN Lv.13,22.8万观看,797弹幕,时长1分钟43秒,UP主早期陈总,",
+ "report_flow_data": "{\"flow_card_type\":\"av\"}",
+ "cover_left_text_1": "22.8万",
+ "cover_left_icon_1": 1,
+ "cover_left_1_content_description": "22.8万观看",
+ "cover_left_text_2": "797",
+ "cover_left_icon_2": 3,
+ "cover_left_2_content_description": "797弹幕",
+ "cover_right_text": "1:43",
+ "cover_right_content_description": "1分钟43秒",
+ "desc_button": {
+ "text": "早期陈总",
+ "uri": "bilibili://space/1515475415",
+ "event": "nickname",
+ "type": 1
+ },
+ "can_play": 1,
+ "goto_icon": {
+ "icon_url": "https://i0.hdslb.com/bfs/activity-plat/static/20230227/0977767b2e79d8ad0a36a731068a83d7/077GOeHOfO.png",
+ "icon_night_url": "https://i0.hdslb.com/bfs/activity-plat/static/20230227/0977767b2e79d8ad0a36a731068a83d7/ldbCXtkoK2.png",
+ "icon_width": 16,
+ "icon_height": 16
+ }
+ }
+ ],
+ "config": {
+ "column": 2,
+ "autoplay_card": 2,
+ "feed_clean_abtest": 0,
+ "home_transfer_test": 0,
+ "auto_refresh_time": 1200,
+ "show_inline_danmaku": 1,
+ "toast": {},
+ "is_back_to_homepage": true,
+ "enable_rcmd_guide": true,
+ "inline_sound": 2,
+ "auto_refresh_time_by_appear": 1200,
+ "auto_refresh_time_by_active": 1200,
+ "visible_area": 80,
+ "card_density_exp": 1,
+ "story_mode_v2_guide_exp": 6
+ },
+ "interest_choose": null
+ }
+}
+```
+
+
diff --git a/docs/video/report.md b/docs/video/report.md
new file mode 100644
index 0000000..ef141bc
--- /dev/null
+++ b/docs/video/report.md
@@ -0,0 +1,246 @@
+# 视频观看数据上报
+
+## 上报观看进度(双端)
+
+> https://api.bilibili.com/x/v2/history/report
+
+*请求方式:POST*
+
+认证方式:APP或Cookie(SESSDATA)
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------------------ | -------------- | --------------------- |
+| access_key | str | APP登录Token | APP方式必要 | |
+| aid | num | 稿件avid | 必要 | |
+| cid | num | 视频cid | 必要 | 用于识别分P |
+| progress | num | 观看进度 | 非必要 | 单位为秒 默认为0 |
+| platform | str | 平台标识 | 非必要 | 可为android |
+| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+记录视频`av13662970`(`cid=126654047`)的观看记录位于`1248`秒
+
+Cookie方式:
+
+```shell
+curl 'https://api.bilibili.com/x/v2/history/report' \
+--data-urlencode 'aid=13662970' \
+--data-urlencode 'cid=126654047' \
+--data-urlencode 'progress=1248' \
+--data-urlencode 'platform=android' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx'
+```
+
+APP方式:
+
+```shell
+curl 'https://api.bilibili.com/x/v2/history/report' \
+--data-urlencode 'access_key=xxx' \
+--data-urlencode 'aid=13662970' \
+--data-urlencode 'cid=126654047' \
+--data-urlencode 'progress=1248' \
+--data-urlencode 'platform=android'
+```
+
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+## 上报视频播放心跳(web端)
+
+> https://api.bilibili.com/x/click-interface/web/heartbeat
+
+*请求方式:POST*
+
+认证方式:仅可Cookie(SESSDATA)
+
+默认间隔15秒一次, 亦可记录播放历史
+
+该接口较为复杂, 且参数计算方法均为推测, 实际过程不明, 可能含有错误, 若要正式使用可以把已播放的持续时间全都设为相同值
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------------------- | ---- | ------------------------------ | ------ | ------- |
+| w_start_ts | num | 参见请求正文同名无`w_`前缀参数 | 非必要 | UNIX 秒级时间戳 |
+| w_mid | num | 参见请求正文同名无`w_`前缀参数 | 非必要 | |
+| w_aid | num | 参见请求正文同名无`w_`前缀参数 | 非必要 | |
+| w_dt | num | 2 | 非必要 | |
+| w_realtime | num | 参见请求正文同名无`w_`前缀参数 | 非必要 | 单位 秒 |
+| w_playedtime | num | 参见请求正文同名无`w_`前缀参数 | 非必要 | 单位 秒 |
+| w_real_played_time | num | 参见请求正文同名无`w_`前缀参数 | 非必要 | 单位 秒 |
+| w_video_duration | num | 参见请求正文同名无`w_`前缀参数 | 非必要 | 单位 秒 |
+| w_last_play_progress_time | num | 参见请求正文同名无`w_`前缀参数 | 非必要 | 单位 秒 |
+| web_location | num | 网页位置 | 非必要 | 视频详情页播放器: 1315873 |
+| w_rid | num | WBI 签名 | 非必要 | 参见[WBI 签名](../misc/sign/wbi.md) |
+| wts | num | UNIX 秒级时间戳 | 非必要 | 参见[WBI 签名](../misc/sign/wbi.md) |
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----------------------- | ---- | ---------------------------------- | ------------ | ----------------------------------------------------------- |
+| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个(网页端请求默认仅使用aid) |
+| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
+| cid | num | 视频cid | 非必要 | 用于识别分P |
+| epid | num | 番剧epid | 非必要 | |
+| sid | num | 番剧ssid | 非必要 | |
+| mid | num | 当前用户mid | 非必要 | |
+| played_time | num | 视频播放进度 | 非必要 | 单位 秒 播放完成为 -1 |
+| realtime | num | 本轮页面会话真实播放时间 | 非必要 | 单位 秒 |
+| real_played_time | num | 本轮页面会话真实视频播放持续时间 | 非必要 | 单位 秒 |
+| refer_url | str | 与请求头 Referer 字段相同 | 非必要 | |
+| quality | num | 视频清晰度 | 非必要 | 参见[qn视频清晰度标识](videostream_url.md#qn视频清晰度标识) |
+| video_duration | num | 视频时长 | 非必要 | 单位 秒 |
+| last_play_progress_time | num | play_time 与 本轮页面会话开始时 played_time 之和 | 非必要 | 单位 秒 |
+| max_play_progress_time | num | 本轮页面会话所有最大 last_play_progress_time 与 本轮页面会话开始时 played_time 之和 | 非必要 | 单位 秒 |
+| start_ts | num | 开始播放时刻 | 非必要 | 时间戳 |
+| type | num | 视频类型 | 非必要 | 3:投稿视频 4:剧集 10:课程 |
+| sub_type | num | 剧集副类型 | 非必要 | 0: 普通投稿视频 1:番剧 2:电影 3:纪录片 4:国创 5:电视剧 7:综艺 |
+| dt | num | 2 | 非必要 | |
+| outer | num | 0 | 非必要 | |
+| spmid | str | 333.788.0.0 | 非必要 | 作用尚不明确 |
+| from_spmid | str | 播放来源? | 非必要 | 也可为空, 如: `444.41.list.card_archive.click` `333.999.0.0` |
+| session | str | 会话信息? | 非必要 | 一串无分隔小写 UUID |
+| extra | obj | 额外信息, 如播放器版本 | 非必要 | 如: `{"player_version":"4.8.36"}` |
+| play_type | num | 播放动作 | 非必要 | 0:播放中 1:开始播放 2:暂停 3:继续播放 4: 结束播放 |
+| csrf | str | CSRF Token (即 Cookie 中 bili_jct) | 非必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+上报一次视频`av2`/`BV1xx411c7mD`的心跳数据
+
+```shell
+curl 'https://api.bilibili.com/x/click-interface/web/heartbeat' \
+--data-urlencode 'aid=2' \
+--data-urlencode 'bvid=BV1xx411c7mD' \
+--data-urlencode 'cid=62131' \
+--data-urlencode 'played_time=60' \
+--data-urlencode 'realtime=60' \
+--data-urlencode 'start_ts=1592720840' \
+--data-urlencode 'type=3' \
+--data-urlencode 'dt=2' \
+--data-urlencode 'play_type=0' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+## 开始观看视频 (web端)
+
+> https://api.bilibili.com/x/click-interface/click/web/h5
+
+*请求方式: POST*
+
+认证方式: Cookie (SESSDATA)
+
+该接口亦被用于计算播放量, 播放量更新不是实时的
+该接口使用似乎存在 200 播放限制, **请勿滥用!**
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| w_aid | num | 稿件 aid | 不必要 | |
+| w_part | num | 视频分 P 编号 | 不必要 | |
+| w_ftime | num | 点击时间戳? | 不必要 | UNIX 秒级时间戳 |
+| w_stime | num | 开始播放时间戳? | 不必要 | UNIX 秒级时间戳 |
+| w_type | num | 视频类型 | 不必要 | 见[上报视频播放心跳(web端)](#上报视频播放心跳web端) |
+| web_location | num | 网页位置? | 不必要 | 1315873 |
+| w_rid | num | WBI 签名 | 不必要 | 参见[WBI 签名](../misc/sign/wbi.md) |
+| wts | num | UNIX 秒级时间戳 | 不必要 | 参见[WBI 签名](../misc/sign/wbi.md) |
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| mid | num | 当前用户 mid | 不必要 | |
+| aid | num | 稿件 aid | 必要 | |
+| cid | num | 视频 cid | 不必要 | |
+| part | num | 视频分 P 编号 | 不必要 | |
+| lv | num | 当前用户等级 | 不必要 | |
+| ftime | num | 同 URL 参数中带有 `w_` 前缀的同名参数 | 不必要 | |
+| stime | num | 同 URL 参数中带有 `w_` 前缀的同名参数 | 不必要 | |
+| type | num | 视频类型 | 不必要 | 见[上报视频播放心跳(web端)](#上报视频播放心跳web端) |
+| sub_type | num | 视频子类型 | 不必要 | 见[上报视频播放心跳(web端)](#上报视频播放心跳web端) |
+| referer_url | str | 与请求头 Referer 字段相同 | 不必要 | |
+| outer | num | 0 | 不必要 | |
+| spmid | str | 333.788.0.0 | 不必要 | 作用尚不明确 |
+| from_spmid | str | 播放来源? | 不必要 | 见[上报视频播放心跳(web端)](#上报视频播放心跳web端) |
+| session | str | 会话信息? | 不必要 | 一串无分隔小写 UUID |
+| csrf | str | CSRF Token (即 Cookie 中 bili_jct) | 不必要 | |
+
+**JSON回复:**
+
+根对象:
+
+|字段|类型|内容|备注|
+|-|-|-|-|
+|code|num|返回值|0:成功 -400:请求错误|
+|message|str|错误信息|默认为 `0`|
+|ttl|num|1||
+
+**示例:**
+
+```shell
+curl 'https://api.bilibili.com/x/click-interface/click/web/h5' \
+--data-urlencode 'aid=2' \
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
diff --git a/video/snapshot.md b/docs/video/snapshot.md
similarity index 93%
rename from video/snapshot.md
rename to docs/video/snapshot.md
index c4f7aa9..3bc1bb0 100644
--- a/video/snapshot.md
+++ b/docs/video/snapshot.md
@@ -6,18 +6,8 @@
截取时间表的时间和快照一一对应,并按照从左到右 从上到下的顺序排布
----
-
-- [获取视频快照(web端)](#获取视频快照(web端))
-- [获取视频快照(APP端)](#获取视频快照(APP端))
-- [获取视频快照(web端)(用于封面预览)](#获取视频快照(web端)(用于封面预览))
-- [图片拼版](#图片拼版)
-- [bin格式截取时间表](#bin格式截取时间表)
-
----
-
## 获取视频快照(web端)
-> http://api.bilibili.com/x/player/videoshot
+> https://api.bilibili.com/x/player/videoshot
*请求方式:GET*
@@ -77,7 +67,7 @@
avid方式:
```shell
-curl -G 'http://api.bilibili.com/x/player/videoshot' \
+curl -G 'https://api.bilibili.com/x/player/videoshot' \
--data-urlencode 'aid=26273789' \
--data-urlencode 'index=1'
```
@@ -85,7 +75,7 @@ curl -G 'http://api.bilibili.com/x/player/videoshot' \
bvid方式:
```shell
-curl -G 'http://api.bilibili.com/x/player/videoshot' \
+curl -G 'https://api.bilibili.com/x/player/videoshot' \
--data-urlencode 'bvid=BV1os411H7wm' \
--data-urlencode 'index=1'
```
@@ -114,7 +104,7 @@ curl -G 'http://api.bilibili.com/x/player/videoshot' \
## 获取视频快照(APP端)
-> http://app.bilibili.com/x/v2/view/video/shot
+> https://app.bilibili.com/x/v2/view/video/shot
*请求方式:GET*
@@ -165,7 +155,7 @@ curl -G 'http://api.bilibili.com/x/player/videoshot' \
获取视频`av26273789`(`cid=49075258`)的快照
```shell
-curl -G 'http://app.bilibili.com/x/v2/view/video/shot' \
+curl -G 'https://app.bilibili.com/x/v2/view/video/shot' \
--data-urlencode 'appkey=1d8b6e7d45233436' \
--data-urlencode 'aid=26273789' \
--data-urlencode 'cid=49075258' \
@@ -182,14 +172,14 @@ curl -G 'http://app.bilibili.com/x/v2/view/video/shot' \
"message": "0",
"ttl": 1,
"data": {
- "pvdata": "http://i0.hdslb.com/bfs/videoshot/49075258.bin",
+ "pvdata": "https://i0.hdslb.com/bfs/videoshot/49075258.bin",
"img_x_len": 10,
"img_y_len": 10,
"img_x_size": 160,
"img_y_size": 90,
"image": [
- "http://i0.hdslb.com/bfs/videoshot/49075258.jpg",
- "http://i0.hdslb.com/bfs/videoshot/49075258-1.jpg"
+ "https://i0.hdslb.com/bfs/videoshot/49075258.jpg",
+ "https://i0.hdslb.com/bfs/videoshot/49075258-1.jpg"
]
}
}
@@ -199,7 +189,7 @@ curl -G 'http://app.bilibili.com/x/v2/view/video/shot' \
## 获取视频快照(web端)(用于封面预览)
-> http://api.bilibili.com/pvideo
+> https://api.bilibili.com/pvideo
*请求方式:GET*
@@ -256,7 +246,7 @@ curl -G 'http://app.bilibili.com/x/v2/view/video/shot' \
获取视频`av26273789`的快照
```shell
-curl -G 'http://api.bilibili.com/pvideo' \
+curl -G 'https://api.bilibili.com/pvideo' \
--data-urlencode 'aid=26273789'
```
@@ -290,7 +280,7 @@ curl -G 'http://api.bilibili.com/pvideo' \
示例拼版图片url:http://i0.hdslb.com/bfs/videoshot/49075258.jpg
-
+
## bin格式截取时间表
diff --git a/video/status_number.md b/docs/video/status_number.md
similarity index 92%
rename from video/status_number.md
rename to docs/video/status_number.md
index 821122e..89dc0bc 100644
--- a/video/status_number.md
+++ b/docs/video/status_number.md
@@ -1,12 +1,13 @@
# 视频状态数
-- [视频状态数(仅avid)](#视频状态数(仅avid))
-- [视频状态数(bvid/avid)](#视频状态数(bvid/avid))
-
----
+本页接口均已失效
## 视频状态数(仅avid)
-> http://api.bilibili.com/archive_stat/stat
+
+
+该接口已弃用 (HTTP 403)
+
+> https://api.bilibili.com/archive_stat/stat
*请求方式:GET*
@@ -52,7 +53,7 @@
avid方式:
```shell
-curl -G 'http://api.bilibili.com/archive_stat/stat' \
+curl -G 'https://api.bilibili.com/archive_stat/stat' \
--data-urlencode 'aid=91572143'
```
@@ -84,9 +85,14 @@ curl -G 'http://api.bilibili.com/archive_stat/stat' \
+
+
## 视频状态数(bvid/avid)
-> http://api.bilibili.com/x/web-interface/archive/stat
+
+该接口已失效 (HTTP 404)
+
+> https://api.bilibili.com/x/web-interface/archive/stat
*请求方式:GET*
@@ -138,14 +144,14 @@ curl -G 'http://api.bilibili.com/archive_stat/stat' \
avid方式:
```shell
-curl -G 'http://api.bilibili.com/x/web-interface/archive/stat' \
+curl -G 'https://api.bilibili.com/x/web-interface/archive/stat' \
--data-urlencode 'aid=2271112'
```
bvid方式:
```shell
-curl -G 'http://api.bilibili.com/x/web-interface/archive/stat' \
+curl -G 'https://api.bilibili.com/x/web-interface/archive/stat' \
--data-urlencode 'bvid=BV1es411D7sW'
```
@@ -182,7 +188,7 @@ curl -G 'http://api.bilibili.com/x/web-interface/archive/stat' \
当UA为`2333python2333`时,则无法访问此接口:
```shell
-curl -G 'http://api.bilibili.com/x/web-interface/archive/stat' \
+curl -G 'https://api.bilibili.com/x/web-interface/archive/stat' \
--data-urlencode 'aid=2271112' \
-A '2333python2333'
```
@@ -200,3 +206,5 @@ curl -G 'http://api.bilibili.com/x/web-interface/archive/stat' \
```
+
+
diff --git a/docs/video/summary.md b/docs/video/summary.md
new file mode 100644
index 0000000..e7da86f
--- /dev/null
+++ b/docs/video/summary.md
@@ -0,0 +1,227 @@
+# 视频AI总结
+
+
+
+## 获取AI总结内容
+
+> https://api.bilibili.com/x/web-interface/view/conclusion/get
+
+*请求方式: GET*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:[Wbi 签名](../misc/sign/wbi.md)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|--------|-----|--------|-----|----------------------------------|
+| aid | num | 稿件 avid | 必要(可选) | avid与bvid任选一个 |
+| bvid | str | 稿件 bvid | 必要(可选) | avid与bvid任选一个 |
+| cid | num | 视频 cid | 必要 | |
+| up_mid | num | UP主 mid | 必要 | |
+| w_rid | str | Wbi 签名 | 必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) |
+| wts | num | 当前时间戳 | 必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|--------------------------|
+| code | num | 返回值 | 0: 成功 -101: 账号未登录 -400:请求错误 -403: 访问权限不足 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------------|-----|------|----------------------|
+| code | num | 返回值 | -1: 不支持AI摘要(敏感内容等)或其他因素导致请求异常 0: 有摘要 1:无摘要(未识别到语音) |
+| model_result | obj | 摘要内容 | |
+| stid | str | 摘要 id | 如`code=1`且该字段为`0`时,则未进行 AI 总结,即添加总结队列 如`code=1`且该字段为空时未识别到语音 |
+| status | num | (?) | |
+| like_num | num | 点赞数 | 默认为`0` |
+| dislike_num | num | 点踩数 | 默认为`0` |
+
+`data`中的`model_result`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-------------|-----|----------|------------------------------------------|
+| result_type | num | 数据类型 | 0: 没有摘要 1:仅存着摘要总结 2:存着摘要以及提纲 |
+| summary | str | 视频摘要 | 通常为一段概括整个视频内容的文本 |
+| outline | 有数据时:array 无数据时:null | 分段提纲 | 通常为视频中叙述的各部分及其要点 |
+
+`model_result`对象中的`outline`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|---------|-----|
+| 0 | obj | 总结分段1 | |
+| n | obj | 总结分段(n+1) | |
+| …… | obj | …… | …… |
+
+`outline`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|--------------|-----|------|----|
+| title | str | 分段标题 | 段落内容的概括 |
+| part_outline | array | 分段要点 | 当前分段中多个提到的细节 |
+| timestamp | num | 分段起始时间 | 单位为秒 |
+
+`outline`数组中的对象中的`part_outline`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+|-----|-----|---------|-----|
+| 0 | obj | 分段要点1 | |
+| n | obj | 分段要点(n+1) | |
+| …… | obj | …… | …… |
+
+`part_outline`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|-----------|-----|-------|----|
+| timestamp | num | 要点起始时间 | 单位为秒 |
+| content | str | 小结内容 | 其中一个分段的要点 |
+
+**示例:**
+
+得到视频`BV1L94y1H7CV`(`cid=1335073288`)的摘要
+
+```bash
+curl -G 'https://api.bilibili.com/x/web-interface/view/conclusion/get' \
+ --data-urlencode 'bvid=BV1L94y1H7CV' \
+ --data-urlencode 'cid=1335073288' \
+ --data-urlencode 'up_mid=297242063' \
+ --data-urlencode 'wts=1701546363' \
+ --data-urlencode 'w_rid=1073871926b3ccd99bd790f0162af634'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "code": 0,
+ "model_result": {
+ "result_type": 2,
+ "summary": "在网上阅读时遇到错别字和语言梗的烦恼,以及正确使用语言的重要性。作者认为,我们每个人都应该有包容心,不掉渣,不纠正别人的错误,同时也需要明辨是非,规范使用语言。视频还提到了一些常见的语言梗和错误用法,呼吁大家不要过分使用网络词汇,而应该注重语言的艺术性和深度。最后,作者欢迎大家关注他的微信公众号。",
+ "outline": [
+ {
+ "title": "现代人使用中文时面临的困境,包括错别字、用法不正确等问题,并呼吁大家规范使用中文。",
+ "part_outline": [
+ {
+ "timestamp": 1,
+ "content": "网友评论有错别字,勉强能看懂,但难受。"
+ },
+ {
+ "timestamp": 39,
+ "content": "重来一次,明辨是非。"
+ },
+ {
+ "timestamp": 167,
+ "content": "粉墨登场是贬义词,形容坏人打扮好老登场。"
+ }
+ ],
+ "timestamp": 1
+ },
+ {
+ "title": "网络词汇的过度使用导致语言生硬,以及对流行语言梗的短暂使用感到厌倦。",
+ "part_outline": [
+ {
+ "timestamp": 241,
+ "content": "网络词汇过分使用会误导别人,使规范词汇生硬"
+ },
+ {
+ "timestamp": 270,
+ "content": "以前的语言梗有深度,现在的流行梗很短命"
+ },
+ {
+ "timestamp": 338,
+ "content": "巨星之间需要化学反应的过程,前几场发挥欠佳"
+ }
+ ],
+ "timestamp": 241
+ }
+ ]
+ },
+ "stid": "5117037934391059183",
+ "status": 0,
+ "like_num": 6,
+ "dislike_num": 2
+ }
+}
+```
+
+
+
+## 点赞&点踩摘要
+
+> https://api.bilibili.com/x/web-interface/view/conclusion/set
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:[Wbi 签名](../misc/sign/wbi.md)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|-------|-----|--------|-----|----------------------------------|
+| w_rid | str | Wbi 签名 | 必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) |
+| wts | num | 当前时间戳 | 必要 | 详见 [Wbi 签名](../misc/sign/wbi.md) |
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+|------------|-----|----------------------|-----|-----------------------------|
+| aid | num | 稿件 avid | 必要(可选) | avid与bvid任选一个 |
+| bvid | str | 稿件 bvid | 必要(可选) | avid与bvid任选一个 |
+| cid | num | 稿件 cid | 必要 | |
+| up_mid | num | UP主 mid | 非必要 | |
+| stid | num | 摘要 id | 必要 | |
+| like_state | num | 执行操作 | 必要 | 1: 点赞 2: 取消点赞 3: 点踩 4: 取消点踩 |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+|---------|-----|------|------------------------------------------|
+| code | num | 返回值 | 0: 成功 -400: 请求错误 65002:origin id 错误 65004:取消赞失败 未点赞过 65005:取消踩失败 未点踩过 65006: 已赞过 65007:已踩过 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+为视频`BV1L94y1H7CV`(`cid=1335073288`)的摘要点赞
+
+```shell
+curl 'https://api.bilibili.com/x/web-interface/view/conclusion/set?w_rid=edb471fc926646ef3889a80488166b66&wts=1700358953' \
+ --data-urlencode 'bvid=BV1L94y1H7CV' \
+ --data-urlencode 'cid=1335073288' \
+ --data-urlencode 'up_mid=297242063' \
+ --data-urlencode 'stid=5117037934391059183' \
+ --data-urlencode '&like_state=1' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
diff --git a/docs/video/tags.md b/docs/video/tags.md
new file mode 100644
index 0000000..2ee6fde
--- /dev/null
+++ b/docs/video/tags.md
@@ -0,0 +1,434 @@
+# 视频TAG
+
+## 获取视频TAG信息(新)
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------------ | -------------------------------- |
+| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
+| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
+| cid | num | 分P cid | 非必要 | 提供此参数可返回对应分P的BGM信息 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | array | TAG列表 | 无TAG为空 |
+
+`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ---- |
+| 0 | obj | 第1个TAG | |
+| n | obj | 第(n+1)个TAG | |
+| …… | obj | …… | …… |
+
+`data`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ---------- | ------------------------------------------------------------ |
+| tag_id | num | tag_id | 当`tag_type`不为`bgm`时有效 |
+| tag_name | str | TAG名称 | |
+| music_id | str | 背景音乐id | 当`tag_type`为`bgm`时有效,以`MA`开头 |
+| tag_type | str | TAG类型 | `old_channel`:普通标签 `topic`:话题 `bgm`:背景音乐 |
+| jump_url | str | 跳转url | 当`tag_type`为`topic`或`bgm`时有效 |
+
+**示例:**
+
+查询视频`av89772773`/`BV1M741177Kg`的TAG
+
+avid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/view/detail/tag' \
+--data-urlencode 'aid=89772773' \
+--data-urlencode 'cid=153322313' \
+-b 'SESSDATA=xxx'
+```
+
+bvid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/view/detail/tag' \
+--data-urlencode 'bvid=BV1M741177Kg' \
+--data-urlencode 'cid=153322313' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [
+ {
+ "tag_id": 0,
+ "tag_name": "发现《Other Side》",
+ "music_id": "MA456128506519140428",
+ "tag_type": "bgm",
+ "jump_url": "https://music.bilibili.com/h5/music-detail?music_id=MA456128506519140428&cid=153322313&aid=89772773&na_close_hide=1"
+ },
+ {
+ "tag_id": 12620189,
+ "tag_name": "异度侵入",
+ "music_id": "",
+ "tag_type": "old_channel",
+ "jump_url": ""
+ },
+ {
+ "tag_id": 707,
+ "tag_name": "ED",
+ "music_id": "",
+ "tag_type": "old_channel",
+ "jump_url": ""
+ },
+ {
+ "tag_id": 1394,
+ "tag_name": "动漫",
+ "music_id": "",
+ "tag_type": "old_channel",
+ "jump_url": ""
+ },
+ {
+ "tag_id": 13289329,
+ "tag_name": "异度侵入ed原图",
+ "music_id": "",
+ "tag_type": "old_channel",
+ "jump_url": ""
+ },
+ {
+ "tag_id": 7520816,
+ "tag_name": "bilibili新星计划",
+ "music_id": "",
+ "tag_type": "old_channel",
+ "jump_url": ""
+ }
+ ]
+}
+```
+
+
+
+## 获取视频TAG信息(旧)
+
+>
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------------ | ------------------ |
+| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
+| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | array | TAG列表 | 无TAG为空 |
+
+`data`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ---- |
+| 0 | obj | 第1个TAG | |
+| n | obj | 第(n+1)个TAG | |
+| …… | obj | …… | …… |
+
+`data`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | -------------- | ------------------------------------------------------------ |
+| tag_id | num | tag_id | |
+| tag_name | str | TAG名称 | |
+| cover | str | TAG图片url | |
+| head_cover | str | TAG页面头图url | |
+| content | str | TAG介绍 | |
+| short_content | str | TAG简介 | |
+| type | num | ??? | |
+| state | num | 0 | |
+| ctime | num | 创建时间 | 秒级时间戳 |
+| count | obj | 状态数 | |
+| is_atten | num | 是否关注 | 0:未关注 1:已关注 需要登录(Cookie) 未登录为0 |
+| likes | num | 0 | 作用尚不明确 |
+| hates | num | 0 | 作用尚不明确 |
+| attribute | num | 0 | 作用尚不明确 |
+| liked | num | 是否已经点赞 | 0:未点赞 1:已点赞 需要登录(Cookie) 未登录为0 |
+| hated | num | 是否已经点踩 | 0:未点踩 1:已点踩 需要登录(Cookie) 未登录为0 |
+| extra_attr | num | ? ? ? | |
+
+`data`数组中的对象中的`count`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | ------------- | ------------ |
+| view | num | 0 | 作用尚不明确 |
+| use | num | 视频添加TAG数 | |
+| atten | num | TAG关注 | |
+
+**示例:**
+
+查询视频`av89772773`/`BV1M741177Kg`的TAG
+
+avid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/tag/archive/tags' \
+--data-urlencode 'aid=89772773' \
+-b 'SESSDATA=xxx'
+```
+
+bvid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/tag/archive/tags' \
+--data-urlencode 'bvid=BV1M741177Kg' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": [{
+ "tag_id": 12620189,
+ "tag_name": "异度侵入",
+ "cover": "",
+ "head_cover": "",
+ "content": "",
+ "short_content": "",
+ "type": 1,
+ "state": 0,
+ "ctime": 1576235749,
+ "count": {
+ "view": 0,
+ "use": 6392,
+ "atten": 8938
+ },
+ "is_atten": 1,
+ "likes": 1,
+ "hates": 0,
+ "attribute": 0,
+ "liked": 0,
+ "hated": 0
+ }, {
+ "tag_id": 7520816,
+ "tag_name": "bilibili新星计划",
+ "cover": "",
+ "head_cover": "",
+ "content": "",
+ "short_content": "",
+ "type": 4,
+ "state": 0,
+ "ctime": 1529717850,
+ "count": {
+ "view": 0,
+ "use": 1967314,
+ "atten": 65082
+ },
+ "is_atten": 0,
+ "likes": 0,
+ "hates": 0,
+ "attribute": 0,
+ "liked": 0,
+ "hated": 0
+ }, {
+ "tag_id": 707,
+ "tag_name": "ED",
+ "cover": "",
+ "head_cover": "",
+ "content": "",
+ "short_content": "",
+ "type": 3,
+ "state": 0,
+ "ctime": 1436866637,
+ "count": {
+ "view": 0,
+ "use": 62646,
+ "atten": 75642
+ },
+ "is_atten": 1,
+ "likes": 0,
+ "hates": 0,
+ "attribute": 0,
+ "liked": 0,
+ "hated": 0
+ }, {
+ "tag_id": 1394,
+ "tag_name": "动漫",
+ "cover": "http://i0.hdslb.com/bfs/tag/d08c5fe17ceb793e7ce95d9c67392743b33b46d0.jpg",
+ "head_cover": "",
+ "content": " “动漫”是动画和漫画的合称与缩写。在其他语言相当少用。随着现代传媒技术的发展,动画(animation或anime)和漫画(comics,manga;特别是故事性漫画)之间联系日趋紧密,两者常被合而为“动漫”。\n 由于漫画本身的发展形成了现代故事漫画的表现形式,将影视艺术融入漫画之中,使得漫画与动画更容易结合,影视艺术独特的地方在于它能通过镜头的推拉摇移和片段剪辑的蒙太奇技巧来表达想法和感受。漫画正是吸收了影视艺术的这两个特点。当讲述的故事越发复杂、人物越发丰富的时候,传统单线式叙事的方法就越行不通,蒙太奇的介入就成为一种需要了;当漫画家在传统表现手段中无法找到更合适的抒发感情的方法的时候,当读者需要作品有更强的冲击力和表现力的时候,各种镜头的灵活运用就成为一种必需了。一部现代故事漫画往往集远、中、近、特四种镜头于一身,漫画家往往能熟练地运用镜头的移动和各种蒙太奇剪接,对故事特定部分的情绪和氛围进行渲染。这就是现代故事漫画容易和动画结合的一个原因,因为它天生就像动画的分镜头剧本,读者在看漫画时如同在看一部电影。正是有着这样的相似性所以如今将动画和漫画合称为“动漫”。",
+ "short_content": "",
+ "type": 3,
+ "state": 0,
+ "ctime": 1436866637,
+ "count": {
+ "view": 0,
+ "use": 1134143,
+ "atten": 113030
+ },
+ "is_atten": 0,
+ "likes": 0,
+ "hates": 0,
+ "attribute": 0,
+ "liked": 0,
+ "hated": 0
+ }, {
+ "tag_id": 13289329,
+ "tag_name": "异度侵入ed原图",
+ "cover": "",
+ "head_cover": "",
+ "content": "",
+ "short_content": "",
+ "type": 1,
+ "state": 0,
+ "ctime": 1581948411,
+ "count": {
+ "view": 0,
+ "use": 3,
+ "atten": 0
+ },
+ "is_atten": 0,
+ "likes": 0,
+ "hates": 0,
+ "attribute": 0,
+ "liked": 0,
+ "hated": 0
+ }]
+}
+```
+
+
+
+## 点赞&取消点赞视频TAG
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+重复请求为取消
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------------------ | ------ | ---- |
+| aid | num | 稿件avid | 必要 | |
+| tag_id | num | tag_id | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+为视频`av89772773`的TAG`12620189`点赞
+
+```shell
+curl 'https://api.bilibili.com/x/tag/archive/like2' \
+--data-urlencode 'aid=89772773' \
+--data-urlencode 'tag_id=12620189' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+## 点踩&取消点踩视频TAG
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie(SESSDATA)
+
+重复请求为取消
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ------------------------ | ------ | ---- |
+| aid | num | 稿件avid | 必要 | |
+| tag_id | num | tag_id | 必要 | |
+| csrf | str | CSRF Token(位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+
+**示例:**
+
+为视频`av89772773`的TAG`7520816`点踩
+
+```shell
+curl 'https://pi.bilibili.com/x/tag/archive/hate2' \
+--data-urlencode 'aid=89772773' \
+--data-urlencode 'tag_id=7520816' \
+--data-urlencode 'csrf=xxx' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
diff --git a/docs/video/video_zone.md b/docs/video/video_zone.md
new file mode 100644
index 0000000..14fe503
--- /dev/null
+++ b/docs/video/video_zone.md
@@ -0,0 +1,336 @@
+# 视频分区一览
+
+用于判断视频所在的分区,或推荐分区视频等……
+
+亦可用于更深♂入了解B站的分区
+
+本文档中的内容适用于 `tid`、`tname` 等字段,关于 `tid_v2`、`tname_v2` 等字段请参阅 “[视频分区一览 (v2)](./video_zone_v2.md)” 文档
+
+## 动画
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|-----------------------|------------|-----|------------------------------------------------------------------|--------------------------------------------------------------------|
+| 动画(主分区) | douga | 1 | | [/v/douga](https://www.bilibili.com/v/douga) |
+| MAD·AMV | mad | 24 | 具有一定制作程度的动画或静画的二次创作视频 | [/v/douga/mad](https://www.bilibili.com/v/douga/mad) |
+| MMD·3D | mmd | 25 | 使用MMD(MikuMikuDance)和其他3D建模类软件制作的视频 | [/v/douga/mmd](https://www.bilibili.com/v/douga/mmd) |
+| 同人·手书 (~~原短片·手书~~) | handdrawn | 47 | 追求个人特色和创意表达的手书(绘)、以及同人作品展示、宣传为主的内容 | [/v/douga/handdrawn](https://www.bilibili.com/v/douga/handdrawn) |
+| 配音 | voice | 257 | 使用ACGN相关画面或台本素材进行人工配音创作的内容 | [/v/douga/voice](https://www.bilibili.com/v/douga/voice) |
+| 手办·模玩 | garage_kit | 210 | 手办模玩的测评、改造或其他衍生内容 | [/v/douga/garage_kit](https://www.bilibili.com/v/douga/garage_kit) |
+| 特摄 | tokusatsu | 86 | 特摄相关衍生视频 | [/v/douga/tokusatsu](https://www.bilibili.com/v/douga/tokusatsu) |
+| 动漫杂谈 | acgntalks | 253 | 以谈话形式对ACGN文化圈进行的鉴赏、吐槽、评点、解说、推荐、科普等内容 | [/v/douga/acgntalks](https://www.bilibili.com/v/douga/acgntalks) |
+| 综合 | other | 27 | 以动画及动画相关内容为素材,包括但不仅限于音频替换、恶搞改编、排行榜等内容 | [/v/douga/other](https://www.bilibili.com/v/douga/other) |
+
+## 番剧
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|---------|-------------|-----|---------------------------|----------------------------------------------------------------------|
+| 番剧(主分区) | anime | 13 | | [/anime](https://www.bilibili.com/anime) |
+| 资讯 | information | 51 | 动画番剧相关资讯视频 | [/v/anime/information](https://www.bilibili.com/v/anime/information) |
+| 官方延伸 | offical | 152 | 动画番剧为主题的宣传节目、采访视频,及声优相关视频 | [/v/anime/offical](https://www.bilibili.com/v/anime/offical) |
+| 完结动画 | finish | 32 | 已完结的动画番剧合集 | [/v/anime/finish](https://www.bilibili.com/v/anime/finish) |
+| 连载动画 | serial | 33 | 当季连载的动画番剧 | [/v/anime/serial](https://www.bilibili.com/v/anime/serial) |
+
+## 国创
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|---------|-------------|-----|------------|------------------------------------------------------------------------------|
+| 国创(主分区) | guochuang | 167 | | [/guochuang](https://www.bilibili.com/guochuang) |
+| 国产动画 | chinese | 153 | 我国出品的PGC动画 | [/v/guochuang/chinese](https://www.bilibili.com/v/guochuang/chinese) |
+| 国产原创相关 | original | 168 | | [/v/guochuang/original](https://www.bilibili.com/v/guochuang/original) |
+| 布袋戏 | puppetry | 169 | | [/v/guochuang/puppetry](https://www.bilibili.com/v/guochuang/puppetry) |
+| 资讯 | information | 170 | | [/v/guochuang/information](https://www.bilibili.com/v/guochuang/information) |
+| 动态漫·广播剧 | motioncomic | 195 | | [/v/guochuang/motioncomic](https://www.bilibili.com/v/guochuang/motioncomic) |
+
+## 音乐
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|---------------|----------------|---------|----------------------------------------------------------|--------------------------------------------------------------------|
+| 音乐(主分区) | music | 3 | | [/v/music](https://www.bilibili.com/v/music) |
+| 原创音乐 | original | 28 | 原创歌曲及纯音乐,包括改编、重编曲及remix | [/v/music/original](https://www.bilibili.com/v/music/original) |
+| 音乐现场 | live | 29 | 音乐表演的实况视频,包括官方的综艺节目、音乐剧、音乐节、演唱会、打歌舞台现场等,以及个人演出/街头表演现场等 | [/v/music/live](https://www.bilibili.com/v/music/live) |
+| 翻唱 | cover | 31 | 对曲目的人声再演绎视频 | [/v/music/cover](https://www.bilibili.com/v/music/cover) |
+| 演奏 | perform | 59 | 乐器和非传统乐器器材的演奏作品 | [/v/music/perform](https://www.bilibili.com/v/music/perform) |
+| 乐评盘点 | commentary | 243 | 音乐类新闻、盘点、点评、reaction、榜单、采访、幕后故事、唱片开箱等 | [/v/music/commentary](https://www.bilibili.com/v/music/commentary) |
+| VOCALOID·UTAU | vocaloid | 30 | 以VOCALOID等歌声合成引擎为基础,运用各类音源进行的创作 | [/v/music/vocaloid](https://www.bilibili.com/v/music/vocaloid) |
+| MV | mv | 193 | 为音乐作品配合拍摄或制作的音乐录影带(Music Video),以及自制拍摄、剪辑、翻拍MV | [/v/music/mv](https://www.bilibili.com/v/music/mv) |
+| 音乐粉丝饭拍 | fan_videos | 266 | 在音乐演出现场由粉丝团体或个人拍摄的非官方记录视频,包括但不限于粉丝自制饭拍、直拍、Vlog以及衍生的内容混剪等 | [/v/music/fan_videos](https://www.bilibili.com/v/music/fan_videos) |
+| AI音乐 | ai_music | 265 | 以AI合成技术为基础,运用各类工具进行的AI作编曲、AI作词、AI语音、AI变声、AI翻唱、AI MV等创作 | [/v/music/ai_music](https://www.bilibili.com/v/music/ai_music) |
+| 电台 | radio | 267 | 音乐分享、播单、白噪音、有声读物等以听为主的播放内容 | [/v/music/radio](https://www.bilibili.com/v/music/radio) |
+| 音乐教学 | tutorial | 244 | 以音乐教学为目的的内容 | [/v/music/tutorial](https://www.bilibili.com/v/music/tutorial) |
+| 音乐综合 | other | 130 | 所有无法被收纳到其他音乐二级分区的音乐类视频 | [/v/music/other](https://www.bilibili.com/v/music/other) |
+| ~~电音~~(已下线) | ~~electronic~~ | ~~194~~ | ~~以电子合成器、音乐软体等产生的电子声响制作的音乐~~ | ~~/v/music/electronic~~ |
+
+## 舞蹈
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|-------------------------|----------|-----|--------------------------------------|----------------------------------------------------------------|
+| 舞蹈(主分区) | dance | 129 | | [/v/dance](https://www.bilibili.com/v/dance) |
+| 宅舞 | otaku | 20 | 与ACG相关的翻跳、原创舞蹈 | [/v/dance/otaku](https://www.bilibili.com/v/dance/otaku) |
+| 街舞 | hiphop | 198 | 收录街舞相关内容,包括赛事现场、舞室作品、个人翻跳、FREESTYLE等 | [/v/dance/hiphop](https://www.bilibili.com/v/dance/hiphop) |
+| 明星舞蹈 | star | 199 | 国内外明星发布的官方舞蹈及其翻跳内容 | [/v/dance/star](https://www.bilibili.com/v/dance/star) |
+| 国风舞蹈 | china | 200 | 收录国风向舞蹈内容,包括中国舞、民族民间舞、汉唐舞、国风爵士等 | [/v/dance/china](https://www.bilibili.com/v/dance/china) |
+| 颜值·网红舞 (~~原手势·网红舞~~) | gestures | 255 | 手势舞及网红流行舞蹈、短视频舞蹈等相关视频 | [/v/dance/gestures](https://www.bilibili.com/v/dance/gestures) |
+| 舞蹈综合 | three_d | 154 | 收录无法定义到其他舞蹈子分区的舞蹈视频 | [/v/dance/three_d](https://www.bilibili.com/v/dance/three_d) |
+| 舞蹈教程 | demo | 156 | 镜面慢速,动作分解,基础教程等具有教学意义的舞蹈视频 | [/v/dance/demo](https://www.bilibili.com/v/dance/demo) |
+
+## 游戏
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|---------|-------------|-----|---------------------------------------------------------------|--------------------------------------------------------------------|
+| 游戏(主分区) | game | 4 | | [/v/game](https://www.bilibili.com/v/game) |
+| 单机游戏 | stand_alone | 17 | 以所有平台(PC、主机、移动端)的单机或联机游戏为主的视频内容,包括游戏预告、CG、实况解说及相关的评测、杂谈与视频剪辑等 | [/v/game/stand_alone](https://www.bilibili.com/v/game/stand_alone) |
+| 电子竞技 | esports | 171 | 具有高对抗性的电子竞技游戏项目,其相关的赛事、实况、攻略、解说、短剧等视频。 | [/v/game/esports](https://www.bilibili.com/v/game/esports) |
+| 手机游戏 | mobile | 172 | 以手机及平板设备为主要平台的游戏,其相关的实况、攻略、解说、短剧、演示等视频。 | [/v/game/mobile](https://www.bilibili.com/v/game/mobile) |
+| 网络游戏 | online | 65 | 由网络运营商运营的多人在线游戏,以及电子竞技的相关游戏内容。包括赛事、攻略、实况、解说等相关视频 | [/v/game/online](https://www.bilibili.com/v/game/online) |
+| 桌游棋牌 | board | 173 | 桌游、棋牌、卡牌对战等及其相关电子版游戏的实况、攻略、解说、演示等视频。 | [/v/game/board](https://www.bilibili.com/v/game/board) |
+| GMV | gmv | 121 | 由游戏素材制作的MV视频。以游戏内容或CG为主制作的,具有一定创作程度的MV类型的视频 | [/v/game/gmv](https://www.bilibili.com/v/game/gmv) |
+| 音游 | music | 136 | 各个平台上,通过配合音乐与节奏而进行的音乐类游戏视频 | [/v/game/music](https://www.bilibili.com/v/game/music) |
+| Mugen | mugen | 19 | 以Mugen引擎为平台制作、或与Mugen相关的游戏视频 | [/v/game/mugen](https://www.bilibili.com/v/game/mugen) |
+
+## 知识
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|-----------------------------|-------------------|--------|-----------------------------|----------------------------------------------------------------------------------------|
+| 知识(主分区) | knowledge | 36 | | [/v/knowledge](https://www.bilibili.com/v/knowledge) |
+| 科学科普 | science | 201 | 回答你的十万个为什么 | [/v/knowledge/science](https://www.bilibili.com/v/knowledge/science) |
+| 社科·法律·心理(~~原社科人文、原趣味科普人文~~) | social_science | 124 | 基于社会科学、法学、心理学展开或个人观点输出的知识视频 | [/v/knowledge/social_science](https://www.bilibili.com/v/knowledge/social_science) |
+| 人文历史 | humanity_history | 228 | 看看古今人物,聊聊历史过往,品品文学典籍 | [/v/knowledge/humanity_history](https://www.bilibili.com/v/knowledge/humanity_history) |
+| 财经商业 | business | 207 | 说金融市场,谈宏观经济,一起畅聊商业故事 | [/v/knowledge/finance](https://www.bilibili.com/v/knowledge/finance) |
+| 校园学习 | campus | 208 | 老师很有趣,学生也有才,我们一起搞学习 | [/v/knowledge/campus](https://www.bilibili.com/v/knowledge/campus) |
+| 职业职场 | career | 209 | 职业分享、升级指南,一起成为最有料的职场人 | [/v/knowledge/career](https://www.bilibili.com/v/knowledge/career) |
+| 设计·创意 | design | 229 | 天马行空,创意设计,都在这里 | [/v/knowledge/design](https://www.bilibili.com/v/knowledge/design) |
+| 野生技术协会 | skill | 122 | 技能党集合,是时候展示真正的技术了 | [/v/knowledge/skill](https://www.bilibili.com/v/knowledge/skill) |
+| ~~演讲·公开课~~(已下线) | ~~speech_course~~ | ~~39~~ | ~~涨知识的好地方,给爱学习的你~~ | ~~/v/technology/speech_course~~ |
+| ~~星海~~(已下线) | ~~military~~ | ~~96~~ | ~~军事类内容的圣地~~ | ~~/v/technology/military~~ |
+| ~~机械~~(已下线) | ~~mechanical~~ | ~~98~~ | ~~机械设备展示或制作视频~~ | ~~/v/technology/mechanical~~ |
+
+## 科技
+
+新: 旧:
+
+~~原数码分区~~
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|----------------------|---------------------|---------|----------------------------------|------------------------------------------------------------------------|
+| 科技(主分区) | tech | 188 | | [/v/tech](https://www.bilibili.com/v/tech) |
+| 数码(~~原手机平板~~) | digital | 95 | 科技数码产品大全,一起来做发烧友 | [/v/tech/digital](https://www.bilibili.com/v/tech/digital) |
+| 软件应用 | application | 230 | 超全软件应用指南 | [/v/tech/application](https://www.bilibili.com/v/tech/application) |
+| 计算机技术 | computer_tech | 231 | 研究分析、教学演示、经验分享......有关计算机技术的都在这里 | [/v/tech/computer_tech](https://www.bilibili.com/v/tech/computer_tech) |
+| 科工机械 (~~原工业·工程·机械~~) | industry | 232 | 从小芯片到大工程,一起见证科工力量 | [/v/tech/industry](https://www.bilibili.com/v/tech/industry) |
+| 极客DIY | diy | 233 | 炫酷技能,极客文化,硬核技巧,准备好你的惊讶 | [/v/tech/diy](https://www.bilibili.com/v/tech/diy) |
+| ~~电脑装机~~(已下线) | ~~pc~~ | ~~189~~ | ~~电脑、笔记本、装机配件、外设和软件教程等相关视频~~ | ~~/v/digital/pc~~ |
+| ~~摄影摄像~~(已下线) | ~~photography~~ | ~~190~~ | ~~摄影摄像器材、拍摄剪辑技巧、拍摄作品分享等相关视频~~ | ~~/v/digital/photography~~ |
+| ~~影音智能~~(已下线) | ~~intelligence_av~~ | ~~191~~ | ~~影音设备、智能产品等相关视频~~ | ~~/v/digital/intelligence_av~~ |
+
+## 运动
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|---------|---------------|-----|--------------------------------------------------------|----------------------------------------------------------------------------|
+| 运动(主分区) | sports | 234 | | [/v/sports](https://www.bilibili.com/v/sports) |
+| 篮球 | basketball | 235 | 与篮球相关的视频,包括但不限于篮球赛事、教学、评述、剪辑、剧情等相关内容 | [/v/sports/basketball](https://www.bilibili.com/v/sports/basketball) |
+| 足球 | football | 249 | 与足球相关的视频,包括但不限于足球赛事、教学、评述、剪辑、剧情等相关内容 | [/v/sports/football](https://www.bilibili.com/v/sports/football) |
+| 健身 | aerobics | 164 | 与健身相关的视频,包括但不限于瑜伽、CrossFit、健美、力量举、普拉提、街健等相关内容 | [/v/sports/aerobics](https://www.bilibili.com/v/sports/aerobics) |
+| 竞技体育 | athletic | 236 | 与竞技体育相关的视频,包括但不限于乒乓、羽毛球、排球、赛车等竞技项目的赛事、评述、剪辑、剧情等相关内容 | [/v/sports/culture](https://www.bilibili.com/v/sports/culture) |
+| 运动文化 | culture | 237 | 与运动文化相关的视频,包络但不限于球鞋、球衣、球星卡等运动衍生品的分享、解读,体育产业的分析、科普等相关内容 | [/v/sports/culture](https://www.bilibili.com/v/sports/culture) |
+| 运动综合 | comprehensive | 238 | 与运动综合相关的视频,包括但不限于钓鱼、骑行、滑板等日常运动分享、教学、Vlog等相关内容 | [/v/sports/comprehensive](https://www.bilibili.com/v/sports/comprehensive) |
+
+## 汽车
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|---------------|------------------|---------|---------------------------------------------------------------|----------------------------------------------------------------------------|
+| 汽车(主分区) | car | 223 | | [/v/car](https://www.bilibili.com/v/car) |
+| 汽车知识科普 | knowledge | 258 | 关于汽车技术与文化的硬核科普,以及生活中学车、用车、养车的相关知识 | [/v/car/knowledge](https://www.bilibili.com/v/car/knowledge) |
+| 购车攻略 | strategy | 227 | 丰富详实的购车建议和新车体验 | [/v/car/strategy](https://www.bilibili.com/v/car/strategy) |
+| 新能源车 | newenergyvehicle | 247 | 新能源汽车相关内容,包括电动汽车、混合动力汽车等车型种类,包含不限于新车资讯、试驾体验、专业评测、技术解读、知识科普等内容 | [/v/car/newenergyvehicle](https://www.bilibili.com/v/car/newenergyvehicle) |
+| 赛车 | racing | 245 | F1等汽车运动相关 | [/v/car/racing](https://www.bilibili.com/v/car/racing) |
+| 改装玩车 | modifiedvehicle | 246 | 汽车文化及改装车相关内容,包括改装车、老车修复介绍、汽车聚会分享等内容 | [/v/car/modifiedvehicle](https://www.bilibili.com/v/car/modifiedvehicle) |
+| 摩托车 | motorcycle | 240 | 骑士们集合啦 | [/v/car/motorcycle](https://www.bilibili.com/v/car/motorcycle) |
+| 房车 | touringcar | 248 | 房车及营地相关内容,包括不限于产品介绍、驾驶体验、房车生活和房车旅行等内容 | [/v/car/touringcar](https://www.bilibili.com/v/car/touringcar) |
+| 汽车生活 | life | 176 | 分享汽车及出行相关的生活体验类视频 | [/v/car/life](https://www.bilibili.com/v/car/life) |
+| ~~汽车文化~~(已下线) | ~~culture~~ | ~~224~~ | ~~车迷的精神圣地,包括汽车赛事、品牌历史、汽车改装、经典车型和汽车模型等~~ | ~~/v/car/culture~~ |
+| ~~汽车极客~~(已下线) | ~~geek~~ | ~~225~~ | ~~汽车硬核达人聚集地,包括DIY造车、专业评测和技术知识分享~~ | ~~/v/car/geek~~ |
+| ~~智能出行~~(已下线) | ~~smart~~ | ~~226~~ | ~~探索新能源汽车和未来智能出行的前沿阵地~~ | ~~/v/car/smart~~ |
+
+## 生活
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|--------------|----------------|---------|-----------------------------------|----------------------------------------------------------------|
+| 生活(主分区) | life | 160 | | [/v/life](https://www.bilibili.com/v/life) |
+| 搞笑 | funny | 138 | 各种沙雕有趣的搞笑剪辑,挑战,表演,配音等视频 | [/v/life/funny](https://www.bilibili.com/v/life/funny) |
+| 亲子 | parenting | 254 | 分享亲子、萌娃、母婴、育儿相关的视频 | [/v/life/parenting](https://www.bilibili.com/v/life/parenting) |
+| 出行 | travel | 250 | 为达到观光游览、休闲娱乐为目的的远途旅行、中近途户外生活、本地探店 | [/v/life/travel](https://www.bilibili.com/v/life/travel) |
+| 三农 | rurallife | 251 | 分享美好农村生活 | [/v/life/rurallife](https://www.bilibili.com/v/life/rurallife) |
+| 家居房产 | home | 239 | 与买房、装修、居家生活相关的分享 | [/v/life/home](https://www.bilibili.com/v/life/home) |
+| 手工 | handmake | 161 | 手工制品的制作过程或成品展示、教程、测评类视频 | [/v/life/handmake](https://www.bilibili.com/v/life/handmake) |
+| 绘画 | painting | 162 | 绘画过程或绘画教程,以及绘画相关的所有视频 | [/v/life/painting](https://www.bilibili.com/v/life/painting) |
+| 日常 | daily | 21 | 记录日常生活,分享生活故事 | [/v/life/daily](https://www.bilibili.com/v/life/daily) |
+| ~~美食圈~~(重定向) | ~~food~~ | ~~76~~ | ~~美食鉴赏&料理制作教程~~ | ~~/v/life/food~~ |
+| ~~动物圈~~(重定向) | ~~animal~~ | ~~75~~ | ~~萌萌的动物都在这里哦~~ | ~~/v/life/animal~~ |
+| ~~运动~~(重定向) | ~~sports~~ | ~~163~~ | ~~运动相关的记录、教程、装备评测和精彩瞬间剪辑视频~~ | ~~/v/life/sports~~ |
+| ~~汽车~~(重定向) | ~~automobile~~ | ~~176~~ | ~~专业汽车资讯,分享车生活~~ | ~~/v/life/automobile~~ |
+| ~~其他~~(已下线) | ~~other~~ | ~~174~~ | ~~对于分区归属不明的视频进行归纳整合的特定分区~~ | ~~/v/life/other~~ |
+
+## 美食
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|------------------------|-------------|-----|------------------|--------------------------------------------------------------------|
+| 美食(主分区) | food | 211 | | [/v/food](https://www.bilibili.com/v/food) |
+| 美食制作(~~原[生活]->[美食圈]~~) | make | 76 | 学做人间美味,展示精湛厨艺 | [/v/food/make](https://www.bilibili.com/v/food/make) |
+| 美食侦探 | detective | 212 | 寻找美味餐厅,发现街头美食 | [/v/food/detective](https://www.bilibili.com/v/food/detective) |
+| 美食测评 | measurement | 213 | 吃货世界,品尝世间美味 | [/v/food/measurement](https://www.bilibili.com/v/food/measurement) |
+| 田园美食 | rural | 214 | 品味乡野美食,寻找山与海的味道 | [/v/food/rural](https://www.bilibili.com/v/food/rural) |
+| 美食记录 | record | 215 | 记录一日三餐,给生活添一点幸福感 | [/v/food/record](https://www.bilibili.com/v/food/record) |
+
+## 动物圈
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|----------|------------------|-----|-------------------------------------------|----------------------------------------------------------------------------------|
+| 动物圈(主分区) | animal | 217 | | [/v/animal](https://www.bilibili.com/v/animal) |
+| 喵星人 | cat | 218 | 喵喵喵喵喵 | [/v/animal/cat](https://www.bilibili.com/v/animal/cat) |
+| 汪星人 | dog | 219 | 汪汪汪汪汪 | [/v/animal/dog](https://www.bilibili.com/v/animal/dog) |
+| 小宠异宠 | reptiles | 222 | 奇妙宠物大赏 | [/v/animal/reptiles](https://www.bilibili.com/v/animal/reptiles) |
+| 野生动物 | wild_animal | 221 | 内有“猛兽”出没 | [/v/animal/wild_animal](https://www.bilibili.com/v/animal/wild_animal) |
+| 动物二创 | second_edition | 220 | 解说、配音、剪辑、混剪 | [/v/animal/second_edition](https://www.bilibili.com/v/animal/second_edition) |
+| 动物综合 | animal_composite | 75 | 收录除上述子分区外,其余动物相关视频以及非动物主体或多个动物主体的动物相关延伸内容 | [/v/animal/animal_composite](https://www.bilibili.com/v/animal/animal_composite) |
+
+## 鬼畜
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|------------|-----------------|-----|-----------------------------------------|----------------------------------------------------------------------------------|
+| 鬼畜(主分区) | kichiku | 119 | | [/v/kichiku](https://www.bilibili.com/v/kichiku) |
+| 鬼畜调教 | guide | 22 | 使用素材在音频、画面上做一定处理,达到与BGM一定的同步感 | [/v/kichiku/guide](https://www.bilibili.com/v/kichiku/guide) |
+| 音MAD | mad | 26 | 使用素材音频进行一定的二次创作来达到还原原曲的非商业性质稿件 | [/v/kichiku/mad/v/kichiku/mad](https://www.bilibili.com/v/kichiku/mad) |
+| 人力VOCALOID | manual_vocaloid | 126 | 将人物或者角色的无伴奏素材进行人工调音,使其就像VOCALOID一样歌唱的技术 | [/v/kichiku/manual_vocaloid](https://www.bilibili.com/v/kichiku/manual_vocaloid) |
+| 鬼畜剧场 | theatre | 216 | 使用素材进行人工剪辑编排的有剧情的作品 | [/v/kichiku/theatre](https://www.bilibili.com/v/kichiku/theatre) |
+| 教程演示 | course | 127 | 鬼畜相关的教程演示 | [/v/kichiku/course](https://www.bilibili.com/v/kichiku/course) |
+
+## 时尚
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|--------------|--------------|---------|---------------------------------------------|--------------------------------------------------------------------|
+| 时尚(主分区) | fashion | 155 | | [/v/fashion](https://www.bilibili.com/v/fashion) |
+| 美妆护肤 | makeup | 157 | 彩妆护肤、美甲美发、仿妆、医美相关内容分享或产品测评 | [/v/fashion/makeup](https://www.bilibili.com/v/fashion/makeup) |
+| 仿妆cos | cos | 252 | 对二次元、三次元人物角色进行模仿、还原、展示、演绎的内容 | [/v/fashion/cos](https://www.bilibili.com/v/fashion/cos) |
+| 穿搭 | clothing | 158 | 穿搭风格、穿搭技巧的展示分享,涵盖衣服、鞋靴、箱包配件、配饰(帽子、钟表、珠宝首饰)等 | [/v/fashion/clothing](https://www.bilibili.com/v/fashion/clothing) |
+| 时尚潮流 | catwalk | 159 | 时尚街拍、时装周、时尚大片,时尚品牌、潮流等行业相关记录及知识科普 | [/v/fashion/catwalk](https://www.bilibili.com/v/fashion/catwalk) |
+| ~~健身~~(重定向) | ~~aerobics~~ | ~~164~~ | ~~器械、有氧、拉伸运动等,以达到强身健体、减肥瘦身、形体塑造目的~~ | ~~/v/fashion/aerobics~~ |
+| ~~风尚标~~(已下线) | ~~trends~~ | ~~192~~ | ~~时尚明星专访、街拍、时尚购物相关知识科普~~ | ~~/v/fashion/trends~~ |
+
+## 资讯
+
+**注:该分区无排名功能**
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|---------|-------------|-----|------------------------|----------------------------------------------------------------------------|
+| 资讯(主分区) | information | 202 | | [/v/information](https://www.bilibili.com/v/information) |
+| 热点 | hotspot | 203 | 全民关注的时政热门资讯 | [/v/information/hotspot](https://www.bilibili.com/v/information/hotspot) |
+| 环球 | global | 204 | 全球范围内发生的具有重大影响力的事件动态 | [/v/information/global](https://www.bilibili.com/v/information/global) |
+| 社会 | social | 205 | 日常生活的社会事件、社会问题、社会风貌的报道 | [/v/information/social](https://www.bilibili.com/v/information/social) |
+| 综合 | multiple | 206 | 除上述领域外其它垂直领域的综合资讯 | [/v/information/multiple](https://www.bilibili.com/v/information/multiple) |
+
+## 广告
+
+
+
+**该分区已下线**
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|-------------|--------|---------|-----|--------------|
+| ~~广告(主分区)~~ | ~~ad~~ | ~~165~~ | | ~~/v/ad~~ |
+| ~~广告~~(已下线) | ~~ad~~ | ~~166~~ | | ~~/v/ad/ad~~ |
+
+## 娱乐
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|-----------------------|--------------------|---------|------------------------------------------|--------------------------------------------------------------------------------|
+| 娱乐(主分区) | ent | 5 | | [/v/ent](https://www.bilibili.com/v/ent) |
+| 娱乐杂谈 | talker | 241 | 娱乐人物解读、娱乐热点点评、娱乐行业分析 | [/v/ent/talker](https://www.bilibili.com/v/ent/talker) |
+| CP安利 | cp_recommendation | 262 | 以安利各类娱乐名人、角色CP之间默契于火花为主题的混剪、解说,观点表达类视频 | [/v/ent/cp_recommendation](https://www.bilibili.com/v/ent/cp_recommendation) |
+| 颜值安利 | beauty | 263 | 以各类娱乐名人、角色的颜值、气质魅力为核心的混剪视频 | [/v/ent/beauty](https://www.bilibili.com/v/ent/beauty) |
+| 娱乐粉丝创作 (~~原粉丝创作~~) | fans | 242 | 粉丝向创作视频 | [/v/ent/fans](https://www.bilibili.com/v/ent/fans) |
+| 娱乐资讯 | entertainment_news | 264 | 具备趣味价值的文化娱乐新闻与动态报道,如名人动态,作品发布,舞台演出,趣闻盘点等 | [/v/ent/entertainment_news](https://www.bilibili.com/v/ent/entertainment_news) |
+| 明星综合 | celebrity | 137 | 娱乐圈动态、明星资讯相关 | [/v/ent/celebrity](https://www.bilibili.com/v/ent/celebrity) |
+| 综艺 | variety | 71 | 所有综艺相关,全部一手掌握! | [/v/ent/variety](https://www.bilibili.com/v/ent/variety) |
+| ~~Korea相关~~(已下线) | ~~korea~~ | ~~131~~ | ~~Korea相关音乐、舞蹈、综艺等视频~~ | ~~/v/ent/korea~~ |
+
+## 影视
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|---------|---------------|-----|-------------------------------|----------------------------------------------------------------------------------|
+| 影视(主分区) | cinephile | 181 | | [/v/cinephile](https://www.bilibili.com/v/cinephile) |
+| 影视杂谈 | cinecism | 182 | 影视评论、解说、吐槽、科普等 | [/v/cinephile/cinecism](https://www.bilibili.com/v/cinephile/cinecism) |
+| 影视剪辑 | montage | 183 | 对影视素材进行剪辑再创作的视频 | [/v/cinephile/montage](https://www.bilibili.com/v/cinephile/montage) |
+| 影视整活 | mashup | 260 | 使用影视素材制造的有趣、有梗的创意混剪、配音、特效玩梗视频 | [/v/cinephile/mashup](https://www.bilibili.com/v/cinephile/mashup) |
+| AI影像 | ai_imaging | 259 | 分享AI制作的影像作品、创作历程、技术风向 | [/v/cinephile/ai_imaging](https://www.bilibili.com/v/cinephile/ai_imaging) |
+| 预告·资讯 | trailer_info | 184 | 影视类相关资讯,预告,花絮等视频 | [/v/cinephile/trailer_info](https://www.bilibili.com/v/cinephile/trailer_info) |
+| 小剧场 | shortplay | 85 | 有场景、有剧情的演绎类内容 | [/v/cinephile/shortplay](https://www.bilibili.com/v/cinephile/shortplay) |
+| 短片 | shortfilm | 256 | 各种类型的短片 | [/v/cinephile/shortfilm](https://www.bilibili.com/v/cinephile/shortfilm) |
+| 影视综合 | comprehensive | 261 | 一切无法被收纳其他影视二级分区的影视相关内容 | [/v/cinephile/comprehensive](https://www.bilibili.com/v/cinephile/comprehensive) |
+
+## 纪录片
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|----------|-------------|-----|----|----------------------------------------------------------------------------|
+| 纪录片(主分区) | documentary | 177 | | [/documentary](https://www.bilibili.com/documentary) |
+| 人文·历史 | history | 37 | | [/v/documentary/history](https://www.bilibili.com/v/documentary/history) |
+| 科学·探索·自然 | science | 178 | | [/v/documentary/science](https://www.bilibili.com/v/documentary/science) |
+| 军事 | military | 179 | | [/v/documentary/military](https://www.bilibili.com/v/documentary/military) |
+| 社会·美食·旅行 | travel | 180 | | [/v/documentary/travel](https://www.bilibili.com/v/documentary/travel) |
+
+## 电影
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|---------|---------|-----|-----|--------------------------------------------------------------|
+| 电影(主分区) | movie | 23 | | [/movie](https://www.bilibili.com/movie) |
+| 华语电影 | chinese | 147 | | [/v/movie/chinese](https://www.bilibili.com/v/movie/chinese) |
+| 欧美电影 | west | 145 | | [/v/movie/west](https://www.bilibili.com/v/movie/west) |
+| 日本电影 | japan | 146 | | [/v/movie/japan](https://www.bilibili.com/v/movie/japan) |
+| 其他国家 | movie | 83 | | [/v/movie/movie](https://www.bilibili.com/v/movie/movie) |
+
+## 电视剧
+
+
+
+| 名称 | 代号 | tid | 简介 | url路由 |
+|----------|----------|-----|-----|----------------------------------------------------------|
+| 电视剧(主分区) | tv | 11 | | [/tv](https://www.bilibili.com/tv) |
+| 国产剧 | mainland | 185 | | [/v/tv/mainland](https://www.bilibili.com/v/tv/mainland) |
+| 海外剧 | overseas | 187 | | [/v/tv/overseas](https://www.bilibili.com/v/tv/overseas) |
diff --git a/docs/video/video_zone_v2.md b/docs/video/video_zone_v2.md
new file mode 100644
index 0000000..247c122
--- /dev/null
+++ b/docs/video/video_zone_v2.md
@@ -0,0 +1,458 @@
+# 视频分区一览 (v2)
+
+本文档中的内容适用于 `tid_v2`(部分接口写为 `tidv2`)、`tname_v2`(部分接口写为 `tnamev2`)等字段,关于 `tid`、`tname` 等字段请参阅 “[视频分区一览](./video_zone.md)” 文档
+
+目前 B 站尚未启用子分区
+
+## 动画
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | ----------- | ---- | --------- | ---------------------------------------------- |
+| 动画 (主分区) | douga | 1005 | 7 | [/c/douga/](https://www.bilibili.com/c/douga/) |
+| 同人动画 | fan_anime | 2037 | | |
+| 模玩周边 | garage_kit | 2038 | | |
+| cosplay | cosplay | 2039 | | |
+| 二次元线下 | offline | 2040 | | |
+| 动漫剪辑 | editing | 2041 | | |
+| 动漫评论 | commentary | 2042 | | |
+| 动漫速读 | quick_view | 2043 | | |
+| 动漫配音 | voice | 2044 | | |
+| 动漫资讯 | information | 2045 | | |
+| 网文解读 | interpret | 2046 | | |
+| 虚拟up主 | vup | 2047 | | |
+| 特摄 | tokusatsu | 2048 | | |
+| 布袋戏 | puppetry | 2049 | | |
+| 漫画·动态漫 | comic | 2050 | | |
+| 广播剧 | motion | 2051 | | |
+| 动漫reaction | reaction | 2052 | | |
+| 动漫教学 | tutorial | 2053 | | |
+| 二次元其他 | other | 2054 | | |
+
+## 游戏
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| -------------- | ----------- | ---- | --------- | -------------------------------------------- |
+| 游戏 (主分区) | game | 1008 | 8 | [/c/game/](https://www.bilibili.com/c/game/) |
+| 单人RPG游戏 | rpg | 2064 | | |
+| MMORPG游戏 | mmorpg | 2065 | | |
+| 单机主机类游戏 | stand_alone | 2066 | | |
+| SLG游戏 | slg | 2067 | | |
+| 回合制策略游戏 | tbs | 2068 | | |
+| 即时策略游戏 | rts | 2069 | | |
+| MOBA游戏 | moba | 2070 | | |
+| 射击游戏 | stg | 2071 | | |
+| 体育竞速游戏 | spg | 2072 | | |
+| 动作竞技游戏 | act | 2073 | | |
+| 音游舞游 | msc | 2074 | | |
+| 模拟经营游戏 | sim | 2075 | | |
+| 女性向游戏 | otome | 2076 | | |
+| 休闲/小游戏 | puz | 2077 | | |
+| 沙盒类 | sandbox | 2078 | | |
+| 其他游戏 | other | 2079 | | |
+
+## 鬼畜
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | --------------- | ---- | --------- | -------------------------------------------------- |
+| 鬼畜 (主分区) | kichiku | 1007 | 9 | [/c/kichiku/](https://www.bilibili.com/c/kichiku/) |
+| 鬼畜调教 | guide | 2059 | | |
+| 鬼畜剧场 | theatre | 2060 | | |
+| 人力VOCALOID | manual_vocaloid | 2061 | | |
+| 音MAD | mad | 2062 | | |
+| 鬼畜综合 | other | 2063 | | |
+
+## 音乐
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | ---------- | ---- | --------- | ---------------------------------------------- |
+| 音乐 (主分区) | music | 1003 | 10 | [/c/music/](https://www.bilibili.com/c/music/) |
+| 原创音乐 | original | 2016 | | |
+| MV | mv | 2017 | | |
+| 音乐现场 | live | 2018 | | |
+| 乐迷饭拍 | fan_videos | 2019 | | |
+| 翻唱 | cover | 2020 | | |
+| 演奏 | perform | 2021 | | |
+| VOCALOID | vocaloid | 2022 | | |
+| AI音乐 | ai_music | 2023 | | |
+| 电台·歌单 | radio | 2024 | | |
+| 音乐教学 | tutorial | 2025 | | |
+| 乐评盘点 | commentary | 2026 | | |
+| 音乐综合 | other | 2027 | | |
+
+## 舞蹈
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | -------- | ---- | --------- | ---------------------------------------------- |
+| 舞蹈 (主分区) | dance | 1004 | 11 | [/c/dance/](https://www.bilibili.com/c/dance/) |
+| 宅舞 | otaku | 2028 | | |
+| 街舞 | hiphop | 2029 | | |
+| 颜值·网红舞 | gestures | 2030 | | |
+| 明星舞蹈 | star | 2031 | | |
+| 国风舞蹈 | china | 2032 | | |
+| 舞蹈教学 | tutorial | 2033 | | |
+| 芭蕾舞 | ballet | 2034 | | |
+| wota艺 | wota | 2035 | | |
+| 舞蹈综合 | other | 2036 | | |
+
+## 影视
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | ----------- | ---- | --------- | ------------------------------------------------------ |
+| 影视 (主分区) | cinephile | 1001 | 12 | [/c/cinephile/](https://www.bilibili.com/c/cinephile/) |
+| 影视解读 | commentary | 2001 | | |
+| 影视剪辑 | montage | 2002 | | |
+| 影视资讯 | information | 2003 | | |
+| 影视正片搬运 | porterage | 2004 | | |
+| 短剧短片 | shortfilm | 2005 | | |
+| AI影视 | ai | 2006 | | |
+| 影视reaction | reaction | 2007 | | |
+| 影视综合 | other | 2008 | | |
+
+## 娱乐
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | ----------- | ---- | --------- | ------------------------------------------ |
+| 娱乐 (主分区) | ent | 1002 | 13 | [/c/ent/](https://www.bilibili.com/c/ent/) |
+| 娱乐评论 | commentary | 2009 | | |
+| 明星剪辑 | montage | 2010 | | |
+| 娱乐饭拍&现场 | fans_video | 2011 | | |
+| 娱乐资讯 | information | 2012 | | |
+| 娱乐reaction | reaction | 2013 | | |
+| 娱乐综艺正片 | variety | 2014 | | |
+| 娱乐综合 | other | 2015 | | |
+
+## 知识
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| -------------- | ------------------ | ---- | --------- | ------------------------------------------------------ |
+| 知识 (主分区) | knowledge | 1010 | 14 | [/c/knowledge/](https://www.bilibili.com/c/knowledge/) |
+| 应试教育 | exam | 2084 | | |
+| 非应试语言学习 | lang_skill | 2085 | | |
+| 大学专业知识 | campus | 2086 | | |
+| 商业财经 | business | 2087 | | |
+| 社会观察 | social_observation | 2088 | | |
+| 时政解读 | politics | 2089 | | |
+| 人文历史 | humanity_history | 2090 | | |
+| 设计艺术 | design | 2091 | | |
+| 心理杂谈 | psychology | 2092 | | |
+| 职场发展 | career | 2093 | | |
+| 科学科普 | science | 2094 | | |
+| 其他知识杂谈 | other | 2095 | | |
+
+## 科技数码
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ----------------- | ----------- | ---- | --------- | -------------------------------------------- |
+| 科技数码 (主分区) | tech | 1012 | 15 | [/c/tech/](https://www.bilibili.com/c/tech/) |
+| 电脑 | computer | 2099 | | |
+| 手机 | phone | 2100 | | |
+| 平板电脑 | pad | 2101 | | |
+| 摄影摄像 | photography | 2102 | | |
+| 工程机械 | machine | 2103 | | |
+| 自制发明/设备 | create | 2104 | | |
+| 科技数码综合 | other | 2105 | | |
+
+## 资讯
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | ----------- | ---- | --------- | ---------------------------------------------------------- |
+| 资讯 (主分区) | information | 1009 | 16 | [/c/information/](https://www.bilibili.com/c/information/) |
+| 时政资讯 | politics | 2080 | | |
+| 海外资讯 | overseas | 2081 | | |
+| 社会资讯 | social | 2082 | | |
+| 综合资讯 | other | 2083 | | |
+
+## 美食
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | ---------- | ---- | --------- | -------------------------------------------- |
+| 美食 (主分区) | food | 1020 | 17 | [/c/food/](https://www.bilibili.com/c/food/) |
+| 美食制作 | make | 2149 | | |
+| 美食探店 | detective | 2150 | | |
+| 美食测评 | commentary | 2151 | | |
+| 美食记录 | record | 2152 | | |
+| 美食综合 | other | 2153 | | |
+
+## 小剧场
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| --------------- | ---------- | ---- | --------- | ------------------------------------------------------ |
+| 小剧场 (主分区) | shortplay | 1021 | 18 | [/c/shortplay/](https://www.bilibili.com/c/shortplay/) |
+| 剧情演绎 | plot | 2154 | | |
+| 语言类小剧场 | lang | 2155 | | |
+| UP主小综艺 | up_variety | 2156 | | |
+| 街头采访 | interview | 2157 | | |
+
+## 汽车
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | ---------- | ---- | --------- | ---------------------------------------- |
+| 汽车 (主分区) | car | 1013 | 19 | [/c/car](https://www.bilibili.com/c/car) |
+| 汽车测评 | commentary | 2106 | | |
+| 汽车文化 | culture | 2107 | | |
+| 汽车生活 | life | 2108 | | |
+| 汽车技术 | tech | 2109 | | |
+| 汽车综合 | other | 2110 | | |
+
+## 时尚美妆
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ----------------- | ----------- | ---- | --------- | -------------------------------------------------- |
+| 时尚美妆 (主分区) | fashion | 1014 | 20 | [/c/fashion/](https://www.bilibili.com/c/fashion/) |
+| 美妆 | makeup | 2111 | | |
+| 护肤 | skincare | 2112 | | |
+| 仿装cos | cos | 2113 | | |
+| 鞋服穿搭 | outfits | 2114 | | |
+| 箱包配饰 | accessories | 2115 | | |
+| 珠宝首饰 | jewelry | 2116 | | |
+| 三坑 | trick | 2117 | | |
+| 时尚解读 | commentary | 2118 | | |
+| 时尚综合 | other | 2119 | | |
+
+## 体育运动
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ----------------- | ----------- | ---- | --------- | ------------------------------------------------ |
+| 体育运动 (主分区) | sports | 1018 | 21 | [/c/sports/](https://www.bilibili.com/c/sports/) |
+| 潮流运动 | trend | 2133 | | |
+| 足球 | football | 2134 | | |
+| 篮球 | basketball | 2135 | | |
+| 跑步 | running | 2136 | | |
+| 武术 | kungfu | 2137 | | |
+| 格斗 | fighting | 2138 | | |
+| 羽毛球 | badminton | 2139 | | |
+| 体育资讯 | information | 2140 | | |
+| 体育赛事 | match | 2141 | | |
+| 体育综合 | other | 2142 | | |
+
+## 动物
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| --------------------- | -------- | ---- | --------- | ------------------------------------------------ |
+| 动物 (主分区) | animal | 1024 | 22 | [/c/animal/](https://www.bilibili.com/c/animal/) |
+| 猫 | cat | 2167 | | |
+| 狗 | dog | 2168 | | |
+| 小宠异宠 | reptiles | 2169 | | |
+| 野生动物·动物解说科普 | science | 2170 | | |
+| 动物综合·二创 | other | 2171 | | |
+
+## vlog
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | ------- | ---- | --------- | -------------------------------------------- |
+| vlog (主分区) | vlog | 1029 | 23 | [/c/vlog/](https://www.bilibili.com/c/vlog/) |
+| 中外生活vlog | life | 2194 | | |
+| 学生vlog | student | 2195 | | |
+| 职业vlog | career | 2196 | | |
+| 其他vlog | other | 2197 | | |
+
+## 绘画
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | -------- | ---- | --------- | ---------------------------------------------------- |
+| 绘画 (主分区) | painting | 1006 | 24 | [/c/painting/](https://www.bilibili.com/c/painting/) |
+| 二次元绘画 | acg | 2055 | | |
+| 非二次元绘画 | none_acg | 2056 | | |
+| 绘画学习 | tutorial | 2057 | | |
+| 绘画综合 | other | 2058 | | |
+
+## 人工智能
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ----------------- | ----------- | ---- | --------- | ---------------------------------------- |
+| 人工智能 (主分区) | ai | 1011 | 25 | [/c/ai/](https://www.bilibili.com/c/ai/) |
+| AI学习 | tutorial | 2096 | | |
+| AI资讯 | information | 2097 | | |
+| AI杂谈 | other | 2098 | | |
+
+## 家装房产
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ----------------- | ---------- | ---- | --------- | -------------------------------------------- |
+| 家装房产 (主分区) | home | 1015 | 26 | [/c/home/](https://www.bilibili.com/c/home/) |
+| 买房租房 | trade | 2120 | | |
+| 家庭装修 | renovation | 2121 | | |
+| 家居展示 | furniture | 2122 | | |
+| 家用电器 | appliances | 2123 | | |
+
+## 户外潮流
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ----------------- | -------- | ---- | --------- | ---------------------------------------------------- |
+| 户外潮流 (主分区) | outdoors | 1016 | 27 | [/c/outdoors/](https://www.bilibili.com/c/outdoors/) |
+| 露营 | camping | 2124 | | |
+| 徒步 | hiking | 2125 | | |
+| 户外探秘 | explore | 2126 | | |
+| 户外综合 | other | 2127 | | |
+
+## 健身
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | -------- | ---- | --------- | ------------------------------------------ |
+| 健身 (主分区) | gym | 1017 | 28 | [/c/gym/](https://www.bilibili.com/c/gym/) |
+| 健身科普 | science | 2128 | | |
+| 健身跟练教学 | tutorial | 2129 | | |
+| 健身记录 | record | 2130 | | |
+| 健身身材展示 | figure | 2131 | | |
+| 健身综合 | other | 2132 | | |
+
+## 手工
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | ----------- | ---- | --------- | ---------------------------------------------------- |
+| 手工 (主分区) | handmake | 1019 | 29 | [/c/handmake/](https://www.bilibili.com/c/handmake/) |
+| 文具手帐 | handbook | 2143 | | |
+| 轻手作 | light | 2144 | | |
+| 传统手工艺 | traditional | 2145 | | |
+| 解压手工 | relief | 2146 | | |
+| DIY玩具 | diy | 2147 | | |
+| 其他手工 | other | 2148 | | |
+
+## 旅游出行
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ----------------- | --------- | ---- | --------- | ------------------------------------------------ |
+| 旅游出行 (主分区) | travel | 1022 | 30 | [/c/travel/](https://www.bilibili.com/c/travel/) |
+| 旅游记录 | record | 2158 | | |
+| 旅游攻略 | strategy | 2159 | | |
+| 城市出行 | city | 2160 | | |
+| 公共交通 | transport | 2161 | | |
+
+## 三农
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | -------- | ---- | --------- | ---------------------------------------------- |
+| 三农 (主分区) | rural | 1023 | 31 | [/c/rural/](https://www.bilibili.com/c/rural/) |
+| 农村种植 | planting | 2162 | | |
+| 赶海捕鱼 | fishing | 2163 | | |
+| 打野采摘 | harvest | 2164 | | |
+| 农业技术 | tech | 2165 | | |
+| 农村生活 | life | 2166 | | |
+
+## 亲子
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | ------------- | ---- | --------- | ------------------------------------------------------ |
+| 亲子 (主分区) | parenting | 1025 | 32 | [/c/parenting/](https://www.bilibili.com/c/parenting/) |
+| 孕产护理 | pregnant_care | 2172 | | |
+| 婴幼护理 | infant_care | 2173 | | |
+| 儿童才艺 | talent | 2174 | | |
+| 萌娃 | cute | 2175 | | |
+| 亲子互动 | interaction | 2176 | | |
+| 亲子教育 | education | 2177 | | |
+| 亲子综合 | other | 2178 | | |
+
+## 健康
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | ---------- | ---- | --------- | ------------------------------------------------ |
+| 健康 (主分区) | health | 1026 | 33 | [/c/health/](https://www.bilibili.com/c/health/) |
+| 健康科普 | science | 2179 | | |
+| 养生 | regimen | 2180 | | |
+| 两性知识 | sexes | 2181 | | |
+| 心理健康 | psychology | 2182 | | |
+| 助眠视频·ASMR | asmr | 2183 | | |
+| 医疗保健综合 | other | 2184 | | |
+
+## 情感
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ------------- | ------------- | ---- | --------- | -------------------------------------------------- |
+| 情感 (主分区) | emotion | 1027 | 34 | [/c/emotion/](https://www.bilibili.com/c/emotion/) |
+| 家庭关系 | family | 2185 | | |
+| 恋爱关系 | romantic | 2186 | | |
+| 人际关系 | interpersonal | 2187 | | |
+| 自我成长 | growth | 2188 | | |
+
+## 生活兴趣
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ----------------- | ----------------- | ---- | --------- | ---------------------------------------------------- |
+| 生活兴趣 (主分区) | life_joy | 1030 | 35 | [/c/life_joy/](https://www.bilibili.com/c/life_joy/) |
+| 休闲玩乐 | leisure | 2198 | | |
+| 线下演出 | on_site | 2199 | | |
+| 文玩文创 | artistic_products | 2200 | | |
+| 潮玩玩具 | trendy_toys | 2201 | | |
+| 兴趣综合 | other | 2202 | | |
+
+## 生活经验
+
+
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| ----------------- | --------------- | ---- | --------- | ------------------------------------------------------------------ |
+| 生活经验 (主分区) | life_experience | 1031 | 36 | [/c/life_experience/](https://www.bilibili.com/c/life_experience/) |
+| 生活技能 | skills | 2203 | | |
+| 办事流程 | procedures | 2204 | | |
+| 婚嫁 | marriage | 2205 | | |
+
+## 神秘学 (未公开)
+
+该分区未出现在 B 站前端的界面中,也无图标
+
+| 名称 | 代号 | tid | channelId | url 路由 |
+| --------------- | ----------- | ---- | --------- | ------------------------------------------------------ |
+| 神秘学 (主分区) | mysticism | 1028 | 44 | [/c/mysticism/](https://www.bilibili.com/c/mysticism/) |
+| 塔罗占卜 | tarot | 2189 | | |
+| 星座占星 | horoscope | 2190 | | |
+| 传统玄学 | metaphysics | 2191 | | |
+| 疗愈成长 | healing | 2192 | | |
+| 其他神秘学 | other | 2193 | | |
diff --git a/docs/video/videostream_url.md b/docs/video/videostream_url.md
new file mode 100644
index 0000000..304e617
--- /dev/null
+++ b/docs/video/videostream_url.md
@@ -0,0 +1,1128 @@
+# 视频流URL
+
+
+
+视频为 DASH 或 MP4 流媒体,需调用取流 API 传参视频 id 获取
+
+## qn视频清晰度标识
+
+注:该值在 DASH 格式下无效,因为 DASH 格式会取到所有分辨率的流地址
+
+又注: B站对于新的视频更新了播放设置, 较高分辨率均采用 DASH, 较低分辨率与老视频还保留了 MP4, 这导致较新视频无法获取 MP4 格式的高分辨率视频, 参见 [#606](https://github.com/SocialSisterYi/bilibili-API-collect/issues/606) 或 [cv949156](https://www.bilibili.com/read/cv949156/)
+
+| 值 | 含义 | 备注 |
+| ---- | -------------- | ------------------------------------------------------------ |
+| 6 | 240P 极速 | 仅 MP4 格式支持 仅`platform=html5`时有效 |
+| 16 | 360P 流畅 | |
+| 32 | 480P 清晰 | |
+| 64 | 720P 高清 | WEB 端默认值 ~~B站前端需要登录才能选择,但是直接发送请求可以不登录就拿到 720P 的取流地址~~ **无 720P 时则为 720P60** |
+| 74 | 720P60 高帧率 | 登录认证 |
+| 80 | 1080P 高清 | TV 端与 APP 端默认值 登录认证 |
+| 100 | 智能修复 | 人工智能增强画质 大会员认证
+| 112 | 1080P+ 高码率 | 大会员认证 |
+| 116 | 1080P60 高帧率 | 大会员认证 |
+| 120 | 4K 超清 | 需要`fnval&128=128`且`fourk=1` 大会员认证 |
+| 125 | HDR 真彩色 | 仅支持 DASH 格式 需要`fnval&64=64` 大会员认证 |
+| 126 | 杜比视界 | 仅支持 DASH 格式 需要`fnval&512=512` 大会员认证 |
+| 127 | 8K 超高清 | 仅支持 DASH 格式 需要`fnval&1024=1024` 大会员认证 |
+
+例如:请求 1080P+ 的视频,则`qn=112`
+
+## fnver视频流版本标识
+
+目前该值恒为 0,即`fnver=0`
+
+## fnval视频流格式标识
+
+该代码为二进制属性位,如需组合功能需要使用`OR`运算结合一下数值
+
+目前 FLV 格式已下线,应避免使用`fnval=0`
+
+| 值 | 含义 | 备注 |
+| ---- | ------------------ | ------------------------------------------------------------ |
+| ~~0~~ | ~~FLV 格式~~ | FLV 格式已下线 ~~仅 H.264 编码 部分老视频存在分段现象 与 MP4、DASH 格式互斥~~ |
+| 1 | MP4 格式 | 仅 H.264 编码 与 ~~FLV~~、DASH 格式互斥 |
+| 16 | DASH 格式 | 与 MP4、~~FLV~~ 格式互斥 |
+| 64 | 是否需求 HDR 视频 | 需求 DASH 格式 仅 H.265 编码 需要`qn=125` 大会员认证 |
+| 128 | 是否需求 4K 分辨率 | 该值与`fourk`字段协同作用 需要`qn=120` 大会员认证 |
+| 256 | 是否需求杜比音频 | 需求 DASH 格式 大会员认证 |
+| 512 | 是否需求杜比视界 | 需求 DASH 格式 大会员认证 |
+| 1024 | 是否需求 8K 分辨率 | 需求 DASH 格式 需要`qn=127` 大会员认证 |
+| 2048 | 是否需求 AV1 编码 | 需求 DASH 格式 |
+
+例如:请求 DASH 格式,且需要 HDR 的视频流,则`fnval=16|64=80`
+
+## 视频编码代码
+
+| 值 | 含义 | 备注 |
+| ---- | ---------- | ---------------- |
+| 7 | AVC 编码 | 8K 视频不支持该格式 |
+| 12 | HEVC 编码 | |
+| 13 | AV1 编码 | |
+
+## 视频伴音音质代码
+
+| 值 | 含义 |
+| ----- | ---- |
+| 30216 | 64K |
+| 30232 | 132K |
+| 30280 | 192K |
+| 30250 | 杜比全景声 |
+| 30251 | Hi-Res无损 |
+
+## 获取视频流地址_web端
+
+> https://api.bilibili.com/x/player/wbi/playurl
+
+> ~~https://api.bilibili.com/x/player/playurl~~ (旧链接)
+
+*请求方式:GET*
+
+认证方式:Cookie(SESSDATA)
+
+鉴权方式:[Wbi 签名](../misc/sign/wbi.md)
+
+---
+
+关于视频流会员鉴权:
+
+- 获取 720P 及以上清晰度视频时需要登录(Cookie)
+
+- 获取高帧率(1080P60)/ 高码率(1080P+)/ HDR / 杜比视界 视频时需要有大会员的账号登录(Cookie)
+
+- 获取会员专属视频时需要登录(Cookie)
+
+- 部分特殊视频(如平台宣传片、活动视频等)不需要大会员账号认证
+
+---
+
+获取 url 有效时间为 120min,超时失效需要重新获取
+
+~~部分视频会有分段,需要特别注意~~(FLV 格式已下线,不可能出现分段
+
+若视频有分P,仅为单P视频的 url,换P则需传参对应 CID 重新获取
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ---------------- | ------------ | ------------------------------------------------------------ |
+| avid | num | 稿件 avid | 必要(可选) | avid 与 bvid 任选一个 |
+| bvid | str | 稿件 bvid | 必要(可选) | avid 与 bvid 任选一个 |
+| cid | num | 视频 cid | 必要 | |
+| qn | num | 视频清晰度选择 | 非必要 | 未登录默认 32(480P),登录后默认 64(720P) 含义见 [上表](#qn视频清晰度标识) **DASH 格式时无效** |
+| fnval | num | 视频流格式标识 | 非必要 | 默认值为`1`(MP4 格式) 含义见 [上表](#fnval视频流格式标识) |
+| fnver | num | 0 | 非必要 | |
+| fourk | num | 是否允许 4K 视频 | 非必要 | 画质最高 1080P:0(默认) 画质最高 4K:1 |
+| session | str | | 非必要 | 从视频播放页的 HTML 中设置 window.\_\_playinfo\_\_ 处获取,或者通过 buvid3 + 当前UNIX毫秒级时间戳 经过md5获取 |
+| otype | str | | 非必要 | 固定为`json` |
+| type | str | | 非必要 | 目前为空 |
+| platform | str | | 非必要 | pc:web播放(默认值,视频流存在 referer鉴权) html5:移动端 HTML5 播放(仅支持 MP4 格式,无 referer 鉴权可以直接使用`video`标签播放) |
+| high_quality | num | 是否高画质 | 非必要 | platform=html5时,此值为1可使画质为1080p |
+| try_look | num | 未登录高画质 | 非必要 | 为 `1` 时可以不登录拉到 `64` 和 `80` 清晰度 |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----------------------------- | -------- | ---------------------------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 -404:无视频 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | 有效时:obj 无效时:null | 数据本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------ | ----- | ----------------------------------------------- | ----------------------------------------------- |
+| from | str | `local`? | |
+| result | str | `suee`? | |
+| message | str | 空? | |
+| quality | num | 清晰度标识 | 含义见 [上表](#qn视频清晰度标识) |
+| format | str | 视频格式 | `mp4`/`flv` |
+| timelength | num | 视频长度 | 单位为毫秒 不同分辨率 / 格式可能有略微差异 |
+| accept_format | str | 支持的全部格式 | 每项用`,`分隔 |
+| accept_description | array | 支持的清晰度列表(文字说明) | |
+| accept_quality | array | 支持的清晰度列表(代码) | 含义见 [上表](#qn视频清晰度标识) |
+| video_codecid | num | 默认选择视频流的编码id | 含义见 [上表](#视频编码代码) |
+| seek_param | str | `start`? | |
+| seek_type | str | `offset`(DASH / FLV)? `second`(MP4)? | |
+| durl | array | 视频分段流信息 | **注:仅 FLV / MP4 格式存在此字段** |
+| dash | obj | DASH 流信息 | **注:仅 DASH 格式存在此字段** |
+| support_formats | array | 支持格式的详细信息 | |
+| high_format | null | (?) | |
+| last_play_time | num | 上次播放进度 | 毫秒值 |
+| last_play_cid | num | 上次播放分P的 cid | |
+
+`data`中的`accept_description`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ---- |
+| 0 | str | 分辨率名称1 | |
+| n | str | 分辨率名称(n+1) | |
+| …… | str | …… | |
+
+`data`中的`accept_quality`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | -------------------------------- |
+| 0 | num | 分辨率代码1 | 含义见 [上表](#qn视频清晰度标识) |
+| n | num | 分辨率代码(n+1) | |
+| …… | num | …… | |
+
+`data`中的`support_formats`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ---- |
+| 0 | obj | 播放格式详细信息1 | |
+| n | obj | 播放格式详细信息(n+1) | |
+| …… | obj | …… | |
+
+`support_formats`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ------ | ------------ | ---------------------------------- |
+| quality | num | 视频清晰度代码 | 含义见 [上表](#qn视频清晰度标识) |
+| format | str | 视频格式 | |
+| new_description | str | 格式描述 | |
+| display_desc | str | 格式描述 | |
+| superscript | str | (?) | |
+| codecs | array | 可用编码格式列表 | |
+
+`support_formats`中的`codecs`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ---- |
+| 0 | str | 例:av01.0.13M.08.0.110.01.01.01.0 | 使用AV1编码 |
+| 1 | str | 例子:avc1.640034 | 使用AVC编码 |
+| 2 | str | 例子:hev1.1.6.L153.90 | 使用HEVC编码 |
+
+由于 MP4 / ~~FLV~~ 与 DASH 格式的返回结构不同,以下内容需要分类讨论`durl`与`dash`字段的内容
+
+
+---
+
+### FLV/MP4格式
+
+`data`中的`durl`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------------- | ------------------------- |
+| 0 | obj | 视频分段 1 信息 | **目前由于 FLV 格式已经下线,不会存在分段现象,故无需关心** |
+| n | obj | 视频分段 (n+1) 信息 | |
+| …… | obj | …… | |
+
+`durl`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ------ | ------------ | ---------------------------------- |
+| order | num | 视频分段序号 | 某些视频会分为多个片段(从1顺序增长) |
+| length | num | 视频长度 | 单位为毫秒 |
+| size | num | 视频大小 | 单位为 Byte |
+| ahead | str | (?) | |
+| vhead | str | (?) | |
+| url | str | 默认流 URL | **注意 unicode 转义符** 有效时间为120min |
+| backup_url | array | 备用视频流 | |
+
+`durl`数组中的对象中的`backup_url`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---------------- | --------------------------------------------- |
+| 0 | str | 备用流 URL 1 | **注意 unicode 转义符** 有效时间为120min |
+| n | str | 备用流 URL (n+1) | |
+| …… | str | …… | |
+
+**示例:**
+
+**视频无分段时:**
+
+获取视频`av99999999`/`BV1y7411Q7Eq`中的 1P(cid=`171776208`)的视频流 URL,清晰度为 1080P+,使用 FLV 方式获取
+
+avid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/player/playurl' \
+ --data-urlencode 'avid=99999999' \
+ --data-urlencode 'cid=171776208' \
+ --data-urlencode 'qn=112' \
+ --data-urlencode 'fnval=0' \
+ --data-urlencode 'fnver=0' \
+ --data-urlencode 'fourk=1' \
+ -b 'SESSDATA=xxx'
+```
+
+ bvid方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/player/playurl' \
+ --data-urlencode 'bvid=BV1y7411Q7Eq' \
+ --data-urlencode 'cid=171776208' \
+ --data-urlencode 'qn=112' \
+ --data-urlencode 'fnval=0' \
+ --data-urlencode 'fnver=0' \
+ --data-urlencode 'fourk=1' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "from": "local",
+ "result": "suee",
+ "message": "",
+ "quality": 64,
+ "format": "flv720",
+ "timelength": 283801,
+ "accept_format": "hdflv2,flv,flv720,flv480,mp4",
+ "accept_description": [
+ "高清 1080P+",
+ "高清 1080P",
+ "高清 720P",
+ "清晰 480P",
+ "流畅 360P"
+ ],
+ "accept_quality": [
+ 112,
+ 80,
+ 64,
+ 32,
+ 16
+ ],
+ "video_codecid": 7,
+ "seek_param": "start",
+ "seek_type": "offset",
+ "durl": [
+ {
+ "order": 1,
+ "length": 283801,
+ "size": 70486426,
+ "ahead": "",
+ "vhead": "",
+ "url": "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/08/62/171776208/171776208_nb2-1-64.flv?e=ig8euxZM2rNcNbNMnwdVhwdlhbK3hwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1662808778&gen=playurlv2&os=cosbv&oi=3719461929&trid=31dc1934e77141bfbdf5ae88aca0b29fu&mid=0&platform=pc&upsig=a4d5f1713e1ba313041d034a958c2414&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=249068&logo=80000000",
+ "backup_url": [
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/08/62/171776208/171776208_nb2-1-64.flv?e=ig8euxZM2rNcNbNMnwdVhwdlhbK3hwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1662808778&gen=playurlv2&os=cosbv&oi=3719461929&trid=31dc1934e77141bfbdf5ae88aca0b29fu&mid=0&platform=pc&upsig=a4d5f1713e1ba313041d034a958c2414&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&agrr=1&bw=249068&logo=40000000",
+ "https://upos-sz-mirrorcosb.bilivideo.com/upgcxcode/08/62/171776208/171776208_nb2-1-64.flv?e=ig8euxZM2rNcNbNMnwdVhwdlhbK3hwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1662808778&gen=playurlv2&os=cosbbv&oi=3719461929&trid=31dc1934e77141bfbdf5ae88aca0b29fu&mid=0&platform=pc&upsig=7b8a6924948864944815ec0748cc108f&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&agrr=1&bw=249068&logo=40000000"
+ ]
+ }
+ ],
+ "support_formats": [
+ {
+ "quality": 112,
+ "format": "hdflv2",
+ "new_description": "1080P 高码率",
+ "display_desc": "1080P",
+ "superscript": "高码率",
+ "codecs": null
+ },
+ {
+ "quality": 80,
+ "format": "flv",
+ "new_description": "1080P 高清",
+ "display_desc": "1080P",
+ "superscript": "",
+ "codecs": null
+ },
+ {
+ "quality": 64,
+ "format": "flv720",
+ "new_description": "720P 高清",
+ "display_desc": "720P",
+ "superscript": "",
+ "codecs": null
+ },
+ {
+ "quality": 32,
+ "format": "flv480",
+ "new_description": "480P 清晰",
+ "display_desc": "480P",
+ "superscript": "",
+ "codecs": null
+ },
+ {
+ "quality": 16,
+ "format": "mp4",
+ "new_description": "360P 流畅",
+ "display_desc": "360P",
+ "superscript": "",
+ "codecs": null
+ }
+ ],
+ "high_format": null,
+ "last_play_time": 0,
+ "last_play_cid": 0
+ }
+}
+```
+
+
+
+**视频有分段时:**
+
+以下内容无参考价值,仅做历史保存
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "from": "local",
+ "result": "suee",
+ "message": "",
+ "quality": 16,
+ "format": "flv360",
+ "timelength": 1437918,
+ "accept_format": "flv,flv720,flv480,flv360",
+ "accept_description": [
+ "高清 1080P",
+ "高清 720P",
+ "清晰 480P",
+ "流畅 360P"
+ ],
+ "accept_quality": [
+ 80,
+ 64,
+ 32,
+ 16
+ ],
+ "video_codecid": 7,
+ "seek_param": "start",
+ "seek_type": "offset",
+ "durl": [
+ {
+ "order": 1,
+ "length": 364417,
+ "size": 23018310,
+ "ahead": "",
+ "vhead": "",
+ "url": "http://upos-sz-mirrorhw.bilivideo.com/upgcxcode/98/24/872498/872498-1-15.flv?e=ig8euxZM2rNcNbRB7zUVhoM17WuBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=hwbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=f99db2dc9b8c65c245515b29b9ca8b16&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=80000000",
+ "backup_url": [
+ "http://upos-sz-mirrorks3c.bilivideo.com/upgcxcode/98/24/872498/872498-1-15.flv?e=ig8euxZM2rNcNbRB7zUVhoM17WuBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=ks3cbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=74d0d62697364346f88d9c39430ce23c&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=40000000"
+ ]
+ },
+ {
+ "order": 2,
+ "length": 364395,
+ "size": 23694756,
+ "ahead": "",
+ "vhead": "",
+ "url": "http://upos-sz-mirrorcos.bilivideo.com/upgcxcode/98/24/872498/872498-2-15.flv?e=ig8euxZM2rNcNbRjhbUVhoM17bNBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=cosbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=308c87c55f3325bdaac2a3e8632948ee&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=80000000",
+ "backup_url": [
+ "http://upos-sz-mirrorks3c.bilivideo.com/upgcxcode/98/24/872498/872498-2-15.flv?e=ig8euxZM2rNcNbRjhbUVhoM17bNBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=ks3cbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=eb8f043e0f36f82ab9c62fd002143438&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=40000000"
+ ]
+ },
+ {
+ "order": 3,
+ "length": 352333,
+ "size": 22835734,
+ "ahead": "",
+ "vhead": "",
+ "url": "http://upos-sz-mirrorhw.bilivideo.com/upgcxcode/98/24/872498/872498-3-15.flv?e=ig8euxZM2rNcNbRjhwdVhoM17bdVhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=hwbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=2685b7649f4bb6eb90f986f125432d78&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=80000000",
+ "backup_url": [
+ "http://upos-sz-mirrorks3c.bilivideo.com/upgcxcode/98/24/872498/872498-3-15.flv?e=ig8euxZM2rNcNbRjhwdVhoM17bdVhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=ks3cbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=922543bfb26184f901187bf9c39c69b2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=40000000"
+ ]
+ },
+ {
+ "order": 4,
+ "length": 356773,
+ "size": 23466279,
+ "ahead": "",
+ "vhead": "",
+ "url": "http://upos-sz-mirrorkodo.bilivideo.com/upgcxcode/98/24/872498/872498-4-15.flv?e=ig8euxZM2rNcNbRjhbUVhoM17bNBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=kodobv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=9d29707faf012797ef2b6de21523fcf2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=80000000",
+ "backup_url": [
+ "http://upos-sz-mirrorks3c.bilivideo.com/upgcxcode/98/24/872498/872498-4-15.flv?e=ig8euxZM2rNcNbRjhbUVhoM17bNBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=ks3cbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=9ad4524d31c8d9695ae07b400b73ed29&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=40000000"
+ ]
+ }
+ ]
+ }
+}
+```
+
+
+
+---
+
+### DASH格式
+
+`data`中的`dash`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --------------- | ----- | ---------- | ------------ |
+| duration | num | 视频长度 | 秒值 |
+| minBufferTime | num | 1.5? | |
+| min_buffer_time | num | 1.5? | |
+| video | array | 视频流信息 | |
+| audio | array | 伴音流信息 | 当视频没有音轨时,此项为 null |
+| dolby | obj | 杜比全景声伴音信息 | |
+| flac | obj | 无损音轨伴音信息 | 当视频没有无损音轨时,此项为 null |
+
+`dash`中的`video`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---------------------- | ---- |
+| 0 | obj | 视频码流 1 | 同一清晰度可拥有 H.264 / H.265 / AV1 多种码流 **HDR 仅支持 H.265** |
+| n | obj | 视频码流(n+1) | |
+| …… | obj | …… | |
+
+`dash`中的`audio`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------- | ---- |
+| 0 | obj | 清晰度1 | |
+| n | obj | 清晰度(n+1) | |
+| …… | obj | …… | |
+
+`video`及`audio`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | ----- | --------------------- | ----------------------------------------------- |
+| id | num | 音视频清晰度代码 | 参考上表 [qn视频清晰度标识](#qn视频清晰度标识) [视频伴音音质代码](#视频伴音音质代码) |
+| baseUrl | str | 默认流 URL | **注意 unicode 转义符** 有效时间为 120min |
+| base_url | str | **同上** | |
+| backupUrl | array | 备用流 URL | |
+| backup_url | array | **同上** | |
+| bandwidth | num | 所需最低带宽 | 单位为 Byte |
+| mimeType | str | 格式 mimetype 类型 | |
+| mime_type | str | **同上** | |
+| codecs | str | 编码/音频类型 | eg:`avc1.640032` |
+| width | num | 视频宽度 | 单位为像素 **仅视频流存在该字段** |
+| height | num | 视频高度 | 单位为像素 **仅视频流存在该字段** |
+| frameRate | str | 视频帧率 | **仅视频流存在该字段** |
+| frame_rate | str | **同上** | |
+| sar | str | Sample Aspect Ratio(单个像素的宽高比) | 音频流该值恒为空 |
+| startWithSap | num | Stream Access Point(流媒体访问位点) | 音频流该值恒为空 |
+| start_with_sap | num | **同上** | |
+| SegmentBase | obj | 见下表 | url 对应 m4s 文件中,头部的位置 音频流该值恒为空 |
+| segment_base | obj | **同上** | |
+| codecid | num | 码流编码标识代码 | 含义见 [上表](#视频编码代码) 音频流该值恒为`0` |
+
+`video`数组中的对象中的`backup_url`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---------------- | --------------------------------------------- |
+| 0 | str | 备用流 URL 1 | **注意 unicode 转义符** 有效时间为120min |
+| n | str | 备用流 URL (n+1) | |
+| …… | str | …… | |
+
+`video`数组中的对象中的`SegmentBase`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | ---- | ---------------------------- | ------------------------------------------------------------ |
+| initialization | str | `${init_first}-${init_last}` | eg:`0-821` ftyp (file type) box 加上 moov box 在 m4s 文件中的范围(单位为 bytes) 如 0-821 表示开头 820 个字节 |
+| index_range | str | `${sidx_first}-${sidx_last}` | eg:`822-1309` sidx (segment index) box 在 m4s 文件中的范围(单位为 bytes) sidx 的核心是一个数组,记录了各关键帧的时间戳及其在文件中的位置, 其作用是索引 (拖进度条) |
+
+> 常规 MP4 文件的索引信息放在 moov box 中,其中包含每一帧 (不止是关键帧) 的一些信息。在 DASH 方式下,关键帧信息移到了 sidx box 里,其他的则分散到了各个 moof (movie fragment) box 中。
+
+对这里的文件结构感兴趣的,可以参考标准文档 [ISO/IEC 14496-12](https://www.iso.org/standard/83102.html),如果不想那么深入的话可以百度「[MP4 文件结构](https://baike.baidu.com/item/mp4/9218018)」
+
+`dash`中的`dolby`对象:
+
+此项为”杜比视界“视频独有
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | ---- | --------------------------------------------- | ------------------------------------------------------------ |
+| type | num | 杜比音效类型 | 1:普通杜比音效 2:全景杜比音效 |
+| audio | array | 杜比伴音流列表 | |
+
+`dolby`对象中的`audio`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------------------ | ----------------------------------------------- |
+| 0 | obj | 杜比伴音流信息 | 同上文 DASH 流中`video`及`audio`数组中的对象 |
+
+`dash`中的`flac`对象:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------------------ | ----------------------------------------------- |
+| display | bool | 是否在播放器显示切换Hi-Res无损音轨按钮 | |
+| audio | obj | 音频流信息 | 同上文 DASH 流中`video`及`audio`数组中的对象 |
+
+**示例:**
+
+获取视频`av969628065`/`BV1rp4y1e745`中的 1P(cid=`244954665`)的视频流 URL,使用 DASH 方式获取
+
+avid 方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/player/playurl' \
+ --data-urlencode 'avid=969628065' \
+ --data-urlencode 'cid=244954665' \
+ --data-urlencode 'fnval=4048' \ # 4048 为所有 dash 选项或运算的结果
+ --data-urlencode 'fnver=0' \
+ --data-urlencode 'fourk=1' \
+ -b 'SESSDATA=xxx'
+```
+
+ bvid 方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/player/playurl' \
+ --data-urlencode 'bvid=BV1rp4y1e745' \
+ --data-urlencode 'cid=244954665' \
+ --data-urlencode 'fnval=4048' \
+ --data-urlencode 'fnver=0' \
+ --data-urlencode 'fourk=1' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "from": "local",
+ "result": "suee",
+ "message": "",
+ "quality": 64,
+ "format": "flv720",
+ "timelength": 346495,
+ "accept_format": "hdflv2,hdflv2,flv_p60,flv,flv720,flv480,mp4",
+ "accept_description": [
+ "真彩 HDR",
+ "超清 4K",
+ "高清 1080P60",
+ "高清 1080P",
+ "高清 720P",
+ "清晰 480P",
+ "流畅 360P"
+ ],
+ "accept_quality": [
+ 125,
+ 120,
+ 116,
+ 80,
+ 64,
+ 32,
+ 16
+ ],
+ "video_codecid": 7,
+ "seek_param": "start",
+ "seek_type": "offset",
+ "dash": {
+ "duration": 347,
+ "minBufferTime": 1.5,
+ "min_buffer_time": 1.5,
+ "video": [
+ {
+ "id": 80,
+ "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-100113.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=hw\u0026oi=3028829496\u0026tag=\u0026nbs=1\u0026gen=playurlv3\u0026uipk=5\u0026os=mcdn\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026upsig=71821c3a1f0d596b8a0f79861695de67\u0026uparams=e,og,oi,tag,nbs,gen,uipk,os,platform,trid,mid,deadline\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=773719\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026orderid=0,3",
+ "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-100113.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=hw\u0026oi=3028829496\u0026tag=\u0026nbs=1\u0026gen=playurlv3\u0026uipk=5\u0026os=mcdn\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026upsig=71821c3a1f0d596b8a0f79861695de67\u0026uparams=e,og,oi,tag,nbs,gen,uipk,os,platform,trid,mid,deadline\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=773719\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026orderid=0,3",
+ "backupUrl": [
+ "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100113.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026uipk=5\u0026gen=playurlv3\u0026os=08cbv\u0026og=hw\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026upsig=585675af7dc762a4d21572f939196248\u0026uparams=e,platform,trid,oi,mid,uipk,gen,os,og,deadline,tag,nbs\u0026bvc=vod\u0026nettype=0\u0026bw=773719\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=1,3",
+ "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100113.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026nbs=1\u0026uipk=5\u0026gen=playurlv3\u0026platform=pc\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026os=08cbv\u0026og=hw\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026upsig=9fc6a3e3e0eaf3847c5c0f1c32047c09\u0026uparams=e,oi,nbs,uipk,gen,platform,mid,deadline,tag,os,og,trid\u0026bvc=vod\u0026nettype=0\u0026bw=773719\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3"
+ ],
+ "backup_url": [
+ "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100113.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026uipk=5\u0026gen=playurlv3\u0026os=08cbv\u0026og=hw\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026upsig=585675af7dc762a4d21572f939196248\u0026uparams=e,platform,trid,oi,mid,uipk,gen,os,og,deadline,tag,nbs\u0026bvc=vod\u0026nettype=0\u0026bw=773719\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=1,3",
+ "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100113.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026nbs=1\u0026uipk=5\u0026gen=playurlv3\u0026platform=pc\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026os=08cbv\u0026og=hw\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026upsig=9fc6a3e3e0eaf3847c5c0f1c32047c09\u0026uparams=e,oi,nbs,uipk,gen,platform,mid,deadline,tag,os,og,trid\u0026bvc=vod\u0026nettype=0\u0026bw=773719\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3"
+ ],
+ "bandwidth": 772828,
+ "mimeType": "video/mp4",
+ "mime_type": "video/mp4",
+ "codecs": "hev1.1.6.L150.90",
+ "width": 1920,
+ "height": 960,
+ "frameRate": "30.303",
+ "frame_rate": "30.303",
+ "sar": "1:1",
+ "startWithSap": 1,
+ "start_with_sap": 1,
+ "SegmentBase": {
+ "Initialization": "0-1159",
+ "indexRange": "1160-2019"
+ },
+ "segment_base": {
+ "initialization": "0-1159",
+ "index_range": "1160-2019"
+ },
+ "codecid": 12
+ },
+ {
+ "id": 80,
+ "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026deadline=1745411269\u0026uipk=5\u0026og=cos\u0026gen=playurlv3\u0026os=mcdn\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026upsig=134e6b8516a05db7ef97a18b68b94cb5\u0026uparams=e,platform,deadline,uipk,og,gen,os,trid,oi,mid,tag,nbs\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=1918964\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=0,3",
+ "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026deadline=1745411269\u0026uipk=5\u0026og=cos\u0026gen=playurlv3\u0026os=mcdn\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026upsig=134e6b8516a05db7ef97a18b68b94cb5\u0026uparams=e,platform,deadline,uipk,og,gen,os,trid,oi,mid,tag,nbs\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=1918964\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=0,3",
+ "backupUrl": [
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026gen=playurlv3\u0026os=cosbv\u0026og=cos\u0026deadline=1745411269\u0026uipk=5\u0026nbs=1\u0026mid=59442895\u0026tag=\u0026upsig=d3f4bbcd7c490effdfdf0b9f8375f9a2\u0026uparams=e,platform,trid,oi,gen,os,og,deadline,uipk,nbs,mid,tag\u0026bvc=vod\u0026nettype=0\u0026bw=1918964\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026orderid=1,3",
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026gen=playurlv3\u0026os=cosbv\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026uipk=5\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026og=cos\u0026oi=3028829496\u0026deadline=1745411269\u0026upsig=584b3a331daefde16b118f612d43c1c6\u0026uparams=e,platform,gen,os,mid,tag,nbs,uipk,trid,og,oi,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=1918964\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3"
+ ],
+ "backup_url": [
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026gen=playurlv3\u0026os=cosbv\u0026og=cos\u0026deadline=1745411269\u0026uipk=5\u0026nbs=1\u0026mid=59442895\u0026tag=\u0026upsig=d3f4bbcd7c490effdfdf0b9f8375f9a2\u0026uparams=e,platform,trid,oi,gen,os,og,deadline,uipk,nbs,mid,tag\u0026bvc=vod\u0026nettype=0\u0026bw=1918964\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026orderid=1,3",
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026gen=playurlv3\u0026os=cosbv\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026uipk=5\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026og=cos\u0026oi=3028829496\u0026deadline=1745411269\u0026upsig=584b3a331daefde16b118f612d43c1c6\u0026uparams=e,platform,gen,os,mid,tag,nbs,uipk,trid,og,oi,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=1918964\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3"
+ ],
+ "bandwidth": 1916748,
+ "mimeType": "video/mp4",
+ "mime_type": "video/mp4",
+ "codecs": "avc1.640032",
+ "width": 1920,
+ "height": 960,
+ "frameRate": "29.412",
+ "frame_rate": "29.412",
+ "sar": "1:1",
+ "startWithSap": 1,
+ "start_with_sap": 1,
+ "SegmentBase": {
+ "Initialization": "0-994",
+ "indexRange": "995-1854"
+ },
+ "segment_base": {
+ "initialization": "0-994",
+ "index_range": "995-1854"
+ },
+ "codecid": 7
+ },
+ {
+ "id": 64,
+ "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-100112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026gen=playurlv3\u0026os=mcdn\u0026og=cos\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026upsig=fcba1f000ead402f2ab2748df6e8d127\u0026uparams=e,deadline,gen,os,og,nbs,uipk,platform,trid,oi,mid,tag\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=1238263\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026orderid=0,3",
+ "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-100112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026gen=playurlv3\u0026os=mcdn\u0026og=cos\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026upsig=fcba1f000ead402f2ab2748df6e8d127\u0026uparams=e,deadline,gen,os,og,nbs,uipk,platform,trid,oi,mid,tag\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=1238263\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026orderid=0,3",
+ "backupUrl": [
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026gen=playurlv3\u0026deadline=1745411269\u0026tag=\u0026og=cos\u0026oi=3028829496\u0026os=cosbv\u0026upsig=9ab39b34d214780c30147af36a862d89\u0026uparams=e,nbs,uipk,platform,trid,mid,gen,deadline,tag,og,oi,os\u0026bvc=vod\u0026nettype=0\u0026bw=1238263\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=1,3",
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026nbs=1\u0026uipk=5\u0026tag=\u0026gen=playurlv3\u0026os=cosbv\u0026og=cos\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026upsig=bea70709fec064c8f384ee24eb5ccd1a\u0026uparams=e,oi,nbs,uipk,tag,gen,os,og,platform,trid,mid,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=1238263\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3"
+ ],
+ "backup_url": [
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026gen=playurlv3\u0026deadline=1745411269\u0026tag=\u0026og=cos\u0026oi=3028829496\u0026os=cosbv\u0026upsig=9ab39b34d214780c30147af36a862d89\u0026uparams=e,nbs,uipk,platform,trid,mid,gen,deadline,tag,og,oi,os\u0026bvc=vod\u0026nettype=0\u0026bw=1238263\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=1,3",
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026nbs=1\u0026uipk=5\u0026tag=\u0026gen=playurlv3\u0026os=cosbv\u0026og=cos\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026upsig=bea70709fec064c8f384ee24eb5ccd1a\u0026uparams=e,oi,nbs,uipk,tag,gen,os,og,platform,trid,mid,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=1238263\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3"
+ ],
+ "bandwidth": 1236894,
+ "mimeType": "video/mp4",
+ "mime_type": "video/mp4",
+ "codecs": "hev1.1.6.L120.90",
+ "width": 1280,
+ "height": 640,
+ "frameRate": "58.824",
+ "frame_rate": "58.824",
+ "sar": "1:1",
+ "startWithSap": 1,
+ "start_with_sap": 1,
+ "SegmentBase": {
+ "Initialization": "0-1060",
+ "indexRange": "1061-1920"
+ },
+ "segment_base": {
+ "initialization": "0-1060",
+ "index_range": "1061-1920"
+ },
+ "codecid": 12
+ },
+ {
+ "id": 64,
+ "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026gen=playurlv3\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026nbs=1\u0026uipk=5\u0026os=mcdn\u0026og=hw\u0026upsig=0b3aae3388cb52b436e591615c048007\u0026uparams=e,oi,mid,deadline,tag,gen,platform,trid,nbs,uipk,os,og\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=1224265\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3",
+ "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026gen=playurlv3\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026nbs=1\u0026uipk=5\u0026os=mcdn\u0026og=hw\u0026upsig=0b3aae3388cb52b436e591615c048007\u0026uparams=e,oi,mid,deadline,tag,gen,platform,trid,nbs,uipk,os,og\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=1224265\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3",
+ "backupUrl": [
+ "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026gen=playurlv3\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026os=08cbv\u0026og=hw\u0026upsig=9dc7c021d5094eab92053fc58e84a48d\u0026uparams=e,mid,deadline,tag,nbs,gen,uipk,platform,trid,oi,os,og\u0026bvc=vod\u0026nettype=0\u0026bw=1224265\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3",
+ "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026og=hw\u0026oi=3028829496\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026gen=playurlv3\u0026os=08cbv\u0026upsig=d2a75ae893a23a5d90630725d57efe72\u0026uparams=e,trid,mid,deadline,tag,og,oi,nbs,uipk,platform,gen,os\u0026bvc=vod\u0026nettype=0\u0026bw=1224265\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=2,3"
+ ],
+ "backup_url": [
+ "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026gen=playurlv3\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026os=08cbv\u0026og=hw\u0026upsig=9dc7c021d5094eab92053fc58e84a48d\u0026uparams=e,mid,deadline,tag,nbs,gen,uipk,platform,trid,oi,os,og\u0026bvc=vod\u0026nettype=0\u0026bw=1224265\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3",
+ "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026og=hw\u0026oi=3028829496\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026gen=playurlv3\u0026os=08cbv\u0026upsig=d2a75ae893a23a5d90630725d57efe72\u0026uparams=e,trid,mid,deadline,tag,og,oi,nbs,uipk,platform,gen,os\u0026bvc=vod\u0026nettype=0\u0026bw=1224265\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=2,3"
+ ],
+ "bandwidth": 1222911,
+ "mimeType": "video/mp4",
+ "mime_type": "video/mp4",
+ "codecs": "avc1.640020",
+ "width": 1280,
+ "height": 640,
+ "frameRate": "62.500",
+ "frame_rate": "62.500",
+ "sar": "1:1",
+ "startWithSap": 1,
+ "start_with_sap": 1,
+ "SegmentBase": {
+ "Initialization": "0-994",
+ "indexRange": "995-1854"
+ },
+ "segment_base": {
+ "initialization": "0-994",
+ "index_range": "995-1854"
+ },
+ "codecid": 7
+ },
+ {
+ "id": 32,
+ "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-100110.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026uipk=5\u0026og=cos\u0026gen=playurlv3\u0026os=mcdn\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026upsig=68bd74999864b4a96ac0dbb730b53612\u0026uparams=e,oi,uipk,og,gen,os,platform,trid,mid,deadline,tag,nbs\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=246761\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=0,3",
+ "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-100110.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026uipk=5\u0026og=cos\u0026gen=playurlv3\u0026os=mcdn\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026upsig=68bd74999864b4a96ac0dbb730b53612\u0026uparams=e,oi,uipk,og,gen,os,platform,trid,mid,deadline,tag,nbs\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=246761\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=0,3",
+ "backupUrl": [
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100110.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026tag=\u0026gen=playurlv3\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026os=cosbv\u0026og=cos\u0026oi=3028829496\u0026mid=59442895\u0026nbs=1\u0026upsig=25c03095d15e721ca7a7e80f9e831319\u0026uparams=e,deadline,tag,gen,uipk,platform,trid,os,og,oi,mid,nbs\u0026bvc=vod\u0026nettype=0\u0026bw=246761\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3",
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100110.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026os=cosbv\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026nbs=1\u0026platform=pc\u0026gen=playurlv3\u0026og=cos\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026upsig=c879e409a7bf7995c12ae5e22cb82b97\u0026uparams=e,uipk,os,trid,oi,nbs,platform,gen,og,mid,deadline,tag\u0026bvc=vod\u0026nettype=0\u0026bw=246761\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=2,3"
+ ],
+ "backup_url": [
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100110.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026tag=\u0026gen=playurlv3\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026os=cosbv\u0026og=cos\u0026oi=3028829496\u0026mid=59442895\u0026nbs=1\u0026upsig=25c03095d15e721ca7a7e80f9e831319\u0026uparams=e,deadline,tag,gen,uipk,platform,trid,os,og,oi,mid,nbs\u0026bvc=vod\u0026nettype=0\u0026bw=246761\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3",
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100110.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026os=cosbv\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026nbs=1\u0026platform=pc\u0026gen=playurlv3\u0026og=cos\u0026mid=59442895\u0026deadline=1745411269\u0026tag=\u0026upsig=c879e409a7bf7995c12ae5e22cb82b97\u0026uparams=e,uipk,os,trid,oi,nbs,platform,gen,og,mid,deadline,tag\u0026bvc=vod\u0026nettype=0\u0026bw=246761\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=2,3"
+ ],
+ "bandwidth": 246476,
+ "mimeType": "video/mp4",
+ "mime_type": "video/mp4",
+ "codecs": "hev1.1.6.L120.90",
+ "width": 854,
+ "height": 426,
+ "frameRate": "30.303",
+ "frame_rate": "30.303",
+ "sar": "426:427",
+ "startWithSap": 1,
+ "start_with_sap": 1,
+ "SegmentBase": {
+ "Initialization": "0-1163",
+ "indexRange": "1164-2023"
+ },
+ "segment_base": {
+ "initialization": "0-1163",
+ "index_range": "1164-2023"
+ },
+ "codecid": 12
+ },
+ {
+ "id": 32,
+ "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026nbs=1\u0026uipk=5\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026os=mcdn\u0026og=cos\u0026tag=\u0026platform=pc\u0026oi=3028829496\u0026gen=playurlv3\u0026upsig=99b3ff6929d865dafbbdf21301c3889b\u0026uparams=e,deadline,nbs,uipk,trid,mid,os,og,tag,platform,oi,gen\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=629530\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3",
+ "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026nbs=1\u0026uipk=5\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026os=mcdn\u0026og=cos\u0026tag=\u0026platform=pc\u0026oi=3028829496\u0026gen=playurlv3\u0026upsig=99b3ff6929d865dafbbdf21301c3889b\u0026uparams=e,deadline,nbs,uipk,trid,mid,os,og,tag,platform,oi,gen\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=629530\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3",
+ "backupUrl": [
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026deadline=1745411269\u0026gen=playurlv3\u0026nbs=1\u0026platform=pc\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026os=cosbv\u0026og=cos\u0026upsig=2e6bf8c0c1fc96618294d917f21192e7\u0026uparams=e,uipk,trid,deadline,gen,nbs,platform,oi,mid,tag,os,og\u0026bvc=vod\u0026nettype=0\u0026bw=629530\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=1,3",
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026mid=59442895\u0026gen=playurlv3\u0026tag=\u0026nbs=1\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026os=cosbv\u0026og=cos\u0026deadline=1745411269\u0026uipk=5\u0026upsig=cc07c04afd6ac07b10f46241ef4c5fbc\u0026uparams=e,platform,mid,gen,tag,nbs,trid,oi,os,og,deadline,uipk\u0026bvc=vod\u0026nettype=0\u0026bw=629530\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=2,3"
+ ],
+ "backup_url": [
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026deadline=1745411269\u0026gen=playurlv3\u0026nbs=1\u0026platform=pc\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026os=cosbv\u0026og=cos\u0026upsig=2e6bf8c0c1fc96618294d917f21192e7\u0026uparams=e,uipk,trid,deadline,gen,nbs,platform,oi,mid,tag,os,og\u0026bvc=vod\u0026nettype=0\u0026bw=629530\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=1,3",
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026mid=59442895\u0026gen=playurlv3\u0026tag=\u0026nbs=1\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026os=cosbv\u0026og=cos\u0026deadline=1745411269\u0026uipk=5\u0026upsig=cc07c04afd6ac07b10f46241ef4c5fbc\u0026uparams=e,platform,mid,gen,tag,nbs,trid,oi,os,og,deadline,uipk\u0026bvc=vod\u0026nettype=0\u0026bw=629530\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=2,3"
+ ],
+ "bandwidth": 628803,
+ "mimeType": "video/mp4",
+ "mime_type": "video/mp4",
+ "codecs": "avc1.64001F",
+ "width": 854,
+ "height": 426,
+ "frameRate": "29.412",
+ "frame_rate": "29.412",
+ "sar": "426:427",
+ "startWithSap": 1,
+ "start_with_sap": 1,
+ "SegmentBase": {
+ "Initialization": "0-999",
+ "indexRange": "1000-1859"
+ },
+ "segment_base": {
+ "initialization": "0-999",
+ "index_range": "1000-1859"
+ },
+ "codecid": 7
+ },
+ {
+ "id": 16,
+ "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-100109.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=hw\u0026oi=3028829496\u0026deadline=1745411269\u0026uipk=5\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026gen=playurlv3\u0026os=mcdn\u0026tag=\u0026nbs=1\u0026upsig=cdb471486fa3908a2790ba9ef0fd0a44\u0026uparams=e,og,oi,deadline,uipk,platform,trid,mid,gen,os,tag,nbs\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=168083\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=0,3",
+ "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-100109.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=hw\u0026oi=3028829496\u0026deadline=1745411269\u0026uipk=5\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026gen=playurlv3\u0026os=mcdn\u0026tag=\u0026nbs=1\u0026upsig=cdb471486fa3908a2790ba9ef0fd0a44\u0026uparams=e,og,oi,deadline,uipk,platform,trid,mid,gen,os,tag,nbs\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=168083\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026orderid=0,3",
+ "backupUrl": [
+ "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100109.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026tag=\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026gen=playurlv3\u0026os=08cbv\u0026og=hw\u0026oi=3028829496\u0026upsig=340b5f721a89f6dd90ae6153225cf808\u0026uparams=e,tag,trid,mid,deadline,nbs,uipk,platform,gen,os,og,oi\u0026bvc=vod\u0026nettype=0\u0026bw=168083\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3",
+ "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100109.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026uipk=5\u0026os=08cbv\u0026platform=pc\u0026deadline=1745411269\u0026gen=playurlv3\u0026og=hw\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026upsig=e6c5646fd0e0d9cbb16296d2c8d8649f\u0026uparams=e,oi,mid,tag,nbs,uipk,os,platform,deadline,gen,og,trid\u0026bvc=vod\u0026nettype=0\u0026bw=168083\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3"
+ ],
+ "backup_url": [
+ "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100109.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026tag=\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026deadline=1745411269\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026gen=playurlv3\u0026os=08cbv\u0026og=hw\u0026oi=3028829496\u0026upsig=340b5f721a89f6dd90ae6153225cf808\u0026uparams=e,tag,trid,mid,deadline,nbs,uipk,platform,gen,os,og,oi\u0026bvc=vod\u0026nettype=0\u0026bw=168083\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3",
+ "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-100109.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026uipk=5\u0026os=08cbv\u0026platform=pc\u0026deadline=1745411269\u0026gen=playurlv3\u0026og=hw\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026upsig=e6c5646fd0e0d9cbb16296d2c8d8649f\u0026uparams=e,oi,mid,tag,nbs,uipk,os,platform,deadline,gen,og,trid\u0026bvc=vod\u0026nettype=0\u0026bw=168083\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3"
+ ],
+ "bandwidth": 167889,
+ "mimeType": "video/mp4",
+ "mime_type": "video/mp4",
+ "codecs": "hev1.1.6.L120.90",
+ "width": 640,
+ "height": 320,
+ "frameRate": "30.303",
+ "frame_rate": "30.303",
+ "sar": "1:1",
+ "startWithSap": 1,
+ "start_with_sap": 1,
+ "SegmentBase": {
+ "Initialization": "0-1157",
+ "indexRange": "1158-2017"
+ },
+ "segment_base": {
+ "initialization": "0-1157",
+ "index_range": "1158-2017"
+ },
+ "codecid": 12
+ },
+ {
+ "id": 16,
+ "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026mid=59442895\u0026deadline=1745411269\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026gen=playurlv3\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026os=mcdn\u0026og=hw\u0026tag=\u0026upsig=93d8e429ac6dcf654df688457f138820\u0026uparams=e,oi,mid,deadline,nbs,uipk,platform,gen,trid,os,og,tag\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=353034\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=0,3",
+ "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026oi=3028829496\u0026mid=59442895\u0026deadline=1745411269\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026gen=playurlv3\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026os=mcdn\u0026og=hw\u0026tag=\u0026upsig=93d8e429ac6dcf654df688457f138820\u0026uparams=e,oi,mid,deadline,nbs,uipk,platform,gen,trid,os,og,tag\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=353034\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026orderid=0,3",
+ "backupUrl": [
+ "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026mid=59442895\u0026deadline=1745411269\u0026nbs=1\u0026gen=playurlv3\u0026os=08cbv\u0026og=hw\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026tag=\u0026upsig=87f32943e6cfcb2957f0b90e9be210f3\u0026uparams=e,mid,deadline,nbs,gen,os,og,uipk,platform,trid,oi,tag\u0026bvc=vod\u0026nettype=0\u0026bw=353034\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026orderid=1,3",
+ "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026og=hw\u0026tag=\u0026nbs=1\u0026deadline=1745411269\u0026gen=playurlv3\u0026os=08cbv\u0026upsig=0de6ac37eecd7261cc83e9e55f438747\u0026uparams=e,uipk,platform,trid,oi,mid,og,tag,nbs,deadline,gen,os\u0026bvc=vod\u0026nettype=0\u0026bw=353034\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3"
+ ],
+ "backup_url": [
+ "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026mid=59442895\u0026deadline=1745411269\u0026nbs=1\u0026gen=playurlv3\u0026os=08cbv\u0026og=hw\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026tag=\u0026upsig=87f32943e6cfcb2957f0b90e9be210f3\u0026uparams=e,mid,deadline,nbs,gen,os,og,uipk,platform,trid,oi,tag\u0026bvc=vod\u0026nettype=0\u0026bw=353034\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026orderid=1,3",
+ "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026uipk=5\u0026platform=pc\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026og=hw\u0026tag=\u0026nbs=1\u0026deadline=1745411269\u0026gen=playurlv3\u0026os=08cbv\u0026upsig=0de6ac37eecd7261cc83e9e55f438747\u0026uparams=e,uipk,platform,trid,oi,mid,og,tag,nbs,deadline,gen,os\u0026bvc=vod\u0026nettype=0\u0026bw=353034\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3"
+ ],
+ "bandwidth": 352627,
+ "mimeType": "video/mp4",
+ "mime_type": "video/mp4",
+ "codecs": "avc1.64001E",
+ "width": 640,
+ "height": 320,
+ "frameRate": "29.412",
+ "frame_rate": "29.412",
+ "sar": "1:1",
+ "startWithSap": 1,
+ "start_with_sap": 1,
+ "SegmentBase": {
+ "Initialization": "0-1002",
+ "indexRange": "1003-1862"
+ },
+ "segment_base": {
+ "initialization": "0-1002",
+ "index_range": "1003-1862"
+ },
+ "codecid": 7
+ }
+ ],
+ "audio": [
+ {
+ "id": 30232,
+ "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026mid=59442895\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026gen=playurlv3\u0026os=mcdn\u0026og=cos\u0026upsig=c9f074f7fc113d3d06b928f74a1427d4\u0026uparams=e,deadline,tag,nbs,uipk,platform,mid,trid,oi,gen,os,og\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=76527\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3",
+ "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026mid=59442895\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026gen=playurlv3\u0026os=mcdn\u0026og=cos\u0026upsig=c9f074f7fc113d3d06b928f74a1427d4\u0026uparams=e,deadline,tag,nbs,uipk,platform,mid,trid,oi,gen,os,og\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=76527\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3",
+ "backupUrl": [
+ "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026uipk=5\u0026platform=pc\u0026gen=playurlv3\u0026og=cos\u0026oi=3028829496\u0026mid=59442895\u0026nbs=1\u0026os=upos\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026tag=\u0026upsig=d563b613434d1b8d4c2acc1717a82dfa\u0026uparams=e,deadline,uipk,platform,gen,og,oi,mid,nbs,os,trid,tag\u0026bvc=vod\u0026nettype=0\u0026bw=76527\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3",
+ "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026deadline=1745411269\u0026gen=playurlv3\u0026tag=\u0026platform=pc\u0026os=upos\u0026og=cos\u0026upsig=0d401aeaea4a51b01605e5155ccf2e34\u0026uparams=e,nbs,uipk,trid,oi,mid,deadline,gen,tag,platform,os,og\u0026bvc=vod\u0026nettype=0\u0026bw=76527\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026orderid=2,3"
+ ],
+ "backup_url": [
+ "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026deadline=1745411269\u0026uipk=5\u0026platform=pc\u0026gen=playurlv3\u0026og=cos\u0026oi=3028829496\u0026mid=59442895\u0026nbs=1\u0026os=upos\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026tag=\u0026upsig=d563b613434d1b8d4c2acc1717a82dfa\u0026uparams=e,deadline,uipk,platform,gen,og,oi,mid,nbs,os,trid,tag\u0026bvc=vod\u0026nettype=0\u0026bw=76527\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3",
+ "https://upos-sz-estgoss.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026deadline=1745411269\u0026gen=playurlv3\u0026tag=\u0026platform=pc\u0026os=upos\u0026og=cos\u0026upsig=0d401aeaea4a51b01605e5155ccf2e34\u0026uparams=e,nbs,uipk,trid,oi,mid,deadline,gen,tag,platform,os,og\u0026bvc=vod\u0026nettype=0\u0026bw=76527\u0026dl=0\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026orderid=2,3"
+ ],
+ "bandwidth": 76436,
+ "mimeType": "audio/mp4",
+ "mime_type": "audio/mp4",
+ "codecs": "mp4a.40.2",
+ "width": 0,
+ "height": 0,
+ "frameRate": "",
+ "frame_rate": "",
+ "sar": "",
+ "startWithSap": 0,
+ "start_with_sap": 0,
+ "SegmentBase": {
+ "Initialization": "0-933",
+ "indexRange": "934-1805"
+ },
+ "segment_base": {
+ "initialization": "0-933",
+ "index_range": "934-1805"
+ },
+ "codecid": 0
+ },
+ {
+ "id": 30280,
+ "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026gen=playurlv3\u0026tag=\u0026os=mcdn\u0026og=cos\u0026deadline=1745411269\u0026upsig=3d3484b4a91783d0d7277e073d947fad\u0026uparams=e,nbs,uipk,platform,trid,oi,mid,gen,tag,os,og,deadline\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=155073\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3",
+ "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026mid=59442895\u0026gen=playurlv3\u0026tag=\u0026os=mcdn\u0026og=cos\u0026deadline=1745411269\u0026upsig=3d3484b4a91783d0d7277e073d947fad\u0026uparams=e,nbs,uipk,platform,trid,oi,mid,gen,tag,os,og,deadline\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=155073\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3",
+ "backupUrl": [
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=cos\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026deadline=1745411269\u0026tag=\u0026gen=playurlv3\u0026os=cosbv\u0026platform=pc\u0026mid=59442895\u0026nbs=1\u0026uipk=5\u0026upsig=f7cc870e2a4925c24e46ad9425cf39a8\u0026uparams=e,og,trid,oi,deadline,tag,gen,os,platform,mid,nbs,uipk\u0026bvc=vod\u0026nettype=0\u0026bw=155073\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3",
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=cos\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026platform=pc\u0026gen=playurlv3\u0026os=cosbv\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026deadline=1745411269\u0026uipk=5\u0026upsig=d380844ae7ac21f8484650ba59a15d97\u0026uparams=e,og,mid,tag,nbs,platform,gen,os,trid,oi,deadline,uipk\u0026bvc=vod\u0026nettype=0\u0026bw=155073\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026orderid=2,3"
+ ],
+ "backup_url": [
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=cos\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026deadline=1745411269\u0026tag=\u0026gen=playurlv3\u0026os=cosbv\u0026platform=pc\u0026mid=59442895\u0026nbs=1\u0026uipk=5\u0026upsig=f7cc870e2a4925c24e46ad9425cf39a8\u0026uparams=e,og,trid,oi,deadline,tag,gen,os,platform,mid,nbs,uipk\u0026bvc=vod\u0026nettype=0\u0026bw=155073\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3",
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026og=cos\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026platform=pc\u0026gen=playurlv3\u0026os=cosbv\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026deadline=1745411269\u0026uipk=5\u0026upsig=d380844ae7ac21f8484650ba59a15d97\u0026uparams=e,og,mid,tag,nbs,platform,gen,os,trid,oi,deadline,uipk\u0026bvc=vod\u0026nettype=0\u0026bw=155073\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026f=u_0_0\u0026orderid=2,3"
+ ],
+ "bandwidth": 154889,
+ "mimeType": "audio/mp4",
+ "mime_type": "audio/mp4",
+ "codecs": "mp4a.40.2",
+ "width": 0,
+ "height": 0,
+ "frameRate": "",
+ "frame_rate": "",
+ "sar": "",
+ "startWithSap": 0,
+ "start_with_sap": 0,
+ "SegmentBase": {
+ "Initialization": "0-933",
+ "indexRange": "934-1805"
+ },
+ "segment_base": {
+ "initialization": "0-933",
+ "index_range": "934-1805"
+ },
+ "codecid": 0
+ },
+ {
+ "id": 30216,
+ "baseUrl": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026os=mcdn\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026uipk=5\u0026mid=59442895\u0026gen=playurlv3\u0026og=cos\u0026upsig=77babed89168a38118c16f99396e3fb6\u0026uparams=e,platform,trid,oi,os,deadline,tag,nbs,uipk,mid,gen,og\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=31750\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3",
+ "base_url": "https://xy113x200x108x47xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_nb3-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026platform=pc\u0026trid=0000cc6424a6fb564074a7704d5b300496eu\u0026oi=3028829496\u0026os=mcdn\u0026deadline=1745411269\u0026tag=\u0026nbs=1\u0026uipk=5\u0026mid=59442895\u0026gen=playurlv3\u0026og=cos\u0026upsig=77babed89168a38118c16f99396e3fb6\u0026uparams=e,platform,trid,oi,os,deadline,tag,nbs,uipk,mid,gen,og\u0026mcdnid=50017754\u0026bvc=vod\u0026nettype=0\u0026bw=31750\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=0,3",
+ "backupUrl": [
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026gen=playurlv3\u0026os=cosbv\u0026og=cos\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026oi=3028829496\u0026deadline=1745411269\u0026uipk=5\u0026platform=pc\u0026upsig=d76799fe0f76dea02c775c8667fc3f82\u0026uparams=e,gen,os,og,trid,mid,tag,nbs,oi,deadline,uipk,platform\u0026bvc=vod\u0026nettype=0\u0026bw=31750\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3",
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=cosbv\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026gen=playurlv3\u0026og=cos\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026deadline=1745411269\u0026upsig=5cb2a5242aa474a5a0ba70e16b3d04f6\u0026uparams=e,os,nbs,uipk,platform,oi,mid,tag,gen,og,trid,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=31750\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3"
+ ],
+ "backup_url": [
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026gen=playurlv3\u0026os=cosbv\u0026og=cos\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026mid=59442895\u0026tag=\u0026nbs=1\u0026oi=3028829496\u0026deadline=1745411269\u0026uipk=5\u0026platform=pc\u0026upsig=d76799fe0f76dea02c775c8667fc3f82\u0026uparams=e,gen,os,og,trid,mid,tag,nbs,oi,deadline,uipk,platform\u0026bvc=vod\u0026nettype=0\u0026bw=31750\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=1,3",
+ "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/65/46/244954665/244954665_nb3-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=\u0026os=cosbv\u0026nbs=1\u0026uipk=5\u0026platform=pc\u0026oi=3028829496\u0026mid=59442895\u0026tag=\u0026gen=playurlv3\u0026og=cos\u0026trid=cc6424a6fb564074a7704d5b300496eu\u0026deadline=1745411269\u0026upsig=5cb2a5242aa474a5a0ba70e16b3d04f6\u0026uparams=e,os,nbs,uipk,platform,oi,mid,tag,gen,og,trid,deadline\u0026bvc=vod\u0026nettype=0\u0026bw=31750\u0026f=u_0_0\u0026agrr=1\u0026buvid=\u0026build=0\u0026dl=0\u0026orderid=2,3"
+ ],
+ "bandwidth": 31705,
+ "mimeType": "audio/mp4",
+ "mime_type": "audio/mp4",
+ "codecs": "mp4a.40.5",
+ "width": 0,
+ "height": 0,
+ "frameRate": "",
+ "frame_rate": "",
+ "sar": "",
+ "startWithSap": 0,
+ "start_with_sap": 0,
+ "SegmentBase": {
+ "Initialization": "0-943",
+ "indexRange": "944-1815"
+ },
+ "segment_base": {
+ "initialization": "0-943",
+ "index_range": "944-1815"
+ },
+ "codecid": 0
+ }
+ ],
+ "dolby": {
+ "type": 0,
+ "audio": null
+ },
+ "flac": null
+ },
+ "support_formats": [
+ {
+ "quality": 125,
+ "format": "hdflv2",
+ "new_description": "HDR 真彩",
+ "display_desc": "HDR",
+ "superscript": "",
+ "codecs": [
+ "hev1.2.4.L156.90"
+ ]
+ },
+ {
+ "quality": 120,
+ "format": "hdflv2",
+ "new_description": "4K 超清",
+ "display_desc": "4K",
+ "superscript": "",
+ "codecs": [
+ "avc1.640034",
+ "hev1.1.6.L156.90"
+ ]
+ },
+ {
+ "quality": 116,
+ "format": "flv_p60",
+ "new_description": "1080P 60帧",
+ "display_desc": "1080P",
+ "superscript": "60帧",
+ "codecs": [
+ "avc1.640032",
+ "hev1.1.6.L150.90"
+ ]
+ },
+ {
+ "quality": 80,
+ "format": "flv",
+ "new_description": "1080P 高清",
+ "display_desc": "1080P",
+ "superscript": "",
+ "codecs": [
+ "avc1.640032",
+ "hev1.1.6.L150.90"
+ ]
+ },
+ {
+ "quality": 64,
+ "format": "flv720",
+ "new_description": "720P 高清",
+ "display_desc": "720P",
+ "superscript": "",
+ "codecs": [
+ "avc1.640020",
+ "hev1.1.6.L120.90"
+ ]
+ },
+ {
+ "quality": 32,
+ "format": "flv480",
+ "new_description": "480P 清晰",
+ "display_desc": "480P",
+ "superscript": "",
+ "codecs": [
+ "avc1.64001F",
+ "hev1.1.6.L120.90"
+ ]
+ },
+ {
+ "quality": 16,
+ "format": "mp4",
+ "new_description": "360P 流畅",
+ "display_desc": "360P",
+ "superscript": "",
+ "codecs": [
+ "avc1.64001E",
+ "hev1.1.6.L120.90"
+ ]
+ }
+ ],
+ "high_format": null,
+ "last_play_time": 0,
+ "last_play_cid": 0,
+ "view_info": null,
+ "play_conf": {
+ "is_new_description": false
+ }
+ }
+}
+```
+
+
+
+## 视频取流说明
+
+关于拉流:
+
+1. MP4 / ~~FLV~~ 格式仅需拉视频流,DASH 格式需同时拉视频与伴音流
+2. 如 DASH 格式需要杜比或无损的伴音,需要取对应`dolby`或`flac`字段中的流
+3. **注意 Unicode 转义符**
+
+~~关于分段:~~
+
+~~FLV 格式可能产生分段情况,将`$.data.durl[1-n].url`或`$.data.durl[1-n].backup_url[0]`中的内容作为 URL 进行 GET 请求进行分段播放,如需下载需要合并~~(FLV 格式已下线,不会存在分段现象)
+
+关于鉴权:
+
+1. WEB 端取流需要验证防盗链,即`referer`为 `.bilibili.com`域名下且 UA 不能为空
+2. APP 端也需要验证防盗链,即 UA 需要含有`Mozilla/5.0 BiliDroid/*.*.* (bbcallen@gmail.com)`(*为版本)
+3. 如`referer`或 UA 错误的情况会被判定为盗链,返回`403 Forbidden`故无法取流
+4. 若传`platform=html5`参数取流,则不会进行防盗链验证,即可通过 HTML 标签``播放
+
+**实例:**
+
+下载 ~~FLV~~ / MP4 格式视频:
+
+```shell
+wget 'http://upos-sz-mirrorhw.bilivideo.com/upgcxcode/08/62/171776208/171776208-1-112.flv?e=ig8euxZM2rNcNbhMnwhVhwdlhzK3hzdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1589565412&gen=playurl&os=hwbv&oi=606631998&trid=e0fa5f9a7610440a871279a28fae85aau&platform=pc&upsig=5f469cb4c190ed54b89bd40cc37eddff&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=80000000' \
+ -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
+ --referer 'https://www.bilibili.com' \
+ -O 'Download_video.flv'
+```
+
+下载 DASH 格式视频:
+
+```bash
+# 下载视频流
+wget 'https://cn-jxjj-ct-01-01.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30125.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674137769&gen=playurlv2&os=bcache&oi=606633952&trid=0000524e9cc80dea41dca72b59782270b5d3u&mid=293793435&platform=pc&upsig=c4206c80b1d0dc18c0545a7758d56eee&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&cdnid=4261&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=1726751&logo=80000000' \
+ -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
+ --referer 'https://www.bilibili.com' \
+ -O 'video.m4s'
+# 下载伴音流
+wget 'https://xy125x75x230x185xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1674137769&gen=playurlv2&os=mcdn&oi=606633952&trid=0000524e9cc80dea41dca72b59782270b5d3u&mid=293793435&platform=pc&upsig=e5feff4626de4c6fd2ed9c6061c324a0&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=1002708&bvc=vod&nettype=0&orderid=0,3&buvid=EC1BD8EA-88F6-4951-BF27-2CFE3450C78F167646infoc&build=0&agrr=0&bw=41220&logo=A0000001' \
+ -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
+ --referer 'https://www.bilibili.com' \
+ -O 'audio.m4s'
+# 进行混流
+ffmpeg -i video.m4s -i audio.m4s -c:v copy -c:a copy -f mp4 Download_video.mp4
+```
+
diff --git a/docs/video_ranking/dynamic.md b/docs/video_ranking/dynamic.md
new file mode 100644
index 0000000..225ce35
--- /dev/null
+++ b/docs/video_ranking/dynamic.md
@@ -0,0 +1,637 @@
+# 分区最新视频
+
+## 获取分区最新视频列表
+
+> https://api.bilibili.com/x/web-interface/dynamic/region
+
+*请求方式:GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------- | ------ | ------- |
+| pn | num | 页码 | 非必要 | 默认为1 |
+| ps | num | 每页项数 | 非必要 | 默认为14, 留空为5 |
+| rid | num | 目标分区tid | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ------ | -------- | ---- |
+| archives | array | 视频列表 | |
+| page | obj | 页面信息 | |
+
+`data`中的`archives`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---- |
+| 0 | obj | 视频1 | |
+| n | obj | 视频(n+1) | |
+| …… | obj | …… | …… |
+
+`data`中的`archives`数组中的对象:
+
+基本同[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的data对象
+
+`data`中的`page`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ---- | ---------- | ---- |
+| count | num | 总计视频数 | |
+| num | num | 当前页码 | |
+| size | num | 每页项数 | |
+
+**示例:**
+
+获取`tid=21`(生活->日常)分区中的2条最新动态视频信息
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/dynamic/region' \
+--data-urlencode 'rid=21' \
+--data-urlencode 'ps=2' \
+--data-urlencode 'pn=1' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "page": {
+ "num": 1,
+ "size": 2,
+ "count": 189
+ },
+ "archives": [{
+ "aid": 56998612,
+ "videos": 24,
+ "tid": 21,
+ "tname": "日常",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/76536be425ed98ba1f1b9aef1ada3a09f94c9f04.jpg",
+ "title": "操控百万UP主的一天!",
+ "pubdate": 1562568733,
+ "ctime": 1561624175,
+ "desc": "拍这个视频还挺辛苦的,希望大家喜欢的话给个三连叭!",
+ "state": 0,
+ "attribute": 536887424,
+ "duration": 1864,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 0,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0
+ },
+ "owner": {
+ "mid": 2206456,
+ "name": "花少北丶",
+ "face": "http://i1.hdslb.com/bfs/face/86ef6895a8f88c80f2885e7eb9ba7989db437b93.jpg"
+ },
+ "stat": {
+ "aid": 56998612,
+ "view": 2863604,
+ "danmaku": 82588,
+ "reply": 5502,
+ "favorite": 65471,
+ "coin": 104905,
+ "share": 5815,
+ "now_rank": 0,
+ "his_rank": 12,
+ "like": 165638,
+ "dislike": 0
+ },
+ "dynamic": "你想看的这里都有!",
+ "cid": 99548502,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "bvid": "BV1Wx411d7jX"
+ }, {
+ "aid": 837503204,
+ "videos": 1,
+ "tid": 21,
+ "tname": "日常",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/7025827d8dbfc6139a2d066daa51a08897282534.jpg",
+ "title": "“都是小人物,就别说什么大话了,活着就行”",
+ "pubdate": 1585264054,
+ "ctime": 1585264054,
+ "desc": "每一位用心生活的小人物,都是各自生活中不平凡的英雄!",
+ "state": 0,
+ "attribute": 16512,
+ "duration": 295,
+ "mission_id": 12868,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0
+ },
+ "owner": {
+ "mid": 350928606,
+ "name": "彼岸的岛",
+ "face": "http://i2.hdslb.com/bfs/face/9814b8b6defc045aa07c3bb08e8a30e63afd9f3e.jpg"
+ },
+ "stat": {
+ "aid": 837503204,
+ "view": 142239,
+ "danmaku": 602,
+ "reply": 702,
+ "favorite": 4728,
+ "coin": 4712,
+ "share": 917,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 7700,
+ "dislike": 0
+ },
+ "dynamic": "#全能打卡挑战##正能量##感人#",
+ "cid": 169901162,
+ "dimension": {
+ "width": 1280,
+ "height": 720,
+ "rotate": 0
+ },
+ "bvid": "BV1cg4y1a7tB"
+ }]
+ }
+}
+```
+
+
+
+### 获取分区标签近期互动列表
+
+> https://api.bilibili.com/x/web-interface/dynamic/tag
+
+*请求方式: GET*
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ---------- | ------ | ----------------- |
+| ps | num | 视频数 | 非必要 | 默认为14, 留空为5 |
+| pn | num | 列数 | 非必要 | 留空为1 |
+| rid | num | 目标分区id | 必要 | 参见[视频分区一览](../video/video_zone.md) |
+| tag_id | num | 目标标签id | 必要 | |
+
+**json回复:**
+
+与[获取分区最新视频列表](#获取分区最新视频列表)相同, 略
+
+**示例:**
+
+获取`tid=136(游戏->音游)`分区中`tag_id=10026108(Phigros)`标签近期互动列表的2条视频信息
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/dynamic/tag' \
+--data-urlencode 'rid=136' \
+--data-urlencode 'tag_id=10026108' \
+--data-urlencode 'ps=2' \
+--data-urlencode 'pn=1'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "page": {
+ "num": 1,
+ "size": 2,
+ "count": 152
+ },
+ "archives": [
+ {
+ "aid": 1452657587,
+ "videos": 1,
+ "tid": 136,
+ "tname": "音游",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/4cb13f97e0d4b43645728432468e44b40ad343de.jpg",
+ "title": "【MuseDash x Phigros/逆天愚人节谱面】Retribution ~Cycle of Redemption~ Lv.? AP",
+ "pubdate": 1712310000,
+ "ctime": 1712302810,
+ "desc": "谱师:Mayflycmd(@命令提示符 )",
+ "state": 0,
+ "duration": 189,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 3493136175204754,
+ "name": "TempoTiger",
+ "face": "https://i1.hdslb.com/bfs/face/0cf2722f9aaa0db94f9166a8084e347bca3580f4.jpg"
+ },
+ "stat": {
+ "aid": 1452657587,
+ "view": 27021,
+ "danmaku": 141,
+ "reply": 113,
+ "favorite": 306,
+ "coin": 144,
+ "share": 95,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 1050,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 27021
+ },
+ "dynamic": "",
+ "cid": 1494650111,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1Eq421w7T4",
+ "first_frame": "http://i0.hdslb.com/bfs/storyff/n240405sa2zsrp9x2i3erx1ln8icirs6_firsti.jpg",
+ "pub_location": "广东",
+ "cover43": "",
+ "bvid": "BV1Eq421w7T4",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": null
+ },
+ {
+ "aid": 1155789590,
+ "videos": 1,
+ "tid": 136,
+ "tname": "音游",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/c75674c8d104421d1794e69926d42ffa90e7d73d.jpg",
+ "title": "[Phigros 自制谱] 把一切都倾注进去吧!/ 雑踏、僕らの街 - TOGENASHI TOGEARI",
+ "pubdate": 1719687153,
+ "ctime": 1719687153,
+ "desc": "不是,你们怎么忍住把这键盘歌写这么简单的?\n不是,你们怎么忍住把这键盘歌写这么简单的?\n不是,你们怎么忍住把这键盘歌写这么简单的?\n\n应该是 Phigros 第一个写满三分钟的,虽然后面抄了很多重复配置,但无伤大雅(\n个人定数 16.6,其实就两段 5k 键盘难,看时间长多给了 0.1\n所以啊\n\n愤怒也好喜悦也好悲伤也好,把一切都倾注进去!\n怒りも喜びも哀しさも、全部ぶちこめ。\n\n-- 6.30 更新,修了一个特效的问题,改了一个很蹭的配置和一个很丑的排键",
+ "state": 0,
+ "duration": 201,
+ "mission_id": 1726375,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 341532844,
+ "name": "西宮缄",
+ "face": "https://i1.hdslb.com/bfs/face/1387108d9337c04c27ce2d8d75679e40540d4c14.jpg"
+ },
+ "stat": {
+ "aid": 1155789590,
+ "view": 39479,
+ "danmaku": 303,
+ "reply": 169,
+ "favorite": 1650,
+ "coin": 473,
+ "share": 653,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 5843,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 39479
+ },
+ "dynamic": "打这个比溜冰还爽",
+ "cid": 1600971084,
+ "dimension": {
+ "width": 2000,
+ "height": 1500,
+ "rotate": 0
+ },
+ "season_id": 3395535,
+ "short_link_v2": "https://b23.tv/BV1iZ421g7E8",
+ "first_frame": "http://i1.hdslb.com/bfs/storyff/n240630sa3chl8idnpz8d31t6yaczagn_firsti.jpg",
+ "pub_location": "天津",
+ "cover43": "",
+ "bvid": "BV1iZ421g7E8",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": null
+ }
+ ]
+ }
+}
+```
+
+
+
+### 获取分区近期投稿列表
+
+> https://api.bilibili.com/x/web-interface/newlist
+
+*请求方式: GET*
+
+注: 该接口在 Web 端实际情况中被请求, 但似乎未在页面中显示, 作用尚不清楚
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ---------- | ------ | ----------------- |
+| ps | num | 视频数 | 非必要 | 默认为14, 留空为5 |
+| pn | num | 页码 | 非必要 | 默认为1 |
+| rid | num | 目标分区id | 非必要 | 参见[视频分区一览](../video/video_zone.md) |
+| type | num | 类型? | 非必要 | 默认为0 |
+
+**JSON回复:**
+
+与[获取分区最新视频列表](#获取分区最新视频列表)相同, 略
+
+**示例:**
+
+与[获取分区最新视频列表](#获取分区最新视频列表)相似, 略
+
+### 获取分区近期投稿列表 (带排序)
+
+> https://api.bilibili.com/x/web-interface/newlist_rank
+
+*请求方式: GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----------- | ---- | --------- | ------ | ------- |
+| main_ver | str | 主页版本 | 非必要 | 默认为 `v3` |
+| search_type | str | 搜索类型 | 必要 | 默认为 `video` |
+| view_type | str | 查看类型? | 必要 | 默认为 `hot_rank` |
+| copy_right | num | 版权? | 非必要 | 默认为 `-1` |
+| new_web_tag | num | 标签? | 非必要 | 默认为 `1` |
+| order | str | 排序方式 | 非必要 | click: 按播放排序(默认) scores: 按评论数排序 stow: 按收藏排序 coin: 按硬币数排序 dm: 按弹幕数排序|
+| cate_id | num | 分区id | 必要 | 留空会导致响应中`data`中`result`为`null`, 参见[视频分区一览](../video/video_zone.md) |
+| page | num | 页码 | 非必要 | 默认以 `1` 开始 |
+| pagesize | num | 视频数 | 必要 | 默认为 `30`, 留空会导致 -500 |
+| time_from | num | 起始时间 | 必要 | yyyyMMdd, 默认为 `time_to` - 7 |
+| time_to | num | 结束时间 | 必要 | yyyyMMdd, 默认为当前时间(大于起始时间) |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----- |
+| code | num | 返回值 | 0:成功 -500: 未传pagesize -10: 未传其余必要参数 |
+| message | str | 错误信息 | 无为0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | 错误为null |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------- | ----- | ------------------ | ----- |
+| exp_list | null | | 作用尚不明确 |
+| show_module_list | array | 显示模块列表? | |
+| result | array | 结果本体 | 失败时为null |
+| show_column | num | 0 | 作用尚不明确 |
+| rqt_type | str | search | 作用尚不明确 |
+| numPages | num | 页码 | 失败时为0 |
+| numResults | num | 视频数 | 失败时为0 |
+| crr_query | str | 空 | 作用尚不明确 |
+| pagesize | num | 视频数 | |
+| suggest_keyword | num | 空 | 作用尚不明确 |
+| egg_info | null | | 作用尚不明确 |
+| cache | num | 0 | 作用尚不明确 |
+| exp_bits | num | 1 | 作用尚不明确 |
+| exp_str | str | 空 | 作用尚不明确 |
+| seid | str | 一串字符串中的数字 | 作用尚不明确 |
+| msg | str | 结果信息 | 成功时为`success`, 反之为`as error.` |
+| egg_hit | num | 0 | 作用尚不明确 |
+| page | num | 页码 | |
+
+`data`中的`show_module_list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------- | ---- |
+| 0 | str | tips | |
+| 1 | str | brand_ad | |
+| 2 | str | esports | |
+| 3 | str | activity | |
+| 4 | str | web_game | |
+| 5 | str | card | |
+| 6 | str | media_bangumi | |
+| 7 | str | media_ft | |
+| 8 | str | bili_user | |
+| 9 | str | user | |
+| 10 | str | star | |
+| 11 | str | video | |
+
+`data`中的`result`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------- | ---- | -------------- | ----- |
+| pubdate | str | 发布时间 | 格式为 `yyyy-MM-dd HH:mm:ss` |
+| pic | str | 封面图 | |
+| tag | str | 标签 | 用 `,` 分隔 |
+| duration | num | 时长 | 单位为秒 |
+| id | num | aid | |
+| rank_score | num | 排序分数? | |
+| badgepay | bool | 是否有角标? | |
+| senddate | num | 发送时间? | UNIX 秒级时间戳 |
+| author | str | UP主名 | |
+| review | num | 评论数 | |
+| mid | num | UP主mid | |
+| is_union_video | num | 是否为联合投稿 | |
+| rank_index | num | 排序索引号 | |
+| type | str | 类型 | video: 视频 |
+| arcrank | str | 0 | 作用尚不明确 |
+| play | str | 播放数 | |
+| rank_offset | num | 排序偏移? | 与 `rank_index` 相同 |
+| description | str | 简介 | |
+| video_review | num | 弹幕数? | |
+| is_pay | num | 是否付费? | 0: 免费 1: 付费 |
+| favorites | num | 收藏数 | |
+| arcurl | str | 视频播放页URL | |
+| bvid | str | bvid | |
+| title | str | 标题 | |
+| vt | num | 0 | 作用尚不明确 |
+| enable_vt | num | 0 | 作用尚不明确 |
+| vt_display | str | 空 | 作用尚不明确 |
+
+**示例:**
+
+获取`tid=231(科技->计算机技术)`分区近期投稿列表, 按播放数排序, 页码为1, 视频数为2, 时间一周
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/newlist_rank' \
+--data-urlencode 'search_type=video' \
+--data-urlencode 'view_type=hot_rank' \
+--data-urlencode 'order=click' \
+--data-urlencode 'cate_id=231' \
+--data-urlencode 'page=1' \
+--data-urlencode 'pagesize=2' \
+--data-urlencode 'time_from=20240716' \
+--data-urlencode 'time_to=20240723'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "exp_list": null,
+ "show_module_list": [
+ "tips",
+ "brand_ad",
+ "esports",
+ "activity",
+ "web_game",
+ "card",
+ "media_bangumi",
+ "media_ft",
+ "bili_user",
+ "user",
+ "star",
+ "video"
+ ],
+ "result": [
+ {
+ "pubdate": "2024-07-19 15:27:23",
+ "pic": "//i0.hdslb.com/bfs/archive/a6c2a8669e623333eee4bd8316b4e7b01716b7f2.jpg",
+ "tag": "微软,Microsoft",
+ "duration": 14,
+ "id": 1406270001,
+ "rank_score": 237205,
+ "badgepay": false,
+ "senddate": 1721410429,
+ "author": "柚子木字幕组",
+ "review": 928,
+ "mid": 221648,
+ "is_union_video": 0,
+ "rank_index": 1,
+ "type": "video",
+ "arcrank": "0",
+ "play": "237205",
+ "rank_offset": 1,
+ "description": "X",
+ "video_review": 42,
+ "is_pay": 0,
+ "favorites": 618,
+ "arcurl": "http://www.bilibili.com/video/av1406270001",
+ "bvid": "BV1gr421M7rE",
+ "title": "突发:微软服务中断正在影响全球用户",
+ "vt": 0,
+ "enable_vt": 0,
+ "vt_display": ""
+ },
+ {
+ "pubdate": "2024-07-17 22:12:47",
+ "pic": "//i0.hdslb.com/bfs/archive/1b02bc3806369f8c051a84e1ffef11b22695e659.jpg",
+ "tag": "演讲,大学,编程,英伟达,人工智能,TED,AI,黄仁勋",
+ "duration": 1908,
+ "id": 1556206286,
+ "rank_score": 52653,
+ "badgepay": false,
+ "senddate": 1721225567,
+ "author": "YouTube精选字幕组",
+ "review": 147,
+ "mid": 487511093,
+ "is_union_video": 0,
+ "rank_index": 2,
+ "type": "video",
+ "arcrank": "0",
+ "play": "52648",
+ "rank_offset": 2,
+ "description": "New SciTech\n上月加州理工学院毕业典礼上,刚刚带领英伟达达成世界第一市值的CEO黄仁勋,到场分享对当下AI革命趋势的见解、带领英伟达转型成AI公司的历程、以及自己在职场这么多年的人生感悟。\n\n全程没有上位者那种空洞无意义的说教,都是真实的发展故事和对未来世界的看法。如果你的工作生活中有涉及到AI技术的可能,那么这期演讲将会非常有意义。",
+ "video_review": 16,
+ "is_pay": 0,
+ "favorites": 2152,
+ "arcurl": "http://www.bilibili.com/video/av1556206286",
+ "bvid": "BV1C1421b7dD",
+ "title": "“这个时代要跑,不要走”黄仁勋加州理工毕业演讲完整版",
+ "vt": 0,
+ "enable_vt": 0,
+ "vt_display": ""
+ }
+ ],
+ "show_column": 0,
+ "rqt_type": "search",
+ "numPages": 404,
+ "numResults": 808,
+ "crr_query": "",
+ "pagesize": 2,
+ "suggest_keyword": "",
+ "egg_info": null,
+ "cache": 0,
+ "exp_bits": 1,
+ "exp_str": "",
+ "seid": "6717218533109517809",
+ "msg": "success",
+ "egg_hit": 0,
+ "page": 1
+ }
+}
+```
+
+
diff --git a/docs/video_ranking/popular.md b/docs/video_ranking/popular.md
new file mode 100644
index 0000000..112f00a
--- /dev/null
+++ b/docs/video_ranking/popular.md
@@ -0,0 +1,1312 @@
+# 热门视频
+
+## 获取当前热门视频列表
+
+> https://api.bilibili.com/x/web-interface/popular
+
+_请求方式:GET_
+
+注: 当携带Cookie时返回的数据的排行是个性化的
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | --------- |
+| pn | num | 页码 | 非必要 | 默认为 1 |
+| ps | num | 每页项数 | 非必要 | 默认为 20 |
+
+**json 回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----- | -------------- | ---- |
+| list | array | 视频列表 | |
+| no_more | bool | 是否有更多数据 | false:下页还有数据 true:下页没有数据 |
+
+`data`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------- | ---- |
+| 0 | obj | 视频1 | |
+| n | obj | 视频(n+1) | |
+| …… | obj | …… | …… |
+
+`data`中的`list`数组中的对象:
+
+基本同[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中的data对象
+
+**示例:**
+
+获取当前热门视频列表(不携带 Cookie)
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/popular' \
+--data-urlencode 'ps=2' \
+--data-urlencode 'pn=1' \
+-A 'qwq'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "aid": 1356452135,
+ "videos": 1,
+ "tid": 250,
+ "tname": "出行",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/5c3a47b7189caa84965c03b08007635a3c2e0405.jpg",
+ "title": "《抬您上泰山》",
+ "pubdate": 1722060600,
+ "ctime": 1722018603,
+ "desc": "转型的第一次尝试\n大家觉得还可以的话多多支持\n有什么意见请一定要提!\n谢谢观众老师们!!!",
+ "state": 0,
+ "duration": 138,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 1339110285,
+ "name": "赵峰山西四人行",
+ "face": "https://i0.hdslb.com/bfs/face/6dfc87876cc8e6a0b81f113a5b3c1b473f48cb7a.jpg"
+ },
+ "stat": {
+ "aid": 1356452135,
+ "view": 2465053,
+ "danmaku": 8467,
+ "reply": 4426,
+ "favorite": 46567,
+ "coin": 168267,
+ "share": 23180,
+ "now_rank": 0,
+ "his_rank": 2,
+ "like": 403250,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 2465053
+ },
+ "dynamic": "更新了xdm 转型之作大家多多支持",
+ "cid": 1628605145,
+ "dimension": {
+ "width": 1080,
+ "height": 1920,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1tz421i7zb",
+ "first_frame": "http://i1.hdslb.com/bfs/storyff/n240727sa1qmofe0nqz3he18b11gotmv_firsti.jpg",
+ "pub_location": "山东",
+ "cover43": "",
+ "bvid": "BV1tz421i7zb",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "enable_vt": 0,
+ "ai_rcmd": null,
+ "rcmd_reason": {
+ "content": "百万播放",
+ "corner_mark": 0
+ }
+ },
+ {
+ "aid": 1906472398,
+ "videos": 1,
+ "tid": 221,
+ "tname": "野生动物",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/1aecafe48c53f8033bda883aad4e18f6a737e6b3.jpg",
+ "title": "杭州居然有科普展贩卖保护动物???",
+ "pubdate": 1722176718,
+ "ctime": 1722176718,
+ "desc": "-",
+ "state": 0,
+ "duration": 278,
+ "mission_id": 4016856,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 14309659,
+ "name": "凛某人",
+ "face": "https://i1.hdslb.com/bfs/face/53a4bed97980363ed9cf5802d811c41a608f36ee.jpg"
+ },
+ "stat": {
+ "aid": 1906472398,
+ "view": 406829,
+ "danmaku": 786,
+ "reply": 2203,
+ "favorite": 5698,
+ "coin": 20079,
+ "share": 2052,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 81327,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 406829
+ },
+ "dynamic": "",
+ "cid": 1630483865,
+ "dimension": {
+ "width": 1080,
+ "height": 1920,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1MU411S7Cc",
+ "up_from_v2": 9,
+ "first_frame": "http://i0.hdslb.com/bfs/storyff/n240728sa1eky6tk8i78rs1xtdt7pgyd_firsti.jpg",
+ "pub_location": "浙江",
+ "cover43": "",
+ "bvid": "BV1MU411S7Cc",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "enable_vt": 0,
+ "ai_rcmd": null,
+ "rcmd_reason": {
+ "content": "6万点赞",
+ "corner_mark": 0
+ }
+ }
+ ],
+ "no_more": false
+ }
+}
+```
+
+
+
+## 每周必看全部列表
+
+> https://api.bilibili.com/x/web-interface/popular/series/list
+
+*请求方式: GET*
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------- |
+| code | num | 返回值 | 0: 成功 -352: 请求被风控 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ----- | ------------ | ---- |
+| list | array | 全部信息列表 | 套了个娃 |
+
+`data`对象中`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------ | ---- |
+| 0 | obj | 第 n+1 期 | |
+| 1 | obj | 第 n 期 | |
+| 2 | obj | 第 n-1 期 | |
+| …… | obj | …… | …… |
+| n | obj | 第 1 期 | |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ------------ | ---- |
+| number | num | 期数 | |
+| subject | str | 主题 | |
+| status | num | 状态 | 2: 已结束 |
+| name | str | 名称 | yyyy第n期 MM.dd - MM.dd |
+
+**示例:**
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/popular/series/list' \
+-A ''
+```
+
+
+查看响应示例:
+
+```jsonc
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "number": 279,
+ "subject": "身残志坚钻石大盗",
+ "status": 2,
+ "name": "2024第279期 07.19 - 07.25"
+ },
+ {
+ "number": 278,
+ "subject": "中国诸神最强简史",
+ "status": 2,
+ "name": "2024第278期 07.12 - 07.18"
+ },
+ {
+ "number": 277,
+ "subject": "不用脚的射门大赛",
+ "status": 2,
+ "name": "2024第277期 07.05 - 07.11"
+ },
+ {
+ "number": 276,
+ "subject": "火柴人VS几何",
+ "status": 2,
+ "name": "2024第276期 06.28 - 07.04"
+ },
+ {
+ "number": 275,
+ "subject": "重磅自制三体动画",
+ "status": 2,
+ "name": "2024第275期 06.21 - 06.27"
+ },
+ /// ...
+ {
+ "number": 42,
+ "subject": "【英雄联盟】——战士",
+ "status": 2,
+ "name": "2020第42期 01.03 - 01.09"
+ },
+ {
+ "number": 41,
+ "subject": "2019年度鬼畜回顾",
+ "status": 2,
+ "name": "2019第41期 12.27 - 01.02"
+ },
+ // ...
+ {
+ "number": 2,
+ "subject": "噬元兽大战哥斯拉",
+ "status": 2,
+ "name": "2019第2期 03.29 - 04.04"
+ },
+ {
+ "number": 1,
+ "subject": "神仙爱情",
+ "status": 2,
+ "name": "2019第1期 03.22 - 03.28"
+ }
+ ]
+ }
+}
+```
+
+
+
+## 每周必看选期详细信息
+
+> https://api.bilibili.com/x/web-interface/popular/series/one
+
+*请求方式: GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| number | num | 期数 | 必要 | 默认为 1 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | --------- |
+| code | num | 返回值 | 0: 成功 -352: 请求被风控 -404: 啥都木有 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ------------ | ---- |
+| config | obj | 选期信息 | |
+| reminder | str | 提醒 | |
+| list | array | 选期视频列表 | |
+
+`data`对象中的`config`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ------------ | ---- |
+| id | num | 选期ID | |
+| type | str | 选期类型 | |
+| number | num | 期数 | |
+| subject | str | 主题 | |
+| stime | num | 开始时间 | |
+| etime | num | 结束时间 | |
+| status | num | 状态 | 2: 已结束 |
+| name | str | 名称 | yyyy第n期 MM.dd - MM.dd |
+| label | str | 标题 | |
+| hint | str | 提示 | |
+| color | num | 颜色? | |
+| cover | str | 封面 | |
+| share_title | str | 分享标题 | |
+| share_subtitle | str | 分享副标题 | |
+| media_id | num | 媒体ID? | |
+
+`data`对象中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------ | ---- |
+| 0 | obj | 第 1 个视频 | |
+| 1 | obj | 第 2 个视频 | |
+| …… | obj | …… | …… |
+| n | obj | 第 n 个视频 | |
+
+`list`数组中的对象:
+
+基本同[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中的data对象
+
+**示例:**
+
+查看小破站第 3 期每周必看详细信息
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/popular/series/one' \
+--data-urlencode 'number=3'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "config": {
+ "id": 3,
+ "type": "weekly_selected",
+ "number": 3,
+ "subject": "人类首张黑洞照片",
+ "stime": 1554393600,
+ "etime": 1554998399,
+ "status": 2,
+ "name": "2019第3期 04.05 - 04.11",
+ "label": "第3期(0412更新)",
+ "hint": "本周热词:",
+ "color": 2,
+ "cover": "http://i0.hdslb.com/bfs/archive/c10fe5913a1e503bcd68db69158605df2bf54424.jpg",
+ "share_title": "人类首张黑洞照片 | B站每周必看2019年第3期",
+ "share_subtitle": "和B站小伙伴一起见证历史!黑洞到底长啥样?",
+ "media_id": 448239988
+ },
+ "reminder": "每周五晚18:00更新",
+ "list": [
+ {
+ "aid": 48918074,
+ "videos": 1,
+ "tid": 201,
+ "tname": "科学科普",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/a2cbee9c1e2e854e161f1bddc04d657baf6e95f5.jpg",
+ "title": "人类第一张黑洞照片,来了!",
+ "pubdate": 1554904794,
+ "ctime": 1554904794,
+ "desc": "联合出品:中国科学技术协会、中国科学院计算机网络信息中心\n制作:中国科普博览\n科学审核:中国科学院国家天文台 苟利军\n实习生沈慧慧、李哲欣对本视频亦有贡献",
+ "state": 0,
+ "duration": 89,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 407045223,
+ "name": "二次元的中科院物理所",
+ "face": "https://i0.hdslb.com/bfs/face/978ea07f22e54c2e62f01def8e815b59adacc5d0.jpg"
+ },
+ "stat": {
+ "aid": 48918074,
+ "view": 1594796,
+ "danmaku": 23255,
+ "reply": 16022,
+ "favorite": 23084,
+ "coin": 26411,
+ "share": 10095,
+ "now_rank": 0,
+ "his_rank": 7,
+ "like": 62712,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 1594796
+ },
+ "dynamic": "#趣味科普人文##科学##中科院#",
+ "cid": 85668198,
+ "dimension": {
+ "width": 1280,
+ "height": 720,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1Nb411M7r8",
+ "cover43": "",
+ "bvid": "BV1Nb411M7r8",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "enable_vt": 0,
+ "ai_rcmd": null,
+ "rcmd_reason": "和B站小伙伴一起见证历史!黑洞到底长啥样?错过直播的你还不快点进来。"
+ },
+ {
+ "aid": 48678913,
+ "videos": 1,
+ "tid": 161,
+ "tname": "手工",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/8cda8b937795081c5620b95a06670fd15ed5f768.jpg",
+ "title": "破釜沉舟跑步机",
+ "pubdate": 1554694435,
+ "ctime": 1554694435,
+ "desc": "-",
+ "state": 0,
+ "duration": 138,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 280793434,
+ "name": "手工耿",
+ "face": "http://i1.hdslb.com/bfs/face/b8a75ae7d2a0e2af1d36ca9f1084d850eebb28e3.jpg"
+ },
+ "stat": {
+ "aid": 48678913,
+ "view": 12760040,
+ "danmaku": 20334,
+ "reply": 14432,
+ "favorite": 58473,
+ "coin": 179999,
+ "share": 146849,
+ "now_rank": 0,
+ "his_rank": 2,
+ "like": 436988,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 12760040
+ },
+ "dynamic": "#手工##创意##自制#",
+ "cid": 85243779,
+ "dimension": {
+ "width": 1080,
+ "height": 1920,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1eb411u7Pz",
+ "up_from_v2": 9,
+ "cover43": "",
+ "bvid": "BV1eb411u7Pz",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "enable_vt": 0,
+ "ai_rcmd": null,
+ "rcmd_reason": "脑洞发明家手工耿最新力作!如果你恨一个人,就送他这台破釜沉舟跑步机吧。"
+ },
+ {
+ "aid": 48316018,
+ "videos": 1,
+ "tid": 22,
+ "tname": "鬼畜调教",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/90a5f41351f7d8622f5c5e0aa163933e05830bd3.jpg",
+ "title": "【名师rap】游戏不打不成才",
+ "pubdate": 1554431709,
+ "ctime": 1554415633,
+ "desc": "欢迎收看由各位名师带来的精彩育儿饶舌讲座,教育孩子最科学的方法就是督促孩子打游戏,你学到了吗?\n如果想学习更多相关课程,可以收看名师讲堂·下一讲:如何让孩子爱上♂学习?(av2274779)",
+ "state": 0,
+ "duration": 156,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 375375,
+ "name": "伊丽莎白鼠",
+ "face": "https://i0.hdslb.com/bfs/face/6c36ec15f6d7ddd9bdb558511521bd0256779e1c.jpg"
+ },
+ "stat": {
+ "aid": 48316018,
+ "view": 8560735,
+ "danmaku": 25131,
+ "reply": 24307,
+ "favorite": 206726,
+ "coin": 382539,
+ "share": 88084,
+ "now_rank": 0,
+ "his_rank": 2,
+ "like": 476744,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 8560735
+ },
+ "dynamic": "没想到吧,时隔4年的名师rap居然有续作!快点赞投币收藏,素质3连是我更新的最大动力!",
+ "cid": 84631475,
+ "dimension": {
+ "width": 1280,
+ "height": 720,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1Yb411g7Mu",
+ "cover43": "",
+ "bvid": "BV1Yb411g7Mu",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "enable_vt": 0,
+ "ai_rcmd": null,
+ "rcmd_reason": "爷爷,你关注的鬼畜UP主终终终终于更新啦!还是熟悉的全明星阵容,还是曾经的味道。"
+ },
+ {
+ "aid": 48823532,
+ "videos": 1,
+ "tid": 21,
+ "tname": "日常",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/7cb8e384d34946564453a22131c50aa4eb308dfc.jpg",
+ "title": "随机理发!太丢人了!!早知道这样我还不如女装!",
+ "pubdate": 1554888608,
+ "ctime": 1554817240,
+ "desc": "太羞耻了!不能我一个受罪!收藏过2W就抽一个员工理跟我一样的发型!\n发现生活,改变自己\n体验世界的点点滴滴!\nav48289549 和UP主以物换物,最后竟然换到了中国boy的...!\nav48120567 赤身拳击!干翻拳击教练需要几拳?\nav47677645 精子捐献是怎样的体验?\nav47479428 名媛养成指南!\nav47006491 和“少爷”up主互换身份\nav46265017 200万粉UP主在上海开公司到底要花多少钱?\nav45061698 第一次去夜店是怎样的体验?",
+ "state": 0,
+ "duration": 347,
+ "mission_id": 11230,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 808171,
+ "name": "吃素的狮子",
+ "face": "https://i1.hdslb.com/bfs/face/dd773c9572494338ada15aa10262a510f161baf1.jpg"
+ },
+ "stat": {
+ "aid": 48823532,
+ "view": 1523181,
+ "danmaku": 13043,
+ "reply": 4401,
+ "favorite": 37835,
+ "coin": 186720,
+ "share": 5163,
+ "now_rank": 0,
+ "his_rank": 3,
+ "like": 161974,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 1523181
+ },
+ "dynamic": "太羞耻了!不能我一个受罪!收藏过2W就抽一个员工理跟我一样的发型!",
+ "cid": 85496423,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1ib411T7bt",
+ "cover43": "",
+ "bvid": "BV1ib411T7bt",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "enable_vt": 0,
+ "ai_rcmd": null,
+ "rcmd_reason": "男人就要对自己狠一点,狮子的这个新发型说实话还有点小帅呢!"
+ },
+ {
+ "aid": 48880868,
+ "videos": 1,
+ "tid": 76,
+ "tname": "美食制作",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/8fd09f285109fc105a3427745329b0bdb055cc6d.jpg",
+ "title": "这个水果长得真漂亮,不如做成【水果奶酪三明治】吧~嘻嘻",
+ "pubdate": 1554897659,
+ "ctime": 1554880873,
+ "desc": "记得挑松软的吐司面包,吃起来是有点像甜点的口感!\nBGM:野餐面包 - Happy by Mikki Aglaganov",
+ "state": 0,
+ "duration": 192,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 17409016,
+ "name": "爱做饭的芋头SAMA",
+ "face": "http://i1.hdslb.com/bfs/face/2182d21ff5ae520f392f55b59022bc17f43b4943.jpg"
+ },
+ "stat": {
+ "aid": 48880868,
+ "view": 2231330,
+ "danmaku": 3383,
+ "reply": 3870,
+ "favorite": 52784,
+ "coin": 102138,
+ "share": 9293,
+ "now_rank": 0,
+ "his_rank": 8,
+ "like": 147138,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 2231330
+ },
+ "dynamic": "还有什么能比美丽的三明治更让人心情大好吗?emm…吃掉它!",
+ "cid": 85602013,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV19b411T7a7",
+ "cover43": "",
+ "bvid": "BV19b411T7a7",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "enable_vt": 0,
+ "ai_rcmd": null,
+ "rcmd_reason": "这世上还有什么比新鲜的水果三明治更美好的吗?那就是一颗善良的心。"
+ },
+ {
+ "aid": 48220814,
+ "videos": 1,
+ "tid": 183,
+ "tname": "影视剪辑",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/d4fc8471e6fe3bcdf1de4df43fabffaad74646b4.jpg",
+ "title": "【七代小丑/踩点/混剪/高燃】前方高能!欢乐与惊悚的踩点视觉盛宴!希斯莱杰诞辰40周年纪念。",
+ "pubdate": 1554368448,
+ "ctime": 1554341020,
+ "desc": "BGM:《Lock Me Up》 - The Cab\n 《Holocene》 - Bon Iver \n推荐耳机食用,从筹备到剪辑完成断断续续花了一个月,希望我的用心剪辑可以被更多的人看到。\n一直都想做个DC小丑群像剪辑,把所有我喜欢的银幕小丑都剪到一起,\n届时烦请各位小伙伴理性发言。不要在评论区和弹幕引战、人身攻击和散布演员谣言\n谢谢配合!\n要是喜欢这期的话,求点赞、收藏和硬币。\n做视频实属不易,小伙伴们的支持与鼓励是我继续做视频的动力!",
+ "state": 0,
+ "duration": 343,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 27259842,
+ "name": "迪亚瓦尔Diaval",
+ "face": "https://i0.hdslb.com/bfs/face/ade2291e23d48050c1617dbaf3583b98d46be0dc.jpg"
+ },
+ "stat": {
+ "aid": 48220814,
+ "view": 23693530,
+ "danmaku": 45208,
+ "reply": 10213,
+ "favorite": 833645,
+ "coin": 789760,
+ "share": 136694,
+ "now_rank": 0,
+ "his_rank": 3,
+ "like": 1085389,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 23693530
+ },
+ "dynamic": "#希斯莱杰##自杀小队##小丑#",
+ "cid": 517786039,
+ "dimension": {
+ "width": 3840,
+ "height": 2160,
+ "rotate": 0
+ },
+ "season_id": 3223,
+ "short_link_v2": "https://b23.tv/BV1Jb411W7dH",
+ "first_frame": "http://i1.hdslb.com/bfs/storyff/n220227qn1sayugogts51k3m0m2cihw0_firsti.jpg",
+ "cover43": "",
+ "bvid": "BV1Jb411W7dH",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "enable_vt": 0,
+ "ai_rcmd": null,
+ "rcmd_reason": "感谢希斯·莱杰为我们带来如此经典的银幕形象,愿你安好。"
+ },
+ {
+ "aid": 48956942,
+ "videos": 1,
+ "tid": 17,
+ "tname": "单机游戏",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/564e938ae040831fa1620981b2e6e33a51b72ffd.jpg",
+ "title": "【敖厂长】沙雕游戏主角死法超级华丽",
+ "pubdate": 1554957465,
+ "ctime": 1554957466,
+ "desc": "500万粉丝达成 收藏充电硬币庆祝一波!",
+ "state": 0,
+ "duration": 785,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 122879,
+ "name": "敖厂长",
+ "face": "https://i2.hdslb.com/bfs/face/71d85b84b0b2aa59009cd6af09b53aac309c3461.jpg"
+ },
+ "stat": {
+ "aid": 48956942,
+ "view": 5272672,
+ "danmaku": 28520,
+ "reply": 9614,
+ "favorite": 51080,
+ "coin": 234581,
+ "share": 7342,
+ "now_rank": 0,
+ "his_rank": 1,
+ "like": 238148,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 5272672
+ },
+ "dynamic": "#敖厂长#新视频庆祝500万粉丝达成!沙雕游戏主角死法超级华丽!",
+ "cid": 85738601,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1bb411M7G2",
+ "cover43": "",
+ "bvid": "BV1bb411M7G2",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "enable_vt": 0,
+ "ai_rcmd": null,
+ "rcmd_reason": "恶意满满的摩托赛车游戏,制作组的重点完全放在了花式死法上啊喂→_→"
+ },
+ {
+ "aid": 48949609,
+ "videos": 1,
+ "tid": 138,
+ "tname": "搞笑",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/970b7377cddc309b1793c0d7daace2a2a86e42a3.jpg",
+ "title": "探秘印度医药,真的有牛尿做的药吗?",
+ "pubdate": 1554951398,
+ "ctime": 1554951398,
+ "desc": "印度真有牛尿做的药吗?喝一口是什么味道?",
+ "state": 0,
+ "duration": 375,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 176037767,
+ "name": "我是郭杰瑞",
+ "face": "http://i2.hdslb.com/bfs/face/6182455e4d61159121c223ddc7a3a381f2d4d056.jpg"
+ },
+ "stat": {
+ "aid": 48949609,
+ "view": 1517839,
+ "danmaku": 13115,
+ "reply": 3538,
+ "favorite": 3016,
+ "coin": 16410,
+ "share": 2337,
+ "now_rank": 0,
+ "his_rank": 16,
+ "like": 46687,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 1517839
+ },
+ "dynamic": "印度有牛尿做的药吗?我不是药神!",
+ "cid": 85723703,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1Lb411M7B9",
+ "cover43": "",
+ "bvid": "BV1Lb411M7B9",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "enable_vt": 0,
+ "ai_rcmd": null,
+ "rcmd_reason": "继续跟随郭杰瑞走进印度。什么?你居然敢把印度神药当水喝w(゚Д゚)w"
+ },
+ {
+ "aid": 48227749,
+ "videos": 1,
+ "tid": 222,
+ "tname": "小宠异宠",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/f42431037088b5ddceae79ca62df24cc78575eff.jpg",
+ "title": "华农兄弟:怀孕好几个月的香猪终于生了,一下生了9只小香猪",
+ "pubdate": 1554375629,
+ "ctime": 1554375634,
+ "desc": "华农兄弟:怀孕好几个月的香猪终于生了,一下生了9只小香猪",
+ "state": 0,
+ "duration": 151,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 250858633,
+ "name": "华农兄弟",
+ "face": "https://i1.hdslb.com/bfs/face/bac504655c69ab937b0be4557e27535f794b0c66.jpg"
+ },
+ "stat": {
+ "aid": 48227749,
+ "view": 1743011,
+ "danmaku": 6544,
+ "reply": 3757,
+ "favorite": 2755,
+ "coin": 17290,
+ "share": 2027,
+ "now_rank": 0,
+ "his_rank": 10,
+ "like": 57675,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 1743011
+ },
+ "dynamic": "华农兄弟:怀孕好几个月的香猪终于生了,一下生了9只小香猪",
+ "cid": 84476924,
+ "dimension": {
+ "width": 3840,
+ "height": 2160,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1pb411W7iY",
+ "pub_location": "江西",
+ "cover43": "",
+ "bvid": "BV1pb411W7iY",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "enable_vt": 0,
+ "ai_rcmd": null,
+ "rcmd_reason": "刚出生小香猪超可爱啊,好想抱一只回家,再过几个月就可以....( ‵▽′)ψ"
+ },
+ {
+ "aid": 48882824,
+ "videos": 1,
+ "tid": 182,
+ "tname": "影视杂谈",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/51e06a15b1a02478d7106931cd8bddda8c2c67ab.jpg",
+ "title": "电影最TOP 123: 难以超越的奇幻史诗巨制《指环王》三部曲",
+ "pubdate": 1554899413,
+ "ctime": 1554899415,
+ "desc": "本期咱来聊聊彼得•杰克逊执导的魔幻史诗巨著《指环王》三部曲。",
+ "state": 0,
+ "duration": 4632,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 17819768,
+ "name": "电影最TOP",
+ "face": "http://i2.hdslb.com/bfs/face/6b2ade215ea603b495648875c925172a863d16d4.jpg"
+ },
+ "stat": {
+ "aid": 48882824,
+ "view": 3771761,
+ "danmaku": 56684,
+ "reply": 6959,
+ "favorite": 73050,
+ "coin": 202173,
+ "share": 12895,
+ "now_rank": 0,
+ "his_rank": 2,
+ "like": 164801,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 3771761
+ },
+ "dynamic": "#魔戒##指环王##史诗#",
+ "cid": 85605834,
+ "dimension": {
+ "width": 1280,
+ "height": 720,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1db411T7He",
+ "cover43": "",
+ "bvid": "BV1db411T7He",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "enable_vt": 0,
+ "ai_rcmd": null,
+ "rcmd_reason": "一小时重温影史经典《指环王》系列。不论再看多少遍,感动与震撼依旧。"
+ },
+ {
+ "aid": 48473798,
+ "videos": 1,
+ "tid": 21,
+ "tname": "日常",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/c0eff150f8ba32fefdb14cf8de4e39a0a4982640.jpg",
+ "title": "和日本妹子结婚要花多少钱?日本的收入情况up听到后惊呆了。。。",
+ "pubdate": 1554536915,
+ "ctime": 1554536915,
+ "desc": "记得关注我豆奶子呀~谢谢您嘞!\n→av40409086 日本妹子为什么这么瘦\n→av42806782 日本妹子为啥冬天光腿\n→av43240232 日本妹子吃超难吃中国菜的反应\n→av40892710 日本妹子为啥牙齿不太好看\n→av42064376 日本妹子为啥胸大\n→av41491192 片尾曲 日语版念诗之王\n有什么疑问请弹幕留言!豆奶为您倾情解惑!",
+ "state": 0,
+ "duration": 350,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 6574487,
+ "name": "纳豆奶奶",
+ "face": "https://i2.hdslb.com/bfs/face/0a8638b34173708fcf979bd1166fbb7fdb1110a4.jpg"
+ },
+ "stat": {
+ "aid": 48473798,
+ "view": 4564805,
+ "danmaku": 21747,
+ "reply": 9727,
+ "favorite": 44873,
+ "coin": 175160,
+ "share": 7102,
+ "now_rank": 0,
+ "his_rank": 6,
+ "like": 256532,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 4564805
+ },
+ "dynamic": "#日本文化##科普##吐槽#身边的男性友人看完这期表示非常喜欢,女性朋友更是爱不释手!结婚?日本收入?这些你最关心的问题都在这里!",
+ "cid": 84891041,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1pb411373L",
+ "cover43": "",
+ "bvid": "BV1pb411373L",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "enable_vt": 0,
+ "ai_rcmd": null,
+ "rcmd_reason": "日本妹子坦露择偶标准,和你想象的一样吗?不过这和我又有什么关系呢_(:з」∠)_"
+ },
+ {
+ "aid": 48138432,
+ "videos": 1,
+ "tid": 17,
+ "tname": "单机游戏",
+ "copyright": 1,
+ "pic": "http://i2.hdslb.com/bfs/archive/89baecb3461b6bfaa4a969c812282161a27ebc0d.jpg",
+ "title": "【老番茄】史上最骚杀手(第三集)",
+ "pubdate": 1554436829,
+ "ctime": 1554258253,
+ "desc": "第一集:av45629276 ; 第二集:av46295706\n如果收藏到4w会继续做下去的!\n这次请了好朋友Chimera君配音!没看过他视频的一定要去看一看!超级厉害!我特别崇拜的UP主!\nP.S.视频中对原剧情进行了部分改编。如:给女公关写情书的并非里科·戴尔加多,而是他的弟弟赫克托·戴尔加多。为了简化剧情,在视频中说成是里科所写。",
+ "state": 0,
+ "duration": 624,
+ "mission_id": 11225,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 546195,
+ "name": "老番茄",
+ "face": "http://i0.hdslb.com/bfs/face/bc5ca101313d4db223c395d64779e76eb3482d60.jpg"
+ },
+ "stat": {
+ "aid": 48138432,
+ "view": 19624690,
+ "danmaku": 58471,
+ "reply": 8593,
+ "favorite": 453185,
+ "coin": 1213654,
+ "share": 26329,
+ "now_rank": 0,
+ "his_rank": 1,
+ "like": 1232305,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 19624690
+ },
+ "dynamic": "这个杀手真的太骚了!",
+ "cid": 84597412,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "season_id": 14014,
+ "short_link_v2": "https://b23.tv/BV1Nb411W7uN",
+ "cover43": "",
+ "bvid": "BV1Nb411W7uN",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "enable_vt": 0,
+ "ai_rcmd": null,
+ "rcmd_reason": "职业杀手(雾)大光头这次来到了哥伦比亚村庄,他会以怎样奇葩的方式达成目标呢?"
+ },
+ {
+ "aid": 48871442,
+ "videos": 1,
+ "tid": 182,
+ "tname": "影视杂谈",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/c917f4d21543461dcffe0230e0614abef4b54483.jpg",
+ "title": "DC超强反英雄「黑亚当」科普,《雷霆沙赞2》反派就是他了!",
+ "pubdate": 1554890417,
+ "ctime": 1554890426,
+ "desc": "DC超强反英雄「黑亚当」科普,《雷霆沙赞2》反派就是他了!",
+ "state": 0,
+ "duration": 435,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 7487399,
+ "name": "努力的Lorre",
+ "face": "http://i2.hdslb.com/bfs/face/c63ebeed7d49967e2348ef953b539f8de90c5140.jpg"
+ },
+ "stat": {
+ "aid": 48871442,
+ "view": 1694250,
+ "danmaku": 2799,
+ "reply": 1588,
+ "favorite": 7199,
+ "coin": 15416,
+ "share": 1089,
+ "now_rank": 0,
+ "his_rank": 18,
+ "like": 49430,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 1694250
+ },
+ "dynamic": "DC超强反英雄「黑亚当」科普,《雷霆沙赞2》反派就是他了!",
+ "cid": 85584748,
+ "dimension": {
+ "width": 1920,
+ "height": 1072,
+ "rotate": 0
+ },
+ "short_link_v2": "https://b23.tv/BV1wb411M73A",
+ "cover43": "",
+ "bvid": "BV1wb411M73A",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "enable_vt": 0,
+ "ai_rcmd": null,
+ "rcmd_reason": "看完《沙赞》是不是还有些意犹未尽?来了解一下DC漫画中的真反派吧。"
+ }
+ ]
+ }
+}
+```
+
+
diff --git a/docs/video_ranking/precious_videos.md b/docs/video_ranking/precious_videos.md
new file mode 100644
index 0000000..343b953
--- /dev/null
+++ b/docs/video_ranking/precious_videos.md
@@ -0,0 +1,127 @@
+# 入站必刷视频
+
+## 获取入站必刷视频
+
+> https://api.bilibili.com/x/web-interface/popular/precious
+
+*请求方式:GET*
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | array | 视频列表 | |
+
+`data` 字段:
+
+| 字段 | 类型 | 内容 | 备注 |
+| - | - | - | - |
+| title | str | 标题 | 入站必刷 |
+| media_id | num | media_id | |
+| explain | str | 解释(概括)| 我不允许还有人没看过这??个宝藏视频! |
+| list | array | 列表 | |
+
+`data`中的`list`数组中的对象:
+
+基本同[获取视频详细信息(web端)](../video/info.md#获取视频详细信息web端)中的data对象
+
+**示例:**
+
+``` shell
+curl -G 'https://api.bilibili.com/x/web-interface/popular/precious'
+```
+
+
+查看响应示例:
+
+```jsonc
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "title": "入站必刷",
+ "media_id": 496307088,
+ "explain": "我不允许还有人没看过这98个宝藏视频!",
+ "list": [
+ // ...
+ {
+ "aid": 706,
+ "videos": 1,
+ "tid": 47,
+ "tname": "同人·手书",
+ "copyright": 2,
+ "pic": "http://i1.hdslb.com/bfs/archive/753453a776fca838165a52c7511e8557857b61ea.jpg",
+ "title": "【東方】Bad Apple!! PV【影絵】",
+ "pubdate": 1256995125,
+ "ctime": 1497344829,
+ "desc": "sm8628149 2011/9/25追记:大家如果看到空耳字幕请果断举报,净化弹幕环境,你我有责,感谢。",
+ "state": 0,
+ "duration": 219,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 37,
+ "name": "折射",
+ "face": "http://i1.hdslb.com/bfs/face/49d19d3d9cc4b3938128cacd650859ac612156a1.gif"
+ },
+ "stat": {
+ "aid": 706,
+ "view": 11329388,
+ "danmaku": 82247,
+ "reply": 544932,
+ "favorite": 502984,
+ "coin": 195079,
+ "share": 95877,
+ "now_rank": 0,
+ "his_rank": 88,
+ "like": 480388,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 11329388
+ },
+ "dynamic": "",
+ "cid": 3724723,
+ "dimension": {
+ "width": 480,
+ "height": 360,
+ "rotate": 0
+ },
+ "season_id": 879555,
+ "short_link_v2": "https://b23.tv/BV1xx411c79H",
+ "cover43": "",
+ "bvid": "BV1xx411c79H",
+ "season_type": 0,
+ "is_ogv": false,
+ "ogv_info": null,
+ "rcmd_reason": "",
+ "enable_vt": 0,
+ "ai_rcmd": null,
+ "achievement": "东方project标志性视频"
+ },
+ // ...
+ ]
+ }
+}
+```
+
+
diff --git a/docs/video_ranking/ranking.md b/docs/video_ranking/ranking.md
new file mode 100644
index 0000000..f8f994f
--- /dev/null
+++ b/docs/video_ranking/ranking.md
@@ -0,0 +1,963 @@
+# 视频排行榜
+
+
+
+- [获取分区视频排行榜列表](#获取分区视频排行榜列表)
+
+---
+
+## 获取分区视频排行榜列表
+
+> https://api.bilibili.com/x/web-interface/ranking/v2
+
+*请求方式:GET*
+
+鉴权方式: 请求头 `User-Agent` 非敏感字符串
+
+获取稿件内容质量,近期的数据前100个稿件,动态更新。
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------ | ------ | ------------ | ------ | ------------------------------------- |
+| rid | number | 目标分区 tid | 非必要 | 默认为 0 (全站), 详细参见 [视频分区一览](../video/video_zone.md#视频分区一览), 仅支持主分区 |
+| type | string | 排行榜类型 | 非必要 | 全部: all 新人: rokkie 原创: origin |
+| web_location | string | 333.934 | 非必要 | |
+| w_rid | string | WBI 签名 | 非必要 | 参见 [WBI 签名](../misc/sign/wbi.md) |
+| wts | number | Unix 时间戳 | 非必要 | 参见 [WBI 签名](../misc/sign/wbi.md) |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ----- | -------- | --------------------------- |
+| code | num | 返回值 | 0:成功 -400:请求错误 |
+| message | str | 错误信息 | 默认为0 |
+| ttl | num | 1 | |
+| data | array | 视频列表 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| --- | --- | --- | --- |
+| note | str | “根据稿件内容质量、近期的数据综合展示,动态更新” | 目前恒为此结果 |
+| list | list | 视频列表 | 暂无 |
+
+`list`列表:
+
+| 项 | 类型 | 内容 | 备注 |
+| --- | ---- | --------------- | ---- |
+| 0 | obj | 排行榜第1名 | |
+| n | obj | 排行榜第(n+1)名 | |
+| …… | obj | …… | …… |
+| 99 | obj | 排行榜第100名 | |
+
+`data`列表中的对象:
+
+可参考[获取视频详细信息(web端)](../video/info.md#获取视频详细信息(web端))中的data对象。本API对象中所有字段,均可在链接对象中找到。
+
+**示例:**
+
+获取`tid=1`(动画)分区中所有稿件排行榜排行榜
+
+```shell
+curl -G 'https://api.bilibili.com/x/web-interface/ranking/v2' \
+--data-urlencode 'tid=1' \
+--data-urlencode 'type=all'
+```
+
+
+因本API返回对象过多(100个),故不全部展示,使用者可自行尝试。查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "note": "根据稿件内容质量、近期的数据综合展示,动态更新",
+ "list": [
+ {
+ "aid": 517751921,
+ "videos": 1,
+ "tid": 253,
+ "tname": "动漫杂谈",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/c70d89ce459eb4a501885f7050ee37d94a5944e4.jpg",
+ "title": "神作之月!十年前的奇迹!新番时光机「2012年10月篇」",
+ "pubdate": 1668856639,
+ "ctime": 1668856639,
+ "desc": "新番时光机,回顾十年前的动画!本期为2012年10月\n\n往期:\nBV1Br4y1y7ri\nBV1Ly4y1s7wp\nBV16r4y1A7w4\nBV1c64y1f7ff\nBV1sA411A7JD\nBV1wT4y1D729\nBV1mR4y1A7Ey\nBV1gB4y1V7sz",
+ "state": 0,
+ "duration": 752,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 63231,
+ "name": "泛式",
+ "face": "https://i0.hdslb.com/bfs/face/2608aaa45309c77ac88fbfaa40e160b8c7892985.jpg"
+ },
+ "stat": {
+ "aid": 517751921,
+ "view": 1156543,
+ "danmaku": 14224,
+ "reply": 5601,
+ "favorite": 28753,
+ "coin": 58324,
+ "share": 6548,
+ "now_rank": 0,
+ "his_rank": 11,
+ "like": 136884,
+ "dislike": 0
+ },
+ "dynamic": "泛式队长,时光机更新!",
+ "cid": 896512490,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "season_id": 21183,
+ "short_link": "https://b23.tv/BV1Eg411v7a1",
+ "short_link_v2": "https://b23.tv/BV1Eg411v7a1",
+ "first_frame": "http://i2.hdslb.com/bfs/storyff/n221119a29spw3xihz66g3aeuae34t8i_firsti.jpg",
+ "pub_location": "上海",
+ "bvid": "BV1Eg411v7a1",
+ "score": 0
+ },
+ {
+ "aid": 987795979,
+ "videos": 1,
+ "tid": 27,
+ "tname": "综合",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/6045782867b5dd91196d93324028f3346eed663a.jpg",
+ "title": "看海贼的和看火影的都沉默了......",
+ "pubdate": 1668830400,
+ "ctime": 1668780416,
+ "desc": "这一期我把之前十多期的火影加海贼王的内容做了个合集,把做得还可以的片段浓缩成这3分钟,有部分重制了,下一次这类型的视频等着绿牛和尼卡路飞出场,在做多一期—。—感觉还可以的话就给我个三连……或者一个免费的赞,谢谢了",
+ "state": 0,
+ "duration": 196,
+ "mission_id": 1074046,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 601674546,
+ "name": "-夏秋冬-",
+ "face": "https://i0.hdslb.com/bfs/face/83b4dd8830c24ee73fbc59f0bd974ea37b0a9470.jpg"
+ },
+ "stat": {
+ "aid": 987795979,
+ "view": 2098359,
+ "danmaku": 3460,
+ "reply": 2393,
+ "favorite": 33358,
+ "coin": 54977,
+ "share": 45656,
+ "now_rank": 0,
+ "his_rank": 15,
+ "like": 116834,
+ "dislike": 0
+ },
+ "dynamic": "",
+ "cid": 895657562,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link": "https://b23.tv/BV1D44y1Q7im",
+ "short_link_v2": "https://b23.tv/BV1D44y1Q7im",
+ "first_frame": "http://i2.hdslb.com/bfs/storyff/n221118qn157llqyqytou2d6cypvute8_firsti.jpg",
+ "pub_location": "广东",
+ "bvid": "BV1D44y1Q7im",
+ "score": 0
+ },
+ {
+ "aid": 690264225,
+ "videos": 1,
+ "tid": 86,
+ "tname": "特摄",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/f1ff369250c5fa72106e32e3d7862740ba6a3ab9.jpg",
+ "title": "评分7.0!风评不佳?诚实吐槽特摄电影《新奥特曼》",
+ "pubdate": 1668860302,
+ "ctime": 1668860302,
+ "desc": "点个关注再走哦~",
+ "state": 0,
+ "duration": 832,
+ "mission_id": 1028236,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 730732,
+ "name": "瓶子君152",
+ "face": "https://i1.hdslb.com/bfs/face/951d0a41b33e0c73a0460d20ee83c4c62b0da45f.jpg"
+ },
+ "stat": {
+ "aid": 690264225,
+ "view": 1503667,
+ "danmaku": 4718,
+ "reply": 3816,
+ "favorite": 20847,
+ "coin": 49980,
+ "share": 4100,
+ "now_rank": 0,
+ "his_rank": 18,
+ "like": 131574,
+ "dislike": 0
+ },
+ "dynamic": "#动漫杂谈# #新奥特曼# \n新奥特曼这部电影终于也是借着在你B的推出全网首播\n我也终于是蹭到一回热度了\n这次电影其实评价十分的两极化,那么他究竟讲了什么,我又觉得他怎么样呢,答案就在视频中\n本期视频点赞10w投币4w后面做德凯完结吐槽",
+ "cid": 896556696,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link": "https://b23.tv/BV1S24y1y7yn",
+ "short_link_v2": "https://b23.tv/BV1S24y1y7yn",
+ "first_frame": "http://i0.hdslb.com/bfs/storyff/n221119a23dw30m9rx43073w439ptba1_firsti.jpg",
+ "pub_location": "上海",
+ "bvid": "BV1S24y1y7yn",
+ "score": 0
+ },
+ {
+ "aid": 690367853,
+ "videos": 1,
+ "tid": 47,
+ "tname": "短片·手书·配音",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/a79fc307134273460bcc2ebcf56569097dcf5537.jpg",
+ "title": "”B 站 用 户 精 神 现 状 Ⅱ “",
+ "pubdate": 1668829018,
+ "ctime": 1668829019,
+ "desc": "耶 熬夜之后\n准备看柯南去!\n希望这个视频能带给你快乐!\n☆··☆··☆··☆··☆··☆··☆··☆··☆··☆··☆\n\n文案/绘画/配音/剪辑:鸽一品 \n本节目基本保持1-2周1更!如果喜欢的话请一定要多多三连互动哦!\n\n平时我也会在直播间和大家互动发\n直播时间会在动态中发布周表 大概一周五播\n从0开始做V! 请多多支持!\n\n ☆··☆··☆··☆··☆··☆··☆··☆··☆··☆··☆\n\n感谢你的支持!鸽子也有自己贩售周边的桃宝店啦~\n一品鸽子窝:https://shop409788748.tao",
+ "state": 0,
+ "duration": 122,
+ "mission_id": 1074046,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 11399495,
+ "name": "鸽一品",
+ "face": "https://i2.hdslb.com/bfs/face/87f1fca837a16d6bbae552861454b45b1519301e.jpg"
+ },
+ "stat": {
+ "aid": 690367853,
+ "view": 1158451,
+ "danmaku": 2596,
+ "reply": 338,
+ "favorite": 11617,
+ "coin": 3685,
+ "share": 429,
+ "now_rank": 0,
+ "his_rank": 45,
+ "like": 132542,
+ "dislike": 0
+ },
+ "dynamic": "耶 熬夜之后\n准备看柯南去!\n希望这个视频能带给你快乐!",
+ "cid": 896076372,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "season_id": 174909,
+ "short_link": "https://b23.tv/BV1n24y117Zz",
+ "short_link_v2": "https://b23.tv/BV1n24y117Zz",
+ "first_frame": "http://i2.hdslb.com/bfs/storyff/n221119a23psu3qlqb6ssz3rae8wrk8s_firsti.jpg",
+ "pub_location": "浙江",
+ "bvid": "BV1n24y117Zz",
+ "score": 0
+ },
+ {
+ "aid": 605336408,
+ "videos": 1,
+ "tid": 47,
+ "tname": "短片·手书·配音",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/69ce5bd3ab899d2212e6dab962c8cfa7f41ad5af.jpg",
+ "title": "【封号斗罗】哔哩哔哩,来封我朋友的号呀!",
+ "pubdate": 1668830400,
+ "ctime": 1668823531,
+ "desc": "我好坏~\n\n后期 可大师 / 桥和你\n封号斗罗 CV 海盐奶糖白露\nBGM Girls Generation-Gee (Instrumental)",
+ "state": 0,
+ "duration": 64,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 1,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 20603745,
+ "name": "其人",
+ "face": "https://i0.hdslb.com/bfs/face/f5eb49deb5e87dde3f143c5d2d95d3338060ab93.jpg"
+ },
+ "stat": {
+ "aid": 605336408,
+ "view": 652606,
+ "danmaku": 1527,
+ "reply": 757,
+ "favorite": 17896,
+ "coin": 5787,
+ "share": 762,
+ "now_rank": 0,
+ "his_rank": 49,
+ "like": 118886,
+ "dislike": 0
+ },
+ "dynamic": "",
+ "cid": 895984408,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "season_id": 780987,
+ "short_link": "https://b23.tv/BV1u84y1C7w3",
+ "short_link_v2": "https://b23.tv/BV1u84y1C7w3",
+ "first_frame": "http://i2.hdslb.com/bfs/storyff/n221119a2tl68uyltrxucgeyufpd33gz_firsti.jpg",
+ "pub_location": "广东",
+ "bvid": "BV1u84y1C7w3",
+ "score": 0
+ },
+ {
+ "aid": 220294467,
+ "videos": 1,
+ "tid": 24,
+ "tname": "MAD·AMV",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/f18d4ecf7578e997d870f0aaf83a26e4fc379d2f.jpg",
+ "title": "【原神夜店风】深 夜 邂 逅~",
+ "pubdate": 1668827100,
+ "ctime": 1668770318,
+ "desc": "希望大家希望 做了蛮久的",
+ "state": 0,
+ "duration": 77,
+ "mission_id": 1060142,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 1,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 1542136,
+ "name": "三笠・阿克曼",
+ "face": "http://i1.hdslb.com/bfs/face/871d3db6a329d2b0e1a67c546301a65f9752d62a.jpg"
+ },
+ "stat": {
+ "aid": 220294467,
+ "view": 353464,
+ "danmaku": 594,
+ "reply": 474,
+ "favorite": 34617,
+ "coin": 11816,
+ "share": 2647,
+ "now_rank": 0,
+ "his_rank": 66,
+ "like": 88222,
+ "dislike": 0
+ },
+ "dynamic": "大的来了!#原神##MAD#",
+ "cid": 895467115,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "season_id": 330790,
+ "short_link": "https://b23.tv/BV1d8411j7xK",
+ "short_link_v2": "https://b23.tv/BV1d8411j7xK",
+ "first_frame": "http://i2.hdslb.com/bfs/storyff/n221118qntcb67e8mcic613b3frykpxn_firsti.jpg",
+ "pub_location": "陕西",
+ "bvid": "BV1d8411j7xK",
+ "score": 0
+ },
+ {
+ "aid": 562862605,
+ "videos": 1,
+ "tid": 47,
+ "tname": "短片·手书·配音",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/1cd7cb6cf45cdbd65b5b2cb85ac48bd045a110bf.jpg",
+ "title": "【孤独摇滚/手书】给波奇酱穿新衣服~",
+ "pubdate": 1668816600,
+ "ctime": 1668798123,
+ "desc": "小波奇那么漂亮!快给她买新衣服!!\n感谢原画姐姐们把波奇画得那么可爱!!!",
+ "state": 0,
+ "duration": 105,
+ "mission_id": 1074046,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 1,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 1992514,
+ "name": "纸欣Dream",
+ "face": "https://i1.hdslb.com/bfs/face/2c09ba55a475fafa1e82eff79869a9580774f1b0.jpg"
+ },
+ "stat": {
+ "aid": 562862605,
+ "view": 428030,
+ "danmaku": 793,
+ "reply": 854,
+ "favorite": 24869,
+ "coin": 25730,
+ "share": 6026,
+ "now_rank": 0,
+ "his_rank": 96,
+ "like": 48593,
+ "dislike": 0
+ },
+ "dynamic": "#孤独摇滚# 给波奇酱换新衣服!!",
+ "cid": 896737541,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link": "https://b23.tv/BV1fv4y117Qh",
+ "short_link_v2": "https://b23.tv/BV1fv4y117Qh",
+ "first_frame": "http://i0.hdslb.com/bfs/storyff/n221119a2usulbe9u89fy3g0479v48y0_firsti.jpg",
+ "pub_location": "广东",
+ "bvid": "BV1fv4y117Qh",
+ "score": 0
+ },
+ {
+ "aid": 945304847,
+ "videos": 1,
+ "tid": 47,
+ "tname": "短片·手书·配音",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/76026f6a6d7698fcc5656fb2d7c151dcb4b4ea65.jpg",
+ "title": "【丧病中配】如果2077的CV来配音《赛博朋克:边缘行者》(第五话)",
+ "pubdate": 1668843300,
+ "ctime": 1668836610,
+ "desc": "本作品为剪辑二创,非商业用途仅供娱乐,喜欢的朋友欢迎去看完整版原片!\n有幸邀请到CV大佬们一起配《赛博朋克:边缘行者》玩,希望大家喜欢。本视频点赞过5万,继续更新第六话,谢谢大家的支持啦!\nCAST:\n大卫:@刘照坤Jock \n露西:CV张琦@Kii崽 \n曼恩:嘟督\n吉米黑咲:@配音演员虞晓旭 \n琦薇:@楼倾司 \n多莉欧:CV张琦@Kii崽 \n田中:@黑石稔 \n校长:@黑石稔 \n葛洛莉亚:CV张琦@Kii崽 \nNCPD(全):@是没有风的内个无风吖 \n义体医生:嘟督\n夹暴机动队:@菇力",
+ "state": 0,
+ "duration": 1034,
+ "mission_id": 1089377,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 1,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 2403047,
+ "name": "嘟督不噶油",
+ "face": "https://i2.hdslb.com/bfs/face/74738ef7c1ff743959908029b4c9d2dd8b5827c6.jpg"
+ },
+ "stat": {
+ "aid": 945304847,
+ "view": 397714,
+ "danmaku": 2559,
+ "reply": 1513,
+ "favorite": 16296,
+ "coin": 39497,
+ "share": 3686,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 54893,
+ "dislike": 0
+ },
+ "dynamic": "久等了!丧病中配《赛博朋克:边缘行者》第五话参上!做个好梦,大卫~",
+ "cid": 896151792,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "season_id": 751347,
+ "short_link": "https://b23.tv/BV1gW4y1W7f4",
+ "short_link_v2": "https://b23.tv/BV1gW4y1W7f4",
+ "first_frame": "http://i0.hdslb.com/bfs/storyff/n221119a23injccl1ujog874rrzkgjbq_firsti.jpg",
+ "pub_location": "上海",
+ "bvid": "BV1gW4y1W7f4",
+ "score": 0
+ },
+ {
+ "aid": 432692681,
+ "videos": 1,
+ "tid": 47,
+ "tname": "短片·手书·配音",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/13b14a9003bd55b842e3d956f951719e37d4698d.jpg",
+ "title": "✨踏入白色殿堂,你选择谁?✨",
+ "pubdate": 1668679200,
+ "ctime": 1668669686,
+ "desc": "听说国内人均白毛控?\n小狐兔粉毛MEME指路:BV17B4y1J7vW\nBGM:Di Young-Pixel Pig",
+ "state": 0,
+ "duration": 45,
+ "mission_id": 1074046,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 1118188465,
+ "name": "在下小狐兔",
+ "face": "https://i1.hdslb.com/bfs/face/182be1a72202ae348f9d39f047d7b13e32798f80.jpg"
+ },
+ "stat": {
+ "aid": 432692681,
+ "view": 1167712,
+ "danmaku": 3754,
+ "reply": 2080,
+ "favorite": 88688,
+ "coin": 53575,
+ "share": 5869,
+ "now_rank": 0,
+ "his_rank": 5,
+ "like": 170078,
+ "dislike": 0
+ },
+ "dynamic": "染头白毛,直接少走60年弯路~",
+ "cid": 894207559,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "season_id": 73722,
+ "short_link": "https://b23.tv/BV1oG411F7B9",
+ "short_link_v2": "https://b23.tv/BV1oG411F7B9",
+ "first_frame": "http://i0.hdslb.com/bfs/storyff/n221117a2a2f8je8qiu2724qkdbgwjch_firsti.jpg",
+ "pub_location": "浙江",
+ "bvid": "BV1oG411F7B9",
+ "score": 0
+ },
+ {
+ "aid": 262671873,
+ "videos": 1,
+ "tid": 47,
+ "tname": "短片·手书·配音",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/0d03863e63cc426bbc579bcb54433e3c2f412686.jpg",
+ "title": "《不做》",
+ "pubdate": 1668598143,
+ "ctime": 1668598143,
+ "desc": "咸鱼日常",
+ "state": 0,
+ "duration": 40,
+ "mission_id": 1074046,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 0,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 357538100,
+ "name": "懒小熊_LXX",
+ "face": "https://i2.hdslb.com/bfs/face/7cc145cb9831c319f4a20dc560915478561110a8.jpg"
+ },
+ "stat": {
+ "aid": 262671873,
+ "view": 1682548,
+ "danmaku": 384,
+ "reply": 1984,
+ "favorite": 51955,
+ "coin": 21220,
+ "share": 49865,
+ "now_rank": 0,
+ "his_rank": 11,
+ "like": 231688,
+ "dislike": 0
+ },
+ "dynamic": "",
+ "cid": 893540811,
+ "dimension": {
+ "width": 1440,
+ "height": 1080,
+ "rotate": 0
+ },
+ "short_link": "https://b23.tv/BV1RY411d7Sp",
+ "short_link_v2": "https://b23.tv/BV1RY411d7Sp",
+ "up_from_v2": 8,
+ "first_frame": "http://i1.hdslb.com/bfs/storyff/n221116a2qu5s05btpwu93sv0xig9hx5_firsti.jpg",
+ "pub_location": "湖南",
+ "bvid": "BV1RY411d7Sp",
+ "score": 0
+ },
+ {
+ "aid": 432645631,
+ "videos": 1,
+ "tid": 253,
+ "tname": "动漫杂谈",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/976382dd53576cc1af0926a31103e5d179cd26b3.jpg",
+ "title": "童年引爆全国的动画!《小鲤鱼》的最终结局和剧情究竟是什么?【拾荒记#29】",
+ "pubdate": 1668741505,
+ "ctime": 1668741505,
+ "desc": "相关动画:《小鲤鱼历险记》\n关于拾荒记这个栏目,我将在这个系列节目和大家一起在记忆的杂物堆里翻点什么出来\n\n大家还有什么想看我解读的,欢迎在评论区指出,说不定我下期就做了呢",
+ "state": 0,
+ "duration": 1945,
+ "mission_id": 993288,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 3078223,
+ "name": "野灿baka",
+ "face": "https://i1.hdslb.com/bfs/face/db80dbe62245bd35b32c293670190bf8ccd47975.jpg"
+ },
+ "stat": {
+ "aid": 432645631,
+ "view": 1901441,
+ "danmaku": 14422,
+ "reply": 2815,
+ "favorite": 20903,
+ "coin": 26252,
+ "share": 6618,
+ "now_rank": 0,
+ "his_rank": 39,
+ "like": 97232,
+ "dislike": 0
+ },
+ "dynamic": "这期下饭很足,做了一个月呢,看个饱!",
+ "cid": 895004016,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "season_id": 210289,
+ "short_link": "https://b23.tv/BV19G411F7iz",
+ "short_link_v2": "https://b23.tv/BV19G411F7iz",
+ "first_frame": "http://i0.hdslb.com/bfs/storyff/n221118a23ee03atvk7k4525jkiqwvxo_firsti.jpg",
+ "pub_location": "广西",
+ "bvid": "BV19G411F7iz",
+ "score": 0
+ },
+ {
+ "aid": 732840638,
+ "videos": 1,
+ "tid": 24,
+ "tname": "MAD·AMV",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/5bf52f12ed2eb3d3576f6eb4931e82a4f0aec9ce.jpg",
+ "title": "“ 现 在 开 始 ,电 锯 人 也 要 起 飞 了 ”",
+ "pubdate": 1668826313,
+ "ctime": 1668826313,
+ "desc": "是我低估了特效向MAD的难度,这次做了快一个月才做好(大概是累到很久都不想剪mad的程度。。)\n灵感来自林逸大佬的MAD视频\nbgm:16shots\n这次真的花费巨多心思,希望大家多多三连哇",
+ "state": 0,
+ "duration": 121,
+ "mission_id": 1074046,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 13458092,
+ "name": "笔龙XDDD",
+ "face": "https://i2.hdslb.com/bfs/face/fda9b8f0fb9d42c3ed90190b49b7478c87684078.jpg"
+ },
+ "stat": {
+ "aid": 732840638,
+ "view": 456933,
+ "danmaku": 474,
+ "reply": 497,
+ "favorite": 16240,
+ "coin": 20333,
+ "share": 2288,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 42301,
+ "dislike": 0
+ },
+ "dynamic": "叩",
+ "cid": 896032916,
+ "dimension": {
+ "width": 1920,
+ "height": 1080,
+ "rotate": 0
+ },
+ "season_id": 861825,
+ "short_link": "https://b23.tv/BV1hD4y1s7fJ",
+ "short_link_v2": "https://b23.tv/BV1hD4y1s7fJ",
+ "first_frame": "http://i0.hdslb.com/bfs/storyff/n221119a23flpz3l68ol27195z5warrj_firsti.jpg",
+ "pub_location": "浙江",
+ "bvid": "BV1hD4y1s7fJ",
+ "score": 0
+ },
+ {
+ "aid": 520311091,
+ "videos": 1,
+ "tid": 25,
+ "tname": "MMD·3D",
+ "copyright": 1,
+ "pic": "http://i0.hdslb.com/bfs/archive/0b15fe71c25d0c226a96a4ef253cfb946dda3a15.jpg",
+ "title": "万叶:哥把你揣兜里,你把哥踹沟里",
+ "pubdate": 1668871911,
+ "ctime": 1668871911,
+ "desc": "模型:米哈游/观海子\n渲染:小二今天吃啥啊、克里斯提亚娜\n动作/镜头:CME6大神犬\n原声:伤心欲茄",
+ "state": 0,
+ "duration": 16,
+ "mission_id": 1060142,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 1,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 403425503,
+ "name": "甜甜草酿鸡",
+ "face": "https://i2.hdslb.com/bfs/face/66eb2201458e7bf1875c6a1da629cf1c887e30fd.jpg"
+ },
+ "stat": {
+ "aid": 520311091,
+ "view": 401135,
+ "danmaku": 206,
+ "reply": 597,
+ "favorite": 15559,
+ "coin": 2623,
+ "share": 12448,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 64094,
+ "dislike": 0
+ },
+ "dynamic": "",
+ "cid": 896780848,
+ "dimension": {
+ "width": 1080,
+ "height": 1920,
+ "rotate": 0
+ },
+ "short_link": "https://b23.tv/BV1hM411C7ez",
+ "short_link_v2": "https://b23.tv/BV1hM411C7ez",
+ "up_from_v2": 35,
+ "first_frame": "http://i0.hdslb.com/bfs/storyff/n221119a213u50mtr1xje1pmh9ufufp1_firsti.jpg",
+ "pub_location": "广东",
+ "bvid": "BV1hM411C7ez",
+ "score": 0
+ },
+ {
+ "aid": 775289285,
+ "videos": 1,
+ "tid": 210,
+ "tname": "手办·模玩",
+ "copyright": 1,
+ "pic": "http://i1.hdslb.com/bfs/archive/8defd33e5c2dd860ecb46dfef3445aad14a1f7fa.jpg",
+ "title": "“最帅最强”的“究极体”?万代 MGEX 强袭自由高达 拼装模型【评头论足】",
+ "pubdate": 1668830154,
+ "ctime": 1668830154,
+ "desc": "大家喜欢视频的话多多点赞关注投币哦~\n《评头论足》主要以第一人称的方式去介绍最新上市的模玩产品,给人以把玩在手中最真实的直观感受,为广大模型爱好者选购模型玩具产品提供方便。合作油箱 pinggaoda@qq.com",
+ "state": 0,
+ "duration": 1120,
+ "mission_id": 1080009,
+ "rights": {
+ "bp": 0,
+ "elec": 0,
+ "download": 0,
+ "movie": 0,
+ "pay": 0,
+ "hd5": 0,
+ "no_reprint": 1,
+ "autoplay": 1,
+ "ugc_pay": 0,
+ "is_cooperation": 0,
+ "ugc_pay_preview": 0,
+ "no_background": 0,
+ "arc_pay": 0,
+ "pay_free_watch": 0
+ },
+ "owner": {
+ "mid": 2029306,
+ "name": "-评头论足-",
+ "face": "https://i1.hdslb.com/bfs/face/c20b5d1f044448ff2c5f4dbafc5dc464fdcdbca5.jpg"
+ },
+ "stat": {
+ "aid": 775289285,
+ "view": 422301,
+ "danmaku": 12251,
+ "reply": 4824,
+ "favorite": 11219,
+ "coin": 26475,
+ "share": 10777,
+ "now_rank": 0,
+ "his_rank": 0,
+ "like": 37206,
+ "dislike": 0
+ },
+ "dynamic": "年度关注度超高的MGEX强袭自由,他来了!",
+ "cid": 896057755,
+ "dimension": {
+ "width": 3840,
+ "height": 2160,
+ "rotate": 0
+ },
+ "season_id": 573806,
+ "short_link": "https://b23.tv/BV1h14y1H7Ls",
+ "short_link_v2": "https://b23.tv/BV1h14y1H7Ls",
+ "first_frame": "http://i2.hdslb.com/bfs/storyff/n221119a21mwd5z96o6l7q1tg8gqhh6m_firsti.jpg",
+ "pub_location": "辽宁",
+ "bvid": "BV1h14y1H7Ls",
+ "score": 0
+ },
+ ]
+ }
+}
+```
+
+
diff --git a/docs/vip/action.md b/docs/vip/action.md
new file mode 100644
index 0000000..b90377d
--- /dev/null
+++ b/docs/vip/action.md
@@ -0,0 +1,121 @@
+# 大会员操作
+
+## 兑换卡券
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie (SESSDATA)
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------------------- | ------ | ------------------------------------------------------------------------------------ |
+| type | num | 兑换类型 | 必要 | 1:B币券 2:会员购优惠券 3:漫画福利券 4:会员购包邮券 5:漫画商城优惠券 6:装扮体验卡 7:课堂优惠券 |
+| csrf | str | CSRF Token (位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf 校验失败 -400:请求错误 69800:网络繁忙 请稍后再试 69801:你已领取过该权益 |
+| message | str | 错误信息 | 成功时为`0` |
+| ttl | num | 1 | |
+
+**示例:**
+
+```shell
+curl 'https://api.bilibili.com/x/vip/privilege/receive' \
+ -b 'SESSDATA=xxx' \
+ --data-urlencode 'type=1' \
+ --data-urlencode 'csrf=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1
+}
+```
+
+
+
+## 大会员每日经验
+
+>
+
+*请求方式:POST*
+
+认证方式:Cookie (SESSDATA)
+
+**正文参数 (application/x-www-form-urlencoded):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | ----------------------- | ------ | ---- |
+| csrf | str | CSRF Token (位于cookie) | 必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---------------------------------------------------------------------------------------------- |
+| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf 校验失败 69198:用户经验已经领取 6034007:请求频繁,请稍后再试 |
+| message | str | 错误信息 | 成功时为`0` |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ------------ | ---------------- |
+| type | num | 0 | **作用尚不明确** |
+| is_grant | bool | 是否领取成功 | |
+
+**示例:**
+
+```shell
+curl 'https://api.bilibili.com/x/vip/experience/add' \
+ -b 'SESSDATA=xxx' \
+ --data-urlencode 'csrf=xxx'
+```
+
+
+查看响应示例:
+
+当经验领取成功时:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "type": 0,
+ "is_grant": true
+ }
+}
+```
+
+当经验已经领取过时:
+
+```json
+{
+ "code": 69198,
+ "message": "用户经验已经领取",
+ "ttl": 1,
+ "data": {
+ "type": 0,
+ "is_grant": false
+ }
+}
+```
+
+
diff --git a/docs/vip/center.md b/docs/vip/center.md
new file mode 100644
index 0000000..7477dac
--- /dev/null
+++ b/docs/vip/center.md
@@ -0,0 +1,2070 @@
+# 大会员中心
+
+## 大会员中心信息
+
+> https://api.bilibili.com/x/vip/web/vip_center/combine
+
+*请求方式:GET*
+
+认证方式:Cookie (SESSDATA) / access_key
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------ | ----------- | ------------------------------------ |
+| access_key | str | APP登录Token | APP方式必要 | |
+| platform | str | 平台表示 | 非必要 | web端:`web` 安卓APP:`android` |
+| mobi_app | str | APP 名称 | 非必要 | 安卓APP:`android` |
+| build | num | 构建 id | 非必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------- |
+| code | num | 响应码 | 0:成功 -101:账号未登录 |
+| message | str | 0 | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| ------------------ | ------------------------------- | -------------------- | ---------------------------------------------- |
+| user | obj | 用户信息 | |
+| wallet | obj | 钱包信息 | |
+| union_vip | web 端:null APP 端:array | 联合会员信息列表 | |
+| other_open_info | web 端:null APP 端:array | 其他开通方式信息列表 | |
+| privileges | array | 会员特权信息列表 | |
+| banners | array | banner 卡片列表 | web 端为空 |
+| welfare | obj | 福利信息 | |
+| recommend_pendants | obj | 推荐头像框信息 | |
+| recommend_cards | obj | 推荐装扮信息 | |
+| sort | array | | |
+| in_review | bool | | |
+| big_point | obj | 大积分信息 | 详细 API 参考[大积分中心信息](#大积分中心信息) |
+| hot_list | obj | 热门榜单类型信息 | |
+
+`data`中的`user`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| ---------------------- | ---- | ---------------------- | ----------------------- |
+| account | obj | 账号基本信息 | |
+| vip | obj | 账号会员信息 | |
+| tv | obj | 电视会员信息 | |
+| background_image_small | str | 空 | |
+| background_image_big | str | 空 | |
+| panel_title | str | 用户昵称 | |
+| avatar_pendant | obj | 用户头像框信息 | |
+| vip_overdue_explain | str | 大会员提示文案 | 有效期 / 到期 |
+| tv_overdue_explain | str | 电视大会员提示文案 | 有效期 / 到期 |
+| account_exception_text | str | 空 | |
+| is_auto_renew | bool | 是否自动续费 | true:是 false:否 |
+| is_tv_auto_renew | bool | 是否自动续费电视大会员 | true:是 false:否 |
+| surplus_seconds | num | 大会员到期剩余时间 | 单位为秒 |
+| vip_keep_time | num | 持续开通大会员时间 | 单位为秒 |
+| renew | obj | (?) | |
+| notice | obj | (?) | |
+
+`user`中的`account`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| ---------------- | ---- | ------------ | -------------------------- |
+| mid | num | 用户 mid | |
+| name | str | 昵称 | |
+| sex | str | 性别 | 男 / 女 / 保密 |
+| face | str | 头像 url | |
+| sign | str | 签名 | |
+| rank | num | 等级 | |
+| birthday | num | 生日 | 秒时间戳 |
+| is_fake_account | num | (?) | |
+| is_deleted | num | 是否注销 | 0:正常 1:注销 |
+| in_reg_audit | num | 是否注册审核 | 0:正常 1:审核 |
+| is_senior_member | num | 是否转正 | 0:未转正 1:正式会员 |
+
+`user`中的`vip`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------- | ---- | ---------------- | ------------------------------------------------------------ |
+| mid | num | 用户 mid | |
+| vip_type | num | 会员类型 | 0:无 1:月大会员 2:年度及以上大会员 |
+| vip_status | num | 会员状态 | 0:无 1:有 |
+| vip_due_date | num | 会员过期时间 | 毫秒时间戳 |
+| vip_pay_type | num | 支付类型 | 0:未支付(常见于官方账号) 1:已支付(以正常渠道获取的大会员均为此值) |
+| theme_type | num | (?) | |
+| label | obj | 会员标签 | |
+| avatar_subscript | num | 是否显示会员图标 | 0:不显示 1:显示 |
+| nickname_color | str | 会员昵称颜色 | 颜色码,一般为`#FB7299`,曾用于愚人节改变大会员配色 |
+| is_new_user | bool | (?) | |
+| tip_material | null | (?) | |
+
+`vip`中的`label`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------------- | ---- | ---------------- | ------------------------------------------------------------ |
+| text | str | 会员类型文案 | `大会员` `年度大会员` `十年大会员` `百年大会员` `最强绿鲤鱼` |
+| label_theme | str | 会员标签 | vip:大会员 annual_vip:年度大会员 ten_annual_vip:十年大会员 hundred_annual_vip:百年大会员 fools_day_hundred_annual_vip:最强绿鲤鱼 |
+| text_color | str | 会员标签文本颜色 | |
+| bg_style | num | 1 | |
+| bg_color | str | 会员标签背景颜色 | 颜色码,一般为`#FB7299`,曾用于愚人节改变大会员配色 |
+| border_color | str | 会员标签边框颜色 | 未使用 |
+| use_img_label | bool | `true` | |
+| img_label_uri_hans | str | 空 | |
+| img_label_uri_hant | str | 空 | |
+| img_label_uri_hans_static | str | 大会员牌子图片 | 简体版 |
+| img_label_uri_hant_static | str | 大会员牌子图片 | 繁体版 |
+
+`user`中的`tv`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ------------------ | ------------------------------------------------------------ |
+| type | num | 电视大会员类型 | 0:无 1:月大会员 2:年度及以上大会员 |
+| vip_pay_type | num | 电视大支付类型 | 0:未支付(常见于官方账号) 1:已支付(以正常渠道获取的大会员均为此值) |
+| status | num | 电视大会员状态 | 0:无 1:有 |
+| due_date | num | 电视大会员过期时间 | 毫秒时间戳 |
+
+`user`中的`avatar_pendant`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------- | ---- | ---------------------- | ------ |
+| image | str | 头像框 url | |
+| image_enhance | str | 头像框 url | 动态图 |
+| image_enhance_frame | str | 动态头像框帧波普版 url | |
+
+`user`中的`renew`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| text | str | (?) | |
+| link | str | (?) | |
+
+`user`中的`notice`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------ | ---- | ---- | ---- |
+| text | str | (?) | |
+| tv_text | str | (?) | |
+| type | num | (?) | |
+| can_close | bool | (?) | |
+| surplus_seconds | num | (?) | |
+| tv_surplus_seconds | num | (?) | |
+
+`data`中的`wallet`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------------ | ---- | ----------- | ---- |
+| coupon | num | 当前 B 币券 | |
+| point | num | (?) | |
+| privilege_received | bool | (?) | |
+
+`data`中的`union_vip`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---------------- | ------------------- |
+| 0 | obj | 联合会员项 1 | 仅 APP 端存在该信息 |
+| n | obj | 联合会员项 (n+1) | |
+| …… | obj | …… | …… |
+
+`union_vip`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ------------------ | ---- |
+| image_2x | str | 联合会员图片小 url | |
+| image_3x | str | 联合会员图片大 url | |
+| title | str | 联合会员名称 | |
+| link | str | 联合会员开通页 url | |
+| sort | num | 排列顺序 | |
+
+`data`中的`other_open_info`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------------- | ------------------- |
+| 0 | obj | 其他开通方式项 1 | 仅 APP 端存在该信息 |
+| n | obj | 其他开通方式项 (n+1) | |
+| …… | obj | …… | …… |
+
+`other_open_info`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ---------------------- | ---- |
+| title | str | 其他开通方式名称 | |
+| url | str | 其他开通方式开通页 url | |
+| icon_url | str | 其他开通方式图标 url | |
+| desc | str | 提示文案 | |
+| sort | num | 排列顺序 | |
+
+`data`中的`privileges`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ---- |
+| 0 | obj | 特权父类 1 | |
+| n | obj | 特权父类 (n+1) | |
+| …… | obj | …… | …… |
+
+`other_open_info`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------- | ----- | ------------ | ---- |
+| id | num | 特权父类 id | |
+| name | str | 类型名称 | |
+| child_privileges | array | 特权子类列表 | |
+
+`other_open_info`数组中的对象中的`child_privileges`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ---- |
+| 0 | obj | 特权子类 1 | |
+| n | obj | 特权子类 (n+1) | |
+| …… | obj | …… | …… |
+
+`child_privileges`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------------------- | ---- | -------------------- | ---------------------------- |
+| first_id | num | 特权父类 id | |
+| report_id | str | 上报 id | 该特权的代号? |
+| name | str | 特权名称 | |
+| desc | str | 特权简介文案 | |
+| explain | str | 特权介绍正文 | |
+| icon_url | str | 特权图标 url | |
+| icon_gray_url | str | 特权图标灰色主题 url | 某些项目无此字段 |
+| background_image_url | str | 背景图片 url | |
+| link | str | 特权介绍页 url | |
+| image_url | str | 特权示例图 url | |
+| type | num | 类型? | 目前为`0` |
+| hot_type | num | 是否热门特权 | 0:普通特权 1:热门特权 |
+| new_type | num | 是否新特权 | 0:普通特权 1:新特权 |
+| id | num | 特权子类 id | |
+
+`data`中的`banners`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------------- | ------------------- |
+| 0 | obj | banner 项目 1 | 仅 APP 端存在该信息 |
+| n | obj | banner 项目 (n+1) | |
+| …… | obj | …… | …… |
+
+`banners`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | --------------------- | ---- |
+| id | num | banner 卡片 id | |
+| index | num | banner 卡片排序 | |
+| image | str | banner 卡片图片 url | |
+| title | str | banner 卡片标题 | |
+| uri | str | banner 卡片跳转页 url | |
+| track_params | obj | 上报参数 | |
+
+`data`中的`welfare`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----- | ----- | ------------ | ---- |
+| count | num | 福利数 | |
+| list | array | 福利项目列表 | |
+
+`welfare`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ---- |
+| 0 | obj | 福利项目 1 | |
+| n | obj | 福利项目 (n+1) | |
+| …… | obj | …… | …… |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ------------------- | --------- |
+| id | num | 福利 id | |
+| name | str | 福利名称 | |
+| homepage_uri | str | 福利图片 url | |
+| backdrop_uri | str | 福利图片 banner url | |
+| tid | num | (?) | 目前为`0` |
+| rank | num | 排列顺序 | |
+| receive_uri | str | 福利跳转页 url | |
+
+`data`中的`recommend_pendants`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ----- | ---------------------- | ---- |
+| jump_url | str | 头像框商城页面跳转 url | |
+| list | array | 推荐头像框列表 | |
+
+`recommend_pendants`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---------------- | ---- |
+| 0 | obj | 推荐头像框 1 | |
+| n | obj | 推荐头像框 (n+1) | |
+| …… | obj | …… | …… |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | -------------- | ---- |
+| id | num | 头像框 id | |
+| name | str | 头像框名称 | |
+| image | str | 头像框图片 url | |
+| jump_url | str | 头像框页面 url | |
+
+`data`中的`recommend_cards`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ----- | ---------------------------- | ---- |
+| jump_url | str | 推荐个性装扮商城页面跳转 url | |
+| list | array | 推荐个性装扮列表 | |
+
+`recommend_cards`中的`list`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------------ | ---- |
+| 0 | obj | 推荐个性装扮 1 | |
+| n | obj | 推荐个性装扮 (n+1) | |
+| …… | obj | …… | …… |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -------- | ---- | ---------------- | ---- |
+| id | num | 个性装扮 id | |
+| name | str | 个性装扮名称 | |
+| image | str | 个性装扮图标 url | |
+| jump_url | str | 个性装扮页面 url | |
+
+`data`中的`sort`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------------- | ---- |
+| 0 | obj | 扩展 row 排序 1 | |
+| n | obj | 扩展 row 排序 (n+1) | |
+| …… | obj | …… | …… |
+
+`sort`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | --------------- | ---- |
+| key | str | 扩展 row 字段名 | |
+| sort | num | 排列顺序 | |
+
+`data`中的`big_point`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------- | ---- | -------------- | ---- |
+| point_info | obj | 点数信息 | |
+| sign_info | obj | 签到信息 | |
+| sku_info | obj | 大积分商品预览 | |
+| tips | bool | | |
+| point_switch_off | obj | | |
+
+`big_point`中的`point_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ------------------ | --------- |
+| point | num | 当前拥有大积分数量 | |
+| expire_point | num | 失效积分? | 目前为`0` |
+| expire_time | num | 失效时间? | 目前为`0` |
+| expire_days | num | 失效天数? | 目前为`0` |
+
+`big_point`中的`sign_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------------- | ---- | -------- | ---------- |
+| sign_remind | bool | (?) | |
+| benefit | num | 签到收益 | 单位为积分 |
+| bonus_benefit | num | (?) | |
+| normal_remind | bool | (?) | |
+| muggle_task | bool | (?) | |
+
+`big_point`中的`sku_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ----- | -------- | ---- |
+| skus | array | 套了个娃 | |
+
+`sku_info`中的`skus`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---------------- | ------------------------------------------------------------ |
+| 0 | obj | 大积分商品 1 | 对象定义同[大积分中心信息](#大积分中心信息),故略 |
+| n | obj | 大积分商品 (n+1) | 目前仅有 3 项 完成商品列表请求[大积分中心信息](#大积分中心信息)接口获得 |
+| …… | obj | …… | …… |
+
+`big_point`中的`hot_list`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ----- | -------- | ---- |
+| taps | array | 套了个娃 | |
+
+`hot_list`中的`taps`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ---- |
+| 0 | obj | 热门类型 1 | |
+| n | obj | 热门类型 (n+1) | |
+| …… | obj | …… | …… |
+
+`taps`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------- | ---- | -------- | --------- |
+| oid | str | 分类数据 | 类似 JSON |
+| rank_id | num | 分类 id | |
+| rank_title | str | 分类名称 | |
+
+**示例:**
+
+```shell
+curl -G 'https://api.bilibili.com/x/vip/web/vip_center/combine' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "user": {
+ "account": {
+ "mid": 293793435,
+ "name": "社会易姐QwQ",
+ "sex": "男",
+ "face": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg",
+ "sign": "BAC项目负责人 | 带砖技术宅 | MC 编程 电子 | 车万人\u0026术术人 | 粉丝群1136462265 博客shakaianee.top",
+ "rank": 10000,
+ "birthday": 1015257600,
+ "is_fake_account": 0,
+ "is_deleted": 0,
+ "in_reg_audit": 0,
+ "is_senior_member": 1
+ },
+ "vip": {
+ "mid": 293793435,
+ "vip_type": 2,
+ "vip_status": 1,
+ "vip_due_date": 1675785600000,
+ "vip_pay_type": 0,
+ "theme_type": 0,
+ "label": {
+ "text": "年度大会员",
+ "label_theme": "annual_vip",
+ "text_color": "#FFFFFF",
+ "bg_style": 1,
+ "bg_color": "#FB7299",
+ "border_color": "",
+ "use_img_label": true,
+ "img_label_uri_hans": "",
+ "img_label_uri_hant": "",
+ "img_label_uri_hans_static": "https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png",
+ "img_label_uri_hant_static": "https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png"
+ },
+ "avatar_subscript": 1,
+ "avatar_subscript_url": "https://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png",
+ "nickname_color": "#FB7299",
+ "is_new_user": false,
+ "tip_material": null
+ },
+ "tv": {
+ "type": 1,
+ "vip_pay_type": 0,
+ "status": 0,
+ "due_date": 1640793600000
+ },
+ "background_image_small": "",
+ "background_image_big": "",
+ "panel_title": "社会易姐QwQ",
+ "panel_sub_title": "",
+ "avatar_pendant": {
+ "image": "http://i0.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png",
+ "image_enhance": "http://i0.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp",
+ "image_enhance_frame": "http://i0.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png"
+ },
+ "vip_overdue_explain": "年度大会员有效期 2023/02/08",
+ "tv_overdue_explain": "超级大会员已于 2021-12-30 过期",
+ "account_exception_text": "",
+ "is_auto_renew": false,
+ "is_tv_auto_renew": false,
+ "surplus_seconds": 8287677,
+ "vip_keep_time": 1562046702,
+ "renew": {
+ "text": "",
+ "link": ""
+ },
+ "notice": {
+ "text": "",
+ "tv_text": "",
+ "type": 0,
+ "can_close": false,
+ "surplus_seconds": 0,
+ "tv_surplus_seconds": 0
+ }
+ },
+ "wallet": {
+ "coupon": 5,
+ "point": 0,
+ "privilege_received": false
+ },
+ "union_vip": null,
+ "other_open_info": null,
+ "privileges": [
+ {
+ "id": 1,
+ "name": "内容特权",
+ "child_privileges": [
+ {
+ "first_id": 1,
+ "report_id": "freewatch",
+ "name": "免费看",
+ "desc": "会员用户免费看",
+ "explain": "需要付费才能观看的影视内容,大会员可以免费观看(播放页面提示“大会员半价”的除外,部分视频仅限在中国大陆观看)。",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/cca929463895f8d2a5d65d41e0f69a608b711539.png",
+ "icon_gray_url": "",
+ "background_image_url": "http://i0.hdslb.com/bfs/vip/b8ea804c872fb2b096715f52b87deb0e6cdfd476.png",
+ "link": "https://big.bilibili.com/mobile/rights?type=free",
+ "image_url": "http://i0.hdslb.com/bfs/vip/22c3735f9db313b7be35d87c1b5dd6da81cea48e.jpg",
+ "type": 0,
+ "hot_type": 1,
+ "new_type": 0,
+ "id": 1
+ },
+ {
+ "first_id": 1,
+ "report_id": "firstwatch",
+ "name": "抢先看",
+ "desc": "会员用户可以快人一步抢先观看",
+ "explain": "连载内容中需要付费抢先看的内容,大会员可以直接观看,不限次数。(部分视频仅限在中国大陆观看)",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/2dac1a2c649407dc8ce5f899f244d3aed557c458.png",
+ "icon_gray_url": "",
+ "background_image_url": "http://i0.hdslb.com/bfs/vip/20b40771e4bf180a606ddc021dfdfe6a7e56b713.png",
+ "link": "https://big.bilibili.com/mobile/rights?type=early",
+ "image_url": "http://i0.hdslb.com/bfs/vip/21c0f30302944b694a12f12cbf4ee02733e1e580.png",
+ "type": 0,
+ "hot_type": 0,
+ "new_type": 0,
+ "id": 2
+ },
+ {
+ "first_id": 1,
+ "report_id": "halfprice",
+ "name": "半价点播",
+ "desc": "付费内容半价即享",
+ "explain": "部分付费点播内容,大会员可享受半价购买。购买成功后,48小时内不限次数观看该影片(部分内容仅限在中国大陆观看)。",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/f42c20d25e10700a2bc5e7257abb7fec91634822.png",
+ "icon_gray_url": "",
+ "background_image_url": "http://i0.hdslb.com/bfs/vip/3a613880463e01c8f9496f3b571e198a111191e5.png",
+ "link": "",
+ "image_url": "http://i0.hdslb.com/bfs/vip/07f8b89c6d044723ece8a42f558d1e84041ff991.png",
+ "type": 0,
+ "hot_type": 1,
+ "new_type": 0,
+ "id": 55
+ }
+ ]
+ },
+ {
+ "id": 4,
+ "name": "装扮特权",
+ "child_privileges": [
+ {
+ "first_id": 4,
+ "report_id": "card",
+ "name": "动态卡片装扮",
+ "desc": "动态卡片装扮",
+ "explain": "大会员可以免费使用大会员专属动态卡片装扮,用于装扮自己的动态卡片,彰显不一样的自己!\r\n有效期内随意装扮,有效期结束后动态卡片装扮自动卸下~(当前仅限客户端)",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/fb9169586bb73dda319d6379440284361f46ff18.png",
+ "icon_gray_url": "",
+ "background_image_url": "http://i0.hdslb.com/bfs/vip/8775308a302014e3bfbfa0dfc69faa2e8faeaa3a.png",
+ "link": "",
+ "image_url": "http://i0.hdslb.com/bfs/vip/21880645864fbdace3d4d0b52eb895551ecd536d.png",
+ "type": 0,
+ "hot_type": 0,
+ "new_type": 0,
+ "id": 46
+ },
+ {
+ "first_id": 4,
+ "report_id": "pendant",
+ "name": "专属挂件",
+ "desc": "专属挂件免费换",
+ "explain": "大会员可免费领取专属挂件,用于装扮自己的头像,展示在评论区、个人空间等等位置。有钱也买不到哦!\r\n有效期内可以随便领,有效期结束后挂件自动卸下~",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/4198eee83d94539be16f60daac277bce5f8f01dc.png",
+ "icon_gray_url": "",
+ "background_image_url": "http://i0.hdslb.com/bfs/vip/ae16ed0dcf8246a28e45403243bc65eea0e7b4c7.png",
+ "link": "https://big.bilibili.com/mobile/rights?type=pendant",
+ "image_url": "http://i0.hdslb.com/bfs/vip/1e6799197b0749c263dd8a28067c0e2b6327cab5.png",
+ "type": 0,
+ "hot_type": 0,
+ "new_type": 0,
+ "id": 23
+ },
+ {
+ "first_id": 4,
+ "report_id": "emoticon",
+ "name": "评论表情",
+ "desc": "评论有表情",
+ "explain": "会员可在评论中发送图片表情,表情多多,表情包常常更新哦。",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/2080c73b6fa52351111b2830bc50a2a417b55216.png",
+ "icon_gray_url": "",
+ "background_image_url": "http://i0.hdslb.com/bfs/vip/f882182fcbca520194d9047ca4903dc2c1e42372.png",
+ "link": "https://big.bilibili.com/mobile/rights?type=emoji",
+ "image_url": "http://i0.hdslb.com/bfs/vip/bbb74fa3264ef9cc0ae1de15e4989b9473a0d6d3.png",
+ "type": 0,
+ "hot_type": 1,
+ "new_type": 0,
+ "id": 22
+ },
+ {
+ "first_id": 4,
+ "report_id": "spacepicture",
+ "name": "空间自主头图",
+ "desc": "空间自主头图",
+ "explain": "大会员可上传个性化图片来装扮个人空间头图,让自己的空间独具魅力。\r\nweb端进入个人空间后,点击头图右上角更换头图时,可以上传自定义头图。\r\n手机客户端进入个人空间后,即可通过点击头图上的“小衣服”按钮更换头图。",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/a8144d3bbfeeaf43f3eff6741f4a7f5fcecec31c.png",
+ "icon_gray_url": "http://i0.hdslb.com/bfs/vip/0ebb039d9fefd37e094f0f181d7cfac9efd019be.png",
+ "background_image_url": "http://i0.hdslb.com/bfs/vip/6c32fe89bb56096fc963ed35118092744cb463b6.png",
+ "link": "https://big.bilibili.com/mobile/rights?type=cover",
+ "image_url": "http://i0.hdslb.com/bfs/vip/f0b521b39a941f0f7198fbe7884aa41af0817ffe.png",
+ "type": 0,
+ "hot_type": 1,
+ "new_type": 0,
+ "id": 24
+ }
+ ]
+ },
+ {
+ "id": 2,
+ "name": "身份特权",
+ "child_privileges": [
+ {
+ "first_id": 2,
+ "report_id": "nickname",
+ "name": "粉色昵称",
+ "desc": "尊享闪亮粉色昵称",
+ "explain": "年度大会员的昵称将以粉色高亮显示。",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/f50ed845a94ac63adaa28f47716965269f9a9bdc.png",
+ "icon_gray_url": "http://i0.hdslb.com/bfs/vip/b67288e008a9fdfec0b13a27a527bb8db701c0d4.png",
+ "background_image_url": "http://i0.hdslb.com/bfs/vip/fa946f3c4011c28fe780d0cdd4da279fb996903f.png",
+ "link": "https://big.bilibili.com/mobile/rights?type=pink",
+ "image_url": "http://i0.hdslb.com/bfs/vip/b609d85d3e30450586653b245ac9772740ec184c.png",
+ "type": 1,
+ "hot_type": 0,
+ "new_type": 0,
+ "id": 18
+ },
+ {
+ "first_id": 2,
+ "report_id": "comic",
+ "name": "漫读券",
+ "desc": "每月赠送漫画阅读券",
+ "explain": "开通时长大于等于31天的大会员,会员有效期内,在哔哩哔哩APP“我的”-“卡券包”,及哔哩哔哩漫画APP“我的”-“卡券包”-“大会员特权”,每31天可领取5张漫读券;开通时长大于等于31天的年度大会员,会员有效期内,每31天可领取10张漫读券(可在“哔哩哔哩漫画app”中用于观看付费漫画);\r\n该特权自开通起每31天可领取一次,当期内未领取则视为作废;\r\n漫读券使用有效期至领取后30天,具体有效期及适用范围详见券面说明;\r\n领取的漫读券可在哔哩哔哩APP“我的”-“卡券包”,及哔哩哔哩漫画APP“我的”-“卡券包”中查看;该大会员特权需将漫画APP升级至3.9版本及以上领取和使用;\r\n该特权有效期至2022年12月31日。",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/eeabde9fc3b0891558af31c65e23913894324c6f.png",
+ "icon_gray_url": "",
+ "background_image_url": "http://i0.hdslb.com/bfs/vip/ba0c9df7c41d6c23c3c2470b5dbbbd5cf4d3d9c2.png",
+ "link": "",
+ "image_url": "http://i0.hdslb.com/bfs/vip/8a0d392d0d509c4bdff76aa98ccc007cd22b65a9.png",
+ "type": 0,
+ "hot_type": 0,
+ "new_type": 0,
+ "id": 47
+ },
+ {
+ "first_id": 2,
+ "report_id": "giftbag",
+ "name": "游戏礼包",
+ "desc": "游戏福利礼包",
+ "explain": "年度大会员可以在游戏礼包中心领取不同游戏的多款超值礼包,礼包数量和内容常常更新。\r\n\r\n具体使用方法请参照各个礼包的使用详情。",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/77cbead3c0361dc9bb5638a901b89edec5820d0c.png",
+ "icon_gray_url": "http://i0.hdslb.com/bfs/vip/c1c810d0ad13b325da6f3dbde1adb5f351adc55c.png",
+ "background_image_url": "http://i0.hdslb.com/bfs/vip/013b5c7b3ba45c7a0f4b7a4967cf55aca3c92e40.png",
+ "link": "https://big.bilibili.com/mobile/rights?type=game",
+ "image_url": "http://i0.hdslb.com/bfs/vip/80a5e1a19192ae65f2c267f1a672c3aaeb582447.png",
+ "type": 1,
+ "hot_type": 0,
+ "new_type": 0,
+ "id": 21
+ },
+ {
+ "first_id": 2,
+ "report_id": "vipmall",
+ "name": "会员购",
+ "desc": "会员购优惠券",
+ "explain": "开通时长大于等于31天的大会员,在会员有效期内,每31天可领取1张会员购10元包邮券;开通时长大于等于31天的年度大会员,在会员有效期内,每31天可领取1张会员购10元包邮券、1张会员购满50-10元优惠券。当月开通或升级的年度大会员,也可以立即领取;\r\n优惠券及包邮券有效期至领取后15天,具体有效期及使用范围详见优惠券说明;\r\n年度大会员可前往App“分区--会员购--右上角“优惠券”查看优惠券及包邮券,并前往App“分区--会员购”,在提交订单时选择优惠券及包邮券进行使用;该大会员特权需将哔哩哔哩APP升级至6.65版本及以上领取和使用。",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/37108d523b939e3c4071d4fdd104b50003a1f627.png",
+ "icon_gray_url": "http://i0.hdslb.com/bfs/vip/972283284cfb7f3b3063b1b391aeeb4cbed3249d.png",
+ "background_image_url": "http://i0.hdslb.com/bfs/vip/21d79540e10618ee9bbaf8874ae711442d10edf0.png",
+ "link": "https://big.bilibili.com/mobile/rights?type=hobby",
+ "image_url": "http://i0.hdslb.com/bfs/vip/9af168f768312da3c31df23c056f33b3dcaefe8a.jpg",
+ "type": 1,
+ "hot_type": 0,
+ "new_type": 1,
+ "id": 20
+ },
+ {
+ "first_id": 2,
+ "report_id": "bcoupon",
+ "name": "B币券",
+ "desc": "每月赠送B币",
+ "explain": "开通大会员时长大于等于31天的年度大会员,在会员有效期内,每31天可领取1张5B币券。当月开通或升级的年度大会员,也可以立即领取;\r\n有效期至领取后30天,到期未使用的B币券将自动过期。\r\nB币券可用于承包番剧、给up主充电、兑换电池,兑换漫画赛季积分等。\r\n赠送的B币券在使用时不再赠送会员积分。",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/90e1cad7ccaa4c7d29728bdb68bb1af833b2b46b.png",
+ "icon_gray_url": "http://i0.hdslb.com/bfs/vip/c3dcef2bfea737a1342dacea1027a3b299d3cf71.png",
+ "background_image_url": "http://i0.hdslb.com/bfs/vip/20de7f4e81775c4cec1a9653131e5b10c8c8f41d.png",
+ "link": "https://big.bilibili.com/mobile/rights?type=bcoin",
+ "image_url": "http://i0.hdslb.com/bfs/vip/11b77dd4ac7aabe42616031a7fe4b2a17f9e632d.png",
+ "type": 1,
+ "hot_type": 0,
+ "new_type": 0,
+ "id": 19
+ },
+ {
+ "first_id": 2,
+ "report_id": "update",
+ "name": "身份升级",
+ "desc": "连续购买享受更高级权益",
+ "explain": "购买大会员连续累计时长超过366天,即可免费升级为年度大会员身份,升级后可立即享受粉色昵称、游戏礼包、B币券等年度大会员专享权益。\r\n注意:中断续费的话,年度大会员身份会收回哦~",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/ea7ea61dab30edcd7bc53d2ebf159c167dda6286.png",
+ "icon_gray_url": "",
+ "background_image_url": "",
+ "link": "",
+ "image_url": "http://i0.hdslb.com/bfs/vip/75e8a25686e7556877be4074f002c426afe8d4a6.jpg",
+ "type": 0,
+ "hot_type": 0,
+ "new_type": 1,
+ "id": 56
+ }
+ ]
+ },
+ {
+ "id": 3,
+ "name": "视听特权",
+ "child_privileges": [
+ {
+ "first_id": 3,
+ "report_id": "clearwatch",
+ "name": "超清看",
+ "desc": "会员用户超清晰观看",
+ "explain": "大会员可专享高帧率、高码率画质(最高可达超清4k),觉醒超凡视觉体验。",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/1870c718e3cd2a5625934d401838e67d738d4fcc.png",
+ "icon_gray_url": "",
+ "background_image_url": "http://i0.hdslb.com/bfs/vip/21d79540e10618ee9bbaf8874ae711442d10edf0.png",
+ "link": "https://big.bilibili.com/mobile/rights?type=clear",
+ "image_url": "http://i0.hdslb.com/bfs/vip/fbe4cf2288571d7b0a509c7014d5182789ffdd74.png",
+ "type": 0,
+ "hot_type": 0,
+ "new_type": 1,
+ "id": 3
+ },
+ {
+ "first_id": 3,
+ "report_id": "",
+ "name": "边下边播",
+ "desc": "追番看剧拒绝卡顿",
+ "explain": "大会员下载剧集时,已下载部分可以播放,不用等下载完成即可观看(仅限手机端使用)。",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/5248289d4c313678edeb68436c5411d1b6f9df7f.png",
+ "icon_gray_url": "",
+ "background_image_url": "",
+ "link": "",
+ "image_url": "http://i0.hdslb.com/bfs/vip/e3ae66f7c72056e95d252a33ebceac70d32a27cc.png",
+ "type": 0,
+ "hot_type": 1,
+ "new_type": 0,
+ "id": 53
+ },
+ {
+ "first_id": 3,
+ "report_id": "",
+ "name": "并行下载",
+ "desc": "3集一起下才够快",
+ "explain": "大会员下载视频时,至多可支持2-3个视频同时缓存(仅限手机端使用)。",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/8198d4638f3322b485787f9af909955e54696de9.png",
+ "icon_gray_url": "",
+ "background_image_url": "",
+ "link": "",
+ "image_url": "http://i0.hdslb.com/bfs/vip/188e6a0905a3729905a3a053ffa7dad324705ca6.png",
+ "type": 0,
+ "hot_type": 1,
+ "new_type": 0,
+ "id": 54
+ },
+ {
+ "first_id": 3,
+ "report_id": "",
+ "name": "专属缓存",
+ "desc": "随时随地想看就看",
+ "explain": "海量番剧、国创、电影大片,大会员独享专属缓存特权。(仅限手机端使用,部分内容受版权或地区限制无法缓存)。",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/35cf4f902ecd836db0e841cc642d1c099adb2046.png",
+ "icon_gray_url": "",
+ "background_image_url": "",
+ "link": "",
+ "image_url": "http://i0.hdslb.com/bfs/vip/6cf08314a94aeb5579e956aa40a2f37ab68baa2d.png",
+ "type": 0,
+ "hot_type": 0,
+ "new_type": 0,
+ "id": 51
+ },
+ {
+ "first_id": 3,
+ "report_id": "hdr",
+ "name": "真彩HDR",
+ "desc": "更真实的视觉体验",
+ "explain": "哔哩哔哩提供基于HDR10技术的“真彩HDR”观影模式。HDR能够呈现更多的动态范围,细致优化画面中的明暗对比及色彩显示,更好的反映出真实环境中的视觉效果。使您可以享受到色彩细腻鲜艳,明暗层次丰富的高品质观影体验。\r\n注意事项: \r\n移动端请更新APP至6.9及以上版本;安卓机型需7及以上系统,iOS机型需13及以上系统,PC端仅部分浏览器支持。",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/dd6acf7bb89686e6a15fe7d7762aa6215fb856f1.png",
+ "icon_gray_url": "",
+ "background_image_url": "",
+ "link": "",
+ "image_url": "http://i0.hdslb.com/bfs/vip/240c332b35355cfbfd982aa7b3bc8e48b31672f0.png",
+ "type": 0,
+ "hot_type": 0,
+ "new_type": 1,
+ "id": 57
+ },
+ {
+ "first_id": 3,
+ "report_id": "dolby",
+ "name": "杜比全景声",
+ "desc": "更优质的听觉盛宴",
+ "explain": "大会员专享杜比音效(立体声、环绕声)以及杜比全景声,采用全新的音效技术,为你带来身临其中的听觉盛宴。(该权益仅可在移动端上部分内容支持使用)",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/d6915ef153c812f57b50fe4583f8eb6879f3c265.png",
+ "icon_gray_url": "",
+ "background_image_url": "",
+ "link": "",
+ "image_url": "http://i0.hdslb.com/bfs/vip/08377c70a185359242cf5c83f1cd5ed5c8b3c057.png",
+ "type": 0,
+ "hot_type": 0,
+ "new_type": 0,
+ "id": 59
+ },
+ {
+ "first_id": 3,
+ "report_id": "",
+ "name": "预约缓存",
+ "desc": "后台运行即更即存",
+ "explain": "连载内容尚未播出的剧集可提前预约缓存,新剧集上线后,第一时间在wifi环境下自动缓存下载到本地,省时省力追番更轻松(仅限手机端使用)。\r\n使用说明:\r\n1.此权益需要将哔哩哔哩APP设置后台自动运行状态;\r\n2.具体以可预约下载剧集的播出安排为准。",
+ "icon_url": "http://i0.hdslb.com/bfs/vip/6d36c5603faf4a1ac4cea6c6ff719e70c05f8c3c.png",
+ "icon_gray_url": "",
+ "background_image_url": "",
+ "link": "",
+ "image_url": "http://i0.hdslb.com/bfs/vip/8e01e169551909bcaae6ed8b40759c4e1bae95cf.png",
+ "type": 0,
+ "hot_type": 0,
+ "new_type": 0,
+ "id": 52
+ }
+ ]
+ }
+ ],
+ "banners": [],
+ "welfare": {
+ "count": 3,
+ "list": [
+ {
+ "id": 80,
+ "name": "联通首月1分钱2022.11",
+ "homepage_uri": "https://i2.hdslb.com/bfs/vip/eacd5f4242034908e46575ee256f013dce6c3d69.png",
+ "backdrop_uri": "https://i2.hdslb.com/bfs/vip/522325bcf86b20fe13d92e0e1cc2872af27abff7.png",
+ "tid": 0,
+ "rank": 2,
+ "receive_uri": "https://operation.mige.tv/a/#/23791f7f84db"
+ },
+ {
+ "id": 77,
+ "name": "移动随心看2022.11",
+ "homepage_uri": "https://i0.hdslb.com/bfs/vip/4dcc85686972f6b9b61468992c2bc03a7e648dbc.png",
+ "backdrop_uri": "https://i0.hdslb.com/bfs/vip/00a0db85f8f43023893e8e9d0dd90f38493624ea.png",
+ "tid": 0,
+ "rank": 3,
+ "receive_uri": "https://dev.coc.10086.cn/coc/web/coc2020/package2/?pageId=1541343250813415424\u0026channelId=P00000000451"
+ },
+ {
+ "id": 79,
+ "name": "联通2233卡2022.11",
+ "homepage_uri": "https://i2.hdslb.com/bfs/vip/ff8e69b13ac5a560d7ceab7ef07aa9c807880ac4.jpg",
+ "backdrop_uri": "https://i2.hdslb.com/bfs/vip/a45bfa461444e231df14bea94ce6d2b738426387.jpg",
+ "tid": 0,
+ "rank": 8,
+ "receive_uri": "https://b23.tv/ifiFs6e"
+ }
+ ]
+ },
+ "recommend_pendants": {
+ "list": [
+ {
+ "id": 1758,
+ "name": "至尊戒",
+ "image": "http://i0.hdslb.com/bfs/garb/item/025d07fa04d38236bc2258be2faf2867e2c48fe1.png",
+ "jump_url": "https://www.bilibili.com/h5/mall/preview/pendant/1758?navhide=1"
+ },
+ {
+ "id": 1759,
+ "name": "精灵王",
+ "image": "http://i0.hdslb.com/bfs/garb/item/2db4ebcb23656f3a6f68bd3306805cc24a9e1144.png",
+ "jump_url": "https://www.bilibili.com/h5/mall/preview/pendant/1759?navhide=1"
+ },
+ {
+ "id": 1293,
+ "name": "碧蓝航线",
+ "image": "http://i0.hdslb.com/bfs/face/2508daec59b2aaada2784f26f9c1c28069f28e43.png",
+ "jump_url": "https://www.bilibili.com/h5/mall/preview/pendant/1293?navhide=1"
+ }
+ ],
+ "jump_url": "https://www.bilibili.com/h5/mall/pendant/home?navhide=1\u0026tab_id=22"
+ },
+ "recommend_cards": {
+ "list": [
+ {
+ "id": 18,
+ "name": "阿维",
+ "image": "http://i0.hdslb.com/bfs/vip/ffa3e8c1cf92eb0c01db61abe5741419e9302a70.png",
+ "jump_url": "https://www.bilibili.com/h5/mall/preview/feed/18?navhide=1"
+ },
+ {
+ "id": 27,
+ "name": "尤里乌斯",
+ "image": "http://i0.hdslb.com/bfs/vip/0f733cdfd9cbe4746fb6bc76bcb1a720efdecfc6.png",
+ "jump_url": "https://www.bilibili.com/h5/mall/preview/feed/27?navhide=1"
+ }
+ ],
+ "jump_url": "https://www.bilibili.com/h5/mall/card/detail?navhide=1\u0026tab_id=5"
+ },
+ "sort": [
+ {
+ "key": "union_vip",
+ "sort": 1
+ },
+ {
+ "key": "other_open_info",
+ "sort": 2
+ }
+ ],
+ "in_review": false,
+ "big_point": {
+ "point_info": {
+ "point": 210,
+ "expire_point": 0,
+ "expire_time": 0,
+ "expire_days": 0
+ },
+ "sign_info": {
+ "sign_remind": false,
+ "benefit": 5,
+ "bonus_benefit": 0,
+ "normal_remind": true,
+ "muggle_task": true
+ },
+ "sku_info": {
+ "skus": [
+ {
+ "base": {
+ "token": "610208400319545734",
+ "title": "大会员1天卡",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/UMsNkcRz1z.png",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/UMsNkcRz1z.png"
+ ],
+ "price": {
+ "origin": 240,
+ "promotion": {
+ "price": 120,
+ "type": 1,
+ "discount": 5,
+ "label": "5折"
+ }
+ },
+ "inventory": {
+ "available_num": 1000000,
+ "used_num": 707448,
+ "surplus_num": 292552
+ },
+ "user_type": 2,
+ "exchange_limit_type": 3,
+ "exchange_limit_num": 3,
+ "start_time": 1658224800,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "650284831896337625",
+ "title": "克鲁苏手办-会员购7.2折券",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20221009/b88c479976ac33162f658d12959a2111/wRI6e4GWZ4.jpg",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20221009/b88c479976ac33162f658d12959a2111/wRI6e4GWZ4.jpg"
+ ],
+ "price": {
+ "origin": 500,
+ "promotion": {
+ "price": 10,
+ "type": 2,
+ "discount": 0,
+ "label": "秒杀"
+ }
+ },
+ "inventory": {
+ "available_num": 9734,
+ "used_num": 4795,
+ "surplus_num": 4939
+ },
+ "user_type": 2,
+ "exchange_limit_type": 4,
+ "exchange_limit_num": 1,
+ "start_time": 1664193600,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "652569526596107481",
+ "title": "个性装扮8折券",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220930/b88c479976ac33162f658d12959a2111/d5McccHzaX.jpg",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220930/b88c479976ac33162f658d12959a2111/d5McccHzaX.jpg"
+ ],
+ "price": {
+ "origin": 500,
+ "promotion": {
+ "price": 10,
+ "type": 2,
+ "discount": 0,
+ "label": "秒杀"
+ }
+ },
+ "inventory": {
+ "available_num": 50000,
+ "used_num": 14065,
+ "surplus_num": 35935
+ },
+ "user_type": 2,
+ "exchange_limit_type": 2,
+ "exchange_limit_num": 10,
+ "start_time": 1664522420,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ }
+ ]
+ },
+ "point_switch_off": false,
+ "tips": [
+ {
+ "content": "今天的任务还没有做完哦"
+ }
+ ]
+ },
+ "hot_list": {
+ "taps": [
+ {
+ "oid": "{season_type:1}",
+ "rank_id": 118,
+ "rank_title": "番剧"
+ },
+ {
+ "oid": "{season_type:2,style_id:0,day:3,rank_type:0}",
+ "rank_id": 174,
+ "rank_title": "电影"
+ },
+ {
+ "oid": "{season_type:4}",
+ "rank_id": 119,
+ "rank_title": "国创"
+ },
+ {
+ "oid": "{season_type:5,style_id:0,day:3,rank_type:0}",
+ "rank_id": 176,
+ "rank_title": "电视剧"
+ },
+ {
+ "oid": "{season_type:3,style_id:0,day:3,rank_type:0}",
+ "rank_id": 175,
+ "rank_title": "纪录片"
+ },
+ {
+ "oid": "{season_type:7,style_id:0,day:3,rank_type:0}",
+ "rank_id": 177,
+ "rank_title": "综艺"
+ }
+ ]
+ }
+ }
+}
+```
+
+
+
+## 大积分
+
+### 大积分商品类型
+
+| id | 类型 |
+| ---- | -------- |
+| 1 | 大会员 |
+| 2 | 会员购 |
+| 3 | 生活服务 |
+| 4 | 漫画 |
+| 5 | 装扮 |
+
+### 大积分任务列表
+
+| id | 类型 |
+| ----------- | ------------------ |
+| bonus | 大会员福利大积分 |
+| privilege | 浏览大会员权益页面 |
+| animatetab | 浏览追番频道页10秒 |
+| filmtab | 浏览影视频道页10秒 |
+| vipmallview | 浏览会员购页面10秒 |
+| ogvwatch | 观看任意正片内容 |
+| tvodbuy | 购买单点付费影片 |
+| vipmallbuy | 购买指定会员购商品 |
+
+### 大积分中心信息
+
+> https://api.biliapi.com/x/vip_point/homepage/combine
+
+*请求方式:GET*
+
+认证方式:Cookie (SESSDATA) / access_key
+
+**url参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ------------ | ----------- | ---- |
+| access_key | str | APP登录Token | APP方式必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------- |
+| code | num | 响应码 | 0:成功 -101:账号未登录 |
+| message | str | 0 | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| -------------- | ----- | --------------- | --------------------- |
+| vip_info | obj | 大会员信息 | |
+| content | str | 空 | |
+| point_info | obj | 点数信息 | |
+| task | obj | 任务信息 | [任务列表](#任务列表) |
+| banner | array | banner 卡片列表 | |
+| goods_category | array | 商品类型列表 | |
+| goods_skus | array | 商品明细列表 | 包含所有类型的商品 |
+| current_ts | num | 本次请求时间 | 秒时间戳 |
+
+`data`中的`vip_info`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| --------------- | ---- | ------------------ | ------------------------------------------------------------ |
+| type | num | 大会员类型 | 0:无 1:月大会员 2:年度及以上大会员 |
+| status | num | 大会员状态 | 0:无 1:有 |
+| due_date | num | 大会员过期时间 | 毫秒时间戳 |
+| vip_pay_type | num | 支付类型 | 0:未支付(常见于官方账号) 1:已支付(以正常渠道获取的大会员均为此值) |
+| start_time | num | 首次大会员开通时间 | 秒时间戳 |
+| paid_type | num | `0` | |
+| mid | num | 当前用户 mid | |
+| role | num | 大会员类型 | 1:月度大会员 3:年度大会员 7:十年大会员 15:百年大会员 |
+| tv_vip_status | num | 电视大会员状态 | 0:无 1:有 |
+| tv_vip_pay_type | num | 电视大会员支付类型 | 0:未支付(常见于官方账号) 1:已支付(以正常渠道获取的大会员均为此值) |
+| tv_due_date | num | 电视大会员过期时间 | 秒时间戳 |
+
+`data`中的`point_info`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| ------------ | ---- | ------------------ | --------- |
+| point | num | 当前拥有大积分数量 | |
+| expire_point | num | 失效积分? | 目前为`0` |
+| expire_time | num | 失效时间? | 目前为`0` |
+| expire_days | num | 失效天数? | 目前为`0` |
+
+`data`中的`task`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| ---------- | ----- | ------------------ | ---- |
+| task_item | array | 当前页面显示的任务 | |
+| task_count | num | 任务总数 | |
+| signed | bool | `false` | |
+| score | num | `5` | |
+
+`task`中的 `task_item`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---------- | ---- |
+| 0 | obj | 任务 1 | |
+| n | obj | 任务 (n+1) | |
+| …… | obj | …… | …… |
+
+ `task_item`数组中的对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| -------------- | ---- | -------------------- | --------------------------------------------- |
+| task_code | str | 任务 id | 详见[大积分任务列表](#大积分任务列表) |
+| state | num | 任务状态 | 0:未领取 1:未完成 3:已完成/已领取 |
+| title | str | 任务名称 | |
+| icon | str | 任务图标 url | |
+| subtitle | str | 任务副标题 | |
+| explain | str | 任务详情说明 | |
+| link | str | 任务跳转 url | web方式:目标页面url APP方式:APP内uri |
+| vip_limit | num | 是否为大会员专享任务 | 0:否 1:是 |
+| complete_times | num | 已完成次数 | |
+| max_times | num | 最大完成次数 | |
+| recall_num | num | 重试次数? | 目前为`0` |
+
+`data`中的 `banner`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ----------------- | ---- |
+| 0 | obj | banner 项目 1 | |
+| n | obj | banner 项目 (n+1) | |
+| …… | obj | …… | …… |
+
+`banner`数组中的对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| --------- | ---- | --------------- | ---- |
+| link | str | 跳转 url | |
+| image_url | str | banner 卡片 url | |
+
+`data`中的 `goods_category`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | -------------- | ---- |
+| 0 | obj | 商品类型 1 | |
+| n | obj | 商品类型 (n+1) | |
+| …… | obj | …… | …… |
+
+`goods_category`数组中的对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| ------ | ---- | ------------ | ------------------------------------------- |
+| id | num | 商品类型 id | 具体类型见[大积分商品类型](#大积分商品类型) |
+| name | str | 商品类型名称 | |
+| state | num | 状态 | 目前为`2` |
+
+`data`中的 `goods_skus`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---------------- | ---- |
+| 0 | obj | 大积分商品 1 | |
+| n | obj | 大积分商品 (n+1) | |
+| …… | obj | …… | …… |
+
+ `goods_skus`数组中的对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| ------ | ---- | -------- | ---- |
+| base | obj | 套了个娃 | |
+
+ `goods_skus`数组中的对象中的`base`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| ------------------- | ----- | ------------ | ------------------- |
+| token | str | 商品 token | 用于购买 & 明细页面 |
+| title | str | 商品名称 | |
+| picture | str | 商品图片 url | |
+| rotation_pictures | array | 商品图片组 | |
+| price | obj | 价格信息 | |
+| inventory | obj | 库存信息 | |
+| user_type | num | `2` | |
+| exchange_limit_type | num | `2` `3` `4` | |
+| exchange_limit_num | num | 限购数量 | |
+| start_time | num | 起售时间 | 秒时间戳 |
+| end_time | num | 止售时间 | 秒时间戳 |
+| state | num | 状态? | `2` |
+
+`base`中的`rotation_pictures`数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| ---- | ---- | ------------ | ----------------------------------------------- |
+| 0 | str | 商品图片 url | 目前只有1项 同上层对象的`商品图片 url`字段 |
+
+`base`中的`price`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| --------- | ----------------------------- | -------- | ---------- |
+| origin | num | 商品原价 | 单位为积分 |
+| promotion | 有折扣:obj 无折扣:null | 折扣信息 | |
+
+`price`中的`promotion`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| -------- | ---- | -------- | ------------------------------------------------------ |
+| price | num | 折后价格 | 单位为积分 |
+| type | num | 折扣类型 | 1:普通折扣 2:秒杀 |
+| discount | num | 折扣力度 | |
+| label | str | 标签文案 | 普通折扣:显示为 eg:`5折` 秒杀:显示为 eg:`秒杀` |
+
+`base`中的`inventory`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| ------------- | ---- | -------- | ---- |
+| available_num | num | 库存总量 | |
+| used_num | num | 已售数量 | |
+| surplus_num | num | 剩余数量 | |
+
+**示例:**
+
+web 方式:
+
+```shell
+curl 'https://api.bilibili.com/x/vip_point/homepage/combine' \
+ -b 'SESSDATA=xxx'
+```
+
+APP 方式:
+
+```shell
+curl -G 'https://api.bilibili.com/x/vip_point/homepage/combine' \
+ ---data-urlencode 'access_key=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "vip_info": {
+ "type": 2,
+ "status": 1,
+ "due_date": 1678723200000,
+ "vip_pay_type": 0,
+ "start_time": 1475986259,
+ "paid_type": 0,
+ "mid": 10086,
+ "role": 3,
+ "tv_vip_status": 0,
+ "tv_vip_pay_type": 0,
+ "tv_due_date": 0
+ },
+ "content": "",
+ "point_info": {
+ "point": 355,
+ "expire_point": 0,
+ "expire_time": 0,
+ "expire_days": 0
+ },
+ "task": {
+ "task_item": [
+ {
+ "task_code": "animatetab",
+ "state": 1,
+ "title": "浏览追番频道页10秒",
+ "icon": "https://i0.hdslb.com/bfs/activity-plat/static/20220607/b66bfe4ccfd6bed05bdb54008ff5c7aa/uOwc1tuJwm.png",
+ "subtitle": "+10大积分 ",
+ "explain": "从本任务入口跳转至追番频道页,并连续浏览页面达10秒可得10大积分,每天可完成1次。如浏览过程中离开追番频道页则中断计时,任务判定失败,需重新从本任务入口再次跳转。",
+ "link": "bilibili://home?bottom_tab_name=首页&tab_name=追番&tab_id=bangumi&vip_task_countdown=10000",
+ "vip_limit": 1,
+ "complete_times": 0,
+ "max_times": 1,
+ "recall_num": 0
+ },
+ {
+ "task_code": "filmtab",
+ "state": 1,
+ "title": "浏览影视频道页10秒",
+ "icon": "https://i0.hdslb.com/bfs/activity-plat/static/20220607/b66bfe4ccfd6bed05bdb54008ff5c7aa/bWPJRBuMh3.png",
+ "subtitle": "+10大积分 ",
+ "explain": "从本任务入口跳转至影视频道页,并连续浏览页面达10秒可得10大积分,每天可完成1次。如浏览过程中离开影视频道页则中断计时,任务判定失败,需重新从本任务入口再次跳转。",
+ "link": "bilibili://home?bottom_tab_name=首页&tab_name=影视&tab_id=film&vip_task_countdown=10000",
+ "vip_limit": 1,
+ "complete_times": 0,
+ "max_times": 1,
+ "recall_num": 0
+ }
+ ],
+ "task_count": 8,
+ "signed": false,
+ "score": 5
+ },
+ "banner": [
+ {
+ "link": "https://www.bilibili.com/blackboard/activity-0sjbGf3IJt.html?msource=jifen_banner",
+ "image_url": "https://i0.hdslb.com/bfs/activity-plat/static/20220819/b88c479976ac33162f658d12959a2111/KS1XfLBuk7.png"
+ }
+ ],
+ "goods_category": [
+ {
+ "id": 1,
+ "name": "大会员",
+ "state": 2
+ },
+ {
+ "id": 2,
+ "name": "会员购",
+ "state": 2
+ },
+ {
+ "id": 5,
+ "name": "装扮",
+ "state": 2
+ },
+ {
+ "id": 4,
+ "name": "漫画",
+ "state": 2
+ },
+ {
+ "id": 3,
+ "name": "生活服务",
+ "state": 2
+ }
+ ],
+ "goods_skus": [
+ {
+ "base": {
+ "token": "610208400319545734",
+ "title": "大会员1天卡",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/UMsNkcRz1z.png",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/UMsNkcRz1z.png"
+ ],
+ "price": {
+ "origin": 240,
+ "promotion": {
+ "price": 120,
+ "type": 1,
+ "discount": 5,
+ "label": "5折"
+ }
+ },
+ "inventory": {
+ "available_num": 1000000,
+ "used_num": 552427,
+ "surplus_num": 447573
+ },
+ "user_type": 2,
+ "exchange_limit_type": 3,
+ "exchange_limit_num": 3,
+ "start_time": 1658224800,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "650284831896337625",
+ "title": "克鲁苏手办-会员购7.2折券",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220923/b88c479976ac33162f658d12959a2111/W8QR1HfVP2.jpg",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220923/b88c479976ac33162f658d12959a2111/W8QR1HfVP2.jpg"
+ ],
+ "price": {
+ "origin": 500,
+ "promotion": {
+ "price": 10,
+ "type": 2,
+ "discount": 0,
+ "label": "秒杀"
+ }
+ },
+ "inventory": {
+ "available_num": 6459,
+ "used_num": 1662,
+ "surplus_num": 4797
+ },
+ "user_type": 2,
+ "exchange_limit_type": 4,
+ "exchange_limit_num": 1,
+ "start_time": 1664193600,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "652569526596107481",
+ "title": "个性装扮8折券",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220930/b88c479976ac33162f658d12959a2111/d5McccHzaX.jpg",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220930/b88c479976ac33162f658d12959a2111/d5McccHzaX.jpg"
+ ],
+ "price": {
+ "origin": 500,
+ "promotion": {
+ "price": 10,
+ "type": 2,
+ "discount": 0,
+ "label": "秒杀"
+ }
+ },
+ "inventory": {
+ "available_num": 50000,
+ "used_num": 4486,
+ "surplus_num": 45514
+ },
+ "user_type": 2,
+ "exchange_limit_type": 2,
+ "exchange_limit_num": 10,
+ "start_time": 1664522420,
+ "end_time": 1667145599,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "652569526663216345",
+ "title": "大会员6周年3天试用装扮",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220930/b88c479976ac33162f658d12959a2111/0AgpMilH81.jpeg",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220930/b88c479976ac33162f658d12959a2111/0AgpMilH81.jpeg",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220930/b88c479976ac33162f658d12959a2111/umgPkNfHVr.jpeg",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220930/b88c479976ac33162f658d12959a2111/2q5F0uSp7j.jpeg",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220930/b88c479976ac33162f658d12959a2111/CHAvcqXip3.jpeg"
+ ],
+ "price": {
+ "origin": 200,
+ "promotion": {
+ "price": 140,
+ "type": 1,
+ "discount": 7,
+ "label": "7折"
+ }
+ },
+ "inventory": {
+ "available_num": 5000,
+ "used_num": 1553,
+ "surplus_num": 3447
+ },
+ "user_type": 2,
+ "exchange_limit_type": 2,
+ "exchange_limit_num": 3,
+ "start_time": 1664522420,
+ "end_time": 1667145599,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "617703254146515334",
+ "title": "元龙-哔哩哔哩漫画专属限免卡",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220801/b88c479976ac33162f658d12959a2111/ZvgHCqUX8z.png",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/IYmEC7WhRg.png"
+ ],
+ "price": {
+ "origin": 120,
+ "promotion": null
+ },
+ "inventory": {
+ "available_num": 2500,
+ "used_num": 676,
+ "surplus_num": 1824
+ },
+ "user_type": 2,
+ "exchange_limit_type": 3,
+ "exchange_limit_num": 5,
+ "start_time": 1659337200,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "593959019090116167",
+ "title": "网易严选Pro纯享会员季卡",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/MmiTOh3B0r.jpg",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/MmiTOh3B0r.jpg"
+ ],
+ "price": {
+ "origin": 500,
+ "promotion": {
+ "price": 10,
+ "type": 2,
+ "discount": 0,
+ "label": "秒杀"
+ }
+ },
+ "inventory": {
+ "available_num": 110000,
+ "used_num": 36254,
+ "surplus_num": 73746
+ },
+ "user_type": 2,
+ "exchange_limit_type": 2,
+ "exchange_limit_num": 1,
+ "start_time": 1655802000,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "610739183048294790",
+ "title": "大会员3天卡",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/sxDsdSnSPc.png",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/sxDsdSnSPc.png"
+ ],
+ "price": {
+ "origin": 720,
+ "promotion": {
+ "price": 360,
+ "type": 1,
+ "discount": 5,
+ "label": "5折"
+ }
+ },
+ "inventory": {
+ "available_num": 250000,
+ "used_num": 75968,
+ "surplus_num": 174032
+ },
+ "user_type": 2,
+ "exchange_limit_type": 3,
+ "exchange_limit_num": 1,
+ "start_time": 1658246400,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "639706098068193670",
+ "title": "会员购8魔晶券",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/yPGHN7xESw.png",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/yPGHN7xESw.png"
+ ],
+ "price": {
+ "origin": 500,
+ "promotion": {
+ "price": 300,
+ "type": 1,
+ "discount": 6,
+ "label": "6折"
+ }
+ },
+ "inventory": {
+ "available_num": 28224,
+ "used_num": 8274,
+ "surplus_num": 19950
+ },
+ "user_type": 2,
+ "exchange_limit_type": 4,
+ "exchange_limit_num": 1,
+ "start_time": 1662616800,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "617703254280733062",
+ "title": "入间同学入魔了!-哔哩哔哩漫画专属限免卡",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220801/b88c479976ac33162f658d12959a2111/OT3LOXSnJN.png",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/c6RPOSe9Mn.png"
+ ],
+ "price": {
+ "origin": 120,
+ "promotion": null
+ },
+ "inventory": {
+ "available_num": 2500,
+ "used_num": 820,
+ "surplus_num": 1680
+ },
+ "user_type": 2,
+ "exchange_limit_type": 3,
+ "exchange_limit_num": 5,
+ "start_time": 1659337200,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "643171124875723142",
+ "title": "会员购 5 元无门槛优惠券",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/aFmXluGivH.png",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/aFmXluGivH.png"
+ ],
+ "price": {
+ "origin": 1200,
+ "promotion": null
+ },
+ "inventory": {
+ "available_num": 5097,
+ "used_num": 102,
+ "surplus_num": 4995
+ },
+ "user_type": 2,
+ "exchange_limit_type": 3,
+ "exchange_limit_num": 1,
+ "start_time": 1663135200,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "643171125009940870",
+ "title": "会员购10元运费券",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/Tgki97iGuT.png",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/Tgki97iGuT.png"
+ ],
+ "price": {
+ "origin": 2400,
+ "promotion": null
+ },
+ "inventory": {
+ "available_num": 1347,
+ "used_num": 104,
+ "surplus_num": 1243
+ },
+ "user_type": 2,
+ "exchange_limit_type": 3,
+ "exchange_limit_num": 1,
+ "start_time": 1663135200,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "589270953100440487",
+ "title": "大会员周卡",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/0veyfxh8pw.png",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/0veyfxh8pw.png"
+ ],
+ "price": {
+ "origin": 2880,
+ "promotion": {
+ "price": 1440,
+ "type": 1,
+ "discount": 5,
+ "label": "5折"
+ }
+ },
+ "inventory": {
+ "available_num": 25000,
+ "used_num": 23303,
+ "surplus_num": 1697
+ },
+ "user_type": 2,
+ "exchange_limit_type": 3,
+ "exchange_limit_num": 1,
+ "start_time": 1655049600,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "617703254012297606",
+ "title": "凡人修仙传-哔哩哔哩漫画专属限免卡",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220801/b88c479976ac33162f658d12959a2111/6ggYDOHmaI.png",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/Dgw0KcexF4.png"
+ ],
+ "price": {
+ "origin": 120,
+ "promotion": null
+ },
+ "inventory": {
+ "available_num": 2500,
+ "used_num": 525,
+ "surplus_num": 1975
+ },
+ "user_type": 2,
+ "exchange_limit_type": 3,
+ "exchange_limit_num": 5,
+ "start_time": 1659337200,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "615454955335156102",
+ "title": "0元辣翅-麦当劳券",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/nRJUBwY08K.jpg",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/nRJUBwY08K.jpg"
+ ],
+ "price": {
+ "origin": 2880,
+ "promotion": null
+ },
+ "inventory": {
+ "available_num": 1000,
+ "used_num": 13,
+ "surplus_num": 987
+ },
+ "user_type": 2,
+ "exchange_limit_type": 2,
+ "exchange_limit_num": 1,
+ "start_time": 1659006000,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "634599326722654598",
+ "title": "会员购6.7折优惠券",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220830/b88c479976ac33162f658d12959a2111/UsBxJtHwuE.png",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220830/b88c479976ac33162f658d12959a2111/UsBxJtHwuE.png"
+ ],
+ "price": {
+ "origin": 500,
+ "promotion": null
+ },
+ "inventory": {
+ "available_num": 200000,
+ "used_num": 30051,
+ "surplus_num": 169949
+ },
+ "user_type": 2,
+ "exchange_limit_type": 2,
+ "exchange_limit_num": 10,
+ "start_time": 1661857200,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "589270952362242983",
+ "title": "QQ音乐豪华绿钻7天卡",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/5ffuc5gpsE.jpg",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/5ffuc5gpsE.jpg"
+ ],
+ "price": {
+ "origin": 2880,
+ "promotion": null
+ },
+ "inventory": {
+ "available_num": 1267,
+ "used_num": 17,
+ "surplus_num": 1250
+ },
+ "user_type": 2,
+ "exchange_limit_type": 3,
+ "exchange_limit_num": 1,
+ "start_time": 1655049600,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "640378711354474886",
+ "title": "BEMOE 咒术回战 角色立绘徽章 官方首发版",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220529/b88c479976ac33162f658d12959a2111/hgziHzH19f.png",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220529/b88c479976ac33162f658d12959a2111/hgziHzH19f.png",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220529/b88c479976ac33162f658d12959a2111/NHOJmvbEAI.jpg",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220529/b88c479976ac33162f658d12959a2111/mcBJhmyd1q.jpg",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220529/b88c479976ac33162f658d12959a2111/9BpHMBjUnV.jpg",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220529/b88c479976ac33162f658d12959a2111/ZoJSeBHQ49.png",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220529/b88c479976ac33162f658d12959a2111/NtVKcx2rlk.png",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220529/b88c479976ac33162f658d12959a2111/DIElnpB6oa.png",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220529/b88c479976ac33162f658d12959a2111/UCjfV1tJZy.png",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220529/b88c479976ac33162f658d12959a2111/RoXnjbx7pv.png",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220529/b88c479976ac33162f658d12959a2111/ENZ9CWhZPs.png",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220529/b88c479976ac33162f658d12959a2111/Q5XFivyjX7.png"
+ ],
+ "price": {
+ "origin": 6000,
+ "promotion": null
+ },
+ "inventory": {
+ "available_num": 8,
+ "used_num": 2,
+ "surplus_num": 6
+ },
+ "user_type": 2,
+ "exchange_limit_type": 2,
+ "exchange_limit_num": 1,
+ "start_time": 1662703200,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "640378708804338054",
+ "title": "世嘉 VOCALOID 初音未来 ∞礼服Ver. 景品手办 再版 独家首发",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220530/b88c479976ac33162f658d12959a2111/MKe5xDCKOy.jpg",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220530/b88c479976ac33162f658d12959a2111/WIzEBSkANE.png",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220530/b88c479976ac33162f658d12959a2111/R0PT8fvVsu.jpg",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220530/b88c479976ac33162f658d12959a2111/bfaauwzc0F.jpg",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220530/b88c479976ac33162f658d12959a2111/9UDyJkhjaA.jpg",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220530/b88c479976ac33162f658d12959a2111/ZFkov947WL.jpg",
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220530/b88c479976ac33162f658d12959a2111/MKe5xDCKOy.jpg"
+ ],
+ "price": {
+ "origin": 26160,
+ "promotion": null
+ },
+ "inventory": {
+ "available_num": 1,
+ "used_num": 0,
+ "surplus_num": 1
+ },
+ "user_type": 2,
+ "exchange_limit_type": 2,
+ "exchange_limit_num": 1,
+ "start_time": 1662703200,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "650284831695011033",
+ "title": "初音手办-会员购7.2折券",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220923/b88c479976ac33162f658d12959a2111/KAeQDqSGMy.jpg",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220923/b88c479976ac33162f658d12959a2111/KAeQDqSGMy.jpg"
+ ],
+ "price": {
+ "origin": 500,
+ "promotion": {
+ "price": 10,
+ "type": 2,
+ "discount": 0,
+ "label": "秒杀"
+ }
+ },
+ "inventory": {
+ "available_num": 7387,
+ "used_num": 2431,
+ "surplus_num": 4956
+ },
+ "user_type": 2,
+ "exchange_limit_type": 4,
+ "exchange_limit_num": 1,
+ "start_time": 1664193600,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ },
+ {
+ "base": {
+ "token": "589270952563569575",
+ "title": "QQ超级会员7天卡",
+ "picture": "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/nTB809PW5i.png",
+ "rotation_pictures": [
+ "https://i0.hdslb.com/bfs/activity-plat/static/20220809/b88c479976ac33162f658d12959a2111/nTB809PW5i.png"
+ ],
+ "price": {
+ "origin": 2880,
+ "promotion": null
+ },
+ "inventory": {
+ "available_num": 1279,
+ "used_num": 29,
+ "surplus_num": 1250
+ },
+ "user_type": 2,
+ "exchange_limit_type": 3,
+ "exchange_limit_num": 1,
+ "start_time": 1655049600,
+ "end_time": 1672502399,
+ "state": 2
+ }
+ }
+ ],
+ "current_ts": 1665149272
+ }
+}
+```
+
+
+
+### 大积分改变记录
+
+> https://api.bilibili.com/x/vip_point/list
+
+_请求方式:GET_
+
+认证方式:Cookie (SESSDATA) / access_key
+
+**url 参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ----------- | ---- | -------------- | ------------ | ------------------------------------------------------------- |
+| access_key | str | APP 登录 Token | APP 方式必要 | |
+| change_type | num | 改变类型 | 非必要 | 默认 `0` 0:所有类型 1:获取记录 2:消耗记录 |
+| pn | num | 分页页数 | 非必要 | 默认 `1` |
+| ps | num | 分页大小 | 非必要 | 默认 `20` |
+
+**json 回复:**
+
+根对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ----------------------------- |
+| code | num | 响应码 | 0:成功 -101:账号未登录 |
+| message | str | 0 | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| -------------- | ----- | ------------ | ----------------------------- |
+| total | num | 总记录数 | |
+| big_point_list | array | 积分记录数组 | 不存在时为 null,而不是空数组 |
+
+`data.big_point_list` 数组中的对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| ----------- | ---- | -------------------- | ---------------------- |
+| point | num | 改变的积分数 | 消耗为负数 |
+| change_time | num | 改变时间戳 | 秒 |
+| remark | str | 批注,积分改变的原因 | |
+| order_no | str | 编号 | |
+| image_url | str | 商品图片 | 消耗时存在,获取时为空 |
+
+**示例:**
+
+web 方式:
+
+```shell
+curl 'https://api.bilibili.com/x/vip_point/list?ps=1&pn=1' \
+ -b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "total": 1,
+ "big_point_list": [
+ {
+ "point": 40,
+ "change_time": 1669782576,
+ "remark": "观看任意正片内容",
+ "order_no": "t-s-c-5228025310",
+ "image_url": ""
+ }
+ ]
+ }
+}
+```
+
+
diff --git a/docs/vip/clockin.md b/docs/vip/clockin.md
new file mode 100644
index 0000000..6927ae4
--- /dev/null
+++ b/docs/vip/clockin.md
@@ -0,0 +1,60 @@
+# 大会员签到
+
+## 大积分签到
+
+> https://api.bilibili.com/pgc/activity/score/task/sign
+
+*请求方式:POST*
+
+认证方式:Cookie (SESSDATA) / access_key
+
+Cookie 鉴权方式下需要满足以下条件:
+- `Referer`在`*.bilibili.com`域名下
+- `SESSDATA` 需要进行 url 编码,即 `,` 替换为 `%2C`
+
+**正文参数( application/x-www-form-urlencoded ):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ---------- | ---- | ----------------------- | -------------- | ---- |
+| access_key | str | APP登录Token | APP方式必要 | |
+| csrf | str | CSRF Token (位于cookie) | 非必要 | |
+
+**json回复:**
+
+根对象:
+
+| 字段名 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------------------ |
+| code | num | 响应码 | 0:成功 -101:账号未登录 -401:非法访问 -403:访问权限不足 |
+| message | str | 错误信息 | |
+
+**示例:**
+
+web 方式:
+
+```shell
+curl 'https://api.bilibili.com/pgc/activity/score/task/sign' \
+ --data-urlencode 'csrf=xxx' \
+ -b 'SESSDATA=xxx' \
+ --referer 'https://www.bilibili.com'
+```
+
+APP 方式:
+
+```shell
+curl 'https://api.bilibili.com/pgc/activity/score/task/sign' \
+ --data-urlencode 'access_key=xxx'
+```
+
+
+查看响应示例:
+
+
+```json
+{
+ "code": 0,
+ "message": "success"
+}
+```
+
+
diff --git a/docs/vip/info.md b/docs/vip/info.md
new file mode 100644
index 0000000..3fc4611
--- /dev/null
+++ b/docs/vip/info.md
@@ -0,0 +1,431 @@
+# 大会员信息
+
+## 卡券状态查询
+
+> https://api.bilibili.com/x/vip/privilege/my
+
+*请求方式:GET*
+
+认证方式:Cookie (SESSDATA) / access_key
+
+**json回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ------------------------------------------------- |
+| code | num | 返回值 | -101:账号未登录 -400:请求错误 0:成功 |
+| message | str | 错误信息 | |
+| ttl | num | 1 | |
+| data | obj | 信息本体 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---------------- | ----- | ---------------------- | ------------------- |
+| list | array | 卡券信息列表 | |
+| is_short_vip | bool | (?) | |
+| is_freight_open | bool | (?) | |
+| level | num | 当前等级 | |
+| cur_exp | num | 当前拥有经验值 | |
+| next_exp | num | 升级所需经验值 | 满级时为 -1 |
+| is_vip | bool | 是否为大会员 | |
+| is_senior_member | num | 是否为硬核会员 | |
+| format060102 | num | (?) | 格式为`YYMMDD`,意义不明 |
+| is_overdue_vip | bool | 大会员是否过期 | |
+| vip_status | num | 会员状态 | 0:无 1:有 |
+| vip_type | num | 会员类型 | 0:无 1:月大会员 2:年度及以上大会员 |
+| keeptime_end | num | 大会员当前阶段过期时间 | 秒级时间戳 |
+| vip_due_date | num | 大会员过期时间 | 秒级时间戳 |
+| vip_is_annual | bool | 是否为年度及以上大会员 | |
+| vip_is_month | bool | 是否为月大会员 | |
+| vip_is_new_user | bool | 是否为大会员新用户 | |
+| bind_phone | str | 绑定的手机号 | 星号隐藏部分信息 |
+| taobao_account | 有效时:obj 无效时:null | 绑定的淘宝账号 | |
+
+`list`数组:
+
+| 索引 | 类型 | 内容 | type | 备注 |
+| ---- | ---- | -------------------------------- | ---- | ------------------------------- |
+| 0 | obj | B币兑换状态 | 1 | |
+| 1 | obj | 会员购优惠券兑换状态 | 2 | |
+| 2 | obj | 漫画福利券兑换状态 | 3 | |
+| 3 | obj | 会员购包邮券兑换状态 | 4 | |
+| 4 | obj | 漫画商城优惠券兑换状态 | 5 | |
+| 5 | obj | 装扮体验卡兑换状态 | 6 | |
+| 6 | obj | 课堂优惠券兑换状态 | 7 | |
+| 7 | obj | (~~王者荣耀~~)游戏礼盒兑换状态 | 8 | 每日可领取,目前 state 固定为 1 |
+| 8 | obj | 每日 10 经验领取状态 | 9 | 每日可领取,未完成时 state 为 2 |
+
+`list`数组中的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ---- | -------------------- | ----------------------------------------------------- |
+| type | num | 卡券类型 | 详见 `list` 数组表格中的 `type` 项 |
+| state | num | 兑换状态 | 0:未兑换 1:已兑换 2:未完成(若需要完成) |
+| expire_time | num | 本轮卡券过期时间戳 | 当月月底/当日24点 |
+| vip_type | num | 当前用户的大会员状态 | 2:年度大会员 |
+| next_receive_days | num | 距下一轮兑换剩余天数 | 无权限时,每月任务固定为 0,每日固定为 1 |
+| period_end_unix | num | 下一轮兑换开始时间戳 | 秒级时间戳 |
+
+**注意:**
+
+卡券除每日可领取(`type` 为 `8` 和 `9`)的,其他可通过 [https://api.bilibili.com/x/vip/privilege/receive](./action.md#兑换卡券) 领取
+
+每日 10 经验领取(`type` 为 `9`)需要完成视频观看,未完成的 `state` 为 2。
+
+**示例:**
+
+```shell
+curl 'https://api.bilibili.com/x/vip/privilege/my' \
+ -b "SESSDATA=xxx"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "list": [
+ {
+ "type": 1,
+ "state": 0,
+ "expire_time": 0,
+ "vip_type": 2,
+ "next_receive_days": 29,
+ "period_end_unix": 1747584000,
+ "is_count": true,
+ "name": "",
+ "coupon_code": "",
+ "app_describe": "",
+ "recive_state": 1,
+ "salary_type": 0,
+ "exp_params": {
+ "exp_group_tag": "59534,45476",
+ "hit_value": 2
+ },
+ "extra_params": null
+ },
+ {
+ "type": 2,
+ "state": 0,
+ "expire_time": 0,
+ "vip_type": 2,
+ "next_receive_days": 29,
+ "period_end_unix": 1747584000,
+ "is_count": true,
+ "name": "",
+ "coupon_code": "",
+ "app_describe": "",
+ "recive_state": 1,
+ "salary_type": 0,
+ "exp_params": {
+ "exp_group_tag": "",
+ "hit_value": 0
+ },
+ "extra_params": null
+ },
+ {
+ "type": 3,
+ "state": 0,
+ "expire_time": 0,
+ "vip_type": 2,
+ "next_receive_days": 29,
+ "period_end_unix": 1747584000,
+ "is_count": true,
+ "name": "",
+ "coupon_code": "",
+ "app_describe": "",
+ "recive_state": 1,
+ "salary_type": 0,
+ "exp_params": {
+ "exp_group_tag": "",
+ "hit_value": 0
+ },
+ "extra_params": null
+ },
+ {
+ "type": 4,
+ "state": 0,
+ "expire_time": 0,
+ "vip_type": 2,
+ "next_receive_days": 29,
+ "period_end_unix": 1747584000,
+ "is_count": true,
+ "name": "",
+ "coupon_code": "",
+ "app_describe": "",
+ "recive_state": 1,
+ "salary_type": 0,
+ "exp_params": {
+ "exp_group_tag": "",
+ "hit_value": 0
+ },
+ "extra_params": null
+ },
+ {
+ "type": 5,
+ "state": 0,
+ "expire_time": 0,
+ "vip_type": 2,
+ "next_receive_days": 29,
+ "period_end_unix": 1747584000,
+ "is_count": true,
+ "name": "",
+ "coupon_code": "",
+ "app_describe": "",
+ "recive_state": 1,
+ "salary_type": 0,
+ "exp_params": {
+ "exp_group_tag": "",
+ "hit_value": 0
+ },
+ "extra_params": null
+ },
+ {
+ "type": 6,
+ "state": 0,
+ "expire_time": 0,
+ "vip_type": 2,
+ "next_receive_days": 29,
+ "period_end_unix": 1747584000,
+ "is_count": true,
+ "name": "",
+ "coupon_code": "",
+ "app_describe": "",
+ "recive_state": 1,
+ "salary_type": 0,
+ "exp_params": {
+ "exp_group_tag": "",
+ "hit_value": 0
+ },
+ "extra_params": null
+ },
+ {
+ "type": 7,
+ "state": 0,
+ "expire_time": 0,
+ "vip_type": 2,
+ "next_receive_days": 29,
+ "period_end_unix": 1747584000,
+ "is_count": true,
+ "name": "",
+ "coupon_code": "",
+ "app_describe": "",
+ "recive_state": 1,
+ "salary_type": 0,
+ "exp_params": {
+ "exp_group_tag": "",
+ "hit_value": 0
+ },
+ "extra_params": null
+ },
+ {
+ "type": 14,
+ "state": 0,
+ "expire_time": 0,
+ "vip_type": 2,
+ "next_receive_days": 29,
+ "period_end_unix": 1747584000,
+ "is_count": true,
+ "name": "",
+ "coupon_code": "",
+ "app_describe": "",
+ "recive_state": 1,
+ "salary_type": 0,
+ "exp_params": {
+ "exp_group_tag": "59534,45476",
+ "hit_value": 2
+ },
+ "extra_params": null
+ },
+ {
+ "type": 15,
+ "state": 0,
+ "expire_time": 0,
+ "vip_type": 2,
+ "next_receive_days": 29,
+ "period_end_unix": 1747584000,
+ "is_count": true,
+ "name": "",
+ "coupon_code": "",
+ "app_describe": "",
+ "recive_state": 1,
+ "salary_type": 0,
+ "exp_params": {
+ "exp_group_tag": "",
+ "hit_value": 0
+ },
+ "extra_params": null
+ },
+ {
+ "type": 16,
+ "state": 0,
+ "expire_time": 0,
+ "vip_type": 2,
+ "next_receive_days": 29,
+ "period_end_unix": 1747584000,
+ "is_count": true,
+ "name": "",
+ "coupon_code": "",
+ "app_describe": "",
+ "recive_state": 1,
+ "salary_type": 0,
+ "exp_params": {
+ "exp_group_tag": "",
+ "hit_value": 0
+ },
+ "extra_params": null
+ },
+ {
+ "type": 17,
+ "state": 0,
+ "expire_time": 0,
+ "vip_type": 2,
+ "next_receive_days": 29,
+ "period_end_unix": 1747584000,
+ "is_count": true,
+ "name": "",
+ "coupon_code": "",
+ "app_describe": "",
+ "recive_state": 1,
+ "salary_type": 0,
+ "exp_params": {
+ "exp_group_tag": "",
+ "hit_value": 0
+ },
+ "extra_params": null
+ },
+ {
+ "type": 18,
+ "state": 0,
+ "expire_time": 0,
+ "vip_type": 2,
+ "next_receive_days": 0,
+ "period_end_unix": 0,
+ "is_count": true,
+ "name": "",
+ "coupon_code": "",
+ "app_describe": "",
+ "recive_state": 1,
+ "salary_type": 1,
+ "exp_params": {
+ "exp_group_tag": "",
+ "hit_value": 0
+ },
+ "extra_params": null
+ },
+ {
+ "type": 19,
+ "state": 0,
+ "expire_time": 0,
+ "vip_type": 2,
+ "next_receive_days": 0,
+ "period_end_unix": 0,
+ "is_count": false,
+ "name": "",
+ "coupon_code": "",
+ "app_describe": "",
+ "recive_state": 1,
+ "salary_type": 1,
+ "exp_params": {
+ "exp_group_tag": "",
+ "hit_value": 0
+ },
+ "extra_params": {
+ "is_allowe_receive": "true",
+ "is_show": "true",
+ "last_salary_time": "0",
+ "now": "1745138836"
+ }
+ },
+ {
+ "type": 20,
+ "state": 0,
+ "expire_time": 0,
+ "vip_type": 2,
+ "next_receive_days": 0,
+ "period_end_unix": 0,
+ "is_count": false,
+ "name": "",
+ "coupon_code": "",
+ "app_describe": "",
+ "recive_state": 1,
+ "salary_type": 1,
+ "exp_params": {
+ "exp_group_tag": "",
+ "hit_value": 0
+ },
+ "extra_params": {
+ "is_allowe_receive": "false",
+ "is_show": "false",
+ "last_salary_time": "0",
+ "now": "1745138836"
+ }
+ },
+ {
+ "type": 8,
+ "state": 1,
+ "expire_time": 1745164800,
+ "vip_type": 2,
+ "next_receive_days": 1,
+ "period_end_unix": 1745164800,
+ "is_count": true,
+ "name": "",
+ "coupon_code": "",
+ "app_describe": "",
+ "recive_state": 2,
+ "salary_type": 1,
+ "exp_params": {
+ "exp_group_tag": "",
+ "hit_value": 0
+ },
+ "extra_params": null
+ },
+ {
+ "type": 9,
+ "state": 0,
+ "expire_time": 1745164800,
+ "vip_type": 2,
+ "next_receive_days": 1,
+ "period_end_unix": 1745164800,
+ "is_count": false,
+ "name": "",
+ "coupon_code": "",
+ "app_describe": "",
+ "recive_state": 1,
+ "salary_type": 0,
+ "exp_params": {
+ "exp_group_tag": "",
+ "hit_value": 0
+ },
+ "extra_params": null
+ }
+ ],
+ "is_short_vip": false,
+ "is_freight_open": true,
+ "level": 6,
+ "cur_exp": 34424,
+ "next_exp": -1,
+ "is_vip": true,
+ "is_senior_member": 1,
+ "format060102": 250418,
+ "is_overdue_vip": false,
+ "vip_status": 1,
+ "vip_type": 2,
+ "keeptime_end": 1747584000,
+ "vip_due_date": 1832083200,
+ "vip_is_annual": true,
+ "vip_is_month": false,
+ "vip_is_new_user": false,
+ "bind_phone": "138****0000",
+ "taobao_account": null
+ }
+}
+```
+
+
diff --git a/docs/wallet/info.md b/docs/wallet/info.md
new file mode 100644
index 0000000..24f02c3
--- /dev/null
+++ b/docs/wallet/info.md
@@ -0,0 +1,83 @@
+# 基本信息
+
+## 获取用户钱包
+
+> https://pay.bilibili.com/paywallet/wallet/getUserWallet
+
+*请求方法: POST*
+
+认证方式: Cookie (SESSDATA) (注意 `,` `*` 需要 URL 转义)
+
+**正文参数 (application/json):**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------------ | ---- | -------- | ------ | ---------------------- |
+| panelType | num | 面板类型 | 不必要 | 默认为 3 |
+| platformType | num | 平台类型 | 必要 | 任意有效数字, 默认为 3 |
+| timestamp | num | 当前时间 | 不必要 | UNIX 毫秒时间戳 |
+| traceId | num | 追踪 ID | 不必要 | 与 timestamp 值相同 |
+| version | str | 版本 | 不必要 | 默认 `1.0` |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ------- | ---- | -------- | ---- |
+| code | num | 返回值 | 0: 成功 8006000004: 缺参 别的错误码在 errno |
+| errno | num | 错误码 | 8006000004: 缺参 800501008: 内部错误(传的不是JSON) 800501007: 用户未登录 |
+| msg | str | 返回信息 | SUCCESS: 成功 否则为错误信息 |
+| showMsg | str | 显示信息 | 成功时为空 |
+| data | obj | 数据本体 | |
+| success | bool | 是否成功 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ----------------- | ---- | ----------- | ---- |
+| mid | num | 用户 mid | |
+| totalBp | num | 总计 B 币 | |
+| defaultBp | num | 默认 B 币? | |
+| iosBp | num | iOS B 币? | |
+| couponBalance | num | 优惠券余额 | |
+| availableBp | num | 可用 B 币 | |
+| unavailableBp | num | 不可用 B 币 | |
+| unavailableReason | str | 不可用原因 | |
+| tip | str | 请XXXXX | 请投币?? |
+| needShowClassBalance | num | 需要显示类余额?? | 1 |
+
+**示例:**
+
+```shell
+curl -X POST 'https://pay.bilibili.com/paywallet/wallet/getUserWallet' \
+--data-raw '{"platformType":"3"}' \
+-H 'content-type: application/json' \
+-b 'SESSDATA=xxx'
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "errno": 0,
+ "msg": "SUCCESS",
+ "showMsg": "",
+ "data": {
+ "mid": 616368979,
+ "totalBp": 0.00,
+ "defaultBp": 0.00,
+ "iosBp": 0.00,
+ "couponBalance": 0,
+ "availableBp": 0.00,
+ "unavailableBp": 0,
+ "unavailableReason": "",
+ "tip": "请XXXXX",
+ "needShowClassBalance": 1
+ },
+ "success": true
+}
+```
+
+
diff --git a/docs/web_widget/404_manga.md b/docs/web_widget/404_manga.md
new file mode 100644
index 0000000..3cab064
--- /dev/null
+++ b/docs/web_widget/404_manga.md
@@ -0,0 +1,321 @@
+# 404页漫画收集
+
+## 视频稿件错误提示图
+
+[https://static.hdslb.com/images/error/no_video.png](https://static.hdslb.com/images/error/no_video.png)
+
+[https://static.hdslb.com/images/error/wait_for_release.png](https://static.hdslb.com/images/error/wait_for_release.png)
+
+[https://static.hdslb.com/images/error/wait_for_review.png](https://static.hdslb.com/images/error/wait_for_review.png)
+
+[https://static.hdslb.com/images/error/no_video_login.png](https://static.hdslb.com/images/error/no_video_login.png)
+
+[https://static.hdslb.com/images/error/video_conflict.png](https://static.hdslb.com/images/error/video_conflict.png)
+
+## static类型
+
+[https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-1.png](https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-1.png)
+
+[https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-2.png](https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-2.png)
+
+[https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-3.png](https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-3.png)
+
+[https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-4.png](https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-4.png)
+
+[https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-5.png](https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-5.png)
+
+[https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-6.png](https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-6.png)
+
+[https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-7.png](https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-7.png)
+
+## dynamic类型
+
+以下内容爬取自接口`https://api.bilibili.com/x/activity/operation/list?source_id=630edcfddbd0b39ca7371ad2&pn=1&ps=5`且进行去重
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171215/o6y3r7or6z.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171215/o6y3r7or6z.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171215/2978n4wwpj.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171215/2978n4wwpj.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171215/697mr4w97k.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171215/697mr4w97k.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171215/1297m40w7j.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171215/1297m40w7j.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171110/697zx5k7p3.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171110/697zx5k7p3.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171110/z4prl744z3.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171110/z4prl744z3.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171110/798z30yro1.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171110/798z30yro1.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171110/890zl5z890.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171110/890zl5z890.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171110/o6y4qnjr3z.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171110/o6y4qnjr3z.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171103/j6q4m9o9k3.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171103/j6q4m9o9k3.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171103/9073x5k78w.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171103/9073x5k78w.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171103/n6xkqmlkr0.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171103/n6xkqmlkr0.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171103/597vq87jxx.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171103/597vq87jxx.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171103/4973p51n10.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171103/4973p51n10.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171103/9073x5084w.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171103/9073x5084w.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171103/397ro5k761.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171103/397ro5k761.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171103/597vq8kwxk.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171103/597vq8kwxk.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171103/697wr522nn.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171103/697wr522nn.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171103/n6xkqm5wjp.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171103/n6xkqm5wjp.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171103/k7rwnj474r.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171103/k7rwnj474r.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171103/397rokjopp.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171103/397rokjopp.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171103/9073xqk97w.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171103/9073xqk97w.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171103/4973pln894.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171103/4973pln894.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/l61j9zw8qm.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/l61j9zw8qm.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/o6kmv3r2w5.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/o6kmv3r2w5.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/396mxjn5mq.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/396mxjn5mq.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/k7z6myrz2v.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/k7z6myrz2v.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/y4xzkn6y09.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/y4xzkn6y09.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/y4xzkn1ryz.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/y4xzkn1ryz.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/z4y06on3mm.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/z4y06on3mm.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/j6y5nx3wjw.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/j6y5nx3wjw.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/m62ko1j4j8.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/m62ko1j4j8.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/p6lnm09plj.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/p6lnm09plj.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/z4y06mm37l.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/z4y06mm37l.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/n6jl5yq9yp.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/n6jl5yq9yp.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/x60yjknjzw.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/x60yjknjzw.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/o6kmvzp2pz.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/o6kmvzp2pz.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/p6lnm169w7.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/p6lnm169w7.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/029jozv8jp.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/029jozv8jp.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/126kq1owy3.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/126kq1owy3.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/596ox53lzp.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/596ox53lzp.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/p6lnm1p94x.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/p6lnm1p94x.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/k7z6mv4ryr.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/k7z6mv4ryr.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/l61j9jzwvm.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/l61j9jzwvm.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20171017/496nrnmz9x.png](https://i0.hdslb.com/bfs/activity-plat/cover/20171017/496nrnmz9x.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170626/q0r1q5o63q.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170626/q0r1q5o63q.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170626/39l7rjmxl5.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170626/39l7rjmxl5.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170626/q0r1q51434.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170626/q0r1q51434.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170626/n6oxk2onql.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170626/n6oxk2onql.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170626/y46oqn1lj9.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170626/y46oqn1lj9.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170626/49m73k2r1x.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170626/49m73k2r1x.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170626/90r73kv75y.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170626/90r73kv75y.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170522/39lv2lxqnp.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170522/39lv2lxqnp.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170522/r9v5j96lk4.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170522/r9v5j96lk4.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170522/z45lr4vmk3.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170522/z45lr4vmk3.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/m66kmm08q8.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/m66kmm08q8.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/z440ww0xox.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/z440ww0xox.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/l66jllq8kq.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/l66jllq8kq.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170522/12j0zwpp5l.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170522/12j0zwpp5l.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/m66kmm8w78.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/m66kmm8w78.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/399m88l87m.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/399m88l87m.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/n66lnnmqjj.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/n66lnnmqjj.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170522/m6nz424xn9.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170522/m6nz424xn9.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/122k334q84.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/122k334q84.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/900vooj8xw.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/900vooj8xw.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/o66mooowy6.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/o66mooowy6.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/k776kkw10o.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/k776kkw10o.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/499njjrv79.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/499njjrv79.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/y44zww9mz9.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/y44zww9mz9.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/m66km4xz6p.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/m66km4xz6p.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/499njw4m17.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/499njw4m17.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/122k3zlm7j.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/122k3zlm7j.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/l66jl28oqq.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/l66jl28oqq.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/w44xw048k8.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/w44xw048k8.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/j665jz9j5v.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/j665jz9j5v.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/699pl2484w.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/699pl2484w.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/x66y3r2nyo.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/x66y3r2nyo.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/122k3z3lp3.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/122k3z3lp3.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/cover/20170511/w44xw6r98w.png](https://i0.hdslb.com/bfs/activity-plat/cover/20170511/w44xw6r98w.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/moCBusxHG2.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/moCBusxHG2.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/LJjOhuzi2l.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/LJjOhuzi2l.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/fzjTcKtbOA.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/fzjTcKtbOA.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/PEXod21DmE.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/PEXod21DmE.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/5NYt7b0jWy.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/5NYt7b0jWy.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/I6DotAbsU0.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/I6DotAbsU0.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/VZkCQV3H8N.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/VZkCQV3H8N.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/pMst3j1Wh2.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/pMst3j1Wh2.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/FFBsId9kkU.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/FFBsId9kkU.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/j8PQollWgb.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/j8PQollWgb.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/CvPAnLwfLB.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/CvPAnLwfLB.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/86Og1GMuE6.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/86Og1GMuE6.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/4gKxYMNEd7.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/4gKxYMNEd7.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/VUahg7oVIp.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/VUahg7oVIp.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/0Wp3GSTqa2.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/0Wp3GSTqa2.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/GI167h1ubu.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/GI167h1ubu.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/abiv2iRJiN.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/abiv2iRJiN.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/vocgKB4Bjl.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/vocgKB4Bjl.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/6cLRxO9RkR.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/6cLRxO9RkR.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/aoqhUIvZ3x.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/aoqhUIvZ3x.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/zRespfCkmo.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/zRespfCkmo.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/3wdVaSoWjI.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/3wdVaSoWjI.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/XywNN8KlpA.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/XywNN8KlpA.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/Yg8QV17GKZ.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/Yg8QV17GKZ.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/h4ytfrWZID.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/h4ytfrWZID.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/J8BB0k7uKM.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/J8BB0k7uKM.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/i8sLpoa4Wn.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/i8sLpoa4Wn.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/XHhqvtddUA.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/XHhqvtddUA.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/hr97jf0KpZ.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/hr97jf0KpZ.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/DUmMBOlW5E.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/DUmMBOlW5E.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/dKua3o3HRw.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/dKua3o3HRw.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/f1BYK2oCwp.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/f1BYK2oCwp.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/els4Nwd0F6.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/els4Nwd0F6.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/PSI3OAv9Hs.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/PSI3OAv9Hs.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/JGrXDA8RKH.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/JGrXDA8RKH.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/wT6pn2O18p.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/wT6pn2O18p.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/Okx4iJ1PLv.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/Okx4iJ1PLv.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/8Ri6Xlk826.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/8Ri6Xlk826.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/nNEBpbZlI0.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/nNEBpbZlI0.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/HtPXYfpuXU.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/HtPXYfpuXU.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/Wwzw0XTwUl.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/Wwzw0XTwUl.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/E738vcDvd3.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/E738vcDvd3.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/dFQfkypPWA.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/dFQfkypPWA.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/hinEAw6Abq.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/hinEAw6Abq.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/KNH7Hz104m.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/KNH7Hz104m.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/2ETVB2F8Pq.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/2ETVB2F8Pq.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/Bk5vekQZoa.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/Bk5vekQZoa.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/IcRizWqXCq.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/IcRizWqXCq.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/jvNq7sSxAT.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/jvNq7sSxAT.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/laYMWQCnnY.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/laYMWQCnnY.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/I2ep6rPv8i.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/I2ep6rPv8i.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/HKynZO2AxL.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/HKynZO2AxL.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/dtYHFq8LIq.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/dtYHFq8LIq.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/egQQvfxwvY.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/egQQvfxwvY.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/duwQurWqyy.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/duwQurWqyy.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/wqP0BMH8vp.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/wqP0BMH8vp.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/00FlTw9i50.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/00FlTw9i50.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/V8wFvnEm3T.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/V8wFvnEm3T.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/VrYZXfmehY.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/VrYZXfmehY.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/QBchCuhVFr.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/QBchCuhVFr.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/hJo8sPKDkj.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/hJo8sPKDkj.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/JnqnvZTKxf.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/JnqnvZTKxf.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/0gu9qonH7t.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/0gu9qonH7t.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/aA5e4coXVQ.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/aA5e4coXVQ.png)
+
+[https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/UM9bnucVhq.png](https://i0.hdslb.com/bfs/activity-plat/static/2cf2b9af5d3c5781d611d6e36f405144/UM9bnucVhq.png)
\ No newline at end of file
diff --git a/docs/web_widget/header.md b/docs/web_widget/header.md
new file mode 100644
index 0000000..7543697
--- /dev/null
+++ b/docs/web_widget/header.md
@@ -0,0 +1,133 @@
+# 首页横幅头图
+
+## 获取方法
+
+- ❎ 关注 UP 主 [壁纸喵](https://space.bilibili.com/6823116) 获取静态图片
+
+- ✅ 通过主页获取头图接口获取静态图片与各部分及其动态偏移信息
+
+## 获取首页头图
+
+> https://api.bilibili.com/x/web-show/page/header
+
+*请求方式: GET*
+
+**URL参数:**
+
+| 参数名 | 类型 | 内容 | 必要性 | 备注 |
+| ------ | ---- | -------- | ------ | ---- |
+| resource_id | num | 资源 ID? | 必要 | 默认为 `142`, 实测可为任意有效整数 |
+
+**JSON回复:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -- | -- | -- | -- |
+| code | num | 返回值 | 0: 成功 |
+| message | str | 错误信息 | 默认为 0 |
+| ttl | str | 1 | |
+| data | obj | 信息本体 | |
+
+`data` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -- | -- | -- | -- |
+| name | str | 空 | |
+| pic | str | 静态头图 URL | |
+| litpic | str | bilibili logo URL | |
+| url | str | 空 | |
+| is_split_layer | str | 是否分层 | 1: 是 |
+| split_layer | str | 分层信息 | 一个套在字符串里的 JSON 对象 |
+
+`data` 对象中的`split_layer` 字符串里的 JSON 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -- | -- | -- | -- |
+| version | str | 版本号 | 目前为 `1` |
+| layers | array | 层信息 | |
+
+`split_layer` 字符串里的 JSON 对象中的 `layers` 数组:
+
+| 项 | 类型 | 内容 | 备注 |
+| -- | -- | -- | -- |
+| 0 | obj | 第 1 个层信息 | |
+| 2 | obj | 第 3 个层信息 | |
+| 1 | obj | 第 2 个层信息 | |
+| …… | obj | …… | |
+| n | obj | 第 (n+1) 个层信息 | |
+
+`split_layer` 字符串里的 JSON 对象中的 `layers` 数组里的对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -- | -- | -- | -- |
+| resources | obj | 图层资源 | |
+| scale | obj | 缩放信息 | |
+| rotate | obj | 路径? | 空 |
+| translate | obj | 偏移信息 | |
+| blur | obj | 模糊信息? | 空 |
+| opacity | obj | 不透明度? | 内容 `wrap` 为 `clamp` |
+| id | num | 层 ID | 似乎即图层索引 |
+| name | str | 层名称 | |
+
+`layers` 数组里的对象中的 `resources` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -- | -- | -- | -- |
+| src | str | 图层 URL | |
+| id | num | 0 | |
+
+`layers` 数组里的对象中的 `scale` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -- | -- | -- | -- |
+| initial | num | 初始缩放值? | |
+| offset | num | 缩放偏移值? | 部分层无此项 |
+
+`layers` 数组里的对象中的 `translate` 对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| -- | -- | -- | -- |
+| offset | array | 偏移值? | `[x, y]`? 部分层无此项 |
+
+**示例:**
+
+获取 `Sat, 03 Aug 2024 01:41:35 GMT` 时刻的 B 站首页头图
+
+```shell
+curl -G "https://api.bilibili.com/x/web-show/page/header" \
+--data-urlencode "resource_id=142"
+```
+
+
+查看响应示例:
+
+```json
+{
+ "code": 0,
+ "message": "0",
+ "ttl": 1,
+ "data": {
+ "name": "",
+ "pic": "http://i0.hdslb.com/bfs/archive/e5b7fca0c001cbe0b77a2956e4c861d9f19c4575.png",
+ "litpic": "http://i0.hdslb.com/bfs/archive/c8fd97a40bf79f03e7b76cbc87236f612caef7b2.png",
+ "url": "",
+ "is_split_layer": 1,
+ "split_layer": "{\"version\":\"1\",\"layers\":[{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/75ec2d45ce8c942a1f7379d4641171da4d90ab0d.png\",\"id\":0}],\"scale\":{\"initial\":0.54},\"rotate\":{},\"translate\":{},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":0,\"name\":\"19-背景水\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/286eb259a60a0eabfcde96d7ea92d239fe68b3fe.png\",\"id\":0}],\"scale\":{\"initial\":0.53},\"rotate\":{},\"translate\":{\"offset\":[10,0]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":1,\"name\":\"18-再远景\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/782d55aeca6cc75f51d2d630005f514a61a0ddfa.png\",\"id\":0}],\"scale\":{\"initial\":0.55},\"rotate\":{},\"translate\":{\"offset\":[10,0]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":3,\"name\":\"16-远景房子1\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/d6c941cf2d5fc6c717173f7e3f166dbc444aa15b.png\",\"id\":0}],\"scale\":{\"initial\":0.52},\"rotate\":{},\"translate\":{\"offset\":[30,0]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":4,\"name\":\"15-两侧房子\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/27e411d92729604aa594858beb5130ed60aad76d.png\",\"id\":0}],\"scale\":{\"initial\":0.55,\"offset\":0.2},\"rotate\":{},\"translate\":{\"offset\":[30,0]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":2,\"name\":\"17-远景鲸鱼机\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/09d0855b6b6d6965e8f02404777986237848c6c9.png\",\"id\":0}],\"scale\":{\"initial\":0.52},\"rotate\":{},\"translate\":{\"offset\":[300,10]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":5,\"name\":\"14-中景鲸鱼机\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/40878bbef514e2d4bf5d660fe1145c869567bec2.png\",\"id\":0}],\"scale\":{\"initial\":0.52},\"rotate\":{},\"translate\":{\"offset\":[20,0]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":6,\"name\":\"13-窗外垃圾\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/42485baddbca05d2c4c7710a0b76b74d303e06d7.png\",\"id\":0}],\"scale\":{\"initial\":0.54},\"rotate\":{},\"translate\":{\"offset\":[80,0]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":7,\"name\":\"12-机场\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/8ea0e95a8e5fc85ae227810925dba1ace1e9fcba.png\",\"id\":0}],\"scale\":{\"initial\":0.52},\"rotate\":{},\"translate\":{\"offset\":[120,0]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":8,\"name\":\"11-空姐\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/c13ca9c6405c71bf864ed2bc421680cb437f45ef.png\",\"id\":0}],\"scale\":{\"initial\":0.52},\"rotate\":{},\"translate\":{\"offset\":[80,40]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":9,\"name\":\"10-泡泡04\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/a43c6833d262301373234ffbd6934559d2ce7fb2.png\",\"id\":0}],\"scale\":{\"initial\":0.52},\"rotate\":{},\"translate\":{\"offset\":[100,50]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":10,\"name\":\"09-泡泡03\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/ce8c5e45230a6d3805baf60f5916f1cd441aac8e.png\",\"id\":0}],\"scale\":{\"initial\":0.54},\"rotate\":{},\"translate\":{\"offset\":[130,0]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":11,\"name\":\"08-22\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/cbf19f3682dfb02e62557d07fefaf241a80296a1.png\",\"id\":0}],\"scale\":{\"initial\":0.52},\"rotate\":{},\"translate\":{\"offset\":[200,0]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":12,\"name\":\"07-近路人\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/4a4c1f6b2977478c73e41f39a2910c3b3c33167e.webm\",\"id\":0}],\"scale\":{\"initial\":0.5},\"rotate\":{},\"translate\":{\"initial\":[1000,0],\"offset\":[20,0]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":21,\"name\":\"右气泡\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/7998ca9f0bc267375fb7b45f75626d96806f94d7.png\",\"id\":0}],\"scale\":{\"initial\":0.52},\"rotate\":{},\"translate\":{\"offset\":[300,0]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":13,\"name\":\"06-两侧前景植物\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/198efffbc58493300854c04ab0ea8d979a6f9223.png\",\"id\":0}],\"scale\":{\"initial\":0.52},\"rotate\":{},\"translate\":{\"offset\":[280,0]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":15,\"name\":\"04-顶部摸鱼牌子\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/142a486b8dd500a626a60b68ad993af8dabc8b55.png\",\"id\":0}],\"scale\":{\"initial\":0.52},\"rotate\":{},\"translate\":{\"offset\":[300,130]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":16,\"name\":\"03-泡泡02\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/bb6266e1525a51f7920fc8881e47cadeee271b0c.png\",\"id\":0}],\"scale\":{\"initial\":0.52},\"rotate\":{},\"translate\":{\"initial\":[200,0],\"offset\":[350,20]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":17,\"name\":\"02-泡泡01\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/cd68251cde11936871237ca94360acb451bf7ed2.png\",\"id\":0}],\"scale\":{\"initial\":0.52},\"rotate\":{},\"translate\":{\"initial\":[-200,0],\"offset\":[500,0]},\"blur\":{},\"opacity\":{\"initial\":0.5,\"wrap\":\"clamp\"},\"id\":18,\"name\":\"01-光\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/426073f920477b718b8aee5ec141aca3889500f7.webm\",\"id\":0}],\"scale\":{\"initial\":0.54},\"rotate\":{},\"translate\":{\"initial\":[400,0],\"offset\":[50,0]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":19,\"name\":\"中气泡\"},{\"resources\":[{\"src\":\"https://i0.hdslb.com/bfs/vc/0de9fb9822d2d00500abc8bdb143907eb1802ddb.webm\",\"id\":0}],\"scale\":{},\"rotate\":{},\"translate\":{\"initial\":[-700,0],\"offset\":[30,0]},\"blur\":{},\"opacity\":{\"wrap\":\"clamp\"},\"id\":20,\"name\":\"左气泡\"}]}",
+ "request_id": "1722649278"
+ }
+}
+```
+
+
+
+## 图层组合处理
+
+- **注意:** 部分图像只包含部分颜色通道, 在创建文件时务必注意!
+
+- 图层既包含静态 PNG 图片,也包含动态 WebM 视频, 此处忽略视频, 按照 `name` 字段前的数字作为顺序, 依次导入 GIMP (你也可以使用其她图像处理软件) , 未进行偏移调整
+
+- 接口提供的静态图片 http://i0.hdslb.com/bfs/archive/e5b7fca0c001cbe0b77a2956e4c861d9f19c4575.png
+
+- 手动导入合成的图片 https://archive.biliimg.com/bfs/archive/dc96f5d4e87a1985fc6085305d737f21f006f6a8.png
+([备链](http://i0.hdslb.com/bfs/new_dyn/510715042e8847b7fd98d8253ca1f61a616368979.png))
diff --git a/web_widget/zone_upload.md b/docs/web_widget/zone_upload.md
similarity index 94%
rename from web_widget/zone_upload.md
rename to docs/web_widget/zone_upload.md
index f24871b..9852dec 100644
--- a/web_widget/zone_upload.md
+++ b/docs/web_widget/zone_upload.md
@@ -1,12 +1,8 @@
# 分区当日投稿数
-- [获取分区当日投稿稿件数](#获取分区当日投稿稿件数)
-
----
-
## 获取分区当日投稿稿件数
-> http://api.bilibili.com/x/web-interface/online
+> https://api.bilibili.com/x/web-interface/online
*请求方式:GET*
@@ -57,7 +53,7 @@
**示例:**
```shell
-curl 'http://api.bilibili.com/x/web-interface/online'
+curl 'https://api.bilibili.com/x/web-interface/online'
```
diff --git a/dynamic/atlist.md b/dynamic/atlist.md
deleted file mode 100644
index ee062e8..0000000
--- a/dynamic/atlist.md
+++ /dev/null
@@ -1,146 +0,0 @@
-# 根据关键字搜索用户(at别人时的填充列表)
-
-**注意关键字不一定顺序匹配,如最后示例**
-
-> http://api.vc.bilibili.com/dynamic_mix/v1/dynamic_mix/at_search
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-**正文参数(multipart/form-data):**
-
-| 参数名 | 类型 | 内容 |
-| --- | --- | --- |
-| uid | num | 自己的uid |
-| keyword | str | 搜索关键字 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 |
-| --- | --- | --- |
-| code | num | 0成功 |
-| msg | str | 成功为空文本 |
-| message | str | 同msg |
-| data | obj | 数据本体 |
-
-data对象:
-
-| 字段 | 类型 | 内容 |
-| --- | --- | --- |
-| groups | obj[] | 内容分组(好像是根据关注列表分) |
-| \_gt_ | num | 0 |
-
-group对象:
-
-| 字段 | 类型 | 内容 |
-| --- | --- | --- |
-| group_type | num | 2:我的关注 4:其他 |
-| group_name | str | 分组名字 |
-| items | obj[] | 用户信息 |
-
-item对象:
-
-| 字段 | 类型 | 内容 |
-| --- | --- | --- |
-| uid | num | 用户id |
-| uname | str | 用户昵称 |
-| face | str | 用户头像url |
-| fans | num | 用户粉丝数 |
-| official_verify_type | num | 认证信息? |
-
-
-查看示例
-
-```shell
-# 搜索关键字:社会易
-curl 'https://api.vc.bilibili.com/dynamic_mix/v1/dynamic_mix/at_search?uid=15858903&keyword=%e7%a4%be%e4%bc%9a%e6%98%93' \
- -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0' -H 'Accept: application/json, text/plain, */*' \
- -H 'Referer: https://t.bilibili.com/' \
- -H 'Cookie: SESSDATA=******'
-```
-
-```json
-{
- "code": 0,
- "msg": "",
- "message": "",
- "data": {
- "groups": [
- {
- "group_type": 2,
- "group_name": "我的关注",
- "items": [
- {
- "uid": 293793435,
- "uname": "社会易姐QwQ",
- "face": "https://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg",
- "fans": 1179,
- "official_verify_type": -1
- }
- ]
- },
- {
- "group_type": 4,
- "group_name": "其他",
- "items": [
- {
- "uid": 250129011,
- "uname": "社会小伙肖子易",
- "face": "https://i0.hdslb.com/bfs/face/2ae12d7f71173baa8e00c4cfe97acb5a3de31566.jpg",
- "fans": 7,
- "official_verify_type": -1
- },
- {
- "uid": 394873001,
- "uname": "社会你易叔",
- "face": "https://i2.hdslb.com/bfs/face/bde2811aa895e349036aba9ece5630bcd1341ff0.jpg",
- "fans": 5,
- "official_verify_type": -1
- },
- {
- "uid": 486568790,
- "uname": "社会主义接班人小易",
- "face": "https://i2.hdslb.com/bfs/face/1ebb0d4aa8e2c4b532f82983503ec38b62a1820f.jpg",
- "fans": 3,
- "official_verify_type": -1
- },
- {
- "uid": 497214639,
- "uname": "社会你易易",
- "face": "https://i0.hdslb.com/bfs/face/dccb52f3c15ba1bb99aac3c86e9825842cc95295.jpg",
- "fans": 2,
- "official_verify_type": -1
- },
- {
- "uid": 496622388,
- "uname": "社会你易哥",
- "face": "https://i0.hdslb.com/bfs/face/daac5514a7622741f767c68b1cbc6b91e60b4798.jpg",
- "fans": 1,
- "official_verify_type": -1
- },
- {
- "uid": 457675287,
- "uname": "易社会",
- "face": "https://i0.hdslb.com/bfs/face/632bf9dd17f4e9f2f12be2c0ad00cdacd2d825fa.jpg",
- "fans": 1,
- "official_verify_type": -1
- },
- {
- "uid": 123270058,
- "uname": "周易社会",
- "face": "https://i1.hdslb.com/bfs/face/c6100396729112230deb3b0972db1504e9ce21bf.jpg",
- "fans": 1,
- "official_verify_type": -1
- }
- ]
- }
- ],
- "_gt_": 0
- }
-}
-```
-
-
\ No newline at end of file
diff --git a/dynamic/delete.md b/dynamic/delete.md
deleted file mode 100644
index c4088be..0000000
--- a/dynamic/delete.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# 删除动态
-
-> http://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/rm_dynamic
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-**正文参数(multipart/form-data):**
-
-| 参数名 | 类型 | 内容 |
-| --- | --- | --- |
-| dynamic_id | num | 动态id |
-| csrf_token | str | csrf |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 |
-| --- | --- | --- |
-| code | num | 0:成功 |
-| | | 500404:已经删除过 |
-| | | 500406:不是自己的 |
-| msg | str | 错误信息 |
-| message | str | 和msg一样 |
-| data | obj | 未知 |
-
-
-查看示例
-
-```bash
-curl 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/rm_dynamic' \
- -X POST \
- -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0' \
- -H 'Referer: https://t.bilibili.com/' \
- -H 'Cookie: SESSDATA=********; bili_jct=de2731532b4ab96bc8536da948932668;' \
- --data-raw 'dynamic_id=588320531406678918&csrf_token=de2731532b4ab96bc8536da948932668&csrf=de2731532b4ab96bc8536da948932668'
-```
-
-```json
-{"code":0,"msg":"","message":"","data":{"_gt_":0}}
-```
-
-
diff --git a/dynamic/get_dynamic_detail.md b/dynamic/get_dynamic_detail.md
deleted file mode 100644
index 61bbedf..0000000
--- a/dynamic/get_dynamic_detail.md
+++ /dev/null
@@ -1,219 +0,0 @@
-# 获取特定动态卡片信息
-
-> http://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/get_dynamic_detail
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------------ | ---- | ---------- | ------ | -------- |
-| dynamic_id | id | 动态id | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------- |
-| code | num | 返回值 | 0:成功 |
-| data | obj | 信息本体 | |
-| message | str | 错误信息 | 默认为空 |
-| msg | num | 空 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ----- | ---------- | ------------ |
-| card | obj | 动态卡片内容 | 当动态不存在/删除时不返回此项 |
-| result | num | 0 | 作用尚不明确(当动态不存在/删除时不返回此项) |
-| \_gt\_ | num | 0 | 作用尚不明确 |
-
-`data`中的`card`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------- | ---- |
-| activity_infos | obj | 该条动态参与的活动 |当此条动态没有参与任何活动时不显示此项 |
-| card | str | 动态详细信息 | 会跟随此动态类型不同发生一定的变化,评论数、点赞数等相关信息参考`desc`字段 |
-| desc | obj | 动态相关信息 | 会跟随此动态类型不同发生一定的变化,详细信息(例如动态描述等)参考`card`字段 |
-| display | obj | 动态部分的可操作项 | 会随着动态类型发生变化,主要用于显示动态 |
-| extend_json | str | 动态扩展项 | 会随着动态类型发生变化 |
-**此处的大部分字段的内容都会根据`desc`中的`type`值发生一定变化,具体的数值对照参考下表(仅作参考,部分内容的解释未知,同时有些内容仅为在部分页面出现,无法通过此API调出):**
-
-| 值 | 含义 |
-| ---- | ---- |
-| 268435455 | 具体定义未知 |
-| 1 | 转发 |
-| 2 | 图片动态 |
-| 4 | 文字动态 |
-| 8 | 视频动态 |
-| 16 | 小视频 |
-| 32 | 具体定义未知(可能为戏剧) |
-| 64 | 专栏 |
-| 256 | 音频 |
-| 512 | 番剧 |
-| 1024 | 具体定义未知 |
-| 2048 | H5活动动态 |
-| 2049 | 漫画分享 |
-| 4097 | PGC番剧 |
-| 4098 | 电影 |
-| 4099 | 电视剧 |
-| 4100 | 国创动漫 |
-| 4101 | 纪录片 |
-| 4200 | 直播 |
-| 4201 | 直播 |
-| 4300 | 收藏夹 |
-| 4302 | 付费课程 |
-| 4303 | 付费课程 |
-| 4308 | 直播 |
-| 4310 | 合集 |
-| 4311 | 具体定义未知 |
-| 1e3 | 具体定义未知 |
-| 1001 | 具体定义未知 |
-
-**示例:**
-
-获取`哔哩哔哩弹幕网`的动态id为`507420325550127049`动态
-
-```shell
-curl -G 'http://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/get_dynamic_detail' \
---data-urlencode 'dynamic_id=507420325550127049'
-```
-
-
-查看响应示例
-
-```json
-{
- "code": 0,
- "msg": "",
- "message": "",
- "data": {
- "card": {
- "desc": {
- "uid": 8047632,
- "type": 8,
- "rid": 204774719,
- "acl": 0,
- "view": 1182282,
- "repost": 405,
- "like": 31940,
- "is_liked": 0,
- "dynamic_id": 507420325550127049,
- "timestamp": 1616981401,
- "pre_dy_id": 0,
- "orig_dy_id": 0,
- "orig_type": 0,
- "user_profile": {
- "info": {
- "uid": 8047632,
- "uname": "哔哩哔哩弹幕网",
- "face": "https://i0.hdslb.com/bfs/face/f2cb8d9854156e3f26d4c6751d6eeb9c30e21847.jpg"
- },
- "card": {
- "official_verify": {
- "type": 1,
- "desc": "哔哩哔哩弹幕网官方账号 "
- }
- },
- "vip": {
- "vipType": 2,
- "vipDueDate": 1924531200000,
- "vipStatus": 1,
- "themeType": 0,
- "label": {
- "path": "",
- "text": "十年大会员",
- "label_theme": "ten_annual_vip",
- "text_color": "#FFFFFF",
- "bg_style": 1,
- "bg_color": "#FB7299",
- "border_color": ""
- },
- "avatar_subscript": 1,
- "nickname_color": "#FB7299",
- "role": 7,
- "avatar_subscript_url": "https://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
- },
- "pendant": {
- "pid": 3860,
- "name": "2021拜年纪",
- "image": "https://i0.hdslb.com/bfs/garb/item/7f8aa8ef1eed8c2dce0796801ddc82552a4164f9.png",
- "expire": 0,
- "image_enhance": "https://i0.hdslb.com/bfs/garb/item/7f8aa8ef1eed8c2dce0796801ddc82552a4164f9.png",
- "image_enhance_frame": ""
- },
- "rank": "10000",
- "sign": "哔哩哔哩 干杯 - ( ゜- ゜)つロ",
- "level_info": {
- "current_level": 6
- }
- },
- "uid_type": 1,
- "stype": 0,
- "r_type": 1,
- "inner_id": 0,
- "status": 1,
- "dynamic_id_str": "507420325550127049",
- "pre_dy_id_str": "0",
- "orig_dy_id_str": "0",
- "rid_str": "204774719",
- "bvid": "BV1Dh411S7sS"
- },
- "card": "{\"aid\":204774719,\"attribute\":0,\"cid\":316514988,\"copyright\":1,\"ctime\":1616939233,\"desc\":\"2021年3月29日9:30(北京时间),B站在中国香港港交所成功挂牌二次上市。欢迎来到bilibili这座乐园,和超过2亿中国年轻人一起表达自我、拥抱世界。\",\"dimension\":{\"height\":1080,\"rotate\":0,\"width\":1920},\"duration\":290,\"dynamic\":\"\",\"item\":{\"at_control\":\"\"},\"jump_url\":\"bilibili:\\/\\/video\\/204774719\\/?page=1&player_preload=null&player_width=1920&player_height=1080&player_rotate=0\",\"owner\":{\"face\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/face\\/f2cb8d9854156e3f26d4c6751d6eeb9c30e21847.jpg\",\"mid\":8047632,\"name\":\"哔哩哔哩弹幕网\"},\"pic\":\"https:\\/\\/i0.hdslb.com\\/bfs\\/archive\\/bcbcac6560268ef9cbe59fbf759ac28adf5e0432.jpg\",\"player_info\":null,\"pubdate\":1616981400,\"rights\":{\"autoplay\":1,\"bp\":0,\"download\":0,\"elec\":0,\"hd5\":1,\"is_cooperation\":0,\"movie\":0,\"no_background\":0,\"no_reprint\":1,\"pay\":0,\"ugc_pay\":0,\"ugc_pay_preview\":0},\"share_subtitle\":\"已观看24.0万次\",\"short_link\":\"https:\\/\\/b23.tv\\/BV1Dh411S7sS\",\"short_link_v2\":\"https:\\/\\/b23.tv\\/BV1Dh411S7sS\",\"stat\":{\"aid\":204774719,\"coin\":8661,\"danmaku\":744,\"dislike\":0,\"favorite\":6025,\"his_rank\":0,\"like\":31940,\"now_rank\":0,\"reply\":1619,\"share\":2134,\"view\":246956},\"state\":0,\"tid\":207,\"title\":\"欢迎来到2亿年轻人的乐园——bilibili 回香港上市啦!\",\"tname\":\"财经\",\"videos\":1}",
- "extend_json": "{\"\":{\"ogv\":{\"ogv_id\":0}},\"dispute\":{\"content\":\"\"},\"from\":{\"from\":\"\"},\"like_icon\":{\"action\":\"\",\"action_url\":\"\",\"end\":\"\",\"end_url\":\"\",\"start\":\"\",\"start_url\":\"\"},\"topic\":{\"is_attach_topic\":1}}",
- "display": {
- "topic_info": {
- "topic_details": [
- {
- "topic_id": 12895437,
- "topic_name": "二次上市",
- "is_activity": 0,
- "topic_link": ""
- },
- {
- "topic_id": 10967402,
- "topic_name": "香港上市",
- "is_activity": 1,
- "topic_link": "https://www.bilibili.com/blackboard/dynamic/102930"
- },
- {
- "topic_id": 114859,
- "topic_name": "B站",
- "is_activity": 0,
- "topic_link": ""
- },
- {
- "topic_id": 8312,
- "topic_name": "宣传片",
- "is_activity": 1,
- "topic_link": "https://www.bilibili.com/blackboard/dynamic/8795"
- },
- {
- "topic_id": 679,
- "topic_name": "BILIBILI",
- "is_activity": 0,
- "topic_link": ""
- }
- ]
- },
- "usr_action_txt": "投稿了视频",
- "relation": {
- "status": 1,
- "is_follow": 0,
- "is_followed": 0
- },
- "show_tip": {
- "del_tip": "要删除动态吗?"
- },
- "cover_play_icon_url": "https://i0.hdslb.com/bfs/album/2269afa7897830b397797ebe5f032b899b405c67.png"
- }
- },
- "result": 0,
- "_gt_": 0
- }
-}
-```
-
-
-
diff --git a/dynamic/publish.md b/dynamic/publish.md
deleted file mode 100644
index a2dd2a2..0000000
--- a/dynamic/publish.md
+++ /dev/null
@@ -1,195 +0,0 @@
-# 发布动态
-
-+ [上传图片](#为图片动态(相簿)上传图片)
-+ [发表纯文本动态](#发表纯文本动态)
-
-
-## 为图片动态(相簿)上传图片
-
-> http://api.vc.bilibili.com/api/v1/drawImage/upload
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-~~这是图床?(滑稽保命)~~
-
-注意:非日常类型像素宽高必须大于420
-
-**正文参数(multipart/form-data):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| -------- | ---- | ------------------ | ------ | ------------------------------------------------------------ |
-| file_up | file | 需要上传的图片文件 | 必要 | 格式仅支持jpg png gif |
-| category | str | 图片类型 | 必要 | daily:日常(动态) draw:绘画(画友) cos:摄影(COSPLAY) |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -1:未添加图片 -2:参数错误 -3:图片尺寸过小 -4:账号未登录 -7:图片信息错误 |
-| message | str | 错误信息 | 默认为success |
-| data | obj | 信息本体 | 仅在正确时既`code=0`时为有效信息 |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------ | ---- | -------------- | ---- |
-| image_url | str | 已上传图片url | |
-| image_width | num | 已上传图片宽度 | 像素 |
-| image_height | num | 已上传图片高度 | 像素 |
-
-示例:
-
-上传了一张图片`test.png`类型为`日常`
-
-```shell
-curl 'http://api.vc.bilibili.com/api/v1/drawImage/upload' \
--F 'file_up=@test.png' \
--F 'category=daily'
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code":0,
- "message":"success",
- "data":{
- "image_url":"http:\/\/i0.hdslb.com\/bfs\/album\/13f9523efe186a8066b2d72e80283cea2437eb62.png",
- "image_width":1225,
- "image_height":850
- }
-}
-```
-
-
-
-
-## 发表纯文本动态
-
-> http://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/create
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-**正文参数(multipart/form-data):**
-
-| 参数名 | 类型 | 内容 |
-| --- | --- | --- |
-| dynamic_id | num | 0 |
-| type | num | 4 |
-| rid | num | 0 |
-| content | str | 动态内容 |
-| up_choose_comment | num | 0 |
-| up_close_comment | num | 0 |
-| extension | obj | 常量见下,未知 |
-| at_uids | str | 动态中at到的用户的uid,逗号分隔 |
-| ctrl | obj[] | 特殊格式控制(如at别人时的蓝字体和链接) |
-| csrf_token | str | csrf |
-| csrf | str | csrf(好像有上边那个就够了 这个不用) |
-
-extension参数值:
-```json
-{"emoji_type":1,"from":{"emoji_type":1},"flag_cfg":{}}
-```
-
-ctrl单个对象(注意用的时候是数组出现):
-| 参数名 | 类型 | 内容 |
-| --- | --- | --- |
-| location | num | 从全文第几个字开始变蓝 |
-| type | num | 1 (可能1代表链接到用户uid) |
-| length | num | 这一段变蓝多少字 |
-| data | str | 链接目标(被at人的uid) |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 |
-| --- | --- | --- |
-| code | num | 0:成功 |
-| msg | str | 成功为空文本 |
-| message | str | 和msg一样 |
-| data | obj | 详细信息 |
-
-data对象:
-
-| 字段 | 类型 | 内容 |
-| --- | --- | --- |
-| result | num | 0 |
-| errmsg | str | 像是服务器日志一样的东西 |
-| dynamic_id | num | 发布的新动态ID |
-| create_result | num | 1 |
-| dynamic_id_str | str | 文本格式的dynamic_id |
-| \_gt_ | num | 0 |
-
-
-查看示例(纯文本)
-
-```bash
-curl 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/create' \
- -X POST \
- -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0' \
- -H 'Content-Type: application/x-www-form-urlencoded' \
- -H 'Referer: https://t.bilibili.com/' \
- -H 'Cookie: SESSDATA=******; bili_jct=de2731532b4ab96bc8536da948932668;' \
- --data-raw 'dynamic_id=0&type=4&rid=0&content=Hello%20Bug~&up_choose_comment=0&up_close_comment=0&extension=%7B%22emoji_type%22%3A1%2C%22from%22%3A%7B%22emoji_type%22%3A1%7D%2C%22flag_cfg%22%3A%7B%7D%7D&at_uids=&ctrl=%5B%5D&csrf_token=de2731532b4ab96bc8536da948932668&csrf=de2731532b4ab96bc8536da948932668'
-```
-
-```json
-{
- "code": 0,
- "msg": "",
- "message": "",
- "data": {
- "result": 0,
- "errmsg": "; Create dynamic:588320531406678918, res:0, result:1; Push create kafka:0; Push create databus:0; Register comment result:0; Add outbox result:1",
- "dynamic_id": 588320531406678918,
- "create_result": 1,
- "dynamic_id_str": "588320531406678918",
- "_gt_": 0
- }
-}
-
-```
-
-
-
-
-查看示例(at两个人)
-
-动态正文
-```
-[热词系列_神仙UP]@暮光小猿wzt @社会易姐QwQ
-```
-
-at_uids
-```
-15858903,293793435
-```
-
-ctrl
-```json
-[
- { "location": 11, "type": 1, "length": 9, "data": "15858903" },
- { "location": 20, "type": 1, "length": 9, "data": "293793435" }
-]
-```
-
-命令
-```bash
-curl 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/create' \
- -X POST -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0' \
- -H 'Accept: application/json, text/plain, */*' \
- -H 'Referer: https://t.bilibili.com/' \
- -H 'Cookie: SESSDATA=******; bili_jct=de2731532b4ab96bc8536da948932668' \
- --data-raw 'dynamic_id=0&type=4&rid=0&content=%5B%E7%83%AD%E8%AF%8D%E7%B3%BB%E5%88%97_%E7%A5%9E%E4%BB%99UP%5D%40%E6%9A%AE%E5%85%89%E5%B0%8F%E7%8C%BFwzt%20%40%E7%A4%BE%E4%BC%9A%E6%98%93%E5%A7%90QwQ%20&up_choose_comment=0&up_close_comment=0&extension=%7B%22emoji_type%22%3A1%2C%22from%22%3A%7B%22emoji_type%22%3A1%7D%2C%22flag_cfg%22%3A%7B%7D%7D&at_uids=15858903%2C293793435&ctrl=%5B%7B%22location%22%3A11%2C%22type%22%3A1%2C%22length%22%3A9%2C%22data%22%3A%2215858903%22%7D%2C%7B%22location%22%3A20%2C%22type%22%3A1%2C%22length%22%3A9%2C%22data%22%3A%22293793435%22%7D%5D&csrf_token=de2731532b4ab96bc8536da948932668&csrf=de2731532b4ab96bc8536da948932668'
-```
-
-
\ No newline at end of file
diff --git a/electric/charge_list.md b/electric/charge_list.md
deleted file mode 100644
index c398eb5..0000000
--- a/electric/charge_list.md
+++ /dev/null
@@ -1,295 +0,0 @@
-# 充电列表
-
-- [获取空间充电公示列表](#获取空间充电公示列表)
-- [获取视频充电鸣谢名单](#获取视频充电鸣谢名单)
-
----
-
-## 获取空间充电公示列表
-
-> http://elec.bilibili.com/api/query.rank.do
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| mid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | -------- | ----------------------------- |
-| code | num | 返回值 | 0:成功 500011:mid错误 |
-| msg | str | 错误信息 | 正确时无此项 |
-| data | obj | 数据本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ------ | ---------------- | ------------ |
-| display_num | num | 0 | 作用尚不明确 |
-| count | num | 本月充电人数 | |
-| total_count | num | 总计充电人数 | |
-| list | array | 本月充电用户列表 | |
-| user | null | | 作用尚不明确 |
-
-`data`中的`list`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------- | ---------------- |
-| 0 | obj | 充电用户1 | |
-| n | obj | 充电用户(n+1) | 按照充电排名排列 |
-| …… | obj | …… | …… |
-| 29 | obj | 充电用户30 | 最后一项 |
-
-`data`中的`list`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | ---------------- | ---------------- |
-| mid | num | 充电对象mid | |
-| pay_mid | num | 充电用户mid | |
-| rank | num | 充电用户排名 | 取决于充电的多少 |
-| uname | str | 充电用户昵称 | |
-| avatar | str | 充电用户头像url | |
-| message | str | 充电留言 | 无为空 |
-| msg_deleted | num | 0 | 作用尚不明确 |
-| vip_info | obj | 充电用户会员信息 | |
-| trend_type | num | 0 | 作用尚不明确 |
-
-`data`中的`list`数组中的对象中的`vip_info`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ---- | ---------- | ----------------------------------- |
-| vipType | num | 大会员类型 | 0:无 1:月会员 2:年会员 |
-| vipDueMsec | num | 0 | 作用尚不明确 |
-| vipStatus | num | 大会员状态 | 0:无 1:有 |
-
-**示例:**
-
-查询用户`mid=53456`的充电公示列表
-
-```shell
-curl -G 'http://elec.bilibili.com/api/query.rank.do' \
---data-urlencode 'mid=53456'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "data": {
- "display_num": 0,
- "count": 226,
- "total_count": 11528,
- "list": [
- {
- "mid": 53456,
- "pay_mid": 346545025,
- "rank": 1,
- "uname": "还有什么名字没人用",
- "avatar": "http://i1.hdslb.com/bfs/face/76d4b1ecd13e992a6c7303d77bf716dd922ab234.jpg",
- "message": "早日康复,五月快乐",
- "msg_deleted": 0,
- "vip_info": {
- "vipType": 2,
- "vipDueMsec": 0,
- "vipStatus": 1
- },
- "trend_type": 0
- },
- {
- "mid": 53456,
- "pay_mid": 8826056,
- "rank": 2,
- "uname": "煋痕",
- "avatar": "http://i2.hdslb.com/bfs/face/35b7c752d0eb1bb7a924804f240b9bfd9199625f.jpg",
- "message": "",
- "msg_deleted": 0,
- "vip_info": {
- "vipType": 2,
- "vipDueMsec": 0,
- "vipStatus": 1
- },
- "trend_type": 0
- },
- {
- "mid": 53456,
- "pay_mid": 356668487,
- "rank": 3,
- "uname": "舞象祥",
- "avatar": "http://i1.hdslb.com/bfs/face/574f6203ef5bd0d56b95ded6a2736676d9cc5307.jpg",
- "message": "warma hayo",
- "msg_deleted": 0,
- "vip_info": {
- "vipType": 1,
- "vipDueMsec": 0,
- "vipStatus": 1
- },
- "trend_type": 0
- },
- …………
- ],
- "user": null
- }
-}
-```
-
-
-
-## 获取视频充电鸣谢名单
-
-> http://api.bilibili.com/x/web-interface/elec/show
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------ | ------------ | ------------------ |
-| mid | num | 目标用户mid | 必要 | |
-| aid | num | 目标稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 目标稿件bvid | 必要(可选) | avid与bvid任选一个 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -400:请求错误 -404:无视频 62001:不需要展示充电信息 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ------ | ---------------- | ------------ |
-| show_info | obj | 展示选项 | |
-| av_count | num | 目标视频充电人数 | |
-| count | num | 本月充电人数 | |
-| total_count | num | 总计充电人数 | |
-| special_day | num | 0 | 作用尚不明确 |
-| display_num | num | 0 | 作用尚不明确 |
-| list | array | 本月充电用户列表 | |
-
-`data`中的`show_info`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | ------------------------ | ----------------------------- |
-| show | bool | 是否展示视频充电鸣谢名单 | false:不展示 true:展示 |
-| state | num | 0 | |
-
-`data`中的`list`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------- | ---------------- |
-| 0 | obj | 充电用户1 | |
-| n | obj | 充电用户(n+1) | 按照充电排名排列 |
-| …… | obj | …… | …… |
-| 29 | obj | 充电用户30 | 最后一项 |
-
-`data`中的`list`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | ---------------- | ---------------- |
-| mid | num | 充电对象mid | |
-| pay_mid | num | 充电用户mid | |
-| rank | num | 充电用户排名 | 取决于充电的多少 |
-| uname | str | 充电用户昵称 | |
-| avatar | str | 充电用户头像url | |
-| message | str | 充电留言 | 无为空 |
-| msg_deleted | num | 0 | 作用尚不明确 |
-| vip_info | obj | 充电用户会员信息 | |
-| trend_type | num | 0 | 作用尚不明确 |
-
-`data`中的`list`数组中的`vip_info`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ---- | ---------- | ----------------------------------- |
-| vipType | num | 大会员类型 | 0:无 1:月会员 2:年会员 |
-| vipDueMsec | num | 0 | 作用尚不明确 |
-| vipStatus | num | 大会员状态 | 0:无 1:有 |
-
-**示例:**
-
-获取视频`av967773538`/` BV1up4y1y77i `,用户`mid=53456`的视频充电鸣谢名单
-
-avid方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/web-interface/elec/show' \
---data-urlencode 'mid=53456' \
---data-urlencode 'aid=967773538'
-```
-
-bvid方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/web-interface/elec/show' \
---data-urlencode 'mid=53456' \
---data-urlencode 'bvid=BV1up4y1y77i '
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "show_info": {
- "show": true,
- "state": 0
- },
- "av_count": 0,
- "count": 0,
- "total_count": 19422,
- "special_day": 0,
- "display_num": 0,
- "list": [
- {
- "mid": 53456,
- "pay_mid": 1216085164,
- "rank": 1,
- "uname": "JZ72",
- "avatar": "http://i1.hdslb.com/bfs/face/3d741682fafc286999b5e8089a844ae4f46651fe.jpg",
- "message": "Warma YYDS ",
- "msg_deleted": 0,
- "vip_info": {
- "vipType": 2,
- "vipDueMsec": 0,
- "vipStatus": 1
- },
- "trend_type": 0
- },
- {
- "mid": 53456,
- "pay_mid": 305858373,
- "rank": 2,
- "uname": "适应性神经系统",
- "avatar": "http://i0.hdslb.com/bfs/face/2ad38dec879f66c32b5e5cb1750cb3f3e446bf91.jpg",
- "message": "",
- "msg_deleted": 0,
- "vip_info": {
- "vipType": 1,
- "vipDueMsec": 0,
- "vipStatus": 0
- },
- "trend_type": 0
- },
- ......
- ]
- }
-}
-```
-
-
diff --git a/electric/charge_msg.md b/electric/charge_msg.md
deleted file mode 100644
index a2cc788..0000000
--- a/electric/charge_msg.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# 充电留言
-
-- [发送充电留言](#发送充电留言)
-
----
-
-## 发送充电留言
-
-> http://api.bilibili.com/x/ugcpay/trade/elec/message
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| -------- | ---- | ------------------------ | ------ | ---- |
-| order_id | str | 留言token | 必要 | |
-| message | str | 留言内容 | 必要 | |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 88203:不能重复留言 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-为留言token为`BPRG5CEC3VUPOOANA540`的充电操作,添加了内容为`支持一下大佬`的留言
-
-```shell
-curl 'http://api.bilibili.com/x/ugcpay/trade/elec/message' \
---data-urlencode 'order_id=BPRG5CEC3VUPOOANA540' \
---data-urlencode 'message=支持一下大佬' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code":0,
- "message":"0",
- "ttl":1
-}
-```
-
-
diff --git a/fav/info.md b/fav/info.md
deleted file mode 100644
index fc2cb8b..0000000
--- a/fav/info.md
+++ /dev/null
@@ -1,415 +0,0 @@
-# 收藏夹基本信息
-
-- [获取收藏夹元数据](#获取收藏夹元数据)
-- [获取指定用户创建的所有收藏夹信息](#获取指定用户创建的所有收藏夹信息)
-- [批量获取指定收藏id的内容](#批量获取指定收藏id的内容)
-
----
-
-## 获取收藏夹元数据
-
-> http://api.bilibili.com/x/v3/fav/folder/info
-
-*请求方式:GET*
-
-认证方式:Cookie或APP
-
-**注:查询权限收藏夹时需要相应用户登录**
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| -------- | ---- | ---------------------- | ------ | ---- |
-| media_id | num | 目标收藏夹id(完整id) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ----------------------------- | -------- | --------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 -403:访问权限不足 |
-| message | str | 错误信息 | 默认为0 |
-| data | 有效时:obj 无效或:null | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | -------------------- | -------------------------------------------------- |
-| id | num | 收藏夹mlid(完整id) | 收藏夹原始id+创建者mid尾号2位 |
-| fid | num | 收藏夹原始id | |
-| mid | num | 创建者mid | |
-| attr | num | 属性位(?) | |
-| title | str | 收藏夹标题 | |
-| cover | str | 收藏夹封面图片url | |
-| upper | obj | 创建者信息 | |
-| cover_type | num | 封面图类别(?) | |
-| cnt_info | obj | 收藏夹状态数 | |
-| type | num | 类型(?) | 一般是11 |
-| intro | str | 备注 | |
-| ctime | num | 创建时间 | 时间戳 |
-| mtime | num | 收藏时间 | 时间戳 |
-| state | num | 状态(?) | 一般为0 |
-| fav_state | num | 收藏夹收藏状态 | 已收藏收藏夹:1 未收藏收藏夹:0 需要登录 |
-| like_state | num | 点赞状态 | 已点赞:1 未点赞:0 需要登录 |
-| media_count | num | 收藏夹内容数量 | |
-
-
-`info`中的`upper`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ---- | ---------------- | ----------------------------------------------- |
-| mid | num | 创建者mid | |
-| name | str | 创建者昵称 | |
-| face | str | 创建者头像url | |
-| followed | bool | 是否已关注创建者 | |
-| vip_type | num | 会员类别 | 0:无 1:月大会员 2:年度及以上大会员 |
-| vip_statue | num | 会员开通状态 | 0:无 1:有 |
-
-`info`中的`cnt_info`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ---- | ------ | ---- |
-| collect | num | 收藏数 | |
-| play | num | 播放数 | |
-| thumb_up | num | 点赞数 | |
-| share | num | 分享数 | |
-
-**示例:**
-
-查询收藏夹`id=1052622027`的元数据
-
-```shell
-curl -G 'http://api.bilibili.com/x/v3/fav/folder/info' \
---data-urlencode 'media_id=1052622027' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "id": 1052622027,
- "fid": 10526220,
- "mid": 686127,
- "attr": 54,
- "title": "猛 男 生 存",
- "cover": "http://i2.hdslb.com/bfs/archive/bb51ee8a5fc5e03996138155f0f682d30ee16484.jpg",
- "upper": {
- "mid": 686127,
- "name": "籽岷",
- "face": "http://i0.hdslb.com/bfs/face/7efb679569b2faeff38fa08f6f992fa1ada5e948.webp",
- "followed": true,
- "vip_type": 2,
- "vip_statue": 1
- },
- "cover_type": 2,
- "cnt_info": {
- "collect": 3393,
- "play": 184822,
- "thumb_up": 3918,
- "share": 44
- },
- "type": 11,
- "intro": "猛 男 生 存",
- "ctime": 1598884758,
- "mtime": 1598884758,
- "state": 0,
- "fav_state": 0,
- "like_state": 0,
- "media_count": 28
- }
-}
-```
-
-
-
-## 获取指定用户创建的所有收藏夹信息
-
-> http://api.bilibili.com/x/v3/fav/folder/created/list-all
-
-*请求方式:GET*
-
-认证方式:Cookie或APP
-
-**注:查询权限收藏夹时需要相应用户登录**
-
-该接口也能查询目标内容id存在于那些收藏夹中
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------ | ------ | ---------------------------------------- |
-| up_mid | num | 目标用户mid | 必要 | |
-| type | num | 目标内容属性 | 非必要 | 默认为全部 0:全部 2:视频稿件 |
-| rid | num | 目标内容id | 非必要 | 视频稿件:视频稿件avid |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ----------------------------- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| data | 有效时:obj 无效或:null | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ----- | ---------------- | ---- |
-| count | num | 创建的收藏夹总数 | |
-| list | array | 创建的收藏夹列表 | |
-| season | null | (?) | |
-
-`list`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------- | ---- |
-| 0 | obj | 收藏夹1 | |
-| n | obj | 收藏夹(n+1) | |
-| ... | obj | ... | |
-
-`medias`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | ------------------------ | ------------------------------------------ |
-| id | num | 收藏夹mlid(完整id) | 收藏夹原始id+创建者mid尾号2位 |
-| fid | num | 收藏夹原始id | |
-| mid | num | 创建者mid | |
-| attr | num | 属性位(?) | |
-| title | str | 收藏夹标题 | |
-| fav_state | num | 目标id是否存在于该收藏夹 | 存在于该收藏夹:1 不存在于该收藏夹:0 |
-| media_count | num | 收藏夹内容数量 | |
-
-**示例:**
-
-查询用户`mid=509372`的所有创建收藏夹列表
-
-```shell
-curl -G 'http://api.bilibili.com/x/v3/fav/folder/created/list-all' \
---data-urlencode 'up_mid=509372' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "count": 2,
- "list": [
- {
- "id": 939227072,
- "fid": 9392270,
- "mid": 509372,
- "attr": 54,
- "title": "学习",
- "fav_state": 0,
- "media_count": 22
- },
- {
- "id": 75020272,
- "fid": 750202,
- "mid": 509372,
- "attr": 22,
- "title": "MAD/AMV",
- "fav_state": 0,
- "media_count": 16
- }
- ],
- "season": null
- }
-}
-```
-
-
-
-## 批量获取指定收藏id的内容
-
-> http://api.bilibili.com/x/v3/fav/resource/infos
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| --------- | ---- | -------------- | ------ | ------------------------------------------------------------ |
-| resources | strs | 目标内容id列表 | 必要 | 格式:{内容id}:{内容类型} 每个成员间用`,`分隔 类型: 2:视频稿件 12:音频 21:视频合集 内容id: 视频稿件:视频稿件avid 音频:音频auid 视频合集:视频合集id |
-| platform | str | 平台标识 | 非必要 | 可为web(影响内容列表类型) |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ------------------------------- | ------------ | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| data | 有效时:array 无效或:null | 内容信息列表 | |
-
-`data`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | ---- |
-| 0 | obj | 内容信息1 | |
-| n | obj | 内容信息(n+1) | |
-| ... | obj | ... | |
-
-`data`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ---- | ------------- | ------------------------------------------------------------ |
-| id | num | 内容id | 视频稿件:视频稿件avid 音频:音频auid 视频合集:视频合集id |
-| type | num | 内容类型 | 2:视频稿件 12:音频 21:视频合集 |
-| title | str | 标题 | |
-| cover | str | 封面url | |
-| intro | str | 简介 | |
-| page | num | 视频分P数 | |
-| duration | num | 音频/视频时长 | |
-| upper | obj | UP主信息 | |
-| attr | num | 属性 | 0:正常 1:失效 |
-| cnt_info | obj | 状态数 | |
-| link | str | 跳转uri | |
-| ctime | num | 投稿时间 | 时间戳 |
-| pubtime | num | 发布时间 | 时间戳 |
-| fav_time | num | 收藏时间 | 时间戳 |
-| bv_id | str | 视频稿件bvid | |
-| bvid | str | 视频稿件bvid | |
-| season | null | (?) | |
-
-`data`数组中的对象中的`upper`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ----------- | ---- |
-| mid | num | UP主mid | |
-| name | str | UP主昵称 | |
-| face | str | UP主头像url | |
-
-`data`数组中的对象中的`cnt_info`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | ------ | ---- |
-| collect | num | 收藏数 | |
-| play | num | 播放数 | |
-| danmaku | num | 弹幕数 | |
-
-**示例:**
-
-批量查询内容
-
-1-视频稿件-`av583785685`
-
-2-视频合集-`523`
-
-3-音频-`au15664`
-
-```shell
-curl -G 'http://api.bilibili.com/x/v3/fav/resource/infos' \
---data-urlencode 'resources=583785685:2,523:21,15664:12'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": [
- {
- "id": 583785685,
- "type": 2,
- "title": "已失效视频",
- "cover": "http://i0.hdslb.com/bfs/archive/be27fd62c99036dce67efface486fb0a88ffed06.jpg",
- "intro": "审核君辛苦了~\r\n使用curl命令访问B站api,实现二维码登录 查询登录信息 视频投币 发送评论的操作\r\n本视频作为api收集项目的一个硬核DEMO\r\n由于当时录音的问题,大部分是后期配的,后面声音有点小\r\n想了解更多的去github页面,也可以qq\r\n\r\nbgm:\r\n雲流れ\r\nAutumn rain(未修改版)\r\n四月,初雨微凉",
- "page": 1,
- "duration": 604,
- "upper": {
- "mid": 293793435,
- "name": "社会易姐QwQ",
- "face": "http://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg"
- },
- "attr": 1,
- "cnt_info": {
- "collect": 1470,
- "play": 28374,
- "danmaku": 64
- },
- "link": "bilibili://video/583785685",
- "ctime": 1594049831,
- "pubtime": 1594049831,
- "fav_time": 0,
- "bv_id": "BV1kz4y1X7XP",
- "bvid": "BV1kz4y1X7XP",
- "season": null
- },
- {
- "id": 523,
- "type": 21,
- "title": "2021哔哩哔哩拜年纪",
- "cover": "https://i0.hdslb.com/bfs/archive/8ccc50f7cbc671762e0536491bd2b8aeebc0837d.jpg",
- "intro": "感谢各位制作者们的辛勤付出!节目精彩,愿大家看的开心!",
- "page": 0,
- "duration": 0,
- "upper": {
- "mid": 1868902080,
- "name": "哔哩哔哩拜年纪",
- "face": "http://i0.hdslb.com/bfs/face/7f6cb94fc071aca9fbb4b1ca9cc6415e86847576.jpg"
- },
- "attr": 0,
- "cnt_info": {
- "collect": 0,
- "play": 71527018,
- "danmaku": 480547
- },
- "link": "bilibili://video/373561162",
- "ctime": 0,
- "pubtime": 0,
- "fav_time": 0,
- "bv_id": "",
- "bvid": "",
- "season": null
- },
- {
- "id": 15664,
- "type": 12,
- "title": "威风堂堂",
- "cover": "http://i0.hdslb.com/bfs/music/c417d30b394a8a5d4e8a150ad75837dbae3b79d4.jpg",
- "intro": "翻唱。在电脑里放了半个月终于!!!大家寒假快乐!!❁本家sm19233263;❁压制: 寒雨;❁mix: 三星堆;❁vocal: 茶理理。超喜欢michan的那段英文念白所以加了进来w 谢谢三月月和嘟比比你们后期辛苦了!",
- "page": 1,
- "duration": 200,
- "upper": {
- "mid": 684169,
- "name": "茶理理理子",
- "face": ""
- },
- "attr": 0,
- "cnt_info": {
- "collect": 48872,
- "play": 1508426,
- "danmaku": 0
- },
- "link": "bilibili://music/detail/15664?name=%E5%A8%81%E9%A3%8E%E5%A0%82%E5%A0%82&uperName=%E8%8C%B6%E7%90%86%E7%90%86%E7%90%86%E5%AD%90&cover_url=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Fmusic%2Fc417d30b394a8a5d4e8a150ad75837dbae3b79d4.jpg&upperId=684169&author=%E8%8C%B6%E7%90%86%E7%90%86",
- "ctime": 1502347604,
- "pubtime": 1502347604,
- "fav_time": 0,
- "bv_id": "BV1bx411c7qt",
- "bvid": "BV1bx411c7qt",
- "season": null
- }
- ]
-}
-```
-
-
\ No newline at end of file
diff --git a/grpc_api/bilibili/account/fission/v1/fission.proto b/grpc_api/bilibili/account/fission/v1/fission.proto
index bb9353c..051d6b7 100644
--- a/grpc_api/bilibili/account/fission/v1/fission.proto
+++ b/grpc_api/bilibili/account/fission/v1/fission.proto
@@ -1,48 +1,64 @@
-syntax = "proto3";
-
-package bilibili.account.fission.v1;
-
-// Fission裂变
-service Fission {
- // 活动入口
- rpc Entrance (EntranceReq) returns (EntranceReply);
- // 首页弹窗
- rpc Window (WindowReq) returns (WindowReply);
-}
-
-// 活动入口-请求
-message EntranceReq {}
-
-// 活动入口-响应
-message EntranceReply {
- // 展示图标
- string icon = 1;
- // 活动名称
- string name = 2;
- // 活动跳转链接
- string url = 3;
- // 动画效果
- AnimateIcon animate_icon = 4;
-}
-
-// 首页弹窗-请求
-message WindowReq {}
-
-//首页弹窗-响应
-message WindowReply {
- // 弹窗类型
- // 0:弹窗 1:普通页面
- int32 type = 1;
- // 跳转链接
- string url = 2;
- // 上报数据字段
- string report_data = 3;
-}
-
-//动画效果
-message AnimateIcon {
- // icon文件
- string icon = 1;
- // 动效json文件
- string json = 2;
+syntax = "proto3";
+
+package bilibili.account.fission.v1;
+
+// Fission裂变
+service Fission {
+ // 活动入口
+ rpc Entrance (EntranceReq) returns (EntranceReply);
+ // 首页弹窗
+ rpc Window (WindowReq) returns (WindowReply);
+ //
+ rpc Privacy (PrivacyReq) returns (PrivacyReply);
+}
+
+// 动画效果
+message AnimateIcon {
+ // icon文件
+ string icon = 1;
+ // 动效json文件
+ string json = 2;
+}
+
+// 活动入口-响应
+message EntranceReply {
+ // 展示图标
+ string icon = 1;
+ // 活动名称
+ string name = 2;
+ // 活动跳转链接
+ string url = 3;
+ // 动画效果
+ AnimateIcon animate_icon = 4;
+}
+
+// 活动入口-请求
+message EntranceReq {}
+
+//
+message PrivacyReply {
+ //
+ string message = 1;
+}
+
+//
+message PrivacyReq {
+ //
+ string activity_uid = 1;
+}
+
+//首页弹窗-响应
+message WindowReply {
+ // 弹窗类型
+ // 0:弹窗 1:普通页面
+ int32 type = 1;
+ // 跳转链接
+ string url = 2;
+ // 上报数据字段
+ string report_data = 3;
+}
+
+// 首页弹窗-请求
+message WindowReq {
+
}
\ No newline at end of file
diff --git a/grpc_api/bilibili/ad/v1/ad.proto b/grpc_api/bilibili/ad/v1/ad.proto
index 78cef7c..53ffc4f 100644
--- a/grpc_api/bilibili/ad/v1/ad.proto
+++ b/grpc_api/bilibili/ad/v1/ad.proto
@@ -2,199 +2,91 @@ syntax = "proto3";
package bilibili.ad.v1;
+import "google/protobuf/any.proto";
import "google/protobuf/wrappers.proto";
-// 广告控制
-message AdsControlDto {
- // 视频是否有弹幕,如有,需请求弹幕广告
- int32 has_danmu = 1;
- // 有弹幕的分P视频的cid
- repeated int64 cids = 2;
- // 有弹幕的ogv ep
- repeated AdOgvEpDto eps = 3;
-}
-
-// 有弹幕的ogv ep
-message AdOgvEpDto {
- // 分集epid
- int64 epid = 1;
- // 是否显示 "荐"
- bool has_recommend = 2;
-}
-
-// 广告数据
-message SourceContentDto {
- // 广告请求id
- string request_id = 1;
- // 广告资源位source ID
- int32 source_id = 2;
- // 广告资源位resource ID
- int32 resource_id = 3;
- // 广告位上报标记,对广告返回数据恒为true
- bool is_ad_loc = 4;
- // 与天马现有逻辑一致, 0有含义
- // 0:内容 1:广告
- google.protobuf.Int32Value server_type = 5;
- // 客户端IP回传拼接
- string client_ip = 6;
- // 广告卡片位置在一刷中的位置, 天马用, 0有含义
- google.protobuf.Int32Value card_index = 7;
- // 广告资源位source 位次
- int32 index = 8;
- // 广告内容
- AdDto ad_content = 9;
-}
-
-// 广告内容
-message AdDto {
- // 广告创意ID
- int64 creative_id = 1;
- // 广告闭环上报回传数据
- string ad_cb = 2;
- // 额外广告数据
- AdContentExtraDto extra = 3;
- // 广告标记
- int32 cm_mark = 4;
- //
- int64 top_view_id = 5;
- //
- int32 creative_type = 6;
- //
- int32 card_type = 7;
- //
- int32 creative_style = 8;
- //
- int32 is_ad = 9;
- //
- CreativeDto creative_content = 10;
-}
-
-// 额外广告数据
-message AdContentExtraDto {
- // 动态布局
- string layout = 1;
- // 展现监控url
- repeated string show_urls = 2;
- // 点击监控url
- repeated string click_urls = 3;
- // 弹幕创意列表展示第三方上报
- repeated string danmu_list_show_urls = 4;
- // 弹幕创意列表点击第三方上报
- repeated string danmu_list_click_urls = 5;
- // 弹幕详情页展示第三方上报
- repeated string danmu_detail_show_urls = 6;
- // 弹幕商品添加购物车第三方上报
- repeated string danmu_trolley_add_urls = 7;
- // useWebView默认false
- bool use_ad_web_v2 = 8;
- // app唤起白名单
- repeated string open_whitelist = 9;
- // app下载白名单
- AppPackageDto download_whitelist = 10;
- // 卡片相关信息
- AdCardDto card = 11;
- // 视频播放和弹幕播放上报控制时间 ms
- int32 report_time = 12;
- // 是否优先唤起app store
- int32 appstore_priority = 13;
- // 广告售卖类型
- int32 sales_type = 14;
- // 落地页是否预加载
- int32 preload_landingpage = 15;
- // 是否需要展示风险行业提示
- bool special_industry = 16;
- // 风险行业提示
- string special_industry_tips = 17;
- // 是否展示下载弹框
- bool enable_download_dialog = 18;
- // 是否允许分享
- bool enable_share = 19;
- // 个人空间广告入口类型
- // 1:橱窗 2:商品店铺 3:小程序
- int32 upzone_entrance_type = 20;
- // 个人空间广告入口上报id,橱窗id(当前用Mid)、店铺id或者小程序id
- int32 upzone_entrance_report_id = 21;
- // 分享数据
- AdShareInfoDto share_info = 22;
- // topview图片链接,闪屏预下载用
- string topview_pic_url = 23;
- // topview视频链接,闪屏预下载用
- string topview_video_url = 24;
- // 点击区域
- // 0:表示banner可点击 1:表示素材可点击
- int32 click_area = 25;
- // 店铺
- int64 shop_id = 26;
- // up主
- int64 up_mid = 27;
- // 回传id
- string track_id = 28;
- // 商店直投
- int32 enable_store_direct_launch = 29;
- // DPA2.0商品ID
- int64 product_id = 30;
-}
-
-//
-message CreativeDto {
- //
- string title = 1;
- //
- string description = 2;
- //
- string image_url = 3;
- //
- string image_md5 = 4;
+// 自动播放视频
+message AdAutoPlayVideoDto {
+ // avid
+ int64 avid = 1;
+ // cid
+ int64 cid = 2;
+ // 分P
+ int64 page = 3;
//
+ string from = 4;
+ // 是否自动播放
string url = 5;
- //
- string click_url = 6;
- //
- string show_url = 7;
- //
- int64 video_id = 8;
- //
- string thumbnail_url = 9;
- //
- string thumbnail_url_md5 = 10;
- //
- string logo_url = 11;
- //
- string logo_md5 = 12;
- //
- string username = 13;
+ // 是否自动播放
+ string cover = 6;
+ // 是否自动播放
+ bool auto_play = 7;
+ // 按钮是否动态变色
+ bool btn_dyc_color = 8;
+ // 按钮动态变色时间 ms
+ int32 btn_dyc_time = 9;
+ // 用于做联播是否是同一个视频的id
+ int64 biz_id = 10;
+ // 开始播放三方监控
+ repeated string process0_urls = 11;
+ // 播放3S三方监控
+ repeated string play_3s_urls = 12;
+ // 播放5S三方监控
+ repeated string play_5s_urls = 13;
+ // 横竖屏
+ int32 orientation = 14;
}
-// app下载白名单
-message AppPackageDto {
- // 包大小(单位bytes)
- int64 size = 1;
+// 商业标信息
+message AdBusinessMarkDto {
+ // 商业标样式
+ // 0:不展示标 1:实心+文字 2:空心框+文字 3:纯文字标 4:纯图片标
+ int32 type = 1;
+ // 商业标文案
+ string text = 2;
+ // 商业标文案颜色,如#80FFFFFF RGBA
+ string text_color = 3;
+ // 夜间模式文字色
+ string text_color_night = 4;
+ // 背景色
+ string bg_color = 5;
+ // 夜间模式背景色
+ string bg_color_night = 6;
+ // 边框色
+ string border_color = 7;
+ // 夜间模式边框色
+ string border_color_night = 8;
+ // 图片商业标
+ string img_url = 9;
+ // 图片高度
+ int32 img_height = 10;
+ // 图片宽度
+ int32 img_width = 11;
//
- string display_name = 2;
+ string bg_border_color = 12;
+}
+
+// 按钮
+message AdButtonDto {
+ // 类型
+ // 1:落地页 2:应用唤起 3:应用下载
+ int32 type = 1;
+ // 按钮文案
+ string text = 2;
+ // 按钮跳转地址
+ string jump_url = 3;
+ // 跳转监测链接
+ string report_urls = 4;
+ // 唤起schema
+ string dlsuc_callup_url = 5;
+ // 游戏id
+ int32 game_id = 6;
+ // 游戏监控字段
+ string game_monitor_param = 7;
//
- string apk_name = 3;
- // url
- string url = 4;
- // bili schema url
- string bili_url = 5;
- // 包md5
- string md5 = 6;
- // 包icon
- string icon = 7;
- // 开发者姓名
- string dev_name = 8;
- // 权限地址
- string auth_url = 9;
- // 权限名,逗号隔开
- string auth_name = 10;
- // 版本
- string version = 11;
- // 更新时间,yy-mm-hh格式
- string update_time = 12;
- // 隐私协议标题
- string privacy_name = 13;
- // 隐私协议url
- string privacy_url = 14;
+ int32 game_channel_id = 8;
+ //
+ string game_channel_extra = 9;
}
// 卡片
@@ -289,16 +181,130 @@ message AdCardDto {
AdverDto adver = 44;
// 评分
int32 grade_level = 45;
+ //
+ bool support_transition = 46;
+ //
+ string transition = 47;
+ //
+ int32 under_player_interaction_style = 48;
+ //
+ string imax_landing_page_v2 = 49;
+ //
+ SubCardModule subcard_module = 50;
+ //
+ int32 grade_denominator = 51;
+ //
+ int32 star_level = 52;
+ //
+ Bulletin bulletin = 53;
+ //
+ Gift gift = 54;
+ //
+ repeated string game_tags = 55;
+ //
+ int32 ori_mark_hidden = 56;
+ //
+ bool use_multi_cover = 57;
+ //
+ WxProgramInfo wx_program_info = 58;
+ //
+ AndroidGamePageRes android_game_page_res = 59;
+ //
+ NotClickableArea not_clickable_area = 60;
+ //
+ ForwardReply forward_reply = 61;
}
-// 分享
-message AdShareInfoDto {
- // 分享标题
- string title = 1;
- // 分享副标题
- string subtitle = 2;
- // 分享图片url
- string image_url = 3;
+// 额外广告数据
+message AdContentExtraDto {
+ // 动态布局
+ string layout = 1;
+ // 展现监控url
+ repeated string show_urls = 2;
+ // 点击监控url
+ repeated string click_urls = 3;
+ // 弹幕创意列表展示第三方上报
+ repeated string danmu_list_show_urls = 4;
+ // 弹幕创意列表点击第三方上报
+ repeated string danmu_list_click_urls = 5;
+ // 弹幕详情页展示第三方上报
+ repeated string danmu_detail_show_urls = 6;
+ // 弹幕商品添加购物车第三方上报
+ repeated string danmu_trolley_add_urls = 7;
+ // useWebView默认false
+ bool use_ad_web_v2 = 8;
+ // app唤起白名单
+ repeated string open_whitelist = 9;
+ // app下载白名单
+ AppPackageDto download_whitelist = 10;
+ // 卡片相关信息
+ AdCardDto card = 11;
+ // 视频播放和弹幕播放上报控制时间 ms
+ int32 report_time = 12;
+ // 是否优先唤起app store
+ int32 appstore_priority = 13;
+ // 广告售卖类型
+ int32 sales_type = 14;
+ // 落地页是否预加载
+ int32 preload_landingpage = 15;
+ // 是否需要展示风险行业提示
+ bool special_industry = 16;
+ // 风险行业提示
+ string special_industry_tips = 17;
+ // 是否展示下载弹框
+ bool enable_download_dialog = 18;
+ // 是否允许分享
+ bool enable_share = 19;
+ // 个人空间广告入口类型
+ // 1:橱窗 2:商品店铺 3:小程序
+ int32 upzone_entrance_type = 20;
+ // 个人空间广告入口上报id,橱窗id(当前用Mid)、店铺id或者小程序id
+ int32 upzone_entrance_report_id = 21;
+ // 分享数据
+ AdShareInfoDto share_info = 22;
+ // topview图片链接,闪屏预下载用
+ string topview_pic_url = 23;
+ // topview视频链接,闪屏预下载用
+ string topview_video_url = 24;
+ // 点击区域
+ // 0:表示banner可点击 1:表示素材可点击
+ int32 click_area = 25;
+ // 店铺
+ int64 shop_id = 26;
+ // up主
+ int64 up_mid = 27;
+ // 回传id
+ string track_id = 28;
+ // 商店直投
+ int32 enable_store_direct_launch = 29;
+ // DPA2.0商品ID
+ int64 product_id = 30;
+ //
+ bool enable_double_jump = 31;
+ //
+ repeated string show1s_urls = 32;
+ //
+ string from_track_id = 33;
+ //
+ bool store_callup_card = 34;
+ //
+ int32 landingpage_download_style = 35;
+ //
+ int32 special_industry_style = 36;
+ //
+ bool enable_h5_alert = 37;
+ //
+ int32 macro_replace_priority = 38;
+ //
+ int32 feedback_panel_style = 39;
+ //
+ string appstore_url = 40;
+ //
+ int32 enable_h5_pre_load = 41;
+ //
+ string h5_pre_load_url = 42;
+ //
+ string cm_from_track_id = 43;
}
// 广告卡片封面数据
@@ -318,84 +324,28 @@ message AdCoverDto {
int32 image_width = 6;
}
-// 按钮
-message AdButtonDto {
- // 类型
- // 1:落地页 2:应用唤起 3:应用下载
- int32 type = 1;
- // 按钮文案
- string text = 2;
- // 按钮跳转地址
- string jump_url = 3;
- // 跳转监测链接
- string report_urls = 4;
- // 唤起schema
- string dlsuc_callup_url = 5;
- //游戏id
- int32 game_id = 6;
- //游戏监控字段
- string game_monitor_param = 7;
-}
-
-// 商业标信息
-message AdBusinessMarkDto {
- // 商业标样式
- // 0:不展示标 1:实心+文字 2:空心框+文字 3:纯文字标 4:纯图片标
- int32 type = 1;
- // 商业标文案
- string text = 2;
- // 商业标文案颜色,如#80FFFFFF RGBA
- string text_color = 3;
- // 夜间模式文字色
- string text_color_night = 4;
- // 背景色
- string bg_color = 5;
- // 夜间模式背景色
- string bg_color_night = 6;
- // 边框色
- string border_color = 7;
- // 夜间模式边框色
- string border_color_night = 8;
- // 图片商业标
- string img_url = 9;
- // 图片高度
- int32 img_height = 10;
- // 图片宽度
- int32 img_width = 11;
+// 广告内容
+message AdDto {
+ // 广告创意ID
+ int64 creative_id = 1;
+ // 广告闭环上报回传数据
+ string ad_cb = 2;
+ // 额外广告数据
+ AdContentExtraDto extra = 3;
+ // 广告标记
+ int32 cm_mark = 4;
//
- string bg_border_color = 12;
-}
-
-// 自动播放视频
-message AdAutoPlayVideoDto {
- // avid
- int64 avid = 1;
- // cid
- int64 cid = 2;
- // 分P
- int64 page = 3;
+ int64 top_view_id = 5;
//
- string from = 4;
- // 是否自动播放
- string url = 5;
- // 是否自动播放
- string cover = 6;
- // 是否自动播放
- bool auto_play = 7;
- // 按钮是否动态变色
- bool btn_dyc_color = 8;
- // 按钮动态变色时间 ms
- int32 btn_dyc_time = 9;
- // 用于做联播是否是同一个视频的id
- int64 biz_id = 10;
- // 开始播放三方监控
- repeated string process0_urls = 11;
- // 播放3S三方监控
- repeated string play_3s_urls = 12;
- // 播放5S三方监控
- repeated string play_5s_urls = 13;
- // 横竖屏
- int32 orientation = 14;
+ int32 creative_type = 6;
+ //
+ int32 card_type = 7;
+ //
+ int32 creative_style = 8;
+ //
+ int32 is_ad = 9;
+ //
+ CreativeDto creative_content = 10;
}
// 反馈面板功能模块
@@ -404,6 +354,12 @@ message AdFeedbackPanelDto {
string panel_type_text = 1;
// 反馈面版信息
repeated AdFeedbackPanelModuleDto feedback_panel_detail = 2;
+ //
+ string toast = 3;
+ //
+ string open_rec_tips = 4;
+ //
+ string close_rec_tips = 5;
}
// 反馈面版信息
@@ -421,14 +377,8 @@ message AdFeedbackPanelModuleDto {
string text = 5;
// 二级文案数组
repeated AdSecondFeedbackPanelDto secondary_panel = 6;
-}
-
-// 二级文案
-message AdSecondFeedbackPanelDto {
- // 屏蔽理由id
- int32 reason_id = 1;
- // 理由文案
- string text = 2;
+ //
+ string sub_text = 7;
}
// 开放平台商品
@@ -443,18 +393,40 @@ message AdGoodDto {
int64 sku_num = 4;
}
-//
-message QualityInfo {
- //
- string icon = 1;
- //
+// 有弹幕的ogv ep
+message AdOgvEpDto {
+ // 分集epid
+ int64 epid = 1;
+ // 是否显示 "荐"
+ bool has_recommend = 2;
+}
+
+// 广告控制
+message AdsControlDto {
+ // 视频是否有弹幕,如有,需请求弹幕广告
+ int32 has_danmu = 1;
+ // 有弹幕的分P视频的cid,已弃用
+ repeated int64 cids = 2;
+ // 有弹幕的ogv ep
+ repeated AdOgvEpDto eps = 3;
+}
+
+// 二级文案
+message AdSecondFeedbackPanelDto {
+ // 屏蔽理由id
+ int32 reason_id = 1;
+ // 理由文案
string text = 2;
- //
- bool is_bg = 3;
- //
- string bg_color = 4;
- //
- string bg_color_night = 5;
+}
+
+// 分享
+message AdShareInfoDto {
+ // 分享标题
+ string title = 1;
+ // 分享副标题
+ string subtitle = 2;
+ // 分享图片url
+ string image_url = 3;
}
// 广告主信息
@@ -472,3 +444,568 @@ message AdverDto {
//
string adver_desc = 6;
}
+
+//
+message AndroidGamePageRes {
+ //
+ Module1 module1 = 1;
+ //
+ Module3 module3 = 2;
+ //
+ Module4 module4 = 3;
+ //
+ Module5 module5 = 4;
+ //
+ Module6 module6 = 5;
+ //
+ Module7 module7 = 6;
+ //
+ Module8 module8 = 7;
+ //
+ Module9 module9 = 8;
+ //
+ Module10 module10 = 9;
+ //
+ Module11 module11 = 10;
+ //
+ Module12 module12 = 11;
+ //
+ Module13 module13 = 12;
+ //
+ repeated int32 module_seq = 13;
+ //
+ string background_color = 14;
+ //
+ Module14 module14 = 15;
+}
+
+//
+message AndroidTag {
+ //
+ string text = 1;
+ //
+ int32 type = 2;
+}
+
+// app下载白名单
+message AppPackageDto {
+ // 包大小(单位bytes)
+ int64 size = 1;
+ //
+ string display_name = 2;
+ //
+ string apk_name = 3;
+ // url
+ string url = 4;
+ // bili schema url
+ string bili_url = 5;
+ // 包md5
+ string md5 = 6;
+ // 包icon
+ string icon = 7;
+ // 开发者姓名
+ string dev_name = 8;
+ // 权限地址
+ string auth_url = 9;
+ // 权限名,逗号隔开
+ string auth_name = 10;
+ // 版本
+ string version = 11;
+ // 更新时间,yy-mm-hh格式
+ string update_time = 12;
+ // 隐私协议标题
+ string privacy_name = 13;
+ // 隐私协议url
+ string privacy_url = 14;
+}
+
+//
+message Bulletin {
+ //
+ string tag_text = 1;
+ //
+ string text = 2;
+}
+
+//
+message Comment {
+ //
+ int64 game_base_id = 1;
+ //
+ string user_name = 2;
+ //
+ string user_face = 3;
+ //
+ int32 user_level = 4;
+ //
+ string comment_no = 5;
+ //
+ int32 grade = 6;
+ //
+ string content = 7;
+ //
+ int32 up_count = 8;
+}
+
+//
+message CreativeDto {
+ //
+ string title = 1;
+ //
+ string description = 2;
+ //
+ string image_url = 3;
+ //
+ string image_md5 = 4;
+ //
+ string url = 5;
+ //
+ string click_url = 6;
+ //
+ string show_url = 7;
+ //
+ int64 video_id = 8;
+ //
+ string thumbnail_url = 9;
+ //
+ string thumbnail_url_md5 = 10;
+ //
+ string logo_url = 11;
+ //
+ string logo_md5 = 12;
+ //
+ string username = 13;
+}
+
+//
+message CustomPlayUrl {
+ //
+ int32 play_time = 1;
+ //
+ repeated string urls = 2;
+}
+
+//
+message ForwardReply {
+ //
+ int64 comment_id = 1;
+ //
+ string message = 2;
+ //
+ string highlight_text = 3;
+ //
+ string highlight_prefix_icon = 4;
+ //
+ string callup_url = 5;
+ //
+ string jump_url = 6;
+ //
+ int32 jump_type = 7;
+ //
+ string author_name = 8;
+ //
+ string author_icon = 9;
+}
+
+//
+message Gift {
+ //
+ string icon = 1;
+ //
+ string night_icon = 2;
+ //
+ string text = 3;
+ //
+ string url = 4;
+}
+
+//
+message IosGamePageRes {
+ //
+ string logo = 1;
+ //
+ string name = 2;
+ //
+ string sub_titile = 3;
+ //
+ repeated string image_url = 4;
+ //
+ string desc = 5;
+ //
+ AdButtonDto game_button = 6;
+ //
+ double grade = 7;
+ //
+ string rank_num = 8;
+ //
+ string rank_name = 9;
+}
+
+//
+message Module1 {
+ //
+ string game_name = 1;
+ //
+ string game_icon = 2;
+ //
+ string developer_input_name = 3;
+ //
+ repeated AndroidTag tag_list = 4;
+}
+
+//
+message Module3 {
+ //
+ bool display = 1;
+ //
+ repeated QualityParmas quality_params = 3;
+}
+
+//
+message Module4 {
+ //
+ bool display = 1;
+ //
+ int32 gift_num = 2;
+ //
+ string gift_name = 3;
+ //
+ int32 gift_icon_num = 4;
+ //
+ repeated string icon_urls = 5;
+}
+
+//
+message Module5 {
+ //
+ bool display = 1;
+ //
+ string game_summary = 2;
+}
+
+//
+message Module6 {
+ //
+ bool display = 1;
+ //
+ string game_desc = 2;
+}
+
+//
+message Module7 {
+ //
+ bool display = 1;
+ //
+ repeated ScreenShots screen_shots = 2;
+}
+
+//
+message Module8 {
+ //
+ bool display = 1;
+ //
+ repeated string tag_list = 2;
+}
+
+//
+message Module9 {
+ //
+ bool display = 1;
+ //
+ string dev_introduction = 2;
+}
+
+//
+message Module10 {
+ //
+ bool display = 1;
+ //
+ string latest_update = 2;
+}
+
+//
+message Module11 {
+ //
+ bool display = 1;
+ //
+ repeated int32 star_number_list = 2;
+ //
+ string comment_str = 3;
+ //
+ double grade = 4;
+}
+
+//
+message Module12 {
+ //
+ bool display = 1;
+ //
+ repeated Comment comment_list = 2;
+ //
+ string comment_num = 3;
+ //
+ bool show_all_comment = 4;
+}
+
+//
+message Module13 {
+ //
+ int64 pkg_size = 1;
+ //
+ string customer_service = 2;
+ //
+ string website = 3;
+ //
+ string authority = 4;
+ //
+ string privacy = 5;
+ //
+ string developer_name = 6;
+ //
+ string update_time = 7;
+ //
+ string game_version = 8;
+ //
+ string android_pkg_name = 9;
+}
+
+//
+message Module14 {
+ //
+ repeated Reward reward_list = 1;
+ //
+ bool display = 2;
+}
+
+//
+message NotClickableArea {
+ //
+ int32 x = 1;
+ //
+ int32 y = 2;
+ //
+ int32 z = 3;
+}
+
+//
+message QualityInfo {
+ //
+ string icon = 1;
+ //
+ string text = 2;
+ //
+ bool is_bg = 3;
+ //
+ string bg_color = 4;
+ //
+ string bg_color_night = 5;
+}
+
+//
+message QualityParmas {
+ //
+ string first_line = 1;
+ //
+ string second_line = 2;
+ //
+ double grade = 3;
+ //
+ string rank_icon = 4;
+ //
+ int32 quality_type = 5;
+}
+
+//
+message Reward {
+ //
+ int32 level = 1;
+ //
+ string title = 2;
+ //
+ string content = 3;
+ //
+ string pic = 4;
+ //
+ bool reach = 5;
+}
+
+//
+message ScreenShots {
+ //
+ string url = 1;
+ //
+ int32 height = 2;
+ //
+ int32 width = 3;
+ //
+ int32 seq = 4;
+}
+
+// 广告数据
+message SourceContentDto {
+ // 广告请求id
+ string request_id = 1;
+ // 广告资源位source ID
+ int32 source_id = 2;
+ // 广告资源位resource ID
+ int32 resource_id = 3;
+ // 广告位上报标记,对广告返回数据恒为true
+ bool is_ad_loc = 4;
+ // 与天马现有逻辑一致, 0有含义
+ // 0:内容 1:广告
+ google.protobuf.Int32Value server_type = 5;
+ // 客户端IP回传拼接
+ string client_ip = 6;
+ // 广告卡片位置在一刷中的位置, 天马用, 0有含义
+ google.protobuf.Int32Value card_index = 7;
+ // 广告资源位source 位次
+ int32 index = 8;
+ // 广告内容
+ AdDto ad_content = 9;
+}
+
+//
+message SubCardModule {
+ //
+ string subcard_type = 1;
+ //
+ string icon = 2;
+ //
+ string desc = 3;
+ //
+ string rank_stars = 4;
+ //
+ string amount_number = 5;
+ //
+ string avatar = 6;
+ //
+ string title = 7;
+ //
+ AdButtonDto button = 8;
+ //
+ repeated TagInfo tag_infos = 9;
+}
+
+//
+message Tab2ExtraDto {
+ //
+ string cover_url = 1;
+ //
+ string title = 2;
+ //
+ string desc = 3;
+ //
+ AdButtonDto button = 5;
+ //
+ int32 auto_animate_time_ms = 6;
+ //
+ bool enable_click = 7;
+ //
+ string panel_url = 8;
+ //
+ repeated AppPackageDto download_whitelist = 9;
+ //
+ repeated string open_whitelist = 10;
+ //
+ bool use_ad_web_v2 = 11;
+ //
+ bool enable_store_direct_launch = 12;
+ //
+ int32 sales_type = 13;
+ //
+ int32 landingpage_download_style = 15;
+ //
+ int32 appstore_priority = 16;
+ //
+ string appstore_url = 17;
+ //
+ int32 appstore_delay_time = 18;
+ //
+ int32 page_cover_type = 19;
+ //
+ int32 page_pull_type = 20;
+ //
+ AndroidGamePageRes android_game_page_res = 21;
+ //
+ IosGamePageRes ios_game_page_res = 22;
+ //
+ AdBusinessMarkDto ad_tag_style = 23;
+ //
+ AdFeedbackPanelDto feedback_panel = 24;
+ //
+ string ad_cb = 25;
+ //
+ int32 url_type = 26;
+}
+
+//
+message TabExtraDto {
+ //
+ string tab_url = 1;
+ //
+ int32 enable_store_direct_launch = 2;
+ //
+ int32 store_callup_card = 3;
+ //
+ int32 sales_type = 4;
+ //
+ repeated AppPackageDto download_whitelist = 5;
+ //
+ bool special_industry = 6;
+ //
+ string special_industry_tips = 7;
+ //
+ repeated string open_whitelist = 8;
+ //
+ int32 landingpage_download_style = 9;
+ //
+ int32 appstore_priority = 10;
+ //
+ bool use_ad_web_v2 = 11;
+ //
+ bool enable_download_dialog = 12;
+ //
+ string appstore_url = 13;
+ //
+ int32 appstore_delay_time = 14;
+}
+
+//
+message TabInfoDto {
+ //
+ string tab_name = 1;
+ //
+ google.protobuf.Any extra = 2;
+ //
+ int32 tab_version = 3;
+}
+
+//
+message TagInfo {
+ //
+ string text = 1;
+ //
+ string text_color = 2;
+ //
+ string text_color_night = 3;
+ //
+ string bg_color = 4;
+ //
+ string bg_color_night = 5;
+ //
+ string border_color = 6;
+ //
+ string border_color_night = 7;
+ //
+ string type = 8;
+}
+
+//
+message WxProgramInfo {
+ //
+ string org_id = 1;
+ //
+ string name = 2;
+ //
+ string path = 3;
+}
diff --git a/grpc_api/bilibili/api/player/v1/player.proto b/grpc_api/bilibili/api/player/v1/player.proto
new file mode 100644
index 0000000..7bc23b3
--- /dev/null
+++ b/grpc_api/bilibili/api/player/v1/player.proto
@@ -0,0 +1,75 @@
+syntax = "proto3";
+
+package bilibili.api.player.v1;
+
+// 心跳上报
+service Heartbeat {
+ // 客户端心跳上报
+ rpc Mobile(HeartbeatReq) returns (HeartbeatReply);
+}
+
+// 客户端心跳上报-响应
+message HeartbeatReply {
+ // 时间戳
+ int64 ts = 1;
+}
+
+// 客户端心跳上报-请求
+message HeartbeatReq {
+ //
+ int64 server_time = 1;
+ //
+ string session = 2;
+ // 用户 mid
+ int64 mid = 3;
+ // 稿件 avid
+ int64 aid = 4;
+ // 视频 cid
+ int64 cid = 5;
+ //
+ string sid = 6;
+ //
+ int64 epid = 7;
+ //
+ string type = 8;
+ //
+ int32 sub_type = 9;
+ //
+ int32 quality = 10;
+ //
+ int64 total_time = 11;
+ //
+ int64 paused_time = 12;
+ //
+ int64 played_time = 13;
+ //
+ int64 video_duration = 14;
+ //
+ string play_type = 15;
+ //
+ int32 network_type = 16;
+ //
+ int64 last_play_progress_time = 17;
+ //
+ int64 max_play_progress_time = 18;
+ //
+ int32 from = 19;
+ //
+ string from_spmid = 20;
+ //
+ string spmid = 21;
+ //
+ string epid_status = 22;
+ //
+ string play_status = 23;
+ //
+ string user_status = 24;
+ //
+ int64 actual_played_time = 25;
+ //
+ int32 auto_play = 26;
+ //
+ int64 list_play_time = 27;
+ //
+ int64 detail_play_time = 28;
+}
diff --git a/grpc_api/bilibili/api/probe/v1/probe.proto b/grpc_api/bilibili/api/probe/v1/probe.proto
index 69223a8..e67ca94 100644
--- a/grpc_api/bilibili/api/probe/v1/probe.proto
+++ b/grpc_api/bilibili/api/probe/v1/probe.proto
@@ -1,70 +1,192 @@
-syntax = "proto3";
-
-package bilibili.api.probe.v1;
-
-//
-service Probe {
- //
- rpc TestCode (CodeReq) returns (CodeReply);
- //
- rpc TestReq (ProbeReq) returns (ProbeReply);
- //
- rpc TestStream (ProbeStreamReq) returns (ProbeStreamReply);
- //
- rpc TestSub (ProbeSubReq) returns (ProbeSubReply);
-}
-
-//
-message CodeReq {
- //
- int64 code = 1;
-}
-
-//
-message CodeReply {}
-
-//
-message ProbeReq {
- //
- int64 mid = 1;
- //
- string buvid = 2;
-}
-
-//
-message ProbeReply {
- //
- string content = 1;
- //
- int64 timestamp = 2;
-}
-
-//
-message ProbeStreamReq {
- //
- int64 mid = 1;
- //
- int64 sequence = 2;
-}
-
-//
-message ProbeStreamReply {
- //
- int64 sequence = 1;
- //
- int64 timestamp = 2;
- //
- string content = 3;
-}
-
-//
-message ProbeSubReq {
- //
- int64 buvid = 1;
-}
-
-//
-message ProbeSubReply {
- //
- int64 message_id = 1;
+syntax = "proto3";
+
+package bilibili.api.probe.v1;
+
+// 服务可用性探针
+service Probe {
+ //
+ rpc TestCode (CodeReq) returns (CodeReply);
+ //
+ rpc TestReq (ProbeReq) returns (ProbeReply);
+ //
+ rpc TestStream (ProbeStreamReq) returns (ProbeStreamReply);
+ //
+ rpc TestSub (ProbeSubReq) returns (ProbeSubReply);
+}
+
+// 服务可用性探针
+service ProbeService {
+ //
+ rpc Echo(SimpleMessage) returns (SimpleMessage);
+ //
+ rpc EchoBody(SimpleMessage) returns (SimpleMessage);
+ //
+ rpc EchoDelete(SimpleMessage) returns (SimpleMessage);
+ //
+ rpc EchoError(ErrorMessage) returns (ErrorMessage);
+ //
+ rpc EchoPatch(DynamicMessageUpdate) returns (DynamicMessageUpdate);
+}
+
+//
+enum Category {
+ CATEGORY_UNSPECIFIED = 0; //
+ CATEGORY_ONE = 1; //
+ CATEGORY_TWO = 2; //
+ CATEGORY_THREE = 3; //
+ CATEGORY_FOUR = 4; //
+}
+
+//
+message CodeReply {
+ //
+ string id = 1;
+ //
+ string id1 = 2;
+ //
+ int64 code = 3;
+ //
+ string message_s = 4;
+}
+
+//
+message CodeReq {
+ //
+ int64 code = 1;
+}
+
+//
+message CreateTopic {
+ //
+ int64 id = 1;
+}
+
+//
+message CreatTask {
+ //
+ string name = 1;
+}
+
+//
+message DynamicMessageUpdate {
+ //
+ SimpleMessage body = 1;
+}
+
+//
+message Embedded {
+ //
+ bool bool_val = 1;
+ //
+ int32 int32_val = 2;
+ //
+ int64 int64_val = 3;
+ //
+ float float_val = 4;
+ //
+ double double_val = 5;
+ //
+ string string_val = 6;
+ //
+ repeated bool repeated_bool_val = 7;
+ //
+ repeated int32 repeated_int32_val = 8;
+ //
+ repeated int64 repeated_int64_val = 9;
+ //
+ repeated float repeated_float_val = 10;
+ //
+ repeated double repeated_double_val = 11;
+ //
+ repeated string repeated_string_val = 12;
+ //
+ map map_string_val = 13;
+ //
+ map map_error_val = 14;
+}
+
+//
+message ErrorMessage {
+ //
+ int64 code = 1;
+ //
+ string reason = 2;
+ //
+ string message = 3;
+}
+
+// Deprecated
+enum ErrorReason {
+ PROBE_UNSPECIFIED = 0; //
+ PROBE_CATEGORY_NOTFOUND = 1; //
+}
+
+//
+message ProbeReply {
+ //
+ string content = 1;
+ //
+ int64 timestamp = 2;
+}
+
+//
+message ProbeReq {
+ //
+ int64 mid = 1;
+ //
+ string buvid = 2;
+}
+
+//
+message ProbeStreamReply {
+ //
+ int64 sequence = 1;
+ //
+ int64 timestamp = 2;
+ //
+ string content = 3;
+}
+
+//
+message ProbeStreamReq {
+ //
+ int64 mid = 1;
+ //
+ int64 sequence = 2;
+}
+
+//
+message ProbeSubReply {
+ //
+ int64 message_id = 1;
+}
+
+//
+message ProbeSubReq {
+ //
+ string buvid = 1;
+}
+
+//
+message SimpleMessage {
+ //
+ int32 id = 1;
+ //
+ int64 num = 2;
+ //
+ string lang = 3;
+ //
+ int32 cate = 4;
+ //
+ Embedded embedded = 5;
+}
+
+//
+message Task {
+ //
+ string name = 1;
+ //
+ string author = 2;
+ //
+ bool cache = 3;
}
\ No newline at end of file
diff --git a/grpc_api/bilibili/api/ticket/v1/ticket.proto b/grpc_api/bilibili/api/ticket/v1/ticket.proto
new file mode 100644
index 0000000..4e05f2d
--- /dev/null
+++ b/grpc_api/bilibili/api/ticket/v1/ticket.proto
@@ -0,0 +1,79 @@
+syntax = "proto3";
+
+package bilibili.api.ticket.v1;
+
+service Ticket {
+ // 获取鉴权用 Ticket
+ rpc GetTicket (GetTicketRequest) returns (GetTicketResponse);
+ // 获取 Webview 页面使用的 Ticket
+ rpc GenWebTicket (GenWebTicketRequest) returns (GenWebTicketResponse);
+}
+
+//
+message GenWebTicketRequest {
+ //
+ map context = 1;
+ //
+ string key_id = 2;
+ //
+ string hexsign = 3;
+ //
+ string token = 4;
+}
+
+//
+message GenWebTicketResponse {
+ //
+ message Context {
+ //
+ string v_voucher = 1;
+ }
+ //
+ message Nav {
+ //
+ string img = 1;
+ //
+ string sub = 2;
+ }
+ //
+ string ticket = 1;
+ //
+ int64 created_at = 2;
+ //
+ int64 ttl = 3;
+ //
+ Context context = 4;
+ //
+ Nav nav = 5;
+}
+
+//
+message GetTicketRequest {
+ // 包含:
+ // + x-fingerprint(包含手机各类信息, 使用 datacenter.hakase.protobuf.AndroidDeviceInfo 生成)
+ // + x-exbadbasket(?)
+ map context = 1;
+ // 暂时固定为 ec01
+ string key_id = 2;
+ //
+ bytes sign = 3;
+ // 暂时留空
+ string token = 4;
+}
+
+//
+message GetTicketResponse {
+ //
+ message Context {
+ //
+ string v_voucher = 1;
+ }
+ // x-bili-ticket
+ string ticket = 1;
+ // 有效期起
+ int64 created_at = 2;
+ // 有效期
+ int64 ttl = 3;
+ //
+ Context context = 4;
+}
diff --git a/grpc_api/bilibili/app/archive/middleware/v1/preload.proto b/grpc_api/bilibili/app/archive/middleware/v1/preload.proto
index e5b01e0..e7746e6 100644
--- a/grpc_api/bilibili/app/archive/middleware/v1/preload.proto
+++ b/grpc_api/bilibili/app/archive/middleware/v1/preload.proto
@@ -13,4 +13,6 @@ message PlayerArgs {
// 返回url是否强制使用域名
// 0:不强制使用域名 1:http域名 2:https域名
int64 force_host = 4;
+ // 音量均衡
+ int64 voice_balance = 5;
}
\ No newline at end of file
diff --git a/grpc_api/bilibili/app/archive/v1/archive.proto b/grpc_api/bilibili/app/archive/v1/archive.proto
index c661f7a..566e2e6 100644
--- a/grpc_api/bilibili/app/archive/v1/archive.proto
+++ b/grpc_api/bilibili/app/archive/v1/archive.proto
@@ -3,7 +3,7 @@ syntax = "proto3";
package bilibili.app.archive.v1;
// 稿件基本信息
-message Arc{
+message Arc {
// 稿件avid
int64 aid = 1;
// 稿件分P数
@@ -66,10 +66,18 @@ message Arc{
int64 season_id = 29;
// 新版属性位配置(也没用)
int64 attribute_v2 = 30;
+ //
+ SeasonTheme season_theme = 31;
+ //
+ string short_link_v2 = 40;
+ //
+ int32 up_from_v2 = 41;
+ //
+ string first_frame = 42;
}
// UP主信息
-message Author{
+message Author {
// UP主mid
int64 mid = 1;
// UP主昵称
@@ -79,7 +87,7 @@ message Author{
}
// 分辨率
-message Dimension{
+message Dimension {
// 宽度
int64 width = 1;
// 高度
@@ -90,7 +98,7 @@ message Dimension{
}
// 分P信息
-message Page{
+message Page {
// 视频cid
int64 cid = 1;
// 分P序号
@@ -110,10 +118,12 @@ message Page{
string webLink = 8;
// 分P分辨率
Dimension dimension = 9;
+ //
+ string first_frame = 10;
}
// 稿件控制标志
-message Rights{
+message Rights {
// 老版是否付费
int32 bp = 1;
// 允许充电
@@ -126,11 +136,11 @@ message Rights{
int32 pay = 5;
// 是否高码率
int32 hd5 = 6;
- // 是否禁止转载标志
+ // 是否显示“禁止转载”标志
int32 no_reprint = 7;
// 是否允许自动播放
int32 autoplay = 8;
- // UGC稿件需要付费
+ // UGC稿件需要付费(旧版)
int32 ugc_pay = 9;
// 是否联合投稿
int32 is_cooperation = 10;
@@ -138,10 +148,24 @@ message Rights{
int32 ugc_pay_preview = 11;
// 是否禁止后台播放
int32 no_background = 12;
+ // UGC稿件需要付费
+ int32 arc_pay = 13;
+ // 是否已付费可自由观看
+ int32 pay_free_watch = 14;
+}
+
+//
+message SeasonTheme {
+ //
+ string bg_color = 1;
+ //
+ string selected_bg_color = 2;
+ //
+ string text_color = 3;
}
// 合作成员信息
-message StaffInfo{
+message StaffInfo {
// 成员mid
int64 mid = 1;
// 成员角色
@@ -152,10 +176,10 @@ message StaffInfo{
}
// 状态数
-message Stat{
+message Stat {
// 稿件avid
int64 aid = 1;
- // 播放数
+ // 播放数(当屏蔽时为-1)
int32 view = 2;
// 弹幕数
int32 danmaku = 3;
diff --git a/grpc_api/bilibili/app/card/v1/card.proto b/grpc_api/bilibili/app/card/v1/card.proto
index 949ab10..cb90f0e 100644
--- a/grpc_api/bilibili/app/card/v1/card.proto
+++ b/grpc_api/bilibili/app/card/v1/card.proto
@@ -27,5 +27,7 @@ message Card {
PopularTopEntrance popular_top_entrance = 9;
//
RcmdOneItem rcmd_one_item = 10;
+ //
+ SmallCoverV5Ad small_cover_v5_ad = 11;
}
}
diff --git a/grpc_api/bilibili/app/card/v1/common.proto b/grpc_api/bilibili/app/card/v1/common.proto
index eaa5c35..a804c13 100644
--- a/grpc_api/bilibili/app/card/v1/common.proto
+++ b/grpc_api/bilibili/app/card/v1/common.proto
@@ -4,6 +4,50 @@ package bilibili.app.card.v1;
import "bilibili/app/card/v1/ad.proto";
+//
+message Args {
+ //
+ int32 type = 1;
+ //
+ int64 up_id = 2;
+ //
+ string up_name = 3;
+ //
+ int32 rid = 4;
+ //
+ string rname = 5;
+ //
+ int64 tid = 6;
+ //
+ string tname = 7;
+ //
+ string track_id = 8;
+ //
+ string state = 9;
+ //
+ int32 converge_type = 10;
+ //
+ int64 aid = 11;
+}
+
+//
+message Avatar {
+ //
+ string cover = 1;
+ //
+ string text = 2;
+ //
+ string uri = 3;
+ //
+ int32 type = 4;
+ //
+ string event = 5;
+ //
+ string event_v2 = 6;
+ //
+ int32 defalut_cover = 7;
+}
+
// 条目基本信息
message Base {
// 卡片类型
@@ -44,6 +88,8 @@ message Base {
Button desc_button = 17;
// 三点v4
ThreePointV4 three_point_v4 = 18;
+ //
+ UpArgs up_args = 19;
}
// 按钮信息
@@ -66,16 +112,6 @@ message Button {
Relation relation = 8;
}
-//
-message ThreePoint {
- //
- repeated DislikeReason dislike_reasons = 1;
- //
- repeated DislikeReason feedbacks = 2;
- //稍后再看
- int32 watch_later = 3;
-}
-
//
message DislikeReason {
//
@@ -85,29 +121,27 @@ message DislikeReason {
}
//
-message Args {
+message LikeButton {
//
- int32 type = 1;
+ int64 Aid = 1;
//
- int64 up_id = 2;
+ int32 count = 2;
//
- string up_name = 3;
+ bool show_count = 3;
//
- int32 rid = 4;
+ string event = 4;
//
- string rname = 5;
+ int32 selected = 5;
//
- int64 tid = 6;
+ string event_v2 = 6;
+}
+
+//
+message Mask {
//
- string tname = 7;
+ Avatar avatar = 1;
//
- string track_id = 8;
- //
- string state = 9;
- //
- int32 converge_type = 10;
- //
- int64 aid = 11;
+ Button button = 2;
}
//
@@ -134,30 +168,89 @@ message PlayerArgs {
int64 season_id = 11;
}
-//
-message Mask {
+// 标签框信息
+message ReasonStyle {
+ // 文案
+ string text = 1;
+ // 文字颜色
+ string text_color = 2;
+ // 背景色
+ string bg_color = 3;
+ // 边框色
+ string border_color = 4;
+ // 图标url
+ string icon_url = 5;
+ // 文字颜色-夜间
+ string text_color_night = 6;
+ // 背景色-夜间
+ string bg_color_night = 7;
+ // 边框色-夜间
+ string border_color_night = 8;
+ // 图标url-夜间
+ string icon_night_url = 9;
+ // 背景风格id
+ // 1:无背景 2:有背景
+ int32 bg_style = 10;
//
- Avatar avatar = 1;
+ string uri = 11;
//
- Button button = 2;
+ string icon_bg_url = 12;
+ //
+ string event = 13;
+ //
+ string event_v2 = 14;
+ //
+ int32 right_icon_type = 15;
+ //
+ string left_icon_type = 16;
+}
+
+// 关系信息
+message Relation {
+ // 关系状态
+ int32 status = 1;
+ // 是否关注
+ int32 is_follow = 2;
+ // 是否粉丝
+ int32 is_followed = 3;
+}
+
+// 分享面板信息
+message SharePlane {
+ // 标题
+ string title = 1;
+ // 副标贴文案
+ string share_subtitle = 2;
+ // 备注
+ string desc = 3;
+ // 封面url
+ string cover = 4;
+ // 稿件avid
+ int64 aid = 5;
+ // 稿件bvid
+ string bvid = 6;
+ // 允许分享方式
+ map share_to = 7;
+ // UP主昵称
+ string author = 8;
+ // UP主mid
+ int64 author_id = 9;
+ // 短连接
+ string short_link = 10;
+ // 播放次数文案
+ string play_number = 11;
+ //
+ int64 first_cid = 12;
}
//
-message Avatar {
+message ThreePoint {
//
- string cover = 1;
+ repeated DislikeReason dislike_reasons = 1;
//
- string text = 2;
- //
- string uri = 3;
- //
- int32 type = 4;
- //
- string event = 5;
- //
- string event_v2 = 6;
- //
- int32 defalut_cover = 7;
+ repeated DislikeReason feedbacks = 2;
+ //稍后再看
+ int32 watch_later = 3;
}
//
@@ -208,93 +301,6 @@ message ThreePointV4 {
WatchLater watch_later = 2;
}
-// 分享面板信息
-message SharePlane {
- // 标题
- string title = 1;
- // 副标贴文案
- string share_subtitle = 2;
- // 备注
- string desc = 3;
- // 封面url
- string cover = 4;
- // 稿件avid
- int64 aid = 5;
- // 稿件bvid
- string bvid = 6;
- // 允许分享方式
- map share_to = 7;
- // UP主昵称
- string author = 8;
- // UP主mid
- int64 author_id = 9;
- // 短连接
- string short_link = 10;
- // 播放次数文案
- string play_number = 11;
-}
-
-// 稍后再看信息
-message WatchLater {
- // 稿件avid
- int64 aid = 1;
- // 稿件bvid
- string bvid = 2;
-}
-
-// 标签框信息
-message ReasonStyle {
- // 文案
- string text = 1;
- // 文字颜色
- string text_color = 2;
- // 背景色
- string bg_color = 3;
- // 边框色
- string border_color = 4;
- // 图标url
- string icon_url = 5;
- // 文字颜色-夜间
- string text_color_night = 6;
- // 背景色-夜间
- string bg_color_night = 7;
- // 边框色-夜间
- string border_color_night = 8;
- // 图标url-夜间
- string icon_night_url = 9;
- // 背景风格id
- // 1:无背景 2:有背景
- int32 bg_style = 10;
- //
- string uri = 11;
- //
- string icon_bg_url = 12;
- //
- string event = 13;
- //
- string event_v2 = 14;
- //
- int32 right_icon_type = 15;
- //
- string left_icon_type = 16;
-}
-
-//
-message LikeButton {
- //
- int64 Aid = 1;
- //
- int32 count = 2;
- //
- bool show_count = 3;
- //
- string event = 4;
- //
- int32 selected = 5;
- //
- string event_v2 = 6;
-}
-
//
message Up {
//
@@ -313,12 +319,22 @@ message Up {
string cooperation = 7;
}
-// 关系信息
-message Relation {
- // 关系状态
- int32 status = 1;
- // 是否关注
- int32 is_follow = 2;
- // 是否粉丝
- int32 is_followed = 3;
+//
+message UpArgs {
+ //
+ int64 up_id = 1;
+ //
+ string up_name = 2;
+ //
+ string up_face = 3;
+ //
+ int64 selected = 4;
+}
+
+// 稍后再看信息
+message WatchLater {
+ // 稿件avid
+ int64 aid = 1;
+ // 稿件bvid
+ string bvid = 2;
}
diff --git a/grpc_api/bilibili/app/card/v1/single.proto b/grpc_api/bilibili/app/card/v1/single.proto
index bc7a984..f7eec43 100644
--- a/grpc_api/bilibili/app/card/v1/single.proto
+++ b/grpc_api/bilibili/app/card/v1/single.proto
@@ -30,6 +30,42 @@ message SmallCoverV5 {
int32 right_icon_2 = 11;
// 左上角角标
ReasonStyle left_corner_mark_style = 12;
+ //
+ string cover_right_text_content_description = 13;
+ //
+ string right_desc1_content_description = 14;
+}
+
+//
+message SmallCoverV5Ad {
+ //
+ Base base = 1;
+ //
+ string cover_gif = 2;
+ //
+ Up up = 3;
+ //
+ string cover_right_text1 = 4;
+ //
+ string right_desc1 = 5;
+ //
+ string right_desc2 = 6;
+ //
+ ReasonStyle rcmd_reason_style = 7;
+ //
+ HotwordEntrance hotword_entrance = 8;
+ //
+ ReasonStyle corner_mark_style = 9;
+ //
+ int32 right_icon1 = 10;
+ //
+ int32 right_icon2 = 11;
+ //
+ ReasonStyle left_corner_mark_style = 12;
+ //
+ string cover_right_text_content_description = 13;
+ //
+ string right_desc1_content_description = 14;
}
//
@@ -157,6 +193,10 @@ message SmallCoverRcmdItem {
int32 rightIcon1 = 10;
// 右侧文案2图标id
int32 rightIcon2 = 11;
+ //
+ string cover_right_text_content_description = 12;
+ //
+ string right_desc1_content_description = 13;
}
//
@@ -310,4 +350,4 @@ message Bubble {
int32 version = 2;
// 起始时间
int64 stime = 3;
-}
\ No newline at end of file
+}
diff --git a/grpc_api/bilibili/app/click/v1/heartbeat.proto b/grpc_api/bilibili/app/click/v1/heartbeat.proto
new file mode 100644
index 0000000..51bc55f
--- /dev/null
+++ b/grpc_api/bilibili/app/click/v1/heartbeat.proto
@@ -0,0 +1,122 @@
+syntax = "proto3";
+
+package bilibili.app.click.v1;
+
+service Click {
+ // 客户端心跳上传
+ rpc HeartBeat (HeartBeatReq) returns (HeartBeatReply);
+}
+
+// 账户信息
+message AccountInfo {
+ //
+ uint64 mid = 1;
+}
+
+//
+message AppInfo {
+ //
+ string top_page_class = 1;
+ // 客户端首次启动时的毫秒时间戳
+ int64 ftime = 2;
+ //
+ string did = 3;
+}
+
+// 心跳补充信息
+message Extra {
+ //
+ string session = 1;
+ //
+ string refer = 2;
+}
+
+message HeartBeatReply {}
+
+//
+message HeartBeatReq {
+ //
+ string session_v2 = 1;
+ //
+ Stage stage = 2;
+ // 流加载失败timeout
+ uint64 stream_timeout = 3;
+ //
+ uint64 batch_frequency = 4;
+ //
+ float frequency = 5;
+ //
+ VideoMeta video_meta = 6;
+ //
+ AppInfo app_info = 7;
+ //
+ AccountInfo account_info = 8;
+ //
+ PreProcessResult pre_process_result = 9;
+ //
+ repeated PlayerStatus player_status = 10;
+ //
+ VideoInfo video_info = 11;
+}
+
+//
+message PlayerStatus {
+ //
+ float playback_rate = 1;
+ //
+ uint64 progress = 2;
+ //
+ PlayState play_state = 3;
+ //
+ bool is_buffering = 4;
+}
+
+//
+enum PlayState {
+ //
+ STATE_UNKNOWN = 0;
+ //
+ PREPARING = 1;
+ //
+ PREPARED = 2;
+ //
+ PLAYING = 3;
+ //
+ PAUSED = 4;
+ //
+ STOPPED = 5;
+ //
+ FAILED = 6;
+}
+
+//
+message PreProcessResult {
+ //
+ int64 vt = 1;
+}
+
+//
+enum Stage {
+ //
+ STAGE_UNKNOWN = 0;
+ //
+ START = 1;
+ //
+ END = 2;
+ //
+ SAMPLE = 3;
+}
+
+//
+message VideoInfo {
+ //
+ uint64 cid_duration = 1;
+}
+
+//
+message VideoMeta {
+ //
+ uint64 aid = 1;
+ //
+ uint64 cid = 2;
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/app/distribution/setting/download.proto b/grpc_api/bilibili/app/distribution/setting/download.proto
new file mode 100644
index 0000000..e738e99
--- /dev/null
+++ b/grpc_api/bilibili/app/distribution/setting/download.proto
@@ -0,0 +1,11 @@
+syntax = "proto3";
+
+package bilibili.app.distribution.setting.download;
+
+import "bilibili/app/distribution/v1/distribution.proto";
+
+//
+message DownloadSettingsConfig {
+ //
+ bilibili.app.distribution.v1.BoolValue enable_download_auto_start = 1;
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/app/distribution/setting/dynamic.proto b/grpc_api/bilibili/app/distribution/setting/dynamic.proto
new file mode 100644
index 0000000..96abf58
--- /dev/null
+++ b/grpc_api/bilibili/app/distribution/setting/dynamic.proto
@@ -0,0 +1,17 @@
+syntax = "proto3";
+
+package bilibili.app.distribution.setting.dynamic;
+
+import "bilibili/app/distribution/v1/distribution.proto";
+
+//
+message DynamicAutoPlay {
+ //
+ bilibili.app.distribution.v1.Int64Value value = 1;
+}
+
+//
+message DynamicDeviceConfig {
+ //
+ DynamicAutoPlay auto_play = 1;
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/app/distribution/setting/experimental.proto b/grpc_api/bilibili/app/distribution/setting/experimental.proto
new file mode 100644
index 0000000..eaf9a67
--- /dev/null
+++ b/grpc_api/bilibili/app/distribution/setting/experimental.proto
@@ -0,0 +1,65 @@
+syntax = "proto3";
+
+package bilibili.app.distribution.setting.experimental;
+
+import "bilibili/app/distribution/v1/distribution.proto";
+
+//
+message DynamicSelect {
+ //
+ bilibili.app.distribution.v1.BoolValue fold = 1;
+}
+
+//
+message Exp {
+ //
+ bilibili.app.distribution.v1.Int64Value id = 1;
+ //
+ bilibili.app.distribution.v1.Int32Value bucket = 2;
+}
+
+//
+message ExperimentalConfig {
+ //
+ bilibili.app.distribution.v1.StringValue flag = 1;
+ //
+ repeated Exp exps = 2;
+}
+
+//
+message MultipleTusConfig {
+ //
+ TopLeft top_left = 1;
+ //
+ DynamicSelect dynamic_select = 2;
+}
+
+// APP首页头像跳转信息
+message TopLeft {
+ //
+ bilibili.app.distribution.v1.StringValue url = 1;
+ //
+ bilibili.app.distribution.v1.StringValue story_foreground_image = 2;
+ //
+ bilibili.app.distribution.v1.StringValue story_background_image = 3;
+ //
+ bilibili.app.distribution.v1.StringValue listen_foreground_image = 4;
+ //
+ bilibili.app.distribution.v1.StringValue listen_background_image = 5;
+ //
+ bilibili.app.distribution.v1.StringValue ios_story_foreground_image = 6;
+ //
+ bilibili.app.distribution.v1.StringValue ios_story_background_image = 7;
+ //
+ bilibili.app.distribution.v1.StringValue ios_listen_foreground_image = 8;
+ //
+ bilibili.app.distribution.v1.StringValue ios_listen_background_image = 9;
+ //
+ bilibili.app.distribution.v1.StringValue goto = 10;
+ //
+ bilibili.app.distribution.v1.StringValue url_v2 = 11;
+ //
+ bilibili.app.distribution.v1.Int64Value goto_v2 = 12;
+ //
+ bilibili.app.distribution.v1.StringValue badge = 13;
+}
diff --git a/grpc_api/bilibili/app/distribution/setting/internaldevice.proto b/grpc_api/bilibili/app/distribution/setting/internaldevice.proto
new file mode 100644
index 0000000..76c95b9
--- /dev/null
+++ b/grpc_api/bilibili/app/distribution/setting/internaldevice.proto
@@ -0,0 +1,11 @@
+syntax = "proto3";
+
+package bilibili.app.distribution.setting.internaldevice;
+
+import "bilibili/app/distribution/v1/distribution.proto";
+
+//
+message InternalDeviceConfig {
+ // 首次启动时间
+ bilibili.app.distribution.v1.Int64Value fts = 1;
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/app/distribution/setting/night.proto b/grpc_api/bilibili/app/distribution/setting/night.proto
new file mode 100644
index 0000000..6d811aa
--- /dev/null
+++ b/grpc_api/bilibili/app/distribution/setting/night.proto
@@ -0,0 +1,11 @@
+syntax = "proto3";
+
+package bilibili.app.distribution.setting.night;
+
+import "bilibili/app/distribution/v1/distribution.proto";
+
+//
+message NightSettingsConfig {
+ //
+ bilibili.app.distribution.v1.BoolValue is_night_follow_system = 1;
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/app/distribution/setting/other.proto b/grpc_api/bilibili/app/distribution/setting/other.proto
new file mode 100644
index 0000000..4da3a59
--- /dev/null
+++ b/grpc_api/bilibili/app/distribution/setting/other.proto
@@ -0,0 +1,25 @@
+syntax = "proto3";
+
+package bilibili.app.distribution.setting.other;
+
+import "bilibili/app/distribution/v1/distribution.proto";
+
+//
+message OtherSettingsConfig {
+ //
+ bilibili.app.distribution.v1.Int64Value watermark_type = 1;
+ //
+ bilibili.app.distribution.v1.Int64Value web_image_quality_type = 2;
+ //
+ bilibili.app.distribution.v1.BoolValue enable_read_pasteboard = 3;
+ //
+ bilibili.app.distribution.v1.BoolValue paste_auto_jump = 4;
+ //
+ bilibili.app.distribution.v1.BoolValue mini_screen_play_when_back = 5;
+ //
+ bilibili.app.distribution.v1.BoolValue enable_resume_playing = 6;
+ //
+ bilibili.app.distribution.v1.BoolValue enable_wifi_auto_update = 7;
+ //
+ bilibili.app.distribution.v1.BoolValue enable_guide_screenshot_share = 8;
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/app/distribution/setting/pegasus.proto b/grpc_api/bilibili/app/distribution/setting/pegasus.proto
new file mode 100644
index 0000000..a15f455
--- /dev/null
+++ b/grpc_api/bilibili/app/distribution/setting/pegasus.proto
@@ -0,0 +1,41 @@
+syntax = "proto3";
+
+package bilibili.app.distribution.setting.pegasus;
+
+import "bilibili/app/distribution/v1/distribution.proto";
+
+//
+message FeedModeValue {
+ //
+ bilibili.app.distribution.v1.Int64Value value = 1;
+}
+
+//
+message PegasusAutoPlay {
+ //
+ bilibili.app.distribution.v1.Int64Value single = 1;
+ //
+ bilibili.app.distribution.v1.Int64Value double = 2;
+ //
+ bilibili.app.distribution.v1.BoolValue single_affected_by_server_side = 3;
+ //
+ bilibili.app.distribution.v1.BoolValue double_affected_by_server_side = 4;
+}
+
+//
+message PegasusColumnValue {
+ //
+ bilibili.app.distribution.v1.Int64Value value = 1;
+ //
+ bilibili.app.distribution.v1.BoolValue affected_by_server_side = 2;
+}
+
+//
+message PegasusDeviceConfig {
+ //
+ PegasusColumnValue column = 1;
+ //
+ FeedModeValue mode = 2;
+ //
+ PegasusAutoPlay auto_play = 3;
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/app/distribution/setting/play.proto b/grpc_api/bilibili/app/distribution/setting/play.proto
new file mode 100644
index 0000000..a972fc8
--- /dev/null
+++ b/grpc_api/bilibili/app/distribution/setting/play.proto
@@ -0,0 +1,58 @@
+syntax = "proto3";
+
+package bilibili.app.distribution.setting.play;
+
+import "bilibili/app/distribution/v1/distribution.proto";
+
+// 云端保存的播放器配置
+message CloudPlayConfig {
+ // 启用杜比全景声
+ bilibili.app.distribution.v1.BoolValue enable_panorama = 1;
+ // 启用杜比音效
+ bilibili.app.distribution.v1.BoolValue enable_dolby = 2;
+ // 启用震动
+ bilibili.app.distribution.v1.BoolValue enable_shake = 3;
+ // 启用后台播放
+ bilibili.app.distribution.v1.BoolValue enable_background = 4;
+ // 启用HIRES
+ bilibili.app.distribution.v1.BoolValue enable_loss_less = 5;
+}
+
+// 播放器策略配置
+message PlayConfig {
+ //
+ bilibili.app.distribution.v1.BoolValue should_auto_play = 1;
+ //
+ bilibili.app.distribution.v1.BoolValue should_auto_fullscreen = 2;
+ //
+ bilibili.app.distribution.v1.BoolValue enable_playurl_https = 3;
+ //
+ bilibili.app.distribution.v1.BoolValue enable_danmaku_interaction = 4;
+ //
+ bilibili.app.distribution.v1.Int64Value small_screen_status = 5;
+ //
+ bilibili.app.distribution.v1.Int64Value player_codec_mode_key = 6;
+ //
+ bilibili.app.distribution.v1.BoolValue enable_gravity_rotate_screen = 7;
+ //
+ bilibili.app.distribution.v1.BoolValue enable_danmaku_monospaced = 8;
+ //
+ bilibili.app.distribution.v1.BoolValue enable_edit_subtitle = 9;
+ //
+ bilibili.app.distribution.v1.BoolValue enable_subtitle = 10;
+ //
+ bilibili.app.distribution.v1.Int64Value color_filter = 11;
+ //
+ bilibili.app.distribution.v1.BoolValue should_auto_story = 12;
+ //
+ bilibili.app.distribution.v1.BoolValue landscape_auto_story = 13;
+ //
+ bilibili.app.distribution.v1.BoolValue volume_balance = 14;
+}
+
+// 灰度测试特殊功能?
+message SpecificPlayConfig {
+ //
+ bilibili.app.distribution.v1.BoolValue enable_segmented_section = 1;
+}
+
diff --git a/grpc_api/bilibili/app/distribution/setting/privacy.proto b/grpc_api/bilibili/app/distribution/setting/privacy.proto
new file mode 100644
index 0000000..7e34cf8
--- /dev/null
+++ b/grpc_api/bilibili/app/distribution/setting/privacy.proto
@@ -0,0 +1,20 @@
+syntax = "proto3";
+
+package bilibili.app.distribution.setting.privacy;
+
+import "bilibili/app/distribution/v1/distribution.proto";
+
+//
+message MidPrivacySettingsConfig {
+ //
+ bilibili.app.distribution.v1.BoolValue recommend_to_known = 1;
+}
+
+//
+message PrivacySettingsConfig {
+ //
+ bilibili.app.distribution.v1.BoolValue ad_recommand_store = 1;
+ // 传感器权限
+ bilibili.app.distribution.v1.BoolValue sensor_access = 2;
+
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/app/distribution/setting/search.proto b/grpc_api/bilibili/app/distribution/setting/search.proto
new file mode 100644
index 0000000..fc02d63
--- /dev/null
+++ b/grpc_api/bilibili/app/distribution/setting/search.proto
@@ -0,0 +1,19 @@
+syntax = "proto3";
+
+package bilibili.app.distribution.setting.search;
+
+import "bilibili/app/distribution/v1/distribution.proto";
+
+//
+message SearchAutoPlay {
+ //
+ bilibili.app.distribution.v1.Int64Value value = 1;
+ //
+ bilibili.app.distribution.v1.BoolValue affected_by_server_side = 2;
+}
+
+//
+message SearchDeviceConfig {
+ //
+ SearchAutoPlay auto_play = 1;
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/app/distribution/v1/distribution.proto b/grpc_api/bilibili/app/distribution/v1/distribution.proto
new file mode 100644
index 0000000..71c9947
--- /dev/null
+++ b/grpc_api/bilibili/app/distribution/v1/distribution.proto
@@ -0,0 +1,158 @@
+syntax = "proto3";
+
+package bilibili.app.distribution.v1;
+
+import "google/protobuf/any.proto";
+
+// APP配置
+service Distribution {
+ // 获取云端储存的用户偏好
+ rpc GetUserPreference (GetUserPreferenceReq) returns (GetUserPreferenceReply);
+ // 设定用户偏好
+ rpc SetUserPreference (SetUserPreferenceReq) returns (SetUserPreferenceReply);
+ // 获取云控配置
+ rpc UserPreference (UserPreferenceReq) returns (UserPreferenceReply);
+}
+
+//
+message GetUserPreferenceReq {
+ //
+ repeated string type_url = 1;
+ //
+ map extra_context = 2;
+}
+
+//
+message GetUserPreferenceReply {
+ // 对应 GetUserPreferenceReq 的请求的类型
+ repeated google.protobuf.Any value = 1;
+}
+
+//
+message SetUserPreferenceReq {
+ //
+ repeated google.protobuf.Any preference = 1;
+ //
+ map extra_context = 2;
+}
+
+//
+message SetUserPreferenceReply {}
+
+//
+message UserPreferenceReq {}
+
+// 云控配置下发
+message UserPreferenceReply {
+ // 具体解码需要根据实际请求 type_url 来判断
+ repeated google.protobuf.Any preference = 1;
+}
+
+//
+message BoolValue {
+ //
+ bool value = 1;
+ //
+ int64 last_modified = 2;
+ //
+ bool default_value = 3;
+ //
+ string exp = 4;
+}
+
+//
+message BytesValue {
+ //
+ bytes value = 1;
+ //
+ int64 last_modified = 2;
+ //
+ bytes default_value = 3;
+ //
+ string exp = 4;
+}
+
+//
+message DoubleValue {
+ //
+ double value = 1;
+ //
+ int64 last_modified = 2;
+ //
+ double default_value = 3;
+ //
+ string exp = 4;
+}
+
+//
+message FloatValue {
+ //
+ float value = 1;
+ //
+ int64 last_modified = 2;
+ //
+ float default_value = 3;
+ //
+ string exp = 4;
+}
+
+//
+message Int32Value {
+ //
+ int32 value = 1;
+ //
+ int64 last_modified = 2;
+ //
+ int32 default_value = 3;
+ //
+ string exp = 4;
+}
+
+//
+message Int64Value {
+ //
+ int64 value = 1;
+ //
+ int64 last_modified = 2;
+ //
+ int64 default_value = 3;
+ //
+ string exp = 4;
+}
+
+//
+message StringValue {
+ //
+ string value = 1;
+ //
+ int64 last_modified = 2;
+ //
+ string default_value = 3;
+ //
+ string exp = 4;
+}
+
+//
+message UInt32Value {
+ //
+ uint32 value = 1;
+ //
+ int64 last_modified = 2;
+ //
+ uint32 default_value = 3;
+ //
+ string exp = 4;
+}
+
+//
+message UInt64Value {
+ //
+ uint64 value = 1;
+ //
+ int64 last_modified = 2;
+ //
+ uint64 default_value = 3;
+ //
+ string exp = 4;
+}
+
diff --git a/grpc_api/bilibili/app/dynamic/common/dynamic.proto b/grpc_api/bilibili/app/dynamic/common/dynamic.proto
new file mode 100644
index 0000000..be54d7e
--- /dev/null
+++ b/grpc_api/bilibili/app/dynamic/common/dynamic.proto
@@ -0,0 +1,22 @@
+syntax = "proto3";
+
+package bilibili.app.dynamic.common;
+
+
+//
+message ItemWHRatio {
+ //
+ int32 ratio = 1;
+ //
+ int32 width = 2;
+ //
+ int32 height = 3;
+}
+
+//
+enum WHRatio {
+ W_H_RATIO_1_1 = 0;
+ W_H_RATIO_16_9 = 1;
+ W_H_RATIO_3_4 = 2;
+ W_H_RATIO_CUSTOM = 3;
+}
diff --git a/grpc_api/bilibili/app/dynamic/v1/dynamic.proto b/grpc_api/bilibili/app/dynamic/v1/dynamic.proto
index 229f485..89b77bf 100644
--- a/grpc_api/bilibili/app/dynamic/v1/dynamic.proto
+++ b/grpc_api/bilibili/app/dynamic/v1/dynamic.proto
@@ -34,234 +34,72 @@ service Dynamic {
rpc GeoCoder(GeoCoderReq) returns (GeoCoderReply);
}
-// 空请求
-message NoReq {}
-
-// 空响应
-message NoReply {}
-
-// 动态视频页-请求
-message DynVideoReq {
- // 青少年模式
- int32 teenagers_mode = 1;
- // 透传 update_baseline
- string update_baseline = 2;
- // 透传 history_offset
- string offset = 3;
- // 向下翻页数
- int32 page = 4;
- // 刷新方式
- // 1:向上刷新 2:向下翻页
- int32 refresh_type = 5;
- // 清晰度
- int32 qn = 6;
- // 流版本
- int32 fnver = 7;
- // 流类型
- int32 fnval = 8;
- // 是否强制使用域名
- int32 force_host = 9;
- // 是否4K
- int32 fourk = 10;
+// 地址部件
+message AddressComponent {
+ // 国家
+ string nation = 1;
+ // 省
+ string province = 2;
+ // 市
+ string city = 3;
+ // 区,可能为空字串
+ string district = 4;
+ // 街道,可能为空字串
+ string street = 5;
+ // 门牌,可能为空字串
+ string street_number = 6;
}
-// 动态视频页-响应
-message DynVideoReqReply {
- // 动态列表
- repeated DynamicItem list = 1;
- // 更新的动态数
- int32 update_num = 2;
- // 历史偏移
- string history_offset = 3;
- // 更新基础信息
- string update_baseline = 4;
- // 是否还有更多数据
- int32 has_more = 5;
+// 行政区划信息
+message AdInfo {
+ // 国家代码(ISO3166标准3位数字码)
+ string nation_code = 1;
+ // 行政区划代码,规则详见:行政区划代码说明
+ string adcode = 2;
+ // 城市代码,由国家码+行政区划代码(提出城市级别)组合而来,总共为9位
+ string city_code = 3;
+ // 行政区划名称
+ string name = 4;
+ // 行政区划中心点坐标
+ Gps gps = 5;
}
-// 动态卡片项
-message DynamicItem {
- // 卡片类型
- // forward:转发 av:稿件视频 fold:折叠 pgc:pgc内容 courses:付费视频 upList:最近访问列表 followList:我的追番列表
- string card_type = 1;
- // 转发类型下,items的类型
- string item_type = 2;
- // 模块内容
- repeated Module modules = 3;
- // 动态ID str
- string dyn_id_str = 4;
- // 转发动态ID str
- string orig_dyn_id_str = 5;
- // r_type
- int32 r_type = 6;
- // 该卡片下面是否含有折叠卡
- int32 has_fold = 7;
+//
+enum BgType {
+ bg_type_default = 0; //
+ bg_type_face = 1; //
}
-// 模块
-message Module {
- // 类型
- // fold:折叠 author:发布人 dynamic:动态卡片内容 state:计数信息 forward:转发 extend:小卡信息 dispute:争议小黄条 desc:描述信息
- // likeUser:点赞用户 upList:最近访问列表 followList:我的追番
- string module_type = 1;
- oneof module_item{
- // 折叠
- ModuleFold module_fold = 2;
- // 发布人
- ModuleAuthor module_author = 3;
- // 动态卡片内容
- ModuleDynamic module_dynamic = 4;
- // 计数信息
- ModuleState module_state = 5;
- // 转发
- ModuleForward module_forward = 6;
- // 小卡信息
- ModuleExtend module_extend = 7;
- // 争议小黄条
- ModuleDispute module_dispute = 8;
- // 描述信息
- ModuleDesc module_desc = 9;
- // 点赞用户
- ModuleLikeUser module_likeUser= 10;
- // 最近访问列表
- ModuleDynUpList module_upList = 11;
- // 我的追番
- ModuleFollowList module_followList = 12;
- }
-}
-
-// 折叠模块
-message ModuleFold {
- // 折叠分类(该字段废弃)
- int32 fold_type = 1;
- // 折叠文案
- string text = 2;
- // 被折叠的动态
- string fold_ids = 3;
- // 被折叠的用户信息
- repeated UserInfo fold_users = 4;
- // 折叠分类
- FoldType fold_type_v2 = 5;
-}
-
-// 折叠分类
-enum FoldType {
- // 占位
- FoldTypeZero = 0;
- // 用户发布折叠
- FoldTypePublish = 1;
- // 转发超频折叠
- FoldTypeFrequent = 2;
- // 联合投稿折叠
- FoldTypeUnite = 3;
- // 动态受限折叠
- FoldTypeLimit = 4;
-}
-
-// 作者信息模块
-message ModuleAuthor {
- // 用户mid
- int64 id = 1;
- // 时间标签
- string ptime_label_text = 2;
- // 用户详情
- UserInfo author = 3;
- // 装扮卡片
- DecorateCard decorate_card = 4;
-}
-
-// 争议小黄条模块
-message ModuleDispute {
- // 标题
- string title = 1;
- // 描述内容
- string desc = 2;
- // 跳转链接
- string uri = 3;
-}
-
-// 文本内容模块
-message ModuleDesc {
- // 文本描述
- repeated Description desc = 1;
-}
-
-// 动态详情模块
-message ModuleDynamic {
- // 卡片类型
- // ugc:ugc卡 pgc:pgc卡 currSeason:付费课程系列 currBatch:付费课程批次
- string card_type = 1;
- // 正文卡片
- oneof card {
- // ugc卡
- CardUGC card_ugc = 2;
- // pgc卡
- CardPGC card_pgc = 3;
- // 付费课程系列
- CardCurrSeason card_curr_season = 4;
- // 付费课程批次
- CardCurrBatch card_curr_batch = 5;
- }
-}
-
-// 点赞用户模块
-message ModuleLikeUser {
- // 点赞用户
- repeated LikeUser like_users = 1;
- // 文案
- string display_text = 2;
-}
-
-// 计数信息模块
-message ModuleState {
- // 转发数
- int32 repost = 1;
- // 点赞数
- int32 like = 2;
- // 评论数
- int32 reply = 3;
- // 点赞拓展信息
- LikeInfo like_info = 4;
- // 禁评
- bool no_comment = 5;
- // 禁转
- bool no_forward = 6;
-}
-
-// 转发模块
-message ModuleForward {
- // 卡片类型
- string card_type = 1;
- // 嵌套模型
- repeated Module modules= 2;
-}
-
-// UGC视频卡片数据
-message CardUGC {
+// 付费课程批次卡
+message CardCurrBatch {
// 标题
string title = 1;
// 封面图
string cover = 2;
- // 秒开地址
+ // 跳转地址
string uri = 3;
- // 视频封面展示项 1
- string cover_left_text_1 = 4;
- // 视频封面展示项 2
- string cover_left_text_2 = 5;
- // 封面视频展示项 3
- string cover_left_text_3 = 6;
- // avid
- int64 avid = 7;
- // cid
- int64 cid = 8;
- // 视频源类型
- MediaType media_type = 9;
- // 尺寸信息
- Dimension dimension = 10;
+ // 展示项 1(本集标题)
+ string text_1 = 4;
+ // 展示项 2(更新了多少个视频)
+ string text_2 = 5;
// 角标
- repeated VideoBadge badge = 11;
- // 是否能够自动播放
- int32 can_play= 12;
+ VideoBadge badge = 6;
+}
+
+// 付费课程系列卡
+message CardCurrSeason {
+ // 标题
+ string title = 1;
+ // 封面图
+ string cover = 2;
+ // 跳转地址
+ string uri = 3;
+ // 展示项 1(更新信息)
+ string text_1 = 4;
+ // 描述信息
+ string desc = 5;
+ // 角标
+ VideoBadge badge = 6;
}
// PGC视频卡片数据
@@ -302,99 +140,501 @@ message CardPGC {
PGCSeason season = 17;
}
-// 付费课程系列卡
-message CardCurrSeason {
+// UGC视频卡片数据
+message CardUGC {
// 标题
string title = 1;
// 封面图
string cover = 2;
- // 跳转地址
+ // 秒开地址
string uri = 3;
- // 展示项 1(更新信息)
- string text_1 = 4;
- // 描述信息
- string desc = 5;
+ // 视频封面展示项 1
+ string cover_left_text_1 = 4;
+ // 视频封面展示项 2
+ string cover_left_text_2 = 5;
+ // 封面视频展示项 3
+ string cover_left_text_3 = 6;
+ // avid
+ int64 avid = 7;
+ // cid
+ int64 cid = 8;
+ // 视频源类型
+ MediaType media_type = 9;
+ // 尺寸信息
+ Dimension dimension = 10;
// 角标
- VideoBadge badge = 6;
+ repeated VideoBadge badge = 11;
+ // 是否能够自动播放
+ int32 can_play= 12;
}
-// 付费课程批次卡
-message CardCurrBatch {
- // 标题
- string title = 1;
- // 封面图
- string cover = 2;
- // 跳转地址
- string uri = 3;
- // 展示项 1(本集标题)
- string text_1 = 4;
- // 展示项 2(更新了多少个视频)
- string text_2 = 5;
- // 角标
- VideoBadge badge = 6;
+//
+enum CornerType {
+ corner_type_none = 0; //
+ corner_type_text = 1; //
+ corner_type_animation = 2; //
}
-// 角标信息
-message VideoBadge {
- // 文案
+// 粉丝样式
+message DecoCardFan {
+ // 是否是粉丝
+ int32 is_fan = 1;
+ // 数量
+ int32 number = 2;
+ // 颜色
+ string color = 3;
+}
+
+// 装扮卡片
+message DecorateCard {
+ // 装扮卡片id
+ int64 id = 1;
+ // 装扮卡片链接
+ string card_url = 2;
+ // 装扮卡片点击跳转链接
+ string jump_url = 3;
+ // 粉丝样式
+ DecoCardFan fan = 4;
+}
+
+// 文本描述
+message Description {
+ // 文本内容
string text = 1;
- // 文案颜色-日间
- string text_color = 2;
- // 文案颜色-夜间
- string text_color_night = 3;
- // 背景颜色-日间
- string bg_color = 4;
- // 背景颜色-夜间
- string bg_color_night = 5;
- // 边框颜色-日间
- string border_color = 6;
- // 边框颜色-夜间
- string border_color_night = 7;
- // 样式
- int32 bg_style = 8;
+ // 文本类型
+ string type = 2;
+ // 点击跳转链接
+ string uri = 3;
+ // emoji类型
+ string emoji_type = 4;
+ // 商品类型
+ string goods_type = 5;
}
// 尺寸信息
message Dimension {
+ //
int64 height = 1;
+ //
int64 width = 2;
+ //
int64 rotate = 3;
}
-// 番剧类型
-enum VideoSubType {
- // 没有子类型
- VideoSubTypeNone = 0;
- // 番剧
- VideoSubTypeBangumi = 1;
- // 电影
- VideoSubTypeMovie = 2;
- // 纪录片
- VideoSubTypeDocumentary = 3;
- // 国创
- VideoSubTypeDomestic = 4;
- // 电视剧
- VideoSubTypeTeleplay = 5;
+// 动态卡片项
+message DynamicItem {
+ // 卡片类型
+ // forward:转发 av:稿件视频 fold:折叠 pgc:pgc内容 courses:付费视频 upList:最近访问列表 followList:我的追番列表
+ string card_type = 1;
+ // 转发类型下,items的类型
+ string item_type = 2;
+ // 模块内容
+ repeated Module modules = 3;
+ // 动态ID str
+ string dyn_id_str = 4;
+ // 转发动态ID str
+ string orig_dyn_id_str = 5;
+ // r_type
+ int32 r_type = 6;
+ // 该卡片下面是否含有折叠卡
+ int32 has_fold = 7;
}
-// 播放器类型
-enum MediaType {
- // 本地
- MediaTypeNone = 0;
- // UGC
- MediaTypeUGC = 1;
- // PGC
- MediaTypePGC = 2;
- // 直播
- MediaTypeLive = 3;
- // 小视频
- MediaTypeVCS = 4;
+// 批量动态id获取动态详情返回值
+message DynDetailsReply {
+ // 动态列表
+ repeated DynamicItem list = 1;
}
-// 拓展信息
-message ModuleExtend {
- // 拓展
- repeated Extend extend = 1;
+// 批量动态id获取动态详情请求参数
+message DynDetailsReq {
+ // 青少年模式
+ int32 teenagers_mode = 1;
+ // 动态id
+ string dynamic_ids = 2;
+ // 清晰度
+ int32 qn = 3;
+ // 流版本
+ int32 fnver = 4;
+ // 流功能
+ int32 fnval = 5;
+ // 是否强制使用域名
+ int32 force_host = 6;
+ // 是否4k
+ int32 fourk = 7;
+}
+
+// 查看更多-搜索-响应
+message DynMixUpListSearchReply {
+ //
+ repeated MixUpListItem items = 1;
+}
+
+// 查看更多-搜索-请求
+message DynMixUpListSearchReq {
+ //
+ string name = 1;
+}
+
+// 查看更多-列表-响应
+message DynMixUpListViewMoreReply {
+ // 关注up主列表信息
+ repeated MixUpListItem items = 1;
+ // 默认搜索文案
+ string search_default_text = 2;
+}
+
+// 动态同城物料
+message DynOurCityItem {
+ // 卡片类型
+ // av:稿件 draw:图文
+ string card_type = 1;
+ // 动态ID
+ int64 dyn_id = 2;
+ // 跳转地址
+ string uri = 3;
+ // 模块列表
+ repeated DynOurCityModule modules = 4;
+ // 资源ID
+ int64 rid = 5;
+ // 透传服务端魔镜参数
+ string debug_info = 6;
+}
+
+// 动态同城物料模块
+message DynOurCityModule {
+ // 类型
+ // cover:封面 desc:描述 author:发布人 extend:扩展部分
+ string module_type = 1;
+ //
+ oneof module_item {
+ // 封面
+ DynOurCityModuleCover module_cover = 2;
+ // 描述
+ DynOurCityModuleDesc module_desc = 3;
+ // 发布人
+ DynOurCityModuleAuthor module_author = 4;
+ // 扩展部分
+ DynOurCityModuleExtend module_extend = 5;
+ }
+}
+
+// 动态同城物料-发布人模块
+message DynOurCityModuleAuthor {
+ // 用户Mid
+ int64 mid = 1;
+ // 用户昵称
+ string name = 2;
+ // 用户头像
+ string face = 3;
+ // 跳转地址
+ string uri = 4;
+}
+
+// 动态同城物料-封面模块
+message DynOurCityModuleCover {
+ // 封面图 单图样式取第一个元素
+ repeated string covers = 1;
+ // 封面样式
+ // 1:横图 2:竖图 3:方图
+ int32 style = 2;
+ // 视频封面展示项图标 1
+ int32 cover_left_icon_1 = 3;
+ // 视频封面展示项 1
+ string cover_left_text_1 = 4;
+ // 视频封面展示项图标 2
+ int32 cover_left_icon_2 = 5;
+ // 视频封面展示项 2
+ string cover_left_text_2 = 6;
+ // 封面视频展示项 3
+ string cover_left_text_3 = 7;
+ // 角标
+ repeated VideoBadge badge = 8;
+}
+
+// 动态同城物料-描述模块
+message DynOurCityModuleDesc {
+ // 描述信息
+ string desc = 1;
+}
+
+// 动态同城物料-扩展部分模块
+message DynOurCityModuleExtend {
+ // 类型
+ string type = 1;
+ oneof extend {
+ // LBS模块
+ DynOurCityModuleExtendLBS extend_lbs = 2;
+ }
+}
+
+// 动态同城物料extent-LBS模块
+message DynOurCityModuleExtendLBS {
+ // 标题
+ string title = 1;
+ // 跳转地址
+ string uri = 2;
+ // 小图标
+ string icon = 3;
+ // poiType
+ int32 poi_type = 4;
+}
+
+// 动态同城-响应
+message DynOurCityReply {
+ // 翻页游标
+ string offset = 1;
+ // 是否还有更多数据
+ // 1:有
+ int32 has_more = 2;
+ // 样式类型
+ // 1:双列 2:瀑布流
+ int32 style = 3;
+ // 顶导信息
+ string top_label = 4;
+ // 列表详情
+ repeated DynOurCityItem list = 5;
+ // 顶导按钮信息
+ string top_button_label = 6;
+ // 城市ID
+ int32 city_id = 7;
+ // 城市名
+ string city_name = 8;
+}
+
+// 动态同城页-请求
+message DynOurCityReq {
+ // 城市ID
+ int64 city_id = 1;
+ // 纬度
+ double lat = 2;
+ // 经度
+ double lng = 3;
+ // 透传上一次接口请求返回的offset
+ string offset = 4;
+ // 每页元素个数
+ int32 page_size = 5;
+ // 青少年模式
+ // 1:开启青少年模式
+ int32 teenagers_mode = 6;
+ // 清晰度(旧版)
+ int32 qn = 7;
+ // 流版本(旧版)
+ int32 fnver = 8;
+ // 流类型(旧版)
+ int32 fnval = 9;
+ // 是否强制使用域名(旧版)
+ int32 force_host = 10;
+ // 是否4k(旧版)
+ int32 fourk = 11;
+ // 是否开启lbs
+ // 0:关闭 1:开启
+ int32 lbs_state = 12;
+ // 是否刷新城市
+ uint32 refresh_city = 13;
+ // 魔镜设置
+ ExpConf exp_conf = 14;
+ // 秒开参数
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 15;
+ // 城市码
+ int64 city_code = 16;
+ // 构建时间
+ int64 build_time = 17;
+}
+
+// 动态同城开关-请求
+message DynOurCitySwitchReq {
+ // 开关参数
+ // 0:关闭 1:开启
+ int32 switch = 1;
+}
+
+// 红点接口物料
+message DynRedItem {
+ // 数字红点有效 更新数
+ uint64 count = 1;
+}
+
+// 红点接口-响应
+message DynRedReply {
+ // 类型
+ // count:数字红点 point:普通红点 no_point:没有红点
+ string red_type = 1;
+ // 红点具体信息
+ DynRedItem dyn_red_item = 2;
+ // 默认tab 值对应tab接口下发的anchor
+ string default_tab = 3;
+ //
+ DynRedStyle red_style = 4;
+}
+
+// 动态红点接口-请求
+message DynRedReq {
+ // 动态红点接口各tab offset信息
+ repeated TabOffset tab_offset = 1;
+}
+
+//
+message DynRedStyle {
+ //
+ int32 bg_type = 1;
+ //
+ int32 corner_type = 2;
+ //
+ int32 display_time = 3;
+ //
+ string corner_mark = 4;
+ //
+ DynRedStyleUp up = 5;
+ //
+ int32 type = 6;
+}
+
+//
+message DynRedStyleUp {
+ //
+ int64 uid = 1;
+ //
+ string face = 2;
+}
+
+// 动态tab详情
+message DynTab {
+ // tab标题 优先展示用,未开启状态第一次请求返回同城,后续请求返回对应城市名
+ string title = 1;
+ // 跳转链接
+ string uri = 2;
+ // 气泡内容
+ string bubble = 3;
+ // 是否推红点
+ int32 red_point = 4;
+ // 城市ID
+ int64 city_id = 5;
+ // 是否弹窗
+ int32 is_popup = 6;
+ // 弹窗内容
+ Popup popup = 7;
+ // 是否默认tab
+ bool defaultTab = 8;
+ // 副标题 对应城市名
+ string sub_title = 9;
+ // 锚点字段
+ string anchor = 10;
+ // 内测文案
+ string internal_test = 11;
+}
+
+// 动态tab页-响应
+message DynTabReply {
+ // 动态tab详情列表
+ repeated DynTab dyn_tab = 1;
+}
+
+// 动态tab页-请求
+message DynTabReq {
+ // 青少年模式
+ // 1:开启青少年模式
+ int32 teenagers_mode = 1;
+}
+
+// 最近访问-标记已读-请求
+message DynUpdOffsetReq {
+ // 被访问者的UID
+ int64 host_uid = 1;
+ // 用户已读进度
+ string read_offset = 2;
+}
+
+// 最近访问-个人feed流列表-响应
+message DynVideoPersonalReply {
+ // 动态列表
+ repeated DynamicItem list = 1;
+ // 偏移量
+ string offset = 2;
+ // 是否还有更多数据
+ int32 has_more = 3;
+ // 已读进度
+ string read_offset = 4;
+}
+
+// 最近访问-个人feed流列表-请求
+message DynVideoPersonalReq {
+ // 青少年模式
+ // 1:开启青少年模式
+ int32 teenagers_mode = 1;
+ // 被访问者的mid
+ int64 host_uid = 2;
+ // 偏移量 第一页可传空
+ string offset = 3;
+ // 标明下拉几次
+ int32 page = 4;
+ // 是否是预加载
+ int32 is_preload = 5;
+ // 清晰度
+ int32 qn = 6;
+ // 流版本
+ int32 fnver = 7;
+ // 流类型
+ int32 fnval = 8;
+ // 是否强制使用域名
+ int32 force_host = 9;
+ // 是否4k
+ int32 fourk = 10;
+}
+
+// 动态视频页-请求
+message DynVideoReq {
+ // 青少年模式
+ int32 teenagers_mode = 1;
+ // 透传 update_baseline
+ string update_baseline = 2;
+ // 透传 history_offset
+ string offset = 3;
+ // 向下翻页数
+ int32 page = 4;
+ // 刷新方式
+ // 1:向上刷新 2:向下翻页
+ int32 refresh_type = 5;
+ // 清晰度
+ int32 qn = 6;
+ // 流版本
+ int32 fnver = 7;
+ // 流类型
+ int32 fnval = 8;
+ // 是否强制使用域名
+ int32 force_host = 9;
+ // 是否4K
+ int32 fourk = 10;
+}
+
+// 动态视频页-响应
+message DynVideoReqReply {
+ // 动态列表
+ repeated DynamicItem list = 1;
+ // 更新的动态数
+ int32 update_num = 2;
+ // 历史偏移
+ string history_offset = 3;
+ // 更新基础信息
+ string update_baseline = 4;
+ // 是否还有更多数据
+ int32 has_more = 5;
+}
+
+// 魔镜实验配置项
+message Exp {
+ // 实验名
+ string exp_name = 1;
+ // 实验组
+ string exp_group = 2;
+}
+
+// 魔镜设置
+message ExpConf {
+ // 是否是魔镜请求
+ int32 exp_enable = 1;
+ // 实验配置
+ repeated Exp exps = 2;
}
// 拓展
@@ -425,9 +665,9 @@ message ExtInfoGame {
string icon = 3;
}
-// 拓展信息-话题小卡
-message ExtInfoTopic {
- // 标题-话题名
+// 拓展信息-热门视频
+message ExtInfoHot {
+ // 标题
string title = 1;
// 跳转地址
string uri = 2;
@@ -447,9 +687,9 @@ message ExtInfoLBS {
int32 poi_type = 4;
}
-// 拓展信息-热门视频
-message ExtInfoHot {
- // 标题
+// 拓展信息-话题小卡
+message ExtInfoTopic {
+ // 标题-话题名
string title = 1;
// 跳转地址
string uri = 2;
@@ -457,6 +697,69 @@ message ExtInfoHot {
string icon = 3;
}
+// 折叠分类
+enum FoldType {
+ FoldTypeZero = 0; // 占位
+ FoldTypePublish = 1; // 用户发布折叠
+ FoldTypeFrequent = 2; // 转发超频折叠
+ FoldTypeUnite = 3; // 联合投稿折叠
+ FoldTypeLimit = 4; // 动态受限折叠
+}
+
+// 我的追番列表Item
+message FollowListItem {
+ // season_id
+ int32 season_id = 1;
+ // 标题
+ string title = 2;
+ // 封面图
+ string cover = 3;
+ // 跳转链接
+ string url = 4;
+ // 最新ep
+ NewEP new_ep = 5;
+}
+
+// 位置定位-响应
+message GeoCoderReply {
+ // 以行政区划+道路+门牌号等信息组成的标准格式化地址
+ string address = 1;
+ // 地址部件,address不满足需求时可自行拼接
+ AddressComponent address_component = 2;
+ // 行政区划信息
+ AdInfo ad_info = 3;
+}
+
+// 位置定位-请求
+message GeoCoderReq {
+ // 纬度
+ double lat = 1;
+ // 经度
+ double lng = 2;
+ // 页面来源
+ string from = 3;
+}
+
+// 行政区划中心点坐标
+message Gps {
+ // 纬度
+ double lat = 1;
+ // 经度
+ double lng = 2;
+}
+
+// 点赞动画
+message LikeAnimation {
+ // 开始动画
+ string begin = 1;
+ // 过程动画
+ string proc = 2;
+ // 结束动画
+ string end = 3;
+ // id
+ int64 like_icon_id = 4;
+}
+
// 点赞拓展信息
message LikeInfo {
// 点赞动画
@@ -475,74 +778,209 @@ message LikeUser {
string uri = 3;
}
-// 点赞动画
-message LikeAnimation {
- // 开始动画
- string begin = 1;
- // 过程动画
- string proc = 2;
- // 结束动画
- string end = 3;
- // id
- int64 like_icon_id = 4;
+// 直播信息
+message LiveInfo {
+ // 是否在直播
+ // 0:未直播 1:正在直播
+ int32 is_living = 1;
+ // 跳转链接
+ string uri = 2;
}
-// 文本描述
-message Description {
- // 文本内容
- string text = 1;
- // 文本类型
- string type = 2;
- // 点击跳转链接
- string uri = 3;
- // emoji类型
- string emoji_type = 4;
- // 商品类型
- string goods_type = 5;
+// 播放器类型
+enum MediaType {
+ MediaTypeNone = 0; // 本地
+ MediaTypeUGC = 1; // UGC
+ MediaTypePGC = 2; // PGC
+ MediaTypeLive = 3; // 直播
+ MediaTypeVCS = 4; // 小视频
}
-// 装扮卡片
-message DecorateCard {
- // 装扮卡片id
- int64 id = 1;
- // 装扮卡片链接
- string card_url = 2;
- // 装扮卡片点击跳转链接
- string jump_url = 3;
- // 粉丝样式
- DecoCardFan fan = 4;
-}
-
-// 粉丝样式
-message DecoCardFan {
- // 是否是粉丝
- int32 is_fan = 1;
- // 数量
- int32 number = 2;
- // 颜色
- string color = 3;
-}
-
-// 用户信息
-message UserInfo {
+// 查看更多-列表单条数据
+message MixUpListItem {
// 用户mid
- int64 mid = 1;
- // 用户昵称
- string name = 2;
- // 用户头像
- string face = 3;
- // 认证信息
- OfficialVerify official = 4;
- // 大会员信息
- VipInfo vip = 5;
+ int64 uid = 1;
+ // 特别关注
+ // 0:否 1:是
+ int32 special_attention = 2;
+ // 小红点状态
+ // 0:没有 1:有
+ int32 reddot_state = 3;
// 直播信息
- LiveInfo live = 6;
- // 空间页跳转链接
- string uri = 7;
- // 挂件信息
- UserPendant pendant = 8;
- // 认证名牌
- Nameplate nameplate = 9;
+ MixUpListLiveItem live_info = 4;
+ // 昵称
+ string name = 5;
+ // 头像
+ string face = 6;
+ // 认证信息
+ OfficialVerify official = 7;
+ // 大会员信息
+ VipInfo vip = 8;
+ // 关注状态
+ Relation relation = 9;
+ //
+ int32 premiere_state = 10;
+ //
+ string uri = 11;
+}
+
+// 直播信息
+message MixUpListLiveItem {
+ // 直播状态
+ // 0:未直播 1:直播中
+ bool status = 1;
+ // 房间号
+ int64 room_id = 2;
+ // 跳转地址
+ string uri = 3;
+}
+
+// 模块
+message Module {
+ // 类型
+ // fold:折叠 author:发布人 dynamic:动态卡片内容 state:计数信息 forward:转发 extend:小卡信息 dispute:争议小黄条 desc:描述信息
+ // likeUser:点赞用户 upList:最近访问列表 followList:我的追番
+ string module_type = 1;
+ oneof module_item{
+ // 折叠
+ ModuleFold module_fold = 2;
+ // 发布人
+ ModuleAuthor module_author = 3;
+ // 动态卡片内容
+ ModuleDynamic module_dynamic = 4;
+ // 计数信息
+ ModuleState module_state = 5;
+ // 转发
+ ModuleForward module_forward = 6;
+ // 小卡信息
+ ModuleExtend module_extend = 7;
+ // 争议小黄条
+ ModuleDispute module_dispute = 8;
+ // 描述信息
+ ModuleDesc module_desc = 9;
+ // 点赞用户
+ ModuleLikeUser module_likeUser= 10;
+ // 最近访问列表
+ ModuleDynUpList module_upList = 11;
+ // 我的追番
+ ModuleFollowList module_followList = 12;
+ }
+}
+
+// 作者信息模块
+message ModuleAuthor {
+ // 用户mid
+ int64 id = 1;
+ // 时间标签
+ string ptime_label_text = 2;
+ // 用户详情
+ UserInfo author = 3;
+ // 装扮卡片
+ DecorateCard decorate_card = 4;
+}
+
+// 文本内容模块
+message ModuleDesc {
+ // 文本描述
+ repeated Description desc = 1;
+}
+
+// 争议小黄条模块
+message ModuleDispute {
+ // 标题
+ string title = 1;
+ // 描述内容
+ string desc = 2;
+ // 跳转链接
+ string uri = 3;
+}
+
+// 动态详情模块
+message ModuleDynamic {
+ // 卡片类型
+ // ugc:ugc卡 pgc:pgc卡 currSeason:付费课程系列 currBatch:付费课程批次
+ string card_type = 1;
+ // 正文卡片
+ oneof card {
+ // ugc卡
+ CardUGC card_ugc = 2;
+ // pgc卡
+ CardPGC card_pgc = 3;
+ // 付费课程系列
+ CardCurrSeason card_curr_season = 4;
+ // 付费课程批次
+ CardCurrBatch card_curr_batch = 5;
+ }
+}
+
+// 最近访问up主列表
+message ModuleDynUpList {
+ // 标题展示文案
+ string module_title = 1;
+ // “全部”按钮文案
+ string show_all = 2;
+ // up主列表
+ repeated UpListItem list = 3;
+}
+
+// 拓展信息
+message ModuleExtend {
+ // 拓展
+ repeated Extend extend = 1;
+}
+
+// 折叠模块
+message ModuleFold {
+ // 折叠分类(该字段废弃)
+ int32 fold_type = 1;
+ // 折叠文案
+ string text = 2;
+ // 被折叠的动态
+ string fold_ids = 3;
+ // 被折叠的用户信息
+ repeated UserInfo fold_users = 4;
+ // 折叠分类
+ FoldType fold_type_v2 = 5;
+}
+
+// 我的追番列表
+message ModuleFollowList {
+ // 查看全部的跳转链接
+ string view_all_link = 1;
+ //
+ repeated FollowListItem list = 2;
+}
+
+// 转发模块
+message ModuleForward {
+ // 卡片类型
+ string card_type = 1;
+ // 嵌套模型
+ repeated Module modules= 2;
+}
+
+// 点赞用户模块
+message ModuleLikeUser {
+ // 点赞用户
+ repeated LikeUser like_users = 1;
+ // 文案
+ string display_text = 2;
+}
+
+// 计数信息模块
+message ModuleState {
+ // 转发数
+ int32 repost = 1;
+ // 点赞数
+ int32 like = 2;
+ // 评论数
+ int32 reply = 3;
+ // 点赞拓展信息
+ LikeInfo like_info = 4;
+ // 禁评
+ bool no_comment = 5;
+ // 禁转
+ bool no_forward = 6;
}
// 认证名牌
@@ -561,16 +999,24 @@ message Nameplate {
string condition = 6;
}
-// 头像挂件信息
-message UserPendant {
- // pid
- int64 pid = 1;
- // 名称
- string name = 2;
- // 图片链接
- string image = 3;
- // 有效期
- int64 expire = 4;
+// 最新ep
+message NewEP {
+ // 最新话epid
+ int32 id = 1;
+ // 更新至XX话
+ string index_show = 2;
+ // 更新剧集的封面
+ string cover = 3;
+}
+
+// 空响应
+message NoReply {
+
+}
+
+// 空请求
+message NoReq {
+
}
// 认证信息
@@ -584,121 +1030,31 @@ message OfficialVerify {
int32 is_atten = 3;
}
-// 大会员信息
-message VipInfo {
- // 大会员类型
- int32 Type = 1;
- // 大会员状态
- int32 status = 2;
- // 到期时间
- int64 due_date = 3;
- // 标签
- VipLabel label = 4;
- // 主题
- int32 theme_type = 5;
+// 动态同城点击上报-响应
+message OurCityClickReportReply {
+
}
-// 大会员标签
-message VipLabel {
- // 图片地址
- string path = 1;
+// 动态同城点击上报-请求
+message OurCityClickReportReq {
+ // 动态ID
+ string dynamic_id = 1;
+ // 城市ID
+ int64 city_id = 2;
+ // 纬度
+ double lat = 3;
+ // 经度
+ double lng = 4;
}
-// 直播信息
-message LiveInfo {
- // 是否在直播
- // 0:未直播 1:正在直播
- int32 is_living = 1;
- // 跳转链接
- string uri = 2;
-}
-
-// 批量动态id获取动态详情请求参数
-message DynDetailsReq {
- // 青少年模式
- int32 teenagers_mode = 1;
- // 动态id
- string dynamic_ids = 2;
- // 清晰度
- int32 qn = 3;
- // 流版本
- int32 fnver = 4;
- // 流功能
- int32 fnval = 5;
- // 是否强制使用域名
- int32 force_host = 6;
- // 是否4k
- int32 fourk = 7;
-}
-
-// 批量动态id获取动态详情返回值
-message DynDetailsReply {
- // 动态列表
- repeated DynamicItem list = 1;
-}
-
-// 小视频连播页-请求
-message SVideoReq {
- // 当前素材的id
- int64 oid = 1;
- // 当前素材类型
- // 1:动态(如果有oid则必传) 2:热门分类 3:热点聚合
- SVideoType type = 2;
- // 翻页offset
- string offset = 3;
- // 清晰度(旧版)
- int32 qn = 4;
- // 流版本(旧版)
- int32 fnver = 5;
- // 流类型(旧版)
- int32 fnval = 6;
- // 是否强制使用域名(旧版)
- int32 force_host = 7;
- // 是否4k(旧版)
- int32 fourk = 8;
- // 当前页面spm
- string spmid = 9;
- // 上级页面spm
- string from_spmid = 10;
- // 秒开参数
- PlayerPreloadParams player_preload = 11;
- // 热门进入联播页的锚点aid
- int64 focus_aid = 12;
- // 秒开参数
- bilibili.app.archive.middleware.v1.PlayerArgs player_args = 13;
-}
-
-// 入口联播页类型
-enum SVideoType {
- // 无类型
- TypeNone = 0;
- // 动态
- TypeDynamic = 1;
- // 热门分类
- TypePopularIndex = 2;
- // 热点聚合
- TypePopularHotword = 3;
-}
-
-// 小视频连播页-响应
-message SVideoReply {
- // 列表
- repeated SVideoItem list = 1;
- // 翻页游标
- string offset = 2;
- // 是否还有更多数据
- // 1:有
- int32 has_more = 3;
- // 顶部
- SVideoTop top = 4;
-}
-
-// 顶部
-message SVideoTop {
- // 联播页标题
- string Title = 1;
- // 联播页导语
- string Desc = 2;
+// PGC单季信息
+message PGCSeason {
+ // 是否完结
+ int32 is_finish = 1;
+ // 标题
+ string title = 2;
+ // 类型
+ int32 type = 3;
}
// 秒开参数
@@ -715,6 +1071,63 @@ message PlayerPreloadParams {
int32 fourk = 5;
}
+// 动态tab弹窗详情
+message Popup {
+ // 标题
+ string title = 1;
+ // 文案
+ string desc = 2;
+ // 文案附加跳转地址
+ string uri = 3;
+}
+
+// 关注关系
+message Relation {
+ // 关注状态
+ RelationStatus status = 1;
+ // 关注
+ int32 is_follow = 2;
+ // 被关注
+ int32 is_followed = 3;
+ // 文案
+ string title = 4;
+}
+
+// 关注状态
+enum RelationStatus {
+ relation_status_none = 0; //
+ relation_status_nofollow = 1; // 未关注
+ relation_status_follow = 2; // 关注
+ relation_status_followed = 3; // 被关注
+ relation_status_mutual_concern = 4; // 互相关注
+ relation_status_special = 5; // 特别关注
+}
+
+// 分享需要
+message ShareInfo {
+ // 稿件avid
+ int64 aid = 1;
+ // 稿件bvid
+ string bvid = 2;
+ // 标题
+ string title = 3;
+ // 副标题
+ string subtitle = 4;
+ // 稿件封面
+ string cover = 5;
+ // up mid
+ int64 mid = 6;
+ // up昵称
+ string name = 7;
+}
+
+//
+enum StyleType {
+ STYLE_TYPE_NONE = 0; //
+ STYLE_TYPE_LIVE = 1; //
+ STYLE_TYPE_DYN_UP = 2; //
+}
+
// 小视频卡片项
message SVideoItem {
// 卡片类型
@@ -762,6 +1175,14 @@ message SVideoModuleAuthor {
string uri = 6;
}
+// 文本内容模块
+message SVideoModuleDesc {
+ // 文本内容
+ string text = 1;
+ // 跳转地址
+ string uri = 2;
+}
+
// 播放器模块
message SVideoModulePlayer {
// 标题
@@ -780,14 +1201,6 @@ message SVideoModulePlayer {
Dimension dimension = 7;
}
-// 文本内容模块
-message SVideoModuleDesc {
- // 文本内容
- string text = 1;
- // 跳转地址
- string uri = 2;
-}
-
// 计数信息模块
message SVideoModuleStat {
// 计数内容
@@ -796,6 +1209,50 @@ message SVideoModuleStat {
ShareInfo share_info = 2;
}
+// 小视频连播页-响应
+message SVideoReply {
+ // 列表
+ repeated SVideoItem list = 1;
+ // 翻页游标
+ string offset = 2;
+ // 是否还有更多数据
+ // 1:有
+ int32 has_more = 3;
+ // 顶部
+ SVideoTop top = 4;
+}
+
+// 小视频连播页-请求
+message SVideoReq {
+ // 当前素材的id
+ int64 oid = 1;
+ // 当前素材类型
+ // 1:动态(如果有oid则必传) 2:热门分类 3:热点聚合
+ SVideoType type = 2;
+ // 翻页offset
+ string offset = 3;
+ // 清晰度(旧版)
+ int32 qn = 4;
+ // 流版本(旧版)
+ int32 fnver = 5;
+ // 流类型(旧版)
+ int32 fnval = 6;
+ // 是否强制使用域名(旧版)
+ int32 force_host = 7;
+ // 是否4k(旧版)
+ int32 fourk = 8;
+ // 当前页面spm
+ string spmid = 9;
+ // 上级页面spm
+ string from_spmid = 10;
+ // 秒开参数
+ PlayerPreloadParams player_preload = 11;
+ // 热门进入联播页的锚点aid
+ int64 focus_aid = 12;
+ // 秒开参数
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 13;
+}
+
// 计数内容
message SVideoStatInfo {
// 计数icon
@@ -810,261 +1267,28 @@ message SVideoStatInfo {
string uri = 4;
}
-// 分享需要
-message ShareInfo {
- // 稿件avid
- int64 aid = 1;
- // 稿件bvid
- string bvid = 2;
- // 标题
- string title = 3;
- // 副标题
- string subtitle = 4;
- // 稿件封面
- string cover = 5;
- // up mid
- int64 mid = 6;
- // up昵称
- string name = 7;
+// 顶部
+message SVideoTop {
+ // 联播页标题
+ string Title = 1;
+ // 联播页导语
+ string Desc = 2;
}
-// 动态tab页-请求
-message DynTabReq {
- // 青少年模式
- // 1:开启青少年模式
- int32 teenagers_mode = 1;
+// 入口联播页类型
+enum SVideoType {
+ TypeNone = 0; // 无类型
+ TypeDynamic = 1; // 动态
+ TypePopularIndex = 2; // 热门分类
+ TypePopularHotword = 3; // 热点聚合
}
-// 动态tab页-响应
-message DynTabReply {
- // 动态tab详情列表
- repeated DynTab dyn_tab = 1;
-}
-
-// 动态tab详情
-message DynTab {
- // tab标题 优先展示用,未开启状态第一次请求返回同城,后续请求返回对应城市名
- string title = 1;
- // 跳转链接
- string uri = 2;
- // 气泡内容
- string bubble = 3;
- // 是否推红点
- int32 red_point = 4;
- // 城市ID
- int64 city_id = 5;
- // 是否弹窗
- int32 is_popup = 6;
- // 弹窗内容
- Popup popup = 7;
- // 是否默认tab
- bool defaultTab = 8;
- // 副标题 对应城市名
- string sub_title = 9;
- // 锚点字段
- string anchor = 10;
- // 内测文案
- string internal_test = 11;
-}
-
-// 动态tab弹窗详情
-message Popup {
- // 标题
- string title = 1;
- // 文案
- string desc = 2;
- // 文案附加跳转地址
- string uri = 3;
-}
-
-// 动态同城开关-请求
-message DynOurCitySwitchReq {
- // 开关参数
- // 0:关闭 1:开启
- int32 switch = 1;
-}
-
-// 动态同城页-请求
-message DynOurCityReq {
- // 城市ID
- int64 city_id = 1;
- // 纬度
- double lat = 2;
- // 经度
- double lng = 3;
- // 透传上一次接口请求返回的offset
- string offset = 4;
- // 每页元素个数
- int32 page_size = 5;
- // 青少年模式
- // 1:开启青少年模式
- int32 teenagers_mode = 6;
- // 清晰度(旧版)
- int32 qn = 7;
- // 流版本(旧版)
- int32 fnver = 8;
- // 流类型(旧版)
- int32 fnval = 9;
- // 是否强制使用域名(旧版)
- int32 force_host = 10;
- // 是否4k(旧版)
- int32 fourk = 11;
- // 是否开启lbs
- // 0:关闭 1:开启
- int32 lbs_state = 12;
- // 是否刷新城市
- uint32 refresh_city = 13;
- // 魔镜设置
- ExpConf exp_conf = 14;
- // 秒开参数
- bilibili.app.archive.middleware.v1.PlayerArgs player_args = 15;
- // 城市码
- int64 city_code = 16;
- // 构建时间
- int64 build_time = 17;
-}
-
-// 魔镜设置
-message ExpConf {
- // 是否是魔镜请求
- int32 exp_enable = 1;
- // 实验配置
- repeated Exp exps = 2;
-}
-
-// 魔镜实验配置项
-message Exp {
- // 实验名
- string exp_name = 1;
- // 实验组
- string exp_group = 2;
-}
-
-// 动态同城-响应
-message DynOurCityReply {
- // 翻页游标
- string offset = 1;
- // 是否还有更多数据
- // 1:有
- int32 has_more = 2;
- // 样式类型
- // 1:双列 2:瀑布流
- int32 style = 3;
- // 顶导信息
- string top_label = 4;
- // 列表详情
- repeated DynOurCityItem list = 5;
- // 顶导按钮信息
- string top_button_label = 6;
- // 城市ID
- int32 city_id = 7;
- // 城市名
- string city_name = 8;
-}
-
-// 动态同城物料
-message DynOurCityItem {
- // 卡片类型
- // av:稿件 draw:图文
- string card_type = 1;
- // 动态ID
- int64 dyn_id = 2;
- // 跳转地址
- string uri = 3;
- // 模块列表
- repeated DynOurCityModule modules = 4;
- // 资源ID
- int64 rid = 5;
- // 透传服务端魔镜参数
- string debug_info = 6;
-}
-
-// 动态同城物料模块
-message DynOurCityModule {
- // 类型
- // cover:封面 desc:描述 author:发布人 extend:扩展部分
- string module_type = 1;
- oneof module_item {
- // 封面
- DynOurCityModuleCover module_cover = 2;
- // 描述
- DynOurCityModuleDesc module_desc = 3;
- // 发布人
- DynOurCityModuleAuthor module_author = 4;
- // 扩展部分
- DynOurCityModuleExtend module_extend = 5;
-}
-}
-
-// 动态同城物料-封面模块
-message DynOurCityModuleCover {
- // 封面图 单图样式取第一个元素
- repeated string covers = 1;
- // 封面样式
- // 1:横图 2:竖图 3:方图
- int32 style = 2;
- // 视频封面展示项图标 1
- int32 cover_left_icon_1 = 3;
- // 视频封面展示项 1
- string cover_left_text_1 = 4;
- // 视频封面展示项图标 2
- int32 cover_left_icon_2 = 5;
- // 视频封面展示项 2
- string cover_left_text_2 = 6;
- // 封面视频展示项 3
- string cover_left_text_3 = 7;
- // 角标
- repeated VideoBadge badge = 8;
-}
-
-// 动态同城物料-描述模块
-message DynOurCityModuleDesc {
- // 描述信息
- string desc = 1;
-}
-
-// 动态同城物料-发布人模块
-message DynOurCityModuleAuthor {
- // 用户Mid
- int64 mid = 1;
- // 用户昵称
- string name = 2;
- // 用户头像
- string face = 3;
- // 跳转地址
- string uri = 4;
-}
-
-// 动态同城物料-扩展部分模块
-message DynOurCityModuleExtend {
- // 类型
- string type = 1;
- oneof extend {
- // LBS模块
- DynOurCityModuleExtendLBS extend_lbs = 2;
- }
-}
-
-// 动态同城物料extent-LBS模块
-message DynOurCityModuleExtendLBS{
- // 标题
- string title = 1;
- // 跳转地址
- string uri = 2;
- // 小图标
- string icon = 3;
- // poiType
- int32 poi_type = 4;
-}
-
-// 最近访问up主列表
-message ModuleDynUpList {
- // 标题展示文案
- string module_title = 1;
- // “全部”按钮文案
- string show_all = 2;
- // up主列表
- repeated UpListItem list = 3;
+// 动态红点接口各tab offset信息
+message TabOffset {
+ // 1:综合页 2:视频页
+ int32 tab = 1;
+ // 上一次对应列表页offset
+ string offset = 2;
}
// up主列表
@@ -1080,275 +1304,86 @@ message UpListItem {
int64 uid = 4;
}
-// 我的追番列表
-message ModuleFollowList {
- // 查看全部的跳转链接
- string view_all_link = 1;
- //
- repeated FollowListItem list = 2;
-}
-
-// 我的追番列表Item
-message FollowListItem {
- // season_id
- int32 season_id = 1;
- // 标题
- string title = 2;
- // 封面图
- string cover = 3;
- // 跳转链接
- string url = 4;
- // 最新ep
- NewEP new_ep = 5;
-}
-
-// 最新ep
-message NewEP {
- // 最新话epid
- int32 id = 1;
- // 更新至XX话
- string index_show = 2;
- // 更新剧集的封面
- string cover = 3;
-}
-
-// 最近访问-个人feed流列表-请求
-message DynVideoPersonalReq {
- // 青少年模式
- // 1:开启青少年模式
- int32 teenagers_mode = 1;
- // 被访问者的mid
- int64 host_uid = 2;
- // 偏移量 第一页可传空
- string offset = 3;
- // 标明下拉几次
- int32 page = 4;
- // 是否是预加载
- int32 is_preload = 5;
- // 清晰度
- int32 qn = 6;
- // 流版本
- int32 fnver = 7;
- // 流类型
- int32 fnval = 8;
- // 是否强制使用域名
- int32 force_host = 9;
- // 是否4k
- int32 fourk = 10;
-}
-
-// 最近访问-个人feed流列表-响应
-message DynVideoPersonalReply {
- // 动态列表
- repeated DynamicItem list = 1;
- // 偏移量
- string offset = 2;
- // 是否还有更多数据
- int32 has_more = 3;
- // 已读进度
- string read_offset = 4;
-}
-
-// 最近访问-标记已读-请求
-message DynUpdOffsetReq {
- // 被访问者的UID
- int64 host_uid = 1;
- // 用户已读进度
- string read_offset = 2;
-}
-
-// PGC单季信息
-message PGCSeason {
- // 是否完结
- int32 is_finish = 1;
- // 标题
- string title = 2;
- // 类型
- int32 type = 3;
-}
-
-// 动态红点接口-请求
-message DynRedReq {
- // 动态红点接口各tab offset信息
- repeated TabOffset tab_offset = 1;
-}
-
-// 动态红点接口各tab offset信息
-message TabOffset {
- // 1:综合页 2:视频页
- int32 tab = 1;
- // 上一次对应列表页offset
- string offset = 2;
-}
-
-// 红点接口-响应
-message DynRedReply {
- // 类型
- // count:数字红点 point:普通红点 no_point:没有红点
- string red_type = 1;
- // 红点具体信息
- DynRedItem dyn_red_item = 2;
- // 默认tab 值对应tab接口下发的anchor
- string default_tab = 3;
-}
-
-// 红点接口物料
-message DynRedItem {
- // 数字红点有效 更新数
- uint64 count = 1;
-}
-
-// 直播信息
-message MixUpListLiveItem {
- // 直播状态
- // 0:未直播 1:直播中
- bool status = 1;
- // 房间号
- int64 room_id = 2;
- // 跳转地址
- string uri = 3;
-}
-
-// 查看更多-列表单条数据
-message MixUpListItem {
+// 用户信息
+message UserInfo {
// 用户mid
- int64 uid = 1;
- // 特别关注
- // 0:否 1:是
- int32 special_attention = 2;
- // 小红点状态
- // 0:没有 1:有
- int32 reddot_state = 3;
- // 直播信息
- MixUpListLiveItem live_info = 4;
- // 昵称
- string name = 5;
- // 头像
- string face = 6;
+ int64 mid = 1;
+ // 用户昵称
+ string name = 2;
+ // 用户头像
+ string face = 3;
// 认证信息
- OfficialVerify official = 7;
+ OfficialVerify official = 4;
// 大会员信息
- VipInfo vip = 8;
- // 关注状态
- Relation relation = 9;
+ VipInfo vip = 5;
+ // 直播信息
+ LiveInfo live = 6;
+ // 空间页跳转链接
+ string uri = 7;
+ // 挂件信息
+ UserPendant pendant = 8;
+ // 认证名牌
+ Nameplate nameplate = 9;
}
-// 查看更多-列表-响应
-message DynMixUpListViewMoreReply {
- // 关注up主列表信息
- repeated MixUpListItem items = 1;
- // 默认搜索文案
- string search_default_text = 2;
+// 头像挂件信息
+message UserPendant {
+ // pid
+ int64 pid = 1;
+ // 名称
+ string name = 2;
+ // 图片链接
+ string image = 3;
+ // 有效期
+ int64 expire = 4;
}
-// 查看更多-搜索-请求
-message DynMixUpListSearchReq {
- //
- string name = 1;
-}
-
-// 查看更多-搜索-响应
-message DynMixUpListSearchReply {
- //
- repeated MixUpListItem items = 1;
-}
-
-// 关注关系
-message Relation {
- // 关注状态
- RelationStatus status = 1;
- // 关注
- int32 is_follow = 2;
- // 被关注
- int32 is_followed = 3;
+// 角标信息
+message VideoBadge {
// 文案
- string title = 4;
+ string text = 1;
+ // 文案颜色-日间
+ string text_color = 2;
+ // 文案颜色-夜间
+ string text_color_night = 3;
+ // 背景颜色-日间
+ string bg_color = 4;
+ // 背景颜色-夜间
+ string bg_color_night = 5;
+ // 边框颜色-日间
+ string border_color = 6;
+ // 边框颜色-夜间
+ string border_color_night = 7;
+ // 样式
+ int32 bg_style = 8;
}
-// 关注状态
-enum RelationStatus {
- relation_status_none = 0;
- // 未关注
- relation_status_nofollow = 1;
- // 关注
- relation_status_follow = 2;
- // 被关注
- relation_status_followed = 3;
- // 互相关注
- relation_status_mutual_concern = 4;
- // 特别关注
- relation_status_special = 5;
+// 番剧类型
+enum VideoSubType {
+ VideoSubTypeNone = 0; // 没有子类型
+ VideoSubTypeBangumi = 1; // 番剧
+ VideoSubTypeMovie = 2; // 电影
+ VideoSubTypeDocumentary = 3; // 纪录片
+ VideoSubTypeDomestic = 4; // 国创
+ VideoSubTypeTeleplay = 5; // 电视剧
}
-// 动态同城点击上报-请求
-message OurCityClickReportReq {
- // 动态ID
- string dynamic_id = 1;
- // 城市ID
- int64 city_id = 2;
- // 纬度
- double lat = 3;
- // 经度
- double lng = 4;
+// 大会员信息
+message VipInfo {
+ // 大会员类型
+ int32 Type = 1;
+ // 大会员状态
+ int32 status = 2;
+ // 到期时间
+ int64 due_date = 3;
+ // 标签
+ VipLabel label = 4;
+ // 主题
+ int32 theme_type = 5;
}
-// 动态同城点击上报-响应
-message OurCityClickReportReply {}
-
-// 位置定位-请求
-message GeoCoderReq {
- // 纬度
- double lat = 1;
- // 经度
- double lng = 2;
- // 页面来源
- string from = 3;
+// 大会员标签
+message VipLabel {
+ // 图片地址
+ string path = 1;
}
-
-// 位置定位-响应
-message GeoCoderReply {
- // 以行政区划+道路+门牌号等信息组成的标准格式化地址
- string address = 1;
- // 地址部件,address不满足需求时可自行拼接
- AddressComponent address_component = 2;
- // 行政区划信息
- AdInfo ad_info = 3;
-}
-
-// 地址部件
-message AddressComponent {
- // 国家
- string nation = 1;
- // 省
- string province = 2;
- // 市
- string city = 3;
- // 区,可能为空字串
- string district = 4;
- // 街道,可能为空字串
- string street = 5;
- // 门牌,可能为空字串
- string street_number = 6;
-}
-
-// 行政区划信息
-message AdInfo {
- // 国家代码(ISO3166标准3位数字码)
- string nation_code = 1;
- // 行政区划代码,规则详见:行政区划代码说明
- string adcode = 2;
- // 城市代码,由国家码+行政区划代码(提出城市级别)组合而来,总共为9位
- string city_code = 3;
- // 行政区划名称
- string name = 4;
- // 行政区划中心点坐标
- Gps gps = 5;
-}
-
-// 行政区划中心点坐标
-message Gps {
- // 纬度
- double lat = 1;
- // 经度
- double lng = 2;
-}
\ No newline at end of file
diff --git a/grpc_api/bilibili/app/dynamic/v2/campus.proto b/grpc_api/bilibili/app/dynamic/v2/campus.proto
new file mode 100644
index 0000000..1f94706
--- /dev/null
+++ b/grpc_api/bilibili/app/dynamic/v2/campus.proto
@@ -0,0 +1,66 @@
+
+syntax = "proto3";
+
+package bilibili.app.dynamic.v2;
+
+import "bilibili/app/archive/middleware/v1/preload.proto";
+import "bilibili/pagination/pagination.proto";
+import "bilibili/app/dynamic/common/dynamic.proto";
+import "bilibili/app/dynamic/v2/dynamic.proto";
+
+service Campus {
+ //
+ rpc WaterFlowRcmd (WaterFlowRcmdReq) returns (WaterFlowRcmdResp);
+}
+
+//
+message CampusWaterFlowItem {
+ //
+ int32 item_type = 1;
+ //
+ bilibili.app.dynamic.common.ItemWHRatio wh_ratio = 2;
+ //
+ oneof item {
+ WFItemDefault item_default = 3;
+ }
+}
+
+//
+message WaterFlowRcmdReq {
+ //
+ int64 campus_id = 1;
+ //
+ int32 page = 2;
+ //
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 3;
+ //
+ CampusRcmdReqFrom from = 4;
+}
+
+//
+message WaterFlowRcmdResp {
+ //
+ repeated CampusWaterFlowItem items = 1;
+ //
+ bilibili.pagination.FeedPaginationReply offset = 2;
+}
+
+//
+message WFItemDefault {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ CoverIconWithText bottom_left_1 = 3;
+ //
+ CoverIconWithText bottom_left_2 = 4;
+ //
+ CoverIconWithText bottom_right_1 = 5;
+ //
+ string uri = 6;
+ //
+ RcmdReason rcmd_reason = 7;
+ //
+ map annotations = 8;
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/app/dynamic/v2/dynamic.proto b/grpc_api/bilibili/app/dynamic/v2/dynamic.proto
index 59e67a1..07e749e 100644
--- a/grpc_api/bilibili/app/dynamic/v2/dynamic.proto
+++ b/grpc_api/bilibili/app/dynamic/v2/dynamic.proto
@@ -4,99 +4,122 @@ package bilibili.app.dynamic.v2;
import "google/protobuf/any.proto";
import "bilibili/app/archive/middleware/v1/preload.proto";
+import "bilibili/dagw/component/avatar/v1/avatar.proto";
-// v2动态
+// v2动态, rpc 按字母顺序排列
service Dynamic {
- // 动态视频页
- rpc DynVideo(DynVideoReq) returns (DynVideoReply);
+ //
+ rpc AlumniDynamics (AlumniDynamicsReq) returns (AlumniDynamicsReply);
+ //
+ rpc CampusBillBoard (CampusBillBoardReq) returns (CampusBillBoardReply);
+ //
+ rpc CampusEntryTab(CampusEntryTabReq) returns (CampusEntryTabResp);
+ //
+ rpc CampusFeedback(CampusFeedbackReq) returns (CampusFeedbackReply);
+ //
+ rpc CampusHomePages(CampusHomePagesReq) returns (CampusHomePagesReply);
+ //
+ rpc CampusMateLikeList(CampusMateLikeListReq) returns (CampusMateLikeListReply);
+ //
+ rpc CampusMngDetail(CampusMngDetailReq) returns (CampusMngDetailReply);
+ //
+ rpc CampusMngQuizOperate(CampusMngQuizOperateReq) returns (CampusMngQuizOperateReply);
+ //
+ rpc CampusMngSubmit(CampusMngSubmitReq) returns (CampusMngSubmitReply);
+ //
+ rpc CampusRcmd(CampusRcmdReq) returns (CampusRcmdReply);
+ //
+ rpc CampusRcmdFeed(CampusRcmdFeedReq) returns (CampusRcmdFeedReply);
+ //
+ rpc CampusRecommend(CampusRecommendReq) returns (CampusRecommendReply);
+ //
+ rpc CampusRedDot(CampusRedDotReq) returns (CampusRedDotReply);
+ //
+ rpc CampusSquare(CampusSquareReq) returns (CampusSquareReply);
+ //
+ rpc CampusTopicRcmdFeed(CampusTopicRcmdFeedReq) returns (CampusTopicRcmdFeedReply);
+ // 动态通用附加卡-follow/取消follow
+ rpc DynAdditionCommonFollow(DynAdditionCommonFollowReq) returns (DynAdditionCommonFollowReply);
// 动态综合页
rpc DynAll(DynAllReq) returns (DynAllReply);
- // 批量动态id获取动态详情
- rpc DynDetails(DynDetailsReq) returns (DynDetailsReply);
- // 视频页最近访问 - 个人feed流
- rpc DynVideoPersonal(DynVideoPersonalReq) returns (DynVideoPersonalReply);
- // 视频页最近访问 - 标记已读
- rpc DynVideoUpdOffset(DynVideoUpdOffsetReq) returns (NoReply);
- // 动态通用附加卡-follow/取消follow
- rpc DynAdditionCommonFollow(DynAdditionCommonFollowReq) returns(DynAdditionCommonFollowReply);
- // 动态点赞
- rpc DynThumb(DynThumbReq) returns(NoReply);
- // 动态发布生成临时卡
- rpc DynFakeCard(DynFakeCardReq) returns(DynFakeCardReply);
- // 关注推荐up主换一换
- rpc DynRcmdUpExchange(DynRcmdUpExchangeReq) returns(DynRcmdUpExchangeReply);
// 综合页最近访问 - 个人feed流
rpc DynAllPersonal(DynAllPersonalReq) returns (DynAllPersonalReply);
// 综合页最近访问 - 标记已读
rpc DynAllUpdOffset(DynAllUpdOffsetReq) returns (NoReply);
- // 投票操作接口
- rpc DynVote(DynVoteReq) returns (DynVoteReply);
- // 网关调用 - 查看更多-列表
- rpc DynMixUpListViewMore(DynMixUpListViewMoreReq) returns (DynMixUpListViewMoreReply);
- // 轻浏览
- rpc DynLight(DynLightReq) returns (DynLightReply);
// 动态详情页
rpc DynDetail(DynDetailReq) returns (DynDetailReply);
- // 点赞列表
- rpc LikeList(LikeListReq) returns (LikeListReply);
- // 转发列表
- rpc RepostList(RepostListReq) returns (RepostListRsp);
+ // 批量动态id获取动态详情
+ rpc DynDetails(DynDetailsReq) returns (DynDetailsReply);
+ // 动态发布生成临时卡
+ rpc DynFakeCard(DynFakeCardReq) returns (DynFakeCardReply);
+ //
+ rpc DynFriend(DynFriendReq) returns (DynFriendReply);
+ // 轻浏览
+ rpc DynLight(DynLightReq) returns (DynLightReply);
+ // 网关调用 - 查看更多-列表
+ rpc DynMixUpListViewMore(DynMixUpListViewMoreReq) returns (DynMixUpListViewMoreReply);
+ // 关注推荐up主换一换
+ rpc DynRcmdUpExchange(DynRcmdUpExchangeReq) returns (DynRcmdUpExchangeReply);
+ //
+ rpc DynSearch(DynSearchReq) returns (DynSearchReply);
+ //
+ rpc DynServerDetails(DynServerDetailsReq) returns (DynServerDetailsReply);
// 空间页动态
rpc DynSpace(DynSpaceReq) returns (DynSpaceRsp);
+ //
+ rpc DynSpaceSearchDetails(DynSpaceSearchDetailsReq) returns (DynSpaceSearchDetailsReply);
+ //
+ rpc DynTab(DynTabReq) returns (DynTabReply);
+ // 动态点赞
+ rpc DynThumb(DynThumbReq) returns (NoReply);
// 未登录页分区UP主推荐
rpc DynUnLoginRcmd(DynRcmdReq) returns (DynRcmdReply);
- //
- rpc DynServerDetails (DynServerDetailsReq) returns (DynServerDetailsReply);
- //
- rpc DynSearch(DynSearchReq) returns (DynSearchReply);
- //
- rpc SetDecision(SetDecisionReq) returns (NoReply);
- //
- rpc AlumniDynamics(AlumniDynamicsReq) returns (AlumniDynamicsReply);
- //
- rpc CampusRcmd(CampusRcmdReq) returns (CampusRcmdReply);
- //
- rpc SubscribeCampus(SubscribeCampusReq) returns (NoReply);
- //
- rpc SetRecentCampus(SetRecentCampusReq) returns (NoReply);
- //
- rpc DynTab(DynTabReq) returns (DynTabReply);
- //
- rpc SchoolSearch(SchoolSearchReq) returns (SchoolSearchReply);
- //
- rpc SchoolRecommend(SchoolRecommendReq) returns (SchoolRecommendReply);
- //
- rpc DynSpaceSearchDetails(DynSpaceSearchDetailsReq) returns (DynSpaceSearchDetailsReply);
- //
+ // 动态视频页
+ rpc DynVideo(DynVideoReq) returns (DynVideoReply);
+ // 视频页最近访问 - 个人feed流
+ rpc DynVideoPersonal(DynVideoPersonalReq) returns (DynVideoPersonalReply);
+ // 视频页最近访问 - 标记已读
+ rpc DynVideoUpdOffset(DynVideoUpdOffsetReq) returns (NoReply);
+ //
+ rpc DynVote(DynVoteReq) returns (DynVoteReply);
+ //
+ rpc FeedFilter(FeedFilterReq) returns (FeedFilterReply);
+ //
+ rpc FetchTabSetting(NoReq) returns (FetchTabSettingReply);
+ //
+ rpc HomeSubscribe(HomeSubscribeReq) returns (HomeSubscribeReply);
+ //
+ rpc LbsPoi(LbsPoiReq) returns (LbsPoiReply);
+ //
+ rpc LegacyTopicFeed(LegacyTopicFeedReq) returns (LegacyTopicFeedReply);
+ // 点赞列表
+ rpc LikeList(LikeListReq) returns (LikeListReply);
+ //
rpc OfficialAccounts(OfficialAccountsReq) returns (OfficialAccountsReply);
- //
+ //
rpc OfficialDynamics(OfficialDynamicsReq) returns (OfficialDynamicsReply);
- //
- rpc CampusRedDot(CampusRedDotReq) returns (CampusRedDotReply);
- //
- rpc CampusRcmdFeed(CampusRcmdFeedReq) returns (CampusRcmdFeedReply);
- //
- rpc TopicSquare(TopicSquareReq) returns (TopicSquareReply);
- //
+ // 新版动态转发点赞列表 需要登录
+ rpc ReactionList(ReactionListReq) returns (ReactionListReply);
+ // 转发列表
+ rpc RepostList(RepostListReq) returns (RepostListRsp);
+ //
+ rpc SchoolRecommend(SchoolRecommendReq) returns (SchoolRecommendReply);
+ //
+ rpc SchoolSearch(SchoolSearchReq) returns (SchoolSearchReply);
+ //
+ rpc SetDecision(SetDecisionReq) returns (NoReply);
+ //
+ rpc SetRecentCampus(SetRecentCampusReq) returns (NoReply);
+ //
+ rpc SubscribeCampus(SubscribeCampusReq) returns (NoReply);
+ //
rpc TopicList(TopicListReq) returns (TopicListReply);
- //
- rpc CampusMateLikeList(CampusMateLikeListReq) returns (CampusMateLikeListReply);
- //
- rpc CampusFeedback(CampusFeedbackReq) returns (CampusFeedbackReply);
- //
- rpc CampusBillboard(CampusBillBoardReq) returns (CampusBillBoardReply);
- //
- rpc CampusBillboardInternal(CampusBillboardInternalReq) returns (CampusBillBoardReply);
- //
- rpc CampusTopicRcmdFeed(CampusTopicRcmdFeedReq) returns (CampusTopicRcmdFeedReply);
-}
-
-// 综合页请求广告所需字段,由客户端-网关透传
-message AdParam {
- // 综合页请求广告所需字段,由客户端-网关透传
- string ad_extra = 1;
- // request_id
- string request_id = 2;
+ //
+ rpc TopicSquare(TopicSquareReq) returns (TopicSquareReply);
+ //
+ rpc UnfollowMatch(UnfollowMatchReq) returns (NoReply);
+ //
+ rpc UpdateTabSetting(UpdateTabSettingReq) returns (NoReply);
}
//
@@ -113,309 +136,6 @@ enum AddButtonType {
bt_button = 2; // 按钮
}
-// 动态-附加卡-通用卡
-message AdditionCommon {
- // 头部说明文案
- string head_text = 1;
- // 标题
- string title = 2;
- // 展示图
- string image_url = 3;
- // 描述文字1
- string desc_text_1 = 4;
- // 描述文字2
- string desc_text_2 = 5;
- // 点击跳转链接
- string url = 6;
- // 按钮
- AdditionalButton button = 7;
- // 头部icon
- string head_icon = 8;
- // style
- ImageStyle style = 9;
- // 动态本身的类型 type
- string type = 10;
- // 附加卡类型
- string card_type = 11; // ogv manga
-}
-
-// 动态-附加卡-电竞卡
-message AdditionEsport {
- // 电竞类型
- EspaceStyle style = 1;
- oneof item {
- // moba类
- AdditionEsportMoba addition_esport_moba = 2;
- }
- // 动态本身的类型 type
- string type = 3;
- // 附加卡类型
- string card_type = 4; // ogv manga
-}
-
-// 动态-附加卡-电竞卡-moba类
-message AdditionEsportMoba {
- // 头部说明文案
- string head_text = 1;
- // 标题
- string title = 2;
- // 战队列表
- repeated MatchTeam match_team = 3;
- // 比赛信息
- AdditionEsportMobaStatus addition_esport_moba_status = 4;
- // 卡片跳转
- string uri = 5;
- // 按钮
- AdditionalButton button = 6;
- // 副标题
- string sub_title = 7;
- // 动态本身的类型 type
- string type = 10;
- // 附加卡类型
- string card_type = 11;
- // 附加卡图标
- string head_icon = 12;
-}
-
-// 动态-附加卡-电竞卡-moba类-比赛信息
-message AdditionEsportMobaStatus {
- // 文案类
- repeated AdditionEsportMobaStatusDesc addition_esport_moba_status_desc = 1;
- // 比赛状态文案
- string title = 2;
- // 比赛状态状态
- int32 status = 3;
- // 日间色值
- string color = 4;
- // 夜间色值
- string night_color = 5;
-}
-
-// 动态-附加卡-电竞卡-moba类-比赛信息-文案类
-message AdditionEsportMobaStatusDesc {
- // 文案
- string title = 1;
- // 日间色值
- string color = 2;
- // 夜间色值
- string night_color = 3;
-}
-
-// 动态-附加卡-商品卡
-message AdditionGoods {
- // 推荐文案
- string rcmd_desc = 1;
- // 商品信息
- repeated GoodsItem goods_items = 2;
- // 附加卡类型
- string card_type = 3;
- // 头部icon
- string icon = 4;
- // 商品附加卡整卡跳转
- string uri = 5;
- // 商品类型
- // 1:淘宝 2:会员购,注:实际是获取的goods_items里面的第一个source_type
- int32 source_type = 6;
-}
-
-// up主预约发布卡
-message AdditionUP {
- // 标题
- string title = 1;
- // 高亮文本,描述文字1
- HighlightText desc_text_1 = 2;
- // 描述文字2
- string desc_text_2 = 3;
- // 点击跳转链接
- string url = 4;
- // 按钮
- AdditionalButton button = 5;
- // 附加卡类型
- string card_type = 6;
- // 预约人数(用于预约人数变化)
- int64 reserve_total = 7;
- // 活动皮肤
- AdditionalActSkin act_skin = 8;
- // 预约id
- int64 rid = 9;
- //
- int32 lottery_type = 10;
- //
- HighlightText desc_text3 = 11;
- //
- int64 up_mid = 12;
- //
- AdditionUserInfo user_info = 13;
- //
- string dynamic_id = 14;
- //
- bool show_text2 = 15;
- //
- int64 dyn_type = 16;
- //
- string business_id = 17;
-}
-
-// 动态-附加卡-UGC视频附加卡
-message AdditionUgc {
- // 说明文案
- string head_text = 1;
- // 稿件标题
- string title = 2;
- // 封面
- string cover = 3;
- // 描述文字1
- string desc_text_1 = 4;
- // 描述文字2
- string desc_text_2 = 5;
- // 接秒开
- string uri = 6;
- // 时长
- string duration = 7;
- // 标题支持换行-标题支持单行和双行,本期不支持填充up昵称,支持双行展示,字段默认为true
- bool line_feed = 8;
- // 附加卡类型
- string card_type = 9;
-}
-
-//
-message AdditionUserInfo {
- //
- string name = 1;
- //
- string face = 2;
-}
-
-// 动态-附加卡-投票
-message AdditionVote {
- // 封面图
- string image_url = 1;
- // 标题
- string title = 2;
- // 展示项1
- string text_1 = 3;
- // button文案
- string button_text = 4;
- // 点击跳转链接
- string url = 5;
-}
-
-// 动态模块-投票
-message AdditionVote2 {
- // 投票类型
- AdditionVoteType addition_vote_type = 1;
- // 投票ID
- int64 vote_id = 2;
- // 标题
- string title = 3;
- // 已过期: xxx人参与· 投票已过期。button 展示去查看
- // 未过期: xxx人参与· 剩xx天xx时xx分。button展示去投票
- string label = 4;
- // 剩余时间
- int64 deadline = 5;
- // 生效文案
- string open_text = 6;
- // 过期文案
- string close_text = 7;
- // 已投票
- string voted_text = 8;
- // 投票状态
- AdditionVoteState state = 9;
- // 投票信息
- oneof item {
- //
- AdditionVoteWord addition_vote_word = 10;
- //
- AdditionVotePic addition_vote_pic = 11;
- //
- AdditionVoteDefaule addition_vote_defaule = 12;
- }
- // 业务类型
- // 0:动态投票 1:话题h5组件
- int32 biz_type = 13;
- // 投票总人数
- int64 total = 14;
- // 附加卡类型
- string card_type = 15;
- // 异常提示
- string tips = 16;
- // 跳转地址
- string uri = 17;
- // 是否投票
- bool is_voted = 18;
- // 投票最多多选个数,单选为1
- int32 choice_cnt = 19;
- // 是否默认选中分享到动态
- bool defaule_select_share = 20;
-}
-
-// 外露投票
-message AdditionVoteDefaule {
- // 图片 多张
- repeated string cover = 1;
-}
-
-// 外露图片类型
-message AdditionVotePic {
- // 图片投票详情
- repeated AdditionVotePicItem item = 1;
-}
-
-// 图片投票详情
-message AdditionVotePicItem {
- // 选项索引,从1开始
- int32 opt_idx = 1;
- // 图片
- string cover = 2;
- // 选中状态
- bool is_vote = 3;
- // 人数
- int32 total = 4;
- // 占比
- double persent = 5;
- // 标题文案
- string title = 6;
- // 是否投票人数最多的选项
- bool is_max_option = 7;
-}
-
-// 投票状态
-enum AdditionVoteState {
- addition_vote_state_none = 0; //
- addition_vote_state_open = 1; //
- addition_vote_state_close = 2; //
-}
-
-// 投票类型
-enum AdditionVoteType {
- addition_vote_type_none = 0; //
- addition_vote_type_word = 1; //
- addition_vote_type_pic = 2; //
- addition_vote_type_default = 3; //
-}
-
-// 外露文字类型
-message AdditionVoteWord {
- // 外露文字投票详情
- repeated AdditionVoteWordItem item = 1;
-}
-
-// 外露文字投票详情
-message AdditionVoteWordItem {
- // 选项索引,从1开始
- int32 opt_idx = 1;
- // 文案
- string title = 2;
- // 选中状态
- bool is_vote = 3;
- // 人数
- int32 total = 4;
- // 占比
- double persent = 5;
- // 是否投票人数最多的选项
- bool is_max_option = 6;
-}
-
// 活动皮肤
message AdditionalActSkin {
// 动画SVGA资源
@@ -541,6 +261,362 @@ enum AdditionalType {
additional_type_up_reservation = 8; // UP主预约卡
}
+// 动态-附加卡-专栏
+message AdditionArticle {
+ //
+ string title = 1;
+ //
+ MdlDynDrawItem cover = 2;
+ //
+ string desc_text_left = 3;
+ //
+ string desc_text_right = 4;
+ //
+ string uri = 5;
+ //
+ string card_type = 6;
+}
+
+// 动态-附加卡-通用卡
+message AdditionCommon {
+ // 头部说明文案
+ string head_text = 1;
+ // 标题
+ string title = 2;
+ // 展示图
+ string image_url = 3;
+ // 描述文字1
+ string desc_text_1 = 4;
+ // 描述文字2
+ string desc_text_2 = 5;
+ // 点击跳转链接
+ string url = 6;
+ // 按钮
+ AdditionalButton button = 7;
+ // 头部icon
+ string head_icon = 8;
+ // style
+ ImageStyle style = 9;
+ // 动态本身的类型 type
+ string type = 10;
+ // 附加卡类型
+ string card_type = 11; // ogv manga
+}
+
+// 动态-附加卡-电竞卡
+message AdditionEsport {
+ // 电竞类型
+ EspaceStyle style = 1;
+ oneof item {
+ // moba类
+ AdditionEsportMoba addition_esport_moba = 2;
+ }
+ // 动态本身的类型 type
+ string type = 3;
+ // 附加卡类型
+ string card_type = 4; // ogv manga
+}
+
+// 动态-附加卡-电竞卡-moba类
+message AdditionEsportMoba {
+ // 头部说明文案
+ string head_text = 1;
+ // 标题
+ string title = 2;
+ // 战队列表
+ repeated MatchTeam match_team = 3;
+ // 比赛信息
+ AdditionEsportMobaStatus addition_esport_moba_status = 4;
+ // 卡片跳转
+ string uri = 5;
+ // 按钮
+ AdditionalButton button = 6;
+ // 副标题
+ string sub_title = 7;
+ // 动态本身的类型 type
+ string type = 10;
+ // 附加卡类型
+ string card_type = 11;
+ // 附加卡图标
+ string head_icon = 12;
+}
+
+// 动态-附加卡-电竞卡-moba类-比赛信息
+message AdditionEsportMobaStatus {
+ // 文案类
+ repeated AdditionEsportMobaStatusDesc addition_esport_moba_status_desc = 1;
+ // 比赛状态文案
+ string title = 2;
+ // 比赛状态状态
+ int32 status = 3;
+ // 日间色值
+ string color = 4;
+ // 夜间色值
+ string night_color = 5;
+}
+
+// 动态-附加卡-电竞卡-moba类-比赛信息-文案类
+message AdditionEsportMobaStatusDesc {
+ // 文案
+ string title = 1;
+ // 日间色值
+ string color = 2;
+ // 夜间色值
+ string night_color = 3;
+}
+
+// 动态-附加卡-商品卡
+message AdditionGoods {
+ // 推荐文案
+ string rcmd_desc = 1;
+ // 商品信息
+ repeated GoodsItem goods_items = 2;
+ // 附加卡类型
+ string card_type = 3;
+ // 头部icon
+ string icon = 4;
+ // 商品附加卡整卡跳转
+ string uri = 5;
+ // 商品类型
+ // 1:淘宝 2:会员购,注:实际是获取的goods_items里面的第一个source_type
+ int32 source_type = 6;
+ //
+ int32 jump_type = 7;
+ //
+ string app_name = 8;
+ //
+ string ad_mark_icon = 9;
+}
+
+// 动态-附加卡-直播附加卡
+message AdditionLiveRoom {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ VideoBadge badge = 3;
+ //
+ CoverIconWithText desc_text_upper = 4;
+ //
+ string desc_text_lower = 5;
+ //
+ string uri = 6;
+ //
+ string card_type = 7;
+}
+
+// 动态-附加卡-UGC视频附加卡
+message AdditionUgc {
+ // 说明文案
+ string head_text = 1;
+ // 稿件标题
+ string title = 2;
+ // 封面
+ string cover = 3;
+ // 描述文字1
+ string desc_text_1 = 4;
+ // 描述文字2
+ string desc_text_2 = 5;
+ // 接秒开
+ string uri = 6;
+ // 时长
+ string duration = 7;
+ // 标题支持换行-标题支持单行和双行,本期不支持填充up昵称,支持双行展示,字段默认为true
+ bool line_feed = 8;
+ // 附加卡类型
+ string card_type = 9;
+}
+
+// up主预约发布卡
+message AdditionUP {
+ // 标题
+ string title = 1;
+ // 高亮文本,描述文字1
+ HighlightText desc_text_1 = 2;
+ // 描述文字2
+ string desc_text_2 = 3;
+ // 点击跳转链接
+ string url = 4;
+ // 按钮
+ AdditionalButton button = 5;
+ // 附加卡类型
+ string card_type = 6;
+ // 预约人数(用于预约人数变化)
+ int64 reserve_total = 7;
+ // 活动皮肤
+ AdditionalActSkin act_skin = 8;
+ // 预约id
+ int64 rid = 9;
+ //
+ int32 lottery_type = 10;
+ //
+ HighlightText desc_text3 = 11;
+ //
+ int64 up_mid = 12;
+ //
+ AdditionUserInfo user_info = 13;
+ //
+ string dynamic_id = 14;
+ //
+ bool show_text2 = 15;
+ //
+ int64 dyn_type = 16;
+ //
+ string business_id = 17;
+ //
+ string badge_text = 18;
+ //
+ bool is_premiere = 19;
+}
+
+//
+message AdditionUserInfo {
+ //
+ string name = 1;
+ //
+ string face = 2;
+}
+
+// 动态-附加卡-投票
+message AdditionVote {
+ // 封面图
+ string image_url = 1;
+ // 标题
+ string title = 2;
+ // 展示项1
+ string text_1 = 3;
+ // button文案
+ string button_text = 4;
+ // 点击跳转链接
+ string url = 5;
+}
+
+// 动态模块-投票
+message AdditionVote2 {
+ // 投票类型
+ AdditionVoteType addition_vote_type = 1;
+ // 投票ID
+ int64 vote_id = 2;
+ // 标题
+ string title = 3;
+ // 已过期: xxx人参与· 投票已过期。button 展示去查看
+ // 未过期: xxx人参与· 剩xx天xx时xx分。button展示去投票
+ string label = 4;
+ // 剩余时间
+ int64 deadline = 5;
+ // 生效文案
+ string open_text = 6;
+ // 过期文案
+ string close_text = 7;
+ // 已投票
+ string voted_text = 8;
+ // 投票状态
+ AdditionVoteState state = 9;
+ // 投票信息
+ oneof item {
+ //
+ AdditionVoteWord addition_vote_word = 10;
+ //
+ AdditionVotePic addition_vote_pic = 11;
+ //
+ AdditionVoteDefaule addition_vote_defaule = 12;
+ }
+ // 业务类型
+ // 0:动态投票 1:话题h5组件
+ int32 biz_type = 13;
+ // 投票总人数
+ int64 total = 14;
+ // 附加卡类型
+ string card_type = 15;
+ // 异常提示
+ string tips = 16;
+ // 跳转地址
+ string uri = 17;
+ // 是否投票
+ bool is_voted = 18;
+ // 投票最多多选个数,单选为1
+ int32 choice_cnt = 19;
+ // 是否默认选中分享到动态
+ bool defaule_select_share = 20;
+}
+
+// 外露投票
+message AdditionVoteDefaule {
+ // 图片 多张
+ repeated string cover = 1;
+}
+
+// 外露图片类型
+message AdditionVotePic {
+ // 图片投票详情
+ repeated AdditionVotePicItem item = 1;
+}
+
+// 图片投票详情
+message AdditionVotePicItem {
+ // 选项索引,从1开始
+ int32 opt_idx = 1;
+ // 图片
+ string cover = 2;
+ // 选中状态
+ bool is_vote = 3;
+ // 人数
+ int32 total = 4;
+ // 占比
+ double persent = 5;
+ // 标题文案
+ string title = 6;
+ // 是否投票人数最多的选项
+ bool is_max_option = 7;
+}
+
+// 投票状态
+enum AdditionVoteState {
+ addition_vote_state_none = 0; //
+ addition_vote_state_open = 1; //
+ addition_vote_state_close = 2; //
+}
+
+// 投票类型
+enum AdditionVoteType {
+ addition_vote_type_none = 0; //
+ addition_vote_type_word = 1; //
+ addition_vote_type_pic = 2; //
+ addition_vote_type_default = 3; //
+}
+
+
+// 外露文字类型
+message AdditionVoteWord {
+ // 外露文字投票详情
+ repeated AdditionVoteWordItem item = 1;
+}
+
+// 外露文字投票详情
+message AdditionVoteWordItem {
+ // 选项索引,从1开始
+ int32 opt_idx = 1;
+ // 文案
+ string title = 2;
+ // 选中状态
+ bool is_vote = 3;
+ // 人数
+ int32 total = 4;
+ // 占比
+ double persent = 5;
+ // 是否投票人数最多的选项
+ bool is_max_option = 6;
+}
+
+// 综合页请求广告所需字段,由客户端-网关透传
+message AdParam {
+ // 综合页请求广告所需字段,由客户端-网关透传
+ string ad_extra = 1;
+ // request_id
+ string request_id = 2;
+}
+
//
message AlumniDynamicsReply {
//
@@ -561,6 +637,8 @@ message AlumniDynamicsReq {
int32 local_time = 4;
//
int32 page = 5;
+ //
+ int32 from_type = 6;
}
//
@@ -571,6 +649,16 @@ message CampusBannerInfo {
string jump_url = 2;
}
+//
+message CampusBillboardInternalReq {
+ //
+ int64 mid = 1;
+ //
+ int64 campus_id = 2;
+ //
+ string version_code = 3;
+}
+
//
message CampusBillBoardReply {
//
@@ -593,6 +681,8 @@ message CampusBillBoardReply {
string update_toast = 9;
//
int64 campus_id = 10;
+ //
+ CampusFeatureProgress open_progress = 11;
}
//
@@ -603,16 +693,44 @@ message CampusBillBoardReq {
string version_code = 2;
//
bilibili.app.archive.middleware.v1.PlayerArgs player_args = 3;
+ //
+ CampusReqFromType from_type = 4;
}
-//
-message CampusBillboardInternalReq {
- //
- int64 mid = 1;
- //
- int64 campus_id = 2;
- //
- string version_code = 3;
+//
+message CampusEntryTabReq {
+ //
+ int64 campus_id = 1;
+}
+
+//
+message CampusEntryTabResp {
+ //
+ CampusEntryType entry_type = 1;
+}
+
+//
+enum CampusEntryType {
+ //
+ NONE = 0;
+ //
+ ENTRY_DYNAMIC = 1;
+ //
+ ENTRY_HOME = 2;
+}
+
+//
+message CampusFeatureProgress {
+ //
+ int64 progress_full = 1;
+ //
+ int64 progress_achieved = 2;
+ //
+ string desc_title = 3;
+ //
+ string desc_1 = 4;
+ //
+ CampusLabel btn = 5;
}
//
@@ -641,6 +759,60 @@ message CampusFeedbackReq {
int32 from = 2;
}
+//
+message CampusHomePagesReply {
+ //
+ CampusRcmdTop top = 1;
+ //
+ CampusTop campus_top = 2;
+ //
+ int32 page_type = 3;
+}
+
+//
+message CampusHomePagesReq {
+ //
+ int64 campus_id = 1;
+ //
+ string campus_name = 2;
+ //
+ double lat = 3;
+ //
+ double lng = 4;
+ //
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 5;
+ //
+ int32 page_type = 6;
+}
+
+//
+enum CampusRcmdReqFrom {
+ CAMPUS_RCMD_FROM_UNKNOWN = 0;
+ CAMPUS_RCMD_FROM_HOME_UN_OPEN = 1;
+ CAMPUS_RCMD_FROM_VISIT_OTHER = 2;
+ CAMPUS_RCMD_FROM_HOME_MOMENT = 3;
+ CAMPUS_RCMD_FROM_DYN_MOMENT = 4;
+ CAMPUS_RCMD_FROM_PAGE_SUBORDINATE_MOMENT = 5;
+}
+
+//
+enum CampusHomePageType {
+ //
+ PAGE_MAJOR = 0;
+ //
+ PAGE_SUBORDINATE = 1;
+ //
+ PAGE_MAJOR_DETAIL = 2;
+}
+
+//
+message CampusHomeRcmdTopic {
+ //
+ ModuleTitle title = 1;
+ //
+ repeated TopicItem topic = 2;
+}
+
//
message CampusInfo {
//
@@ -651,6 +823,8 @@ message CampusInfo {
string desc = 3;
//
int64 online = 4;
+ //
+ string url = 5;
}
//
@@ -673,6 +847,181 @@ message CampusMateLikeListReply {
message CampusMateLikeListReq {
//
int64 dynamic_id = 1;
+ //
+ CampusReqFromType from_type = 2;
+}
+
+//
+enum CampusMngAuditStatus {
+ //
+ campus_mng_audit_none = 0;
+ //
+ campus_mng_audit_in_process = 1;
+ //
+ campus_mng_audit_failed = 2;
+}
+
+//
+message CampusMngBadge {
+ //
+ string title = 1;
+ //
+ string badge_url = 2;
+ //
+ string upload_hint_msg = 3;
+}
+
+//
+message CampusMngBasicInfo {
+ //
+ int64 campus_id = 1;
+ //
+ string campus_name = 2;
+ //
+ string hint_msg = 3;
+}
+
+//
+message CampusMngDetailReply {
+ //
+ repeated CampusMngItem items = 1;
+ //
+ string top_hint_bar_msg = 2;
+ //
+ string bottom_submit_hint_msg = 3;
+ //
+ int64 campus_id = 4;
+ //
+ string campus_name = 5;
+}
+
+//
+message CampusMngDetailReq {
+ //
+ int64 campus_id = 1;
+}
+
+//
+message CampusMngItem {
+ //
+ int32 audit_status = 1;
+ //
+ string audit_message = 2;
+ //
+ int32 item_type = 3;
+ //
+ string mng_item_id = 4;
+ //
+ bool is_del = 5;
+ // Oneof field:
+ oneof item {
+ //
+ CampusMngBasicInfo basic_info = 6;
+ //
+ CampusMngBadge badge = 7;
+ //
+ string slogan = 8;
+ //
+ CampusMngQuiz quiz = 9;
+ }
+}
+
+//
+enum CampusMngItemType {
+ //
+ campus_mng_none = 0;
+ //
+ campus_mng_basic_info = 1;
+ //
+ campus_mng_badge = 2;
+ //
+ campus_mng_slogan = 3;
+ //
+ campus_mng_quiz = 4;
+}
+
+//
+message CampusMngQuiz {
+ //
+ string title = 1;
+ //
+ CampusLabel more_label = 2;
+ //
+ string add_label = 3;
+ //
+ string submit_label = 4;
+ //
+ int64 quiz_count = 5;
+}
+
+//
+enum CampusMngQuizAction {
+ //
+ campus_mng_quiz_act_list = 0;
+ //
+ campus_mng_quiz_act_add = 1;
+ //
+ campus_mng_quiz_act_del = 2;
+}
+
+//
+message CampusMngQuizDetail {
+ //
+ int64 quiz_id = 1;
+ //
+ string question = 2;
+ //
+ string correct_answer = 3;
+ //
+ repeated string wrong_answer_list = 4;
+ //
+ int32 audit_status = 5;
+ //
+ string audit_message = 6;
+}
+
+//
+message CampusMngQuizOperateReply {
+ //
+ string toast = 1;
+ //
+ repeated CampusMngQuizDetail quiz = 2;
+ //
+ int64 quiz_total = 3;
+}
+
+//
+message CampusMngQuizOperateReq {
+ //
+ int32 action = 1;
+ //
+ int64 campus_id = 2;
+ //
+ repeated CampusMngQuizDetail quiz = 3;
+}
+
+//
+message CampusMngSlogan {
+ //
+ string title = 1;
+ //
+ string slogan = 2;
+ //
+ string input_hint_msg = 3;
+}
+
+//
+message CampusMngSubmitReply {
+ //
+ string toast = 1;
+}
+
+//
+message CampusMngSubmitReq {
+ //
+ int64 campus_id = 1;
+ //
+ repeated CampusMngItem modified_items = 2;
}
//
@@ -685,6 +1034,14 @@ message CampusNoticeInfo {
CampusLabel button = 3;
}
+//
+enum CampusOnlineStatus {
+ //
+ campus_online_offline = 0;
+ //
+ campus_online_online = 1;
+}
+
//
message CampusRcmdFeedReply {
//
@@ -715,6 +1072,8 @@ message CampusRcmdFeedReq {
int32 scroll = 6;
//
string view_dyn_id = 7;
+ //
+ CampusReqFromType from_type = 8;
}
//
@@ -747,6 +1106,8 @@ message CampusRcmdReply {
CampusTop campus_top = 3;
//
int32 page_type = 4;
+ //
+ int32 jump_home_pop = 5;
}
//
@@ -761,6 +1122,10 @@ message CampusRcmdReq {
double lng = 4;
//
bilibili.app.archive.middleware.v1.PlayerArgs player_args = 5;
+ //
+ CampusReqFromType from_type = 6;
+ //
+ CampusHomePageType page_type = 7;
}
//
@@ -791,6 +1156,38 @@ message CampusRcmdTop {
CampusLabel reserve_label = 12;
//
int64 reserve_number = 13;
+ //
+ int64 max_reserve = 14;
+ //
+ CampusLabel school_label = 15;
+ //
+ CampusLabel mng_label = 16;
+ //
+ CampusHomeRcmdTopic rcmd_topic = 17;
+ //
+ bool audit_before_open = 18;
+ //
+ string audit_message = 19;
+}
+
+//
+message CampusRecommendReply {
+ //
+ repeated RcmdItem items = 1;
+ //
+ bool has_more = 2;
+}
+
+//
+message CampusRecommendReq {
+ //
+ int64 campus_id = 1;
+ //
+ int64 page_no = 2;
+ //
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 3;
+ //
+ CampusRcmdReqFrom from = 4;
}
//
@@ -803,6 +1200,16 @@ message CampusRedDotReply {
message CampusRedDotReq {
//
int64 campus_id = 1;
+ //
+ CampusReqFromType from_type = 2;
+}
+
+//
+enum CampusReqFromType {
+ //
+ DYNAMIC = 0;
+ //
+ HOME = 1;
}
//
@@ -815,6 +1222,28 @@ message CampusShowTabInfo {
int32 type = 3;
//
int32 red_dot = 4;
+ //
+ string icon_url = 5;
+}
+
+//
+message CampusSquareReply {
+ //
+ string title = 1;
+ //
+ repeated RcmdCampusBrief list = 2;
+ //
+ CampusLabel button = 3;
+}
+
+//
+message CampusSquareReq {
+ //
+ int64 campus_id = 1;
+ //
+ double lat = 2;
+ //
+ double lng = 3;
}
//
@@ -825,6 +1254,7 @@ enum CampusTabType {
campus_account = 3; //
campus_billboard = 4; //
campus_topic = 5; //
+ campues_other = 6; //
}
//
@@ -851,6 +1281,16 @@ message CampusTop {
string campus_badge = 10;
//
string campus_background = 11;
+ //
+ string campus_motto = 12;
+ //
+ CampusLabel mng_entry = 13;
+ //
+ string campus_intro = 14;
+ //
+ string campus_name_link = 15;
+ //
+ string bottom_left_text = 16;
}
//
@@ -863,6 +1303,8 @@ message CampusTopicRcmdFeedReply {
bool has_more = 3;
//
string offset = 4;
+ //
+ IconButton join_discuss = 5;
}
//
@@ -875,6 +1317,18 @@ message CampusTopicRcmdFeedReq {
bilibili.app.archive.middleware.v1.PlayerArgs player_args = 3;
//
int32 local_time = 4;
+ //
+ CampusReqFromType from_type = 5;
+}
+
+//
+message CardParagraph {
+ //
+ ModuleAdditional additional_card = 1;
+ //
+ string biz_id = 3;
+ //
+ LinkNodeType biz_type = 2;
}
// 动态卡片列表
@@ -919,6 +1373,8 @@ message CardVideoUpList {
bool show_in_personal = 8;
// 是否展示右侧查看更多按钮
bool show_more_button = 9;
+ //
+ repeated UpListItem list_second = 10;
}
//
@@ -953,6 +1409,14 @@ message CmtShowItem {
string comment = 4;
}
+//
+message Colors {
+ //
+ string color_day = 1;
+ //
+ string color_night = 2;
+}
+
// 精选评论区
message CommentDetail {
// 该功能能不能用
@@ -962,10 +1426,29 @@ message CommentDetail {
int64 status = 2;
}
+//
+message Config {
+ //
+ bool story_vertical_exp = 1;
+ //
+ int64 detail_view_bits = 2;
+}
+
//
enum CoverIcon {
- cover_icon_none = 0; // 占位 啥都不展示
- cover_icon_play = 1; // 播放icon
+ cover_icon_none = 0; // 占位 啥都不展示
+ cover_icon_play = 1; // 播放icon
+ cover_icon_danmaku = 2; //
+ cover_icon_up = 3; //
+ cover_icon_vt = 4; // ? 竖屏模式 icon
+}
+
+//
+message CoverIconWithText {
+ //
+ int32 icon = 1;
+ //
+ string text = 2;
}
// 装扮卡片-粉丝勋章信息
@@ -992,29 +1475,6 @@ message DecorateCard {
DecoCardFan fan = 4;
}
-// 文本类型
-enum DescType {
- desc_type_none = 0; // 占位
- desc_type_text = 1; // 文本
- desc_type_aite = 2; // @
- desc_type_lottery = 3; // 抽奖
- desc_type_vote = 4; // 投票
- desc_type_topic = 5; // 话题
- desc_type_goods = 6; // 商品
- desc_type_bv = 7; // bv
- desc_type_av = 8; // av
- desc_type_emoji = 9; // 表情
- desc_type_user = 10; // 外露用户
- desc_type_cv = 11; // 专栏
- desc_type_vc = 12; // 小视频
- desc_type_web = 13; // 网址
- desc_type_taobao = 14; // 淘宝
- desc_type_mail = 15; // 邮箱
- desc_type_ogv_season = 16; // 番剧season
- desc_type_ogv_ep = 17; // 番剧ep
- desc_type_search_word = 18; //
-}
-
// 文本描述
message Description {
// 文本内容
@@ -1039,8 +1499,34 @@ message Description {
string orig_text = 10;
//
int32 emoji_size = 11;
+ //
+ EmojiSizeSpec emoji_size_spec = 12;
}
+// 文本类型
+enum DescType {
+ desc_type_none = 0; // 占位
+ desc_type_text = 1; // 文本
+ desc_type_aite = 2; // @
+ desc_type_lottery = 3; // 抽奖
+ desc_type_vote = 4; // 投票
+ desc_type_topic = 5; // 话题
+ desc_type_goods = 6; // 商品
+ desc_type_bv = 7; // bv
+ desc_type_av = 8; // av
+ desc_type_emoji = 9; // 表情
+ desc_type_user = 10; // 外露用户
+ desc_type_cv = 11; // 专栏
+ desc_type_vc = 12; // 小视频
+ desc_type_web = 13; // 网址
+ desc_type_taobao = 14; // 淘宝
+ desc_type_mail = 15; // 邮箱
+ desc_type_ogv_season = 16; // 番剧season
+ desc_type_ogv_ep = 17; // 番剧ep
+ desc_type_search_word = 18; //
+}
+
+
// 尺寸信息
message Dimension {
//
@@ -1087,6 +1573,10 @@ message DynAllPersonalReply {
Relation relation = 5;
// 顶部预约卡
TopAdditionUP addition_up = 6;
+ //
+ string title = 7;
+ //
+ string title_sub = 8;
}
// 最近访问-个人feed流列表-请求
@@ -1109,6 +1599,8 @@ message DynAllPersonalReq {
string from = 8;
// 秒开用
bilibili.app.archive.middleware.v1.PlayerArgs player_args = 9;
+ //
+ string personal_extra = 10;
}
// 动态综合页-响应
@@ -1123,6 +1615,8 @@ message DynAllReply {
Unfollow unfollow = 4;
// 分区UP推荐
DynRegionRcmd region_rcmd = 5;
+ //
+ Config config = 6;
}
// 动态综合页-请求
@@ -1165,6 +1659,71 @@ message DynAllUpdOffsetReq {
string read_offset = 2;
// 服务端生成的透传上报字段
string footprint = 3;
+ //
+ string personal_extra = 4;
+}
+
+
+// 动态卡片
+message DynamicItem {
+ // 动态卡片类型
+ DynamicType card_type = 1;
+ // 转发类型下,源卡片类型
+ DynamicType item_type = 2;
+ // 模块内容
+ repeated Module modules = 3;
+ // 操作相关字段
+ Extend extend = 4;
+ // 该卡片下面是否含有折叠卡
+ int32 has_fold = 5;
+ // 透传到客户端的埋点字段。
+ string server_info = 6;
+}
+
+//动态卡片列表
+message DynamicList {
+ // 动态列表
+ repeated DynamicItem list = 1;
+ // 更新的动态数
+ int64 update_num = 2;
+ // 历史偏移
+ string history_offset = 3;
+ // 更新基础信息
+ string update_baseline = 4;
+ // 是否还有更多数据
+ bool has_more = 5;
+}
+
+// 枚举-动态类型
+enum DynamicType {
+ dyn_none = 0; // 占位
+ forward = 1; // 转发
+ av = 2; // 稿件: ugc、小视频、短视频、UGC转PGC
+ pgc = 3; // pgc:番剧、PGC番剧、PGC电影、PGC电视剧、PGC国创、PGC纪录片
+ courses = 4; // 付费更新批次
+ fold = 5; // 折叠
+ word = 6; // 纯文字
+ draw = 7; // 图文
+ article = 8; // 专栏 原仅phone端
+ music = 9; // 音频 原仅phone端
+ common_square = 10; // 通用卡 方形
+ common_vertical = 11; // 通用卡 竖形
+ live = 12; // 直播卡 只有转发态
+ medialist = 13; // 播单 原仅phone端 只有转发态
+ courses_season = 14; // 付费更新批次 只有转发态
+ ad = 15; // 广告卡
+ applet = 16; // 小程序卡
+ subscription = 17; // 订阅卡
+ live_rcmd = 18; // 直播推荐卡
+ banner = 19; // 通栏
+ ugc_season = 20; // 合集卡
+ subscription_new = 21; // 新订阅卡
+ story = 22; //
+ topic_rcmd = 23; //
+ cour_up = 24; //
+ topic_set = 25; //
+ notice = 26; //
+ text_notice = 27; //
}
// 动态详情页-响应
@@ -1198,6 +1757,8 @@ message DynDetailReq {
int32 local_time = 10;
// pattern
string pattern = 11;
+ //
+ Config config = 12;
}
// 批量动态id获取动态详情-响应
@@ -1216,6 +1777,8 @@ message DynDetailsReq {
int32 local_time = 3;
// 秒开参数
bilibili.app.archive.middleware.v1.PlayerArgs player_args = 4;
+ //
+ Config config = 5;
}
// 动态小卡类型
@@ -1243,6 +1806,32 @@ message DynFakeCardReq {
string content = 1;
}
+//
+message DynFeatureGate {
+ //
+ bool enhanced_interaction = 1;
+}
+
+//
+message DynFriendReply {
+ //
+ repeated DynamicItem dyn_list = 1;
+ //
+ bool has_more = 2;
+ //
+ string offset = 3;
+}
+
+//
+message DynFriendReq {
+ //
+ string offset = 1;
+ //
+ int32 local_time = 2;
+ //
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 3;
+}
+
// 轻浏览-响应
message DynLightReply {
// 卡片列表
@@ -1318,6 +1907,14 @@ enum DynModuleType {
module_top_tag = 25; //
module_topic_brief = 26; //
module_title = 27; //
+ module_button = 28;
+ module_notice = 29;
+ module_opus_summary = 30;
+ module_copyright = 31;
+ module_paragraph = 32;
+ module_blocked = 33;
+ module_text_notice = 34;
+ module_opus_collection = 35;
}
// 推荐页-响应
@@ -1374,6 +1971,22 @@ message DynRegionRcmdItem {
repeated ModuleRcmd items = 3;
}
+//
+message DynScreenTab {
+ //
+ string title = 1;
+ //
+ string name = 2;
+ //
+ bool default_tab = 3;
+ //
+ bool strategy_show_on_entrance = 4;
+ //
+ bool strategy_show_on_refresh = 5;
+ //
+ bool strategy_show_on_pull_up = 6;
+}
+
//
message DynSearchReply {
//
@@ -1422,6 +2035,8 @@ message DynServerDetailsReq {
string platform = 9;
//
bool is_master = 10;
+ //
+ repeated int64 top_dynamic_ids = 11;
}
// 空间页动态-请求
@@ -1518,12 +2133,16 @@ message DynTab {
message DynTabReply {
//
repeated DynTab dyn_tab = 1;
+ //
+ repeated DynScreenTab screen_tab = 2;
}
//
message DynTabReq {
//
int32 teenagers_mode = 1;
+ //
+ CampusReqFromType from_type = 2;
}
// 动态点赞-请求
@@ -1540,13 +2159,6 @@ message DynThumbReq {
ThumbType type = 5;
}
-//
-enum DynUriType {
- dyn_uri_type_none = 0; //
- dyn_uri_type_direct = 1; // 直接跳转对应uri
- dyn_uri_type_suffix = 2; // 作为后缀拼接
-}
-
// 最近访问-个人feed流列表-响应
message DynVideoPersonalReply {
// 动态列表
@@ -1561,6 +2173,10 @@ message DynVideoPersonalReply {
Relation relation = 5;
// 顶部预约卡
TopAdditionUP addition_up = 6;
+ //
+ string title = 7;
+ //
+ string title_sub = 8;
}
// 最近访问-个人feed流列表-请求
@@ -1583,6 +2199,10 @@ message DynVideoPersonalReq {
string from = 8;
// 秒开参数
bilibili.app.archive.middleware.v1.PlayerArgs player_args = 9;
+ //
+ int64 pegasus_avid = 10;
+ //
+ string personal_extra = 11;
}
// 动态视频页-响应
@@ -1626,6 +2246,8 @@ message DynVideoUpdOffsetReq {
string read_offset = 2;
// 服务端生成的透传上报字段
string footprint = 3;
+ //
+ string personal_extra = 4;
}
// 投票操作-响应
@@ -1650,62 +2272,10 @@ message DynVoteReq {
bool share = 5;
}
-// 动态卡片
-message DynamicItem {
- // 动态卡片类型
- DynamicType card_type = 1;
- // 转发类型下,源卡片类型
- DynamicType item_type = 2;
- // 模块内容
- repeated Module modules = 3;
- // 操作相关字段
- Extend extend = 4;
- // 该卡片下面是否含有折叠卡
- int32 has_fold = 5;
- // 透传到客户端的埋点字段。
- string server_info = 6;
-}
-
-//动态卡片列表
-message DynamicList {
- // 动态列表
- repeated DynamicItem list = 1;
- // 更新的动态数
- int64 update_num = 2;
- // 历史偏移
- string history_offset = 3;
- // 更新基础信息
- string update_baseline = 4;
- // 是否还有更多数据
- bool has_more = 5;
-}
-
-// 枚举-动态类型
-enum DynamicType {
- dyn_none = 0; // 占位
- forward = 1; // 转发
- av = 2; // 稿件: ugc、小视频、短视频、UGC转PGC
- pgc = 3; // pgc:番剧、PGC番剧、PGC电影、PGC电视剧、PGC国创、PGC纪录片
- courses = 4; // 付费更新批次
- fold = 5; // 折叠
- word = 6; // 纯文字
- draw = 7; // 图文
- article = 8; // 专栏 原仅phone端
- music = 9; // 音频 原仅phone端
- common_square = 10; // 通用卡 方形
- common_vertical = 11; // 通用卡 竖形
- live = 12; // 直播卡 只有转发态
- medialist = 13; // 播单 原仅phone端 只有转发态
- courses_season = 14; // 付费更新批次 只有转发态
- ad = 15; // 广告卡
- applet = 16; // 小程序卡
- subscription = 17; // 订阅卡
- live_rcmd = 18; // 直播推荐卡
- banner = 19; // 通栏
- ugc_season = 20; // 合集卡
- subscription_new = 21; // 新订阅卡
- story = 22; //
- topic_rcmd = 23; //
+//
+message EmojiSizeSpec {
+ //
+ int64 width = 1;
}
// 表情包类型
@@ -1716,11 +2286,101 @@ enum EmojiType {
vip = 3; // 大会员表情
}
+//
+message EmoteNode {
+ //
+ string emote_url = 2;
+ //
+ EmoteSize emote_width = 3;
+ //
+ ImgInlineCfg inline_img_cfg = 5;
+ //
+ bool is_inline_img = 4;
+ //
+ WordNode raw_text = 1;
+}
+
+//
+message EmoteSize {
+ //
+ double width = 1;
+ //
+ int32 emoji_size = 2;
+}
+
// 附加大卡-电竞卡样式
enum EspaceStyle {
moba = 0; // moba类
}
+// 扩展字段,用于动态部分操作使用
+message Extend {
+ // 动态id
+ string dyn_id_str = 1;
+ // 业务方id
+ string business_id = 2;
+ // 源动态id
+ string orig_dyn_id_str = 3;
+ // 转发卡:用户名
+ string orig_name = 4;
+ // 转发卡:图片url
+ string orig_img_url = 5;
+ // 转发卡:文字内容
+ repeated Description orig_desc = 6;
+ // 填充文字内容
+ repeated Description desc = 7;
+ // 被转发的源动态类型
+ DynamicType orig_dyn_type = 8;
+ // 分享到站外展示类型
+ string share_type = 9;
+ // 分享的场景
+ string share_scene = 10;
+ // 是否快速转发
+ bool is_fast_share = 11;
+ // r_type 分享和转发
+ int32 r_type = 12;
+ // 数据源的动态类型
+ int64 dyn_type = 13;
+ // 用户id
+ int64 uid = 14;
+ // 卡片跳转
+ string card_url = 15;
+ // 透传字段
+ google.protobuf.Any source_content = 16;
+ // 转发卡:用户头像
+ string orig_face = 17;
+ // 评论跳转
+ ExtendReply reply = 18;
+ //
+ string track_id = 19;
+ //
+ ModuleOpusSummary opus_summary = 20;
+ //
+ OnlyFansProperty only_fans_property = 21;
+ //
+ DynFeatureGate feature_gate = 22;
+ //
+ bool is_in_audit = 23;
+ //
+ map history_report = 24;
+}
+
+// 评论扩展
+message ExtendReply {
+ // 基础跳转地址
+ string uri = 1;
+ // 参数部分
+ repeated ExtendReplyParam params = 2;
+}
+
+// 评论扩展参数部分
+message ExtendReplyParam {
+ // 参数名
+ string key = 1;
+ // 参数值
+ string value = 2;
+}
+
// 动态-拓展小卡模块-通用小卡
message ExtInfoCommon {
// 标题
@@ -1793,60 +2453,38 @@ message ExtInfoTopic {
string icon = 3;
}
-// 扩展字段,用于动态部分操作使用
-message Extend {
- // 动态id
- string dyn_id_str = 1;
- // 业务方id
- string business_id = 2;
- // 源动态id
- string orig_dyn_id_str = 3;
- // 转发卡:用户名
- string orig_name = 4;
- // 转发卡:图片url
- string orig_img_url = 5;
- // 转发卡:文字内容
- repeated Description orig_desc = 6;
- // 填充文字内容
- repeated Description desc = 7;
- // 被转发的源动态类型
- DynamicType orig_dyn_type = 8;
- // 分享到站外展示类型
- string share_type = 9;
- // 分享的场景
- string share_scene = 10;
- // 是否快速转发
- bool is_fast_share = 11;
- // r_type 分享和转发
- int32 r_type = 12;
- // 数据源的动态类型
- int64 dyn_type = 13;
- // 用户id
- int64 uid = 14;
- // 卡片跳转
- string card_url = 15;
- // 透传字段
- google.protobuf.Any source_content = 16;
- // 转发卡:用户头像
- string orig_face = 17;
- // 评论跳转
- ExtendReply reply = 18;
+//
+message FeedFilterReply {
+ //
+ string offset = 1;
+ //
+ bool has_more = 2;
+ //
+ repeated DynamicItem list = 3;
}
-// 评论扩展
-message ExtendReply {
- // 基础跳转地址
- string uri = 1;
- // 参数部分
- repeated ExtendReplyParam params = 2;
+//
+message FeedFilterReq {
+ //
+ string offset = 1;
+ //
+ string tab = 2;
+ //
+ int32 local_time = 3;
+ //
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 4;
+ //
+ AdParam ad_param = 5;
+ //
+ int32 cold_start = 6;
+ //
+ int64 page = 7;
}
-// 评论扩展参数部分
-message ExtendReplyParam {
- // 参数名
- string key = 1;
- // 参数值
- string value = 2;
+//
+message FetchTabSettingReply {
+ //
+ int32 status = 1;
}
// 折叠类型
@@ -1856,6 +2494,7 @@ enum FoldType {
FoldTypeFrequent = 2; // 转发超频折叠
FoldTypeUnite = 3; // 联合投稿折叠
FoldTypeLimit = 4; // 动态受限折叠
+ FoldTypeTopicMerged = 5;
}
// 视频页-我的追番-番剧信息
@@ -1911,6 +2550,17 @@ message GoodsItem {
bool user_web_v2 = 12;
// ad mark
string ad_mark = 13;
+ //
+ string app_name = 14;
+ //
+ GoodsJumpType jump_type = 15;
+}
+
+//
+enum GoodsJumpType {
+ goods_none = 0;
+ goods_schema = 1;
+ goods_url = 2;
}
//
@@ -1947,6 +2597,27 @@ enum HighlightTextStyle {
style_highlight = 1; // 高亮
}
+//
+enum HomePageTabSttingStatus {
+ SETTING_INVALID = 0;
+ SETTING_OPEN = 1;
+ SETTING_CLOSE = 2;
+}
+
+//
+message HomeSubscribeReply {
+ //
+ int32 online = 1;
+}
+
+//
+message HomeSubscribeReq {
+ //
+ int64 campus_id = 1;
+ //
+ string campus_name = 2;
+}
+
//
message IconBadge {
//
@@ -1967,12 +2638,36 @@ message IconButton {
string jump_uri = 4;
}
+//
+enum IconResLocal {
+ ICON_RES_LOCAL_NONE = 0;
+ ICON_RES_LOCAL_LIVE = 1;
+}
+
+//
+message ImageSet {
+ //
+ string img_day = 1;
+ //
+ string img_dark = 2;
+}
+
// 枚举-附加卡样式
enum ImageStyle {
add_style_vertical = 0; //
add_style_square = 1; //
}
+//
+message ImgInlineCfg {
+ //
+ double width = 1;
+ //
+ double height = 2;
+ //
+ Colors color = 3;
+}
+
// 动态-拓展小卡模块-ogv小卡-(one of 片单、榜单、分区)
message InfoOGV {
// 标题
@@ -2019,6 +2714,78 @@ message InteractionStat {
int64 like = 1;
}
+//
+message LbsPoiDetail {
+ //
+ string poi = 1;
+ //
+ int64 type = 2;
+ //
+ repeated string base_pic = 3;
+ //
+ repeated string cover = 4;
+ //
+ string address = 5;
+ //
+ string title = 6;
+}
+
+//
+message LbsPoiReply {
+ //
+ bool has_more = 1;
+ //
+ string offset = 2;
+ //
+ LbsPoiDetail detail = 3;
+ //
+ repeated DynamicItem list = 4;
+}
+
+//
+message LbsPoiReq {
+ //
+ string poi = 1;
+ //
+ int64 type = 2;
+ //
+ string offset = 3;
+ //
+ int32 refresh_type = 4;
+ //
+ int32 local_time = 5;
+ //
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 6;
+}
+
+//
+message LegacyTopicFeedReply {
+ //
+ repeated DynamicItem list = 1;
+ //
+ bool has_more = 2;
+ //
+ string offset = 3;
+ //
+ repeated SortType supported_sort_types = 4;
+ //
+ repeated SortType feed_card_filters = 5;
+}
+
+//
+message LegacyTopicFeedReq {
+ //
+ int64 topic_id = 1;
+ //
+ string topic_name = 2;
+ //
+ string offset = 3;
+ //
+ SortType sort_type = 4;
+ //
+ SortType card_filter = 5;
+}
+
//
enum LightFromType {
from_login = 0; //
@@ -2079,6 +2846,69 @@ message LikeUser {
string uri = 3;
}
+//
+message LineParagraph {
+ //
+ MdlDynDrawItem pic = 1;
+}
+
+//
+message LinkNode {
+ //
+ string show_text = 1;
+ //
+ string link = 2;
+ //
+ string icon = 3;
+ //
+ string icon_suffix = 4;
+ //
+ string link_type = 5;
+ //
+ LinkNodeType link_type_enum = 6;
+ //
+ string biz_id = 7;
+ //
+ int64 timestamp = 8;
+ //
+ GoodsItem goods_item = 9;
+ //
+ NoteVideoTS note_video_ts = 10;
+}
+
+//
+enum LinkNodeType {
+ INVALID = 0;
+ VIDEO = 1;
+ RESERVE = 2;
+ VOTE = 3;
+ LIVE = 4;
+ LOTTERY = 5;
+ MATCH = 6;
+ GOODS = 7;
+ OGV_SS = 8;
+ OGV_EP = 9;
+ MANGA = 10;
+ CHEESE = 11;
+ VIDEO_TS = 12;
+ AT = 13;
+ HASH_TAG = 14;
+ ARTICLE = 15;
+ URL = 16;
+ MAIL = 17;
+ LBS = 18;
+ ACTIVITY = 19;
+ ATTACH_CARD_OFFICIAL_ACTIVITY = 20;
+ GAME = 21;
+ DECORATION = 22;
+ UP_TOPIC = 23;
+ UP_ACTIVITY = 24;
+ UP_MAOER = 25;
+ MEMBER_GOODS = 26;
+ OPENMALL_UP_ITEMS = 27;
+ SEARCH = 28;
+}
+
// 直播信息
message LiveInfo {
// 是否在直播
@@ -2111,6 +2941,9 @@ enum LiveState {
enum LocalIconType {
local_icon_comment = 0; //
local_icon_like = 1; //
+ local_icon_avatar = 2;
+ local_icon_cover = 3;
+ local_icon_like_and_forward = 4;
}
// 动态-附加卡-电竞卡-战队
@@ -2127,6 +2960,14 @@ message MatchTeam {
string night_color = 5;
}
+//
+enum MdlBlockedStyle {
+ BLOCKED_STYLE_DEFAULT = 0;
+ BLOCKED_STYLE_IN_AUDIT = 1;
+ BLOCKED_STYLE_ONLY_FANS_LIST = 2;
+ BLOCKED_STYLE_ONLY_FANS_VIDEO = 3;
+}
+
// 动态列表渲染部分-详情模块-小程序/小游戏
message MdlDynApplet {
// 小程序id
@@ -2203,6 +3044,16 @@ message MdlDynArchive {
string bvid = 26;
// 播放数
int32 view = 27;
+ //
+ bool show_premiere_badge = 28;
+ //
+ bool premiere_card = 29;
+ //
+ bool show_progress = 30;
+ //
+ int64 part_duration = 31;
+ //
+ int64 part_progress = 32;
}
// 动态列表渲染部分-详情模块-专栏模块
@@ -2272,6 +3123,26 @@ message MdlDynCourBatch {
VideoBadge badge = 6;
// 播放按钮
string play_icon = 7;
+ //
+ bool can_play = 8;
+ //
+ bool is_preview = 9;
+ //
+ string cover_left_text_1 = 10;
+ //
+ string cover_left_text_2 = 11;
+ //
+ string cover_left_text_3 = 12;
+ //
+ int64 avid = 13;
+ //
+ int64 cid = 14;
+ //
+ int64 epid = 15;
+ //
+ int64 duration = 16;
+ //
+ int64 season_id = 17;
}
// 动态-详情模块-付费课程系列
@@ -2290,6 +3161,52 @@ message MdlDynCourSeason {
VideoBadge badge = 6;
// 播放按钮
string play_icon = 7;
+ //
+ bool can_play = 8;
+ //
+ bool is_preview = 9;
+ //
+ int64 avid = 10;
+ //
+ int64 cid = 11;
+ //
+ int64 epid = 12;
+ //
+ int64 duration = 13;
+ //
+ int64 season_id = 14;
+}
+
+//
+message MdlDynCourUp {
+ //
+ string title = 1;
+ //
+ string desc = 2;
+ //
+ string cover = 3;
+ //
+ string uri = 4;
+ //
+ string text_1 = 5;
+ //
+ VideoBadge badge = 6;
+ //
+ string play_icon = 7;
+ //
+ bool can_play = 8;
+ //
+ bool is_preview = 9;
+ //
+ int64 avid = 10;
+ //
+ int64 cid = 11;
+ //
+ int64 epid = 12;
+ //
+ int64 duration = 13;
+ //
+ int64 season_id = 14;
}
// 动态列表渲染部分-详情模块-图文模块
@@ -2300,6 +3217,12 @@ message MdlDynDraw {
string uri = 2;
// 图文ID
int64 id = 3;
+ //
+ bool is_draw_first = 4;
+ //
+ bool is_big_cover = 5;
+ //
+ bool is_article_cover = 6;
}
// 动态列表渲染部分-详情模块-图文
@@ -2526,6 +3449,18 @@ enum MdlDynSubscriptionNewStyle {
mdl_dyn_subscription_new_style_draw = 2; // 图文
}
+//
+message MdlDynTopicSet {
+ //
+ repeated TopicItem topics = 1;
+ //
+ IconButton more_btn = 2;
+ //
+ int64 topic_set_id = 3;
+ //
+ int64 push_id = 4;
+}
+
// 动态列表渲染部分-UGC合集
message MdlDynUGCSeason {
// 标题
@@ -2591,6 +3526,10 @@ message MixUpListItem {
VipInfo vip = 8;
// 关注状态
Relation relation = 9;
+ //
+ int32 permire_state = 10;
+ //
+ string uri = 11;
}
message MixUpListLiveItem {
@@ -2660,6 +3599,22 @@ message Module {
ModuleTopicBrief module_topic_brief = 26;
//
ModuleTitle module_title = 27;
+ //
+ ModuleButton module_button = 28;
+ //
+ ModuleNotice module_notice = 29;
+ //
+ ModuleOpusSummary module_opus_summary = 30;
+ //
+ ModuleCopyright module_copyright = 31;
+ //
+ ModuleParagraph module_paragraph = 32;
+ //
+ ModuleBlocked module_blocked = 33;
+ //
+ ModuleTextNotice module_text_notice = 34;
+ //
+ ModuleOpusCollection module_opus_collection = 35;
}
}
@@ -2700,6 +3655,10 @@ message ModuleAdditional {
AdditionUgc ugc = 9;
// up主预约发布卡
AdditionUP up = 10;
+ //
+ AdditionArticle article = 12;
+ //
+ AdditionLiveRoom live = 13;
}
// 附加卡物料ID
int64 rid = 7;
@@ -2736,6 +3695,12 @@ message ModuleAuthor {
bool show_follow = 12;
// 是否置顶
bool is_top = 13;
+ // ip属地
+ string ptime_location_text = 14;
+ //
+ bool show_level = 15;
+ //
+ OnlyFans only_fans = 16;
}
// 动态列表渲染部分-用户模块-按钮
@@ -2834,12 +3799,59 @@ message ModuleBannerUserItem {
AdditionalButton button = 8;
// 跳转地址
string uri = 9;
+ //
+ Relation relation = 10;
+}
+
+//
+message ModuleBlocked {
+ //
+ ImageSet icon = 1;
+ //
+ ImageSet bg_img = 2;
+ //
+ string hint_message = 3;
+ //
+ IconButton act_btn = 4;
+ //
+ MdlBlockedStyle block_style = 5;
+ //
+ string sub_hint_message = 6;
+ //
+ OneLineText video_bottom_text_upper = 7;
+ //
+ OneLineText video_bottom_text_lower = 8;
+ //
+ string archive_title = 9;
+ //
+ OneLineText hint_message_one_line = 10;
}
// 底部模块
message ModuleButtom {
+ enum InteractionIcon {
+ ICON_INVALID = 0;
+ ICON_FORWARD = 1;
+ ICON_COMMENT = 2;
+ ICON_FAVORITE = 3;
+ ICON_LIKE = 4;
+ }
// 计数模块
ModuleStat module_stat = 1;
+ //
+ bool comment_box = 2;
+ //
+ string comment_box_msg = 3;
+ //
+ repeated InteractionIcon interaction_icons = 4;
+ //
+ repeated InteractionFace faces = 5;
+}
+
+//
+message ModuleButton {
+ //
+ IconButton btn = 1;
}
// 评论外露模块
@@ -2848,6 +3860,14 @@ message ModuleComment {
repeated CmtShowItem cmtShowItem = 1;
}
+//
+message ModuleCopyright {
+ //
+ string left_text = 1;
+ //
+ string right_text = 2;
+}
+
// 动态-描述文字模块
message ModuleDesc {
// 描述信息(已按高亮拆分)
@@ -2877,6 +3897,10 @@ message ModuleDescGoods {
string ad_mark = 7;
// schemaPackageName(Android用)
string schema_package_name = 8;
+ //
+ int32 jump_type = 9;
+ //
+ string app_name = 10;
}
// 动态-争议小黄条模块
@@ -2926,6 +3950,10 @@ message ModuleDynamic {
MdlDynUGCSeason dyn_ugc_season = 16;
//订阅卡
MdlDynSubscriptionNew dyn_subscription_new = 17;
+ //课程
+ MdlDynCourUp dyn_cour_batch_up = 18;
+ //话题集合
+ MdlDynTopicSet dyn_topic_set = 19;
}
}
@@ -2947,6 +3975,8 @@ enum ModuleDynamicType {
mdl_dyn_live_rcmd = 13; // 直播推荐卡
mdl_dyn_ugc_season = 14; // UGC合集
mdl_dyn_subscription_new = 15; // 订阅卡
+ mdl_dyn_cour_batch_up = 16; // 课程
+ mdl_dyn_topic_set = 17; // 话题集合
}
// 动态-小卡模块
@@ -2974,7 +4004,7 @@ message ModuleExtendItem {
//
ExtInfoCommon ext_info_common = 6;
//
- ExtInfoOGV ext_info_ogv = 7;
+ ExtInfoOGV ext_info_ogv = 7;
}
}
@@ -2988,6 +4018,8 @@ message ModuleFold {
string fold_ids = 3;
// 被折叠的用户信息
repeated UserInfo fold_users = 4;
+ //
+ TopicMergedResource topic_merged_resource = 5;
}
// 外露交互模块
@@ -3012,6 +4044,56 @@ message ModuleLikeUser {
string display_text = 2;
}
+//
+message ModuleNotice {
+ //
+ string identity = 1;
+ //
+ string icon = 2;
+ //
+ string title = 3;
+ //
+ string url = 4;
+ //
+ int32 notice_type = 5;
+}
+
+//
+message ModuleOpusCollection {
+ //
+ OpusCollection collection_info = 1;
+ //
+ string title_upper = 2;
+ //
+ string title = 3;
+ //
+ string title_prefix_icon = 4;
+ //
+ string total_text = 5;
+}
+
+//
+message ModuleOpusSummary {
+ //
+ Paragraph title = 1;
+ //
+ Paragraph summary = 2;
+ //
+ string summary_jump_btn_text = 3;
+ //
+ repeated MdlDynDrawItem covers = 4;
+}
+
+//
+message ModuleParagraph {
+ //
+ Paragraph paragraph = 1;
+ //
+ bool is_article_title = 2;
+ //
+ ParaSpacing para_spacing = 3;
+}
+
// 推荐模块
message ModuleRcmd {
// 用户头像
@@ -3092,24 +4174,32 @@ message ModuleStory {
string publish_text = 7;
}
+//
+message ModuleTextNotice {
+ //
+ OneLineText notice = 1;
+}
+
//
message ModuleTitle {
//
string title = 1;
//
IconButton right_btn = 2;
+ //
+ int32 title_style = 3;
}
// 顶部模块
message ModuleTop {
// 三点模块
repeated ThreePointItem tp_list = 1;
-}
-
-//
-message ModuleTopTag {
- //
- string tag_name = 1;
+ //
+ MdlDynArchive archive = 2;
+ //
+ ModuleAuthor author = 3;
+ //
+ bool hidden_nav_bar = 4;
}
//
@@ -3134,6 +4224,12 @@ message ModuleTopicDetailsExt {
string comment_guide = 1;
}
+//
+message ModuleTopTag {
+ //
+ string tag_name = 1;
+}
+
// 认证名牌
message Nameplate {
// nid
@@ -3169,6 +4265,30 @@ message NewEP {
string cover = 3;
}
+//
+message NFTInfo {
+ //
+ NFTRegionType region_type = 1;
+ //
+ string region_icon = 2;
+ //
+ NFTShowStatus region_show_status = 3;
+}
+
+//
+enum NFTRegionType {
+ nft_region_default = 0;
+ nft_region_mainlang = 1;
+ nft_region_gat = 2;
+}
+
+//
+enum NFTShowStatus {
+ nft_show_default = 0;
+ nft_show_zoominmainlang = 1;
+ nft_show_raw = 2;
+}
+
// 空响应
message NoReply {
@@ -3179,6 +4299,30 @@ message NoReq {
}
+//
+message NoteVideoTS {
+ //
+ int64 cid = 1;
+ //
+ int64 oid_type = 2;
+ //
+ int64 status = 3;
+ //
+ int64 index = 4;
+ //
+ int64 seconds = 5;
+ //
+ int64 cid_count = 6;
+ //
+ string key = 7;
+ //
+ int64 epid = 9;
+ //
+ string title = 8;
+ //
+ string desc = 10;
+}
+
//
message OfficialAccountInfo {
//
@@ -3319,6 +4463,113 @@ message OfficialVerify {
int32 is_atten = 3;
}
+//
+message OneLineText {
+ //
+ repeated TextWithPriority texts = 1;
+}
+
+//
+message OnlyFans {
+ //
+ bool is_only_fans = 1;
+ //
+ IconBadge badge = 2;
+}
+
+//
+message OnlyFansProperty {
+ //
+ bool has_privilege = 1;
+ //
+ bool is_only_fans = 2;
+}
+
+//
+message OpusCollection {
+ //
+ int64 collection_id = 1;
+ //
+ OneLineText title = 2;
+ //
+ string detail_uri = 3;
+ //
+ string intro = 4;
+ //
+ repeated OpusCollectionItem all_items = 5;
+}
+
+//
+message OpusCollectionItem {
+ //
+ int64 opus_id = 1;
+ //
+ string title = 2;
+ //
+ string pub_time = 3;
+ //
+ string uri = 4;
+ //
+ bool is_selected_highlight = 5;
+}
+
+//
+message Paragraph {
+ //
+ message ListFormat {
+ //
+ int32 level = 1;
+ //
+ int32 order = 2;
+ //
+ string theme = 3;
+ }
+ enum ParagraphAlign {
+ LEFT = 0;
+ MIDDLE = 1;
+ RIGHT = 2;
+ }
+ //
+ message ParagraphFormat {
+ //
+ ParagraphAlign align = 1;
+ //
+ ListFormat list_format = 2;
+ }
+ //
+ enum ParagraphType {
+ INVALID = 0;
+ TEXT = 1;
+ PICTURES = 2;
+ LINE = 3;
+ REFERENCE = 4;
+ SORTED_LIST = 5;
+ UNSORTED_LIST = 6;
+ LINK_CARD = 7;
+ }
+ //
+ ParagraphType para_type = 1;
+ //
+ ParagraphFormat para_format = 2;
+ //
+ oneof content {
+ TextParagraph text = 3;
+ PicParagraph pic = 4;
+ LineParagraph line = 5;
+ CardParagraph link_card = 6;
+ }
+}
+
+//
+message ParaSpacing {
+ //
+ double spacing_before_para = 1;
+ //
+ double spacing_after_para = 2;
+ //
+ double line_spacing = 3;
+}
+
// PGC单季信息
message PGCSeason {
// 是否完结
@@ -3329,6 +4580,20 @@ message PGCSeason {
int32 type = 3;
}
+//
+message PicParagraph {
+ //
+ enum PicParagraphStyle {
+ INVALID = 0;
+ NINE_CELL = 1;
+ BIG_SCROLL = 2;
+ }
+ //
+ MdlDynDraw pics = 1;
+ //
+ PicParagraphStyle style = 2;
+}
+
// 秒开通用参数
message PlayurlParam {
// 清晰度
@@ -3391,6 +4656,18 @@ message RcmdAuthor {
Relation relation = 3;
}
+//
+message RcmdCampusBrief {
+ //
+ int64 campus_id = 1;
+ //
+ string campus_name = 2;
+ //
+ string campus_badge = 4;
+ //
+ string url = 5;
+}
+
// 推荐卡片列表
message RcmdItem {
// 卡片类型
@@ -3408,6 +4685,26 @@ message RcmdOption{
bool show_title = 1;
}
+//
+message RcmdReason {
+ //
+ string campus_name = 1;
+ //
+ RcmdReasonStyle style = 2;
+ //
+ string rcmd_reason = 3;
+ //
+ string up_name = 4;
+}
+
+//
+enum RcmdReasonStyle {
+ rcmd_reason_style_none = 0;
+ rcmd_reason_style_campus_nearby = 1;
+ rcmd_reason_style_campus_up = 2;
+ rcmd_reason_style_campus_near_up_mix = 3;
+}
+
//
message RcmdTopButton {
//
@@ -3427,6 +4724,42 @@ message RcmdUPsParam {
int64 dislike_ts = 1;
}
+message ReactionListItem {
+ // 用户信息
+ UserInfo user = 1;
+ // 关注关系
+ Relation relation = 2;
+ // 显示文字
+ string act_text = 3;
+ //
+ string rcmd_reason = 4;
+}
+
+
+// 新版动态转发点赞列表-响应
+message ReactionListReply {
+ // 标题
+ string title = 1;
+ // 列表
+ repeated ReactionListItem list = 2;
+ // 偏移
+ string offset = 3;
+ // 是否还有更多
+ bool has_more = 4;
+}
+
+// 新版动态转发点赞列表-请求
+message ReactionListReq {
+ // 动态ID
+ int64 dynamic_id = 1;
+ // 动态类型
+ int64 dyn_type = 2;
+ // 业务方资源id
+ int64 rid = 3;
+ // 偏移,使用上一页回包中的offset字段;第一页不传。
+ string offset = 4;
+}
+
// 刷新方式
enum Refresh {
refresh_new = 0; // 刷新列表
@@ -3504,6 +4837,11 @@ enum ReserveType {
reserve_recall = 1; // 预约召回
}
+enum RouterAction {
+ OPEN = 0;
+ EMBED = 1;
+}
+
//
message SchoolRecommendReply {
//
@@ -3516,6 +4854,8 @@ message SchoolRecommendReq {
float lat = 1;
//
float lng = 2;
+ //
+ CampusReqFromType from_type = 3;
}
//
@@ -3530,6 +4870,8 @@ message SchoolSearchReply {
message SchoolSearchReq {
//
string keyword = 1;
+ //
+ CampusReqFromType from_type = 2;
}
//
@@ -3602,6 +4944,8 @@ message SearchTopicItem {
message SetDecisionReq {
//
int32 result = 1;
+ //
+ CampusReqFromType from_type = 2;
}
//
@@ -3610,6 +4954,8 @@ message SetRecentCampusReq {
int64 campus_id = 1;
//
string campus_name = 2;
+ //
+ CampusReqFromType from_type = 3;
}
// 分享渠道组件
@@ -3696,16 +5042,53 @@ message SubscribeCampusReq {
int64 campus_id = 1;
//
string campus_name = 2;
+ //
+ CampusReqFromType from_type = 3;
}
-//
+//
+message TextNode {
+ enum TextNodeType {
+ INVALID = 0;
+ WORDS = 1;
+ EMOTE = 2;
+ AT = 3;
+ BIZ_LINK = 4;
+ }
+ //
+ TextNodeType node_type = 1;
+ string raw_text = 2;
+ //
+ oneof text {
+ WordNode word = 3;
+ EmoteNode emote = 4;
+ LinkNode link = 5;
+ }
+}
+
+//
+message TextParagraph {
+ //
+ repeated TextNode nodes = 1;
+}
+
+//
+message TextWithPriority {
+ //
+ string text = 1;
+ //
+ int64 priority = 2;
+}
+
+// 免流类型
enum TFType {
- U_CARD = 0; //
- U_PKG = 1; //
- C_CARD = 2; //
- C_PKG = 3; //
- T_CARD = 4; //
- T_PKG = 5; //
+ TF_UNKNOWN = 0; // 未知
+ U_CARD = 1; // 联通卡
+ U_PKG = 2; // 联通免流包
+ C_CARD = 3; // 移动卡
+ C_PKG = 4; // 移动免流包
+ T_CARD = 5; // 电信卡
+ T_PKG = 6; // 电信免流包
}
// 三点-关注
@@ -3963,12 +5346,6 @@ message TopAdditionUP {
int32 has_fold = 2;
}
-// 状态
-enum TopType {
- top_none = 0; // 默认 置顶
- top_cancel = 1; // 取消置顶
-}
-
// 话题广场操作按钮
message TopicButton {
// 按钮图标
@@ -4055,6 +5432,14 @@ message TopicListReq {
string offset = 2;
}
+//
+message TopicMergedResource {
+ //
+ int32 merge_type = 1;
+ //
+ int32 merged_res_cnt = 2;
+}
+
//
message TopicRcmdCard {
//
@@ -4095,6 +5480,12 @@ message TopicSquareReq {
int64 campus_id = 1;
}
+// 状态
+enum TopType {
+ top_none = 0; // 默认 置顶
+ top_cancel = 1; // 取消置顶
+}
+
// 综合页-无关注列表
message Unfollow {
// 标题展示文案
@@ -4105,6 +5496,12 @@ message Unfollow {
string TrackId = 3;
}
+//
+message UnfollowMatchReq {
+ //
+ int64 cid = 1;
+}
+
// 综合页-无关注列表
message UnfollowUserItem {
// 是否有更新
@@ -4133,6 +5530,12 @@ message UnfollowUserItem {
string uri = 12;
}
+//
+message UpdateTabSettingReq {
+ //
+ HomePageTabSttingStatus status = 1;
+}
+
// 动态顶部up列表-up主信息
message UpListItem {
// 是否有更新
@@ -4161,6 +5564,14 @@ message UpListItem {
string uri = 12;
// UP主预约上报使用
bool is_recall = 13;
+ //
+ IconBadge update_icon = 14;
+ //
+ string live_rcmd_reason = 15;
+ //
+ string live_cover = 16;
+ //
+ string personal_extra = 17;
}
// 最常访问-查看更多
@@ -4199,6 +5610,12 @@ message UserInfo {
int32 face_nft = 12;
//
int32 face_nft_new = 13;
+ //
+ NFTInfo nft_info = 14;
+ //
+ int32 is_senior_member = 15;
+ //
+ bilibili.dagw.component.avatar.v1.AvatarItem avatar = 16;
}
// 直播头像样式
@@ -4222,6 +5639,11 @@ enum UserItemType {
user_item_type_live_custom = 2; //
user_item_type_normal = 3; //
user_item_type_extend = 4; //
+ user_item_type_premiere_reserve = 5;
+ user_item_type_premiere = 6;
+ user_item_type_live_card = 7;
+ user_item_type_ogv_season = 8;
+ user_item_type_ugc_season = 9;
}
// 头像挂件信息
@@ -4356,3 +5778,33 @@ enum WeightType {
weight_dislike = 1; // 不感兴趣
weight_jump = 2; // 跳链
}
+
+//
+enum WFItemType {
+ WATER_FLOW_TYPE_NONE = 0;
+ WATER_FLOW_TYPE_ARCHIVE = 1;
+ WATER_FLOW_TYPE_DYNAMIC = 2;
+}
+
+//
+message WordNode {
+ //
+ message WordNodeStyle {
+ //
+ bool bold = 1;
+ //
+ bool italic = 2;
+ //
+ bool strikethrough = 3;
+ //
+ bool underline = 4;
+ }
+ //
+ string words = 1;
+ //
+ double font_size = 2;
+ //
+ Colors color = 3;
+ //
+ WordNodeStyle style = 4;
+}
diff --git a/grpc_api/bilibili/app/dynamic/v2/opus.proto b/grpc_api/bilibili/app/dynamic/v2/opus.proto
new file mode 100644
index 0000000..a1cbf94
--- /dev/null
+++ b/grpc_api/bilibili/app/dynamic/v2/opus.proto
@@ -0,0 +1,94 @@
+
+syntax = "proto3";
+
+package bilibili.app.dynamic.v2;
+
+import "bilibili/app/archive/middleware/v1/preload.proto";
+import "bilibili/app/dynamic/v2/dynamic.proto";
+import "bilibili/pagination/pagination.proto";
+
+service Opus {
+ //
+ rpc ListFav (ListFavReq) returns (ListFavResp);
+ //
+ rpc OpusDetail (OpusDetailReq) returns (OpusDetailResp);
+}
+
+//
+message ListFavReq {
+ //
+ int32 local_time = 1;
+ //
+ bilibili.pagination.Pagination pagination = 2;
+}
+
+//
+message ListFavResp {
+ //
+ repeated OpusFavItem item_list = 1;
+ //
+ bilibili.pagination.PaginationReply next_page = 2;
+}
+
+//
+message OpusFavItem {
+ //
+ int64 opus_id = 1;
+ //
+ string card_uri = 2;
+ //
+ bilibili.app.dynamic.v2.MdlDynDrawItem cover_pic = 3;
+ //
+ bilibili.app.dynamic.v2.Paragraph text_paragraph = 4;
+ //
+ bilibili.app.dynamic.v2.CoverIconWithText bottom_text = 5;
+ //
+ string click_toast = 6;
+}
+
+//
+message OpusDetailReq {
+ //
+ OpusType opus_type = 1;
+ //
+ int64 oid = 2;
+ //
+ int64 dyn_type = 3;
+ //
+ string share_id = 4;
+ //
+ int32 share_mode = 9;
+ //
+ int32 local_time = 10;
+ //
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 11;
+ //
+ Config config = 12;
+}
+
+//
+message OpusDetailResp {
+ //
+ OpusItem opus_item = 1;
+}
+
+//
+message OpusItem {
+ //
+ int64 opus_id = 1;
+ //
+ OpusType opus_type = 2;
+ //
+ int64 oid = 3;
+ //
+ repeated Module modules = 4;
+ //
+ Extend extend = 5;
+}
+
+enum OpusType {
+ OPUS_TYPE_DYN = 0;
+ OPUS_TYPE_ARTICLE = 1;
+ OPUS_TYPE_NOTE = 2;
+ OPUS_TYPE_WORD = 3;
+}
diff --git a/grpc_api/bilibili/app/interfaces/v1/history.proto b/grpc_api/bilibili/app/interfaces/v1/history.proto
index 85bbf1b..eb807e6 100644
--- a/grpc_api/bilibili/app/interfaces/v1/history.proto
+++ b/grpc_api/bilibili/app/interfaces/v1/history.proto
@@ -1,13 +1,15 @@
syntax = "proto3";
-package bilibili.app.interfaces.v1;
+package bilibili.app.interface.v1;
import "bilibili/app/archive/middleware/v1/preload.proto";
// 历史记录
service History {
- // 获取历史记录tab
+ // 获取历史记录tab(旧版)
rpc HistoryTab (HistoryTabReq) returns (HistoryTabReply);
+ // 获取历史记录tab
+ rpc HistoryTabV2 (HistoryTabReq) returns (HistoryTabReply);
// 获取历史记录列表(旧版)
rpc Cursor (CursorReq) returns (CursorReply);
// 获取历史记录列表
@@ -48,6 +50,8 @@ message CardCheese {
int64 duration = 3;
// 单集标题
string subtitle = 4;
+ //
+ int64 state = 5;
}
// 直播卡片
@@ -78,6 +82,10 @@ message CardOGV {
int64 duration = 3;
// 单集标题
string subtitle = 4;
+ //
+ string badge = 5;
+ //
+ int64 state = 6;
}
// ugc稿件卡片
@@ -234,13 +242,13 @@ message CursorV2Req {
// 设备标识代码
enum DT {
Unknown = 0; // 未知
- Phone = 1; // 手机端
- Pad = 2; // ipad端
- PC = 3; // web端
- TV = 4; // TV端
- Car = 5; //
- Iot = 6; //
- AndPad = 7; // apad端
+ Phone = 1; // 手机端
+ Pad = 2; // ipad端
+ PC = 3; // web端
+ TV = 4; // TV端
+ Car = 5; // 车机端
+ Iot = 6; // 物联设备
+ AndPad = 7; // apad端
}
// 删除历史记录-请求
@@ -268,7 +276,7 @@ message HisInfo {
// 搜索历史记录来源
enum HistorySource {
- history_VALUE = 0; // 主站历史记录页
+ history_VALUE = 0; // 主站历史记录页
shopping_VALUE = 1; // 会员购浏览记录
}
diff --git a/grpc_api/bilibili/app/interfaces/v1/media.proto b/grpc_api/bilibili/app/interfaces/v1/media.proto
new file mode 100644
index 0000000..1d2a2fb
--- /dev/null
+++ b/grpc_api/bilibili/app/interfaces/v1/media.proto
@@ -0,0 +1,342 @@
+syntax = "proto3";
+
+package bilibili.app.interface.v1;
+
+//
+service Media {
+ //
+ rpc MediaComment(MediaCommentReq) returns (MediaCommentReply);
+ //
+ rpc MediaDetail(MediaDetailReq) returns (MediaDetailReply);
+ //
+ rpc MediaFollow(MediaFollowReq) returns (MediaFollowReply);
+ //
+ rpc MediaRelation(MediaRelationReq) returns (MediaRelationReply);
+ //
+ rpc MediaTab(MediaTabReq) returns (MediaTabReply);
+ //
+ rpc MediaVideo(MediaVideoReq) returns (MediaVideoReply);
+}
+
+//
+message BigItem {
+ //
+ string title = 1;
+ //
+ string cover_image_uri = 2;
+ //
+ string uri = 3;
+ //
+ string cover_right_text = 4;
+ //
+ string cover_left_text1 = 5;
+ //
+ int64 cover_left_icon1 = 6;
+ //
+ string cover_left_text2 = 7;
+ //
+ int64 cover_left_icon2 = 8;
+ //
+ UserCard user_card = 9;
+ //
+ LikeButton like_button = 10;
+ //
+ int64 param = 11;
+}
+
+//
+message Button {
+ //
+ string title = 1;
+ //
+ string link = 2;
+ //
+ string id = 3;
+ //
+ int64 icon = 4;
+ //
+ ButType but_type = 5;
+ //
+ int32 follow_state = 6;
+ //
+ string has_title = 7;
+}
+
+//
+enum ButType {
+ BUT_INVALID = 0; //
+ BUT_REDIRECT = 1; //
+ BUT_LIKE = 2; //
+}
+
+//
+message Cast {
+ //
+ repeated MediaPerson person = 1;
+ //
+ string title = 2;
+}
+
+//
+message ChannelInfo {
+ //
+ int64 channel_id = 1;
+ //
+ bool subscribed = 2;
+}
+
+//
+message LikeButton {
+ //
+ int64 aid = 1;
+ //
+ int32 count = 2;
+ //
+ bool show_count = 3;
+ //
+ string event = 4;
+ //
+ int32 selected = 5;
+ //
+ string event_v2 = 6;
+ //
+ LikeButtonResource like_resource = 7;
+ //
+ LikeButtonResource dis_like_resource = 8;
+ //
+ LikeButtonResource like_night_resource = 9;
+ //
+ LikeButtonResource dis_like_night_resource = 10;
+}
+
+//
+message LikeButtonResource {
+ //
+ string url = 1;
+ //
+ string hash = 2;
+}
+
+//
+message LikeCard {
+ //
+ int64 like = 1;
+ //
+ bool is_follow = 2;
+}
+
+//
+message MediaCard {
+ //
+ string cover = 1;
+ //
+ string cur_title = 2;
+ //
+ string style = 3;
+ //
+ string label = 4;
+ //
+ Button but_first = 5;
+}
+
+//
+message MediaCommentReply {
+ //
+ string err_msg = 1;
+}
+
+//
+message MediaCommentReq {
+ //
+ string id = 1;
+}
+
+//
+message MediaDetailReply {
+ //
+ Cast cast = 1;
+ //
+ Staff staff = 2;
+ //
+ Overview overview = 3;
+}
+
+//
+message MediaDetailReq {
+ //
+ int64 biz_id = 1;
+ //
+ int64 biz_type = 2;
+}
+
+//
+message MediaFollowReply {
+
+}
+
+//
+message MediaFollowReq {
+ //
+ string id = 1;
+ //
+ int32 type = 2;
+}
+
+//
+message MediaPerson {
+ //
+ string real_name = 1;
+ //
+ string square_url = 2;
+ //
+ string character = 3;
+ //
+ int64 person_id = 4;
+ //
+ string type = 5;
+}
+
+//
+message MediaRelationReply {
+ //
+ string offset = 1;
+ //
+ bool has_more = 2;
+ //
+ repeated SmallItem list = 3;
+}
+
+//
+message MediaRelationReq {
+ //
+ int64 biz_id = 1;
+ //
+ int64 biz_type = 2;
+ //
+ int64 feed_id = 3;
+ //
+ string offset = 5;
+ //
+ int32 ps = 6;
+}
+
+//
+message MediaTabReply {
+ //
+ MediaCard media_card = 1;
+ //
+ repeated ShowTab tab = 2;
+ //
+ int64 default_tab_index = 3;
+ //
+ ChannelInfo channel_info = 4;
+}
+
+//
+message MediaTabReq {
+ //
+ int64 biz_id = 1;
+ //
+ int64 biz_type = 2;
+ //
+ string source = 3;
+ //
+ string spmid = 4;
+ //
+ map args = 5;
+}
+
+//
+message MediaVideoReply {
+ //
+ string offset = 1;
+ //
+ bool has_more = 2;
+ //
+ repeated BigItem list = 3;
+}
+
+//
+message MediaVideoReq {
+ //
+ int64 biz_id = 1;
+ //
+ int64 biz_type = 2;
+ //
+ int64 feed_id = 3;
+ //
+ string offset = 5;
+ //
+ int32 ps = 6;
+}
+
+//
+message Overview {
+ //
+ string title = 1;
+ //
+ string text = 2;
+}
+
+//
+message ShowTab {
+ //
+ TabType tab_type = 1;
+ //
+ string title = 2;
+ //
+ string url = 3;
+}
+
+//
+message SmallItem {
+ //
+ string title = 1;
+ //
+ string cover_image_uri = 2;
+ //
+ string uri = 3;
+ //
+ string cover_right_text = 4;
+ //
+ string cover_left_text1 = 5;
+ //
+ int64 cover_left_icon1 = 6;
+ //
+ string cover_left_text2 = 7;
+ //
+ int64 cover_left_icon2 = 8;
+ //
+ int64 param = 9;
+ //
+ int64 mid = 10;
+}
+
+//
+message Staff {
+ //
+ string title = 1;
+ //
+ string text = 2;
+}
+
+//
+enum TabType {
+ TAB_INVALID = 0; //
+ TAB_OGV_DETAIL = 6; //
+ TAB_OGV_REPLY = 7; //
+ TAB_FEED_BID = 8; //
+ TAB_FEED_SMALL = 9; //
+}
+
+//
+message UserCard {
+ //
+ string user_name = 1;
+ //
+ string user_face = 2;
+ //
+ string user_url = 3;
+ //
+ int64 mid = 4;
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/app/interfaces/v1/search.proto b/grpc_api/bilibili/app/interfaces/v1/search.proto
index 8ad82d8..1654c54 100644
--- a/grpc_api/bilibili/app/interfaces/v1/search.proto
+++ b/grpc_api/bilibili/app/interfaces/v1/search.proto
@@ -1,11 +1,85 @@
syntax = "proto3";
-package bilibili.app.interfaces.v1;
+package bilibili.app.interface.v1;
// 搜索
service Search {
// 获取搜索建议
rpc Suggest3 (SuggestionResult3Req) returns (SuggestionResult3Reply);
+ //
+ rpc DefaultWords(DefaultWordsReq) returns (DefaultWordsReply);
+}
+
+//
+service SearchTest {
+ //
+ rpc NotExist(SuggestionResult3Req) returns (SuggestionResult3Reply);
+}
+
+//
+message DefaultWordsReply {
+ //
+ string trackid = 1;
+ //
+ string param = 2;
+ //
+ string show = 3;
+ //
+ string word = 4;
+ //
+ int64 show_front = 5;
+ //
+ string exp_str = 6;
+ //
+ string goto = 7;
+ //
+ string value = 8;
+ //
+ string uri = 9;
+}
+
+//
+message NftFaceIcon {
+ //
+ int32 region_type = 1;
+ //
+ string icon = 2;
+ //
+ int32 show_status = 3;
+}
+
+//
+message DefaultWordsReq {
+ //
+ int64 from = 1;
+ //
+ int64 login_event = 2;
+ //
+ int32 teenagers_mode = 3;
+ //
+ int32 lessons_mode = 4;
+ //
+ string tab = 5;
+ //
+ string event_id = 6;
+ //
+ string avid = 7;
+ //
+ string query = 8;
+ //
+ int64 an = 9;
+ //
+ int64 is_fresh = 10;
+}
+
+// 获取搜索建议-响应
+message SuggestionResult3Reply {
+ // 搜索追踪id
+ string trackid = 1;
+ // 搜索建议条目列表
+ repeated ResultItem list = 2;
+ // 搜索的abtest 实验信息
+ string exp_str = 3;
}
// 获取搜索建议-请求
@@ -20,16 +94,6 @@ message SuggestionResult3Req {
int32 teenagers_mode = 3;
}
-// 获取搜索建议-响应
-message SuggestionResult3Reply {
- // 搜索追踪id
- string trackid = 1;
- // 搜索建议条目列表
- repeated ResultItem list = 2;
- // 搜索的abtest 实验信息
- string expStr = 3;
-}
-
// 搜索建议条目
message ResultItem {
// 来源
@@ -86,6 +150,10 @@ message ResultItem {
int64 module_id = 26;
//
string live_link = 27;
+ //
+ int32 face_nft_new = 28;
+ //
+ NftFaceIcon nft_face_icon = 29;
}
// 认证信息
diff --git a/grpc_api/bilibili/app/interfaces/v1/space.proto b/grpc_api/bilibili/app/interfaces/v1/space.proto
index 3989ea0..236dca3 100644
--- a/grpc_api/bilibili/app/interfaces/v1/space.proto
+++ b/grpc_api/bilibili/app/interfaces/v1/space.proto
@@ -1,6 +1,6 @@
syntax = "proto3";
-package bilibili.app.interfaces.v1;
+package bilibili.app.interface.v1;
import "bilibili/app/archive/middleware/v1/preload.proto";
import "bilibili/app/archive/v1/archive.proto";
@@ -24,7 +24,6 @@ message Arc {
string uri = 2;
}
-
//
message Dynamic {
//
@@ -36,14 +35,6 @@ enum From {
DynamicTab = 1; //
}
-//
-message OfficialVerify {
- //
- int32 type = 1;
- //
- string desc = 2;
-}
-
//
message SearchTabReply {
//
@@ -112,4 +103,4 @@ message Tab {
string title = 1;
//
string uri = 2;
-}
\ No newline at end of file
+}
diff --git a/grpc_api/bilibili/app/listener/v1/listener.proto b/grpc_api/bilibili/app/listener/v1/listener.proto
index b00c79e..e11714c 100644
--- a/grpc_api/bilibili/app/listener/v1/listener.proto
+++ b/grpc_api/bilibili/app/listener/v1/listener.proto
@@ -4,16 +4,52 @@ package bilibili.app.listener.v1;
import "google/protobuf/empty.proto";
import "bilibili/app/archive/middleware/v1/preload.proto";
+import "bilibili/app/interfaces/v1/history.proto";
+import "bilibili/app/playurl/v1/playurl.proto";
// 听视频
service Listener {
+ //
+ rpc BkarcDetails (BKArcDetailsReq) returns (BKArcDetailsResp);
+ // 投币
+ rpc CoinAdd (CoinAddReq) returns (CoinAddResp);
+ //
+ rpc Event(EventReq) returns (EventResp);
+ // 创建收藏夹
+ rpc FavFolderCreate (FavFolderCreateReq) returns (FavFolderCreateResp);
+ //
+ rpc FavFolderDelete (FavFolderDeleteReq) returns (FavFolderDeleteResp);
+ // 收藏夹详细信息
+ rpc FavFolderDetail (FavFolderDetailReq) returns (FavFolderDetailResp);
+ // 用户收藏夹列表
+ rpc FavFolderList (FavFolderListReq) returns (FavFolderListResp);
+ //
+ rpc FavItemAdd (FavItemAddReq) returns (FavItemAddResp);
+ // 批量处理收藏
+ rpc FavItemBatch (FavItemBatchReq) returns (FavItemBatchResp);
+ //
+ rpc FavItemDel (FavItemDelReq) returns (FavItemDelResp);
+ //
+ rpc FavoredInAnyFolders (FavoredInAnyFoldersReq) returns (FavoredInAnyFoldersResp);
+ //
+ rpc Medialist(MedialistReq) returns (MedialistResp);
+ // 每日播单详情
+ rpc PickCardDetail (PickCardDetailReq) returns (PickCardDetailResp);
+ // 每日播单列表
+ rpc PickFeed (PickFeedReq) returns (PickFeedResp);
//
rpc Ping (google.protobuf.Empty) returns (google.protobuf.Empty);
+ // 播放上报
+ rpc PlayActionReport (PlayActionReportReq) returns (google.protobuf.Empty);
+ //
+ rpc PlayHistory (PlayHistoryReq) returns (PlayHistoryResp);
+ // 添加历史记录
+ rpc PlayHistoryAdd (PlayHistoryAddReq) returns (google.protobuf.Empty);
+ //
+ rpc PlayHistoryDel (PlayHistoryDelReq) returns (google.protobuf.Empty);
// 获取音频URL
rpc PlayUrl (PlayURLReq) returns (PlayURLResp);
//
- rpc BkarcDetails (BKArcDetailsReq) returns (BKArcDetailsResp);
- //
rpc Playlist (PlaylistReq) returns (PlaylistResp);
//
rpc PlaylistAdd (PlaylistAddReq) returns (google.protobuf.Empty);
@@ -21,40 +57,28 @@ service Listener {
rpc PlaylistDel (PlaylistDelReq) returns (google.protobuf.Empty);
// 推荐列表
rpc RcmdPlaylist (RcmdPlaylistReq) returns (RcmdPlaylistResp);
- //
- rpc PlayHistory (PlayHistoryReq) returns (PlayHistoryResp);
- // 添加历史记录
- rpc PlayHistoryAdd (PlayHistoryAddReq) returns (google.protobuf.Empty);
- //
- rpc PlayHistoryDel (PlayHistoryDelReq) returns (google.protobuf.Empty);
- // 播放上报
- rpc PlayActionReport (PlayActionReportReq) returns (google.protobuf.Empty);
- // 三联
- rpc TripleLike (TripleLikeReq) returns (TripleLikeResp);
// 点赞
rpc ThumbUp (ThumbUpReq) returns (ThumbUpResp);
- // 投币
- rpc CoinAdd (CoinAddReq) returns (CoinAddResp);
+ // 三联
+ rpc TripleLike (TripleLikeReq) returns (TripleLikeResp);
+}
+
+//
+service Music {
//
- rpc FavItemAdd (FavItemAddReq) returns (FavItemAddResp);
+ rpc Click(ClickReq) returns (ClickResp);
//
- rpc FavItemDel (FavItemDelReq) returns (FavItemDelResp);
- // 批量处理收藏
- rpc FavItemBatch (FavItemBatchReq) returns (FavItemBatchResp);
+ rpc FavTabShow(FavTabShowReq) returns (FavTabShowResp);
//
- rpc FavoredInAnyFolders (FavoredInAnyFoldersReq) returns (FavoredInAnyFoldersResp);
- // 用户收藏夹列表
- rpc FavFolderList (FavFolderListReq) returns (FavFolderListResp);
- // 收藏夹详细信息
- rpc FavFolderDetail (FavFolderDetailReq) returns (FavFolderDetailResp);
- // 创建收藏夹
- rpc FavFolderCreate (FavFolderCreateReq) returns (FavFolderCreateResp);
+ rpc MainFavMusicMenuList(MainFavMusicMenuListReq) returns (MainFavMusicMenuListResp);
//
- rpc FavFolderDelete (FavFolderDeleteReq) returns (FavFolderDeleteResp);
- // 每日播单列表
- rpc PickFeed (PickFeedReq) returns (PickFeedResp);
- // 每日播单详情
- rpc PickCardDetail (PickCardDetailReq) returns (PickCardDetailResp);
+ rpc MainFavMusicSubTabList(MainFavMusicSubTabListReq) returns (MainFavMusicSubTabListResp);
+ //
+ rpc MenuDelete(MenuDeleteReq) returns (MenuDeleteResp);
+ //
+ rpc MenuEdit(MenuEditReq) returns (MenuEditResp);
+ //
+ rpc MenuSubscribe(MenuSubscribeReq) returns (MenuSubscribeResp);
}
//
@@ -173,6 +197,19 @@ enum CardModuleType {
Module_cbtn = 3;
}
+//
+message ClickReq {
+ //
+ int64 sid = 1;
+ //
+ int32 action = 2;
+}
+
+//
+message ClickResp {
+
+}
+
//
message CoinAddReq {
//
@@ -243,6 +280,29 @@ message DetailItem {
string message = 9;
//
map player_info = 10;
+ //
+ PlayItem associated_item = 11;
+ //
+ int64 last_play_time = 12;
+ //
+ string history_tag = 13;
+ //
+ bilibili.app.interface.v1.DeviceType device_type = 14;
+ //
+ FavFolder ugc_season_info = 15;
+}
+
+//
+message EventReq {
+ //
+ int32 event_type = 1;
+ //
+ PlayItem item = 2;
+}
+
+//
+message EventResp {
+
}
//
@@ -257,6 +317,8 @@ message EventTracking {
string entity_type = 4;
//
string entity_id = 5;
+ //
+ string track_json = 6;
}
//
@@ -533,6 +595,18 @@ message FavoredInAnyFoldersResp {
PlayItem item = 2;
}
+//
+message FavTabShowReq {
+ //
+ int64 mid = 1;
+}
+
+//
+message FavTabShowResp {
+ //
+ bool show_menu = 1;
+}
+
//
message FollowRelation {
//
@@ -553,6 +627,219 @@ message FormatDescription {
string superscript = 5;
}
+//
+enum ListOrder {
+ NO_ORDER = 0; //
+ ORDER_NORMAL = 1; //
+ ORDER_REVERSE = 2; //
+ ORDER_RANDOM = 3; //
+}
+
+//
+enum ListSortField {
+ NO_SORT = 0; //
+ SORT_CTIME = 1; //
+ SORT_VIEWCNT = 2; //
+ SORT_FAVCNT = 3; //
+}
+
+//
+message MainFavMusicMenuListReq {
+ //
+ int32 tab_type = 1;
+ //
+ string offset = 2;
+}
+
+//
+message MainFavMusicMenuListResp {
+ //
+ int32 tab_type = 1;
+ //
+ repeated MusicMenu menu_list = 2;
+ //
+ bool has_more = 3;
+ //
+ string offset = 4;
+}
+
+//
+message MainFavMusicSubTabListReq {
+
+}
+
+//
+message MainFavMusicSubTabListResp {
+ //
+ repeated MusicSubTab tabs = 1;
+ //
+ MainFavMusicMenuListResp default_tab_res = 2;
+ //
+ map first_page_res = 3;
+}
+
+//
+message MedialistItem {
+ //
+ PlayItem item = 1;
+ //
+ string title = 2;
+ //
+ string cover = 3;
+ //
+ int64 duration = 4;
+ //
+ int32 parts = 5;
+ //
+ int64 up_mid = 6;
+ //
+ string up_name = 7;
+ //
+ int32 state = 8;
+ //
+ string message = 9;
+ //
+ int64 stat_view = 10;
+ //
+ int64 stat_reply = 11;
+}
+
+//
+message MedialistReq {
+ //
+ int64 list_type = 1;
+ //
+ int64 biz_id = 2;
+ //
+ string offset = 3;
+}
+
+//
+message MedialistResp {
+ //
+ int64 total = 1;
+ //
+ bool has_more = 2;
+ //
+ string offset = 3;
+ //
+ repeated MedialistItem items = 4;
+ //
+ MedialistUpInfo up_info = 5;
+}
+
+//
+message MedialistUpInfo {
+ //
+ int64 mid = 1;
+ //
+ string avatar = 2;
+ //
+ int64 fans = 3;
+ //
+ string name = 4;
+}
+
+//
+message MenuDeleteReq {
+ //
+ int64 id = 1;
+}
+
+//
+message MenuDeleteResp {
+ //
+ string message = 1;
+}
+
+//
+message MenuEditReq {
+ //
+ int64 id = 1;
+ //
+ string title = 2;
+ //
+ string desc = 3;
+ //
+ int32 is_public = 4;
+}
+
+//
+message MenuEditResp {
+ //
+ string message = 1;
+}
+
+//
+message MenuSubscribeReq {
+ //
+ int32 action = 1;
+ //
+ int64 target_id = 2;
+}
+
+//
+message MenuSubscribeResp {
+ //
+ string message = 1;
+}
+
+//
+message MusicMenu {
+ //
+ int64 id = 1;
+ //
+ int32 menu_type = 2;
+ //
+ string title = 3;
+ //
+ string desc = 4;
+ //
+ string cover = 5;
+ //
+ MusicMenuAuthor owner = 6;
+ //
+ int32 state = 7;
+ //
+ int64 attr = 8;
+ //
+ MusicMenuStat stat = 9;
+ //
+ int64 total = 10;
+ //
+ int64 ctime = 11;
+ //
+ string uri = 12;
+}
+
+//
+message MusicMenuAuthor {
+ //
+ int64 mid = 1;
+ //
+ string name = 2;
+ //
+ string avatar = 3;
+}
+
+//
+message MusicMenuStat {
+ //
+ int64 play = 1;
+ //
+ int64 reply = 2;
+}
+
+//
+message MusicSubTab {
+ //
+ string name = 1;
+ //
+ int32 tab_type = 2;
+ //
+ int64 total = 3;
+}
+
//
message PageOption {
//
@@ -677,6 +964,8 @@ message PkcmHeader {
message PlayActionReportReq {
//
PlayItem item = 1;
+ //
+ string from_spmid = 2;
}
//
@@ -711,7 +1000,10 @@ message PlayHistoryDelReq {
//
message PlayHistoryReq {
+ //
PageOption page_opt = 1;
+ //
+ int64 local_today_zero = 2;
}
//
@@ -751,6 +1043,10 @@ message PlayInfo {
int32 code = 11;
//
string message = 12;
+ //
+ int64 expire_time = 13;
+ //
+ bilibili.app.playurl.v1.VolumeInfo volume = 14;
}
//
@@ -801,6 +1097,8 @@ message PlaylistReq {
bilibili.app.archive.middleware.v1.PlayerArgs player_args = 5;
//
int64 extra_id = 6;
+ //
+ SortOption sort_opt = 7;
}
//
@@ -821,14 +1119,15 @@ message PlaylistResp {
//
enum PlaylistSource {
- DEFAULT = 0;
- MEM_SPACE = 1;
- AUDIO_COLLECTION = 2;
- AUDIO_CARD = 3;
- USER_FAVOURITE = 4;
- UP_ARCHIVE = 5;
- AUDIO_CACHE = 6;
- PICK_CARD = 7;
+ DEFAULT = 0; //
+ MEM_SPACE = 1; //
+ AUDIO_COLLECTION = 2; //
+ AUDIO_CARD = 3; //
+ USER_FAVOURITE = 4; //
+ UP_ARCHIVE = 5; //
+ AUDIO_CACHE = 6; //
+ PICK_CARD = 7; //
+ MEDIA_LIST = 8; //
}
//
@@ -865,6 +1164,10 @@ message RcmdPlaylistReq {
int64 id = 2;
//
bool need_history = 3;
+ //
+ bool need_top_cards = 4;
+ //
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 5;
}
//
@@ -873,6 +1176,8 @@ message RcmdPlaylistResp {
repeated DetailItem list = 1;
//
int64 history_len = 2;
+ //
+ repeated TopCard top_cards = 3;
}
//
@@ -895,6 +1200,14 @@ message ResponseUrl {
string md5 = 8;
}
+//
+message SortOption {
+ //
+ int32 order = 1;
+ //
+ int32 sort_field = 2;
+}
+
//
message ThumbUpReq {
//
@@ -909,6 +1222,94 @@ message ThumbUpResp {
string message = 1;
}
+//
+message TopCard {
+ //
+ string title = 1;
+ //
+ int32 play_style = 2;
+ //
+ int32 card_type = 3;
+ //
+ oneof card {
+ //
+ TpcdHistory listen_history = 4;
+ //
+ TpcdFavFolder fav_folder = 5;
+ //
+ TpcdUpRecall up_recall = 6;
+ //
+ TpcdPickToday pick_today = 7;
+ }
+ //
+ int64 pos = 8;
+ //
+ string title_icon = 9;
+}
+
+//
+enum TopCardType {
+ UNSPECIFIED = 0; //
+ LISTEN_HISTORY = 1; //
+ FAVORITE_FOLDER = 2; //
+ UP_RECALL = 3; //
+ PICK_TODAY = 4; //
+}
+
+//
+message TpcdFavFolder {
+ //
+ DetailItem item = 1;
+ //
+ string text = 2;
+ //
+ string pic = 3;
+ //
+ int64 fid = 4;
+ //
+ int32 folder_type = 5;
+}
+
+//
+message TpcdHistory {
+ //
+ DetailItem item = 1;
+ //
+ string text = 2;
+ //
+ string pic = 3;
+}
+
+//
+message TpcdPickToday {
+ //
+ DetailItem item = 1;
+ //
+ string text = 2;
+ //
+ string pic = 3;
+ //
+ int64 pick_id = 4;
+ //
+ int64 pick_card_id = 5;
+}
+
+//
+message TpcdUpRecall {
+ //
+ int64 up_mid = 1;
+ //
+ string text = 2;
+ //
+ string avatar = 3;
+ //
+ int64 medialist_type = 4;
+ //
+ int64 medialist_biz_id = 5;
+ //
+ DetailItem item = 6;
+}
+
//
message TripleLikeReq {
//
diff --git a/grpc_api/bilibili/app/mine/v1/mine.proto b/grpc_api/bilibili/app/mine/v1/mine.proto
new file mode 100644
index 0000000..71e32f2
--- /dev/null
+++ b/grpc_api/bilibili/app/mine/v1/mine.proto
@@ -0,0 +1,245 @@
+syntax = "proto3";
+
+package bilibili.app.mine.v1;
+
+import "bilibili/app/dynamic/v2/dynamic.proto";
+
+//
+service Mine {
+ //
+ rpc PubModule (PubModuleReq) returns (PubModuleResp);
+}
+
+//
+message Arc {
+ //
+ string date = 1;
+ //
+ Stat stat = 2;
+ //
+ string cover = 3;
+ //
+ int64 duration = 4;
+ //
+ int64 aid = 5;
+ //
+ int64 cid = 6;
+ //
+ int32 state = 7;
+}
+
+//
+enum ArcState {
+ //
+ STATE_UNKNOWN = 0;
+ //
+ OPEN = 1;
+ //
+ ORANGE = 2;
+ //
+ WAIT = 3;
+ //
+ RECICLE = 4;
+ //
+ LOCK = 5;
+ //
+ FIXED = 6;
+ //
+ USER_DELAY = 7;
+ //
+ FAST_PUB = 8;
+ //
+ XCODE_FAIL = 9;
+}
+
+//
+message Button {
+ //
+ string light_icon = 1;
+ //
+ string dark_icon = 2;
+ //
+ string url = 3;
+ //
+ string text = 4;
+}
+
+//
+message CardMore {
+ //
+ Button button = 1;
+}
+
+//
+message CardOpus {
+ //
+ bilibili.app.dynamic.v2.Paragraph word_paragraph = 1;
+ //
+ string cover = 2;
+ //
+ string url = 3;
+ //
+ SubTitleWithStat stat_title = 4;
+ //
+ Stat stat = 5;
+ //
+ string date = 6;
+ //
+ int64 dyn_id = 7;
+ //
+ bool has_share = 8;
+ //
+ int32 state = 9;
+}
+
+//
+message CardPubGuide {
+ //
+ Title title = 1;
+ //
+ Button button = 2;
+ //
+ repeated PubGuideMaterial material = 3;
+ //
+ Button more_button = 4;
+}
+
+//
+enum CardType {
+ //
+ CARD_UNKNOWN = 0;
+ //
+ PUBGUIDE = 1;
+ //
+ UGC = 2;
+ //
+ OPUS = 3;
+ //
+ MORE = 4;
+}
+
+//
+message CardUGC {
+ //
+ string title = 1;
+ //
+ Color title_color = 2;
+ //
+ oneof subtitle {
+ //
+ string button_title = 3;
+ //
+ string stat_title = 4;
+ }
+ //
+ Arc arc = 5;
+ //
+ string url = 6;
+ //
+ bool has_share = 7;
+}
+
+//
+message Color {
+ //
+ string light_color = 1;
+ //
+ string dark_color = 2;
+}
+
+//
+enum OpusState {
+ //
+ OPUS_UNKNOWN = 0;
+ //
+ OPUS_OPEN = 1;
+ //
+ OPUS_NO_FORWARD = 2;
+}
+
+//
+message PubCard {
+ //
+ oneof card {
+ //
+ CardPubGuide pub_guide = 1;
+ //
+ CardUGC ugc = 2;
+ //
+ CardOpus opus = 3;
+ //
+ CardMore more = 4;
+ }
+ //
+ CardType card_type = 5;
+}
+
+//
+message PubGuideMaterial {
+ //
+ int64 id = 1;
+ //
+ Title title = 2;
+ //
+ string cover = 3;
+ //
+ string url = 4;
+}
+
+//
+message PubModuleReq {
+ //
+ int64 user_original_state = 1;
+ //
+ repeated int64 dyn_ids = 2;
+ //
+ int64 card_num = 3;
+}
+
+//
+message PubModuleResp {
+ //
+ repeated PubCard pub_card = 1;
+}
+
+//
+message Stat {
+ //
+ string play_icon = 1;
+ //
+ string play = 2;
+ //
+ string like_icon = 3;
+ //
+ string like = 4;
+}
+
+//
+message SubTitleWithButton {
+ //
+ string icon = 1;
+ //
+ string url = 2;
+ //
+ Color background_color = 3;
+ //
+ string text = 4;
+ //
+ Color text_color = 5;
+}
+
+//
+message SubTitleWithStat {
+ //
+ repeated string icon = 1;
+ //
+ string text = 2;
+}
+
+//
+message Title {
+ //
+ string main = 1;
+ //
+ string sub = 2;
+}
diff --git a/grpc_api/bilibili/app/nativeact/v1/nativeact.proto b/grpc_api/bilibili/app/nativeact/v1/nativeact.proto
index 988ddd1..4cc2513 100644
--- a/grpc_api/bilibili/app/nativeact/v1/nativeact.proto
+++ b/grpc_api/bilibili/app/nativeact/v1/nativeact.proto
@@ -1,11 +1,33 @@
syntax = "proto3";
+// Deprecated
package bilibili.app.nativeact.v1;
import "google/protobuf/any.proto";
import "bilibili/app/dynamic/v2/dynamic.proto";
import "bilibili/app/archive/middleware/v1/preload.proto";
+//
+enum ActionType {
+ Default = 0; //
+ Do = 1; //
+ Undo = 2; //
+}
+
+//
+message Area {
+ //
+ int64 height = 1;
+ //
+ int64 width = 2;
+ //
+ int64 x = 3;
+ //
+ int64 y = 4;
+ //
+ string ukey = 5;
+}
+
//
message Badge {
//
@@ -106,6 +128,14 @@ message Color {
string nt_unselected_bg_color = 23;
//
string progress_bar_color = 24;
+ //
+ string panel_bg_color = 25;
+ //
+ string panel_select_color = 26;
+ //
+ string panel_select_font_color = 27;
+ //
+ string panel_nt_select_font_color = 28;
}
//
@@ -236,6 +266,28 @@ message EditorResp {
Module module = 1;
}
+//
+message FollowOgvParams {
+ //
+ ActionType action = 1;
+ //
+ int32 season_id = 2;
+}
+
+//
+message FollowOgvReq {
+ //
+ string raw_params = 1;
+ //
+ FollowOgvParams params = 2;
+}
+
+//
+message FollowOgvRly {
+ //
+ string follow_params = 1;
+}
+
//
message GameCard {
//
@@ -270,6 +322,24 @@ message HeaderCard {
string discuss_num = 8;
//
bool is_subscribed = 9;
+ //
+ int64 mid = 10;
+}
+
+//
+message IconCard {
+ //
+ repeated IconItem items = 1;
+}
+
+//
+message IconItem {
+ //
+ string title = 1;
+ //
+ string image = 2;
+ //
+ string uri = 3;
}
//
@@ -375,6 +445,46 @@ message LiveItem {
string link = 15;
//
int64 live_id = 16;
+ //
+ LiveWatchedShow watched_show = 17;
+}
+
+//
+message LiveWatchedShow {
+ //
+ bool switch = 1;
+ //
+ int64 num = 2;
+ //
+ string text_small = 3;
+ //
+ string text_large = 4;
+ //
+ string icon = 5;
+ //
+ string icon_location = 6;
+}
+
+//
+message MessageBox {
+ //
+ string alert_msg = 1;
+ //
+ string confirm_button_text = 2;
+ //
+ string cancel_button_text = 3;
+ //
+ string confirm_msg = 4;
+ //
+ string cancel_msg = 5;
+ //
+ MessageBoxType type = 6;
+}
+
+//
+enum MessageBoxType {
+ Dialog = 0; //
+ Toast = 1; //
}
//
@@ -402,7 +512,54 @@ message Module {
//
message ModuleItem {
//
- string card_type = 1;
+ enum CardDetailCase {
+ CARDDETAIL_NOT_SET = 0; //
+ EDITOR_RECOMMEND_CARD = 10; //
+ PARTICIPATION_CARD = 11; //
+ HEADER_CARD = 12; //
+ DYNAMIC_CARD = 13; //
+ TEXT_CARD = 14; //
+ TEXT_TITLE_CARD = 15; //
+ IMAGE_TITLE_CARD = 16; //
+ DYNAMIC_MORE_CARD = 17; //
+ DYNAMIC_ACT_MORE_CARD = 18; //
+ LIVE_CARD = 19; //
+ CAROUSEL_IMG_CARD = 20; //
+ CAROUSEL_WORD_CARD = 21; //
+ RESOURCE_CARD = 22; //
+ RESOURCE_MORE_CARD = 23; //
+ GAME_CARD = 24; //
+ VIDEO_CARD = 25; //
+ VIDEO_MORE_CARD = 26; //
+ RECOMMEND_CARD = 27; //
+ RECOMMEND_VERTICAL_CARD = 28; //
+ RELATIVEACT_CARD = 29; //
+ RELATIVEACT_CAPSULE_CARD = 30; //
+ STATEMENT_CARD = 31; //
+ ICON_CARD = 32; //
+ VOTE_CARD = 33; //
+ RESERVE_CARD = 34; //
+ TIMELINE_HEAD_CARD = 35; //
+ TIMELINE_EVENT_TEXT_CARD = 36; //
+ TIMELINE_EVENT_IMAGE_CARD = 37; //
+ TIMELINE_EVENT_IMAGETEXT_CARD = 38; //
+ TIMELINE_EVENT_RESOURCE_CARD = 39; //
+ TIMELINE_MORE_CARD = 40; //
+ TIMELINE_UNFOLD_CARD = 41; //
+ OGV_ONE_CARD = 42; //
+ OGV_THREE_CARD = 43; //
+ OGV_MORE_CARD = 44; //
+ NAVIGATION_CARD = 45; //
+ REPLY_CARD = 46; //
+ TAB_CARD = 47; //
+ NEWACT_HEADER_CARD = 48; //
+ NEWACT_AWARD_CARD = 49; //
+ NEWACT_STATEMENT_CARD = 50; //
+ PROGRESS_CARD = 51; //
+ SELECT_CARD = 52; //
+ }
+ //
+ CardDetailCase card_type = 1;
//
string card_id = 2;
oneof card_detail {
@@ -440,9 +597,257 @@ message ModuleItem {
VideoCard video_card = 25;
//
VideoMoreCard video_more_card = 26;
+ //
+ RcmdCard recommend_card = 27;
+ //
+ RcmdVerticalCard recommend_vertical_card = 28;
+ //
+ RelativeactCard relativeact_card = 29;
+ //
+ RelativeactCapsuleCard relativeact_capsule_card = 30;
+ //
+ StatementCard statement_card = 31;
+ //
+ IconCard icon_card = 32;
+ //
+ VoteCard vote_card = 33;
+ //
+ ReserveCard reserve_card = 34;
+ //
+ TimelineHeadCard timeline_head_card = 35;
+ //
+ TimelineEventTextCard timeline_event_text_card = 36;
+ //
+ TimelineEventImageCard timeline_event_image_card = 37;
+ //
+ TimelineEventImagetextCard timeline_event_imagetext_card = 38;
+ //
+ TimelineEventResourceCard timeline_event_resource_card = 39;
+ //
+ TimelineMoreCard timeline_more_card = 40;
+ //
+ TimelineUnfoldCard timeline_unfold_card = 41;
+ //
+ OgvOneCard ogv_one_card = 42;
+ //
+ OgvThreeCard ogv_three_card = 43;
+ //
+ OgvMoreCard ogv_more_card = 44;
+ //
+ NavigationCard navigation_card = 45;
+ //
+ ReplyCard reply_card = 46;
+ //
+ TabCard tab_card = 47;
+ //
+ NewactHeader newact_header = 48;
+ //
+ NewactAward newact_award = 49;
+ //
+ NewactStatement newact_statement = 50;
+ //
+ ProgressCard progress_card = 51;
+ //
+ SelectCard select_card = 52;
}
}
+//
+message NavigationCard {
+ //
+ repeated NavigationItem items = 1;
+}
+
+//
+message NavigationItem {
+ //
+ int64 module_id = 1;
+ //
+ string title = 2;
+}
+
+//
+message NewactAward {
+ //
+ string title = 1;
+ //
+ repeated NewactAwardItem items = 2;
+}
+
+//
+message NewactAwardItem {
+ //
+ string title = 1;
+ //
+ string content = 2;
+}
+
+//
+message NewactFeature {
+ //
+ string name = 1;
+ //
+ string border_color = 2;
+}
+
+//
+message NewactHeader {
+ //
+ string title = 1;
+ //
+ string time = 2;
+ //
+ string image = 3;
+ //
+ string sponsor_title = 4;
+ //
+ int64 mid = 5;
+ //
+ string user_name = 6;
+ //
+ string user_face = 7;
+ //
+ string user_url = 8;
+ //
+ repeated NewactFeature features = 9;
+}
+
+//
+message NewactStatementItem {
+ //
+ string title = 1;
+ //
+ string content = 2;
+}
+
+//
+message NewactStatement {
+ //
+ string title = 1;
+ //
+ repeated NewactStatementItem items = 2;
+}
+
+//
+message OfficialInfo {
+ //
+ int32 role = 1;
+ //
+ string title = 2;
+ //
+ string desc = 3;
+ //
+ int32 type = 4;
+}
+
+//
+message OgvFollowButton {
+ //
+ bool is_followed = 1;
+ //
+ string follow_text = 2;
+ //
+ string follow_icon = 3;
+ //
+ string unfollow_text = 4;
+ //
+ string unfollow_icon = 5;
+ //
+ string follow_params = 6;
+}
+
+//
+message OgvMoreCard {
+ //
+ string button_text = 1;
+ //
+ string supernatant_title = 2;
+ //
+ string params = 3;
+}
+
+//
+message OgvOneCard {
+ //
+ string position1 = 1;
+ //
+ string position2 = 2;
+ //
+ string position3 = 3;
+ //
+ string cover_right_text1 = 4;
+ //
+ string cover_right_text2 = 5;
+ //
+ string rcmd_content = 6;
+ //
+ string rcmd_icon = 7;
+ //
+ OgvFollowButton follow_button = 8;
+ //
+ string image = 13;
+ //
+ Badge badge = 14;
+ //
+ string title = 15;
+ //
+ ReportDic report_dic = 16;
+ //
+ string url = 17;
+ //
+ string resource_type = 18;
+}
+
+//
+message OgvSupernatantParams {
+ //
+ int64 last_index = 1;
+ //
+ int64 offset = 2;
+ //
+ int64 module_id = 3;
+}
+
+//
+message OgvSupernatantReq {
+ //
+ string raw_params = 1;
+ //
+ OgvSupernatantParams params = 2;
+ //
+ int64 primary_page_id = 3;
+}
+
+//
+message OgvSupernatantResp {
+ //
+ Module module = 1;
+ //
+ int64 last_index = 2;
+}
+
+//
+message OgvThreeCard {
+ //
+ string cover_left_text1 = 1;
+ //
+ string subtitle = 2;
+ //
+ OgvFollowButton follow_button = 3;
+ //
+ string image = 4;
+ //
+ Badge badge = 5;
+ //
+ string title = 6;
+ //
+ ReportDic report_dic = 7;
+ //
+ string url = 8;
+ //
+ string resource_type = 9;
+}
+
//
message PageResp {
//
@@ -485,6 +890,14 @@ message PageShare {
string inside_uri = 5;
//
string outside_uri = 6;
+ //
+ string origin = 7;
+ //
+ string sid = 8;
+ //
+ string space_page_url = 9;
+ //
+ string space_exclusive_page_url = 10;
}
//
@@ -519,6 +932,167 @@ message PlayerDimension {
bool rotate = 3;
}
+//
+enum ProgressBar {
+ PBarDefault = 0; //
+ PBarColor = 1; //
+ PBarTexture = 2; //
+}
+
+//
+message ProgressCard {
+ //
+ ProgressStyle style = 1;
+ //
+ ProgressSlot slot_type = 2;
+ //
+ ProgressBar bar_type = 3;
+ //
+ string texture_image = 4;
+ //
+ int64 num = 5;
+ //
+ string display_num = 6;
+ //
+ repeated ProgressNode nodes = 7;
+}
+
+//
+message ProgressEvent {
+ //
+ int64 page_id = 1;
+ //
+ repeated ProgressEventItem items = 2;
+}
+
+//
+message ProgressEventItem {
+ //
+ int64 item_id = 1;
+ //
+ string type = 2;
+ //
+ int64 num = 3;
+ //
+ string display_num = 4;
+ //
+ string web_key = 5;
+ //
+ int64 dimension = 6;
+}
+
+//
+message ProgressNode {
+ //
+ string name = 1;
+ //
+ int64 num = 2;
+ //
+ string display_num = 3;
+}
+
+//
+message ProgressReq {
+ //
+ int64 page_id = 1;
+}
+
+//
+message ProgressRly {
+ //
+ ProgressEvent event = 1;
+}
+
+//
+enum ProgressSlot {
+ PSlotDefault = 0; //
+ PSlotOutline = 1; //
+ PSlotFill = 2; //
+}
+
+//
+enum ProgressStyle {
+ PStyleDefault = 0; //
+ PStyleRound = 1; //
+ PStyleRectangle = 2; //
+ PStyleNode = 3; //
+}
+
+//
+message RcmdCard {
+ //
+ int64 mid = 1;
+ //
+ string name = 2;
+ //
+ string face = 3;
+ //
+ string uri = 4;
+ //
+ string reason = 5;
+ //
+ bool is_followed = 6;
+ //
+ OfficialInfo official = 7;
+ //
+ VipInfo vip = 8;
+ //
+ string rank_icon = 9;
+ //
+ RedirectType redirect_type = 10;
+}
+
+//
+message RcmdVerticalCard {
+ //
+ repeated RcmdCard items = 1;
+}
+
+//
+enum RedirectType {
+ RtTypeDefault = 0; //
+ RtTypeSpace = 1; //
+ RtTypeUri = 2; //
+}
+
+//
+message RelativeactCapsuleCard {
+ //
+ string title = 1;
+ //
+ repeated RelativeactCapsuleItem items = 2;
+}
+
+//
+message RelativeactCapsuleItem {
+ //
+ int64 page_id = 1;
+ //
+ string title = 2;
+ //
+ string uri = 3;
+}
+
+//
+message RelativeactCard {
+ //
+ string image = 1;
+ //
+ string title = 2;
+ //
+ string desc = 3;
+ //
+ string uri = 4;
+}
+
+//
+message ReplyCard {
+ //
+ int64 reply_id = 1;
+ //
+ int64 type = 2;
+}
+
//
message ReportDic {
//
@@ -541,6 +1115,83 @@ message ReportDic {
string author_name = 9;
}
+//
+message ReserveButton {
+ //
+ ReserveGoto goto = 1;
+ //
+ MessageBox message_box = 2;
+ //
+ string reserve_params = 3;
+ //
+ bool has_done = 4;
+ //
+ string done_text = 5;
+ //
+ string undone_text = 6;
+ //
+ string icon = 7;
+ //
+ bool is_highlight = 8;
+ //
+ string url = 9;
+}
+
+//
+message ReserveCard {
+ //
+ int64 sid = 1;
+ //
+ int64 mid = 2;
+ //
+ string name = 3;
+ //
+ string face = 4;
+ //
+ string uri = 5;
+ //
+ string title = 6;
+ //
+ string content = 7;
+ //
+ int64 num = 8;
+ //
+ string subtitle = 9;
+ //
+ ReserveButton button = 10;
+ //
+ bool hide_reserve_num = 11;
+}
+
+//
+enum ReserveGoto {
+ Reserve = 0; //
+ Redirect = 1; //
+ Unable = 2; //
+}
+
+//
+message ReserveParams {
+ //
+ int32 action = 1;
+ //
+ int64 sid = 2;
+}
+
+//
+message ReserveReq {
+ //
+ string raw_params = 1;
+ //
+ ReserveParams params = 2;
+}
+
+//
+message ReserveRly {
+ //
+ string reserve_params = 1;
+}
+
//
message ResourceCard {
//
@@ -605,6 +1256,24 @@ message ResourceResp {
Module module = 1;
}
+//
+message SelectCard {
+ //
+ int64 current_tab = 1;
+ //
+ repeated SelectItem items = 2;
+}
+
+//
+message SelectItem {
+ //
+ int64 page_id = 1;
+ //
+ string title = 2;
+ //
+ PageShare page_share = 3;
+}
+
//
message Setting {
//
@@ -649,6 +1318,22 @@ message Share {
int64 share_type = 4;
}
+//
+message SizeImage {
+ //
+ string image = 1;
+ //
+ int64 height = 2;
+ //
+ int64 width = 3;
+}
+
+//
+message StatementCard {
+ //
+ string content = 1;
+}
+
//
message SubpageData {
//
@@ -667,6 +1352,18 @@ message SubpageTab {
string params = 2;
}
+//
+message TabCard {
+ //
+ int64 current_tab = 1;
+ //
+ TabStyle style = 2;
+ //
+ repeated TabItem items = 3;
+ //
+ SizeImage bg_image = 4;
+}
+
//
message TabIndexReq {
//
@@ -685,6 +1382,29 @@ message TabIndexReq {
bool is_cold_start = 7;
}
+//
+message TabItem {
+ //
+ int64 page_id = 1;
+ //
+ string title = 2;
+ //
+ bool disable_click = 3;
+ //
+ string disable_click_toast = 4;
+ //
+ SizeImage selected_image = 5;
+ //
+ SizeImage unselected_image = 6;
+}
+
+//
+enum TabStyle {
+ TabStyleDefault = 0; //
+ TabStyleColor = 1; //
+ TabStyleImage = 2; //
+}
+
//
message TextCard {
//
@@ -698,21 +1418,128 @@ message TextTitleCard {
}
//
-message TopTab {
+message TimelineEventImageCard {
//
- string bg_image1 = 1;
+ SizeImage image = 1;
//
- string bg_image2 = 2;
+ string title = 2;
//
- string tab_top_color = 3;
+ string uri = 3;
+}
+
+//
+message TimelineEventImagetextCard {
//
- string tab_middle_color = 4;
+ string title = 1;
//
- string tab_bottom_color = 5;
+ string subtitle = 2;
//
- string font_color = 6;
+ string content = 3;
//
- int64 bar_type = 7;
+ string image = 4;
+ //
+ string uri = 5;
+}
+
+//
+message TimelineEventResourceCard {
+ //
+ string title = 1;
+ //
+ string cover_image_uri = 2;
+ //
+ string uri = 3;
+ //
+ string position1 = 4;
+ //
+ string position2 = 5;
+ //
+ Badge badge = 6;
+ //
+ ReportDic report_dic = 7;
+ //
+ string resource_type = 8;
+}
+
+//
+message TimelineEventTextCard {
+ //
+ string title = 1;
+ //
+ string subtitle = 2;
+ //
+ string content = 3;
+ //
+ string uri = 4;
+}
+
+//
+message TimelineHeadCard {
+ //
+ string stage = 1;
+}
+
+//
+message TimelineMoreCard {
+ //
+ string button_text = 1;
+ //
+ string supernatant_title = 2;
+ //
+ string params = 3;
+}
+
+//
+message TimelineSupernatantParams {
+ //
+ int64 last_index = 1;
+ //
+ int64 offset = 2;
+ //
+ int64 module_id = 3;
+}
+
+//
+message TimelineSupernatantReq {
+ //
+ string raw_params = 1;
+ //
+ TimelineSupernatantParams params = 2;
+ //
+ int64 primary_page_id = 3;
+}
+
+//
+message TimelineSupernatantResp {
+ //
+ Module module = 1;
+ //
+ int64 last_index = 2;
+}
+
+//
+message TimelineUnfoldCard {
+ //
+ message Card {
+ oneof card_detail {
+ //
+ TimelineHeadCard timeline_head_card = 1;
+ //
+ TimelineEventTextCard timeline_event_text_card= 2;
+ //
+ TimelineEventImageCard timeline_event_image_card= 3;
+ //
+ TimelineEventImagetextCard timeline_event_imagetext_card= 4;
+ //
+ TimelineEventResourceCard timeline_event_resource_card= 5;
+ }
+ }
+ //
+ string unfold_text = 1;
+ //
+ string fold_text = 2;
+ //
+ repeated Card cards = 3;
}
//
@@ -743,6 +1570,24 @@ message TopicIndexReq {
bool is_cold_start = 12;
}
+//
+message TopTab {
+ //
+ string bg_image1 = 1;
+ //
+ string bg_image2 = 2;
+ //
+ string tab_top_color = 3;
+ //
+ string tab_middle_color = 4;
+ //
+ string tab_bottom_color = 5;
+ //
+ string font_color = 6;
+ //
+ int64 bar_type = 7;
+}
+
//
message VideoCard {
//
@@ -813,4 +1658,144 @@ message VideoRights {
bool is_cooperation = 2;
//
bool is_pgc = 3;
-}
\ No newline at end of file
+}
+
+//
+message VipInfo {
+ //
+ int32 type = 1;
+ //
+ int32 status = 2;
+ //
+ int64 due_date = 3;
+ //
+ int32 vip_pay_type = 4;
+ //
+ int32 theme_type = 5;
+ //
+ VipLabel label = 6;
+ //
+ int32 avatar_subscript = 7;
+ //
+ string nickname_color = 8;
+ //
+ int64 role = 9;
+ //
+ string avatar_subscript_url = 10;
+}
+
+//
+message VipLabel {
+ //
+ string path = 1;
+ //
+ string text = 3;
+ //
+ string label_theme = 4;
+ //
+ string text_color = 5;
+ //
+ int32 bg_style = 6;
+ //
+ string bg_color = 7;
+ //
+ string border_color = 8;
+}
+
+//
+message VoteButton {
+ //
+ Area area = 1;
+ //
+ string done_image = 2;
+ //
+ string undone_image = 3;
+ //
+ bool has_voted = 4;
+ //
+ MessageBox message_box = 5;
+ //
+ string vote_params = 6;
+ //
+ int64 source_item_id = 7;
+}
+
+//
+message VoteCard {
+ //
+ SizeImage bg_image = 1;
+ //
+ int64 option_num = 2;
+ //
+ repeated VoteButton buttons = 3;
+ //
+ VoteNum left_num = 4;
+ //
+ VoteProgress progress = 5;
+}
+
+//
+message VoteNum {
+ //
+ Area area = 1;
+ //
+ int64 num = 2;
+}
+
+//
+message VoteParams {
+ //
+ int32 action = 1;
+ //
+ int64 sid = 2;
+ //
+ int64 gid = 3;
+ //
+ int64 source_item_id = 4;
+ //
+ string type = 5;
+}
+
+//
+message VoteProgress {
+ //
+ message VoteProgressItem {
+ //
+ string color = 1;
+ //
+ int64 num = 2;
+ //
+ int64 source_item_id = 3;
+ }
+ //
+ Area area = 1;
+ //
+ VoteProgressStyle style = 2;
+ //
+ repeated VoteProgressItem items = 3;
+}
+
+//
+enum VoteProgressStyle {
+ VPStyleDefault = 0; //
+ VPStyleCircle = 1; //
+ VPStyleSquare = 2; //
+}
+
+//
+message VoteReq {
+ //
+ string raw_params = 1;
+ //
+ VoteParams params = 2;
+}
+
+//
+message VoteResp {
+ //
+ string vote_params = 1;
+ //
+ int64 left_num = 2;
+ //
+ int64 can_vote_num = 3;
+}
diff --git a/grpc_api/bilibili/app/playeronline/v1/playeronline.proto b/grpc_api/bilibili/app/playeronline/v1/playeronline.proto
index 38272c4..8793702 100644
--- a/grpc_api/bilibili/app/playeronline/v1/playeronline.proto
+++ b/grpc_api/bilibili/app/playeronline/v1/playeronline.proto
@@ -6,17 +6,14 @@ package bilibili.app.playeronline.v1;
service PlayerOnline {
// 获取在线人数
rpc PlayerOnline (PlayerOnlineReq) returns (PlayerOnlineReply);
+ //
+ rpc PremiereInfo(PremiereInfoReq) returns (PremiereInfoReply);
+ //
+ rpc ReportWatch(ReportWatchReq) returns (NoReply);
}
-// 获取在线人数-请求
-message PlayerOnlineReq {
- // 稿件 avid
- int64 aid = 1;
- // 视频 cid
- int64 cid = 2;
- // 是否在播放中
- bool play_open = 3;
-}
+// 空回复
+message NoReply {}
// 获取在线人数-回复
message PlayerOnlineReply {
@@ -30,4 +27,44 @@ message PlayerOnlineReply {
bool sdm_show = 4;
//
string sdm_text = 5;
+ //
+ int64 total_number = 6;
+ //
+ string total_number_text = 7;
+}
+
+// 获取在线人数-请求
+message PlayerOnlineReq {
+ // 稿件 avid
+ int64 aid = 1;
+ // 视频 cid
+ int64 cid = 2;
+ // 是否在播放中
+ bool play_open = 3;
+}
+
+//
+message PremiereInfoReply {
+ //
+ string premiere_over_text = 1;
+ //
+ int64 participant = 2;
+ //
+ int64 interaction = 3;
+}
+
+//
+message PremiereInfoReq {
+ //
+ int64 aid = 1;
+}
+
+//
+message ReportWatchReq {
+ //
+ int64 aid = 1;
+ //
+ string biz = 2;
+ //
+ string buvid = 3;
}
\ No newline at end of file
diff --git a/grpc_api/bilibili/app/playerunite/pgcanymodel/pgcanymodel.proto b/grpc_api/bilibili/app/playerunite/pgcanymodel/pgcanymodel.proto
new file mode 100644
index 0000000..cb1db04
--- /dev/null
+++ b/grpc_api/bilibili/app/playerunite/pgcanymodel/pgcanymodel.proto
@@ -0,0 +1,14 @@
+syntax = "proto3";
+
+package bilibili.app.playerunite.pgcanymodel;
+
+import "bilibili/pgc/gateway/player/v2/playurl.proto";
+
+message PGCAnyModel {
+ bilibili.pgc.gateway.player.v2.PlayViewBusinessInfo business = 3;
+ bilibili.pgc.gateway.player.v2.Event event = 4;
+ bilibili.pgc.gateway.player.v2.ViewInfo view_info = 5;
+ bilibili.pgc.gateway.player.v2.PlayAbilityExtConf play_ext_conf = 6;
+ bilibili.pgc.gateway.player.v2.PlayExtInfo play_ext_info = 7;
+}
+
diff --git a/grpc_api/bilibili/app/playerunite/pugvanymodel.proto/pugvanymodel.proto b/grpc_api/bilibili/app/playerunite/pugvanymodel.proto/pugvanymodel.proto
new file mode 100644
index 0000000..b534627
--- /dev/null
+++ b/grpc_api/bilibili/app/playerunite/pugvanymodel.proto/pugvanymodel.proto
@@ -0,0 +1,51 @@
+syntax = "proto3";
+
+package bilibili.app.playerunite.pugvanymodel;
+
+//
+enum EpisodeStatus {
+ EPISODE_STATUS_UNSPECIFIED = 0;
+ EPISODE_STATUS_TRY_WATCH_WHOLE = 1;
+ EPISODE_STATUS_NOT_TRY_WATCH = 2;
+ EPISODE_STATUS_TRY_WATCH_5_MINUTES = 3;
+}
+
+//
+message PlayerMask {
+ //
+ string title = 1;
+ //
+ string prefix = 2;
+ //
+ string suffix = 3;
+}
+
+//
+message PUGVAnyModel {
+ //
+ int64 season_id = 1;
+ //
+ int64 episode_id = 2;
+ //
+ EpisodeStatus status = 3;
+ //
+ RiskControl risk_control = 4;
+ //
+ PlayerMask player_mask = 5;
+}
+
+//
+message RiskControl {
+ //
+ bool need_send_sms = 1;
+ //
+ string title = 2;
+ //
+ string risk_message = 3;
+ //
+ string action_desc = 4;
+ //
+ string send_sms_url = 5;
+ //
+ string buvid = 6;
+}
diff --git a/grpc_api/bilibili/app/playerunite/ugcanymodel/ugcanymodel.proto b/grpc_api/bilibili/app/playerunite/ugcanymodel/ugcanymodel.proto
new file mode 100644
index 0000000..7d48403
--- /dev/null
+++ b/grpc_api/bilibili/app/playerunite/ugcanymodel/ugcanymodel.proto
@@ -0,0 +1,39 @@
+syntax = "proto3";
+
+package bilibili.app.playerunite.ugcanymodel;
+
+//
+message ButtonStyle {
+ string text = 1;
+ string text_color = 2;
+ string bg_color = 3;
+ string jump_link = 4;
+}
+
+// 播放限制
+enum PlayLimitCode {
+ //
+ PLC_UNKNOWN = 0;
+ // 未付费
+ PLC_NOTPAYED = 1;
+ //
+ PLC_ChargingPlusNotPass = 2;
+ //
+ PLC_ChargingPlusUpgrade = 3;
+ //
+ PLC_ChargingPlusReject = 4;
+}
+
+//
+message PlayLimit {
+ PlayLimitCode code = 1;
+ string message = 2;
+ string sub_message = 3;
+ ButtonStyle button = 4;
+}
+
+//
+message UGCAnyModel {
+ PlayLimit play_limit = 1;
+}
+
diff --git a/grpc_api/bilibili/app/playerunite/v1/playerunite.proto b/grpc_api/bilibili/app/playerunite/v1/playerunite.proto
new file mode 100644
index 0000000..5e9a6ef
--- /dev/null
+++ b/grpc_api/bilibili/app/playerunite/v1/playerunite.proto
@@ -0,0 +1,57 @@
+syntax = "proto3";
+
+package bilibili.app.playerunite.v1;
+
+import "bilibili/playershared/playershared.proto";
+
+import "google/protobuf/any.proto";
+
+// 统一视频url
+service Player {
+ // 视频地址
+ rpc PlayViewUnite (PlayViewUniteReq) returns (PlayViewUniteReply);
+}
+
+//
+message PlayViewUniteReply {
+ // 音视频流信息
+ bilibili.playershared.VodInfo vod_info = 1;
+ //
+ bilibili.playershared.PlayArcConf play_arc_conf = 2;
+ //
+ bilibili.playershared.PlayDeviceConf play_device_conf = 3;
+ //
+ bilibili.playershared.Event event = 4;
+ // 使用 pgcanymodel / ugcanymodel 进行proto any转换成对应业务码结构体
+ google.protobuf.Any supplement = 5;
+ //
+ bilibili.playershared.PlayArc play_arc = 6;
+ //
+ bilibili.playershared.QnTrialInfo qn_trial_info = 7;
+ //
+ bilibili.playershared.History history = 8;
+ //
+ bilibili.playershared.ViewInfo view_info = 9;
+ //
+ bilibili.playershared.FragmentVideo fragment_video = 10;
+}
+
+//
+message PlayViewUniteReq {
+ // 请求资源VOD信息
+ bilibili.playershared.VideoVod vod = 1;
+ //
+ string spmid = 2;
+ //
+ string from_spmid = 3;
+ // 补充信息, 如ep_id等
+ map extra_content = 4;
+ //
+ string bvid = 5;
+ //
+ string ad_extra = 6;
+ //
+ bilibili.playershared.Fragment fragment = 7;
+ //
+ string from_scene = 8;
+}
diff --git a/grpc_api/bilibili/app/playurl/v1/playurl.proto b/grpc_api/bilibili/app/playurl/v1/playurl.proto
index 4f679dc..3578d6d 100644
--- a/grpc_api/bilibili/app/playurl/v1/playurl.proto
+++ b/grpc_api/bilibili/app/playurl/v1/playurl.proto
@@ -32,12 +32,14 @@ message ArcConf {
bool disabled = 2;
//
ExtraContent extra_content = 3;
+ //
+ repeated int64 unsupport_scene = 4;
}
// 业务类型
enum Business {
UNKNOWN = 0; // 未知类型
- STORY = 1; // story业务
+ STORY = 1; // story业务
}
// Chronos灰度管理
@@ -48,6 +50,18 @@ message Chronos {
string file = 2;
}
+//
+message ButtonStyle {
+ //
+ string text = 1;
+ //
+ string text_color = 2;
+ //
+ string bg_color = 3;
+ //
+ string jump_link = 4;
+}
+
//
message CloudConf {
// 是否展示功能
@@ -62,43 +76,45 @@ message CloudConf {
// 编码类型
enum CodeType {
- NOCODE = 0; // 默认
+ NOCODE = 0; // 默认
CODE264 = 1; // H.264
CODE265 = 2; // H.265
+ CODEAV1 = 3; // av1
}
// 设置类型
enum ConfType {
- NoType = 0; //
- FLIPCONF = 1; // 镜像反转
- CASTCONF = 2; // 视频投屏
- FEEDBACK = 3; // 反馈
- SUBTITLE = 4; // 字幕
- PLAYBACKRATE = 5; // 播放速度
- TIMEUP = 6; // 定时停止播放
- PLAYBACKMODE = 7; // 播放方式
- SCALEMODE = 8; // 画面尺寸
+ NoType = 0; //
+ FLIPCONF = 1; // 镜像反转
+ CASTCONF = 2; // 视频投屏
+ FEEDBACK = 3; // 反馈
+ SUBTITLE = 4; // 字幕
+ PLAYBACKRATE = 5; // 播放速度
+ TIMEUP = 6; // 定时停止播放
+ PLAYBACKMODE = 7; // 播放方式
+ SCALEMODE = 8; // 画面尺寸
BACKGROUNDPLAY = 9; // 后台播放
- LIKE = 10; // 顶
- DISLIKE = 11; // 踩
- COIN = 12; // 投币
- ELEC = 13; // 充电
- SHARE = 14; // 分享
- SCREENSHOT = 15; // 截图
- LOCKSCREEN = 16; // 锁屏
- RECOMMEND = 17; // 推荐
- PLAYBACKSPEED = 18; // 倍速
- DEFINITION = 19; // 清晰度
- SELECTIONS = 20; // 选集
- NEXT = 21; // 下一集
- EDITDM = 22; // 编辑弹幕
- SMALLWINDOW = 23; // 小窗
- SHAKE = 24; // 播放震动
- OUTERDM = 25; // 外层面板弹幕设置
- INNERDM = 26; // 三点内弹幕设置
- PANORAMA = 27; // 全景
- DOLBY = 28; // 杜比
- COLORFILTER = 29; //
+ LIKE = 10; // 顶
+ DISLIKE = 11; // 踩
+ COIN = 12; // 投币
+ ELEC = 13; // 充电
+ SHARE = 14; // 分享
+ SCREENSHOT = 15; // 截图
+ LOCKSCREEN = 16; // 锁屏
+ RECOMMEND = 17; // 推荐
+ PLAYBACKSPEED = 18; // 倍速
+ DEFINITION = 19; // 清晰度
+ SELECTIONS = 20; // 选集
+ NEXT = 21; // 下一集
+ EDITDM = 22; // 编辑弹幕
+ SMALLWINDOW = 23; // 小窗
+ SHAKE = 24; // 播放震动
+ OUTERDM = 25; // 外层面板弹幕设置
+ INNERDM = 26; // 三点内弹幕设置
+ PANORAMA = 27; // 全景
+ DOLBY = 28; // 杜比
+ COLORFILTER = 29; // 颜色滤镜
+ LOSSLESS = 30; // HIRES
}
//
@@ -129,6 +145,8 @@ message DashItem {
uint64 size = 7;
// 帧率
string frame_rate = 8;
+ //
+ string widevine_pssh = 9;
}
// dash视频流
@@ -155,14 +173,16 @@ message DashVideo {
int32 width = 10;
// 高度
int32 height = 11;
+ //
+ string widevine_pssh = 12;
}
// 杜比伴音信息
message DolbyItem {
enum Type {
- NONE = 0; // NONE
+ NONE = 0; // NONE
COMMON = 1; // 普通杜比音效
- ATMOS = 2; // 全景杜比音效
+ ATMOS = 2; // 全景杜比音效
}
// 杜比类型
Type type = 1;
@@ -221,76 +241,88 @@ message Glance {
//
enum Group {
UnknownGroup = 0; //
- A = 1; //
- B = 2; //
- C = 3; //
+ A = 1; //
+ B = 2; //
+ C = 3; //
+}
+
+//
+message LossLessItem {
+ //
+ bool is_lossless_audio = 1;
+ //
+ DashItem audio = 2;
+ //
+ bool need_vip = 3;
}
// 禁用功能配置
message PlayAbilityConf {
- CloudConf background_play_conf = 1; // 后台播放
- CloudConf flip_conf = 2; // 镜像反转
- CloudConf cast_conf = 3; // 投屏
- CloudConf feedback_conf = 4; // 反馈
- CloudConf subtitle_conf = 5; // 字幕
- CloudConf playback_rate_conf = 6; // 播放速度
- CloudConf time_up_conf = 7; // 定时停止
- CloudConf playback_mode_conf = 8; // 播放方式
- CloudConf scale_mode_conf = 9; // 画面尺寸
- CloudConf like_conf = 10; // 赞
- CloudConf dislike_conf = 11; // 踩
- CloudConf coin_conf = 12; // 投币
- CloudConf elec_conf = 13; // 充电
- CloudConf share_conf = 14; // 分享
- CloudConf screen_shot_conf = 15; // 截图
- CloudConf lock_screen_conf = 16; // 锁定
- CloudConf recommend_conf = 17; // 相关推荐
- CloudConf playback_speed_conf = 18; // 播放速度
- CloudConf definition_conf = 19; // 清晰度
- CloudConf selections_conf = 20; // 选集
- CloudConf next_conf = 21; // 下一集
- CloudConf edit_dm_conf = 22; // 编辑弹幕
- CloudConf small_window_conf = 23; // 小窗
- CloudConf shake_conf = 24; // 震动
- CloudConf outer_dm_conf = 25; // 外层面板弹幕设置
- CloudConf innerDmDisable = 26; // 三点内弹幕设置
- CloudConf inner_dm_conf = 27; // 一起看入口
- CloudConf dolby_conf = 28; // 杜比音效
- CloudConf color_filter_conf = 29; //
+ CloudConf background_play_conf = 1; // 后台播放
+ CloudConf flip_conf = 2; // 镜像反转
+ CloudConf cast_conf = 3; // 投屏
+ CloudConf feedback_conf = 4; // 反馈
+ CloudConf subtitle_conf = 5; // 字幕
+ CloudConf playback_rate_conf = 6; // 播放速度
+ CloudConf time_up_conf = 7; // 定时停止
+ CloudConf playback_mode_conf = 8; // 播放方式
+ CloudConf scale_mode_conf = 9; // 画面尺寸
+ CloudConf like_conf = 10; // 赞
+ CloudConf dislike_conf = 11; // 踩
+ CloudConf coin_conf = 12; // 投币
+ CloudConf elec_conf = 13; // 充电
+ CloudConf share_conf = 14; // 分享
+ CloudConf screen_shot_conf = 15; // 截图
+ CloudConf lock_screen_conf = 16; // 锁定
+ CloudConf recommend_conf = 17; // 相关推荐
+ CloudConf playback_speed_conf = 18; // 播放速度
+ CloudConf definition_conf = 19; // 清晰度
+ CloudConf selections_conf = 20; // 选集
+ CloudConf next_conf = 21; // 下一集
+ CloudConf edit_dm_conf = 22; // 编辑弹幕
+ CloudConf small_window_conf = 23; // 小窗
+ CloudConf shake_conf = 24; // 震动
+ CloudConf outer_dm_conf = 25; // 外层面板弹幕设置
+ CloudConf innerDmDisable = 26; // 三点内弹幕设置
+ CloudConf inner_dm_conf = 27; // 一起看入口
+ CloudConf dolby_conf = 28; // 杜比音效
+ CloudConf color_filter_conf = 29; // 颜色滤镜
+ CloudConf loss_less_conf = 30; // HIRES
}
// 播放控件稿件配置
message PlayArcConf {
- ArcConf background_play_conf = 1; // 后台播放
- ArcConf flip_conf = 2; // 镜像反转
- ArcConf cast_conf = 3; // 投屏
- ArcConf feedback_conf = 4; // 反馈
- ArcConf subtitle_conf = 5; // 字幕
- ArcConf playback_rate_conf = 6; // 播放速度
- ArcConf time_up_conf = 7; // 定时停止
- ArcConf playback_mode_conf = 8; // 播放方式
- ArcConf scale_mode_conf = 9; // 画面尺寸
- ArcConf like_conf = 10; // 赞
- ArcConf dislike_conf = 11; // 踩
- ArcConf coin_conf = 12; // 投币
- ArcConf elec_conf = 13; // 充电
- ArcConf share_conf = 14; // 分享
- ArcConf screen_shot_conf = 15; // 截图
- ArcConf lock_screen_conf = 16; // 锁定
- ArcConf recommend_conf = 17; // 相关推荐
- ArcConf playback_speed_conf = 18; // 播放速度
- ArcConf definition_conf = 19; // 清晰度
- ArcConf selections_conf = 20; // 选集
- ArcConf next_conf = 21; // 下一集
- ArcConf edit_dm_conf = 22; // 编辑弹幕
- ArcConf small_window_conf = 23; // 小窗
- ArcConf shake_conf = 24; // 震动
- ArcConf outer_dm_conf = 25; // 外层面板弹幕设置
- ArcConf inner_dm_conf = 26; // 三点内弹幕设置
- ArcConf panorama_conf = 27; // 一起看入口
- ArcConf dolby_conf = 28; // 杜比音效
- ArcConf screen_recording_conf = 29; //
- ArcConf color_filter_conf = 30; //
+ ArcConf background_play_conf = 1; // 后台播放
+ ArcConf flip_conf = 2; // 镜像反转
+ ArcConf cast_conf = 3; // 投屏
+ ArcConf feedback_conf = 4; // 反馈
+ ArcConf subtitle_conf = 5; // 字幕
+ ArcConf playback_rate_conf = 6; // 播放速度
+ ArcConf time_up_conf = 7; // 定时停止
+ ArcConf playback_mode_conf = 8; // 播放方式
+ ArcConf scale_mode_conf = 9; // 画面尺寸
+ ArcConf like_conf = 10; // 赞
+ ArcConf dislike_conf = 11; // 踩
+ ArcConf coin_conf = 12; // 投币
+ ArcConf elec_conf = 13; // 充电
+ ArcConf share_conf = 14; // 分享
+ ArcConf screen_shot_conf = 15; // 截图
+ ArcConf lock_screen_conf = 16; // 锁定
+ ArcConf recommend_conf = 17; // 相关推荐
+ ArcConf playback_speed_conf = 18; // 播放速度
+ ArcConf definition_conf = 19; // 清晰度
+ ArcConf selections_conf = 20; // 选集
+ ArcConf next_conf = 21; // 下一集
+ ArcConf edit_dm_conf = 22; // 编辑弹幕
+ ArcConf small_window_conf = 23; // 小窗
+ ArcConf shake_conf = 24; // 震动
+ ArcConf outer_dm_conf = 25; // 外层面板弹幕设置
+ ArcConf inner_dm_conf = 26; // 三点内弹幕设置
+ ArcConf panorama_conf = 27; // 一起看入口
+ ArcConf dolby_conf = 28; // 杜比音效
+ ArcConf screen_recording_conf = 29; // 屏幕录制
+ ArcConf color_filter_conf = 30; // 颜色滤镜
+ ArcConf loss_less_conf = 31; // HIRES
}
// 编辑播放界面配置-响应
@@ -329,10 +361,30 @@ message PlayConfState {
// 错误码
enum PlayErr {
- NoErr = 0; //
+ NoErr = 0; //
WithMultiDeviceLoginErr = 1; // 管控类型的错误码
}
+//
+message PlayLimit {
+ //
+ PlayLimitCode code = 1;
+ //
+ string message = 2;
+ //
+ string sub_message = 3;
+ //
+ ButtonStyle button = 4;
+}
+
+//
+enum PlayLimitCode {
+ PLCUnkown = 0; //
+ PLCUgcNotPayed = 1; //
+ PLCChargingPlusNotPass = 2; //
+ PLCChargingPlusUpgrade = 3; //
+}
+
// 视频地址-回复
message PlayURLReply {
// 清晰的
@@ -405,6 +457,8 @@ message PlayViewReply {
Event event = 6;
//
AB ab = 7;
+ //
+ PlayLimit play_limit = 8;
}
// 播放页信息-请求
@@ -536,7 +590,7 @@ message StreamInfo {
// 格式描述
string description = 3;
// 错误码
- uint32 err_code = 4;
+ PlayErr err_code = 4;
// 不满足条件信息
StreamLimit limit = 5;
// 是否需要vip
@@ -575,7 +629,6 @@ message UpgradeButton {
string link = 2;
}
-
// 互动视频升级提示
message UpgradeLimit {
// 错误码
@@ -606,14 +659,16 @@ message VideoInfo {
DolbyItem dolby = 7;
//
VolumeInfo volume = 8;
+ //
+ LossLessItem loss_less_item = 9;
}
// 视频类型
enum VideoType {
- Unknown_VALUE = 0; //
- FLV_VALUE = 1; // flv格式
- DASH_VALUE = 2; // dash格式
- MP4_VALUE = 3; // mp4格式
+ Unknown = 0; //
+ FLV = 1; // flv格式
+ DASH = 2; // dash格式
+ MP4 = 3; // mp4格式
}
//
@@ -632,4 +687,4 @@ message VolumeInfo {
double target_i = 6;
//
double target_tp = 7;
-}
\ No newline at end of file
+}
diff --git a/grpc_api/bilibili/app/resource/privacy/v1/api.proto b/grpc_api/bilibili/app/resource/privacy/v1/api.proto
index bf77be8..ed449c0 100644
--- a/grpc_api/bilibili/app/resource/privacy/v1/api.proto
+++ b/grpc_api/bilibili/app/resource/privacy/v1/api.proto
@@ -43,12 +43,12 @@ message PrivacyConfigReply {
// 隐私开关状态
enum PrivacyConfigState {
close = 0; // 关闭
- open = 1; // 打开
+ open = 1; // 打开
}
// 隐私开关类型
enum PrivacyConfigType {
- none = 0; //
+ none = 0; //
dynamic_city = 1; // 动态同城
}
diff --git a/grpc_api/bilibili/app/resource/v1/module.proto b/grpc_api/bilibili/app/resource/v1/module.proto
index 2ce72e9..b445eb3 100644
--- a/grpc_api/bilibili/app/resource/v1/module.proto
+++ b/grpc_api/bilibili/app/resource/v1/module.proto
@@ -10,7 +10,7 @@ service Module {
//
enum CompressType {
- Unzip = 0; // unzip
+ Unzip = 0; // unzip
Original = 1; // 不操作
}
@@ -18,21 +18,21 @@ enum CompressType {
enum EnvType {
Unknown = 0; //
Release = 1; //
- Test = 2; //
+ Test = 2; //
}
//
enum IncrementType {
- Total = 0; // 全量包
+ Total = 0; // 全量包
Incremental = 1; // 增量包
}
//
enum LevelType {
Undefined = 0; //
- High = 1; // 高 需立即下载
- Middle = 2; // 中 可以延迟下载
- Low = 3; // 低 仅在业务方使用到时由业务方手动进行下载
+ High = 1; // 高 需立即下载
+ Middle = 2; // 中 可以延迟下载
+ Low = 3; // 低 仅在业务方使用到时由业务方手动进行下载
}
message ListReply {
diff --git a/grpc_api/bilibili/app/search/v2/search.proto b/grpc_api/bilibili/app/search/v2/search.proto
new file mode 100644
index 0000000..7789b01
--- /dev/null
+++ b/grpc_api/bilibili/app/search/v2/search.proto
@@ -0,0 +1,195 @@
+syntax = "proto3";
+
+package bilibili.app.search.v2;
+
+import "bilibili/broadcast/message/main/search.proto";
+
+service Search {
+ //
+ rpc CancelChatTask (CancelChatTaskReq) returns (CancelChatTaskReply);
+ //
+ rpc GetChatAuth (GetChatAuthReq) returns (GetChatAuthReply);
+ //
+ rpc GetChatResult (GetChatResultReq) returns (bilibili.broadcast.message.main.ChatResult);
+ //
+ rpc QueryRecAfterClick (QueryRecAfterClickReq) returns (QueryRecAfterClickReply);
+ //
+ rpc SearchEgg (SearchEggReq) returns (SearchEggReply);
+ //
+ rpc SubmitChatTask (SubmitChatTaskReq) returns (SubmitChatTaskReply);
+}
+
+//
+message CancelChatTaskReq {
+ //
+ string session_id = 1;
+ //
+ string from_source = 2;
+}
+
+//
+message CancelChatTaskReply {
+ //
+ int32 code = 1;
+}
+
+//
+message GetChatAuthReq {}
+
+//
+message GetChatAuthReply {
+ //
+ bool display = 1;
+ //
+ string icon = 2;
+ //
+ string icon_night = 3;
+ //
+ string jump_link = 4;
+ //
+ string text_guide = 5;
+ //
+ int32 jump_link_type = 6;
+}
+
+//
+message GetChatResultReq {
+ //
+ string query = 1;
+ //
+ string session_id = 2;
+ //
+ string from_source = 3;
+ //
+ string track_id = 4;
+}
+
+//
+message QueryRecAfterClickItem {
+ //
+ string show_name = 1;
+ //
+ string recommend_reason = 2;
+ //
+ int32 icon_type = 3;
+ //
+ string url = 4;
+ //
+ string icon = 5;
+ //
+ string icon_night = 6;
+}
+
+//
+message QueryRecAfterClickReply {
+ //
+ int32 code = 1;
+ //
+ QueryRecAfterClickResult query_rec_result = 2;
+}
+
+//
+message QueryRecAfterClickReq {
+ //
+ string param = 1;
+ //
+ int32 pos = 2;
+ //
+ string track_id = 3;
+ //
+ string qv_id = 4;
+ //
+ string keyword = 5;
+ //
+ string click_url = 6;
+ //
+ string from_source = 7;
+}
+
+//
+message QueryRecAfterClickResult {
+ //
+ repeated QueryRecAfterClickItem query_rec_list = 1;
+ //
+ string related_title = 2;
+ //
+ string param = 3;
+ //
+ string goto = 4;
+ //
+ string linktype = 5;
+ //
+ int32 position = 6;
+ //
+ string trackid = 7;
+}
+
+//
+message SearchEggInfo {
+ //
+ int32 egg_type = 1;
+ //
+ int64 id = 2;
+ //
+ int32 is_commercial = 3;
+ //
+ string mask_color = 4;
+ //
+ int64 mask_transparency = 5;
+ //
+ string md5 = 6;
+ //
+ int32 re_type = 7;
+ //
+ string re_url = 8;
+ //
+ string re_value = 9;
+ //
+ int32 show_count = 10;
+ //
+ int64 size = 11;
+ //
+ int64 source = 12;
+ //
+ string url = 13;
+}
+
+//
+message SearchEggInfos {
+ //
+ repeated SearchEggInfo egg_info = 1;
+}
+
+//
+message SearchEggReply {
+ //
+ int32 code = 1;
+ //
+ string seid = 2;
+ //
+ SearchEggInfos result = 3;
+}
+
+//
+message SearchEggReq {
+
+}
+
+//
+message SubmitChatTaskReply {
+ //
+ int32 code = 1;
+ //
+ string session_id = 2;
+}
+
+//
+message SubmitChatTaskReq {
+ //
+ string query = 1;
+ //
+ string track_id = 2;
+ //
+ string from_source = 3;
+}
+
diff --git a/grpc_api/bilibili/app/show/mixture/v1/mixture.proto b/grpc_api/bilibili/app/show/mixture/v1/mixture.proto
new file mode 100644
index 0000000..1e13127
--- /dev/null
+++ b/grpc_api/bilibili/app/show/mixture/v1/mixture.proto
@@ -0,0 +1,53 @@
+syntax = "proto3";
+
+package bilibili.app.show.mixture.v1;
+
+//
+service Mixture {
+ //
+ rpc Widget(WidgetReq) returns (WidgetReply);
+}
+
+//
+message RcmdReason {
+ //
+ string content = 1;
+ //
+ uint32 corner_mark = 2;
+}
+
+//
+message WidgetItem {
+ //
+ string cover = 1;
+ //
+ string view = 2;
+ //
+ RcmdReason rcmd_reason = 3;
+ //
+ string title = 4;
+ //
+ string name = 5;
+ //
+ string uri = 6;
+ //
+ string goto = 7;
+ //
+ int64 id = 8;
+ //
+ int32 view_icon = 9;
+}
+
+//
+message WidgetReply {
+ //
+ repeated WidgetItem item = 1;
+}
+
+//
+message WidgetReq {
+ //
+ string from_spmid = 1;
+ //
+ uint32 page_no = 2;
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/app/topic/v1/topic.proto b/grpc_api/bilibili/app/topic/v1/topic.proto
index 405ac9f..95c8abb 100644
--- a/grpc_api/bilibili/app/topic/v1/topic.proto
+++ b/grpc_api/bilibili/app/topic/v1/topic.proto
@@ -12,6 +12,16 @@ service Topic {
rpc TopicDetailsAll(TopicDetailsAllReq) returns (TopicDetailsAllReply);
//
rpc TopicDetailsFold(TopicDetailsFoldReq) returns (TopicDetailsFoldReply);
+ //
+ rpc TopicSetDetails(TopicSetDetailsReq) returns (TopicSetDetailsReply);
+}
+
+//
+message ButtonMeta {
+ //
+ string text = 1;
+ //
+ string icon = 2;
}
//
@@ -32,6 +42,14 @@ message DetailsTopInfo {
string head_img_backcolor = 7;
//
int32 word_color = 8;
+ //
+ int32 mission_page_show_type = 9;
+ //
+ string mission_url = 10;
+ //
+ string mission_text = 11;
+ //
+ TopicSet topic_set = 12;
}
//
@@ -154,6 +172,18 @@ message OperationContent {
OperationCard operation_card = 1;
}
+//
+message PubLayer {
+ //
+ int32 show_type = 1;
+ //
+ string jump_link = 2;
+ //
+ ButtonMeta button_meta = 3;
+ //
+ bool close_pub_layer_entry = 4;
+}
+
//
message RelationData {
//
@@ -194,6 +224,30 @@ message ThreePointItem {
string jump_url = 2;
}
+//
+message TimeLineEvents {
+ //
+ int64 event_id = 1;
+ //
+ string title = 2;
+ //
+ string time_desc = 3;
+ //
+ string jump_link = 4;
+}
+
+//
+message TimeLineResource {
+ //
+ int64 time_line_id = 1;
+ //
+ string time_line_title = 2;
+ //
+ repeated TimeLineEvents time_line_events = 3;
+ //
+ bool has_more = 4;
+}
+
//
message TopicActivities {
//
@@ -232,6 +286,8 @@ message TopicCardItem {
bilibili.app.dynamic.v2.DynamicItem dynamic_item = 2;
//
FoldCardItem ford_card_item = 3;
+ //
+ VideoSmallCardItem video_small_card_item = 4;
}
//
@@ -248,9 +304,10 @@ message TopicCardList {
//
enum TopicCardType {
- ILLEGAL_TYPE = 0; //
- DYNAMIC = 1; //
- FOLD = 2; //
+ ILLEGAL_TYPE = 0; //
+ DYNAMIC = 1; //
+ FOLD = 2; //
+ VIDEO_SMALL_CARD = 3; //
}
//
@@ -263,6 +320,12 @@ message TopicDetailsAllReply {
TopicCardList topic_card_list = 3;
//
FunctionalCard functional_card = 4;
+ //
+ PubLayer pub_layer = 5;
+ //
+ TimeLineResource time_line_resource = 6;
+ //
+ TopicServerConfig topic_server_config = 7;
}
//
@@ -283,6 +346,14 @@ message TopicDetailsAllReq {
int32 need_refresh = 7;
//
string source = 8;
+ //
+ int32 topic_details_ext_mode = 9;
+}
+
+//
+enum TopicDetailsExtMode {
+ MODE_ILLEGAL_TYPE = 0; //
+ STORY = 1; //
}
//
@@ -347,6 +418,87 @@ message TopicInfo {
string share_url = 17;
//
bool is_like = 18;
+ //
+ int32 type = 19;
+ //
+ string stats_desc = 20;
+ //
+ string fixed_topic_icon = 21;
+}
+
+//
+message TopicServerConfig {
+ //
+ int64 pub_events_increase_threshold = 1;
+ //
+ int64 pub_events_hidden_timeout_threshold = 2;
+ //
+ int64 vert_online_refresh_time = 3;
+}
+
+//
+message TopicSet {
+ //
+ int64 set_id = 1;
+ //
+ string set_name = 2;
+ //
+ string jump_url = 3;
+ //
+ string desc = 4;
+}
+
+//
+message TopicSetDetailsReply {
+ //
+ TopicSetHeadInfo topic_set_head_info = 1;
+ //
+ repeated TopicInfo topic_info = 2;
+ //
+ bool has_more = 3;
+ //
+ string offset = 4;
+ //
+ TopicSetSortCfg sort_cfg = 5;
+}
+
+//
+message TopicSetDetailsReq {
+ //
+ int64 set_id = 1;
+ //
+ int64 sort_by = 2;
+ //
+ string offset = 3;
+ //
+ int32 page_size = 4;
+}
+
+message TopicSetHeadInfo {
+ //
+ TopicSet topic_set = 1;
+ //
+ string topic_cnt_text = 2;
+ //
+ string head_img_url = 3;
+ //
+ string mission_url = 4;
+ //
+ string mission_text = 5;
+ //
+ string icon_url = 6;
+ //
+ bool is_fav = 7;
+ //
+ bool is_first_time = 8;
+}
+
+//
+message TopicSetSortCfg {
+ //
+ int64 default_sort_by = 1;
+ //
+ repeated SortContent all_sort_by = 2;
}
//
@@ -394,3 +546,35 @@ message User {
//
string name_desc = 4;
}
+
+//
+message VideoCardBase {
+ //
+ string cover = 1;
+ //
+ string title = 2;
+ //
+ string up_name = 3;
+ //
+ int64 play = 4;
+ //
+ string jump_link = 5;
+ //
+ int64 aid = 6;
+}
+
+//
+message VideoSmallCardItem {
+ //
+ VideoCardBase video_card_base = 1;
+ //
+ string cover_left_badge_text = 2;
+ //
+ int64 card_stat_icon1 = 3;
+ //
+ string card_stat_text1 = 4;
+ //
+ int64 card_stat_icon2 = 5;
+ //
+ string card_stat_text2 = 6;
+}
diff --git a/grpc_api/bilibili/app/view/v1/view.proto b/grpc_api/bilibili/app/view/v1/view.proto
index cc4babd..f874897 100644
--- a/grpc_api/bilibili/app/view/v1/view.proto
+++ b/grpc_api/bilibili/app/view/v1/view.proto
@@ -1,13 +1,19 @@
syntax = "proto3";
+
package bilibili.app.view.v1;
import "google/protobuf/any.proto";
import "bilibili/app/archive/middleware/v1/preload.proto";
import "bilibili/app/archive/v1/archive.proto";
+import "bilibili/pagination/pagination.proto";
service View {
// 视频页详情页
rpc View (ViewReq) returns (ViewReply);
+ //
+ rpc ViewTag(ViewTagReq) returns (ViewTagReply);
+ //
+ rpc ViewMaterial(ViewMaterialReq) returns (ViewMaterialReply);
// 视频播放过程中的数据
rpc ViewProgress (ViewProgressReq) returns (ViewProgressReply);
// 短视频下载
@@ -22,12 +28,28 @@ service View {
rpc ExposePlayerCard (ExposePlayerCardReq) returns (NoReply);
// 点击签订契约
rpc AddContract (AddContractReq) returns (NoReply);
+ // 资源包
+ rpc ChronosPkg(ChronosPkgReq) returns (Chronos);
//
- rpc FeedView (FeedViewReq) returns (FeedViewReply);
+ rpc CacheView(CacheViewReq) returns (CacheViewReply);
//
- rpc ChronosPkg (ChronosPkgReq) returns (Chronos);
+ rpc ContinuousPlay(ContinuousPlayReq) returns (ContinuousPlayReply);
+ // 播放页推荐IFS
+ rpc RelatesFeed(RelatesFeedReq) returns (RelatesFeedReply);
//
- rpc CacheView (CacheViewReq) returns (CacheViewReply);
+ rpc PremiereArchive(PremiereArchiveReq) returns (PremiereArchiveReply);
+ //
+ rpc Reserve(ReserveReq) returns (ReserveReply);
+ //
+ rpc PlayerRelates(PlayerRelatesReq) returns (PlayerRelatesReply);
+ //
+ rpc SeasonActivityRecord(SeasonActivityRecordReq) returns (SeasonActivityRecordReply);
+ //
+ rpc SeasonWidgetExpose(SeasonWidgetExposeReq) returns (SeasonWidgetExposeReply);
+ //
+ rpc GetArcsPlayer(GetArcsPlayerReq) returns (GetArcsPlayerReply);
+ //
+ rpc GetUser(GetUserReq) returns (GetUserReply);
}
// 活动页资源包
@@ -113,6 +135,20 @@ message ActivitySeason {
Config config = 29;
//
Online online = 30;
+ //
+ ArcExtra arc_extra = 31;
+ //
+ ReplyStyle reply_preface = 32;
+}
+
+// 点击签订契约-请求
+message AddContractReq {
+ // 稿件avid
+ int64 aid = 1;
+ // UP主mid
+ int64 up_mid = 2;
+ // 当前页面spm
+ string spmid = 3;
}
//
@@ -127,16 +163,22 @@ message AdInfo {
string ad_cb = 4;
//
int32 card_type = 5;
+ //
+ bytes extra = 6;
}
-// 点击签订契约-请求
-message AddContractReq {
- // 稿件avid
+//
+message ArcExtra {
+ //
+ string arc_pub_location = 1;
+}
+
+//
+message ArcsPlayer {
+ //
int64 aid = 1;
- // UP主mid
- int64 up_mid = 2;
- // 当前页面spm
- string spmid = 3;
+ //
+ map player_info = 2;
}
//
@@ -191,6 +233,26 @@ message Audio {
int64 song_attr = 8;
}
+//
+message BadgeStyle {
+ //
+ string text = 1;
+ //
+ string text_color = 2;
+ //
+ string text_color_night = 3;
+ //
+ string bg_color = 4;
+ //
+ string bg_color_night = 5;
+ //
+ string border_color = 6;
+ //
+ string border_color_night = 7;
+ //
+ int32 bg_style = 8;
+}
+
// 视频引用的bgm音频
message Bgm {
// 音频auid
@@ -247,12 +309,12 @@ message BizReserveGameParam {
// 业务类型
enum BizType {
- BizTypeNone = 0; //
- BizTypeFollowVideo = 1; // 追番追剧
+ BizTypeNone = 0; //
+ BizTypeFollowVideo = 1; // 追番追剧
BizTypeReserveActivity = 2; // 预约活动
- BizTypeJumpLink = 3; // 跳转链接
- BizTypeFavSeason = 4; // 收藏合集
- BizTypeReserveGame = 5; // 预约游戏
+ BizTypeJumpLink = 3; // 跳转链接
+ BizTypeFavSeason = 4; // 收藏合集
+ BizTypeReserveGame = 5; // 预约游戏
}
//
@@ -261,6 +323,24 @@ message Button {
string title = 1;
// 跳转uri
string uri = 2;
+ //
+ string icon = 3;
+}
+
+//
+message ButtonStyle {
+ //
+ string text = 1;
+ //
+ string text_color = 2;
+ //
+ string text_color_night = 3;
+ //
+ string bg_color = 4;
+ //
+ string bg_color_night = 5;
+ //
+ string jump_link = 6;
}
//
@@ -287,18 +367,6 @@ message BuzzwordConfig {
string picture = 10;
}
-// 广告
-message CM {
- // 广告数据(需解包)
- google.protobuf.Any source_content = 1;
-}
-
-// 广告配置
-message CMConfig {
- // 广告配置数据(需要二次解包)
- google.protobuf.Any ads_control = 1;
-}
-
//
message CacheViewReply {
//
@@ -349,6 +417,12 @@ message CacheViewReq {
string from_spmid = 7;
}
+//
+enum Category {
+ CategoryUnknown = 0; //
+ CategorySeason = 1; //
+}
+
// Chronos灰度管理
message Chronos {
// 资源包md5
@@ -387,6 +461,12 @@ message ClickActivitySeasonReq {
int64 action = 5;
}
+// 点击播放器卡片-响应
+message ClickPlayerCardReply {
+ //
+ string message = 1;
+}
+
// 点击播放器卡片-请求
message ClickPlayerCardReq {
// 卡片id
@@ -402,6 +482,18 @@ message ClickPlayerCardReq {
string spmid = 5;
}
+// 广告
+message CM {
+ // 广告数据(需解包)
+ google.protobuf.Any source_content = 1;
+}
+
+// 广告配置
+message CMConfig {
+ // 广告配置数据(需要二次解包)
+ google.protobuf.Any ads_control = 1;
+}
+
//
message CmIpad {
//
@@ -416,6 +508,12 @@ message CmIpad {
int64 aid = 5;
}
+//
+message CoinCustom {
+ //
+ string toast = 1;
+}
+
// 互动弹幕条目信息
message CommandDm {
// 弹幕id
@@ -423,7 +521,7 @@ message CommandDm {
// 对象视频cid
int64 oid = 2;
// 发送者mid
- string mid = 3;
+ int64 mid = 3;
// 互动弹幕指令
string command = 4;
// 互动弹幕正文
@@ -437,7 +535,7 @@ message CommandDm {
// 扩展json数据
string extra = 9;
// 弹幕id str类型
- string idStr = 10;
+ string id_str = 10;
}
//
@@ -462,6 +560,64 @@ message Config {
int32 rec_three_point_style = 9;
//
bool is_absolute_time = 10;
+ //
+ bool new_swindow = 11;
+ //
+ bool relates_biserial = 12;
+ //
+ ListenerConfig listener_conf = 13;
+ //
+ string relates_feed_style = 14;
+ //
+ bool relates_feed_popup = 15;
+ //
+ bool relates_has_next = 16;
+ //
+ int32 local_play = 17;
+ //
+ bool play_story = 18;
+ //
+ bool arc_play_story = 19;
+ //
+ string story_icon = 20;
+ //
+ bool landscape_story = 21;
+ //
+ bool arc_landscape_story = 22;
+ //
+ string landscape_icon = 23;
+ //
+ bool show_listen_button = 24;
+}
+
+//
+message ContinuousPlayReply {
+ //
+ repeated Relate relates = 1;
+}
+
+//
+message ContinuousPlayReq {
+ //
+ int64 aid = 1;
+ //
+ string from = 2;
+ //
+ string trackid = 3;
+ //
+ string spmid = 4;
+ //
+ string from_spmid = 5;
+ //
+ int32 autoplay = 6;
+ //
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 7;
+ //
+ int64 device_type = 8;
+ //
+ string session_id = 9;
+ //
+ int64 display_id = 10;
}
// 契约卡
@@ -488,6 +644,10 @@ message ContractCard {
int64 follow_display_end_duration = 9;
//
int32 is_play_display = 10;
+ //
+ int32 is_interact_display = 11;
+ //
+ bool play_display_switch = 12;
}
//
@@ -534,22 +694,11 @@ message CustomConfig {
string redirect_url = 1;
}
-// 分P弹幕信息
-message DM {
- // 分P是否关闭弹幕
- // 0:正常 1:关闭
- bool closed = 1;
- //
- bool real_name = 2;
- // 分P弹幕总数
- int64 count = 3;
-}
-
// 枚举-文本类型
enum DescType {
DescTypeUnknown = 0; // 占位
- DescTypeText = 1; // 文本
- DescTypeAt = 2; // @
+ DescTypeText = 1; // 文本
+ DescTypeAt = 2; // @
}
// 特殊稿件简介
@@ -589,6 +738,17 @@ message DislikeReasons {
string name = 5;
}
+// 分P弹幕信息
+message DM {
+ // 分P是否关闭弹幕
+ // 0:正常 1:关闭
+ bool closed = 1;
+ //
+ bool real_name = 2;
+ // 分P弹幕总数
+ int64 count = 3;
+}
+
// 错误代码
enum ECode {
DEFAULT = 0; // 正常
@@ -601,6 +761,8 @@ message ElecRank {
repeated ElecRankItem list = 1;
// 充电用户数
int64 count = 2;
+ //
+ string text = 3;
}
// 充电用户信息
@@ -615,7 +777,7 @@ message ElecRankItem {
int64 mid = 4;
}
-//视频合集单话信息
+// 视频合集单话信息
message Episode {
// 合集单话id
int64 id = 1;
@@ -639,6 +801,16 @@ message Episode {
bilibili.app.archive.v1.Author author = 10;
//
string author_desc = 11;
+ //
+ BadgeStyle badge_style = 12;
+ //
+ bool need_pay = 13;
+ //
+ bool episode_pay = 14;
+ //
+ bool free_watch = 15;
+ //
+ string first_frame = 16;
}
// 播放器卡片曝光-请求
@@ -697,6 +869,56 @@ message FeedViewReq {
string from_track_id = 10;
}
+//
+message GetArcsPlayerReply {
+ //
+ repeated ArcsPlayer arcs_player = 1;
+}
+
+//
+message GetArcsPlayerReq {
+ //
+ repeated PlayAv play_avs = 1;
+ //
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 2;
+}
+
+//
+message GetUserReq {
+ //
+ repeated int64 mids = 1;
+ //
+ int64 aid = 2;
+ //
+ int64 up_mid = 3;
+ //
+ bool only_fans = 4;
+}
+
+//
+message GetUserReply {
+ //
+ repeated User like_list = 1;
+ //
+ string title = 2;
+}
+
+//
+message GoodsInfo {
+ //
+ string goods_id = 1;
+ //
+ int32 category = 2;
+ //
+ int64 goods_price = 3;
+ //
+ PayState pay_state = 4;
+ //
+ string goods_name = 5;
+ //
+ string price_fmt = 6;
+}
+
// 稿件观看进度
message History {
// 播放进度分P cid
@@ -730,6 +952,14 @@ message Honor {
string url_text = 10;
}
+//
+message IconData {
+ //
+ string meta_json = 1;
+ //
+ string sprits_img = 2;
+}
+
//
message Interaction {
//
@@ -758,6 +988,20 @@ message Label {
int64 icon_width = 5;
//
int64 icon_height = 6;
+ //
+ string lottie = 7;
+ //
+ string lottie_night = 8;
+}
+
+//
+message LikeAnimation {
+ //
+ string like_icon = 1;
+ //
+ string liked_icon = 2;
+ //
+ string like_animation = 3;
}
//
@@ -772,6 +1016,30 @@ message LikeCustom {
int64 update_count = 4;
}
+//
+message ListenerConfig {
+ //
+ int64 jump_style = 1;
+ //
+ ListenerGuideBar guide_bar = 2;
+}
+
+//
+message ListenerGuideBar {
+ //
+ int64 show_strategy = 1;
+ //
+ string icon = 2;
+ //
+ string text = 3;
+ //
+ string btn_text = 4;
+ //
+ int64 show_time = 5;
+ //
+ int64 background_time = 6;
+}
+
// 直播信息
message Live {
// 主播UID
@@ -797,14 +1065,47 @@ message LiveOrderInfo {
}
//
-enum MaterialSource {
- Default = 0;
- BiJian = 1;
+message MaterialLeft {
+ //
+ string icon = 1;
+ //
+ string text = 2;
+ //
+ string url = 3;
+ //
+ string left_type = 4;
+ //
+ string param = 5;
+ //
+ string operational_type = 6;
+ //
+ string static_icon = 7;
}
-// 空回复
-message NoReply {
+//
+message MaterialRes {
+ //
+ int64 id = 1;
+ //
+ string icon = 2;
+ //
+ string url = 3;
+ //
+ MaterialSource type = 4;
+ //
+ string name = 5;
+ //
+ string bg_color = 6;
+ //
+ string bg_pic = 7;
+ //
+ int32 jump_type = 8;
+}
+//
+enum MaterialSource {
+ Default = 0; //
+ BiJian = 1; // 必剪
}
//
@@ -817,6 +1118,9 @@ message Node {
int64 cid = 3;
}
+// 空回复
+message NoReply {}
+
//
message Notice {
//
@@ -913,9 +1217,52 @@ message OperationCardNew {
// 卡片样式
enum OperationCardType {
- CardTypeNone = 0; //
+ CardTypeNone = 0; //
CardTypeStandard = 1; // 标准卡
- CardTypeSkip = 2; // 原跳转卡
+ CardTypeSkip = 2; // 原跳转卡
+}
+
+//
+message OperationCardV2 {
+ //
+ int64 id = 1;
+ //
+ int32 from = 2;
+ //
+ int32 to = 3;
+ //
+ bool status = 4;
+ //
+ int32 biz_type = 5;
+ //
+ OperationCardV2Content content = 6;
+ //
+ oneof param {
+ //
+ BizFollowVideoParam BizFollowVideoParam = 7;
+ //
+ BizReserveActivityParam BizReserveActivityParam = 8;
+ //
+ BizJumpLinkParam BizJumpLinkParam = 9;
+ //
+ BizReserveGameParam BizReserveGameParam = 10;
+ }
+}
+
+//
+message OperationCardV2Content {
+ //
+ string title = 1;
+ //
+ string subtitle = 2;
+ //
+ string icon = 3;
+ //
+ string button_title = 4;
+ //
+ string button_selected_title = 5;
+ //
+ bool show_selected = 6;
}
// 相关推荐(运营配置+AI推荐)
@@ -955,7 +1302,7 @@ message Order {
string intro = 10;
}
-//游戏礼包信息
+// 游戏礼包信息
message PackInfo {
// 礼包标题
string title = 1;
@@ -963,12 +1310,26 @@ message PackInfo {
string uri = 2;
}
+//
+enum PayState {
+ PayStateUnknown = 0; //
+ PayStateActive = 1; //
+}
+
+//
+message PlayAv {
+ //
+ int64 aid = 1;
+ //
+ int64 cid = 2;
+}
+
// 卡片类型
enum PlayerCardType {
- PlayerCardTypeNone_VALUE = 0; //
+ PlayerCardTypeNone_VALUE = 0; //
PlayerCardTypeAttention_VALUE = 1; // 关注卡
PlayerCardTypeOperation_VALUE = 2; // 运营卡
- PlayerCardTypeContract_VALUE = 3; // 契约卡
+ PlayerCardTypeContract_VALUE = 3; // 契约卡
}
// 进度条动画配置
@@ -981,6 +1342,42 @@ message PlayerIcon {
string url2 = 3;
// 松手动画配置档hash
string hash2 = 4;
+ //
+ string drag_left_png = 5;
+ //
+ string middle_png = 6;
+ //
+ string drag_right_png = 7;
+ //
+ IconData drag_data = 8;
+ //
+ IconData nodrag_data = 9;
+}
+
+//
+message PlayerRelatesReply {
+ //
+ repeated Relate list = 1;
+}
+
+//
+message PlayerRelatesReq {
+ //
+ int64 aid = 1;
+ //
+ string bvid = 2;
+ //
+ string from = 3;
+ //
+ string spmid = 4;
+ //
+ string from_spmid = 5;
+ //
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 6;
+ //
+ string session_id = 7;
+ //
+ string from_track_id = 8;
}
//
@@ -991,6 +1388,108 @@ message PointMaterial {
int32 material_source = 2;
}
+//
+message PowerIconStyle {
+ //
+ string icon_url = 1;
+ //
+ string icon_night_url = 2;
+ //
+ int64 icon_width = 3;
+ //
+ int64 icon_height = 4;
+}
+
+//
+message Premiere {
+ //
+ PremiereState premiere_state = 1;
+ //
+ int64 start_time = 2;
+ //
+ int64 service_time = 3;
+ //
+ int64 room_id = 4;
+}
+
+//
+message PremiereArchiveReply {
+ //
+ Premiere premiere = 1;
+ //
+ bool risk_status = 2;
+ //
+ string risk_reason = 3;
+}
+
+//
+message PremiereArchiveReq {
+ //
+ int64 aid = 1;
+}
+
+//
+message PremiereReserve {
+ //
+ int64 reserve_id = 1;
+ //
+ int64 count = 2;
+ //
+ bool is_follow = 3;
+}
+
+//
+message PremiereResource {
+ //
+ Premiere premiere = 1;
+ //
+ PremiereReserve reserve = 2;
+ //
+ PremiereText text = 3;
+}
+
+//
+enum PremiereState {
+ premiere_none = 0; //
+ premiere_before = 1; //
+ premiere_in = 2; //
+ premiere_after = 3; //
+}
+
+//
+message PremiereText {
+ //
+ string title = 1;
+ //
+ string subtitle = 2;
+ //
+ string online_text = 3;
+ //
+ string online_icon = 4;
+ //
+ string online_icon_dark = 5;
+ //
+ string intro_title = 6;
+ //
+ string intro_icon = 7;
+ //
+ string guidance_pulldown = 8;
+ //
+ string guidance_entry = 9;
+ //
+ string intro_icon_night = 10;
+}
+
+//
+message PullClientAction {
+ //
+ string type = 1;
+ //
+ bool pull_action = 2;
+ //
+ string params = 3;
+}
+
// 排行榜
message Rank {
// 排行榜icon
@@ -1001,6 +1500,26 @@ message Rank {
string text = 3;
}
+//
+message RankInfo {
+ //
+ string icon_url_night = 1;
+ //
+ string icon_url_day = 2;
+ //
+ string bkg_night_color = 3;
+ //
+ string bkg_day_color = 4;
+ //
+ string font_night_color = 5;
+ //
+ string font_day_color = 6;
+ //
+ string rank_content = 7;
+ //
+ string rank_link = 8;
+}
+
// 推荐理由样式
message ReasonStyle {
//
@@ -1053,7 +1572,19 @@ message RecThreePoint {
bool watch_later = 3;
}
-//相关推荐项
+//
+message RefreshPage {
+ //
+ int32 refreshable = 1;
+ //
+ int32 refresh_icon = 2;
+ //
+ string refresh_text = 3;
+ //
+ float refresh_show = 4;
+}
+
+// 相关推荐项
message Relate {
//
int64 aid = 1;
@@ -1124,9 +1655,28 @@ message Relate {
string unique_id = 32;
//
int64 material_id = 33;
+ //
+ int64 from_source_type = 34;
+ //
+ string from_source_id = 35;
+ //
+ bilibili.app.archive.v1.Dimension dimension = 36;
+ //
+ string cover = 37;
+ //
+ ReasonStyle badge_style = 38;
+ //
+ PowerIconStyle power_icon_style = 39;
+ //
+ string reserve_status_text = 40;
+ //
+ string dislike_report_data = 41;
+ //
+ RankInfo rank_info_game = 42;
+ //
+ string first_frame = 43;
}
-
// 相关推荐内容
message RelateItem {
// 跳链
@@ -1135,6 +1685,50 @@ message RelateItem {
string cover = 2;
}
+// 播放页推荐IFS-响应
+message RelatesFeedReply {
+ //
+ repeated Relate list = 1;
+ //
+ bool has_next = 2;
+ //
+ bilibili.pagination.PaginationReply pagination = 3;
+}
+
+// 播放页推荐IFS-请求
+message RelatesFeedReq {
+ //
+ int64 aid = 1;
+ //
+ string bvid = 2;
+ //
+ string from = 3;
+ //
+ string spmid = 4;
+ //
+ string from_spmid = 5;
+ //
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 6;
+ //
+ int64 relates_page = 7;
+ //
+ string session_id = 8;
+ //
+ int32 autoplay = 9;
+ //
+ string from_track_id = 10;
+ //
+ string biz_extra = 11;
+ //
+ int64 device_type = 12;
+ //
+ string ad_extra = 13;
+ //
+ bilibili.pagination.Pagination pagination = 14;
+ //
+ int32 refresh_num = 15;
+}
+
//
message RelateTab {
//
@@ -1143,6 +1737,16 @@ message RelateTab {
string title = 2;
}
+//
+message ReplyStyle {
+ //
+ string badge_url = 1;
+ //
+ string badge_text = 2;
+ //
+ int64 badge_type = 3;
+}
+
// 用户操作状态
message ReqUser {
// 用户是否关注UP
@@ -1161,6 +1765,24 @@ message ReqUser {
int32 attention_level = 7;
// 是否收藏合集
int32 fav_season = 8;
+ //
+ Button elec_plus_btn = 9;
+}
+
+//
+message ReserveReply {
+ //
+ int64 reserve_id = 1;
+}
+
+//
+message ReserveReq {
+ //
+ int64 reserve_id = 1;
+ //
+ int64 reserve_action = 2;
+ //
+ int64 up_id = 3;
}
//
@@ -1205,6 +1827,30 @@ message Season {
string ogv_playurl = 13;
}
+//
+message SeasonActivityRecordReply {
+ //
+ UgcSeasonActivity activity = 1;
+}
+
+//
+message SeasonActivityRecordReq {
+ //
+ int64 season_id = 1;
+ //
+ int64 activity_id = 2;
+ //
+ int32 action = 3;
+ //
+ int64 aid = 4;
+ //
+ int64 cid = 5;
+ //
+ int64 scene = 6;
+ //
+ string spmid = 7;
+}
+
//
message SeasonPlayer {
//
@@ -1229,11 +1875,51 @@ message SeasonReq {
int64 season_id = 1;
}
+//
+message SeasonShow {
+ //
+ string button_text = 1;
+ //
+ string join_text = 2;
+ //
+ string rule_text = 3;
+ //
+ string checkin_text = 4;
+ //
+ string checkin_prompt = 5;
+}
+
//
enum SeasonType {
Unknown = 0; //
- Base = 1; //
- Good = 2; //
+ Base = 1; //
+ Good = 2; //
+}
+
+//
+message SeasonWidgetExposeReply {
+ //
+ int64 season_id = 1;
+ //
+ int64 activity_id = 2;
+}
+
+//
+message SeasonWidgetExposeReq {
+ //
+ int64 mid = 1;
+ //
+ int32 type = 2;
+ //
+ int64 season_id = 3;
+ //
+ int64 activity_id = 4;
+ //
+ int64 aid = 5;
+ //
+ int64 cid = 6;
+ //
+ int64 scene = 7;
}
// 视频合集小节信息
@@ -1315,6 +2001,12 @@ message SpecialCell {
string page_title = 11;
//
string jump_type = 12;
+ //
+ string end_icon = 13;
+ //
+ string end_icon_night = 14;
+ //
+ int64 notes_count = 15;
}
// 合作成员信息
@@ -1349,8 +2041,8 @@ message StandardCard {
bool show_selected = 4;
}
-// 免流面板定制
-message TFPanelCustomized {
+// 免流子面板定制化配置
+message subTFPanel {
// 右侧按钮素材
string right_btn_img = 1;
// 右侧按钮文案
@@ -1361,16 +2053,8 @@ message TFPanelCustomized {
string right_btn_link = 4;
// 中心主文案内容
string main_label = 5;
- // 运营商(cm ct cu)
+ // 运营商
string operator = 6;
- // 子面板定制化配置
- map sub_panel = 7;
-}
-
-// TAG图标信息
-message TIcon {
- // TAG图标url
- string icon = 1;
}
// TAB
@@ -1402,15 +2086,16 @@ message Tab {
// TAB跳转类型
enum TabOtype {
UnknownOtype = 0; // 未知类型
- URL = 1; // url链接
- TopicNA = 2; // native话题活动
+ URL = 1; // url链接
+ TopicNA = 2; // native话题活动
+ CmURI = 3; // 广告url
}
// TAB样式
enum TabStyle {
UnknownStyle = 0; // 未知样式
- Text = 1; // 文字样式
- Pic = 2; // 图片样式
+ Text = 1; // 文字样式
+ Pic = 2; // 图片样式
}
// TAG信息
@@ -1434,6 +2119,51 @@ message Tag {
string tag_type = 8;
}
+// 免流面板定制
+message TFPanelCustomized {
+ // 右侧按钮素材
+ string right_btn_img = 1;
+ // 右侧按钮文案
+ string right_btn_text = 2;
+ // 右侧按钮字体颜色
+ string right_btn_text_color = 3;
+ // 右侧按钮跳转链接
+ string right_btn_link = 4;
+ // 中心主文案内容
+ string main_label = 5;
+ // 运营商(cm ct cu)
+ string operator = 6;
+ // 子面板定制化配置
+ map sub_panel = 7;
+}
+
+// TAG图标信息
+message TIcon {
+ // TAG图标url
+ string icon = 1;
+}
+
+//
+message User {
+ //
+ int64 mid = 1;
+ //
+ string name = 2;
+ //
+ string face = 3;
+ //
+ bool isFollow = 4;
+ //
+ int64 isAttention = 5;
+ //
+ int64 isInterrelation = 6;
+ //
+ int64 follower = 7;
+ //
+ string interactDesc = 8;
+ //
+}
+
// UGC视频合集信息
message UgcSeason {
// 合集id
@@ -1466,6 +2196,50 @@ message UgcSeason {
SeasonType season_type = 14;
//
bool show_continual_button = 15;
+ //
+ int64 ep_num = 16;
+ //
+ bool season_pay = 17;
+ //
+ GoodsInfo goods_info = 18;
+ //
+ ButtonStyle pay_button = 19;
+ //
+ string label_text_new = 20;
+ //
+ UgcSeasonActivity activity = 21;
+ //
+ repeated string season_ability = 22;
+}
+
+//
+message UgcSeasonActivity {
+ //
+ int32 type = 1;
+ //
+ int64 oid = 2;
+ //
+ int64 activity_id = 3;
+ //
+ string title = 4;
+ //
+ string intro = 5;
+ //
+ int32 day_count = 6;
+ //
+ int32 user_count = 7;
+ //
+ int64 join_deadline = 8;
+ //
+ int64 activity_deadline = 9;
+ //
+ int32 checkin_view_time = 10;
+ //
+ bool new_activity = 11;
+ //
+ UserActivity user_activity = 12;
+ //
+ SeasonShow season_show = 13;
}
// ugc视频合集状态数
@@ -1518,6 +2292,8 @@ message UpLikeImg {
string suc_img = 2;
//
string content = 3;
+ //
+ int64 type = 4;
}
// UP主信息
@@ -1532,10 +2308,28 @@ message UpperInfos {
int64 total_play_count = 4;
}
+//
+message UserActivity {
+ //
+ int32 user_state = 1;
+ //
+ int64 last_checkin_date = 2;
+ //
+ int32 checkin_today = 3;
+ //
+ int32 user_day_count = 4;
+ //
+ int32 user_view_time = 5;
+ //
+ string portrait = 6;
+}
+
// 用户装扮信息
message UserGarb {
// 点赞动画url
string url_image_ani_cut = 1;
+ //
+ string like_toast = 2;
}
// 用户追番标志
@@ -1546,7 +2340,7 @@ message UserSeason {
}
// 视频引导信息
-message VideoGuide{
+message VideoGuide {
// 关注按钮卡片
repeated Attention attention = 1;
// 互动弹幕
@@ -1557,6 +2351,8 @@ message VideoGuide{
repeated OperationCardNew operation_card_new = 4;
// 契约卡
ContractCard contract_card = 5;
+ //
+ repeated OperationCardV2 cards_second = 6;
}
//
@@ -1605,6 +2401,24 @@ message ViewMaterial {
string jump_url = 5;
}
+//
+message ViewMaterialReply {
+ //
+ repeated MaterialRes material_res = 1;
+ //
+ MaterialLeft material_left = 2;
+}
+
+//
+message ViewMaterialReq {
+ //
+ int64 aid = 1;
+ //
+ string bvid = 2;
+ //
+ int64 cid = 3;
+}
+
// 分P信息
message ViewPage {
// 分P基本信息
@@ -1753,6 +2567,32 @@ message ViewReply {
Online online = 47;
//
google.protobuf.Any cm_under_player = 48;
+ //
+ repeated ViewMaterial video_source = 49;
+ //
+ repeated SpecialCell special_cell_new = 50;
+ //
+ PremiereResource premiere = 51;
+ //
+ bool refresh_special_cell = 52;
+ //
+ MaterialLeft material_left = 53;
+ //
+ int64 notes_count = 54;
+ //
+ PullClientAction pull_action = 55;
+ //
+ ArcExtra arc_extra = 56;
+ //
+ bilibili.pagination.PaginationReply pagination = 57;
+ //
+ LikeAnimation like_animation = 58;
+ //
+ ReplyStyle reply_preface = 59;
+ //
+ RefreshPage refresh_page = 60;
+ //
+ CoinCustom coin_custom = 61;
}
// 视频页详情页-请求
@@ -1791,6 +2631,40 @@ message ViewReq {
string biz_extra = 16;
//
int64 device_type = 17;
+ //
+ int64 relates_page = 18;
+ //
+ string session_id = 19;
+ //
+ int32 in_feed_play = 20;
+ //
+ string play_mode = 21;
+ //
+ bilibili.pagination.Pagination pagination = 22;
+ //
+ int32 refresh = 23;
+ //
+ int32 refresh_num = 24;
+}
+
+//
+message ViewTagReply {
+ //
+ repeated SpecialCell special_cell_new = 1;
+ //
+ MaterialLeft material_left = 2;
+}
+
+//
+message ViewTagReq {
+ //
+ int64 aid = 1;
+ //
+ string bvid = 2;
+ //
+ int64 cid = 3;
+ //
+ string spmid = 4;
}
// 会员信息
@@ -1822,19 +2696,3 @@ message VipLabel {
//
string label_theme = 3;
}
-
-// 免流子面板定制化配置
-message subTFPanel {
- // 右侧按钮素材
- string right_btn_img = 1;
- // 右侧按钮文案
- string right_btn_text = 2;
- // 右侧按钮字体颜色
- string right_btn_text_color = 3;
- // 右侧按钮跳转链接
- string right_btn_link = 4;
- // 中心主文案内容
- string main_label = 5;
- // 运营商
- string operator = 6;
-}
diff --git a/grpc_api/bilibili/app/viewunite/common.proto b/grpc_api/bilibili/app/viewunite/common.proto
new file mode 100644
index 0000000..c1f2a7a
--- /dev/null
+++ b/grpc_api/bilibili/app/viewunite/common.proto
@@ -0,0 +1,2009 @@
+syntax = "proto3";
+
+package bilibili.app.viewunite.common;
+
+import "bilibili/dagw/component/avatar/v1/avatar.proto";
+import "bilibili/pagination/pagination.proto";
+import "google/protobuf/any.proto";
+
+//
+message Activity {
+ //
+ int32 id = 1;
+ //
+ string title = 2;
+ //
+ string link = 3;
+ //
+ string cover = 4;
+ //
+ int32 type = 5;
+ //
+ string ab = 6;
+ //
+ string show_name = 7;
+ //
+ string picurl = 8;
+ //
+ string picurl_selected = 9;
+ //
+ string h5_link = 10;
+ //
+ string jump_mode = 11;
+ //
+ repeated Item items = 12;
+}
+
+//
+message ActivityEntrance {
+ //
+ string activity_cover = 1;
+ //
+ string activity_title = 2;
+ //
+ string word_tag = 3;
+ //
+ string activity_subtitle = 4;
+ //
+ string activity_link = 5;
+ //
+ int32 activity_type = 6;
+ //
+ int32 reserve_id = 7;
+ //
+ int32 status = 8;
+ //
+ repeated User upper_list = 9;
+ //
+ map report = 10;
+}
+
+//
+message ActivityEntranceModule {
+ //
+ repeated ActivityEntrance activity_entrance = 1;
+}
+
+//
+message ActivityReserve {
+ //
+ string title = 1;
+ //
+ StatInfo vt = 2;
+ //
+ StatInfo danmaku = 3;
+ //
+ ReserveButton button = 4;
+}
+
+//
+message ActivityResource {
+ //
+ string mod_pool_name = 1;
+ //
+ string mod_resource_name = 2;
+}
+
+//
+message ActivityTab {
+ //
+ int32 id = 1;
+ //
+ string title = 2;
+ //
+ int32 type = 3;
+ //
+ string show_name = 4;
+ //
+ string picurl = 5;
+ //
+ string picurl_selected = 6;
+ //
+ string h5_link = 7;
+ //
+ string link = 8;
+ //
+ int32 link_type = 9;
+ //
+ int64 biz_key = 10;
+ //
+ string desc = 11;
+ //
+ string act_ext = 12;
+ //
+ map report = 13;
+}
+
+//
+message AggEpCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ string icon = 3;
+ //
+ int32 num = 4;
+ //
+ string jump_url = 5;
+}
+
+//
+message AggEps {
+ //
+ repeated AggEpCard agg_ep_cards = 1;
+ //
+ int32 place_index = 2;
+}
+
+//
+message AttentionRecommend {}
+
+//
+enum AttentionRelationStatus {
+ //
+ ARS_NONE = 0;
+ //
+ ARS_N0RELATION = 1;
+ //
+ ARS_FOLLOWHIM = 2;
+ //
+ ARS_FOLLOWME = 3;
+ //
+ ARS_BUDDY = 4;
+ //
+ ARS_SPECIAL = 5;
+ //
+ ARS_CANCELBLOCK = 6;
+}
+
+//
+message Audio {
+ //
+ map audio_info = 1;
+}
+
+//
+message AudioInfo {
+ //
+ string title = 1;
+ //
+ string cover_url = 2;
+ //
+ int64 song_id = 3;
+ //
+ int64 play_count = 4;
+ //
+ int64 reply_count = 5;
+ //
+ int64 upper_id = 6;
+ //
+ string entrance = 7;
+ //
+ int64 song_attr = 8;
+}
+
+//
+message BadgeInfo {
+ //
+ string text = 1;
+ //
+ string text_color = 2;
+ //
+ string text_color_night = 3;
+ //
+ string bg_color = 4;
+ //
+ string bg_color_night = 5;
+ //
+ string border_color = 6;
+ //
+ string border_color_night = 7;
+ //
+ int32 bg_style = 8;
+ //
+ string img = 9;
+ //
+ int32 type = 10;
+}
+
+//
+message Banner {
+ //
+ string title = 1;
+ //
+ repeated RelateItem relate_item = 2;
+}
+
+//
+message BizFavParam {
+ //
+ int64 season_id = 1;
+}
+
+//
+message BizReserveActivityParam {
+ //
+ int64 activity_id = 1;
+ //
+ string from = 2;
+ //
+ string type = 3;
+ //
+ int64 oid = 4;
+ //
+ int64 reserve_id = 5;
+}
+
+//
+message Button {
+ //
+ string title = 1;
+ //
+ string left_strikethrough_text = 2;
+ //
+ string type = 3;
+ //
+ string link = 4;
+ //
+ BadgeInfo badge_info = 5;
+ //
+ string sub_title = 6;
+}
+
+//
+message CardBasicInfo {
+ //
+ string title = 1;
+ //
+ string desc = 2;
+ //
+ string cover = 3;
+ //
+ string uri = 4;
+ //
+ string track_id = 5;
+ //
+ string unique_id = 6;
+ //
+ int64 from_source_type = 7;
+ //
+ string from_source_id = 8;
+ //
+ int64 material_id = 9;
+ //
+ string cover_gif = 10;
+ //
+ Owner author = 11;
+ //
+ int64 id = 12;
+ //
+ string from = 13;
+ //
+ string from_spmid_suffix = 14;
+ //
+ string report_flow_data = 15;
+}
+
+//
+message CardStyle {
+ //
+ int32 id = 1;
+ //
+ string name = 2;
+}
+
+//
+message Celebrity {
+ //
+ int32 id = 1;
+ //
+ string name = 2;
+ //
+ string role = 3;
+ //
+ string avatar = 4;
+ //
+ string short_desc = 5;
+ //
+ string desc = 6;
+ //
+ string character_avatar = 7;
+ //
+ string link = 8;
+ //
+ int64 mid = 9;
+ //
+ int32 is_follow = 10;
+ //
+ string occupation_name = 11;
+ //
+ int32 occupation_type = 12;
+ //
+ int32 relate_attr = 13;
+ //
+ string small_avatar = 14;
+ //
+ map report = 15;
+}
+
+//
+message CharacterGroup {
+ //
+ string title = 1;
+ //
+ repeated Celebrity characters = 2;
+}
+
+//
+message Characters {
+ //
+ repeated CharacterGroup groups = 1;
+}
+
+//
+message CoinExtend {
+ //
+ string coin_app_zip_icon = 1;
+ //
+ string coin_app_icon_1 = 2;
+ //
+ string coin_app_icon_2 = 3;
+ //
+ string coin_app_icon_3 = 4;
+ //
+ string coin_app_icon_4 = 5;
+}
+
+//
+message CombinationEp {
+ //
+ int32 id = 1;
+ //
+ int32 section_id = 2;
+ //
+ string title = 3;
+ //
+ int32 can_ord_desc = 4;
+ //
+ string more = 5;
+ //
+ repeated int32 episode_ids = 6;
+ //
+ repeated ViewEpisode episodes = 7;
+ //
+ string split_text = 8;
+ //
+ Style module_style = 9;
+ //
+ repeated SerialSeason serial_season = 10;
+ //
+ SectionData section_data = 11;
+}
+
+//
+message Covenanter {}
+
+//
+message DeliveryData {
+ //
+ string title = 1;
+ //
+ Style module_style = 2;
+ //
+ string more = 3;
+ //
+ oneof data {
+ //
+ Activity activity = 4;
+ //
+ Characters characters = 5;
+ //
+ TheatreHotTopic theatre_hot_topic = 6;
+ //
+ AggEps agg_eps = 7;
+ }
+ //
+ int32 id = 8;
+ //
+ map report = 9;
+}
+
+//
+message Desc {
+ //
+ string info = 1;
+ //
+ string title = 2;
+}
+
+enum DescType {
+ //
+ DescTypeUnknown = 0;
+ //
+ DescTypeText = 1;
+ //
+ DescTypeAt = 2;
+}
+
+//
+message DescV2 {
+ //
+ string text = 1;
+ //
+ int32 type = 2;
+ //
+ string uri = 3;
+ //
+ int64 rid = 4;
+}
+
+//
+message Dimension {
+ //
+ int64 width = 1;
+ //
+ int64 height = 2;
+ //
+ int64 rotate = 3;
+}
+
+//
+message DislikeReasons {
+ //
+ int64 id = 1;
+ //
+ int64 mid = 2;
+ //
+ int32 rid = 3;
+ //
+ int64 tag_id = 4;
+ //
+ string name = 5;
+}
+
+//
+message FollowLayer {
+ //
+ Staff staff = 1;
+ //
+ Desc desc = 2;
+ //
+ map report = 3;
+}
+
+//
+message Headline {
+ //
+ Label label = 1;
+ //
+ string content = 2;
+}
+
+//
+message HistoryNode {
+ //
+ int64 node_id = 1;
+ //
+ string title = 2;
+ //
+ int64 cid = 3;
+}
+
+// 荣誉 Banner
+message Honor {
+ //
+ string icon = 1;
+ //
+ string icon_night = 2;
+ //
+ string text = 3;
+ //
+ string text_extra = 4;
+ //
+ string text_color = 5;
+ //
+ string text_color_night = 6;
+ //
+ string bg_color = 7;
+ //
+ string bg_color_night = 8;
+ //
+ string url = 9;
+ //
+ string url_text = 10;
+ //
+ HonorType type = 11;
+ //
+ HonorJumpType honor_jump_type = 12;
+ //
+ map report = 13;
+}
+
+// 荣誉 Banner 跳转类型
+enum HonorJumpType {
+ //
+ HONOR_JUMP_TYPE_UNKNOWN = 0;
+ //
+ HONOR_OPEN_URL = 1;
+ //
+ HONOR_HALF_SCREEN = 2;
+}
+
+// 荣誉类型
+enum HonorType {
+ //
+ HONOR_NONE = 0;
+ //
+ PLAYLET = 1;
+ // 视频存在争议
+ ARGUE = 2;
+ //
+ NOTICE = 3;
+ //
+ GUIDANCE = 4;
+ // 哔哩哔哩榜
+ HONOR_BILI_RANK = 5;
+ // 周榜
+ HONOR_WEEKLY_RANK = 6;
+ // 日榜
+ HONOR_DAILY_RANK = 7;
+ //
+ HONOR_CHANNEL = 8;
+ // 音乐榜?
+ HONOR_MUSIC = 9;
+ //
+ HONOR_REPLY = 10;
+}
+
+//
+message IconFont {
+ //
+ string name = 1;
+ //
+ string text = 2;
+}
+
+//
+message Interaction {
+ //
+ int64 ep_id = 1;
+ //
+ HistoryNode history_node = 2;
+ //
+ int64 graph_version = 3;
+ //
+ string msg = 4;
+ //
+ bool is_interaction = 5;
+}
+
+//
+message Item {
+ //
+ string link = 1;
+ //
+ string cover = 2;
+}
+
+//
+message KingPos {
+ //
+ bool disable = 1;
+ //
+ string icon = 2;
+ //
+ KingPositionType type = 3;
+ //
+ string disable_toast = 4;
+ //
+ string checked_post = 5;
+ //
+ oneof extend {
+ //
+ LikeExtend like = 6;
+ //
+ CoinExtend coin = 7;
+ }
+}
+
+//
+message KingPosition {
+ //
+ repeated KingPos king_pos = 1;
+ //
+ repeated KingPos extenf = 2;
+}
+
+//
+enum KingPositionType {
+ //
+ KING_POS_UNSPECIFIED = 0;
+ //
+ LIKE = 1;
+ //
+ DISLIKE = 2;
+ //
+ COIN = 3;
+ //
+ FAV = 4;
+ //
+ SHARE = 5;
+ //
+ CACHE = 6;
+ //
+ DANMAKU = 7;
+}
+
+//
+message Label {
+ //
+ int32 type = 1;
+ //
+ string uri = 2;
+ //
+ string icon = 3;
+ //
+ string icon_night = 4;
+ //
+ int64 icon_width = 5;
+ //
+ int64 icon_height = 6;
+ //
+ string lottie = 7;
+ //
+ string lottie_night = 8;
+}
+
+//
+message LikeComment {
+ //
+ string reply = 1;
+ //
+ string title = 2;
+}
+
+//
+message LikeExtend {
+ //
+ UpLikeImg triple_like = 1;
+ //
+ string like_animation = 2;
+ //
+ PlayerAnimation player_animation = 3;
+ //
+ ActivityResource resource = 4;
+}
+
+//
+message Live {
+ //
+ int64 mid = 1;
+ //
+ int64 room_id = 2;
+ //
+ string uri = 3;
+ //
+ string endpage_uri = 4;
+}
+
+// 直播预约信息
+message LiveOrder {
+ //
+ int64 sid = 1;
+ //
+ string text = 2;
+ //
+ int64 live_plan_start_time = 3;
+ //
+ bool is_follow = 4;
+ //
+ int64 follow_count = 5;
+}
+
+//
+message Mine {
+ //
+ double amount = 1;
+ //
+ int32 rank = 2;
+ //
+ string msg = 3;
+}
+
+//
+message Module {
+ //
+ ModuleType type = 1;
+ //
+ oneof data {
+ //
+ OgvIntroduction ogv_introduction = 2;
+ //
+ UgcIntroduction ugc_introduction = 3;
+ //
+ KingPosition king_position = 4;
+ //
+ Headline head_line = 5;
+ //
+ OgvTitle ogv_title = 6;
+ //
+ Honor honor = 7;
+ //
+ UserList list = 8;
+ //
+ Staffs staffs = 9;
+ //
+ ActivityReserve activity_reserve = 10;
+ //
+ LiveOrder live_order = 11;
+ //
+ SectionData section_data = 12;
+ //
+ DeliveryData delivery_data = 13;
+ //
+ FollowLayer follow_layer = 14;
+ //
+ OgvSeasons ogv_seasons = 15;
+ //
+ UgcSeasons ugc_season = 16;
+ //
+ OgvLiveReserve ogv_live_reserve = 17;
+ //
+ CombinationEp combination_ep = 18;
+ //
+ Sponsor sponsor = 19;
+ //
+ ActivityEntranceModule activity_entrance_module = 20;
+ //
+ SerialSeason serial_season = 21;
+ //
+ Relates relates = 22;
+ //
+ Banner banner = 23;
+ //
+ Audio audio = 24;
+ //
+ LikeComment like_comment = 25;
+ //
+ AttentionRecommend attention_recommend = 26;
+ //
+ Covenanter covenanter = 27;
+ }
+}
+
+enum ModuleType {
+ //
+ UNKNOWN = 0;
+ //
+ OGV_INTRODUCTION = 1;
+ //
+ OGV_TITLE = 2;
+ //
+ UGC_HEADLINE = 3;
+ //
+ UGC_INTRODUCTION = 4;
+ //
+ KING_POSITION = 5;
+ //
+ MASTER_USER_LIST = 6;
+ //
+ STAFFS = 7;
+ //
+ HONOR = 8;
+ //
+ OWNER = 9;
+ //
+ PAGE = 10;
+ //
+ ACTIVITY_RESERVE = 11;
+ //
+ LIVE_ORDER = 12;
+ //
+ POSITIVE = 13;
+ //
+ SECTION = 14;
+ //
+ RELATE = 15;
+ //
+ PUGV = 16;
+ //
+ COLLECTION_CARD = 17;
+ //
+ ACTIVITY = 18;
+ //
+ CHARACTER = 19;
+ //
+ FOLLOW_LAYER = 20;
+ //
+ OGV_SEASONS = 21;
+ //
+ UGC_SEASON = 22;
+ //
+ OGV_LIVE_RESERVE = 23;
+ //
+ COMBINATION_EPISODE = 24;
+ //
+ SPONSOR = 25;
+ //
+ ACTIVITY_ENTRANCE = 26;
+ //
+ THEATRE_HOT_TOPIC = 27;
+ //
+ RELATED_RECOMMEND = 28;
+ //
+ PAY_BAR = 29;
+ //
+ BANNER = 30;
+ //
+ AUDIO = 31;
+ //
+ AGG_CARD = 32;
+ //
+ SINGLE_EP = 33;
+ //
+ LIKE_COMMENT = 34;
+ //
+ ATTENTION_RECOMMEND = 35;
+ //
+ COVENANTER = 36;
+}
+
+//
+message MultiViewEp {
+ //
+ int64 ep_id =1;
+}
+
+//
+message NewEp {
+ //
+ int32 id = 1;
+ //
+ string title = 2;
+ //
+ string desc = 3;
+ //
+ int32 is_new = 4;
+ //
+ string more = 5;
+ //
+ string cover = 6;
+ //
+ string index_show = 7;
+}
+
+//
+enum OccupationType {
+ //
+ STAFF = 0;
+ //
+ CAST = 1;
+}
+
+//
+message OfficialVerify {
+ //
+ int32 type = 1;
+ //
+ string desc = 2;
+}
+
+//
+message OgvIntroduction {
+ //
+ string followers = 1;
+ //
+ string score = 2;
+ //
+ StatInfo play_data = 3;
+}
+
+//
+message OgvLiveReserve {
+ //
+ int64 reserve_id = 1;
+ //
+ string title = 2;
+ //
+ string icon = 3;
+ //
+ string night_icon = 4;
+ //
+ string click_button = 5;
+ //
+ string link = 6;
+ //
+ int32 follow_video_is_reserve_live = 7;
+ //
+ string bg_color = 8;
+ //
+ string night_bg_color = 9;
+ //
+ string text_color = 10;
+ //
+ string night_text_color = 11;
+ //
+ string bt_bg_color = 12;
+ //
+ string bt_frame_color = 13;
+ //
+ string night_bt_bg_color = 14;
+ //
+ string night_bt_frame_color = 15;
+ //
+ int32 active_type = 16;
+ //
+ int32 reserve_status = 17;
+ //
+ string bt_text_color = 18;
+ //
+ string night_bt_text_color = 19;
+ //
+ map report = 20;
+}
+
+//
+message OgvSeasons {
+ //
+ string title = 1;
+ //
+ repeated SerialSeason serial_season = 2;
+ //
+ SerialSeasonCoverStyle style = 3;
+}
+
+//
+message OgvTitle {
+ //
+ string title = 1;
+ //
+ BadgeInfo badge_info = 2;
+ //
+ int32 is_show_btn_animation = 3;
+ //
+ int32 follow_video_is_reserve_live = 4;
+ //
+ int64 reserve_id = 5;
+ //
+ TitleDeliveryButton title_delivery_button = 6;
+}
+
+//
+message Owner {
+ bilibili.dagw.component.avatar.v1.AvatarItem avatar = 1;
+ //
+ string url = 2;
+ //
+ string title = 3;
+ //
+ string fans = 4;
+ //
+ string arc_count = 5;
+ //
+ int32 attention = 6;
+ //
+ int32 attention_relation = 7;
+ //
+ string pub_location = 8;
+ //
+ Vip vip = 9;
+ //
+ string title_url = 10;
+ //
+ string face = 11;
+ //
+ int64 mid = 12;
+ //
+ OfficialVerify official_verify = 13;
+ //
+ Live live = 14;
+ //
+ int64 fans_num = 15;
+ //
+ repeated int64 assists = 16;
+}
+
+//
+message Page {
+ //
+ int64 cid = 1;
+ //
+ string part = 2;
+ //
+ int64 duration = 3;
+ //
+ string desc = 4;
+ //
+ Dimension dimension = 5;
+ //
+ string dl_title = 6;
+ //
+ string dl_subtitle = 7;
+}
+
+//
+message Pendant {
+ //
+ int32 pid = 1;
+ //
+ string name = 2;
+ //
+ string image = 3;
+}
+
+//
+message PlayerAnimation {
+ //
+ string player_icon = 1;
+ //
+ string player_triple_icon = 2;
+}
+
+//
+message PointActivity {
+ //
+ string tip = 1;
+ //
+ string content = 2;
+ //
+ string link = 3;
+}
+
+//
+message PowerIconStyle {
+ //
+ string icon_url = 1;
+ //
+ string icon_night_url = 2;
+ //
+ int64 icon_width = 3;
+ //
+ int64 icon_height = 4;
+}
+
+//
+message Rank {
+ //
+ string icon = 1;
+ //
+ string icon_night = 2;
+ //
+ string text = 3;
+}
+
+//
+message RankInfo {
+ //
+ string icon_url_night = 1;
+ //
+ string icon_url_day = 2;
+ //
+ string bkg_night_color = 3;
+ //
+ string bkg_day_color = 4;
+ //
+ string font_night_color = 5;
+ //
+ string font_day_color = 6;
+ //
+ string rank_content = 7;
+ //
+ string rank_link = 8;
+}
+
+//
+message Rating {
+ //
+ string score = 1;
+ //
+ int32 count = 2;
+}
+
+// 视频详情下方推荐卡子类型: 普通视频
+message RelateAVCard {
+ //
+ int64 duration = 1;
+ //
+ int64 cid = 2;
+ //
+ Dimension dimension = 3;
+ //
+ Stat stat = 4;
+ //
+ string jump_url = 5;
+ //
+ bool show_up_name = 6;
+ //
+ BadgeInfo rcmd_reason = 7;
+}
+
+// 视频详情下方推荐卡子类型: 番剧(小卡?)
+message RelateBangumiAvCard {
+ //
+ BadgeInfo badge = 1;
+ //
+ Stat stat = 2;
+ //
+ Rating rating = 3;
+}
+
+// 视频详情下方推荐卡子类型: 番剧(大卡?)
+message RelateBangumiCard {
+ //
+ int32 season_id = 1;
+ //
+ int32 season_type = 2;
+ //
+ NewEp new_ep = 3;
+ //
+ Stat stat = 4;
+ //
+ Rating rating = 5;
+ //
+ string rcmd_reason = 6;
+ //
+ BadgeInfo badge_info = 7;
+ //
+ string goto_type = 8;
+ //
+ map report = 9;
+}
+
+// 视频详情下方推荐卡子类型: 番剧集?
+message RelateBangumiResourceCard {
+ //
+ int32 type = 1;
+ //
+ string scover = 2;
+ //
+ int32 re_type = 3;
+ //
+ string re_value = 4;
+ //
+ string corner = 5;
+ //
+ int32 card = 6;
+ //
+ string siz = 7;
+ //
+ int32 position = 8;
+ //
+ string rcmd_reason = 9;
+ //
+ string label = 10;
+ //
+ map report = 11;
+ //
+ string goto_type = 12;
+}
+
+// 视频详情下方推荐卡子类型: UGC 番剧?
+message RelateBangumiUgcCard {
+ //
+ BadgeInfo badge = 1;
+ //
+ Stat stat = 2;
+ //
+ Rating rating = 3;
+}
+
+// 视频详情下方推荐卡
+message RelateCard {
+ //
+ RelateCardType relate_card_type = 1;
+ //
+ oneof card {
+ //
+ RelateAVCard av = 2;
+ //
+ RelateBangumiCard bangumi = 3;
+ //
+ RelateBangumiResourceCard resource = 4;
+ //
+ RelateGameCard game = 5;
+ //
+ RelateCMCard cm = 6;
+ //
+ RelateLiveCard live = 7;
+ //
+ RelateBangumiAvCard bangumi_av = 8;
+ //
+ RelatedAICard ai_card = 9;
+ //
+ RelateBangumiUgcCard bangumi_ugc = 13;
+ //
+ RelateSpecial special = 14;
+ }
+ //
+ RelateThreePoint three_point = 10;
+ //
+ google.protobuf.Any cm_stock = 11;
+ //
+ CardBasicInfo basic_info = 12;
+}
+
+// 视频详情下方推荐卡子类型
+enum RelateCardType {
+ //
+ CARD_TYPE_UNKNOWN = 0;
+ //
+ AV = 1;
+ //
+ BANGUMI = 2;
+ //
+ RESOURCE = 3;
+ //
+ GAME = 4;
+ //
+ CM = 5;
+ //
+ LIVE = 6;
+ //
+ AI_RECOMMEND = 7;
+ //
+ BANGUMI_AV = 8;
+ //
+ BANGUMI_UGC = 9;
+ //
+ SPECIAL = 10;
+}
+
+// 视频详情下方推荐卡子类型: 广告推广
+message RelateCMCard {
+ //
+ int64 aid = 1;
+ //
+ google.protobuf.Any source_content = 2;
+ //
+ int64 duration = 3;
+ //
+ Stat stat = 4;
+}
+
+// 视频详情下方推荐配置
+message RelateConfig {
+ //
+ int64 valid_show_m = 1;
+ //
+ int64 valid_show_n = 2;
+ //
+ bilibili.pagination.Pagination pagination = 3;
+ //
+ bool can_load_more = 4;
+}
+
+// 视频详情下方推荐卡子类型: AI 推荐?
+message RelatedAICard {
+ //
+ int64 aid = 1;
+ //
+ int64 duration = 2;
+ //
+ Staff up_info = 3;
+ //
+ Stat stat = 4;
+ //
+ map report = 5;
+ //
+ string goto_type = 6;
+}
+
+// 视频详情下方推荐卡子类型: 点击不喜欢后占位卡片
+message RelateDislike {
+ //
+ string title = 1;
+ //
+ string sub_title = 2;
+ //
+ string closed_sub_title = 3;
+ //
+ string paste_text = 4;
+ //
+ string closed_paste_text = 5;
+ //
+ repeated DislikeReasons dislike_reason = 6;
+ //
+ string toast = 7;
+ //
+ string closed_toast = 8;
+}
+
+// 视频详情下方推荐卡子类型: 游戏推广
+message RelateGameCard {
+ //
+ int64 reserve_status = 1;
+ //
+ string reserve_status_text = 2;
+ //
+ string reserve = 3;
+ //
+ float rating = 4;
+ //
+ string tag_name = 5;
+ //
+ RankInfo rank_info = 6;
+ //
+ Button pack_info = 7;
+ //
+ Button notice = 8;
+ //
+ PowerIconStyle power_icon_style = 9;
+ //
+ string game_rcmd_reason = 10;
+ //
+ WikiInfo wiki_info = 11;
+ //
+ BadgeInfo badge = 12;
+}
+
+//
+message RelateItem {
+ //
+ string url = 1;
+ //
+ string cover = 2;
+ //
+ bool use_default_browser = 3;
+}
+
+// 视频详情下方推荐卡子类型: 直播
+message RelateLiveCard {
+ //
+ int64 icon_type = 1;
+ //
+ string area_name = 2;
+ //
+ int64 watched_show = 3;
+ //
+ int64 live_status = 4;
+}
+
+// 视频下方推荐区
+message Relates {
+ //
+ repeated RelateCard cards = 1;
+ //
+ RelateConfig config = 2;
+}
+
+// 视频详情下方推荐卡子类型: 其他特殊
+message RelateSpecial {
+ //
+ BadgeInfo badge = 1;
+ //
+ BadgeInfo rcmd_reason = 2;
+}
+
+// 视频详情下方推荐卡右上角三点的内容
+message RelateThreePoint {
+ //
+ RelateDislike dislike = 1;
+ //
+ RelateDislike feedback = 2;
+ //
+ bool watch_later = 3;
+ //
+ string dislike_report_data = 4;
+}
+
+//
+enum ReserveBizType {
+ //
+ BizTypeNone = 0;
+ //
+ BizTypeReserveActivity = 1;
+ //
+ BizTypeFavSeason = 2;
+}
+
+//
+message ReserveButton {
+ //
+ bool status = 1;
+ //
+ string text = 3;
+ //
+ string selected_text = 4;
+ //
+ ReserveBizType order_type = 7;
+ //
+ oneof order_param {
+ //
+ BizReserveActivityParam reserve = 8;
+ //
+ BizFavParam fav = 9;
+ }
+}
+
+//
+message Rights {
+ //
+ int32 allow_download = 1;
+ //
+ int32 allow_review = 2;
+ //
+ int32 can_watch = 3;
+ //
+ string resource = 4;
+ //
+ int32 allow_dm = 5;
+ //
+ int32 allow_demand = 6;
+ // 区域限制
+ int32 area_limit = 7;
+}
+
+//
+message SeasonHead {
+ //
+ string title = 1;
+ //
+ string intro = 2;
+ //
+ StatInfo vt = 3;
+ //
+ StatInfo danmaku = 4;
+}
+
+//
+message SeasonShow {
+ //
+ string button_text = 1;
+ //
+ string join_text = 2;
+ //
+ string rule_text = 3;
+ //
+ string checkin_text = 4;
+ //
+ string checkin_prompt = 5;
+}
+
+enum SeasonType {
+ //
+ Unknown = 0;
+ //
+ Base = 1;
+ //
+ Good = 2;
+}
+
+//
+message SectionData {
+ //
+ int32 id = 1;
+ //
+ int32 section_id = 2;
+ //
+ string title = 3;
+ //
+ int32 can_ord_desc = 4;
+ //
+ string more = 5;
+ //
+ repeated int32 episode_ids = 6;
+ //
+ repeated ViewEpisode episodes = 7;
+ //
+ string split_text = 8;
+ //
+ Style module_style = 9;
+ //
+ string more_bottom_desc = 10;
+ //
+ repeated SerialSeason seasons = 11;
+ //
+ Button more_left = 12;
+ //
+ int32 type = 13;
+ //
+ map report = 14;
+}
+
+//
+message SerialSeason {
+ //
+ int32 season_id = 1;
+ //
+ string title = 2;
+ //
+ string season_title = 3;
+ //
+ int32 is_new = 4;
+ //
+ string cover = 5;
+ //
+ string badge = 6;
+ //
+ int32 badge_type = 7;
+ //
+ BadgeInfo badge_info = 8;
+ //
+ string link = 9;
+ //
+ string resource = 10;
+ //
+ NewEp new_ep = 11;
+}
+
+enum SerialSeasonCoverStyle {
+ //
+ TITLE = 0;
+ //
+ PICTURE = 1;
+}
+
+//
+message SkipRange {
+ //
+ int32 start = 1;
+ //
+ int32 end = 2;
+}
+
+//
+message Sponsor {
+ //
+ int64 total = 1;
+ //
+ int64 week = 2;
+ //
+ repeated SponsorRank rank_list = 3;
+ //
+ Mine mine = 4;
+ //
+ PointActivity point_activity = 5;
+ //
+ repeated Pendant pendants = 6;
+ //
+ repeated Threshold threshold = 7;
+}
+
+//
+message SponsorRank {
+ //
+ int64 uid = 1;
+ //
+ string msg = 2;
+ //
+ string uname = 3;
+ //
+ string face = 4;
+ //
+ Vip vip = 5;
+}
+
+//
+message Staff {
+ //
+ int64 mid = 1;
+ //
+ int32 attention = 2;
+ //
+ string title = 3;
+ //
+ string name = 4;
+ //
+ string face = 5;
+ //
+ OfficialVerify official = 6;
+ //
+ Vip vip = 7;
+ //
+ int32 label_style = 8;
+ //
+ string fans = 9;
+}
+
+//
+message Staffs {
+ //
+ repeated Staff staff = 1;
+ //
+ string title = 2;
+}
+
+//
+message Stat {
+ // 视频观看时长
+ StatInfo vt = 1;
+ // 弹幕
+ StatInfo danmaku = 2;
+ // 回复数
+ int64 reply = 3;
+ // 收藏数
+ int64 fav = 4;
+ // 硬币数
+ int64 coin = 5;
+ // 分享数
+ int64 share = 6;
+ // 点赞数
+ int64 like = 7;
+ // 关注数
+ int64 follow = 8;
+}
+
+//
+message StatInfo {
+ //
+ int64 value = 1;
+ //
+ string text = 2;
+ //
+ string pure_text = 3;
+ //
+ string icon = 4;
+}
+
+//
+message Style {
+ //
+ int32 line = 1;
+ //
+ int32 hidden = 2;
+ //
+ repeated string show_pages = 3;
+}
+
+//
+message Tag {
+ //
+ int64 tag_id = 1;
+ //
+ string name = 2;
+ //
+ string uri = 3;
+ //
+ string tag_type = 4;
+}
+
+//
+message TheatreHotTopic {
+ //
+ int64 theatre_id = 1;
+ //
+ int64 theatre_set_id = 2;
+ //
+ string theatre_title = 3;
+ //
+ string background_image_url = 4;
+ //
+ string theatre_url = 5;
+ //
+ int64 hot_topic_id = 6;
+ // Original one is hottopicsetid, here renamed
+ int64 hot_topic_set_id = 7;
+ // Original one is hottopictitle, here renamed
+ string hot_topic_title = 8;
+ //
+ string hot_topic_url = 9;
+ //
+ int32 is_subscribe = 10;
+ //
+ map report = 11;
+}
+
+//
+message Threshold {
+ //
+ int32 bp = 1;
+ //
+ int32 days = 2;
+ //
+ string days_text = 3;
+}
+
+//
+message TitleDeliveryButton {
+ //
+ string icon = 1;
+ //
+ string title = 2;
+ //
+ string link = 3;
+ //
+ map report = 4;
+}
+
+//
+message UgcEpisode {
+ //
+ int64 id = 1;
+ //
+ int64 aid = 2;
+ //
+ int64 cid = 3;
+ //
+ string title = 4;
+ //
+ string cover = 5;
+ //
+ string cover_right_text = 6;
+ //
+ Page page = 7;
+ //
+ StatInfo vt = 8;
+ //
+ StatInfo danmaku = 9;
+}
+
+//
+message UgcIntroduction {
+ //
+ repeated Tag tags = 1;
+ //
+ Rating rating = 2;
+ //
+ Rank rank = 3;
+ //
+ repeated ViewMaterial bgm = 4;
+ //
+ repeated ViewMaterial sticker = 5;
+ //
+ repeated ViewMaterial video_source = 6;
+ //
+ int64 pubdate = 7;
+ //
+ repeated DescV2 desc = 8;
+}
+
+//
+message UgcSeasonActivity {
+ //
+ int32 type = 1;
+ //
+ int64 oid = 2;
+ //
+ int64 activity_id = 3;
+ //
+ string title = 4;
+ //
+ string intro = 5;
+ //
+ int32 day_count = 6;
+ //
+ int32 user_count = 7;
+ //
+ int64 join_deadline = 8;
+ //
+ int64 activity_deadline = 9;
+ //
+ int32 checkin_view_time = 10;
+ //
+ bool new_activity = 11;
+ //
+ UserActivity user_activity = 12;
+ //
+ SeasonShow season_show = 13;
+}
+
+//
+message UgcSeasons {
+ //
+ int64 id = 1;
+ //
+ string title = 2;
+ //
+ string cover = 3;
+ //
+ string supernatant_title = 4;
+ //
+ repeated UgcSection section = 5;
+ //
+ string union_title = 6;
+ //
+ SeasonHead head = 7;
+ //
+ int64 ep_count = 8;
+ //
+ int32 season_type = 9;
+ //
+ UgcSeasonActivity activity = 10;
+ //
+ repeated string season_ability = 11;
+ //
+ string season_title = 12;
+}
+
+//
+message UgcSection {
+ //
+ int64 id = 1;
+ //
+ string title = 2;
+ //
+ int64 type = 3;
+ //
+ repeated UgcEpisode episodes = 4;
+}
+
+//
+message UpLikeImg {
+ //
+ string pre_img = 1;
+ //
+ string suc_img = 2;
+ //
+ string content = 3;
+ //
+ int64 type = 4;
+}
+
+//
+message User {
+ //
+ int64 mid = 1;
+ //
+ string name = 2;
+ //
+ string face = 3;
+ //
+ int64 follower = 4;
+}
+
+//
+message UserActivity {
+ //
+ int32 user_state = 1;
+ //
+ int64 last_checkin_date = 2;
+ //
+ int32 checkin_today = 3;
+ //
+ int32 user_day_count = 4;
+ //
+ int32 user_view_time = 5;
+ //
+ string portrait = 6;
+}
+
+//
+message UserList {
+ //
+ repeated User list = 1;
+ //
+ string title = 2;
+}
+
+//
+message UserStatus {
+ //
+ int32 show = 1;
+ //
+ int32 follow = 2;
+}
+
+//
+message ViewEpisode {
+ //
+ int64 ep_id = 1;
+ //
+ string badge = 2;
+ //
+ int32 badge_type = 3;
+ //
+ BadgeInfo badge_info = 4;
+ //
+ int32 duration = 5;
+ //
+ int32 status = 6;
+ //
+ string cover = 7;
+ //
+ int64 aid = 8;
+ //
+ string title = 9;
+ //
+ string movie_title = 10;
+ //
+ string subtitle = 11;
+ //
+ string long_title = 12;
+ //
+ string toast_title = 13;
+ //
+ int64 cid = 14;
+ //
+ string from = 15;
+ //
+ string share_url = 16;
+ //
+ string share_copy = 17;
+ //
+ string short_link = 18;
+ //
+ string vid = 19;
+ //
+ string release_date = 20;
+ //
+ Dimension dimension = 21;
+ //
+ Rights rights = 22;
+ //
+ Interaction interaction = 23;
+ //
+ string bvid = 24;
+ //
+ int32 archive_attr = 25;
+ //
+ string link = 26;
+ //
+ string link_type = 27;
+ //
+ string bmid = 28;
+ //
+ int64 pub_time = 29;
+ //
+ int32 pv = 30;
+ //
+ int32 ep_index = 31;
+ //
+ int32 section_index = 32;
+ //
+ repeated Staff up_infos = 33;
+ //
+ Staff up_info = 34;
+ //
+ string dialog_type = 35;
+ //
+ string toast_type = 36;
+ //
+ repeated MultiViewEp multi_view_eps = 37;
+ //
+ bool is_sub_view = 38;
+ //
+ bool is_view_hide = 39;
+ //
+ string jump_link = 40;
+ //
+ Stat stat_for_unity = 41;
+ //
+ map report = 42;
+}
+
+//
+message ViewMaterial {
+ //
+ int64 oid = 1;
+ //
+ int64 mid = 2;
+ //
+ string title = 3;
+ //
+ string author = 4;
+ //
+ string jump_url = 5;
+}
+
+//
+message Vip {
+ //
+ int32 type = 1;
+ //
+ int32 vip_status = 2;
+ //
+ int32 theme_type = 3;
+ //
+ VipLabel label = 4;
+ //
+ int32 is_vip = 5;
+}
+
+//
+message VipLabel {
+ //
+ string path = 1;
+ //
+ string text = 2;
+ //
+ string label_theme = 3;
+}
+
+//
+message WikiInfo {
+ //
+ string wiki_label = 1;
+ //
+ string wiki_url = 2;
+}
diff --git a/grpc_api/bilibili/app/viewunite/pgcanymodel.proto b/grpc_api/bilibili/app/viewunite/pgcanymodel.proto
new file mode 100644
index 0000000..b2245c9
--- /dev/null
+++ b/grpc_api/bilibili/app/viewunite/pgcanymodel.proto
@@ -0,0 +1,245 @@
+syntax = "proto3";
+
+package bilibili.app.viewunite.pgcanymodel;
+
+import "bilibili/app/viewunite/common.proto";
+
+//
+message Earphone {
+ //
+ string product_model = 1;
+ //
+ string like_toast_text = 2;
+ //
+ string switch_toast_text = 3;
+ //
+ string like_toast_voice = 4;
+}
+
+//
+message EarphoneConf {
+ //
+ repeated Earphone sp_phones = 1;
+}
+
+//
+message MultiViewInfo {
+ //
+ bool is_multi_view_season = 1;
+ //
+ string changing_dance = 2;
+}
+
+//
+message OgvData {
+ //
+ int32 media_id = 1;
+ //
+ int64 season_id = 2;
+ //
+ int32 season_type = 3;
+ //
+ int32 show_season_type = 4;
+ //
+ Rights rights = 5;
+ //
+ UserStatus user_status = 6;
+ //
+ int64 aid = 7;
+ //
+ Stat stat = 8;
+ //
+ int32 mode = 9;
+ //
+ Publish publish = 10;
+ //
+ PlayStrategy play_strategy = 11;
+ //
+ MultiViewInfo multi_view_info = 12;
+ //
+ OgvSwitch ogv_switch = 13;
+ //
+ int32 total_ep = 14;
+ //
+ bilibili.app.viewunite.common.NewEp new_ep = 15;
+ //
+ Reserve reserve = 16;
+ //
+ int32 status = 17;
+ //
+ repeated PlayFloatLayerActivity activity_float_layer = 18;
+ //
+ EarphoneConf earphone_conf = 19;
+ //
+ string cover = 20;
+ //
+ string square_cover = 21;
+ //
+ string share_url = 22;
+ //
+ string short_link = 23;
+ //
+ string title = 24;
+ //
+ string horizontal_cover169 = 25;
+ //
+ string horizontal_cover1610 = 26;
+ //
+ int32 has_can_play_ep = 27;
+}
+
+//
+message OgvSwitch {
+ //
+ int32 reduce_short_title_spacing = 1;
+ //
+ int32 merge_position_section_for_cinema = 2;
+ //
+ int32 merge_preview_section = 3;
+ //
+ int32 enable_show_vt_info = 4;
+}
+
+// 播放器浮层广告(?)
+message PlayFloatLayerActivity {
+ //
+ int32 id = 1;
+ //
+ string title = 2;
+ //
+ int32 type = 3;
+ //
+ int32 ad_badge_type = 4;
+ //
+ string link = 5;
+ //
+ string pic_url = 6;
+ //
+ string pic_anima_url = 7;
+ //
+ bilibili.app.viewunite.common.BadgeInfo badge = 8;
+ //
+ int64 show_rate_time = 9;
+}
+
+//
+message PlayStrategy {
+ //
+ repeated string strategies = 1;
+ //
+ int32 recommend_show_strategy = 2;
+ //
+ string auto_play_toast = 3;
+}
+
+//
+message Publish {
+ //
+ string pub_time = 1;
+ //
+ string pub_time_show = 2;
+ //
+ int32 is_started = 3;
+ //
+ int32 is_finish = 4;
+ //
+ int32 weekday = 5;
+ //
+ string release_date_show = 6;
+ //
+ string time_length_show = 7;
+ //
+ int32 unknow_pub_date = 8;
+ //
+ string update_info_desc = 9;
+}
+
+//
+message Reserve {
+ //
+ repeated bilibili.app.viewunite.common.ViewEpisode episodes = 1;
+ //
+ string tip = 2;
+}
+
+// 权限相关信息
+message Rights {
+ //
+ int32 allow_download = 1;
+ //
+ int32 allow_review = 2;
+ //
+ int32 can_watch = 3;
+ //
+ int32 is_cover_show = 4;
+ //
+ string copyright = 5;
+ //
+ string copyright_name = 6;
+ //
+ int32 allow_bp = 7;
+ //
+ int32 area_limit = 8;
+ //
+ int32 is_preview = 9;
+ //
+ int32 ban_area_show = 10;
+ //
+ int32 watch_platform = 11;
+ //
+ int32 allow_bp_rank = 12;
+ //
+ string resource = 13;
+ //
+ int32 forbid_pre = 14;
+ //
+ int32 only_vip_download = 15;
+ //
+ int32 new_allow_download = 16;
+}
+
+//
+message Stat {
+ //
+ string followers = 1;
+ //
+ bilibili.app.viewunite.common.StatInfo play_data = 2;
+}
+
+//
+message UserStatus {
+ //
+ int32 show = 1;
+ //
+ int32 follow = 2;
+ //
+ int32 follow_status = 3;
+ //
+ int32 pay = 4;
+ //
+ int32 sponsor = 5;
+ //
+ int32 vip = 6;
+ // vip 是否被冻结
+ int32 vip_frozen = 7;
+ //
+ WatchProgress watch_progress = 8;
+}
+
+//
+message ViewPgcAny {
+ //
+ OgvData ogv_data = 1;
+ //
+ map all_up_info = 2;
+}
+
+//
+message WatchProgress {
+ //
+ int64 last_ep_id = 1;
+ //
+ string last_ep_index = 2;
+ //
+ int64 last_time = 3;
+}
diff --git a/grpc_api/bilibili/app/viewunite/pugvanymodel.proto b/grpc_api/bilibili/app/viewunite/pugvanymodel.proto
new file mode 100644
index 0000000..2734bb2
--- /dev/null
+++ b/grpc_api/bilibili/app/viewunite/pugvanymodel.proto
@@ -0,0 +1,430 @@
+syntax = "proto3";
+
+package bilibili.app.viewunite.pugvanymodel;
+
+//
+message AbTest {
+}
+
+//
+message CatalogueInfo {
+ //
+ repeated SeasonCatalogue catalogues = 1;
+ //
+ CatalogueLiveInfo catalogue_live_info = 2;
+ //
+ string catalogue_update_text = 3;
+}
+
+//
+message CatalogueLiveInfo {
+ //
+ int64 episode_id = 1;
+ //
+ string title = 2;
+ //
+ string subtitle = 3;
+ //
+ string button_text = 4;
+ //
+ LiveStatus status = 5;
+}
+
+//
+message CourseCoach {
+ //
+ string detail_url = 1;
+ //
+ string directory_url = 2;
+}
+
+//
+message Courseware {
+ //
+ int64 file_id = 1;
+ //
+ string file_name = 2;
+ //
+ string file_type = 3;
+ //
+ int64 file_size = 4;
+ //
+ string desc = 5;
+ //
+ string file_url = 6;
+}
+
+//
+message CoursewareInfo {
+ //
+ repeated Courseware coursewares = 1;
+}
+
+//
+message DanmakuControl {
+ //
+ bool disabled = 1;
+ //
+ ExtraContent extra_content = 2;
+}
+
+message Episode {
+ //
+ EpisodeType type = 1;
+ //
+ oneof data {
+ //
+ VideoEpisode video_episode = 2;
+ //
+ LiveEpisode live_episode = 3;
+ }
+}
+
+//
+message EpisodeHistory {
+ //
+ bool last_play = 1;
+ //
+ string last_play_text = 2;
+ //
+ int64 max_progress = 3;
+ //
+ string full_watched_text = 4;
+}
+
+//
+message EpisodeLabel {
+ //
+ string type_label = 1;
+}
+
+//
+message EpisodeSelectionLabel {
+ //
+ string type_label = 1;
+}
+
+//
+enum EpisodeStatus {
+ EPISODE_STATUS_UNSPECIFIED = 0;
+ EPISODE_STATUS_TRY_WATCH_WHOLE = 1;
+ EPISODE_STATUS_NOT_TRY_WATCH = 2;
+ EPISODE_STATUS_TRY_WATCH_5_MINUTES = 3;
+}
+
+//
+enum EpisodeType {
+ EPISODE_TYPE_UNSPECIFIED = 0;
+ EPISODE_TYPE_VIDEO = 1;
+ EPISODE_TYPE_LIVE = 2;
+}
+
+//
+message ExtraContent {
+ //
+ string disabled_reason = 1;
+}
+
+//
+message LiveEpisode {
+ //
+ int64 episode_id = 1;
+ //
+ LiveStatus status = 2;
+ //
+ bool jump = 3;
+ //
+ int64 live_teacher_mid = 4;
+ //
+ bool show_subscription_prebook_button = 5;
+ //
+ bool be_subscription_prebook = 6;
+ //
+ int64 index = 7;
+ //
+ string title = 8;
+ //
+ string play_way_subtitle = 9;
+ //
+ string subtitle = 10;
+ //
+ bool show_lock_icon = 11;
+ //
+ EpisodeLabel episode_label = 12;
+ //
+ EpisodeSelectionLabel selection_label = 13;
+}
+
+//
+message LiveInfo {
+ //
+ int64 episode_id = 1;
+ //
+ LiveStatus status = 2;
+ //
+ bool jump = 3;
+ //
+ int64 live_teacher_mid = 4;
+ //
+ bool show_subscription_prebook_button = 5;
+ //
+ bool be_subscription_prebook = 6;
+}
+
+//
+enum LiveStatus {
+ LIVE_STATUS_UNSPECIFIED = 0;
+ LIVE_STATUS_PREPARE = 1;
+ LIVE_STATUS_LIVE = 2;
+ LIVE_STATUS_PLAYBACK_GENERATING = 3;
+}
+
+//
+message OperationArea {
+ //
+ repeated OperationAreaButton buttons = 1;
+}
+
+//
+message OperationAreaButton {
+ //
+ OperationAreaButtonType type = 1;
+ //
+ string text = 2;
+ //
+ bool disabled = 3;
+ //
+ string link = 4;
+}
+
+//
+enum OperationAreaButtonType {
+ OPERATION_AREA_BUTTON_TYPE_UNSPECIFIED = 0;
+ OPERATION_AREA_BUTTON_TYPE_FAVORITE = 1;
+ OPERATION_AREA_BUTTON_TYPE_CONSULT = 2;
+ OPERATION_AREA_BUTTON_TYPE_SHARE = 3;
+ OPERATION_AREA_BUTTON_TYPE_PURCHASE = 4;
+}
+
+//
+message SeasonCatalogue {
+ //
+ string title = 1;
+ //
+ int64 index = 2;
+ //
+ int64 start_ep_index = 3;
+ //
+ int64 end_ep_index = 4;
+}
+
+//
+message SeasonCoupon {
+ //
+ string token = 1;
+ //
+ string title = 2;
+ //
+ string start_time = 3;
+ //
+ string expire_time = 4;
+ //
+ double amount = 5;
+ //
+ string show_amount = 6;
+ //
+ SeasonCouponStatus status = 7;
+ //
+ SeasonCouponType coupon_type = 8;
+ //
+ string short_title = 9;
+ //
+ string expire_minute = 10;
+ //
+ string use_scope = 11;
+ //
+ string discount_amount = 12;
+ //
+ int64 receive_expire_time = 13;
+ //
+ int64 use_expire_time = 14;
+ //
+ string scene_mark = 15;
+ //
+ string scene_background_img = 16;
+ //
+ string scene_benefit_img = 17;
+ //
+ bool scene_countdown = 18;
+}
+
+//
+enum SeasonCouponStatus {
+ SEASON_COUPON_STATUS_UNSPECIFIED = 0;
+ SEASON_COUPON_STATUS_RECEIVED = 1;
+ SEASON_COUPON_STATUS_NOT_RECEIVED = 2;
+ SEASON_COUPON_STATUS_INVALID = 3;
+}
+
+//
+enum SeasonCouponType {
+ SEASON_COUPON_TYPE_UNSPECIFIED = 0;
+ SEASON_COUPON_TYPE_DISCOUNT = 1;
+ SEASON_COUPON_TYPE_DECREASE = 2;
+}
+
+//
+message SeasonCustom {
+ //
+ WaterMark water_mark = 1;
+ //
+ DanmakuControl danmaku_control = 2;
+}
+
+//
+message SeasonOverview {
+ //
+ int64 season_id = 1;
+ //
+ bool support_cash = 2;
+ //
+ SeasonStatus status = 3;
+ //
+ SeasonType type = 4;
+ //
+ string cover = 5;
+ //
+ string title = 6;
+}
+
+//
+message SeasonPayment {
+ //
+ string price_unit = 1;
+ //
+ string discount_price = 2;
+ //
+ string discount_price_desc = 3;
+ //
+ string original_price = 4;
+ //
+ string original_price_desc = 5;
+}
+
+//
+message SeasonSection {
+ //
+ int64 section_id = 1;
+ //
+ string title = 2;
+ //
+ SeasonSectionType type = 3;
+ //
+ repeated Courseware coursewares = 4;
+ //
+ repeated Episode episodes = 5;
+}
+
+//
+enum SeasonSectionType {
+ SEASON_SECTION_TYPE_UNSPECIFIED = 0;
+ SEASON_SECTION_TYPE_DEFAULT = 1;
+ SEASON_SECTION_TYPE_CUSTOM = 2;
+}
+
+//
+enum SeasonStatus {
+ SEASON_STATUS_UNSPECIFIED = 0;
+ SEASON_STATUS_OFFLINE = 1;
+}
+
+//
+enum SeasonType {
+ SEASON_TYPE_UNSPECIFIED = 0;
+ SEASON_TYPE_INSTALLMENT = 1;
+ SEASON_TYPE_FREE = 2;
+ SEASON_TYPE_SUBSCRIPTION = 3;
+}
+
+//
+message SectionInfo {
+ //
+ repeated SeasonSection sections = 1;
+}
+
+//
+message VideoEpisode {
+ //
+ repeated Courseware coursewares = 1;
+ //
+ int64 index = 2;
+ //
+ EpisodeStatus status = 3;
+ //
+ int64 aid = 4;
+ //
+ int64 cid = 5;
+ //
+ string title = 6;
+ //
+ string play_way_subtitle = 7;
+ //
+ string subtitle = 8;
+ //
+ int64 duration = 9;
+ //
+ bool can_switch = 10;
+ //
+ bool can_play = 11;
+ //
+ bool show_lock_icon = 12;
+ //
+ EpisodeLabel episode_label = 13;
+ //
+ EpisodeSelectionLabel selection_label = 14;
+ //
+ EpisodeHistory history = 15;
+ //
+ VideoPlayWay play_way = 16;
+ //
+ int64 episode_id = 17;
+}
+
+//
+enum VideoPlayWay {
+ VIDEO_PLAY_WAY_UNSPECIFIED = 0;
+ VIDEO_PLAY_WAY_VOD = 1;
+ VIDEO_PLAY_WAY_LIVE_PLAYBACK = 2;
+}
+
+//
+message ViewPugvAny {
+ //
+ SeasonOverview season_overview = 1;
+ //
+ SeasonPayment season_payment = 2;
+ //
+ SeasonCoupon season_coupon = 3;
+ //
+ CatalogueInfo catalogue_info = 4;
+ //
+ SeasonCustom season_custom = 5;
+ //
+ CoursewareInfo courseware_info = 6;
+ //
+ CourseCoach course_coach = 7;
+ //
+ SectionInfo section_info = 8;
+ //
+ AbTest ab_test = 9;
+ //
+ OperationArea operation_area = 10;
+}
+
+//
+message WaterMark {
+ //
+ bool show_watermark = 1;
+ //
+ int64 watermark_interval = 2;
+}
diff --git a/grpc_api/bilibili/app/viewunite/ugcanymodel.proto b/grpc_api/bilibili/app/viewunite/ugcanymodel.proto
new file mode 100644
index 0000000..1cf1a44
--- /dev/null
+++ b/grpc_api/bilibili/app/viewunite/ugcanymodel.proto
@@ -0,0 +1,134 @@
+syntax = "proto3";
+
+package bilibili.app.viewunite.ugcanymodel;
+
+import "bilibili/app/viewunite/common.proto";
+
+//
+message Dislike {
+ //
+ string title = 1;
+ //
+ string subtitle = 2;
+ //
+ repeated DislikeReason reasons = 3;
+}
+
+//
+message DislikeReason {
+ //
+ int64 id = 1;
+ //
+ int64 mid = 2;
+ //
+ int32 rid = 3;
+ //
+ int64 tag_id = 4;
+ //
+ string name = 5;
+}
+
+//
+message ElecRank {
+ //
+ repeated ElecRankItem list = 1;
+ //
+ int64 count = 2;
+ //
+ string text = 3;
+}
+
+//
+message ElecRankItem {
+ //
+ string avatar = 1;
+ //
+ string nickname = 2;
+ //
+ string message = 3;
+ //
+ int64 mid = 4;
+}
+
+//
+message Premiere {
+ //
+ PremiereState premiere_state = 1;
+ //
+ int64 start_time = 2;
+ //
+ int64 service_time = 3;
+ //
+ int64 room_id = 4;
+}
+
+//
+message PremiereReserve {
+ //
+ int64 reserve_id = 1;
+ //
+ int64 count = 2;
+ //
+ bool is_follow = 3;
+}
+
+//
+message PremiereResource {
+ //
+ Premiere premiere = 1;
+ //
+ PremiereReserve reserve = 2;
+ //
+ PremiereText text = 3;
+}
+
+enum PremiereState {
+ //
+ premiere_none = 0;
+ //
+ premiere_before = 1;
+ //
+ premiere_in = 2;
+ //
+ premiere_after = 3;
+}
+
+//
+message PremiereText {
+ //
+ string title = 1;
+ //
+ string subtitle = 2;
+ //
+ string online_text = 3;
+ //
+ string online_icon = 4;
+ //
+ string online_icon_dark = 5;
+ //
+ string intro_title = 6;
+ //
+ string intro_icon = 7;
+ //
+ string guidance_pulldown = 8;
+ //
+ string guidance_entry = 9;
+ //
+ string intro_icon_night = 10;
+}
+
+//
+message ViewUgcAny {
+ //
+ PremiereResource premiere = 1;
+ //
+ Dislike dislike = 2;
+ //
+ string short_link = 3;
+ //
+ string share_subtitle = 4;
+ //
+ repeated bilibili.app.viewunite.common.Page pages = 5;
+ //
+ ElecRank elec_rank = 6;
+}
diff --git a/grpc_api/bilibili/app/viewunite/v1/viewunite.proto b/grpc_api/bilibili/app/viewunite/v1/viewunite.proto
new file mode 100644
index 0000000..0a01820
--- /dev/null
+++ b/grpc_api/bilibili/app/viewunite/v1/viewunite.proto
@@ -0,0 +1,897 @@
+syntax = "proto3";
+
+package bilibili.app.viewunite.v1;
+
+import "bilibili/app/archive/middleware/v1/preload.proto";
+import "bilibili/app/viewunite/common.proto";
+import "bilibili/pagination/pagination.proto";
+import "google/protobuf/any.proto";
+
+// 统一视频信息接口 (7.41.0+)
+service View {
+ //
+ rpc ArcRefresh(ArcRefreshReq) returns (ArcRefreshReply);
+ // 视频详情页下方推荐
+ rpc RelatesFeed(RelatesFeedReq) returns (RelatesFeedReply);
+ //
+ rpc View(ViewReq) returns (ViewReply);
+ //
+ rpc ViewProgress(ViewProgressReq) returns (ViewProgressReply);
+}
+
+//
+message ActivityResource {
+ //
+ string dark_text_color = 1;
+ //
+ string divider_color = 2;
+ //
+ string bg_color = 3;
+ //
+ string selected_bg_color = 4;
+ //
+ string text_color = 5;
+ //
+ string light_text_color = 6;
+}
+
+// 业务信息
+message Arc {
+ //
+ int64 aid = 1;
+ //
+ int64 cid = 2;
+ //
+ int64 duration = 3;
+ //
+ bilibili.app.viewunite.common.Stat stat = 4;
+ //
+ string bvid = 5;
+ //
+ int32 copyright = 6;
+ //
+ Rights right = 7;
+ //
+ string cover = 8;
+ //
+ int64 type_id = 9;
+ //
+ string title = 10;
+}
+
+//
+message ArcRefreshReply {
+ //
+ bilibili.app.viewunite.common.Stat stat = 1;
+ //
+ SimpleReqUser req_user = 2;
+ //
+ SimpleArc arc = 3;
+ //
+ Online online = 4;
+ //
+ LikeConfig like_config = 5;
+ //
+ SimpleOwner owner = 6;
+}
+
+//
+message ArcRefreshReq {
+ //
+ int64 aid = 1;
+ //
+ string bvid = 2;
+ //
+ UnionType type = 3;
+}
+
+//
+message AttentionCard {
+ //
+ repeated ShowTime show_time = 1;
+}
+
+//
+message BgPlayNotice {
+ //
+ bool allow_show = 1;
+ //
+ string text = 2;
+ //
+ string btn_text_1 = 3;
+ //
+ string btn_text_2 = 4;
+}
+
+//
+message BizFollowVideoParam {
+ //
+ int64 season_id = 1;
+}
+
+//
+message BizJumpLinkParam {
+ //
+ string url = 1;
+}
+
+//
+message BizReserveActivityParam {
+ //
+ int64 activity_id = 1;
+ //
+ string from = 2;
+ //
+ string type = 3;
+ //
+ int64 oid = 4;
+ //
+ int64 reserve_id = 5;
+}
+
+//
+message BizReserveGameParam {
+ //
+ int64 game_id = 1;
+}
+
+enum BizType {
+ //
+ BizTypeNone = 0;
+ //
+ BizTypeFollowVideo = 1;
+ //
+ BizTypeReserveActivity = 2;
+ //
+ BizTypeJumpLink = 3;
+ //
+ BizTypeFavSeason = 4;
+ //
+ BizTypeReserveGame = 5;
+}
+
+//
+message Button {
+ //
+ string title = 1;
+ //
+ string uri = 2;
+ //
+ string icon = 3;
+ //
+ JumpShowType jump_show_type = 4;
+}
+
+//
+message ChargingPlus {
+ //
+ bool pass = 1;
+ //
+ repeated PlayToast play_toast = 2;
+}
+
+//
+message Chronos {
+ //
+ string md5 = 1;
+ //
+ string file = 2;
+ //
+ string sign = 3;
+}
+
+//
+message ChronosParam {
+ //
+ string engine_version = 1;
+ //
+ string message_protocol = 2;
+ //
+ string service_key = 3;
+}
+
+// 推广信息
+message CM {
+ //
+ google.protobuf.Any cm_under_player = 1;
+ //
+ google.protobuf.Any ads_control = 2;
+ //
+ repeated google.protobuf.Any source_content = 3;
+}
+
+//
+message CommandDm {
+ //
+ int64 id = 1;
+ //
+ int64 oid = 2;
+ //
+ int64 mid = 3;
+ //
+ string command = 4;
+ //
+ string content = 5;
+ //
+ int32 progress = 6;
+ //
+ string ctime = 7;
+ //
+ string mtime = 8;
+ //
+ string extra = 9;
+ //
+ string idstr = 10;
+}
+
+// 播放器配置
+message Config {
+ //
+ Online online = 1;
+ //
+ PlayerIcon player_icon = 2;
+ //
+ StoryEntrance story_entrance = 3;
+ //
+ BgPlayNotice bg_play_notice = 4;
+}
+
+// 视频播放时弹出的卡片
+message ContractCard {
+ // 在第几秒弹出
+ float display_progress = 1;
+ //
+ int64 display_accuracy = 2;
+ // 弹出后停留的时间
+ int64 display_duration = 3;
+ // 展示方式, 暂未知对应关系
+ int32 show_mode = 4;
+ // 页面类型, 暂未知对应关系
+ int32 page_type = 5;
+ //
+ UpperInfos upper = 6;
+ //
+ int32 is_follow_display = 7;
+ // 卡片的文字说明信息
+ ContractText text = 8;
+ //
+ int64 follow_display_end_duration = 9;
+ //
+ int32 is_play_display = 10;
+ //
+ int32 is_interact_display = 11;
+ //
+ bool play_display_switch = 12;
+}
+
+// 视频播放时弹出的卡片的文字说明信息
+message ContractText {
+ //
+ string title = 1;
+ //
+ string subtitle = 2;
+ //
+ string inline_title = 3;
+}
+
+//
+message Control {
+ //
+ bool limit = 1;
+}
+
+//
+message DmResource {
+ //
+ repeated CommandDm command_dms = 1;
+ //
+ AttentionCard attention = 2;
+ //
+ repeated OperationCard cards = 3;
+}
+
+enum ECode {
+ //
+ CODE_DEFAULT = 0;
+ //
+ CODE_404 = 1;
+ // 青少年限制
+ CODE_TEENAGER = 78301;
+}
+
+//
+message ECodeConfig {
+ //
+ string redirect_url = 1;
+}
+
+//
+message FragmentArc {
+ //
+ int64 aid = 1;
+ //
+ int64 cid = 2;
+}
+
+//
+message FragmentParam {
+ //
+ repeated FragmentArc fragment_arcs = 1;
+}
+
+//
+message FragmentRes {
+ //
+ map video_shot = 1;
+}
+
+//
+message IconData {
+ //
+ string meta_json = 1;
+ //
+ string sprits_img = 2;
+}
+
+// 视频介绍 Tab
+message IntroductionTab {
+ //
+ string title = 1;
+ //
+ repeated bilibili.app.viewunite.common.Module modules = 2;
+}
+
+enum JumpShowType {
+ //
+ JST_DEFAULT = 0;
+ //
+ JST_FULLSCREEN = 1;
+ //
+ JST_HALFSCREEN = 2;
+}
+
+//
+message LikeConfig {
+ bilibili.app.viewunite.common.UpLikeImg triple_like = 1;
+ //
+ string like_animation = 2;
+}
+
+// 素材详情
+message Material {
+ //
+ string icon = 1;
+ //
+ string text = 2;
+ //
+ string url = 3;
+ //
+ MaterialBizType type = 4;
+ //
+ string param = 5;
+ //
+ string static_icon = 6;
+ //
+ string bg_color = 7;
+ //
+ string bg_pic = 8;
+ //
+ int32 jump_type = 9;
+ //
+ PageType page_type = 10;
+ //
+ bool need_login = 11;
+}
+
+// 素材类型
+enum MaterialBizType {
+ //
+ NONE = 0;
+ //
+ ACTIVITY = 1;
+ //
+ BGM = 2;
+ //
+ EFFECT = 3;
+ //
+ SHOOT_SAME = 4;
+ //
+ SHOOT_TOGETHER = 5;
+ //
+ ACTIVITY_ICON = 6;
+ //
+ NEW_BGM = 7;
+ //
+ GENERAL_TYPE = 8;
+}
+
+// 素材来源
+enum MaterialSource {
+ //
+ DEFAULT = 0;
+ // 必剪素材
+ BIJIAN = 1;
+}
+
+//
+message Online {
+ //
+ bool online_show = 1;
+}
+
+//
+message OperationCard {
+ //
+ int64 id = 1;
+ //
+ int32 from = 2;
+ //
+ int32 to = 3;
+ //
+ bool status = 4;
+ //
+ BizType biz_type = 5;
+ //
+ OperationCardContent content = 6;
+ //
+ oneof param {
+ //
+ BizFollowVideoParam follow = 7;
+ //
+ BizReserveActivityParam reserve = 8;
+ //
+ BizJumpLinkParam jump = 9;
+ //
+ BizReserveGameParam game = 10;
+ }
+}
+
+//
+message OperationCardContent {
+ //
+ string title = 1;
+ //
+ string subtitle = 2;
+ //
+ string icon = 3;
+ //
+ string button_title = 4;
+ //
+ string button_selected_title = 5;
+ //
+ bool show_selected = 6;
+}
+
+//
+enum PageCategory {
+ //
+ COMMON_PAGE = 0;
+ //
+ ACTIVITY_PAGE = 1;
+}
+
+//
+message PageControl {
+ Control toast_show = 1;
+ Control material_show = 2;
+ Control up_show = 3;
+}
+
+// 页面类型
+enum PageType {
+ // H5页面(Webview)
+ H5 = 0;
+ // 原生页面(native)
+ NA = 1;
+}
+
+//
+message PlayerIcon {
+ //
+ string url1 = 1;
+ //
+ string hash1 = 2;
+ //
+ string url2 = 3;
+ //
+ string hash2 = 4;
+ //
+ string drag_left_png = 5;
+ //
+ string middle_png = 6;
+ //
+ string drag_right_png = 7;
+ //
+ IconData drag_data = 8;
+ //
+ IconData nodrag_data = 9;
+}
+
+//
+message PlayToast {
+ //
+ PlayToastEnum business = 1;
+ //
+ string icon_url = 2;
+ //
+ string text = 3;
+}
+
+enum PlayToastEnum {
+ //
+ PLAYTOAST_UNKNOWN = 0;
+ //
+ PLAYTOAST_CHARGINGPLUS = 1;
+}
+
+//
+message PointMaterial {
+ //
+ string url = 1;
+ //
+ MaterialSource material_source = 2;
+}
+
+//
+message Relate {
+ //
+ int64 device_type = 1;
+ //
+ bilibili.pagination.Pagination pagination = 2;
+}
+
+// 视频详情页下方推荐 Reply
+message RelatesFeedReply {
+ //
+ repeated bilibili.app.viewunite.common.RelateCard relates = 1;
+ //
+ bilibili.pagination.Pagination pagination = 2;
+}
+
+// 视频详情页下方推荐 Req
+message RelatesFeedReq {
+ //
+ int64 aid = 1;
+ //
+ string bvid = 2;
+ //
+ string from = 3;
+ //
+ string spmid = 4;
+ //
+ string from_spmid = 5;
+ //
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 6;
+ //
+ bilibili.pagination.Pagination pagination = 7;
+ //
+ string session_id = 8;
+ //
+ int64 auto_play = 9;
+ //
+ string from_track_id = 10;
+}
+
+//
+message ReplyStyle {
+ //
+ string badge_url = 1;
+ //
+ string badge_text = 2;
+ //
+ int64 badge_type = 3;
+}
+
+//
+message ReplyTab {
+ //
+ ReplyStyle reply_style = 1;
+ //
+ string title = 2;
+ //
+ TabControl control = 3;
+}
+
+//
+message ReqUser {
+ //
+ int32 favorite = 1;
+ //
+ int32 like = 2;
+ //
+ int32 coin = 3;
+ //
+ int32 fav_season = 4;
+ //
+ int32 follow = 5;
+ //
+ int32 dislike = 6;
+ // 头像旁充电按钮
+ Button elec_plus_btn = 7;
+ //
+ ChargingPlus charging_plus = 8;
+ //
+ ReqUserExtra extra = 9;
+ //
+ int32 paid = 10;
+}
+
+//
+message ReqUserExtra {
+ //
+ bool user_flag_new = 1;
+}
+
+//
+message Rights {
+ //
+ bool only_vip_download = 1;
+ //
+ bool no_reprint = 2;
+ //
+ bool download = 3;
+}
+
+//
+message ShowTime {
+ //
+ int32 start_time = 1;
+ //
+ int32 end_time = 2;
+ //
+ double pos_x = 3;
+ //
+ double pos_y = 4;
+}
+
+//
+message SimpleArc {
+ //
+ int32 copyright = 1;
+}
+
+//
+message SimpleOwner {
+ //
+ int32 attention_relation = 1;
+}
+
+//
+message SimpleReqUser {
+ //
+ int32 favorite = 1;
+ //
+ int32 like = 2;
+ //
+ int32 coin = 3;
+}
+
+//
+message StoryEntrance {
+ //
+ bool arc_play_story = 1;
+ //
+ string story_icon = 2;
+ //
+ bool arc_landscape_story = 3;
+ //
+ string landscape_icon = 4;
+ //
+ bool play_story = 5;
+}
+
+//
+message Tab {
+ //
+ repeated TabModule tab_module = 1;
+ //
+ string tab_bg = 2;
+ //
+ TabControl danmaku_entrance = 3;
+}
+
+// 评论区/弹幕 Tab 控制
+message TabControl {
+ //
+ bool limit = 1;
+ //
+ bool disable = 2;
+ //
+ string disable_click_tip = 3;
+}
+
+//
+message TabModule {
+ //
+ TabType tab_type = 1;
+ //
+ oneof tab {
+ //
+ IntroductionTab introduction = 2;
+ //
+ ReplyTab reply = 3;
+ //
+ bilibili.app.viewunite.common.ActivityTab activity_tab = 4;
+ }
+}
+
+enum TabType {
+ //
+ TAB_NONE = 0;
+ // 详情 Tab
+ TAB_INTRODUCTION = 1;
+ // 评论区 Tab
+ TAB_REPLY = 2;
+ // OGV 活动信息 Tab
+ TAB_OGV_ACTIVITY = 3;
+}
+
+//
+enum UnionType {
+ //
+ UGC = 0;
+ //
+ OGV = 1;
+ //
+ PUGV = 2;
+}
+
+// UP主信息(可是Upper这个... 程序员英文不过关吧? )
+message UpperInfos {
+ // 粉丝数
+ uint64 fans_count = 1;
+ // 过去半年内的稿件数
+ uint64 arc_count_last_half_year = 2;
+ //
+ int64 first_up_dates = 3;
+ // UP稿件总播放数
+ uint64 total_play_count = 4;
+}
+
+//
+message VideoGuide {
+ //
+ repeated Material material = 1;
+ //
+ VideoViewPoint video_point = 2;
+ //
+ ContractCard contract_card = 3;
+}
+
+//
+message VideoPoint {
+ //
+ int32 type = 1;
+ //
+ int64 from = 2;
+ //
+ int64 to = 3;
+ //
+ string content = 4;
+ //
+ string cover = 5;
+ //
+ string logo_url = 6;
+}
+
+//
+message VideoShot {
+ //
+ string pv_data = 1;
+ //
+ int32 img_x_len = 2;
+ //
+ int32 imd_x_size = 3;
+ //
+ int32 img_y_len = 4;
+ //
+ int32 img_y_size = 5;
+ //
+ repeated string image = 6;
+}
+
+//
+message VideoViewPoint {
+ //
+ repeated VideoPoint points = 1;
+ //
+ PointMaterial point_material = 2;
+ //
+ bool point_permanent = 3;
+}
+
+//
+message ViewBase {
+ //
+ BizType biz_type = 1;
+ //
+ PageType page_type = 2;
+ //
+ PageControl control = 3;
+ //
+ ActivityResource activity_resource = 4;
+ //
+ Config config = 5;
+}
+
+//
+message ViewProgressReply {
+ //
+ VideoGuide video_guide = 1;
+ //
+ Chronos chronos = 2;
+ //
+ VideoShot arc_shot = 3;
+ //
+ DmResource dm = 4;
+}
+
+//
+message ViewProgressReq {
+ //
+ uint64 aid = 1;
+ //
+ uint64 cid = 2;
+ //
+ uint64 up_mid = 3;
+ //
+ ChronosParam chronos_param = 4;
+ //
+ UnionType type = 5;
+}
+
+//
+message ViewReply {
+ //
+ ViewBase view_base = 1;
+ //
+ Arc arc = 2;
+ //
+ ReqUser req_user = 3;
+ //
+ bilibili.app.viewunite.common.Owner owner = 4;
+ //
+ Tab tab = 5;
+ //
+ google.protobuf.Any supplement = 6;
+ //
+ CM cm = 7;
+ //
+ ECode ecode = 8;
+ //
+ ECodeConfig ecode_config = 9;
+ //
+ map report = 10;
+}
+
+//
+message ViewReq {
+ //
+ uint64 aid = 1;
+ //
+ string bvid = 2;
+ //
+ string from = 3;
+ //
+ string spmid = 4;
+ //
+ string from_spmid = 5;
+ //
+ string session_id = 6;
+ //
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 7;
+ //
+ string track_id = 8;
+ //
+ map extra_content = 9;
+ //
+ string play_mode = 10;
+ //
+ Relate relate = 11;
+ //
+ string biz_extra = 12;
+ //
+ string ad_extra = 13;
+ //
+ string from_scene = 14;
+}
diff --git a/grpc_api/bilibili/app/wall/v1/wall.proto b/grpc_api/bilibili/app/wall/v1/wall.proto
index 23e158f..ca5a742 100644
--- a/grpc_api/bilibili/app/wall/v1/wall.proto
+++ b/grpc_api/bilibili/app/wall/v1/wall.proto
@@ -8,16 +8,6 @@ service Wall {
rpc RuleInfo (RuleRequest) returns (RulesReply);
}
-// 获取免流规则信息-请求
-message RuleRequest {}
-
-// 获取免流规则信息-响应
-message RulesReply {
- // 各ISP的免流规则信息组
- // ISP如: cu ct cm
- map rulesInfo = 1;
-}
-
// 免流规则信息
message RuleInfo {
// 是否支持免流
@@ -29,10 +19,27 @@ message RuleInfo {
string a = 3;
// 匹配目标正则
string p = 4;
+ //
+ repeated string a_backup = 5;
}
+// 获取免流规则信息-请求
+message RuleRequest {}
+
// 免流规则信息组
message RulesInfo {
// 免流规则信息
repeated RuleInfo rulesInfo = 1;
-}
\ No newline at end of file
+}
+
+// 获取免流规则信息-响应
+message RulesReply {
+ // 各ISP的免流规则信息组
+ // ISP如: cu ct cm
+ map rulesInfo = 1;
+ //
+ string hash_value = 2;
+}
+
+
+
diff --git a/grpc_api/bilibili/broadcast/message/main/search.proto b/grpc_api/bilibili/broadcast/message/main/search.proto
new file mode 100644
index 0000000..8f18a02
--- /dev/null
+++ b/grpc_api/bilibili/broadcast/message/main/search.proto
@@ -0,0 +1,29 @@
+syntax = "proto3";
+
+package bilibili.broadcast.message.main;
+
+import "google/protobuf/empty.proto";
+import "bilibili/app/dynamic/v2/dynamic.proto";
+
+service Search {
+ rpc ChatResultPush (google.protobuf.Empty) returns (stream ChatResult);
+}
+
+//
+message Bubble {
+ repeated bilibili.app.dynamic.v2.Paragraph paragraphs = 1;
+}
+
+//
+message ChatResult {
+ //
+ int32 code = 1;
+ //
+ string session_id = 2;
+ //
+ repeated Bubble bubble = 3;
+ //
+ string rewrite_word = 4;
+ //
+ string title = 5;
+}
diff --git a/grpc_api/bilibili/community/interfacess/biligram/v1/biligram.proto b/grpc_api/bilibili/community/interfacess/biligram/v1/biligram.proto
new file mode 100644
index 0000000..0ffdd02
--- /dev/null
+++ b/grpc_api/bilibili/community/interfacess/biligram/v1/biligram.proto
@@ -0,0 +1 @@
+// TODO
\ No newline at end of file
diff --git a/grpc_api/bilibili/community/service/dm/v1/dm.proto b/grpc_api/bilibili/community/service/dm/v1/dm.proto
index 5f0e0ce..23074f2 100644
--- a/grpc_api/bilibili/community/service/dm/v1/dm.proto
+++ b/grpc_api/bilibili/community/service/dm/v1/dm.proto
@@ -7,7 +7,7 @@ service DM {
// 获取分段弹幕
rpc DmSegMobile (DmSegMobileReq) returns (DmSegMobileReply);
// 客户端弹幕元数据 字幕、分段、防挡蒙版等
- rpc DmView (DmViewReq) returns (DmViewReply);
+ rpc DmView(DmViewReq) returns (DmViewReply);
// 修改弹幕配置
rpc DmPlayerConfig (DmPlayerConfigReq) returns (Response);
// ott弹幕列表
@@ -15,7 +15,60 @@ service DM {
// SDK弹幕列表
rpc DmSegSDK(DmSegSDKReq) returns(DmSegSDKReply);
//
- rpc DmExpoReport (DmExpoReportReq) returns (DmExpoReportRes);
+ rpc DmExpoReport(DmExpoReportReq) returns (DmExpoReportRes);
+}
+
+//
+message Avatar {
+ //
+ string id = 1;
+ //
+ string url = 2;
+ //
+ AvatarType avatar_type = 3;
+}
+
+//
+enum AvatarType {
+ AvatarTypeNone = 0; //
+ AvatarTypeNFT = 1; //
+}
+
+//
+message Bubble {
+ //
+ string text = 1;
+ //
+ string url = 2;
+}
+
+//
+enum BubbleType {
+ BubbleTypeNone = 0; //
+ BubbleTypeClickButton = 1; //
+ BubbleTypeDmSettingPanel = 2; //
+}
+
+//
+message BubbleV2 {
+ //
+ string text = 1;
+ //
+ string url = 2;
+ //
+ BubbleType bubble_type = 3;
+ //
+ bool exposure_once = 4;
+ //
+ ExposureType exposure_type = 5;
+}
+
+//
+message Button {
+ //
+ string text = 1;
+ //
+ int32 action = 2;
}
//
@@ -40,6 +93,73 @@ message BuzzwordShowConfig {
int32 schema_type = 6;
}
+//
+message CheckBox {
+ //
+ string text = 1;
+ //
+ CheckboxType type = 2;
+ //
+ bool default_value = 3;
+ //
+ bool show = 4;
+}
+
+//
+enum CheckboxType {
+ CheckboxTypeNone = 0; //
+ CheckboxTypeEncourage = 1; //
+ CheckboxTypeColorDM = 2; //
+}
+
+//
+message CheckBoxV2 {
+ //
+ string text = 1;
+ //
+ int32 type = 2;
+ //
+ bool default_value = 3;
+}
+
+//
+message ClickButton {
+ //
+ repeated string portrait_text = 1;
+ //
+ repeated string landscape_text = 2;
+ //
+ repeated string portrait_text_focus = 3;
+ //
+ repeated string landscape_text_focus = 4;
+ //
+ RenderType render_type = 5;
+ //
+ bool show = 6;
+ //
+ Bubble bubble = 7;
+}
+
+//
+message ClickButtonV2 {
+ //
+ repeated string portrait_text = 1;
+ //
+ repeated string landscape_text = 2;
+ //
+ repeated string portrait_text_focus = 3;
+ //
+ repeated string landscape_text_focus = 4;
+ //
+ int32 render_type = 5;
+ //
+ bool text_input_post = 6;
+ //
+ bool exposure_once = 7;
+ //
+ int32 exposure_type = 8;
+}
+
// 互动弹幕条目信息
message CommandDm {
// 弹幕id
@@ -64,13 +184,6 @@ message CommandDm {
string idStr = 10;
}
-// 弹幕属性位值
-enum DMAttrBit {
- DMAttrBitProtect = 0; // 保护弹幕
- DMAttrBitFromLive = 1; // 直播弹幕
- DMAttrHighLike = 2; // 高赞弹幕
-}
-
// 弹幕ai云屏蔽列表
message DanmakuAIFlag {
// 弹幕ai云屏蔽条目
@@ -83,35 +196,41 @@ message DanmakuElem {
int64 id = 1;
// 弹幕出现位置(单位ms)
int32 progress = 2;
- // 弹幕类型
+ // 弹幕类型 1 2 3:普通弹幕 4:底部弹幕 5:顶部弹幕 6:逆向弹幕 7:高级弹幕 8:代码弹幕 9:BAS弹幕(pool必须为2)
int32 mode = 3;
// 弹幕字号
int32 fontsize = 4;
// 弹幕颜色
uint32 color = 5;
- // 发送着mid hash
+ // 发送者mid hash
string midHash = 6;
// 弹幕正文
string content = 7;
// 发送时间
int64 ctime = 8;
- // 权重 区间:[1,10]
+ // 权重 用于屏蔽等级 区间:[1,10]
int32 weight = 9;
// 动作
string action = 10;
- // 弹幕池
+ // 弹幕池 0:普通池 1:字幕池 2:特殊池(代码/BAS弹幕)
int32 pool = 11;
// 弹幕dmid str
string idStr = 12;
// 弹幕属性位(bin求AND)
// bit0:保护 bit1:直播 bit2:高赞
int32 attr = 13;
+ //
+ string animation = 22;
+ // 大会员专属颜色
+ DmColorfulType colorful = 24;
}
// 弹幕ai云屏蔽条目
message DanmakuFlag {
- int64 dmid = 1; // 弹幕dmid
- uint32 flag = 2; // 评分
+ // 弹幕dmid
+ int64 dmid = 1;
+ // 评分
+ uint32 flag = 2;
}
// 云屏蔽配置信息
@@ -126,45 +245,55 @@ message DanmakuFlagConfig {
// 弹幕默认配置
message DanmuDefaultPlayerConfig {
- bool player_danmaku_use_default_config = 1; // 是否使用推荐弹幕设置
- bool player_danmaku_ai_recommended_switch = 4; // 是否开启智能云屏蔽
- int32 player_danmaku_ai_recommended_level = 5; // 智能云屏蔽等级
- bool player_danmaku_blocktop = 6; // 是否屏蔽顶端弹幕
- bool player_danmaku_blockscroll = 7; // 是否屏蔽滚动弹幕
- bool player_danmaku_blockbottom = 8; // 是否屏蔽底端弹幕
- bool player_danmaku_blockcolorful = 9; // 是否屏蔽彩色弹幕
- bool player_danmaku_blockrepeat = 10; // 是否屏蔽重复弹幕
- bool player_danmaku_blockspecial = 11; // 是否屏蔽高级弹幕
- float player_danmaku_opacity = 12; // 弹幕不透明度
- float player_danmaku_scalingfactor = 13; // 弹幕缩放比例
- float player_danmaku_domain = 14; // 弹幕显示区域
- int32 player_danmaku_speed = 15; // 弹幕速度
- bool inline_player_danmaku_switch = 16; // 是否开启弹幕
- int32 player_danmaku_senior_mode_switch = 17; //
+ bool player_danmaku_use_default_config = 1; // 是否使用推荐弹幕设置
+ bool player_danmaku_ai_recommended_switch = 4; // 是否开启智能云屏蔽
+ int32 player_danmaku_ai_recommended_level = 5; // 智能云屏蔽等级
+ bool player_danmaku_blocktop = 6; // 是否屏蔽顶端弹幕
+ bool player_danmaku_blockscroll = 7; // 是否屏蔽滚动弹幕
+ bool player_danmaku_blockbottom = 8; // 是否屏蔽底端弹幕
+ bool player_danmaku_blockcolorful = 9; // 是否屏蔽彩色弹幕
+ bool player_danmaku_blockrepeat = 10; // 是否屏蔽重复弹幕
+ bool player_danmaku_blockspecial = 11; // 是否屏蔽高级弹幕
+ float player_danmaku_opacity = 12; // 弹幕不透明度
+ float player_danmaku_scalingfactor = 13; // 弹幕缩放比例
+ float player_danmaku_domain = 14; // 弹幕显示区域
+ int32 player_danmaku_speed = 15; // 弹幕速度
+ bool inline_player_danmaku_switch = 16; // 是否开启弹幕
+ int32 player_danmaku_senior_mode_switch = 17; //
+ int32 player_danmaku_ai_recommended_level_v2 = 18; //
+ map player_danmaku_ai_recommended_level_v2_map = 19; //
}
// 弹幕配置
message DanmuPlayerConfig {
- bool player_danmaku_switch = 1; // 是否开启弹幕
- bool player_danmaku_switch_save = 2; // 是否记录弹幕开关设置
- bool player_danmaku_use_default_config = 3; // 是否使用推荐弹幕设置
- bool player_danmaku_ai_recommended_switch = 4; // 是否开启智能云屏蔽
- int32 player_danmaku_ai_recommended_level = 5; // 智能云屏蔽等级
- bool player_danmaku_blocktop = 6; // 是否屏蔽顶端弹幕
- bool player_danmaku_blockscroll = 7; // 是否屏蔽滚动弹幕
- bool player_danmaku_blockbottom = 8; // 是否屏蔽底端弹幕
- bool player_danmaku_blockcolorful = 9; // 是否屏蔽彩色弹幕
- bool player_danmaku_blockrepeat = 10; // 是否屏蔽重复弹幕
- bool player_danmaku_blockspecial = 11; // 是否屏蔽高级弹幕
- float player_danmaku_opacity = 12; // 弹幕不透明度
- float player_danmaku_scalingfactor = 13; // 弹幕缩放比例
- float player_danmaku_domain = 14; // 弹幕显示区域
- int32 player_danmaku_speed = 15; // 弹幕速度
- bool player_danmaku_enableblocklist = 16; // 是否开启屏蔽列表
- bool inline_player_danmaku_switch = 17; // 是否开启弹幕
- int32 inline_player_danmaku_config = 18; //
- int32 player_danmaku_ios_switch_save = 19; //
- int32 player_danmaku_senior_mode_switch = 20; //
+ bool player_danmaku_switch = 1; // 是否开启弹幕
+ bool player_danmaku_switch_save = 2; // 是否记录弹幕开关设置
+ bool player_danmaku_use_default_config = 3; // 是否使用推荐弹幕设置
+ bool player_danmaku_ai_recommended_switch = 4; // 是否开启智能云屏蔽
+ int32 player_danmaku_ai_recommended_level = 5; // 智能云屏蔽等级
+ bool player_danmaku_blocktop = 6; // 是否屏蔽顶端弹幕
+ bool player_danmaku_blockscroll = 7; // 是否屏蔽滚动弹幕
+ bool player_danmaku_blockbottom = 8; // 是否屏蔽底端弹幕
+ bool player_danmaku_blockcolorful = 9; // 是否屏蔽彩色弹幕
+ bool player_danmaku_blockrepeat = 10; // 是否屏蔽重复弹幕
+ bool player_danmaku_blockspecial = 11; // 是否屏蔽高级弹幕
+ float player_danmaku_opacity = 12; // 弹幕不透明度
+ float player_danmaku_scalingfactor = 13; // 弹幕缩放比例
+ float player_danmaku_domain = 14; // 弹幕显示区域
+ int32 player_danmaku_speed = 15; // 弹幕速度
+ bool player_danmaku_enableblocklist = 16; // 是否开启屏蔽列表
+ bool inline_player_danmaku_switch = 17; // 是否开启弹幕
+ int32 inline_player_danmaku_config = 18; //
+ int32 player_danmaku_ios_switch_save = 19; //
+ int32 player_danmaku_senior_mode_switch = 20; //
+ int32 player_danmaku_ai_recommended_level_v2 = 21; //
+ map player_danmaku_ai_recommended_level_v2_map = 22; //
+}
+
+//
+message DanmuPlayerConfigPanel {
+ //
+ string selection_text = 1;
}
// 弹幕显示区域自动配置
@@ -183,31 +312,52 @@ message DanmuPlayerViewConfig {
DanmuPlayerConfig danmuku_player_config = 2;
// 弹幕显示区域自动配置列表
repeated DanmuPlayerDynamicConfig danmuku_player_dynamic_config = 3;
+ //
+ DanmuPlayerConfigPanel danmuku_player_config_panel = 4;
}
// web端用户弹幕配置
message DanmuWebPlayerConfig {
- bool dm_switch = 1; // 是否开启弹幕
- bool ai_switch = 2; // 是否开启智能云屏蔽
- int32 ai_level = 3; // 智能云屏蔽等级
- bool blocktop = 4; // 是否屏蔽顶端弹幕
- bool blockscroll = 5; // 是否屏蔽滚动弹幕
- bool blockbottom = 6; // 是否屏蔽底端弹幕
- bool blockcolor = 7; // 是否屏蔽彩色弹幕
- bool blockspecial = 8; // 是否屏蔽重复弹幕
- bool preventshade = 9; //
- 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 draw_type = 20; // 弹幕渲染类型
- int32 senior_mode_switch = 21; //
+ bool dm_switch = 1; // 是否开启弹幕
+ bool ai_switch = 2; // 是否开启智能云屏蔽
+ int32 ai_level = 3; // 智能云屏蔽等级
+ bool blocktop = 4; // 是否屏蔽顶端弹幕
+ bool blockscroll = 5; // 是否屏蔽滚动弹幕
+ bool blockbottom = 6; // 是否屏蔽底端弹幕
+ bool blockcolor = 7; // 是否屏蔽彩色弹幕
+ bool blockspecial = 8; // 是否屏蔽重复弹幕
+ bool preventshade = 9; //
+ 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 draw_type = 20; // 弹幕渲染类型
+ int32 senior_mode_switch = 21; //
+ int32 ai_level_v2 = 22; //
+ map ai_level_v2_map = 23; //
+}
+
+// 弹幕属性位值
+enum DMAttrBit {
+ DMAttrBitProtect = 0; // 保护弹幕
+ DMAttrBitFromLive = 1; // 直播弹幕
+ DMAttrHighLike = 2; // 高赞弹幕
+}
+
+message DmColorful {
+ DmColorfulType type = 1; // 颜色类型
+ string src = 2; //
+}
+
+enum DmColorfulType {
+ NoneType = 0; // 无
+ VipGradualColor = 60001; // 渐变色
}
//
@@ -221,31 +371,30 @@ message DmExpoReportReq {
}
//
-message DmExpoReportRes {
-
-}
+message DmExpoReportRes {}
// 修改弹幕配置-请求
message DmPlayerConfigReq {
- int64 ts = 1; //
- PlayerDanmakuSwitch switch = 2; // 是否开启弹幕
- PlayerDanmakuSwitchSave switch_save = 3; // 是否记录弹幕开关设置
- PlayerDanmakuUseDefaultConfig use_default_config = 4; // 是否使用推荐弹幕设置
- PlayerDanmakuAiRecommendedSwitch ai_recommended_switch = 5; // 是否开启智能云屏蔽
- PlayerDanmakuAiRecommendedLevel ai_recommended_level = 6; // 智能云屏蔽等级
- PlayerDanmakuBlocktop blocktop = 7; // 是否屏蔽顶端弹幕
- PlayerDanmakuBlockscroll blockscroll = 8; // 是否屏蔽滚动弹幕
- PlayerDanmakuBlockbottom blockbottom = 9; // 是否屏蔽底端弹幕
- PlayerDanmakuBlockcolorful blockcolorful = 10; // 是否屏蔽彩色弹幕
- PlayerDanmakuBlockrepeat blockrepeat = 11; // 是否屏蔽重复弹幕
- PlayerDanmakuBlockspecial blockspecial = 12; // 是否屏蔽高级弹幕
- PlayerDanmakuOpacity opacity = 13; // 弹幕不透明度
- PlayerDanmakuScalingfactor scalingfactor = 14; // 弹幕缩放比例
- PlayerDanmakuDomain domain = 15; // 弹幕显示区域
- PlayerDanmakuSpeed speed = 16; // 弹幕速度
- PlayerDanmakuEnableblocklist enableblocklist = 17; // 是否开启屏蔽列表
- InlinePlayerDanmakuSwitch inlinePlayerDanmakuSwitch = 18; // 是否开启弹幕
- PlayerDanmakuSeniorModeSwitch senior_mode_switch = 19; //
+ int64 ts = 1; //
+ PlayerDanmakuSwitch switch = 2; // 是否开启弹幕
+ PlayerDanmakuSwitchSave switch_save = 3; // 是否记录弹幕开关设置
+ PlayerDanmakuUseDefaultConfig use_default_config = 4; // 是否使用推荐弹幕设置
+ PlayerDanmakuAiRecommendedSwitch ai_recommended_switch = 5; // 是否开启智能云屏蔽
+ PlayerDanmakuAiRecommendedLevel ai_recommended_level = 6; // 智能云屏蔽等级
+ PlayerDanmakuBlocktop blocktop = 7; // 是否屏蔽顶端弹幕
+ PlayerDanmakuBlockscroll blockscroll = 8; // 是否屏蔽滚动弹幕
+ PlayerDanmakuBlockbottom blockbottom = 9; // 是否屏蔽底端弹幕
+ PlayerDanmakuBlockcolorful blockcolorful = 10; // 是否屏蔽彩色弹幕
+ PlayerDanmakuBlockrepeat blockrepeat = 11; // 是否屏蔽重复弹幕
+ PlayerDanmakuBlockspecial blockspecial = 12; // 是否屏蔽高级弹幕
+ PlayerDanmakuOpacity opacity = 13; // 弹幕不透明度
+ PlayerDanmakuScalingfactor scalingfactor = 14; // 弹幕缩放比例
+ PlayerDanmakuDomain domain = 15; // 弹幕显示区域
+ PlayerDanmakuSpeed speed = 16; // 弹幕速度
+ PlayerDanmakuEnableblocklist enableblocklist = 17; // 是否开启屏蔽列表
+ InlinePlayerDanmakuSwitch inlinePlayerDanmakuSwitch = 18; // 是否开启弹幕
+ PlayerDanmakuSeniorModeSwitch senior_mode_switch = 19; //
+ PlayerDanmakuAiRecommendedLevelV2 ai_recommended_level_v2 = 20; //
}
//
@@ -265,6 +414,7 @@ message DmSegMobileReply {
int32 state = 2;
// 弹幕云屏蔽ai评分值
DanmakuAIFlag ai_flag = 3;
+ repeated DmColorful colorfulSrc = 5;
}
// 获取弹幕-请求
@@ -280,6 +430,14 @@ message DmSegMobileReq {
int64 segment_index = 4;
// 是否青少年模式
int32 teenagers_mode = 5;
+ //
+ int64 ps = 6;
+ //
+ int64 pe = 7;
+ //
+ int32 pull_mode = 8;
+ //
+ int32 from_scene = 9;
}
// ott弹幕列表-响应
@@ -361,6 +519,12 @@ message DmViewReply {
BuzzwordConfig buzzword_config = 15;
//
repeated Expressions expressions = 16;
+ //
+ repeated PostPanel post_panel = 17;
+ //
+ repeated string activity_meta = 18;
+ //
+ repeated PostPanelV2 post_panel2 = 19;
}
// 客户端弹幕元数据-请求
@@ -379,6 +543,7 @@ message DmViewReq {
}
// web端弹幕元数据-响应
+// https://api.bilibili.com/x/v2/dm/web/view
message DmWebViewReply {
// 是否已关闭弹幕
// 0:未关闭 1:已关闭
@@ -405,6 +570,10 @@ message DmWebViewReply {
repeated string report_filter_content = 11;
//
repeated Expressions expressions = 12;
+ //
+ repeated PostPanel post_panel = 13;
+ //
+ repeated string activity_meta = 14;
}
//
@@ -413,6 +582,12 @@ message ExpoReport {
bool should_report_at_end = 1;
}
+//
+enum ExposureType {
+ ExposureTypeNone = 0; //
+ ExposureTypeDMSend = 1; //
+}
+
//
message Expression {
//
@@ -429,6 +604,32 @@ message Expressions {
repeated Expression data = 1;
}
+// 是否开启弹幕
+message InlinePlayerDanmakuSwitch {
+ //
+ bool value = 1;
+}
+
+//
+message Label {
+ //
+ string title = 1;
+ //
+ repeated string content = 2;
+}
+
+//
+message LabelV2 {
+ //
+ string title = 1;
+ //
+ repeated string content = 2;
+ //
+ bool exposure_once = 3;
+ //
+ int32 exposure_type = 4;
+}
+
//
message Period {
//
@@ -437,42 +638,93 @@ message Period {
int64 end = 2;
}
-// 是否开启弹幕
-message InlinePlayerDanmakuSwitch {bool value = 1;}
-// 智能云屏蔽等级
-message PlayerDanmakuAiRecommendedLevel {bool value = 1;}
-// 是否开启智能云屏蔽
-message PlayerDanmakuAiRecommendedSwitch {bool value = 1;}
-// 是否屏蔽底端弹幕
-message PlayerDanmakuBlockbottom {bool value = 1;}
-// 是否屏蔽彩色弹幕
-message PlayerDanmakuBlockcolorful {bool value = 1;}
-// 是否屏蔽重复弹幕
-message PlayerDanmakuBlockrepeat {bool value = 1;}
-// 是否屏蔽滚动弹幕
-message PlayerDanmakuBlockscroll {bool value = 1;}
-// 是否屏蔽高级弹幕
-message PlayerDanmakuBlockspecial {bool value = 1;}
-// 是否屏蔽顶端弹幕
-message PlayerDanmakuBlocktop {bool value = 1;}
-// 弹幕显示区域
-message PlayerDanmakuDomain {float value = 1;}
-// 是否开启屏蔽列表
-message PlayerDanmakuEnableblocklist {bool value = 1;}
-// 弹幕不透明度
-message PlayerDanmakuOpacity {float value = 1;}
-// 弹幕缩放比例
-message PlayerDanmakuScalingfactor {float value = 1;}
+message PlayerDanmakuAiRecommendedLevel {bool value = 1;} // 智能云屏蔽等级
+message PlayerDanmakuAiRecommendedLevelV2 {int32 value = 1;} //
+message PlayerDanmakuAiRecommendedSwitch {bool value = 1;} // 是否开启智能云屏蔽
+message PlayerDanmakuBlockbottom {bool value = 1;} // 是否屏蔽底端弹幕
+message PlayerDanmakuBlockcolorful {bool value = 1;} // 是否屏蔽彩色弹幕
+message PlayerDanmakuBlockrepeat {bool value = 1;} // 是否屏蔽重复弹幕
+message PlayerDanmakuBlockscroll {bool value = 1;} // 是否屏蔽滚动弹幕
+message PlayerDanmakuBlockspecial {bool value = 1;} // 是否屏蔽高级弹幕
+message PlayerDanmakuBlocktop {bool value = 1;} // 是否屏蔽顶端弹幕
+message PlayerDanmakuDomain {float value = 1;} // 弹幕显示区域
+message PlayerDanmakuEnableblocklist {bool value = 1;} // 是否开启屏蔽列表
+message PlayerDanmakuOpacity {float value = 1;} // 弹幕不透明度
+message PlayerDanmakuScalingfactor {float value = 1;} // 弹幕缩放比例
+message PlayerDanmakuSeniorModeSwitch {int32 value = 1;} //
+message PlayerDanmakuSpeed {int32 value = 1;} // 弹幕速度
+message PlayerDanmakuSwitch {bool value = 1; bool can_ignore = 2;} // 是否开启弹幕
+message PlayerDanmakuSwitchSave {bool value = 1;} // 是否记录弹幕开关设置
+message PlayerDanmakuUseDefaultConfig {bool value = 1;} // 是否使用推荐弹幕设置
+
//
-message PlayerDanmakuSeniorModeSwitch {int32 value = 1;}
-// 弹幕速度
-message PlayerDanmakuSpeed {int32 value = 1;}
-// 是否开启弹幕
-message PlayerDanmakuSwitch {bool value = 1;bool canIgnore = 2;}
-// 是否记录弹幕开关设置
-message PlayerDanmakuSwitchSave {bool value = 1;}
-// 是否使用推荐弹幕设置
-message PlayerDanmakuUseDefaultConfig {bool value = 1;}
+message PostPanel {
+ //
+ int64 start = 1;
+ //
+ int64 end = 2;
+ //
+ int64 priority = 3;
+ //
+ int64 biz_id = 4;
+ //
+ PostPanelBizType biz_type = 5;
+ //
+ ClickButton click_button = 6;
+ //
+ TextInput text_input = 7;
+ //
+ CheckBox check_box = 8;
+ //
+ Toast toast = 9;
+}
+
+//
+enum PostPanelBizType {
+ PostPanelBizTypeNone = 0; //
+ PostPanelBizTypeEncourage = 1; //
+ PostPanelBizTypeColorDM = 2; //
+ PostPanelBizTypeNFTDM = 3; //
+ PostPanelBizTypeFragClose = 4; //
+ PostPanelBizTypeRecommend = 5; //
+}
+
+//
+message PostPanelV2 {
+ //
+ int64 start = 1;
+ //
+ int64 end = 2;
+ //
+ int32 biz_type = 3;
+ //
+ ClickButtonV2 click_button = 4;
+ //
+ TextInputV2 text_input = 5;
+ //
+ CheckBoxV2 check_box = 6;
+ //
+ ToastV2 toast = 7;
+ //
+ BubbleV2 bubble = 8;
+ //
+ LabelV2 label = 9;
+ //
+ int32 post_status = 10;
+}
+
+//
+enum PostStatus {
+ PostStatusNormal = 0; //
+ PostStatusClosed = 1; //
+}
+
+//
+enum RenderType {
+ RenderTypeNone = 0; //
+ RenderTypeSingle = 1; //
+ RenderTypeRotation = 2; //
+}
// 修改弹幕配置-响应
message Response {
@@ -482,6 +734,19 @@ message Response {
string message = 2;
}
+//
+enum SubtitleAiStatus {
+ None = 0; //
+ Exposure = 1; //
+ Assist = 2; //
+}
+
+//
+enum SubtitleAiType {
+ Normal = 0; //
+ Translate = 1; //
+}
+
// 单个字幕信息
message SubtitleItem {
// 字幕id
@@ -498,6 +763,12 @@ message SubtitleItem {
UserInfo author = 6;
// 字幕类型
SubtitleType type = 7;
+ //
+ string lan_doc_brief = 8;
+ //
+ SubtitleAiType ai_type = 9;
+ //
+ SubtitleAiStatus ai_status = 10;
}
enum SubtitleType {
@@ -505,6 +776,78 @@ enum SubtitleType {
AI = 1; // AI生成字幕
}
+//
+message TextInput {
+ //
+ repeated string portrait_placeholder = 1;
+ //
+ repeated string landscape_placeholder = 2;
+ //
+ RenderType render_type = 3;
+ //
+ bool placeholder_post = 4;
+ //
+ bool show = 5;
+ //
+ repeated Avatar avatar = 6;
+ //
+ PostStatus post_status = 7;
+ //
+ Label label = 8;
+}
+
+//
+message TextInputV2 {
+ //
+ repeated string portrait_placeholder = 1;
+ //
+ repeated string landscape_placeholder = 2;
+ //
+ RenderType render_type = 3;
+ //
+ bool placeholder_post = 4;
+ //
+ repeated Avatar avatar = 5;
+ //
+ int32 text_input_limit = 6;
+}
+
+//
+message Toast {
+ //
+ string text = 1;
+ //
+ int32 duration = 2;
+ //
+ bool show = 3;
+ //
+ Button button = 4;
+}
+
+//
+message ToastButtonV2 {
+ //
+ string text = 1;
+ //
+ int32 action = 2;
+}
+
+//
+enum ToastFunctionType {
+ ToastFunctionTypeNone = 0; //
+ ToastFunctionTypePostPanel = 1; //
+}
+
+//
+message ToastV2 {
+ //
+ string text = 1;
+ //
+ int32 duration = 2;
+ //
+ ToastButtonV2 toast_button_v2 = 3;
+}
+
// 字幕作者信息
message UserInfo {
// 用户mid
diff --git a/grpc_api/bilibili/community/service/govern/v1/govern.proto b/grpc_api/bilibili/community/service/govern/v1/govern.proto
index 6ae4ac2..6656eaa 100644
--- a/grpc_api/bilibili/community/service/govern/v1/govern.proto
+++ b/grpc_api/bilibili/community/service/govern/v1/govern.proto
@@ -23,9 +23,11 @@ message QoeReportReq {
//
string business_type = 5;
//
- QoeScoreResult score_result = 6;
+ int64 oid = 6;
//
- string business_data = 7;
+ QoeScoreResult score_result = 7;
+ //
+ string business_data = 8;
}
//
diff --git a/grpc_api/bilibili/dagw/component/avatar/common/common.proto b/grpc_api/bilibili/dagw/component/avatar/common/common.proto
new file mode 100644
index 0000000..4823322
--- /dev/null
+++ b/grpc_api/bilibili/dagw/component/avatar/common/common.proto
@@ -0,0 +1,108 @@
+syntax = "proto3";
+
+package bilibili.dagw.component.avatar.common;
+
+//
+message BasicRenderSpec {
+ //
+ double opacity = 1;
+}
+
+//
+message ColorConfig {
+ //
+ bool is_dark_mode_aware = 1;
+ //
+ ColorSpec day = 2;
+ //
+ ColorSpec night = 3;
+}
+
+//
+message ColorSpec {
+ //
+ string argb = 1;
+}
+
+//
+message LayerGeneralSpec {
+ //
+ PositionSpec pos_spec = 1;
+ //
+ SizeSpec size_spec = 2;
+ //
+ BasicRenderSpec render_spec = 3;
+}
+
+//
+message MaskProperty {
+ //
+ LayerGeneralSpec general_spec = 1;
+ //
+ ResourceSource mask_src = 2;
+}
+
+//
+message NativeDrawRes {
+ //
+ int32 draw_type = 1;
+ //
+ int32 fill_mode = 2;
+ //
+ ColorConfig color_config = 3;
+ //
+ double edge_weight = 4;
+}
+
+//
+message PositionSpec {
+ //
+ int32 coordinate_pos = 1;
+ //
+ double axis_x = 2;
+ //
+ double axis_y = 3;
+}
+
+//
+message RemoteRes {
+ //
+ string url = 1;
+ //
+ string bfs_style = 2;
+}
+
+//
+message ResourceSource {
+ //
+ enum LocalRes {
+ LOCAL_RES_INVALID = 0;
+ LOCAL_RES_ICON_VIP = 1;
+ LOCAL_RES_ICON_SMALL_VIP = 2;
+ LOCAL_RES_ICON_PERSONAL_VERIFY = 3;
+ LOCAL_RES_ICON_ENTERPRISE_VERIFY = 4;
+ LOCAL_RES_ICON_NFT_MAINLAND = 5;
+ LOCAL_RES_DEFAULT_AVATAR = 6;
+ }
+ //
+ int32 src_type = 1;
+ //
+ int32 placeholder = 2;
+ //
+ oneof res {
+ //
+ RemoteRes remote = 3;
+ //
+ LocalRes local = 4;
+ //
+ NativeDrawRes draw = 5;
+ }
+}
+
+//
+message SizeSpec {
+ //
+ double width = 1;
+ //
+ double height = 2;
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/dagw/component/avatar/v1/avatar.proto b/grpc_api/bilibili/dagw/component/avatar/v1/avatar.proto
new file mode 100644
index 0000000..d1be861
--- /dev/null
+++ b/grpc_api/bilibili/dagw/component/avatar/v1/avatar.proto
@@ -0,0 +1,112 @@
+syntax = "proto3";
+
+package bilibili.dagw.component.avatar.v1;
+
+import "bilibili/dagw/component/avatar/common/common.proto";
+import "bilibili/dagw/component/avatar/v1/plugin.proto";
+
+//
+message AvatarItem {
+ //
+ bilibili.dagw.component.avatar.common.SizeSpec container_size = 1;
+ //
+ repeated LayerGroup layers = 2;
+ //
+ LayerGroup fallback_layers = 3;
+ //
+ int64 mid = 4;
+}
+
+//
+message BasicLayerResource {
+ //
+ int32 res_type = 1;
+ //
+ oneof payload {
+ //
+ ResImage res_image = 2;
+ //
+ ResAnimation res_animation = 3;
+ ///
+ ResNativeDraw res_native_draw = 4;
+ };
+}
+
+//
+message GeneralConfig {
+ //
+ map web_css_style = 1;
+}
+
+//
+message Layer {
+ //
+ string layer_id = 1;
+ //
+ bool visible = 2;
+ //
+ bilibili.dagw.component.avatar.common.LayerGeneralSpec general_spec = 3;
+ //
+ LayerConfig layer_config = 4;
+ //
+ BasicLayerResource resource = 5;
+}
+
+//
+message LayerConfig {
+ //
+ map tags = 1;
+ //
+ bool is_critical = 2;
+ //
+ bool allow_over_paint = 3;
+ //
+ bilibili.dagw.component.avatar.common.MaskProperty layer_mask = 4;
+}
+
+//
+message LayerGroup {
+ //
+ string group_id = 1;
+ //
+ repeated Layer layers = 2;
+ //
+ bilibili.dagw.component.avatar.common.MaskProperty group_mask = 3;
+ //
+ bool is_critical_group = 4;
+}
+
+//
+message LayerTagConfig {
+ //
+ int32 config_type = 1;
+ //
+ oneof config {
+ //
+ GeneralConfig general_config = 2;
+ //
+ bilibili.dagw.component.avatar.v1.plugin.GyroConfig gyro_config = 3;
+ //
+ bilibili.dagw.component.avatar.v1.plugin.CommentDoubleClickConfig comment_doubleClick_config = 4;
+ //
+ bilibili.dagw.component.avatar.v1.plugin.LiveAnimeConfig live_anime_config = 5;
+ };
+}
+
+//
+message ResAnimation {
+ //
+ bilibili.dagw.component.avatar.common.ResourceSource webp_src = 1;
+}
+
+//
+message ResImage {
+ //
+ bilibili.dagw.component.avatar.common.ResourceSource image_src = 1;
+}
+
+//
+message ResNativeDraw {
+ //
+ bilibili.dagw.component.avatar.common.ResourceSource draw_src = 1;
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/dagw/component/avatar/v1/plugin.proto b/grpc_api/bilibili/dagw/component/avatar/v1/plugin.proto
new file mode 100644
index 0000000..7e88289
--- /dev/null
+++ b/grpc_api/bilibili/dagw/component/avatar/v1/plugin.proto
@@ -0,0 +1,93 @@
+syntax = "proto3";
+
+package bilibili.dagw.component.avatar.v1.plugin;
+
+import "bilibili/dagw/component/avatar/common/common.proto";
+
+//
+message CommentDoubleClickConfig {
+ //
+ Interaction interaction = 1;
+ //
+ double animation_scale = 2;
+}
+
+//
+message GyroConfig {
+ //
+ NFTImageV2 gyroscope = 1;
+}
+
+//
+message GyroscopeContentV2 {
+ //
+ string file_url = 1;
+ //
+ float scale = 2;
+ //
+ repeated PhysicalOrientationV2 physical_orientation = 3;
+}
+
+//
+message GyroscopeEntityV2 {
+ //
+ string display_type = 1;
+ //
+ repeated GyroscopeContentV2 contents = 2;
+}
+
+//
+message Interaction {
+ //
+ string nft_id = 1;
+ //
+ bool enabled = 2;
+ //
+ string itype = 3;
+ //
+ string metadata_url = 4;
+}
+
+//
+message LiveAnimeConfig {
+ //
+ bool is_live = 1;
+}
+
+//
+message LiveAnimeItem {
+ //
+ bilibili.dagw.component.avatar.common.ColorConfig color = 1;
+ //
+ double start_ratio = 2;
+ //
+ double end_ratio = 3;
+ //
+ double start_stroke = 4;
+ //
+ double start_opacity = 5;
+ //
+ int64 phase = 6;
+}
+
+//
+message NFTImageV2 {
+ //
+ repeated GyroscopeEntityV2 gyroscope = 1;
+}
+
+//
+message PhysicalOrientationAnimation {
+ //
+ string type = 1;
+ //
+ string bezier = 3;
+}
+
+//
+message PhysicalOrientationV2 {
+ //
+ string type = 1;
+ //
+ repeated PhysicalOrientationAnimation animations = 3;
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/dynamic/common/dynamic.proto b/grpc_api/bilibili/dynamic/common/dynamic.proto
index 39d966b..9a25d0c 100644
--- a/grpc_api/bilibili/dynamic/common/dynamic.proto
+++ b/grpc_api/bilibili/dynamic/common/dynamic.proto
@@ -1,9 +1,25 @@
syntax = "proto3";
-package bilibili.dynamic;
+package bilibili.dynamic.common;
import "bilibili/app/dynamic/v2/dynamic.proto";
+//
+message Article {
+ //
+ int64 category_id = 1;
+ //
+ int64 list_id = 2;
+ //
+ int32 originality = 3;
+ //
+ int32 reproduced = 4;
+ //
+ repeated Pic cover = 5;
+ //
+ repeated string biz_tags = 6;
+}
+
// at分组信息
message AtGroup {
// 分组类型
@@ -75,6 +91,11 @@ enum AttachCardType {
ATTACH_CARD_PUGV = 13; // 课程
ATTACH_CARD_RESERVE = 14; // 预约
ATTACH_CARD_UP_TOPIC = 15; // up主话题活动
+ ATTACH_CARD_UP_ACTIVITY = 16;
+ ATTACH_CARD_UP_MAOER = 17;
+ ATTACH_CARD_MEMBER_GOODS = 18;
+ ATTACH_CARD_MAN_TIAN_XING = 19;
+ ATTACH_CARD_LOTTERY = 20;
}
//
@@ -85,6 +106,30 @@ message BottomBusiness {
int64 type = 2;
}
+//
+message CardParagraph {
+ //
+ LinkNode card = 1;
+ //
+ string default_text = 2;
+}
+
+//
+message CodeParagraph {
+ //
+ string lang = 1;
+ //
+ string content = 2;
+}
+
+//
+message Colors {
+ //
+ string color_day = 1;
+ //
+ string color_night = 2;
+}
+
//
enum ContentType {
CONTENT_TYPE_NONE = 0; // 占位
@@ -125,6 +170,8 @@ message CreateAttachCard {
CreateGoodsCard goods = 1;
// 通用附加大卡,目前仅限定Match,Game,Ugc,Pugv,Reserve,且同时只能有一个
CreateCommonAttachCard common_card = 2;
+ // 商业推广大卡
+ CreateCommercialCard commercial = 3;
}
// 发布页预校验-响应
@@ -141,6 +188,14 @@ message CreateCheckResp {
PlusRedDot plus_red_dot = 5;
}
+//
+message CreateCommercialCard {
+ //
+ int64 commercial_entity_type = 1;
+ //
+ int64 commercial_entity_id = 2;
+}
+
// 创建动态时附带的通用附加卡详情
message CreateCommonAttachCard {
// 通用附加卡的类型
@@ -157,6 +212,8 @@ message CreateCommonAttachCard {
message CreateContent {
// 描述信息(已按高亮拆分)
repeated CreateContentItem contents = 1;
+ //
+ string title = 2;
}
// 文本描述
@@ -230,6 +287,12 @@ message CreateDynVideo {
int64 up_from = 28;
//
int64 duration = 29;
+ //
+ int64 topic_id = 30;
+ //
+ string upload_id = 31;
+ //
+ DynVideoTopic topic_detail = 32;
}
// 创建动态视频的应答包(透传给客户端)
@@ -257,6 +320,7 @@ enum CreateInitCheckScene {
CREATE_INIT_CHECK_SCENE_REPOST = 2; // 动态feed流转发、三点分享,动态详情页转发
CREATE_INIT_CHECK_SCENE_SHARE = 3; // 其他页面分享到动态
CREATE_INIT_CHECK_SCENE_RESERVE_SHARE = 4; //
+ CREATE_INIT_CHECK_SCENE_ARTICLE = 5;
}
// 动态创建时的特殊选项
@@ -280,6 +344,18 @@ message CreateOption {
VideoShareInfo video_share_info = 6;
//
CreateActivity activity = 7;
+ //
+ int32 pic_mode = 10;
+ // 粉丝专享(充电专享)
+ int64 only_fans = 11;
+ // 限制推广?
+ int32 limit_pegasus = 12;
+ // 限制搜索?
+ int32 limit_search = 13;
+ // 定时发布
+ int64 timer_pub_time = 14;
+ //
+ int64 only_fans_dnd = 15;
}
// 创建图文动态时的图片信息
@@ -342,6 +418,8 @@ message CreateResp {
bilibili.app.dynamic.v2.DynamicItem fake_card = 5;
// 视频
CreateDynVideoResult video_result = 6;
+ //
+ ShareDynWindow share_window = 7;
}
// 发布类型(场景)
@@ -356,6 +434,9 @@ enum CreateScene {
CREATE_SCENE_SHARE_PROGRAM = 7; // 分享小程序
CREATE_SCENE_REPLY_SYNC = 8; // 评论同步到动态
CREATE_SCENE_REPLY_CREATE_ACTIVITY = 9; // 评论同步到动态并且发起活动
+ CREATE_SCENE_CREATE_AD = 10; // 广告推广
+ CREATE_SCENE_CREATE_LIVE_RCMD = 11; // 直播推荐
+ CREATE_SCENE_CREATE_ARTICLE = 12; // 动态文章
}
// 动态附带的小卡
@@ -368,12 +449,18 @@ message CreateTag {
BottomBusiness diversion = 3;
}
-//
+//
message CreateTopic {
- //
+ //
int64 id = 1;
- //
+ //
string name = 2;
+ //
+ string from_source = 3;
+ //
+ int64 from_topic_id = 4;
+ //
+ int64 super_topic_id = 5;
}
// 动态的标识
@@ -526,6 +613,14 @@ message DynVideoSubmitActBanner {
repeated DynVideoHotAct list = 3;
}
+//
+message DynVideoTopic {
+ //
+ string from_source = 1;
+ //
+ int64 from_topic_id = 2;
+}
+
//
message DynVideoVote {
//
@@ -549,6 +644,12 @@ message DynVideoWatermark {
int32 position = 3;
}
+//
+message EmoteNode {
+ //
+ string raw_text = 1;
+}
+
//
message ExtLbs {
//
@@ -569,6 +670,16 @@ message ExtLbs {
string show_distance = 8;
}
+//
+message FormulaNode {
+ //
+ string latex_content = 1;
+ //
+ ImgInlineCfg image_spec = 2;
+ //
+ bytes png_image_data = 3;
+}
+
// 根据name取uid-请求
message GetUidByNameReq {
// 查询昵称列表
@@ -592,6 +703,16 @@ message GoodsContent {
int64 shop_id = 3;
}
+//
+message ImgInlineCfg {
+ //
+ double width = 1;
+ //
+ double height = 2;
+ //
+ Colors color = 3;
+}
+
// UP已经创建的活动列表
message LaunchedActivity {
// 模块名称,示例:"已创建的活动"
@@ -622,6 +743,30 @@ message LbsLoc {
double lng = 2;
}
+//
+message LineParagraph {
+ //
+ Pic pic = 1;
+}
+
+//
+message LinkNode {
+ //
+ string show_text = 1;
+ //
+ string link = 2;
+ //
+ string icon = 3;
+ //
+ string icon_suffix = 4;
+ //
+ int32 link_type = 5;
+ //
+ string biz_id = 6;
+ //
+ VideoTs video_ts = 7;
+}
+
//
message MetaDataCtrl {
// 客户端平台
@@ -653,6 +798,232 @@ message MetaDataCtrl {
string ip = 13;
}
+//
+message OnlyFansDndSetting {
+ //
+ string title = 1;
+ //
+ string pop_title = 2;
+ //
+ string pop_desc = 3;
+ //
+ string pop_picture = 4;
+ //
+ string pop_btn_text = 5;
+}
+
+//
+message OnlyFansOption {
+ //
+ OnlyFansOptionType type = 1;
+ //
+ int32 disabled = 2;
+ //
+ string title = 3;
+ //
+ string subtitle = 4;
+ //
+ string icon = 5;
+ //
+ string only_fans_name = 6;
+ //
+ string desc_subtitle = 7;
+}
+
+enum OnlyFansOptionType {
+ //
+ ONLY_FANS_OPTION_NONE = 0;
+ //
+ ONLY_FANS_OPTION_UPOWER = 1;
+ //
+ ONLY_FANS_OPTION_HIGH_UPOWER = 2;
+}
+
+//
+message OnlyFansPermission {
+ //
+ int32 permission = 1;
+ //
+ string title = 2;
+ //
+ string subtitle = 3;
+ //
+ string icon = 4;
+ //
+ string toast = 5;
+ //
+ repeated OnlyFansOption options = 6;
+ //
+ OnlyFansDndSetting dnd_setting = 7;
+}
+
+//
+message Opus {
+ //
+ int64 opus_id = 1;
+ //
+ int32 opus_source = 2;
+ //
+ string title = 3;
+ //
+ int64 cover_avid = 4;
+ //
+ string h5_content = 5;
+ //
+ OpusContent content = 6;
+ //
+ repeated OpusTag tags = 7;
+ //
+ PubInfo pub_info = 8;
+ //
+ Article article = 9;
+}
+
+//
+enum OpusBizType {
+ DEFAULT = 0;
+ VIDEO = 1;
+ RESERVE = 2;
+ BIZ_VOTE = 3; // rename from "VOTE" due to name collision
+ LIVE = 4;
+ BIZ_LOTTERY = 5; // rename from "LOTTERY" due to name collision
+ MATCH = 6;
+ BIZ_GOODS = 7; // rename from "GOODS" due to name collision
+ OGV_SS = 8;
+ BIZ_OGV_EP = 9; // rename from "OGV_EP" due to name collision
+ MANGA = 10;
+ CHEESE = 11;
+ VIDEO_TS = 12;
+ BIZ_AT = 13; // rename from "AT" due to name collision
+ HASH_TAG = 14;
+ BIZ_CV = 15; // rename from "CV" due to name collision
+ URL = 16;
+ BIZ_MAIL = 17; // rename from "MAIL" due to name collision
+ LBS = 18;
+ ACTIVITY = 19;
+ BIZ_ATTACH_CARD_OFFICIAL_ACTIVITY = 20; // rename from "ATTACH_CARD_OFFICIAL_ACTIVITY" due to name collision
+ GAME = 21;
+ DECORATION = 22;
+ UP_TOPIC = 23;
+ UP_ACTIVITY = 24;
+ UP_MAOER = 25;
+ MEMBER_GOODS = 26;
+ OPENMALL_UP_ITEMS = 27;
+ MUSIC = 29;
+}
+
+//
+message OpusContent {
+ //
+ repeated Paragraph paragraphs = 1;
+}
+
+enum OpusSource {
+ DEFAULT_SOURCE = 0;
+ ALBUM = 1;
+ ARTICLE = 2;
+ NOTE = 3;
+ OGV_COMMENT = 4;
+ ARTICLE_H5 = 5;
+ WORD = 6;
+}
+
+//
+message OpusSummary {
+ //
+ int32 opus_source = 1;
+ //
+ string title = 2;
+ //
+ repeated Pic cover = 3;
+ //
+ OpusContent summary = 4;
+ //
+ repeated OpusTag tags = 5;
+ //
+ PubInfo pub_info = 6;
+}
+
+//
+message OpusTag {
+ //
+ LinkNode tag = 1;
+}
+
+//
+message Paragraph {
+ //
+ enum ParagraphType {
+ DEFAULT = 0;
+ TEXT = 1;
+ PICTURES = 2;
+ LINE = 3;
+ REFERENCE = 4;
+ SORTED_LIST = 5;
+ UNSORTED_LIST = 6;
+ LINK_CARD = 7;
+ }
+ //
+ message ListFormat {
+ //
+ int32 level = 1;
+ //
+ int32 order = 2;
+ //
+ string theme = 3;
+ }
+ //
+ message ParagraphFormat {
+ //
+ int32 align = 1;
+ //
+ ListFormat list_format = 2;
+ }
+
+ //
+ ParagraphType para_type = 1;
+ //
+ ParagraphFormat format = 2;
+ //
+ TextParagraph text = 3;
+ //
+ PicParagraph pic = 4;
+ //
+ LineParagraph line = 5;
+ //
+ CardParagraph link_card = 6;
+ //
+ CodeParagraph code = 7;
+}
+
+//
+message Pic {
+ //
+ string url = 1;
+ //
+ double width = 2;
+ //
+ double height = 3;
+ //
+ double size = 4;
+ //
+ string comment = 5;
+}
+
+//
+message PicParagraph {
+ //
+ enum PicParagraphStyle {
+ DEFAULT = 0;
+ NINE_CELL = 1;
+ SCROLL = 2;
+ }
+ //
+ repeated Pic pics = 1;
+ //
+ PicParagraphStyle style = 2;
+}
+
//
message PlusRedDot {
//
@@ -677,6 +1048,18 @@ message Program {
string jump_text = 7;
}
+//
+message PubInfo {
+ //
+ int64 uid = 1;
+ //
+ int64 pub_time = 2;
+ //
+ int64 last_mtime = 3;
+ //
+ int64 timer_pub_time = 4;
+}
+
// 发布相关的设置项
message PublishSetting {
// 提示转为专栏的最小字数,使用utf-16编码计算字符数
@@ -685,6 +1068,12 @@ message PublishSetting {
int32 max_words_to_article = 2;
// gif上传的最大值,单位:MB
int32 upload_size = 3;
+ //
+ int32 max_at_count = 4;
+ //
+ int32 max_draft_count = 5;
+ //
+ int64 title_max_len = 6;
}
// 发布页小黄条
@@ -737,6 +1126,16 @@ message ShareChannelItem {
ShareReserve reserve = 4;
}
+//
+message ShareDynWindow {
+ //
+ string main_title = 1;
+ //
+ string sub_title = 2;
+ //
+ bilibili.app.dynamic.v2.DynamicItem dyn_item = 3;
+}
+
//
message ShareReserve {
// 标题
@@ -811,6 +1210,35 @@ message Sketch {
string target_url = 7;
}
+//
+message TextNode {
+ //
+ enum TextNodeType {
+ DEFAULT = 0;
+ WORDS = 1;
+ EMOTE = 2;
+ AT = 3;
+ BIZ_LINK = 4;
+ FORMULA = 5;
+ }
+ //
+ TextNodeType node_type = 1;
+ //
+ WordNode word = 2;
+ //
+ EmoteNode emote = 3;
+ //
+ LinkNode link = 4;
+ //
+ FormulaNode formula = 5;
+}
+
+//
+message TextParagraph {
+ //
+ repeated TextNode nodes = 1;
+}
+
// 发布相关的权限内容
message UpPermission {
// 通用权限列表
@@ -819,6 +1247,8 @@ message UpPermission {
LaunchedActivity launched_activity = 2;
//
ShareResult share_result = 3;
+ //
+ OnlyFansPermission only_fans_permission = 4;
}
// 通用发布权限内容的详细定义
@@ -854,6 +1284,9 @@ enum UpPermissionType {
UP_PERMISSION_TYPE_CONTROL_DANMU = 7; // 是否有权限关闭弹幕(仅对动态视频生效),默认有
UP_PERMISSION_TYPE_VIDEO_RESERVE = 8; // 是否可以发起稿件预约
UP_PERMISSION_TYPE_LIVE_RESERVE = 9; // 是否可以发起直播预约
+ UP_PERMISSION_TYPE_BIZ_LINK = 10; //
+ UP_PERMISSION_TYPE_COMMERCIAL = 11; // 是否允许商业推广
+ UP_PERMISSION_TYPE_BIG_COVER = 12; // 是否允许大封面
}
// 用户主动发布(app/web发布)时的meta信息
@@ -873,3 +1306,52 @@ message VideoShareInfo {
//
int32 part = 2;
}
+
+//
+message VideoTs {
+ //
+ int64 cid = 1;
+ //
+ int64 oid_type = 2;
+ //
+ int64 status = 3;
+ //
+ int64 index = 4;
+ //
+ int64 seconds = 5;
+ //
+ int64 cidcount = 6;
+ //
+ string key = 7;
+ //
+ string title = 8;
+ //
+ int64 epid = 9;
+ //
+ string desc = 10;
+}
+
+//
+message WordNode {
+ //
+ message WordNodeStyle {
+ //
+ bool bold = 1;
+ //
+ bool italic = 2;
+ //
+ bool strikethrough = 3;
+ //
+ bool underline = 4;
+ }
+ //
+ string words = 1;
+ //
+ double font_size = 2;
+ //
+ string color = 3;
+ //
+ string dark_color = 4;
+ //
+ WordNodeStyle style = 5;
+}
diff --git a/grpc_api/bilibili/dynamic/gw/gateway.proto b/grpc_api/bilibili/dynamic/gw/gateway.proto
index ad4589c..15f44f5 100644
--- a/grpc_api/bilibili/dynamic/gw/gateway.proto
+++ b/grpc_api/bilibili/dynamic/gw/gateway.proto
@@ -1,5 +1,6 @@
syntax = "proto3";
+// Deprecated
package bilibili.dynamic.gateway;
import "google/protobuf/any.proto";
diff --git a/grpc_api/bilibili/dynamic/interfaces/campus/v1/api.proto b/grpc_api/bilibili/dynamic/interfaces/campus/v1/api.proto
new file mode 100644
index 0000000..b41e761
--- /dev/null
+++ b/grpc_api/bilibili/dynamic/interfaces/campus/v1/api.proto
@@ -0,0 +1,28 @@
+syntax = "proto3";
+
+package bilibili.dynamic.interfaces.campus.v1;
+
+//
+service Campus {
+ //
+ rpc ActionReport (ActionReportReq) returns (ActionReportReply);
+}
+
+//
+message ActionReportReply {}
+
+//
+message ActionReportReq {
+ //
+ string identity = 1;
+ //
+ ActionType action = 2;
+ //
+ int64 campus_id = 3;
+}
+
+//
+enum ActionType {
+ ACTION_NOTHING = 0;
+ ACTION_CLOSE_YELLOW_BAR = 1;
+}
diff --git a/grpc_api/bilibili/dynamic/interfaces/feed/v1/api.proto b/grpc_api/bilibili/dynamic/interfaces/feed/v1/api.proto
index a3308eb..472a831 100644
--- a/grpc_api/bilibili/dynamic/interfaces/feed/v1/api.proto
+++ b/grpc_api/bilibili/dynamic/interfaces/feed/v1/api.proto
@@ -1,67 +1,178 @@
syntax = "proto3";
-package bilibili.main.dynamic.feed.v1;
+package bilibili.dynamic.interfaces.feed.v1;
import "bilibili/dynamic/common/dynamic.proto";
//
service Feed {
- // 发布页预校验
- rpc CreateInitCheck(CreateInitCheckReq) returns (bilibili.dynamic.CreateCheckResp);
- //
- rpc SubmitCheck(SubmitCheckReq) returns (SubmitCheckRsp);
- // 创建动态
- rpc CreateDyn(CreateDynReq) returns (bilibili.dynamic.CreateResp);
- // 根据name取uid
- rpc GetUidByName(bilibili.dynamic.GetUidByNameReq) returns (bilibili.dynamic.GetUidByNameRsp);
+ //
+ rpc AddDynamicReport(AddDynamicReportReq) returns (AddDynamicReportRsp);
// at用户推荐列表
- rpc AtList(bilibili.dynamic.AtListReq) returns (bilibili.dynamic.AtListRsp);
+ rpc AtList(bilibili.dynamic.common.AtListReq) returns (bilibili.dynamic.common.AtListRsp);
// at用户搜索列表
- rpc AtSearch(bilibili.dynamic.AtSearchReq) returns (bilibili.dynamic.AtListRsp);
+ rpc AtSearch(bilibili.dynamic.common.AtSearchReq) returns (bilibili.dynamic.common.AtListRsp);
+ //
+ rpc AttachCardButton(AttachCardButtonReq) returns (AttachCardButtonRsp);
+ //
+ rpc Config(ConfigReq) returns (ConfigRsp);
+ // 创建动态
+ rpc CreateDyn(CreateDynReq) returns (bilibili.dynamic.common.CreateResp);
+ // 发布页预校验
+ rpc CreateInitCheck(CreateInitCheckReq) returns (bilibili.dynamic.common.CreateCheckResp);
//
- rpc ReserveButtonClick(ReserveButtonClickReq) returns (ReserveButtonClickResp);
- //
- rpc CreatePlusButtonClick(CreatePlusButtonClickReq) returns (CreatePlusButtonClickRsp);
- //
- rpc HotSearch(HotSearchReq) returns (HotSearchRsp);
- //
- rpc Suggest(SuggestReq) returns (SuggestRsp);
- //
- rpc DynamicButtonClick(DynamicButtonClickReq) returns (DynamicButtonClickRsp);
+ rpc CreatePageInfos(CreatePageInfosReq) returns (CreatePageInfosRsp);
//
rpc CreatePermissionButtonClick(CreatePermissionButtonClickReq) returns (CreatePermissionButtonClickRsp);
//
- rpc CreatePageInfos(CreatePageInfosReq) returns (CreatePageInfosRsp);
+ rpc CreatePlusButtonClick(CreatePlusButtonClickReq) returns (CreatePlusButtonClickRsp);
+ //
+ rpc DynamicButtonClick(DynamicButtonClickReq) returns (DynamicButtonClickRsp);
+ //
+ rpc DynamicRepost(DynamicRepostReq) returns (bilibili.dynamic.common.CreateResp);
+ //
+ rpc DynamicThumb(DynamicThumbReq) returns (DynamicThumbRsp);
+ //
+ rpc EditDyn(EditDynReq) returns (EditDynRsp);
+ //
+ rpc GetEditDynInfo(GetEditDynInfoReq) returns (GetEditDynInfoRsp);
+ // 根据name取uid
+ rpc GetUidByName(bilibili.dynamic.common.GetUidByNameReq) returns (bilibili.dynamic.common.GetUidByNameRsp);
+ //
+ rpc GoodsAttachCardPreview(GoodsAttachCardPreviewReq) returns (GoodsAttachCardPreviewRsp);
+ //
+ rpc HomeBubbleReport(HomeBubbleReportReq) returns (HomeBubbleReportRsp);
+ //
+ rpc HotSearch(HotSearchReq) returns (HotSearchRsp);
+ //
+ rpc ICreateGoodsReplySync(ICreateGoodsReplySyncReq) returns (ICreateResp);
+ //
+ rpc NearbyPoiList(NearbyPoiListReq) returns (NearbyPoiListRsp);
+ //
+ rpc ReserveButtonClick(ReserveButtonClickReq) returns (ReserveButtonClickResp);
+ //
+ rpc RmDyn(RmDynReq) returns (RmDynRsp);
+ //
+ rpc RmSpaceTop(RmSpaceTopReq) returns (RmSpaceTopRsp);
+ //
+ rpc SearchPoiList(SearchPoiListReq) returns (SearchPoiListRsp);
+ //
+ rpc SetSpaceTop(SetSpaceTopReq) returns (SetSpaceTopRsp);
+ //
+ rpc SubmitCheck(SubmitCheckReq) returns (SubmitCheckRsp);
+ //
+ rpc Suggest(SuggestReq) returns (SuggestRsp);
+}
+
+//
+message AddDynamicReportReq {
+ //
+ int64 accused_uid = 1;
+ //
+ string dynamic_id = 2;
+ //
+ int64 reason_type = 3;
+ //
+ string reason_desc = 4;
+}
+
+//
+message AddDynamicReportRsp {}
+
+//
+message AdInfoDetail {
+ //
+ string nation = 1;
+ //
+ string province = 2;
+ //
+ string city = 3;
+ //
+ string district = 4;
+}
+
+//
+message AttachCardButtonReq {
+ //
+ int32 cur_btn_status = 1;
+ //
+ int64 dynamic_id = 2;
+ //
+ bilibili.dynamic.common.AttachCardType attach_card_type = 3;
+ //
+ string spm_id = 4;
+ //
+ int64 reserve_total = 5;
+ //
+ string dynamic_id_str = 6;
+ //
+ string card_type = 7;
+}
+
+//
+message AttachCardButtonRsp {
+ //
+ int32 final_btn_status = 1;
+ //
+ string toast = 2;
+ //
+ string desc_update = 3;
+ //
+ int64 reserve_update = 4;
+}
+
+//
+message ConfigAB {
+ //
+ ConfigABEntry entry = 1;
+ //
+ int64 value = 2;
+}
+
+//
+enum ConfigABEntry {
+ CONFIG_AB_ENTRY_NONE = 0;
+ CONFIG_AB_ENTRY_PUB_PAGE_TITLE = 1;
+ CONFIG_AB_ENTRY_SELECT_PIC_PANEL = 2;
+}
+
+//
+message ConfigReq {}
+
+//
+message ConfigRsp {
+ //
+ repeated ConfigAB ab_entries = 1;
}
// 创建动态-请求
message CreateDynReq {
// 用户创建接口meta信息
- bilibili.dynamic.UserCreateMeta meta = 1;
+ bilibili.dynamic.common.UserCreateMeta meta = 1;
// 发布的内容
- bilibili.dynamic.CreateContent content = 2;
+ bilibili.dynamic.common.CreateContent content = 2;
// 发布类型
- bilibili.dynamic.CreateScene scene = 3;
+ bilibili.dynamic.common.CreateScene scene = 3;
// 图片内容
- repeated bilibili.dynamic.CreatePic pics = 4;
+ repeated bilibili.dynamic.common.CreatePic pics = 4;
// 转发源
- bilibili.dynamic.DynIdentity repost_src = 5;
+ bilibili.dynamic.common.DynIdentity repost_src = 5;
// 动态视频
- bilibili.dynamic.CreateDynVideo video = 6;
+ bilibili.dynamic.common.CreateDynVideo video = 6;
// 通用模板类型:2048方图 2049竖图 其他值无效
int64 sketch_type = 7;
// 通用模板的元内容(网页内容)
- bilibili.dynamic.Sketch sketch = 8;
+ bilibili.dynamic.common.Sketch sketch = 8;
// 小程序的内容
- bilibili.dynamic.Program program = 9;
+ bilibili.dynamic.common.Program program = 9;
// 动态附加小卡
- bilibili.dynamic.CreateTag dyn_tag = 10;
+ bilibili.dynamic.common.CreateTag dyn_tag = 10;
// 动态附加大卡
- bilibili.dynamic.CreateAttachCard attach_card = 11;
+ bilibili.dynamic.common.CreateAttachCard attach_card = 11;
// 特殊的创建选项
- bilibili.dynamic.CreateOption option = 12;
+ bilibili.dynamic.common.CreateOption option = 12;
//
- bilibili.dynamic.CreateTopic topic = 13;
+ bilibili.dynamic.common.CreateTopic topic = 13;
//
string upload_id = 14;
}
@@ -69,23 +180,37 @@ message CreateDynReq {
//
message CreateInitCheckReq {
//
- int32 scene = 1;
+ bilibili.dynamic.common.CreateInitCheckScene scene = 1;
//
- bilibili.dynamic.MetaDataCtrl meta = 2;
+ bilibili.dynamic.common.MetaDataCtrl meta = 2;
//
- bilibili.dynamic.RepostInitCheck repost = 3;
+ bilibili.dynamic.common.RepostInitCheck repost = 3;
}
-//
+//
+message CreatePageCommercialInfo {
+ //
+ string label_text = 1;
+ //
+ string desc = 2;
+}
+
+//
message CreatePageInfosReq {
- //
+ //
int64 topic_id = 1;
+ //
+ int64 commercial_entity_type = 2;
+ //
+ int64 commercial_entity_id = 3;
}
-//
+//
message CreatePageInfosRsp {
- //
+ //
CreatePageTopicInfo topic = 1;
+ //
+ CreatePageCommercialInfo commercial = 2;
}
//
@@ -126,7 +251,8 @@ enum DynamicButtonClickBizType {
//
message DynamicButtonClickReq {
-
+ //
+ repeated DynamicButtonClickBizType biz_type = 1;
}
//
@@ -134,6 +260,168 @@ message DynamicButtonClickRsp {
}
+//
+message DynamicRepostReq {
+ //
+ int64 uid = 1;
+ //
+ bilibili.dynamic.common.CreateContent content = 2;
+ //
+ bilibili.dynamic.common.DynIdentity repost_src = 3;
+ //
+ bilibili.dynamic.common.CreateOption option = 4;
+ //
+ bilibili.dynamic.common.CreateTopic topic = 5;
+ //
+ string upload_id = 6;
+}
+
+//
+message DynamicThumbReq {
+ //
+ int64 uid = 1;
+ //
+ int64 dyn_id = 2;
+ //
+ int64 type = 3;
+ //
+ int64 rid = 4;
+ //
+ int64 spec_type = 5;
+ //
+ int64 up = 6;
+ //
+ string from = 7;
+}
+
+//
+message DynamicThumbRsp {}
+
+//
+message EditDynReq {
+ //
+ int64 dyn_id = 1;
+ //
+ bilibili.dynamic.common.CreateScene scene = 2;
+ //
+ bilibili.dynamic.common.UserCreateMeta meta = 3;
+ //
+ bilibili.dynamic.common.CreateContent content = 4;
+ //
+ repeated bilibili.dynamic.common.CreatePic pics = 5;
+ //
+ bilibili.dynamic.common.DynIdentity repost_src = 6;
+ //
+ bilibili.dynamic.common.CreateTag dyn_tag = 7;
+ //
+ bilibili.dynamic.common.CreateAttachCard attach_card = 8;
+ //
+ bilibili.dynamic.common.CreateOption option = 9;
+ //
+ bilibili.dynamic.common.CreateTopic topic = 10;
+ //
+ string upload_id = 11;
+}
+
+//
+message EditDynRsp {
+ //
+ int64 state = 1;
+ //
+ string totast = 2;
+}
+
+//
+message GetEditDynInfoReq {
+ //
+ int64 dyn_id = 1;
+ //
+ bilibili.dynamic.common.CreateScene scene = 2;
+ //
+ bilibili.dynamic.common.MetaDataCtrl meta = 3;
+ //
+ bilibili.dynamic.common.RepostInitCheck repost = 4;
+}
+
+//
+message GetEditDynInfoRsp {
+ //
+ repeated bilibili.dynamic.common.CreatePic pics = 1;
+ //
+ int64 orig_dyn_id = 2;
+ //
+ int64 pre_dyn_id = 3;
+ //
+ repeated CreatePageTopicInfo topic_infos = 4;
+ //
+ bilibili.dynamic.common.CreateAttachCard attach_card = 5;
+ //
+ bilibili.dynamic.common.PublishSetting setting = 6;
+ //
+ bilibili.dynamic.common.UpPermission permission = 7;
+ //
+ bilibili.dynamic.common.ShareChannel share_info = 8;
+ //
+ bilibili.dynamic.common.PublishYellowBar yellow_bar = 9;
+ //
+ bilibili.dynamic.common.PlusRedDot plus_red_dot = 10;
+ //
+ int64 only_fans = 11;
+ //
+ string edit_alert_msg = 12;
+}
+
+//
+message GoodsAttachCardPreviewReq {
+ //
+ repeated int64 item_ids = 1;
+ //
+ int64 dyn_id = 2;
+ //
+ int64 mid = 3;
+ //
+ bilibili.dynamic.common.MetaDataCtrl meta = 4;
+}
+
+//
+message GoodsAttachCardPreviewRsp {
+ //
+ map goods = 1;
+}
+
+//
+message GoodsItem {
+ //
+ int64 items_id = 1;
+ //
+ string name = 2;
+ //
+ string brief = 3;
+ //
+ string img = 4;
+ //
+ float price = 5;
+ //
+ string price_str = 6;
+ //
+ string icon_name = 7;
+ //
+ string icon_url = 8;
+ //
+ string jump_link = 9;
+ //
+ string jump_link_desc = 10;
+}
+
+//
+message HomeBubbleReportReq {
+ //
+ string track_id = 1;
+}
+
+//
+message HomeBubbleReportRsp {}
+
//
message HotSearchReq {
@@ -152,6 +440,137 @@ message HotSearchRsp {
string version = 2;
}
+//
+message ICreateGoodsReplySyncReq {
+ //
+ int64 uid = 1;
+ //
+ int64 goods_id = 2;
+ //
+ bilibili.dynamic.common.CreateContent content = 3;
+ //
+ bilibili.dynamic.common.CreateScene scene = 4;
+ //
+ repeated bilibili.dynamic.common.CreatePic pics = 5;
+}
+
+//
+message ICreateResp {
+ //
+ int64 dyn_id = 1;
+ //
+ int64 dyn_type = 2;
+ //
+ int64 dyn_rid = 3;
+}
+
+//
+message LbsLocation {
+ //
+ double lat = 1;
+ //
+ double lng = 2;
+}
+
+//
+message NearbyPoiDetail {
+ //
+ LbsLocation location = 1;
+ //
+ POI_TYPE type = 2;
+ //
+ string poi = 3;
+ //
+ string address = 4;
+ //
+ string title = 5;
+ //
+ string show_title = 6;
+ //
+ double distance = 7;
+ //
+ string show_distance = 8;
+ //
+ AdInfoDetail ad_info = 9;
+ //
+ repeated PoiId ancestors = 10;
+}
+
+//
+message NearbyPoiListItem {
+ //
+ NearbyPoiDetail poi_info = 1;
+ //
+ int32 user_count = 2;
+}
+
+//
+message NearbyPoiListReq {
+ //
+ double lat = 1;
+ //
+ double lng = 2;
+ //
+ int32 page = 3;
+ //
+ int32 page_size = 4;
+}
+
+//
+message NearbyPoiListRsp {
+ //
+ bool has_more = 1;
+ //
+ repeated NearbyPoiListItem pois = 2;
+}
+
+enum POI_TYPE {
+ TENCENT = 0;
+ CITY = 1;
+ NATION = 2;
+ BILI = 3;
+}
+
+//
+message PoiDetail {
+ //
+ LbsLocation location = 1;
+ //
+ POI_TYPE type = 2;
+ //
+ string poi = 3;
+ //
+ string address = 4;
+ //
+ string title = 5;
+ //
+ string show_title = 6;
+ //
+ double distance = 7;
+ //
+ string show_distance = 8;
+ //
+ AdInfoDetail ad_info = 9;
+ //
+ PoiId ancestors = 10;
+}
+
+//
+message PoiId {
+ //
+ string poi = 1;
+ //
+ int32 type = 2;
+}
+
+//
+message PoiListItem {
+ //
+ PoiDetail poi_info = 1;
+ //
+ int32 user_count = 2;
+}
+
//
message ReserveButtonClickReq {
//
@@ -202,12 +621,89 @@ enum ReserveButtonStatus {
RESERVE_BUTTON_STATUS_CHECK = 2; //
}
+//
+message ReserveCalendarInfo {
+ //
+ string title = 1;
+ //
+ int64 startts = 2;
+ //
+ int64 endts = 3;
+ //
+ string description = 4;
+ //
+ string bussinessid = 5;
+}
+
+//
+message RmDynReq {
+ //
+ int64 dyn_id = 1;
+ //
+ string dyn_id_str = 2;
+}
+
+//
+message RmDynRsp {}
+
+//
+message RmSpaceTopReq {
+ //
+ int64 dyn_id = 1;
+ //
+ int32 teenagers_mode = 2;
+}
+
+//
+message RmSpaceTopRsp {}
+
+//
+message SearchPoiListReq {
+ //
+ double lat = 1;
+ //
+ double lng = 2;
+ //
+ int32 page = 3;
+ //
+ int32 page_size = 4;
+ //
+ string keyword = 5;
+}
+
+//
+message SearchPoiListRsp {
+ //
+ bool has_more = 1;
+ //
+ repeated PoiListItem pois = 2;
+}
+
+//
+message SetSpaceTopReq {
+ //
+ int64 dyn_id = 1;
+ //
+ int32 teenagers_mode = 2;
+}
+
+//
+message SetSpaceTopRsp {}
+
//
message SubmitCheckReq {
//
- bilibili.dynamic.CreateContent content = 1;
+ bilibili.dynamic.common.CreateContent content = 1;
//
- repeated bilibili.dynamic.CreatePic pics = 2;
+ repeated bilibili.dynamic.common.CreatePic pics = 2;
+ //
+ bilibili.dynamic.common.CreateAttachCard attach_card = 3;
+ //
+ bilibili.dynamic.common.CreateScene scene = 4;
+ //
+ bilibili.dynamic.common.CreateOption create_option = 5;
+ //
+ bilibili.dynamic.common.Opus opus = 6;
}
//
diff --git a/grpc_api/bilibili/gaia/gw/gw_api.proto b/grpc_api/bilibili/gaia/gw/gw_api.proto
index de91ccf..4d3cb95 100644
--- a/grpc_api/bilibili/gaia/gw/gw_api.proto
+++ b/grpc_api/bilibili/gaia/gw/gw_api.proto
@@ -6,10 +6,14 @@ import "google/protobuf/empty.proto";
// 应用列表上报
service Gaia {
- // 应用列表上报
- rpc ExUploadAppList(GaiaEncryptMsgReq) returns (UploadAppListReply);
+ //
+ rpc ExClimbAppleTrees(GaiaEncryptMsgReq) returns (UploadAppListReply);
// 拉取rsa公钥
rpc ExFetchPublicKey(google.protobuf.Empty) returns (FetchPublicKeyReply);
+ //
+ rpc ExGetAxe(google.protobuf.Empty) returns (FetchPublicKeyReply);
+ // 应用列表上报
+ rpc ExUploadAppList(GaiaEncryptMsgReq) returns (UploadAppListReply);
}
// 待加密的pb对象
@@ -24,7 +28,7 @@ message DeviceAppList {
}
// 加密方式
-enum EncryptType{
+enum EncryptType {
INVALID_ENCRYPT_TYPE = 0; // 非法值
CLIENT_AES = 1; // 同客户端人工约定AES加密私钥,存储在客户端
SERVER_RSA_AES = 2; // 客户端随机生成一个用于AES加密的私钥,并用服务端下发的RSA公钥来加密
diff --git a/grpc_api/bilibili/im/interfaces/v1/im.proto b/grpc_api/bilibili/im/interfaces/v1/im.proto
index 029c181..1a6e6bf 100644
--- a/grpc_api/bilibili/im/interfaces/v1/im.proto
+++ b/grpc_api/bilibili/im/interfaces/v1/im.proto
@@ -1,6 +1,6 @@
syntax = "proto3";
-package bilibili.im.interfaces.v1;
+package bilibili.im.interface.v1;
import "bilibili/im/type/im.proto";
@@ -71,21 +71,6 @@ message DummyRsp {
reserved 1;
}
-//
-enum ENUM_FOLD {
- FOLD_NO = 0; //
- FOLD_YES = 1; //
- FOLD_UNKNOWN = 2; //
-}
-
-//
-enum ENUM_UNREAD_TYPE{
- UNREAD_TYPE_ALL = 0; //
- UNREAD_TYPE_FOLLOW = 1; //
- UNREAD_TYPE_UNFOLLOW = 2; //
- UNREAD_TYPE_DUSTBIN = 3; //
-}
-
// 表情资源信息
message EmotionInfo {
// 表情
@@ -99,6 +84,21 @@ message EmotionInfo {
string gif_url = 4;
}
+//
+enum ENUM_FOLD {
+ FOLD_NO = 0; //
+ FOLD_YES = 1; //
+ FOLD_UNKNOWN = 2; //
+}
+
+//
+enum ENUM_UNREAD_TYPE{
+ UNREAD_TYPE_ALL = 0; //
+ UNREAD_TYPE_FOLLOW = 1; //
+ UNREAD_TYPE_UNFOLLOW = 2; //
+ UNREAD_TYPE_DUSTBIN = 3; //
+}
+
//
message MsgDetail {
//
@@ -476,6 +476,10 @@ message RspSingleUnread {
int32 dustbin_push_msg = 4;
//
int64 dustbin_unread = 5;
+ //
+ int64 biz_msg_unfollow_unread = 6;
+ //
+ int64 biz_msg_follow_unread = 7;
}
// -响应
@@ -509,13 +513,13 @@ message RspUpdateTotalUnread {
}
//
-enum SESSION_TYPE { //
- UNKNOWN = 0; //
- UN_FOLD_SESSION = 1; //
+enum SESSION_TYPE {
+ UNKNOWN = 0; //
+ UN_FOLD_SESSION = 1; //
UN_FOLLOW_SINGLE_SESSION = 2; //
- MY_GROUP_SESSION = 3; //
- ALL_SESSION = 4; //
- DUSTBIN_SESSION = 5; //
+ MY_GROUP_SESSION = 3; //
+ ALL_SESSION = 4; //
+ DUSTBIN_SESSION = 5; //
}
//
@@ -564,39 +568,3 @@ message SysMsgInterfaceLastMsgRsp {
//
int64 id = 4;
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/grpc_api/bilibili/im/type/im.proto b/grpc_api/bilibili/im/type/im.proto
index a7d6cf7..c9b086d 100644
--- a/grpc_api/bilibili/im/type/im.proto
+++ b/grpc_api/bilibili/im/type/im.proto
@@ -12,30 +12,30 @@ message AccountInfo {
//
enum CmdId {
- EN_CMD_ID_INVALID = 0; //非法cmd
+ EN_CMD_ID_INVALID = 0; //非法cmd
- //msg_svr
- EN_CMD_ID_SEND_MSG = 200001; // 发消息
+ // msg_svr
+ EN_CMD_ID_SEND_MSG = 200001; // 发消息
- //sync_msg_svr
- EN_CMD_ID_SYNC_MSG = 500001; // 同步消息
- EN_CMD_ID_SYNC_RELATION = 500002; // 同步相关链
- EN_CMD_ID_SYNC_ACK = 500003; // 客户端同步消息完成后,向服务器确认同步进度
- EN_CMD_ID_SYNC_FETCH_SESSION_MSGS = 500006; // 多端同步版本拉取消息
+ // sync_msg_svr
+ EN_CMD_ID_SYNC_MSG = 500001; // 同步消息
+ EN_CMD_ID_SYNC_RELATION = 500002; // 同步相关链
+ EN_CMD_ID_SYNC_ACK = 500003; // 客户端同步消息完成后,向服务器确认同步进度
+ EN_CMD_ID_SYNC_FETCH_SESSION_MSGS = 500006; // 多端同步版本拉取消息
- //session_svr
- EN_CMD_ID_SESSION_SVR_GET_SESSIONS = 1000001; // 拉会话列表
- EN_CMD_ID_SESSION_SVR_NEW_SESSIONS = 1000002; // 新消息到达时获取会话列表
- EN_CMD_ID_SESSION_SVR_ACK_SESSIONS = 1000003; // 获取已读位置有更新的会话列表
- EN_CMD_ID_SESSION_SVR_UPDATE_ACK = 1000004; // 更新已读进度
- EN_CMD_ID_SESSION_SVR_SET_TOP = 1000005; // 置顶/取消置顶
- EN_CMD_ID_SESSION_SVR_REMOVE_SESSION = 1000007; // 删除会话
- EN_CMD_ID_SESSION_SVR_SINGLE_UNREAD = 1000008; // 单聊未读信息数
- EN_CMD_ID_SESSION_SVR_MY_GROUP_UNREAD = 1000009; // 我创建的应援团未读数
+ // session_svr
+ EN_CMD_ID_SESSION_SVR_GET_SESSIONS = 1000001; // 拉会话列表
+ EN_CMD_ID_SESSION_SVR_NEW_SESSIONS = 1000002; // 新消息到达时获取会话列表
+ EN_CMD_ID_SESSION_SVR_ACK_SESSIONS = 1000003; // 获取已读位置有更新的会话列表
+ EN_CMD_ID_SESSION_SVR_UPDATE_ACK = 1000004; // 更新已读进度
+ EN_CMD_ID_SESSION_SVR_SET_TOP = 1000005; // 置顶/取消置顶
+ EN_CMD_ID_SESSION_SVR_REMOVE_SESSION = 1000007; // 删除会话
+ EN_CMD_ID_SESSION_SVR_SINGLE_UNREAD = 1000008; // 单聊未读信息数
+ EN_CMD_ID_SESSION_SVR_MY_GROUP_UNREAD = 1000009; // 我创建的应援团未读数
EN_CMD_ID_SESSION_SVR_UPDATE_UNFLW_READ = 1000010; // 未关注的人批量设置为已读
- EN_CMD_ID_SESSION_SVR_GROUP_ASSIS_MSG = 1000011; // 应援团消息助手
- EN_CMD_ID_SESSION_SVR_ACK_ASSIS_MSG = 1000012; // 更新应援团小助手消息已拉取进度
- EN_CMD_ID_SESSION_SVR_SESSION_DETAIL = 1000015; // 拉会话详情
+ EN_CMD_ID_SESSION_SVR_GROUP_ASSIS_MSG = 1000011; // 应援团消息助手
+ EN_CMD_ID_SESSION_SVR_ACK_ASSIS_MSG = 1000012; // 更新应援团小助手消息已拉取进度
+ EN_CMD_ID_SESSION_SVR_SESSION_DETAIL = 1000015; // 拉会话详情
EN_CMD_ID_SESSION_SVR_BATCH_SESS_DETAIL = 1000016; // 批量拉会话详情
EN_CMD_ID_SESSION_SVR_BATCH_RM_SESSIONS = 1000017; // 批量删除会话
}
@@ -96,7 +96,7 @@ message HighText {
}
//
-message ImgInfo{
+message ImgInfo {
//
string url = 1;
//
@@ -118,6 +118,38 @@ message KeyHitInfos {
//
}
+//
+message Medal {
+ //
+ int64 uid = 1;
+ //
+ int32 medal_id = 2;
+ //
+ int32 level = 3;
+ //
+ string medal_name = 4;
+ //
+ int32 score = 5;
+ //
+ int32 intimacy = 6;
+ //
+ int32 master_status = 7;
+ //
+ int32 is_receive = 8;
+ //
+ int64 medal_color_start = 9;
+ //
+ int64 medal_color_end = 10;
+ //
+ int64 medal_color_border = 11;
+ //
+ int64 medal_color_name = 12;
+ //
+ int64 medal_color_level = 13;
+ //
+ int64 guard_level = 14;
+}
+
//
message Msg {
// 发送方mid
@@ -158,90 +190,91 @@ message Msg {
// 消息来源
enum MsgSource {
- EN_MSG_SOURCE_UNKONW = 0; //
- EN_MSG_SOURCE_IOS = 1; //
- EN_MSG_SOURCE_ANDRIOD = 2; //
- EN_MSG_SOURCE_H5 = 3; //
- EN_MSG_SOURCE_PC = 4; //
- EN_MSG_SOURCE_BACKSTAGE = 5; //
- EN_MSG_SOURCE_BIZ = 6; //
- EN_MSG_SOURCE_WEB = 7; //
- EN_MSG_SOURCE_AUTOREPLY_BY_FOLLOWED=8; //
- EN_MSG_SOURCE_AUTOREPLY_BY_RECEIVE_MSG = 9; //
- EN_MSG_SOURCE_AUTOREPLY_BY_KEYWORDS = 10; //
- EN_MSG_SOURCE_AUTOREPLY_BY_VOYAGE = 11; //
- EN_MSG_SOURCE_VC_ATTACH_MSG = 12; //
+ EN_MSG_SOURCE_UNKONW = 0; //
+ EN_MSG_SOURCE_IOS = 1; //
+ EN_MSG_SOURCE_ANDRIOD = 2; //
+ EN_MSG_SOURCE_H5 = 3; //
+ EN_MSG_SOURCE_PC = 4; //
+ EN_MSG_SOURCE_BACKSTAGE = 5; //
+ EN_MSG_SOURCE_BIZ = 6; //
+ EN_MSG_SOURCE_WEB = 7; //
+ EN_MSG_SOURCE_AUTOREPLY_BY_FOLLOWED = 8; //
+ EN_MSG_SOURCE_AUTOREPLY_BY_RECEIVE_MSG = 9; //
+ EN_MSG_SOURCE_AUTOREPLY_BY_KEYWORDS = 10; //
+ EN_MSG_SOURCE_AUTOREPLY_BY_VOYAGE = 11; //
+ EN_MSG_SOURCE_VC_ATTACH_MSG = 12; //
};
// 消息类型
enum MsgType {
// 基础消息类型
- EN_INVALID_MSG_TYPE = 0; // 空空的~
- EN_MSG_TYPE_TEXT = 1; // 文本消息
- EN_MSG_TYPE_PIC = 2; // 图片消息
- EN_MSG_TYPE_AUDIO = 3; // 语音消息
- EN_MSG_TYPE_SHARE = 4; // 分享消息
- EN_MSG_TYPE_DRAW_BACK = 5; // 撤回消息
- EN_MSG_TYPE_CUSTOM_FACE = 6; // 自定义表情
- EN_MSG_TYPE_SHARE_V2 = 7; // 分享v2消息
- EN_MSG_TYPE_SYS_CANCEL = 8; // 系统撤销
- EN_MSG_TYPE_MINI_PROGRAM = 9; // 小程序
+ EN_INVALID_MSG_TYPE = 0; // 空空的~
+ EN_MSG_TYPE_TEXT = 1; // 文本消息
+ EN_MSG_TYPE_PIC = 2; // 图片消息
+ EN_MSG_TYPE_AUDIO = 3; // 语音消息
+ EN_MSG_TYPE_SHARE = 4; // 分享消息
+ EN_MSG_TYPE_DRAW_BACK = 5; // 撤回消息
+ EN_MSG_TYPE_CUSTOM_FACE = 6; // 自定义表情
+ EN_MSG_TYPE_SHARE_V2 = 7; // 分享v2消息
+ EN_MSG_TYPE_SYS_CANCEL = 8; // 系统撤销
+ EN_MSG_TYPE_MINI_PROGRAM = 9; // 小程序
// 扩展消息类型
- EN_MSG_TYPE_NOTIFY_MSG = 10; // 业务通知
- EN_MSG_TYPE_VIDEO_CARD = 11; // 视频卡片
- EN_MSG_TYPE_ARTICLE_CARD = 12; // 专栏卡片
- EN_MSG_TYPE_PICTURE_CARD = 13; // 图片卡
- EN_MSG_TYPE_COMMON_SHARE_CARD = 14; // 异形卡
- EN_MSG_TYPE_BIZ_MSG_TYPE = 50; //
+ EN_MSG_TYPE_NOTIFY_MSG = 10; // 业务通知
+ EN_MSG_TYPE_VIDEO_CARD = 11; // 视频卡片
+ EN_MSG_TYPE_ARTICLE_CARD = 12; // 专栏卡片
+ EN_MSG_TYPE_PICTURE_CARD = 13; // 图片卡
+ EN_MSG_TYPE_COMMON_SHARE_CARD = 14; // 异形卡
+ EN_MSG_TYPE_BIZ_MSG_TYPE = 50; //
+ EN_MSG_TYPE_MODIFY_MSG_TYPE = 51; //
// 功能类系统消息类型
- EN_MSG_TYPE_GROUP_MEMBER_CHANGED = 101; // 群成员变更
- EN_MSG_TYPE_GROUP_STATUS_CHANGED = 102; // 群状态变更
- EN_MSG_TYPE_GROUP_DYNAMIC_CHANGED = 103; // 群动态变更
- EN_MSG_TYPE_GROUP_LIST_CHANGED = 104; // 群列表变更
- EM_MSG_TYPE_FRIEND_LIST_CHANGED = 105; // 好友列表变更
- EN_MSG_TYPE_GROUP_DETAIL_CHANGED = 106; // 群详情发生变化
- EN_MSG_TYPE_GROUP_MEMBER_ROLE_CHANGED = 107; // 群成员角色发生变化
- EN_MSG_TYPE_NOTICE_WATCH_LIST = 108; //
- EN_MSG_TYPE_NOTIFY_NEW_REPLY_RECIEVED = 109; // 消息系统,收到新的reply
- EN_MSG_TYPE_NOTIFY_NEW_AT_RECIEVED = 110; //
- EN_MSG_TYPE_NOTIFY_NEW_PRAISE_RECIEVED = 111; //
- EN_MSG_TYPE_NOTIFY_NEW_UP_RECIEVED = 112; //
- EN_MSG_TYPE_NOTIFY_NEW_REPLY_RECIEVED_V2 = 113; //
- EN_MSG_TYPE_NOTIFY_NEW_AT_RECIEVED_V2 = 114; //
- EN_MSG_TYPE_NOTIFY_NEW_PRAISE_RECIEVED_V2 = 115; //
- EN_MSG_TYPE_GROUP_DETAIL_CHANGED_MULTI = 116; // 群详情发生变化,多端同步版本需要即时消息,无需落地
- EN_MSG_TYPE_GROUP_MEMBER_ROLE_CHANGED_MULTI = 117; // 群成员角色发生变化,多端同步版本需要即时消息,无需落地
- EN_MSG_TYPE_NOTIFY_ANTI_DISTURB = 118; //
+ EN_MSG_TYPE_GROUP_MEMBER_CHANGED = 101; // 群成员变更
+ EN_MSG_TYPE_GROUP_STATUS_CHANGED = 102; // 群状态变更
+ EN_MSG_TYPE_GROUP_DYNAMIC_CHANGED = 103; // 群动态变更
+ EN_MSG_TYPE_GROUP_LIST_CHANGED = 104; // 群列表变更
+ EM_MSG_TYPE_FRIEND_LIST_CHANGED = 105; // 好友列表变更
+ EN_MSG_TYPE_GROUP_DETAIL_CHANGED = 106; // 群详情发生变化
+ EN_MSG_TYPE_GROUP_MEMBER_ROLE_CHANGED = 107; // 群成员角色发生变化
+ EN_MSG_TYPE_NOTICE_WATCH_LIST = 108; //
+ EN_MSG_TYPE_NOTIFY_NEW_REPLY_RECIEVED = 109; // 消息系统,收到新的reply
+ EN_MSG_TYPE_NOTIFY_NEW_AT_RECIEVED = 110; //
+ EN_MSG_TYPE_NOTIFY_NEW_PRAISE_RECIEVED = 111; //
+ EN_MSG_TYPE_NOTIFY_NEW_UP_RECIEVED = 112; //
+ EN_MSG_TYPE_NOTIFY_NEW_REPLY_RECIEVED_V2 = 113; //
+ EN_MSG_TYPE_NOTIFY_NEW_AT_RECIEVED_V2 = 114; //
+ EN_MSG_TYPE_NOTIFY_NEW_PRAISE_RECIEVED_V2 = 115; //
+ EN_MSG_TYPE_GROUP_DETAIL_CHANGED_MULTI = 116; // 群详情发生变化,多端同步版本需要即时消息,无需落地
+ EN_MSG_TYPE_GROUP_MEMBER_ROLE_CHANGED_MULTI = 117; // 群成员角色发生变化,多端同步版本需要即时消息,无需落地
+ EN_MSG_TYPE_NOTIFY_ANTI_DISTURB = 118; //
// 系统通知栏消息类型
- EN_MSG_TYPE_SYS_GROUP_DISSOLVED = 201; // 群解散
- EN_MSG_TYPE_SYS_GROUP_JOINED = 202; // 入群
- EN_MSG_TYPE_SYS_GROUP_MEMBER_EXITED = 203; // 成员主动退群
- EN_MSG_TYPE_SYS_GROUP_ADMIN_FIRED = 204; // 房管被撤
- EN_MSG_TYPE_SYS_GROUP_MEMBER_KICKED = 205; // 成员被T
- EN_MSG_TYPE_SYS_GROUP_ADMIN_KICK_OFF = 206; // 管理T人
- EN_MSG_TYPE_SYS_GROUP_ADMIN_DUTY = 207; // 管理上任
- EN_MSG_TYPE_SYS_GROUP_AUTO_CREATED = 208; // 自动创建
- EN_MSG_TYPE_SYS_FRIEND_APPLY = 210; // 好友申请
- EN_MSG_TYPE_SYS_FRIEND_APPLY_ACK = 211; // 好友申请通过
- EN_MSG_TYPE_SYS_GROUP_APPLY_FOR_JOINING = 212; // 用户加群申请
+ EN_MSG_TYPE_SYS_GROUP_DISSOLVED = 201; // 群解散
+ EN_MSG_TYPE_SYS_GROUP_JOINED = 202; // 入群
+ EN_MSG_TYPE_SYS_GROUP_MEMBER_EXITED = 203; // 成员主动退群
+ EN_MSG_TYPE_SYS_GROUP_ADMIN_FIRED = 204; // 房管被撤
+ EN_MSG_TYPE_SYS_GROUP_MEMBER_KICKED = 205; // 成员被T
+ EN_MSG_TYPE_SYS_GROUP_ADMIN_KICK_OFF = 206; // 管理T人
+ EN_MSG_TYPE_SYS_GROUP_ADMIN_DUTY = 207; // 管理上任
+ EN_MSG_TYPE_SYS_GROUP_AUTO_CREATED = 208; // 自动创建
+ EN_MSG_TYPE_SYS_FRIEND_APPLY = 210; // 好友申请
+ EN_MSG_TYPE_SYS_FRIEND_APPLY_ACK = 211; // 好友申请通过
+ EN_MSG_TYPE_SYS_GROUP_APPLY_FOR_JOINING = 212; // 用户加群申请
EN_MSG_TYPE_SYS_GROUP_ADMIN_ACCEPTED_USER_APPLY = 213; // 通知管理员,有其他管理员已经同意用户加群
// 聊天窗口通知消息类型
- EN_MSG_TYPE_CHAT_MEMBER_JOINED = 301; // 入群
- EN_MSG_TYPE_CHAT_MEMBER_EXITED = 302; // 退群
- EN_MSG_TYPE_CHAT_GROUP_FREEZED = 303; // 冻结
- EN_MSG_TYPE_CHAT_GROUP_DISSOLVED = 304; // 解散
- EN_MSG_TYPE_CHAT_GROUP_CREATED = 305; // 开通应援团
- EN_MSG_TYPE_CHAT_POPUP_SESSION = 306; // 弹出会话
+ EN_MSG_TYPE_CHAT_MEMBER_JOINED = 301; // 入群
+ EN_MSG_TYPE_CHAT_MEMBER_EXITED = 302; // 退群
+ EN_MSG_TYPE_CHAT_GROUP_FREEZED = 303; // 冻结
+ EN_MSG_TYPE_CHAT_GROUP_DISSOLVED = 304; // 解散
+ EN_MSG_TYPE_CHAT_GROUP_CREATED = 305; // 开通应援团
+ EN_MSG_TYPE_CHAT_POPUP_SESSION = 306; // 弹出会话
}
// 接收方类型
enum RecverType {
- EN_NO_MEANING = 0; //
- EN_RECVER_TYPE_PEER = 1; // 单人
+ EN_NO_MEANING = 0; //
+ EN_RECVER_TYPE_PEER = 1; // 单人
EN_RECVER_TYPE_GROUP = 2; // 群
EN_RECVER_TYPE_PEERS = 3; // 多人
}
@@ -261,19 +294,19 @@ message RelationLog {
//
enum RelationLogType {
EN_INVALID_LOG_TYPE = 0; //
- EN_ADD_FRIEND = 1; // 添加好友
- EN_REMOVE_FRIEND = 2; // 删除好友
- EN_JOIN_GROUP = 3; // 加入群
- EN_EXIT_GROUP = 4; // 退出群
+ EN_ADD_FRIEND = 1; // 添加好友
+ EN_REMOVE_FRIEND = 2; // 删除好友
+ EN_JOIN_GROUP = 3; // 加入群
+ EN_EXIT_GROUP = 4; // 退出群
}
//
enum SESSION_TYPE {
- INVALID_SESSION_TYPE = 0; //
- UN_FOLD_SESSION = 1; //
+ INVALID_SESSION_TYPE = 0; //
+ UN_FOLD_SESSION = 1; //
UN_FOLLOW_SINGLE_SESSION = 2; //
- MY_GROUP_SESSION = 3; //
- ALL_SESSION = 4; //
+ MY_GROUP_SESSION = 3; //
+ ALL_SESSION = 4; //
}
// 会话详情
@@ -328,4 +361,18 @@ message SessionInfo {
AccountInfo account_info = 24;
//
int32 live_status = 25;
+ //
+ int32 biz_msg_unread_count = 26;
+ //
+ UserLabel user_label = 27;
+}
+
+//
+message UserLabel {
+ //
+ int32 label_type = 1;
+ //
+ Medal medal = 2;
+ //
+ int32 guardian_relation = 3;
}
diff --git a/grpc_api/bilibili/main/community/reply/v1/reply.proto b/grpc_api/bilibili/main/community/reply/v1/reply.proto
index b232b6d..e702d8f 100644
--- a/grpc_api/bilibili/main/community/reply/v1/reply.proto
+++ b/grpc_api/bilibili/main/community/reply/v1/reply.proto
@@ -7,25 +7,27 @@ import "google/protobuf/any.proto";
// 评论区
service Reply {
// 主评论列表接口
- rpc MainList (MainListReq) returns (MainListReply);
+ rpc MainList(MainListReq) returns (MainListReply);
// 二级评论明细接口
- rpc DetailList (DetailListReq) returns (DetailListReply);
+ rpc DetailList(DetailListReq) returns (DetailListReply);
// 对话评论树接口
- rpc DialogList (DialogListReq) returns (DialogListReply);
+ rpc DialogList(DialogListReq) returns (DialogListReply);
// 评论预览接口
- rpc PreviewList (PreviewListReq) returns (PreviewListReply);
+ rpc PreviewList(PreviewListReq) returns (PreviewListReply);
// 评论搜索item前置发布接口
- rpc SearchItemPreHook (SearchItemPreHookReq) returns (SearchItemPreHookReply);
+ rpc SearchItemPreHook(SearchItemPreHookReq) returns (SearchItemPreHookReply);
// 评论搜索插入项目接口
- rpc SearchItem (SearchItemReq) returns (SearchItemReply);
- //
- rpc AtSearch (AtSearchReq) returns (AtSearchReply);
- //
- rpc ReplyInfo (ReplyInfoReq) returns (ReplyInfoReply);
- //
- rpc UserCallback (UserCallbackReq) returns (UserCallbackReply);
- //
- rpc ShareRepliesInfo (ShareRepliesInfoReq) returns (ShareRepliesInfoResp);
+ rpc SearchItem(SearchItemReq) returns (SearchItemReply);
+ // 评论at用户搜索接口
+ rpc AtSearch(AtSearchReq) returns (AtSearchReply);
+ // 查询单条评论接口
+ rpc ReplyInfo(ReplyInfoReq) returns (ReplyInfoReply);
+ // 用户回调上报接口
+ rpc UserCallback(UserCallbackReq) returns (UserCallbackReply);
+ // 评论分享材料接口
+ rpc ShareRepliesInfo(ShareRepliesInfoReq) returns (ShareRepliesInfoResp);
+ // 评论表情推荐列表接口
+ rpc SuggestEmotes(SuggestEmotesReq) returns (SuggestEmotesResp);
}
// 活动
@@ -49,41 +51,41 @@ message ArticleSearchItem {
repeated string covers = 3;
}
-//
+// 评论at用户搜索组
message AtGroup {
- //
+ // 组类型
int32 group_type = 1;
- //
+ // 组标题
string group_name = 2;
- //
+ // 评论at用户搜索列表
repeated AtItem items = 3;
}
-//
+// 评论at用户搜索条目
message AtItem {
- //
+ // 用户mid
int64 mid = 1;
- //
+ // 用户名
string name = 2;
- //
+ // 用户头像url
string face = 3;
- //
+ // 用户是否关注
int32 fans = 4;
- //
+ // 用户认证类型
int32 official_verify_type = 5;
}
-//
+// 评论at用户搜索-响应
message AtSearchReply {
- //
+ // 评论at用户搜索组
repeated AtGroup groups = 1;
}
-//
+// 评论at用户搜索-请求
message AtSearchReq {
//
int64 mid = 1;
- //
+ // 关键字
string keyword = 2;
}
@@ -97,7 +99,7 @@ message CM {
message Content {
// 评论文本
string message = 1;
- // at到的用户信息
+ // 需要渲染的用户转义
map menber = 2;
// 需要渲染的表情转义
map emote = 3;
@@ -107,6 +109,24 @@ message Content {
map url = 5;
// 投票信息
Vote vote = 6;
+ // at到的用户mid列表
+ map at_name_to_mid = 7;
+ // 富文本
+ RichText rich_text = 8;
+ // 评论图片
+ repeated Picture pictures = 9;
+}
+
+// 图片信息
+message Picture {
+ // 图片URL
+ string img_src = 1;
+ // 图片宽度
+ double img_width = 2;
+ // 图片高度
+ double img_height = 3;
+ // 图片大小,单位KB
+ double img_size = 4;
}
// 页面游标回复
@@ -154,7 +174,7 @@ message DetailListReply {
message DetailListReq {
// 目标评论区id
int64 oid = 1;
- // 目标评论区类型
+ // 目标评论区业务type
int64 type = 2;
// 根评论rpid
int64 root = 3;
@@ -168,9 +188,9 @@ message DetailListReq {
// 来源标识
enum DetailListScene {
- REPLY = 0; // 评论区展开
+ REPLY = 0; // 评论区展开
MSG_FEED = 1; // 回复消息推送
- NOTIFY = 2; //
+ NOTIFY = 2; //
}
// 对话评论树-响应
@@ -189,7 +209,7 @@ message DialogListReply {
message DialogListReq {
// 目标评论区id
int64 oid = 1;
- // 目标评论区类型
+ // 目标评论区业务type
int64 type = 2;
// 根评论rpid
int64 root = 3;
@@ -222,6 +242,8 @@ message Emote {
int64 package_id = 6;
//
string gif_url = 7;
+ //
+ string text = 8;
}
// 商品项目
@@ -318,20 +340,56 @@ message MainListReply {
message MainListReq {
// 目标评论区id
int64 oid = 1;
- // 目标评论区类型
+ // 目标评论区业务type
int64 type = 2;
// 页面游标
CursorReq cursor = 3;
// 扩展数据json
string extra = 4;
- // 广告扩展json
+ // 广告扩展
string ad_extra = 5;
// 目标评论rpid
int64 rpid = 6;
+ //
+ int64 seek_rpid = 7;
+ // 评论区筛选类型 取值可为: ["全部" "粉丝评论" "笔记长评"]
+ string filter_tag_name = 8;
}
// 用户信息
message Member {
+ // 地区类型
+ enum RegionType {
+ DEFAULT = 0; // 默认
+ MAINLAND = 1; // 大陆地区
+ GAT = 2; //
+ }
+ //
+ enum ShowStatus {
+ SHOWDEFAULT = 0; // 默认
+ ZOOMINMAINLAND = 1; //
+ RAW = 2; //
+ }
+ // NFT地区
+ message Region {
+ // 地区类型
+ RegionType type = 1;
+ // 角标url
+ string icon = 2;
+ //
+ ShowStatus show_status = 3;
+ }
+ // NFT信息
+ message NftInteraction {
+ //
+ string itype = 1;
+ //
+ string metadata_url = 2;
+ //
+ string nft_id = 3;
+ // NFT地区
+ Region region = 4;
+ }
/**********基础信息**********/
// 用户mid
int64 mid = 1;
@@ -386,30 +444,186 @@ message Member {
string vip_label_text = 23;
// 会员标颜色
string vip_label_theme = 24;
- //
+ // 粉丝勋章底色
int64 fans_medal_color_end = 25;
- //
+ // 粉丝勋章边框颜色
int64 fans_medal_color_border = 26;
- //
+ // 粉丝勋章名颜色
int64 fans_medal_color_name = 27;
- //
+ // 粉丝勋章等级颜色
int64 fans_medal_color_level = 28;
//
int64 fans_guard_level = 29;
//
int32 face_nft = 30;
- //
+ // 是否NFT头像
int32 face_nft_new = 31;
- //
+ // 是否为硬核会员
int32 is_senior_member = 32;
+ // NFT信息
+ NftInteraction nft_interaction = 33;
+ //
+ string fans_guard_icon = 34;
+ //
+ string fans_honor_icon = 35;
+}
+
+// 用户信息V2
+message MemberV2 {
+ // 基本信息
+ message Basic {
+ // 用户mid
+ int64 mid = 1;
+ // 昵称
+ string name = 2;
+ // 性别
+ string sex = 3;
+ // 头像url
+ string face = 4;
+ // 等级
+ int64 level = 5;
+ }
+ // 认证
+ message Official {
+ // 认证类型
+ int64 verify_type = 1;
+ }
+ // 大会员
+ message Vip {
+ // 会员类型
+ // 0:不是大会员 1:月度会员 2:年度大会员
+ int64 type = 1;
+ // 会员状态
+ int64 status = 2;
+ // 会员样式
+ int64 theme_type = 3;
+ // 会员铭牌样式url
+ string label_path = 4;
+ //
+ string nickname_color = 5;
+ //
+ int32 avatar_subscript = 6;
+ //
+ string label_text = 7;
+ //
+ string vip_label_theme = 8;
+ }
+ // 装扮
+ message Garb {
+ // 头像框url
+ string pendant_image = 1;
+ // 装扮卡url
+ string card_image = 2;
+ // 有关注按钮时的装扮卡url
+ string card_image_with_focus = 3;
+ // 专属装扮页面url
+ string card_jump_url = 4;
+ // 专属装扮id
+ string card_number = 5;
+ // 专属装扮id显示颜色
+ string card_fan_color = 6;
+ // 是否为专属装扮卡
+ bool card_is_fan = 7;
+ }
+ // 粉丝勋章
+ message Medal {
+ // 粉丝勋章名
+ string name = 1;
+ // 粉丝勋章等级
+ int64 level = 2;
+ // 粉丝勋章显示颜色
+ int64 color_start = 3;
+ // 粉丝勋章底色
+ int64 color_end = 4;
+ // 粉丝勋章边框颜色
+ int64 color_border = 5;
+ // 粉丝勋章名颜色
+ int64 color_name = 6;
+ // 粉丝勋章等级颜色
+ int64 color_level = 7;
+ //
+ int64 guard_level = 8;
+ //
+ string first_icon = 9;
+ //
+ int64 level_bg_color = 11;
+ }
+ // 地区类型
+ enum RegionType {
+ DEFAULT = 0; // 默认
+ MAINLAND = 1; // 大陆地区
+ GAT = 2; //
+ }
+ //
+ enum ShowStatus {
+ SHOWDEFAULT = 0; //
+ ZOOMINMAINLAND = 1; //
+ RAW = 2; //
+ }
+ // NFT地区
+ message Region {
+ // 地区类型
+ RegionType type = 1;
+ // 角标url
+ string icon = 2;
+ //
+ ShowStatus show_status = 3;
+ }
+ // NFT信息
+ message Interaction {
+ //
+ string itype = 1;
+ //
+ string metadata_url = 2;
+ //
+ string nft_id = 3;
+ // NFT地区
+ Region region = 4;
+
+ }
+ // NFT
+ message Nft {
+ //
+ int32 face = 1;
+ //
+ Interaction interaction = 2;
+ }
+ // 硬核会员
+ message Senior {
+ // 是否为硬核会员
+ int32 is_senior_member = 1;
+ }
+ // 契约
+ message Contractor {
+ // 是否和up签订契约
+ bool is_contractor = 1;
+ // 契约显示文案
+ string contract_desc = 2;
+ }
+ // 基本信息
+ Basic basic = 1;
+ // 认证信息
+ Official official = 2;
+ // 大会员信息
+ Vip vip = 3;
+ // 装扮信息
+ Garb garb = 4;
+ // 粉丝勋章信息
+ Medal medal = 5;
+ // NFT信息
+ Nft nft = 6;
+ // 硬核会员信息
+ Senior senior = 7;
+ // 契约信息
+ Contractor contractor = 8;
}
// 排序方式
enum Mode {
- DEFAULT = 0; //
- UNSPECIFIED = 1; // 默认排序
+ DEFAULT = 0; //
+ UNSPECIFIED = 1; // 默认排序
MAIN_LIST_TIME = 2; // 按时间
- MAIN_LIST_HOT = 3; // 按热度
+ MAIN_LIST_HOT = 3; // 按热度
}
//
@@ -436,6 +650,8 @@ message Operation {
string link = 5;
//
string report_extra = 6;
+ //
+ string icon = 7;
}
//
@@ -476,7 +692,7 @@ message PreviewListReply {
message PreviewListReq {
// 目标评论区id
int64 oid = 1;
- // 目标评论区类型
+ // 目标评论区业务type
int64 type = 2;
// 页面游标
CursorReq cursor = 3;
@@ -510,30 +726,34 @@ message QoeScoreItem {
float score = 3;
}
-//
+// 评论条目标签信息
message ReplyCardLabel {
- //
+ // 标签文本
string text_content = 1;
- //
+ // 文本颜色
string text_color_day = 2;
- //
+ // 文本颜色夜间
string text_color_night = 3;
- //
+ // 标签颜色
string label_color_day = 4;
- //
+ // 标签颜色夜间
string label_color_night = 5;
//
string image = 6;
- //
+ // 标签类型 0:UP主觉得很赞 1:妙评
int32 type = 7;
- //
+ // 背景url
string background = 8;
- //
+ // 背景宽
double background_width = 9;
- //
+ // 背景高
double background_height = 10;
- //
+ // 点击跳转url
string jump_url = 11;
+ //
+ int64 effect = 12;
+ //
+ int64 effect_start_time = 13;
}
// 评论条目控制字段
@@ -575,18 +795,20 @@ message ReplyControl {
bool is_contractor = 17;
// 是否是笔记评论
bool is_note = 18;
- //
+ // 评论条目标签列表
repeated ReplyCardLabel card_labels = 19;
- //
+ // 子评论数文案 "共x条回复"
string sub_reply_entry_text = 20;
- //
+ // 子评论数文案 "相关回复共x条"
string sub_reply_title_text = 21;
- //
+ // 契约显示文案
string contract_desc = 22;
- //
+ // 发布时间文案 "x天前发布"
string time_desc = 23;
//
string biz_scene = 24;
+ // IP属地信息 "IP属地:xxx"
+ string location = 25;
}
//
@@ -631,22 +853,45 @@ message ReplyInfo {
Member member = 13;
// 评论控制字段
ReplyControl reply_control = 14;
+ // 发布者信息V2
+ MemberV2 member_v2 = 15;
}
-//
+// 查询单条评论-响应
message ReplyInfoReply {
- //
+ // 评论条目信息
ReplyInfo reply = 1;
}
-//
+// 查询单条评论-请求
message ReplyInfoReq {
- //
+ // 评论rpid
int64 rpid = 1;
//
int32 scene = 2;
}
+// 富文本
+message RichText {
+ // 富文本类型
+ oneof item {
+ // 笔记
+ RichTextNote note = 1;
+ }
+}
+
+// 笔记
+message RichTextNote {
+ // 预览文本
+ string summary = 1;
+ // 笔记预览图片url列表
+ repeated string images = 2;
+ // 笔记页面url
+ string click_url = 3;
+ // 发布日期 YYYY-mm-dd
+ string last_mtime_text = 4;
+}
+
// 评论搜索插入项目
message SearchItem {
//
@@ -692,7 +937,7 @@ message SearchItemPreHookReply {
message SearchItemPreHookReq {
// 目标评论区id
int64 oid = 1;
- // 目标评论区类型
+ // 目标评论区业务type
int64 type = 2;
}
@@ -714,22 +959,22 @@ message SearchItemReplyExtraInfo {
// 评论搜索插入项目-请求
message SearchItemReq {
- //页面游标
+ // 页面游标
SearchItemCursorReq cursor = 1;
- //目标评论区id
+ // 目标评论区id
int64 oid = 2;
- //评论区类型
+ // 目标评论区业务type
int64 type = 3;
- //搜索关键词
+ // 搜索关键词
string keyword = 4;
}
//
enum SearchItemType {
DEFAULT_ITEM_TYPE = 0; //
- GOODS = 1; //
- VIDEO = 2; //
- ARTICLE = 3; //
+ GOODS = 1; //
+ VIDEO = 2; //
+ ARTICLE = 3; //
}
//
@@ -738,34 +983,36 @@ enum SearchItemVideoSubType {
PGC = 1; //
}
-//
+// 评论分享材料-请求
message ShareRepliesInfoReq {
- //
+ // 评论rpid列表
+ repeated int64 rpids = 1;
+ // 目标评论区id
int64 oid = 2;
- //
+ // 目标评论区业务type
int64 type = 3;
}
-//
+// 评论分享材料-响应
message ShareRepliesInfoResp {
//
message ShareExtra {
//
- bool is_pgc = 1;
+ bool is_pgc = 1;
}
- //
+ // 评论分享条目列表
repeated ShareReplyInfo infos = 1;
- //
+ // 源内容标题
string from_title = 2;
- //
+ // 源内容UP主
string from_up = 3;
- //
+ // 源内容封面url
string from_pic = 4;
- //
+ // 源内容页面url
string url = 5;
- //
+ // logo url
string slogan_pic = 6;
- //
+ // 标语
string slogan_text = 7;
//
ShareReplyTopic topic = 8;
@@ -773,17 +1020,17 @@ message ShareRepliesInfoResp {
ShareExtra extra = 9;
}
-//
+// 评论分享条目信息
message ShareReplyInfo {
- //
+ // 用户信息
Member member = 1;
- //
+ // 评论主体信息
Content content = 2;
- //
+ // 分享标题(评论发布者昵称)
string title = 3;
- //
+ // 分享副标题 "发表了评论"
string sub_title = 4;
- //
+ // 荣誉信息文案 "获得了up主点赞"
string achievement_text = 5;
//
string label_url = 6;
@@ -799,6 +1046,13 @@ message ShareReplyTopic {
// 评论区控制字段
message SubjectControl {
+ // 评论区筛选类型
+ message FilterTag {
+ // 类型名
+ string name = 1;
+ //
+ string event_id = 2;
+ }
// UP主mid
int64 up_mid = 1;
// 自己是否为协管
@@ -835,10 +1089,32 @@ message SubjectControl {
string title = 17;
// 离开态输入框的文案
string giveup_text = 18;
- //
+ // 是否允许笔记
bool has_note_access = 19;
//
bool disable_jump_emote = 20;
+ //
+ string empty_background_text_plain = 21;
+ //
+ string empty_background_text_highlight = 22;
+ //
+ string empty_background_uri = 23;
+ // 评论区筛选类型列表
+ repeated FilterTag support_filter_tags = 24;
+}
+
+// 评论表情推荐列表-请求
+message SuggestEmotesReq {
+ // 目标评论区id
+ int64 oid = 1;
+ // 目标评论区业务type
+ int64 type = 2;
+}
+
+// 评论表情推荐列表-响应
+message SuggestEmotesResp {
+ // 表情推荐列表
+ repeated Emote emotes = 1;
}
// 话题项
@@ -861,7 +1137,7 @@ message UGCVideoSearchItem {
string cover = 4;
}
-//
+// 精选评论
message UpSelection {
// 待审评论数
int64 pending_count = 1;
@@ -871,24 +1147,47 @@ message UpSelection {
// 超链项
message Url {
+ // 扩展字段
+ message Extra {
+ //
+ int64 goods_item_id = 1;
+ //
+ string goods_prefetched_cache = 2;
+ //
+ int32 goods_show_type = 3;
+ // 热词搜索
+ bool is_word_search = 4;
+ //
+ int64 goods_cm_control = 5;
+ }
// 标题
string title = 1;
//
int64 state = 2;
// 图标url
string prefix_icon = 3;
- //
+ // 客户端内跳转uri
string app_url_schema = 4;
//
string app_name = 5;
//
string app_package_name = 6;
- // 上报id
+ // 点击上报数据
string click_report = 7;
- //
+ // 是否半屏打开
bool is_half_screen = 8;
- //
+ // 展现上报数据
string exposure_report = 9;
+ // 扩展字段
+ Extra extra = 10;
+ // 是否下划线
+ bool underline = 11;
+ //
+ bool match_once = 12;
+ // 网页url
+ string pc_url = 13;
+ //
+ int32 icon_position = 14;
}
//
@@ -896,22 +1195,20 @@ enum UserCallbackAction {
Dismiss = 0; //
}
-//
-message UserCallbackReply {
+// 用户回调上报-响应
+message UserCallbackReply {}
-}
-
-//
+// 用户回调上报-请求
message UserCallbackReq {
- //
+ // 用户mid
int64 mid = 1;
//
UserCallbackScene scene = 2;
//
UserCallbackAction action = 3;
- //
+ // 目标评论区id
int64 oid = 4;
- //
+ // 目标评论区业务type
int64 type = 5;
}
diff --git a/grpc_api/bilibili/metadata/device/device.proto b/grpc_api/bilibili/metadata/device/device.proto
index c56376b..7108a91 100644
--- a/grpc_api/bilibili/metadata/device/device.proto
+++ b/grpc_api/bilibili/metadata/device/device.proto
@@ -6,8 +6,8 @@ package bilibili.metadata.device;
// gRPC头部:x-bili-device-bin
message Device {
// 产品id
- // 粉 白 蓝 直播姬 HD 海外 OTT 漫画 TV野版 小视频 网易漫画 网易漫画 网易漫画HD 国际版
- // 1 2 3 4 5 6 7 8 9 10 11 12 13 14
+ // 粉 白 蓝 直播姬 HD 海外 OTT 漫画 TV野版 小视频 网易漫画 网易漫画 网易漫画HD 国际版 东南亚版
+ // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 30
int32 app_id = 1;
// 构建id
int32 build = 2;
@@ -36,6 +36,6 @@ message Device {
string version_name = 13;
// 设备指纹, 不区分本地或远程设备指纹,作为推送目标的索引
string fp = 14;
- //
+ // 首次启动时的毫秒时间戳
int64 fts = 15;
}
diff --git a/grpc_api/bilibili/metadata/fawkes/fawkes.proto b/grpc_api/bilibili/metadata/fawkes/fawkes.proto
index dfdbfa1..0855314 100644
--- a/grpc_api/bilibili/metadata/fawkes/fawkes.proto
+++ b/grpc_api/bilibili/metadata/fawkes/fawkes.proto
@@ -8,14 +8,16 @@ message FawkesReply {
string config = 1;
// 客户端在fawkes系统中对应的已发布最新的ff版本号
string ff = 2;
+ //
+ string dd = 3;
}
//
message FawkesReq {
- // 客户端在fawkes系统的唯一名
+ // 客户端在fawkes系统的唯一名, 如 `android64`
string appkey = 1;
- // 客户端在fawkes系统中的环境参数
+ // 客户端在fawkes系统中的环境参数, 如 `prod`
string env = 2;
- // 启动id
+ // 启动id, 8 位 0~9, a~z 组成的字符串
string session_id = 3;
}
diff --git a/grpc_api/bilibili/metadata/metadata.proto b/grpc_api/bilibili/metadata/metadata.proto
index dda7bcd..9befe06 100644
--- a/grpc_api/bilibili/metadata/metadata.proto
+++ b/grpc_api/bilibili/metadata/metadata.proto
@@ -5,18 +5,18 @@ package bilibili.metadata;
// 请求元数据
// gRPC头部:x-bili-metadata-bin
message Metadata {
- // 登录Token
+ // 登录 access_key
string access_key = 1;
- // 包类型
+ // 包类型, 如 `android`
string mobi_app = 2;
- // 运行设备
+ // 运行设备, 留空即可
string device = 3;
- // 构建id
+ // 构建id, 如 `7380300`
int32 build = 4;
- // 渠道
+ // APP分发渠道, 如 `master`
string channel = 5;
- // 设备buvid
+ // 设备唯一标识
string buvid = 6;
- // 平台类型
+ // 平台类型, 如 `android`
string platform = 7;
}
diff --git a/grpc_api/bilibili/metadata/network/network.proto b/grpc_api/bilibili/metadata/network/network.proto
index cce2a8f..2199b33 100644
--- a/grpc_api/bilibili/metadata/network/network.proto
+++ b/grpc_api/bilibili/metadata/network/network.proto
@@ -16,20 +16,20 @@ message Network {
// 网络类型
enum NetworkType {
NT_UNKNOWN = 0; // 未知
- WIFI = 1; // WIFI
- CELLULAR = 2; // 移动网络
- OFFLINE = 3; // 未连接
- OTHERNET = 4; // 其他网络
- ETHERNET = 5; // 以太网
+ WIFI = 1; // WIFI
+ CELLULAR = 2; // 蜂窝网络
+ OFFLINE = 3; // 未连接
+ OTHERNET = 4; // 其他网络
+ ETHERNET = 5; // 以太网
}
// 免流类型
enum TFType {
TF_UNKNOWN = 0; // 正常计费
- U_CARD = 1; // 联通卡
- U_PKG = 2; // 联通包
- C_CARD = 3; // 移动卡
- C_PKG = 4; // 移动包
- T_CARD = 5; // 电信卡
- T_PKG = 6; // 电信包
+ U_CARD = 1; // 联通卡
+ U_PKG = 2; // 联通包
+ C_CARD = 3; // 移动卡
+ C_PKG = 4; // 移动包
+ T_CARD = 5; // 电信卡
+ T_PKG = 6; // 电信包
}
diff --git a/grpc_api/bilibili/metadata/parabox/pararbox.proto b/grpc_api/bilibili/metadata/parabox/parabox.proto
similarity index 100%
rename from grpc_api/bilibili/metadata/parabox/pararbox.proto
rename to grpc_api/bilibili/metadata/parabox/parabox.proto
diff --git a/grpc_api/bilibili/metadata/restriction/restriction.proto b/grpc_api/bilibili/metadata/restriction/restriction.proto
index c8a3ac3..9d4e16f 100644
--- a/grpc_api/bilibili/metadata/restriction/restriction.proto
+++ b/grpc_api/bilibili/metadata/restriction/restriction.proto
@@ -4,9 +4,10 @@ package bilibili.metadata.restriction;
// 模式类型
enum ModeType {
- NORMAL = 0; // 正常模式
- TEENAGERS = 1; // 青少年模式
- LESSONS = 2; // 课堂模式
+ NORMAL = 0; // 正常模式
+ TEENAGERS = 1; // 青少年模式
+ LESSONS = 2; // 课堂模式
+ BASIC = 3; //
}
// 限制条件
@@ -19,6 +20,8 @@ message Restriction {
ModeType mode = 3;
// app 审核review状态
bool review = 4;
- //
+ // 客户端是否选择关闭个性化推荐
bool disable_rcmd = 5;
+ //
+ bool basic_mode = 6;
}
diff --git a/grpc_api/bilibili/pagination/pagination.proto b/grpc_api/bilibili/pagination/pagination.proto
new file mode 100644
index 0000000..377981d
--- /dev/null
+++ b/grpc_api/bilibili/pagination/pagination.proto
@@ -0,0 +1,39 @@
+syntax = "proto3";
+
+package bilibili.pagination;
+
+// 分页信息
+message FeedPagination {
+ //
+ int32 page_size = 1;
+ //
+ string offset = 2;
+ //
+ bool is_refresh = 3;
+}
+
+// 分页信息
+message FeedPaginationReply {
+ //
+ string next_offset = 1;
+ //
+ string prev_offset = 2;
+ //
+ string last_read_offset = 3;
+}
+
+// 分页信息
+message Pagination {
+ //
+ int32 page_size = 1;
+ //
+ string next = 2;
+}
+
+// 分页信息
+message PaginationReply {
+ //
+ string next = 1;
+ //
+ string prev = 2;
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/pangu/gallery/v1/openplatform/apiserver/v1alpha1/api.proto b/grpc_api/bilibili/pangu/gallery/v1/openplatform/apiserver/v1alpha1/api.proto
new file mode 100644
index 0000000..0ffdd02
--- /dev/null
+++ b/grpc_api/bilibili/pangu/gallery/v1/openplatform/apiserver/v1alpha1/api.proto
@@ -0,0 +1 @@
+// TODO
\ No newline at end of file
diff --git a/grpc_api/bilibili/pgc/gateway/player/v2/playurl.proto b/grpc_api/bilibili/pgc/gateway/player/v2/playurl.proto
index 0b2d9fa..ddde218 100644
--- a/grpc_api/bilibili/pgc/gateway/player/v2/playurl.proto
+++ b/grpc_api/bilibili/pgc/gateway/player/v2/playurl.proto
@@ -1,784 +1,1127 @@
-syntax = "proto3";
-
-package bilibili.pgc.gateway.player.v2;
-
-import "google/protobuf/timestamp.proto";
-
-// 视频url
-service PlayURL {
- // 播放页信息
- rpc PlayView (PlayViewReq) returns (PlayViewReply);
- //
- rpc PlayViewComic(PlayViewReq) returns (PlayViewReply);
-}
-
-// 角标信息
-message BadgeInfo {
- // 角标文案
- string text = 1;
- // 角标色值
- string bg_color = 2;
- // 角标色值-夜间模式
- string bg_color_night = 3;
- // 文案色值
- string text_color = 4;
- //
- GradientColor bg_gradient_color = 5;
-}
-
-//
-message BottomDisplay {
- //
- TextInfo title = 1;
- //
- string icon = 2;
-}
-
-// 按钮信息
-message ButtonInfo {
- // 按钮文案
- string text = 1;
- // 按钮字体色值
- string text_color = 2;
- // 按钮字体色值-夜间模式
- string text_color_night = 3;
- // 按钮背景色
- string bg_color = 4;
- // 按钮背景色-夜间模式
- string bg_color_night = 5;
- // 按钮链接
- string link = 6;
- // 按钮动作类型
- string action_type = 7;
- // 角标信息
- BadgeInfo badge_info = 8;
- // 埋点上报信息
- Report report = 9;
- // 左侧删除线样式文案
- string left_strikethrough_text = 10;
- // 缩略按钮文案信息
- TextInfo simple_text_info = 11;
- // 缩略按钮背景色值
- string simple_bg_color = 12;
- // 缩略按钮字体色值-夜间模式
- string simple_bg_color_night = 13;
- //
- GradientColor bg_gradient_color = 14;
- //
- map order_report_params = 15;
-}
-
-//
-message CastTips {
- //
- int32 code = 1;
- //
- string message = 2;
-}
-
-//
-message ClipInfo {
- //
- int64 material_no = 1;
- //
- int32 start = 2;
- //
- int32 end = 3;
- //
- ClipType clip_type = 4;
- //
- string toast_text = 5;
- //
- MultiView multi_view = 6;
-}
-
-enum ClipType {
- NT_UNKNOWN = 0; //
- CLIP_TYPE_OP = 1; //
- CLIP_TYPE_ED = 2; //
- CLIP_TYPE_HE = 3; //
- CLIP_TYPE_MULTI_VIEW = 4; //
-}
-
-// 编码类型
-enum CodeType {
- NOCODE = 0; // 默认
- CODE264 = 1; // H.264
- CODE265 = 2; // H.265
-}
-
-//
-message ContinuePlayInfo {
- //
- int64 continue_play_ep_id = 1;
-}
-
-// 优惠券
-message Coupon {
- // 优惠券token
- string coupon_token = 1;
- // 优惠券类型
- // 1:折扣券 2:满减券 3:兑换券
- int64 type = 2;
- // 优惠券面值
- string value = 3;
- // 优惠券使用描述
- string use_desc = 4;
- // 优惠券标题
- string title = 5;
- // 优惠券描述
- string desc = 6;
- // 优惠券支付按钮文案
- string pay_button_text = 7;
- // 优惠券支付按钮删除线文案
- string pay_button_text_line_through = 8;
- // 实付金额
- string real_amount = 9;
- // 使用过期时间
- google.protobuf.Timestamp expire_time = 10;
-}
-
-// 优惠券信息
-message CouponInfo {
- // 提示框信息
- CouponToast toast = 1;
- // 弹窗信息
- PopWin pop_win = 2;
-}
-
-// 优惠券提示框文案信息
-message CouponTextInfo {
- // 提示框文案-播正片6分钟预览
- string positive_preview = 1;
- // 提示框文案-播非正片分节ep
- string section = 2;
-}
-
-// 优惠券提示框信息
-message CouponToast {
- // 提示框文案信息
- CouponTextInfo text_info = 1;
- // 提示框按钮
- ButtonInfo button = 2;
-}
-
-// dash条目
-message DashItem {
- // 清晰度
- uint32 id = 1;
- // 主线流
- string base_url = 2;
- // 备用流
- repeated string backup_url = 3;
- // 带宽
- uint32 bandwidth = 4;
- // 编码id
- uint32 codecid = 5;
- // md5
- string md5 = 6;
- // 大小
- uint64 size = 7;
- // 帧率
- string frame_rate = 8;
-}
-
-// dash视频流
-message DashVideo {
- // 主线流
- string base_url = 1;
- // 备用流
- repeated string backup_url = 2;
- // 带宽
- uint32 bandwidth = 3;
- // 编码id
- uint32 codecid = 4;
- // md5
- string md5 = 5;
- // 大小
- uint64 size = 6;
- // 伴音质量id
- uint32 audio_id = 7;
- // 是否非全二压
- bool no_rexcode = 8;
- // 帧率
- string frame_rate = 9;
- // 宽
- int32 width = 10;
- // 高
- int32 height = 11;
-}
-
-// 鉴权浮层
-message Dialog {
- // 鉴权限制码
- int64 code = 1;
- // 鉴权限制信息
- string msg = 2;
- // 浮层类型
- string type = 3;
- // 浮层样式类型
- string style_type = 4;
- // 浮层配置
- DialogConfig config = 5;
- // 标题
- TextInfo title = 6;
- // 副标题
- TextInfo subtitle = 7;
- // 图片信息
- ImageInfo image = 8;
- // 按钮列表
- repeated ButtonInfo button = 9;
- // 底部描述
- ButtonInfo bottom_desc = 10;
- // 埋点上报信息
- Report report = 11;
- // 倒计时 秒
- int32 count_down_sec = 12;
- // 右下描述
- TextInfo right_bottom_desc = 13;
- //
- repeated BottomDisplay bottom_display = 14;
-}
-
-// 鉴权浮层配置
-message DialogConfig {
- // 是否显示高斯模糊背景图
- bool is_show_cover = 1;
- // 是否响应转屏
- bool is_orientation_enable = 2;
- // 是否响应上滑吸顶
- bool is_nested_scroll_enable = 3;
- // 是否强制竖屏
- bool is_force_halfscreen_enable = 4;
-}
-
-//
-message Dimension {
- //
- int32 width = 1;
- //
- int32 height = 2;
- //
- int32 rotate = 3;
-}
-
-// 杜比音频信息
-message DolbyItem {
- // 杜比类型
- enum Type {
- NONE = 0; // NONE
- COMMON = 1; // 普通杜比音效
- ATMOS = 2; // 全景杜比音效
- }
- // 杜比类型
- Type type = 1;
- // 音频流
- DashItem audio = 2;
-}
-
-//
-enum DrmTechType {
- NON = 0; //
- FAIR_PLAY = 1; //
-}
-
-// 播放结束页
-message EndPage {
- // 鉴权浮层
- Dialog dialog = 1;
- // 播放完后是否隐藏end_page
- bool hide = 2;
-}
-
-// 事件
-message Event {
- // 震动
- Shake shake = 1;
-}
-
-//
-message FreyaConfig {
- //
- string desc = 1;
- //
- int32 type = 2;
- //
- int32 issued_cnt = 3;
- //
- bool is_always_show = 4;
- //
- int32 screen_number = 5;
- //
- int32 full_screen_number = 6;
-}
-
-//
-message GradientColor {
- //
- string start_color = 1;
- //
- string end_color = 2;
-}
-
-//
-message HighDefinitionTrialInfo {
- //
- bool trial_able = 1;
- //
- int32 remaining_times = 2;
- //
- int32 start = 3;
- //
- int32 time_length = 4;
- //
- Toast start_toast = 5;
- //
- Toast end_toast = 6;
- //
- Report report = 7;
- //
- ButtonInfo quality_open_tip_btn = 8;
- //
- ButtonInfo no_longer_trial_btn = 9;
-}
-
-// 图片信息
-message ImageInfo {
- // 图片链接
- string url = 1;
-}
-
-//
-enum InlineScene {
- UNKNOWN = 0; //
- RELATED_EP = 1; //
- HE = 2; //
- SKIP = 3; //
-}
-
-//
-enum InlineType {
- TYPE_UNKNOWN = 0; //
- TYPE_WHOLE = 1; //
- TYPE_HE_CLIP = 2; //
- TYPE_PREVIEW = 3; //
-}
-
-//
-message MultiView {
- //
- string button_material = 1;
- //
- int64 ep_id = 2;
- //
- int64 cid = 3;
- //
- int64 avid = 4;
-}
-
-//
-message PayTip {
- //
- string title = 1;
- //
- string url = 2;
- //
- string icon = 3;
- //
- int32 type = 4;
- //
- int32 show_type = 5;
- //
- string img = 6;
- //
- string bg_day_color = 7;
- //
- string bg_night_color = 8;
- //
- string bg_line_color = 9;
- //
- string bg_night_line_color = 10;
- //
- string text_color = 11;
- //
- string text_night_color = 12;
- //
- int64 view_start_time = 13;
- //
- repeated ButtonInfo button = 14;
- //
- int32 url_open_type = 15;
- //
- Report report = 16;
- //
- int32 angle_style = 17;
- //
- int32 report_type = 18;
- //
- map order_report_params = 19;
-}
-
-// 禁用功能配置
-message PlayAbilityConf {
- bool background_play_disable = 1; // 后台播放
- bool flip_disable = 2; // 镜像反转
- bool cast_disable = 3; // 投屏
- bool feedback_disable = 4; // 反馈
- bool subtitle_disable = 5; // 字幕
- bool playback_rate_disable = 6; // 播放速度
- bool time_up_disable = 7; // 定时停止
- bool playback_mode_disable = 8; // 播放方式
- bool scale_mode_disable = 9; // 画面尺寸
- bool like_disable = 10; // 赞
- bool dislike_disable = 11; // 踩
- bool coin_disable = 12; // 投币
- bool elec_disable = 13; // 充电
- bool share_disable = 14; // 分享
- bool screen_shot_disable = 15; // 截图
- bool lock_screen_disable = 16; // 锁定
- bool recommend_disable = 17; // 相关推荐
- bool playback_speed_disable = 18; // 播放速度
- bool definition_disable = 19; // 清晰度
- bool selections_disable = 20; // 选集
- bool next_disable = 21; // 下一集
- bool edit_dm_disable = 22; // 编辑弹幕
- bool small_window_disable = 23; // 小窗
- bool shake_disable = 24; // 震动
- bool outer_dm_disable = 25; // 外层面板弹幕设置
- bool inner_dm_disable = 26; // 三点内弹幕设置
- bool freya_enter_disable = 27; // 一起看入口
- bool dolby_disable = 28; // 杜比音效
- bool freya_full_disable = 29; // 全屏一起看入口
- bool skip_oped_switch_disable = 30; //
- bool record_screen_disable = 31; //
- bool color_optimize_disable = 32; //
-}
-
-// 云控扩展配置信息
-message PlayAbilityExtConf {
- // 自定义配置扩展信息
- bool allow_close_subtitle = 1;
- //
- FreyaConfig freya_config = 2;
- //
- CastTips cast_tips = 3;
-}
-
-// 错误码
-enum PlayErr {
- NoErr = 0; //
- WithMultiDeviceLoginErr = 1; // 管控类型的错误码
-}
-
-// 其他业务信息
-message PlayViewBusinessInfo {
- // 当前视频是否是预览
- bool is_preview = 1;
- // 用户是否承包过
- bool bp = 2;
- // drm使用
- string marlin_token = 3;
- // 倍速动效色值
- string playback_speed_color = 4;
- //
- ContinuePlayInfo continue_play_info = 5;
- //
- repeated ClipInfo clip_info = 6;
- //
- InlineType inline_type = 7;
- //
- int32 ep_whole_duration = 8;
- //
- Dimension dimension = 9;
- //
- map quality_ext_map = 10;
- //
- map exp_map = 11;
- //
- DrmTechType drm_tech_type = 12;
-}
-
-// 播放页信息-响应
-message PlayViewReply {
- // 视频流信息
- VideoInfo video_info = 1;
- // 播放控件用户自定义配置
- PlayAbilityConf play_conf = 2;
- // 业务需要的其他信息
- PlayViewBusinessInfo business = 3;
- // 事件
- Event event = 4;
- // 展示信息
- ViewInfo view_info = 5;
- // 自定义配置扩展信息
- PlayAbilityExtConf play_ext_conf = 6;
-}
-
-// 播放页信息-请求
-message PlayViewReq {
- // 剧集epid
- int64 epid = 1;
- // 视频cid
- int64 cid = 2;
- // 清晰度
- int64 qn = 3;
- // 视频流版本
- int32 fnver = 4;
- // 视频流格式
- int32 fnval = 5;
- // 下载模式
- // 0:播放 1:flv下载 2:dash下载
- uint32 download = 6;
- // 流url强制是用域名
- // 0:允许使用ip 1:使用http 2:使用https
- int32 force_host = 7;
- // 是否4K
- bool fourk = 8;
- // 当前页spm
- string spmid = 9;
- // 上一页spm
- string from_spmid = 10;
- // 青少年模式
- int32 teenagers_mode = 11;
- // 视频编码
- CodeType prefer_codec_type = 12;
- // 是否强制请求预览视频
- bool is_preview = 13;
- // 一起看房间id
- int64 room_id = 14;
- // 是否需要展示信息
- bool is_need_view_info = 15;
- // 场景控制
- SceneControl scene_control = 16;
- //
- InlineScene inline_scene = 17;
- //
- int64 material_no = 18;
-}
-
-// 弹窗信息
-message PopWin {
- // 弹窗标题 老字段
- string title = 1;
- // 优惠券列表
- repeated Coupon coupon = 2;
- // 弹窗按钮列表
- repeated ButtonInfo button = 3;
- // 底部文案 老字段
- string bottom_text = 4;
- // 弹窗标题 新字段
- TextInfo pop_title = 5;
- // 弹窗副标题
- TextInfo subtitle = 6;
- // 底部描述 新字段
- ButtonInfo bottom_desc = 7;
- // 弹窗小图
- string cover = 8;
- // 弹窗类型
- string pop_type = 9;
-}
-
-//
-message PromptBar {
- //
- TextInfo title = 1;
- //
- TextInfo sub_title = 2;
- //
- string sub_title_icon = 3;
- //
- string bg_image = 4;
- //
- GradientColor bg_gradient_color = 5;
- //
- repeated ButtonInfo button = 6;
- //
- Report report = 7;
- //
- string full_screen_ip_icon = 8;
- //
- GradientColor full_screen_bg_gradient_color = 9;
-}
-
-//
-message QualityExtInfo {
- //
- bool trial_support = 1;
-}
-
-// 埋点上报信息
-message Report {
- // 曝光事件
- string show_event_id = 1;
- // 点击事件
- string click_event_id = 2;
- // 埋点透传参数
- string extends = 3;
-}
-
-// 分段流条目
-message ResponseUrl {
- // 分段序号
- uint32 order = 1;
- // 分段时长
- uint64 length = 2;
- // 分段大小
- uint64 size = 3;
- // 主线流
- string url = 4;
- // 备用流
- repeated string backup_url = 5;
- // md5
- string md5 = 6;
-}
-
-// 场景控制
-message SceneControl {
- // 是否收藏播单
- bool fav_playlist = 1;
- // 是否小窗
- bool small_window = 2;
- // 是否画中画
- bool pip = 3;
- //
- bool was_he_inline = 4;
- //
- bool is_need_trial = 5;
-}
-
-//分段视频流
-message SegmentVideo {
- //分段视频流列表
- repeated ResponseUrl segment = 1;
-}
-
-// 震动
-message Shake {
- // 文件地址
- string file = 1;
-}
-
-// 视频流信息
-message Stream {
- // 元数据
- StreamInfo info = 1;
- // 流数据
- oneof content {
- // dash流
- DashVideo dash_video = 2;
- // 分段流
- SegmentVideo segment_video = 3;
- }
-}
-
-// 流媒体元数据
-message StreamInfo {
- // 清晰度
- uint32 quality = 1;
- // 格式
- string format = 2;
- // 格式描述
- string description = 3;
- // 错误码
- uint32 err_code = 4;
- // 不满足条件信息
- StreamLimit limit = 5;
- // 是否需要vip
- bool need_vip = 6;
- // 是否需要登录
- bool need_login = 7;
- // 是否完整
- bool intact = 8;
- // 是否非全二压
- bool no_rexcode = 9;
- // 清晰度属性位
- int64 attribute = 10;
- // 新版格式描述
- string new_description = 11;
- // 格式文字
- string display_desc = 12;
- // 新版格式描述备注
- string superscript = 13;
-}
-
-// 清晰度不满足条件信息
-message StreamLimit {
- // 标题
- string title = 1;
- // 跳转地址
- string uri = 2;
- // 提示信息
- string msg = 3;
-}
-
-// 文案信息
-message TextInfo {
- // 文案
- string text = 1;
- // 字体色值
- string textColor = 2;
- // 字体色值-夜间模式
- string textColorNight = 3;
-}
-
-// toast
-message Toast {
- // toast文案 老字段
- string text = 1;
- // toast按钮
- ButtonInfo button = 2;
- // 显示样式类型
- int32 show_style_type = 3;
- // 图标
- string icon = 4;
- // toast文案 新字段
- TextInfo toast_text = 5;
- // 埋点上报信息
- Report report = 6;
- //
- map order_report_params = 7;
-}
-
-// 视频url信息
-message VideoInfo {
- // 视频清晰度
- uint32 quality = 1;
- // 视频格式
- string format = 2;
- // 视频时长
- uint64 timelength = 3;
- // 视频编码id
- uint32 video_codecid = 4;
- // 视频流
- repeated Stream stream_list = 5;
- // 伴音流
- repeated DashItem dash_audio = 6;
- // 杜比伴音流
- DolbyItem dolby = 7;
-}
-
-// 展示信息
-message ViewInfo {
- // 鉴权浮层
- Dialog dialog = 1;
- // toast
- Toast toast = 2;
- // 优惠券信息
- CouponInfo coupon_info = 3;
- // 未购买的超前点播ep列表
- repeated int64 demand_no_pay_epids = 4;
- // 播放结束页
- EndPage end_page = 5;
- //
- map exp_config = 6;
- // 弹窗
- PopWin pop_win = 7;
- //
- PromptBar try_watch_prompt_bar = 8;
- //
- PayTip pay_tip = 9;
- //
- HighDefinitionTrialInfo high_definition_trial_info = 10;
- //
- map ext_dialog = 11;
-}
\ No newline at end of file
+syntax = "proto3";
+
+package bilibili.pgc.gateway.player.v2;
+
+import "google/protobuf/timestamp.proto";
+
+// 视频url
+service PlayURL {
+ // 播放页信息
+ rpc PlayView (PlayViewReq) returns (PlayViewReply);
+ //
+ rpc PlayViewComic(PlayViewReq) returns (PlayViewReply);
+}
+
+//
+message Animation {
+ //
+ map qn_svga_animation_map = 1;
+}
+
+//
+message AudioMaterialProto {
+ //
+ string audio_id = 1;
+ //
+ string title = 2;
+ //
+ string edition = 3;
+ //
+ uint64 person_id = 4;
+ //
+ string person_name = 5;
+ //
+ string person_avatar = 6;
+ //
+ repeated DashItem audio = 7;
+}
+
+// 角标信息
+message BadgeInfo {
+ // 角标文案
+ string text = 1;
+ // 角标色值
+ string bg_color = 2;
+ // 角标色值-夜间模式
+ string bg_color_night = 3;
+ // 文案色值
+ string text_color = 4;
+ // ? 新版本客户端已弃用此项
+ GradientColor bg_gradient_color = 5;
+ //
+ string img = 6;
+}
+
+// Dialog组件: 底部显示
+message BottomDisplay {
+ // 文案
+ TextInfo title = 1;
+ // 图标
+ string icon = 2;
+}
+
+// 按钮信息
+message ButtonInfo {
+ // 按钮文案
+ string text = 1;
+ // 按钮字体色值
+ string text_color = 2;
+ // 按钮字体色值-夜间模式
+ string text_color_night = 3;
+ // 按钮背景色
+ string bg_color = 4;
+ // 按钮背景色-夜间模式
+ string bg_color_night = 5;
+ // 按钮链接
+ string link = 6;
+ // 按钮动作类型
+ string action_type = 7;
+ // 角标信息
+ BadgeInfo badge_info = 8;
+ // 埋点上报信息
+ Report report = 9;
+ // 左侧删除线样式文案
+ string left_strikethrough_text = 10;
+ // 缩略按钮文案信息
+ TextInfo simple_text_info = 11;
+ // 缩略按钮背景色值
+ string simple_bg_color = 12;
+ // 缩略按钮字体色值-夜间模式
+ string simple_bg_color_night = 13;
+ //
+ GradientColor bg_gradient_color = 14;
+ //
+ map order_report_params = 15;
+ //
+ TaskParam task_param = 16;
+ //
+ string pc_link = 17;
+}
+
+// 投屏限制. code = 0 时为无限制, 否则表示不不允许投屏并提示message
+message CastTips {
+ //
+ int32 code = 1;
+ //
+ string message = 2;
+}
+
+// 跳过片头/片尾配置
+message ClipInfo {
+ //
+ int64 material_no = 1;
+ // DASH分段始
+ int32 start = 2;
+ // DASH分段终
+ int32 end = 3;
+ // Clip类型
+ ClipType clip_type = 4;
+ // 跳过片头/片尾时的提示语
+ string toast_text = 5;
+ //
+ MultiView multi_view = 6;
+}
+
+// 跳过片头/片尾配置: Clip类型
+enum ClipType {
+ NT_UNKNOWN = 0; //
+ CLIP_TYPE_OP = 1; // 跳过OP
+ CLIP_TYPE_ED = 2; // 跳过ED
+ CLIP_TYPE_HE = 3; //
+ CLIP_TYPE_MULTI_VIEW = 4; //
+ CLIP_TYPE_AD = 5; //
+}
+
+// 编码类型
+enum CodeType {
+ NOCODE = 0; // 默认
+ CODE264 = 1; // H.264
+ CODE265 = 2; // H.265
+}
+
+//
+message ContinuePlayInfo {
+ //
+ int64 continue_play_ep_id = 1;
+}
+
+// 优惠券
+message Coupon {
+ // 优惠券token
+ string coupon_token = 1;
+ // 优惠券类型
+ // 1:折扣券 2:满减券 3:兑换券
+ int64 type = 2;
+ // 优惠券面值
+ string value = 3;
+ // 优惠券使用描述
+ string use_desc = 4;
+ // 优惠券标题
+ string title = 5;
+ // 优惠券描述
+ string desc = 6;
+ // 优惠券支付按钮文案
+ string pay_button_text = 7;
+ // 优惠券支付按钮删除线文案
+ string pay_button_text_line_through = 8;
+ // 实付金额
+ string real_amount = 9;
+ // 使用过期时间
+ google.protobuf.Timestamp expire_time = 10;
+ //
+ int64 otype = 11;
+ //
+ string amount = 12;
+}
+
+// 优惠券信息
+message CouponInfo {
+ // 提示框信息
+ CouponToast toast = 1;
+ // 弹窗信息
+ PopWin pop_win = 2;
+}
+
+// 优惠券提示框文案信息
+message CouponTextInfo {
+ // 提示框文案-播正片6分钟预览
+ string positive_preview = 1;
+ // 提示框文案-播非正片分节ep
+ string section = 2;
+}
+
+// 优惠券提示框信息
+message CouponToast {
+ // 提示框文案信息
+ CouponTextInfo text_info = 1;
+ // 提示框按钮
+ ButtonInfo button = 2;
+}
+
+// dash条目
+message DashItem {
+ // 清晰度
+ uint32 id = 1;
+ // 主线流
+ string base_url = 2;
+ // 备用流
+ repeated string backup_url = 3;
+ // 带宽
+ uint32 bandwidth = 4;
+ // 编码id
+ uint32 codecid = 5;
+ // md5
+ string md5 = 6;
+ // 视频大小
+ uint64 size = 7;
+ // 帧率
+ string frame_rate = 8;
+ // DRM widevine 密钥
+ string widevine_pssh = 9;
+}
+
+// dash视频流
+message DashVideo {
+ // 主线流
+ string base_url = 1;
+ // 备用流
+ repeated string backup_url = 2;
+ // 带宽
+ uint32 bandwidth = 3;
+ // 编码id
+ uint32 codecid = 4;
+ // md5
+ string md5 = 5;
+ // 大小
+ uint64 size = 6;
+ // 伴音质量id
+ uint32 audio_id = 7;
+ // 是否非全二压
+ bool no_rexcode = 8;
+ // 帧率
+ string frame_rate = 9;
+ // 宽
+ int32 width = 10;
+ // 高
+ int32 height = 11;
+ // DRM 密钥
+ string widevine_pssh = 12;
+}
+
+//
+message DataControl {
+ //
+ bool need_watch_progress = 1;
+}
+
+// 鉴权浮层
+message Dialog {
+ // 鉴权限制码
+ int64 code = 1;
+ // 鉴权限制信息
+ string msg = 2;
+ // 浮层类型
+ string type = 3;
+ // 浮层样式类型
+ string style_type = 4;
+ // 浮层配置
+ DialogConfig config = 5;
+ // 标题
+ TextInfo title = 6;
+ // 副标题
+ TextInfo subtitle = 7;
+ // 图片信息
+ ImageInfo image = 8;
+ // 按钮列表
+ repeated ButtonInfo button = 9;
+ // 底部描述
+ ButtonInfo bottom_desc = 10;
+ // 埋点上报信息
+ Report report = 11;
+ // 倒计时 秒
+ int32 count_down_sec = 12;
+ // 右下描述
+ TextInfo right_bottom_desc = 13;
+ //
+ repeated BottomDisplay bottom_display = 14;
+ //
+ repeated PlayList play_list = 15;
+}
+
+// 鉴权浮层配置
+message DialogConfig {
+ // 是否显示高斯模糊背景图
+ bool is_show_cover = 1;
+ // 是否响应转屏
+ bool is_orientation_enable = 2;
+ // 是否响应上滑吸顶
+ bool is_nested_scroll_enable = 3;
+ // 是否强制竖屏
+ bool is_force_halfscreen_enable = 4;
+ // 是否启用背景半透明
+ bool is_background_translucent_enable = 5;
+}
+
+// 当前分辨率信息
+message Dimension {
+ // 宽
+ int32 width = 1;
+ // 长
+ int32 height = 2;
+ // 旋转角度
+ int32 rotate = 3;
+}
+
+// 杜比音频信息
+message DolbyItem {
+ // 杜比类型
+ enum Type {
+ NONE = 0; // NONE
+ COMMON = 1; // 普通杜比音效
+ ATMOS = 2; // 全景杜比音效
+ }
+ // 杜比类型
+ Type type = 1;
+ // 音频流
+ DashItem audio = 2;
+}
+
+// DRM技术类型
+enum DrmTechType {
+ NON = 0; //
+ FAIR_PLAY = 1; //
+ WIDE_VINE = 2; //
+ BILI_DRM = 3; //
+}
+
+// 播放结束后的尾页Dialog
+message EndPage {
+ //
+ Dialog dialog = 1;
+ //
+ bool hide = 2;
+}
+
+//
+message EpInlineVideo {
+ //
+ int64 material_no = 1;
+ //
+ int64 aid = 2;
+ //
+ int64 cid = 3;
+}
+
+// 剧集广告信息
+message EpisodeAdvertisementInfo {
+ //
+ int64 aid = 1;
+ //
+ string title = 2;
+ //
+ string link = 3;
+ //
+ int32 follow_video_bnt_flag = 4;
+ //
+ string next_video_title = 5;
+ //
+ string next_video_link = 6;
+ //
+ int64 cid = 7;
+ //
+ int32 season_id = 8;
+ //
+ int32 follow = 9;
+}
+
+// EP信息
+message EpisodeInfo {
+ //
+ int32 ep_id = 1;
+ //
+ int64 cid = 2;
+ //
+ int64 aid = 3;
+ //
+ int64 ep_status = 4;
+ //
+ SeasonInfo season_info = 5;
+ //
+ string cover = 6;
+ //
+ string title = 7;
+ //
+ Interaction interaction = 8;
+ //
+ string long_title = 9;
+}
+
+//
+message EpPreVideo {
+ //
+ int64 aid = 1;
+ //
+ int64 cid = 2;
+}
+
+//
+message EpPublicityVideo {
+ //
+ enum Type {
+ DATA_NOT_SET = 0;
+ EP_PRE_VIDEO = 2;
+ EP_INLINE = 3;
+ }
+ //
+ Type type = 1;
+ //
+ oneof data {
+ //
+ EpPreVideo ep_pre_video = 2;
+ //
+ EpInlineVideo ep_inline_video = 3;
+ }
+}
+
+//
+enum EpPublicityVideoType {
+ //
+ PRE = 0;
+ //
+ INLINE = 1;
+}
+
+// 事件
+message Event {
+ // 震动
+ Shake shake = 1;
+}
+
+// 放映室提示语
+message FreyaConfig {
+ //
+ string desc = 1;
+ //
+ int32 type = 2;
+ //
+ int32 issued_cnt = 3;
+ //
+ bool is_always_show = 4;
+ //
+ int32 screen_number = 5;
+ //
+ int32 full_screen_number = 6;
+}
+
+// 渐变色信息
+message GradientColor {
+ //
+ string start_color = 1;
+ //
+ string end_color = 2;
+}
+
+// 高画质试看信息
+message HighDefinitionTrialInfo {
+ //
+ bool trial_able = 1;
+ //
+ int32 remaining_times = 2;
+ //
+ int32 start = 3;
+ //
+ int32 time_length = 4;
+ //
+ Toast start_toast = 5;
+ //
+ Toast end_toast = 6;
+ //
+ Report report = 7;
+ //
+ ButtonInfo quality_open_tip_btn = 8;
+ //
+ ButtonInfo no_longer_trial_btn = 9;
+}
+
+// 历史记录节点
+message HistoryNode {
+ // 节点ID
+ int64 node_id = 1;
+ // 节点标题
+ string title = 2;
+ // 对应CID
+ int64 cid = 3;
+}
+
+// 图片信息
+message ImageInfo {
+ // 图片链接
+ string url = 1;
+}
+
+//
+enum InlineScene {
+ UNKNOWN = 0; //
+ RELATED_EP = 1; //
+ HE = 2; //
+ SKIP = 3; //
+}
+
+//
+enum InlineType {
+ TYPE_UNKNOWN = 0; //
+ TYPE_WHOLE = 1; //
+ TYPE_HE_CLIP = 2; //
+ TYPE_PREVIEW = 3; //
+}
+
+// 交互信息
+message Interaction {
+ // 历史节点
+ HistoryNode history_node = 1;
+ // 版本
+ int64 graph_version = 2;
+ // 交互消息
+ string msg = 3;
+ // 是否为交互
+ bool is_interaction = 4;
+}
+
+// 限制操作类型
+enum LimitActionType {
+ //
+ LAT_UNKNOWN = 0;
+ //
+ SHOW_LIMIT_DIALOG = 1;
+ //
+ SKIP_CURRENT_EP = 2;
+}
+
+//
+message MultiView {
+ //
+ string button_material = 1;
+ //
+ int64 ep_id = 2;
+ //
+ int64 cid = 3;
+ //
+ int64 avid = 4;
+}
+
+// 大会员广告: 支付提示信息
+message PayTip {
+ // 标题
+ string title = 1;
+ // 跳转链接
+ string url = 2;
+ // 图标
+ string icon = 3;
+ // 浮层类型
+ int32 type = 4;
+ // 显示类型
+ int32 show_type = 5;
+ // 图片信息
+ string img = 6;
+ // 白天背景颜色
+ string bg_day_color = 7;
+ // 夜间背景颜色
+ string bg_night_color = 8;
+ // 白天线条颜色
+ string bg_line_color = 9;
+ // 夜间线条颜色
+ string bg_night_line_color = 10;
+ // 文字颜色
+ string text_color = 11;
+ // 夜间文字颜色
+ string text_night_color = 12;
+ // 视图展示起始时间
+ int64 view_start_time = 13;
+ // 按钮列表
+ repeated ButtonInfo button = 14;
+ // 跳转链接打开方式
+ int32 url_open_type = 15;
+ // 埋点上报信息
+ Report report = 16;
+ // 角度样式
+ int32 angle_style = 17;
+ // 埋点上报类型
+ int32 report_type = 18;
+ // 订单埋点上报参数
+ map order_report_params = 19;
+ // 巨屏图片信息
+ string giant_screen_img = 20;
+}
+
+// 禁用功能配置
+message PlayAbilityConf {
+ bool background_play_disable = 1; // 后台播放
+ bool flip_disable = 2; // 镜像反转
+ bool cast_disable = 3; // 投屏
+ bool feedback_disable = 4; // 反馈
+ bool subtitle_disable = 5; // 字幕
+ bool playback_rate_disable = 6; // 播放速度
+ bool time_up_disable = 7; // 定时停止
+ bool playback_mode_disable = 8; // 播放方式
+ bool scale_mode_disable = 9; // 画面尺寸
+ bool like_disable = 10; // 赞
+ bool dislike_disable = 11; // 踩
+ bool coin_disable = 12; // 投币
+ bool elec_disable = 13; // 充电
+ bool share_disable = 14; // 分享
+ bool screen_shot_disable = 15; // 截图
+ bool lock_screen_disable = 16; // 锁定
+ bool recommend_disable = 17; // 相关推荐
+ bool playback_speed_disable = 18; // 播放速度
+ bool definition_disable = 19; // 清晰度
+ bool selections_disable = 20; // 选集
+ bool next_disable = 21; // 下一集
+ bool edit_dm_disable = 22; // 编辑弹幕
+ bool small_window_disable = 23; // 小窗
+ bool shake_disable = 24; // 震动
+ bool outer_dm_disable = 25; // 外层面板弹幕设置
+ bool inner_dm_disable = 26; // 三点内弹幕设置
+ bool freya_enter_disable = 27; // 一起看入口
+ bool dolby_disable = 28; // 杜比音效
+ bool freya_full_disable = 29; // 全屏一起看入口
+ bool skip_oped_switch_disable = 30; // 跳过片头片尾
+ bool record_screen_disable = 31; // 录屏
+ bool color_optimize_disable = 32; // 色觉优化
+ bool dubbing_disable = 33; // 配音
+}
+
+// 云控扩展配置信息
+message PlayAbilityExtConf {
+ //
+ bool allow_close_subtitle = 1;
+ //
+ FreyaConfig freya_config = 2;
+ //
+ CastTips cast_tips = 3;
+}
+
+// 播放配音信息
+message PlayDubbingInfo {
+ // 背景音频
+ AudioMaterialProto background_audio = 1;
+ // 角色音频列表
+ repeated RoleAudioProto role_audio_list = 2;
+ // 引导文本
+ string guide_text = 3;
+}
+
+// 错误码
+enum PlayErr {
+ NoErr = 0; //
+ WithMultiDeviceLoginErr = 1; // 管控类型的错误码
+}
+
+
+// 播放扩展信息
+message PlayExtInfo {
+ // 播放配音信息
+ PlayDubbingInfo play_dubbing_info = 1;
+}
+
+//
+message PlayList {
+ //
+ int32 season_id = 1;
+ //
+ string title = 2;
+ //
+ string cover = 3;
+ //
+ string link = 4;
+ //
+ BadgeInfo badge_info = 5;
+}
+
+// 其他业务信息
+message PlayViewBusinessInfo {
+ // 当前视频是否是预览
+ bool is_preview = 1;
+ // 用户是否承包过
+ bool bp = 2;
+ // drm使用
+ string marlin_token = 3;
+ // 倍速动效色值
+ string playback_speed_color = 4;
+ //
+ ContinuePlayInfo continue_play_info = 5;
+ // 跳过片头/片尾配置
+ repeated ClipInfo clip_info = 6;
+ //
+ InlineType inline_type = 7;
+ //
+ int32 ep_whole_duration = 8;
+ // 当前分辨率信息
+ Dimension dimension = 9;
+ //
+ map quality_ext_map = 10;
+ //
+ map exp_map = 11;
+ // DRM技术类型
+ DrmTechType drm_tech_type = 12;
+ //
+ int32 limit_action_type = 13;
+ //
+ bool is_drm = 14;
+ //
+ RecordInfo record_info = 15;
+ //
+ int32 vip_status = 16;
+ //
+ bool is_live_pre = 17;
+ //
+ EpisodeInfo episode_info = 18;
+ //
+ EpisodeAdvertisementInfo episode_advertisement_info = 19;
+ //
+ UserStatus user_status = 20;
+}
+
+// 播放页信息-响应
+message PlayViewReply {
+ // 视频流信息
+ VideoInfo video_info = 1;
+ // 播放控件用户自定义配置
+ PlayAbilityConf play_conf = 2;
+ // 业务需要的其他信息
+ PlayViewBusinessInfo business = 3;
+ // 事件
+ Event event = 4;
+ // 展示信息
+ ViewInfo view_info = 5;
+ // 自定义配置扩展信息
+ PlayAbilityExtConf play_ext_conf = 6;
+ // 播放扩展信息
+ PlayExtInfo play_ext_info = 7;
+}
+
+// 播放页信息-请求
+message PlayViewReq {
+ // 剧集epid
+ int64 epid = 1;
+ // 视频cid
+ int64 cid = 2;
+ // 清晰度
+ int64 qn = 3;
+ // 视频流版本
+ int32 fnver = 4;
+ // 视频流格式
+ int32 fnval = 5;
+ // 下载模式
+ // 0:播放 1:flv下载 2:dash下载
+ uint32 download = 6;
+ // 流url强制是用域名
+ // 0:允许使用ip 1:使用http 2:使用https
+ int32 force_host = 7;
+ // 是否4K
+ bool fourk = 8;
+ // 当前页spm
+ string spmid = 9;
+ // 上一页spm
+ string from_spmid = 10;
+ // 青少年模式
+ int32 teenagers_mode = 11;
+ // 视频编码
+ CodeType prefer_codec_type = 12;
+ // 是否强制请求预览视频
+ bool is_preview = 13;
+ // 一起看房间id
+ int64 room_id = 14;
+ // 是否需要展示信息
+ bool is_need_view_info = 15;
+ // 场景控制
+ SceneControl scene_control = 16;
+ //
+ InlineScene inline_scene = 17;
+ //
+ int64 material_no = 18;
+ // DRM 安全等级
+ int32 security_level = 19;
+ //
+ int64 season_id = 20;
+ //
+ DataControl data_control = 21;
+}
+
+// 弹窗信息
+message PopWin {
+ // 弹窗标题 老字段
+ string title = 1;
+ // 优惠券列表
+ repeated Coupon coupon = 2;
+ // 弹窗按钮列表
+ repeated ButtonInfo button = 3;
+ // 底部文案 老字段
+ string bottom_text = 4;
+ // 弹窗标题 新字段
+ TextInfo pop_title = 5;
+ // 弹窗副标题
+ TextInfo subtitle = 6;
+ // 底部描述 新字段
+ ButtonInfo bottom_desc = 7;
+ // 弹窗小图
+ string cover = 8;
+ // 弹窗类型
+ string pop_type = 9;
+}
+
+// 广告组件: 竖屏时视频下部提示栏
+message PromptBar {
+ // 主标题, 如: "本片含大会员专享内容"
+ TextInfo title = 1;
+ // 副标题, 如: "成为大会员可免费看全部剧集"
+ TextInfo sub_title = 2;
+ // 副标题前面的icon
+ string sub_title_icon = 3;
+ // 背景图
+ string bg_image = 4;
+ // 背景渐变色
+ GradientColor bg_gradient_color = 5;
+ // 按钮
+ repeated ButtonInfo button = 6;
+ // 埋点上报信息
+ Report report = 7;
+ //
+ string full_screen_ip_icon = 8;
+ //
+ GradientColor full_screen_bg_gradient_color = 9;
+}
+
+// 云控拓展视频画质信息
+message QualityExtInfo {
+ // 是否支持试看
+ bool trial_support = 1;
+}
+
+// 备案信息
+message RecordInfo {
+ // 记录
+ string record = 1;
+ // 记录图标
+ string record_icon = 2;
+}
+
+// 埋点上报信息
+message Report {
+ // 曝光事件
+ string show_event_id = 1;
+ // 点击事件
+ string click_event_id = 2;
+ // 埋点透传参数
+ string extends = 3;
+}
+
+// 分段流条目
+message ResponseUrl {
+ // 分段序号
+ uint32 order = 1;
+ // 分段时长
+ uint64 length = 2;
+ // 分段大小
+ uint64 size = 3;
+ // 主线流
+ string url = 4;
+ // 备用流
+ repeated string backup_url = 5;
+ // md5
+ string md5 = 6;
+}
+
+// 权限信息
+message Rights {
+ // 是否可以观看
+ int32 can_watch = 1;
+}
+
+// 角色配音信息
+message RoleAudioProto {
+ // 角色ID
+ int64 role_id = 1;
+ // 角色名称
+ string role_name = 2;
+ // 角色头像
+ string role_avatar = 3;
+ // 音频素材列表
+ repeated AudioMaterialProto audio_material_list = 4;
+}
+
+// 场景控制
+message SceneControl {
+ // 是否收藏播单
+ bool fav_playlist = 1;
+ // 是否小窗
+ bool small_window = 2;
+ // 是否画中画
+ bool pip = 3;
+ //
+ bool was_he_inline = 4;
+ //
+ bool is_need_trial = 5;
+}
+
+// 方案
+message Scheme {
+ enum ActionType {
+ UNKNOWN = 0;
+ SHOW_TOAST = 1;
+ }
+ //
+ ActionType action_type = 1;
+ //
+ string toast = 2;
+}
+
+// PGC SEASON 信息
+message SeasonInfo {
+ // PGC SEASON ID
+ int32 season_id = 1;
+ // PGC SEASON 类型
+ int32 season_type = 2;
+ // PGC SEASON 状态
+ int32 season_status = 3;
+ // 封面
+ string cover = 4;
+ // 标题
+ string title = 5;
+ // 权限信息
+ Rights rights = 6;
+ // 模式
+ int32 mode = 7;
+}
+
+// DRM 安全等级
+enum SecurityLevel {
+ LEVEL_UNKNOWN = 0; //
+ LEVEL_L1 = 1; //
+ LEVEL_L2 = 2; //
+ LEVEL_L3 = 3; //
+}
+
+// 分段视频流
+message SegmentVideo {
+ //分段视频流列表
+ repeated ResponseUrl segment = 1;
+}
+
+// 震动
+message Shake {
+ // 文件地址
+ string file = 1;
+}
+
+// 视频流信息
+message Stream {
+ // 元数据
+ StreamInfo info = 1;
+ // 流数据
+ oneof content {
+ // dash流
+ DashVideo dash_video = 2;
+ // 分段流
+ SegmentVideo segment_video = 3;
+ }
+}
+
+// 流媒体元数据
+message StreamInfo {
+ // 视频质量
+ int32 quality = 1;
+ // 视频格式
+ string format = 2;
+ // 描述信息
+ string description = 3;
+ // 错误码
+ int32 err_code = 4;
+ // 流限制信息
+ StreamLimit limit = 5;
+ // 是否需要VIP
+ bool need_vip = 6;
+ // 是否需要登录
+ bool need_login = 7;
+ // 是否完整
+ bool intact = 8;
+ // 权限信息
+ int64 attribute = 10;
+ // 新版描述信息
+ string new_description = 11;
+ // 显示描述信息
+ string display_desc = 12;
+ // 上标
+ string superscript = 13;
+ // 方案信息
+ Scheme scheme = 14;
+ // 是否支持DRM
+ bool support_drm = 15;
+ // 字幕信息
+ string subtitle = 16;
+}
+
+// 清晰度不满足条件信息
+message StreamLimit {
+ // 标题
+ string title = 1;
+ // 跳转地址
+ string uri = 2;
+ // 提示信息
+ string msg = 3;
+}
+
+// 任务参数信息
+message TaskParam {
+ // 任务类型
+ string task_type = 1;
+ // 活动ID
+ int64 activity_id = 2;
+ // 提示ID
+ int64 tips_id = 3;
+}
+
+// 文案信息
+message TextInfo {
+ // 文案
+ string text = 1;
+ // 字体色值
+ string text_color = 2;
+ // 字体色值-夜间模式
+ string text_color_night = 3;
+}
+
+// toast
+message Toast {
+ // toast文案 老字段
+ string text = 1;
+ // toast按钮
+ ButtonInfo button = 2;
+ // 显示样式类型
+ int32 show_style_type = 3;
+ // 图标
+ string icon = 4;
+ // toast文案 新字段
+ TextInfo toast_text = 5;
+ // 埋点上报信息
+ Report report = 6;
+ //
+ map order_report_params = 7;
+}
+
+// 用户状态信息
+message UserStatus {
+ // 是否支付
+ bool pay_check = 1;
+ // 是否承包
+ bool sponsor = 2;
+ // 观看进度
+ WatchProgress watch_progress = 3;
+ // 系列观看进度
+ WatchProgress aid_watch_progress = 4;
+}
+
+// 视频url信息
+message VideoInfo {
+ // 视频清晰度
+ uint32 quality = 1;
+ // 视频格式
+ string format = 2;
+ // 视频时长
+ uint64 timelength = 3;
+ // 视频编码id
+ uint32 video_codecid = 4;
+ // 视频流
+ repeated Stream stream_list = 5;
+ // 伴音流
+ repeated DashItem dash_audio = 6;
+ // 杜比伴音流
+ DolbyItem dolby = 7;
+}
+
+// 展示信息
+message ViewInfo {
+ // 弹窗
+ Dialog dialog = 1;
+ // Toast
+ Toast toast = 2;
+ // 优惠券信息
+ CouponInfo coupon_info = 3;
+ // 未支付剧集ID列表
+ repeated int64 demand_no_pay_epids = 4;
+ // 结束页
+ EndPage end_page = 5;
+ // 扩展配置
+ map exp_config = 6;
+ // 弹窗
+ PopWin pop_win = 7;
+ // 试看提示栏
+ PromptBar try_watch_prompt_bar = 8;
+ // 支付提示信息
+ PayTip pay_tip = 9;
+ // 高清试看提示信息
+ HighDefinitionTrialInfo high_definition_trial_info = 10;
+ // 弹窗扩展
+ map ext_dialog = 11;
+ // 动画
+ Animation animation = 12;
+ // Toast扩展
+ map ext_toast = 13;
+}
+
+// 观看进度信息
+message WatchProgress {
+ // 上次观看的 EP ID
+ int32 last_ep_id = 1;
+ // 上次观看到的EP INDEX
+ string last_ep_index = 2;
+ // 上次观看的进度
+ int64 progress = 3;
+ // 上次观看的 CID
+ int64 last_play_cid = 4;
+ // 带时间的提示信息
+ Toast toast = 5;
+ // 不带时间的提示信息
+ Toast toast_without_time = 6;
+ // 上次观看的 AID
+ int64 last_play_aid = 7;
+}
diff --git a/grpc_api/bilibili/playershared/playershared.proto b/grpc_api/bilibili/playershared/playershared.proto
new file mode 100644
index 0000000..0f246f6
--- /dev/null
+++ b/grpc_api/bilibili/playershared/playershared.proto
@@ -0,0 +1,974 @@
+syntax = "proto3";
+
+package bilibili.playershared;
+
+import "google/protobuf/any.proto";
+
+// ArcConf消息
+message ArcConf {
+ // 是否支持
+ bool is_support = 1;
+ // 是否禁用
+ bool disabled = 2;
+ // 额外内容
+ ExtraContent extra_content = 3;
+ // 不支持场景列表
+ repeated int32 unsupport_scene = 4;
+}
+
+//
+enum ArcType {
+ //
+ ARC_TYPE_NORMAL = 0;
+ //
+ ARC_TYPE_INTERACT = 1;
+}
+
+//
+message BackgroundInfo {
+ //
+ string drawable_color = 1;
+ //
+ string drawable_bitmap_url = 2;
+ //
+ int32 effects = 3;
+}
+
+//
+message BadgeInfo {
+ //
+ string text = 1;
+ //
+ string bg_color = 2;
+ //
+ string bg_color_night = 3;
+ //
+ string text_color = 4;
+ //
+ GradientColor bg_gradient_color = 5;
+ //
+ string img = 6;
+}
+
+//
+message Banner {
+ //
+ string jump_link = 1;
+ //
+ string image_link = 2;
+ //
+ string half_image_link = 3;
+ //
+ Report report = 4;
+}
+
+//
+message BenefitInfo {
+ //
+ string title = 1;
+ //
+ string icon = 2;
+}
+
+//
+enum BizType {
+ //
+ BIZ_TYPE_UNKNOWN = 0;
+ //
+ BIZ_TYPE_UGC = 1;
+ //
+ BIZ_TYPE_PGC = 2;
+ //
+ BIZ_TYPE_PUGV = 3;
+}
+
+//
+message BottomDisplay {
+ //
+ TextInfo title = 1;
+ //
+ string icon = 2;
+}
+
+// 按钮组件
+message Button {
+ // 按钮文本
+ string text = 1;
+ // 按钮跳转链接
+ string link = 2;
+ // 埋点上报相关
+ map report_params = 3;
+}
+
+enum ButtonAction {
+ //
+ BUTTON_UNKNOWN = 0;
+ //
+ PAY = 1;
+ //
+ VIP = 2;
+ //
+ PACK = 3;
+ //
+ LINK = 4;
+ //
+ COUPON = 5;
+ //
+ DEMAND = 6;
+ //
+ DEMAND_PACK = 7;
+ //
+ FOLLOW = 8;
+ //
+ APPOINTMENT = 9;
+ //
+ VIP_FREE = 10;
+ //
+ TASK = 11;
+ //
+ CHARGINGPLUS = 12;
+ //
+ BP = 13;
+ //
+ PRE_SELL = 14;
+ //
+ LOGIN = 15;
+}
+
+//
+message ButtonInfo {
+ //
+ string text = 1;
+ //
+ string text_color = 2;
+ //
+ string text_color_night = 3;
+ //
+ string bg_color = 4;
+ //
+ string bg_color_night = 5;
+ //
+ string link = 6;
+ //
+ ButtonAction action_type = 7;
+ //
+ BadgeInfo badge_info = 8;
+ //
+ Report report = 9;
+ //
+ string left_strikethrough_text = 10;
+ //
+ TextInfo simple_text_info = 11;
+ //
+ string simple_bg_color = 12;
+ //
+ string simple_bg_color_night = 13;
+ //
+ GradientColor bg_gradient_color = 14;
+ //
+ map order_report_params = 15;
+ //
+ TaskParam task_param = 16;
+ //
+ string frame_color = 17;
+ //
+ string icon = 18;
+}
+
+// 视频编码
+enum CodeType {
+ NOCODE = 0; // 不指定
+ CODE264 = 1; // H264
+ CODE265 = 2; // H265
+ CODEAV1 = 3; // AV1
+}
+
+//
+message ComprehensiveToast {
+ //
+ int32 type = 1;
+ //
+ ButtonInfo button = 2;
+ //
+ int32 show_style_type = 3;
+ //
+ string icon = 4;
+ //
+ TextInfo toast_text = 5;
+ //
+ Report report = 6;
+ //
+ map order_report_params = 7;
+}
+
+// 功能类型
+enum ConfType {
+ NoType = 0;
+ FLIPCONF = 1;
+ CASTCONF = 2;
+ FEEDBACK = 3;
+ SUBTITLE = 4;
+ PLAYBACKRATE = 5;
+ TIMEUP = 6;
+ PLAYBACKMODE = 7;
+ SCALEMODE = 8;
+ BACKGROUNDPLAY = 9;
+ LIKE = 10;
+ DISLIKE = 11;
+ COIN = 12;
+ ELEC = 13;
+ SHARE = 14;
+ SCREENSHOT = 15;
+ LOCKSCREEN = 16;
+ RECOMMEND = 17;
+ PLAYBACKSPEED = 18;
+ DEFINITION = 19;
+ SELECTIONS = 20;
+ NEXT = 21;
+ EDITDM = 22;
+ SMALLWINDOW = 23;
+ SHAKE = 24;
+ OUTERDM = 25;
+ INNERDM = 26;
+ PANORAMA = 27;
+ DOLBY = 28;
+ COLORFILTER = 29;
+ LOSSLESS = 30;
+ FREYAENTER = 31;
+ FREYAFULLENTER = 32;
+ SKIPOPED = 33;
+ RECORDSCREEN = 34;
+ DUBBING = 35;
+ LISTEN = 36;
+}
+
+//
+message ConfValue {
+ oneof value {
+ //
+ int32 switch_val = 1;
+ //
+ int32 selected_val = 2;
+ }
+}
+
+// Dash条目
+message DashItem {
+ // 清晰度
+ uint32 id = 1;
+ // 主线流
+ string base_url = 2;
+ // 备用流
+ repeated string backup_url = 3;
+ // 带宽
+ uint32 bandwidth = 4;
+ // 编码id
+ uint32 codecid = 5;
+ // md5
+ string md5 = 6;
+ // 大小
+ uint64 size = 7;
+ // 帧率
+ string frame_rate = 8;
+ // DRM密钥
+ string widevine_pssh = 9;
+}
+
+// 视频流信息: dash流
+message DashVideo {
+ // 主线流
+ string base_url = 1;
+ // 备用流
+ repeated string backup_url = 2;
+ // 带宽
+ uint32 bandwidth = 3;
+ // 编码id
+ uint32 codecid = 4;
+ // md5
+ string md5 = 5;
+ // 大小
+ uint64 size = 6;
+ // 伴音质量id
+ uint32 audio_id = 7;
+ // 是否非全二压
+ bool no_rexcode = 8;
+ // 帧率
+ string frame_rate = 9;
+ // 宽
+ int32 width = 10;
+ // 高
+ int32 height = 11;
+ // DRM密钥
+ string widevine_pssh = 12;
+}
+
+//
+message DeviceConf {
+ ConfValue conf_value = 1;
+}
+
+//
+message Dialog {
+ //
+ GuideStyle style_type = 1;
+ //
+ BackgroundInfo background_info = 2;
+ //
+ TextInfo title = 3;
+ //
+ TextInfo subtitle = 4;
+ //
+ ImageInfo image = 5;
+ //
+ repeated ButtonInfo button = 6;
+ //
+ ButtonInfo bottom_desc = 7;
+ //
+ Report report = 8;
+ //
+ int32 count_down_sec = 9;
+ //
+ TextInfo right_bottom_desc = 10;
+ //
+ repeated BottomDisplay bottom_display = 11;
+ //
+ ExtData ext_data = 12;
+ //
+ LimitActionType limit_action_type = 13;
+ //
+ int32 is_hide_more_btn = 14;
+}
+
+
+// 当前分辨率信息
+message Dimension {
+ // 宽
+ int32 width = 1;
+ // 长
+ int32 height = 2;
+ // 旋转角度
+ int32 rotate = 3;
+}
+
+// 杜比伴音流信息
+message DolbyItem {
+ // 杜比类型
+ enum Type {
+ NONE = 0; // NONE
+ COMMON = 1; // 普通杜比音效
+ ATMOS = 2; // 全景杜比音效
+ }
+ // 杜比类型
+ Type type = 1;
+ // 音频流
+ repeated DashItem audio = 2;
+}
+
+// DRM类型
+enum DrmTechType {
+ //
+ UNKNOWN_DRM = 0;
+ //
+ FAIR_PLAY = 1;
+ //
+ WIDE_VINE = 2;
+ // 哔哩哔哩自研DRM
+ BILI_DRM = 3;
+}
+
+//
+enum Effects {
+ //
+ EFFECTS_UNKNOWN = 0;
+ //
+ GAUSSIAN_BLUR = 1;
+ //
+ HALF_ALPHA = 2;
+}
+
+//
+message EpInlineVideo {
+ //
+ int64 material_no = 1;
+ //
+ int64 aid = 2;
+ //
+ int64 cid = 3;
+}
+
+//
+message EpInlineVideoInfo {
+ //
+ repeated EpInlineVideo ep_inline_video = 1;
+}
+
+// 事件
+message Event {
+ // 震动
+ Shake shake = 1;
+}
+
+//
+message ExtData {
+ //
+ ExtDataType type = 1;
+ //
+ oneof data {
+ PlayListInfo play_list_info = 2;
+ }
+}
+
+enum ExtDataType {
+ //
+ EXT_DATA_TYPE_UNKNOWN = 0;
+ //
+ PLAY_LIST = 1;
+}
+
+// ? 错误码补充信息
+message ExtraContent {
+ //
+ string disable_reason = 1;
+ //
+ int64 disable_code = 2;
+}
+
+//
+message Fragment {
+ //
+ repeated FragmentInfo infos = 1;
+}
+
+//
+message FragmentInfo {
+ //
+ int32 index = 1;
+ //
+ FragmentPosition fragment_position = 2;
+ //
+ FragmentType fragment_type = 3;
+ //
+ int64 aid = 4;
+ //
+ int64 cid = 5;
+ //
+ int64 start_time = 6;
+ //
+ google.protobuf.Any report = 7;
+}
+
+//
+enum FragmentPosition {
+ INVALID = 0;
+ PRE = 1;
+ MIDDLE = 2;
+ POST = 3;
+}
+
+//
+enum FragmentType {
+ UNKNOWN = 0;
+ AD_FRAGMENT = 1;
+ OGV_FRAGMENT = 2;
+}
+
+//
+message FragmentVideo {
+ //
+ repeated FragmentVideoInfo videos = 1;
+}
+
+//
+message FragmentVideoInfo {
+ //
+ FragmentInfo fragment_info = 1;
+ //
+ VodInfo vod_info = 2;
+ //
+ PlayArcConf play_arc_conf = 3;
+ //
+ Dimension dimension = 4;
+ //
+ int64 timelength = 5;
+ //
+ BizType video_type = 6;
+ //
+ bool playable_status = 7;
+}
+
+//
+message GradientColor {
+ //
+ string start_color = 1;
+ //
+ string end_color = 2;
+}
+
+//
+enum GuideStyle {
+ //
+ STYLE_UNKNOWN = 0;
+ //
+ HORIZONTAL_IMAGE = 1;
+ //
+ VERTICAL_TEXT = 2;
+ //
+ SIMPLE_TEXT = 3;
+ //
+ CHARGING_TEXT = 4;
+}
+
+// 播放历史
+message History {
+ //
+ HistoryInfo current_video = 1;
+ //
+ HistoryInfo related_video = 2;
+}
+
+//
+message HistoryInfo {
+ //
+ int64 progress = 1;
+ //
+ int64 last_play_cid = 2;
+ //
+ Toast toast = 3;
+ //
+ Toast toast_without_time = 4;
+ //
+ int64 last_play_aid = 5;
+}
+
+//
+message ImageInfo {
+ //
+ string url = 1;
+}
+
+
+//
+message Interaction {
+ //
+ Node history_node = 1;
+ //
+ int64 graph_version = 2;
+ //
+ string msg = 3;
+ //
+ int64 mark = 4;
+}
+
+//
+enum LimitActionType {
+ //
+ LAT_UNKNOWN = 0;
+ //
+ SHOW_LIMIT_DIALOG = 1;
+ //
+ SKIP_CURRENT_EP = 2;
+}
+
+// HIRES伴音流信息
+message LossLessItem {
+ // 是否为hires
+ bool is_lossless_audio = 1;
+ // 音频流信息
+ DashItem audio = 2;
+ // 是否需要大会员
+ bool need_vip = 3;
+}
+
+//
+message Node {
+ //
+ int64 node_id = 1;
+ //
+ string title = 2;
+ //
+ int64 cid = 3;
+}
+
+//
+message PlayArc {
+ //
+ BizType video_type = 1;
+ //
+ uint64 aid = 2;
+ //
+ uint64 cid = 3;
+ //
+ DrmTechType drm_tech_type = 4;
+ //
+ ArcType arc_type = 5;
+ //
+ Interaction interaction = 6;
+ //
+ Dimension dimension = 7;
+ //
+ int64 duration = 8;
+ //
+ bool is_preview = 9;
+ //
+ int64 watch_time_length = 10;
+ //
+ int64 duration_ms = 11;
+}
+
+// 播放页信息-响应: PlayArcConf
+message PlayArcConf {
+ map arc_confs = 1;
+}
+
+//
+message PlayDeviceConf {
+ //
+ map device_confs = 1;
+}
+
+// 错误码
+enum PlayErr {
+ NoErr = 0; //
+ WithMultiDeviceLoginErr = 1; // 管控类型的错误码
+}
+
+//
+message PlayList {
+ //
+ int64 season_id = 1;
+ //
+ string title = 2;
+ //
+ string cover = 3;
+ //
+ string link = 4;
+ //
+ BadgeInfo badge_info = 5;
+}
+
+//
+message PlayListInfo {
+ //
+ repeated PlayList play_list = 2;
+}
+
+// 视频下方广告 Banner
+message PromptBar {
+ //
+ TextInfo title = 1;
+ //
+ TextInfo subtitle = 2;
+ //
+ string sub_title_icon = 3;
+ //
+ string bg_image = 4;
+ //
+ GradientColor bg_gradient_color = 5;
+ //
+ repeated ButtonInfo button = 6;
+ //
+ Report report = 7;
+ //
+ string full_screen_ip_icon = 8;
+ //
+ GradientColor full_screen_bg_gradient_color = 9;
+ //
+ PromptBarType prompt_bar_type = 10;
+ //
+ PromptBarStyle prompt_bar_style = 11;
+ //
+ repeated BenefitInfo benefit_infos = 12;
+ //
+ int64 end_time = 13;
+}
+
+//
+enum PromptBarStyle {
+ PROMPT_BAR_STYLE_UNKNOWN = 0;
+ TEXT = 1;
+ CURING_BENEFITS = 2;
+ CARD_OPENING_GIFT = 3;
+ COUNTDOWN = 4;
+}
+
+//
+enum PromptBarType {
+ PROMPT_BAR_TYPE_UNKNOWN = 0;
+ OPEN_PROMPT_BAR = 1;
+}
+
+// 播放页信息-响应: 高画质试看信息
+message QnTrialInfo {
+ // 能否试看高画质
+ bool trial_able = 1;
+ //
+ int32 remaining_times = 2;
+ //
+ int32 start = 3;
+ //
+ int32 time_length = 4;
+ //
+ Toast start_toast = 5;
+ //
+ Toast end_toast = 6;
+ //
+ Button quality_open_tip_btn = 8;
+}
+
+//
+message Report {
+ //
+ string show_event_id = 1;
+ //
+ string click_event_id = 2;
+ //
+ string extends = 3;
+}
+
+// Dash Response, 未使用
+message ResponseDash {
+ repeated DashItem video = 1;
+ repeated DashItem audio = 2;
+}
+
+// 分段流条目
+message ResponseUrl {
+ // 分段序号
+ uint32 order = 1;
+ // 分段时长
+ uint64 length = 2;
+ // 分段大小
+ uint64 size = 3;
+ // 主线流
+ string url = 4;
+ // 备用流
+ repeated string backup_url = 5;
+ // md5
+ string md5 = 6;
+}
+
+// 方案
+message Scheme {
+ enum ActionType {
+ UNKNOWN = 0;
+ SHOW_TOAST = 1;
+ }
+ //
+ ActionType action_type = 1;
+ //
+ string toast = 2;
+}
+
+// 视频流信息: 分段流
+message SegmentVideo {
+ repeated ResponseUrl segment = 1;
+}
+
+// 震动
+message Shake {
+ //
+ string file = 1;
+}
+
+//
+enum ShowStyleType {
+ //
+ SHOW_STYLE_TYPE_UNKNOWN = 0;
+ //
+ SHOW_STYLE_TYPE_ORDINARY = 1;
+ //
+ SHOW_STYLE_TYPE_RESIDENT = 2;
+}
+
+// 视频流信息
+message Stream {
+ // 元数据
+ StreamInfo stream_info = 1;
+ // 流数据
+ oneof content {
+ // dash流
+ DashVideo dash_video = 2;
+ // 分段流
+ SegmentVideo segment_video = 3;
+ }
+}
+
+// 视频流信息: 元数据
+message StreamInfo {
+ // 清晰度
+ uint32 quality = 1;
+ // 格式
+ string format = 2;
+ // 格式描述
+ string description = 3;
+ // 错误码
+ uint32 err_code = 4;
+ // 不满足条件信息
+ StreamLimit limit = 5;
+ // 是否需要vip
+ bool need_vip = 6;
+ // 是否需要登录
+ bool need_login = 7;
+ // 是否完整
+ bool intact = 8;
+ // 是否非全二压
+ bool no_rexcode = 9;
+ // 清晰度属性位
+ int64 attribute = 10;
+ // 新版格式描述
+ string new_description = 11;
+ // 格式文字
+ string display_desc = 12;
+ // 新版格式描述备注
+ string superscript = 13;
+ //
+ bool vip_free = 14;
+ //
+ string subtitle = 15;
+ // 方案
+ Scheme scheme = 16;
+ // 支持drm
+ bool support_drm = 17;
+}
+
+// 视频流信息: 流媒体元数据: 清晰度不满足条件信息
+message StreamLimit {
+ // 标题
+ string title = 1;
+ // 跳转地址
+ string uri = 2;
+ // 提示信息
+ string msg = 3;
+}
+
+//
+message TaskParam {
+ //
+ string task_type = 1;
+ //
+ int64 activity_id = 2;
+ //
+ int64 tips_id = 3;
+}
+
+//
+message TextInfo {
+ //
+ string text = 1;
+ //
+ string text_color = 2;
+ //
+ string text_color_night = 3;
+}
+
+
+// Toast信息
+message Toast {
+ // toast文案
+ string text = 1;
+ // toast按钮
+ Button button = 2;
+}
+
+enum ToastType {
+ //
+ TOAST_TYPE_UNKNOWN = 0;
+ //
+ VIP_CONTENT_REMIND = 1;
+ //
+ VIP_DEFINITION_REMIND = 2;
+ //
+ VIP_DEFINITION_GUIDE = 3;
+ //
+ OGV_VIDEO_START_TOAST = 4;
+ //
+ CHARGING_TOAST = 5;
+ //
+ VIP_SKIP_FRAGMENT_TOAST = 6;
+}
+
+//
+enum UnsupportScene {
+ //
+ UNKNOWN_SCENE = 0;
+ //
+ PREMIERE = 1;
+}
+
+// 播放页信息-请求: 音视频VOD
+message VideoVod {
+ // 视频aid
+ int32 aid = 1;
+ // 视频cid
+ int32 cid = 2;
+ // 清晰度
+ uint64 qn = 3;
+ // 视频流版本
+ int32 fnver = 4;
+ // 视频流格式
+ int32 fnval = 5;
+ // 下载模式
+ // 0:播放 1:flv下载 2:dash下载
+ uint32 download = 6;
+ // 流url强制是用域名
+ // 0:允许使用ip 1:使用http 2:使用https
+ int32 force_host = 7;
+ // 是否4K
+ bool fourk = 8;
+ // 视频编码
+ CodeType prefer_codec_type = 9;
+ // 响度均衡
+ uint64 voice_balance = 10;
+}
+
+//
+message ViewInfo {
+ //
+ map dialog_map = 1;
+ //
+ PromptBar prompt_bar = 2;
+ //
+ repeated ComprehensiveToast toasts = 3;
+}
+
+// 播放页信息-响应: VOD音视频信息
+message VodInfo {
+ // 视频清晰度
+ uint32 quality = 1;
+ // 视频格式
+ string format = 2;
+ // 视频时长
+ uint64 timelength = 3;
+ // 视频编码id
+ uint32 video_codecid = 4;
+ // 视频流
+ repeated Stream stream_list = 5;
+ // 伴音流
+ repeated DashItem dash_audio = 6;
+ // 杜比伴音流
+ DolbyItem dolby = 7;
+ // 响度均衡操作信息
+ VolumeInfo volume = 8;
+ // HIRES伴音流信息
+ LossLessItem loss_less_item = 9;
+ // 是否支持投屏
+ bool support_project = 10;
+}
+
+// 响度均衡操作信息
+message VolumeInfo {
+ // Measured integrated loudness 实际综合响度
+ double measured_i = 1;
+ // Measured loudness range 实际响度范围
+ double measured_lra = 2;
+ // Measured true peak 实际响度真峰值
+ double measured_tp = 3;
+ // Measured threshold 实际响度阈值
+ double measured_threshold = 4;
+ // Target offset gain(Gain is applied before the true-peak limiter) 目标增益Offset(增益在真实峰值限制器之前应用)
+ double target_offset = 5;
+ // Target integrated loudness 目标综合响度
+ double target_i = 6;
+ // Target true peak 目标响度真峰值
+ double target_tp = 7;
+}
diff --git a/grpc_api/bilibili/polymer/app/search/v1/search.proto b/grpc_api/bilibili/polymer/app/search/v1/search.proto
new file mode 100644
index 0000000..7741584
--- /dev/null
+++ b/grpc_api/bilibili/polymer/app/search/v1/search.proto
@@ -0,0 +1,2330 @@
+syntax = "proto3";
+
+package bilibili.polymer.app.search.v1;
+
+import "bilibili/app/archive/middleware/v1/preload.proto";
+import "bilibili/pagination/pagination.proto";
+
+//
+service Search {
+ // 搜索所有类型结果
+ rpc SearchAll(SearchAllRequest) returns (SearchAllResponse);
+ // 搜索指定类型结果
+ rpc SearchByType(SearchByTypeRequest) returns (SearchByTypeResponse);
+ //
+ rpc SearchComic(SearchComicRequest) returns (SearchComicResponse);
+}
+
+//
+message Args {
+ //
+ int32 online = 1;
+ //
+ string rname = 2;
+ //
+ int64 room_id = 3;
+ //
+ string tname = 4;
+ //
+ int64 up_id = 5;
+ //
+ string up_name = 6;
+ //
+ int64 rid = 7;
+ //
+ int64 tid = 8;
+ //
+ int64 aid = 9;
+}
+
+//
+message Avatar {
+ //
+ string cover = 1;
+ //
+ string event = 2;
+ //
+ string event_v2 = 3;
+ //
+ string text = 4;
+ //
+ int64 up_id = 5;
+ //
+ string uri = 6;
+ //
+ int32 face_nft_new = 7;
+ //
+ NftFaceIcon nft_face_icon = 8;
+}
+
+//
+message AvItem {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ string uri = 3;
+ //
+ string ctime_label = 4;
+ //
+ string duration = 5;
+ //
+ int32 play = 6;
+ //
+ int64 danmaku = 7;
+ //
+ int32 ctime = 8;
+ //
+ string goto = 9;
+ //
+ string param = 10;
+ //
+ int32 position = 11;
+ //
+ string ctime_label_v2 = 12;
+}
+
+//
+message Background {
+ //
+ int32 show = 1;
+ //
+ string bg_pic_url = 2;
+ //
+ string fg_pic_url = 3;
+}
+
+//
+message Badge {
+ //
+ string text = 1;
+ //
+ string bg_cover = 2;
+}
+
+//
+message Badge2 {
+ //
+ string bg_cover = 1;
+ //
+ string text = 2;
+}
+
+//
+message BottomButton {
+ //
+ string desc = 1;
+ //
+ string link = 2;
+}
+
+//
+message BrandADAccount {
+ //
+ string param = 1;
+ //
+ string goto = 2;
+ //
+ int64 mid = 3;
+ //
+ string name = 4;
+ //
+ string face = 5;
+ //
+ string sign = 6;
+ //
+ Relation relation = 7;
+ //
+ int64 roomid = 8;
+ //
+ int64 live_status = 9;
+ //
+ string live_link = 10;
+ //
+ OfficialVerify official_verify = 11;
+ //
+ VipInfo vip = 12;
+ //
+ string uri = 13;
+ //
+ int32 face_nft_new = 14;
+}
+
+//
+message BrandADArc {
+ //
+ string param = 1;
+ //
+ string goto = 2;
+ //
+ int64 aid = 3;
+ //
+ int64 play = 4;
+ //
+ int64 reply = 5;
+ //
+ string duration = 6;
+ //
+ string author = 7;
+ //
+ string title = 8;
+ //
+ string uri = 9;
+ //
+ string cover = 10;
+}
+
+//
+message Button {
+ //
+ string text = 1;
+ //
+ string param = 2;
+ //
+ string uri = 3;
+ //
+ string event = 4;
+ //
+ int32 selected = 5;
+ //
+ int32 type = 6;
+ //
+ string event_v2 = 7;
+ //
+ Relation relation = 8;
+}
+
+//
+message ButtonMeta {
+ //
+ string icon = 1;
+ //
+ string text = 2;
+ //
+ string button_status = 3;
+ //
+ string toast = 4;
+}
+
+//
+message CardBusinessBadge {
+ //
+ GotoIcon goto_icon = 1;
+ //
+ ReasonStyle badge_style = 2;
+}
+
+//
+enum CategorySort {
+ CATEGORY_SORT_DEFAULT = 0; //
+ CATEGORY_SORT_PUBLISH_TIME = 1; //
+ CATEGORY_SORT_CLICK_COUNT = 2; //
+ CATEGORY_SORT_COMMENT_COUNT = 3; //
+ CATEGORY_SORT_LIKE_COUNT = 4; //
+}
+
+//
+message ChannelLabel {
+ //
+ string text = 1;
+ //
+ string uri = 2;
+}
+
+//
+message ChannelMixedItem {
+ //
+ int64 id = 1;
+ //
+ int32 cover_left_icon1 = 2;
+ //
+ string cover_left_text1 = 3;
+ //
+ string cover = 4;
+ //
+ string goto = 5;
+ //
+ string param = 6;
+ //
+ string uri = 7;
+ //
+ string title = 8;
+ //
+ Badge2 badge = 9;
+}
+
+//
+message CheckMore {
+ //
+ string content = 1;
+ //
+ string uri = 2;
+}
+
+//
+message CloudGameParams {
+ //
+ int64 source_from = 1;
+ //
+ string scene = 2;
+}
+
+//
+message DetailsRelationItem {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ string cover_left_text = 3;
+ //
+ ReasonStyle cover_badge_style = 4;
+ //
+ string module_pos = 5;
+ //
+ string goto = 6;
+ //
+ string param = 7;
+ //
+ string uri = 8;
+ //
+ int32 position = 9;
+ //
+ string cover_left_text_v2 = 10;
+ //
+ ReasonStyle cover_badge_style_v2 = 11;
+}
+
+//
+message DislikeReason {
+ //
+ int32 id = 1;
+ //
+ string name = 2;
+}
+
+//
+message DisplayOption {
+ //
+ int32 video_title_row = 1;
+ //
+ int32 search_page_visual_opti = 2;
+}
+
+//
+message DyTopic {
+ //
+ string title = 1;
+ //
+ string uri = 2;
+}
+
+//
+message EasterEgg {
+ //
+ int32 id = 1;
+ //
+ int32 show_count = 2;
+ //
+ int32 type = 3;
+ //
+ string url = 4;
+ //
+ int32 close_count = 5;
+ //
+ int32 mask_transparency = 6;
+ //
+ string mask_color = 7;
+ //
+ int32 pic_type = 8;
+ //
+ int32 show_time = 9;
+ //
+ string source_url = 10;
+ //
+ string source_md5 = 11;
+ //
+ int32 source_size = 12;
+}
+
+//
+message Episode {
+ //
+ string uri = 1;
+ //
+ string param = 2;
+ //
+ string index = 3;
+ //
+ repeated ReasonStyle badges = 4;
+ //
+ int32 position = 5;
+}
+
+//
+message EpisodeNew {
+ //
+ string title = 1;
+ //
+ string uri = 2;
+ //
+ string param = 3;
+ //
+ int32 is_new = 4;
+ //
+ repeated ReasonStyle badges = 5;
+ //
+ int32 type = 6;
+ //
+ int32 position = 7;
+ //
+ string cover = 8;
+ //
+ string label = 9;
+}
+
+//
+message ExtraLink {
+ //
+ string text = 1;
+ //
+ string uri = 2;
+}
+
+//
+message FollowButton {
+ //
+ string icon = 1;
+ //
+ map texts = 2;
+ //
+ string status_report = 3;
+}
+
+//
+message FullTextResult {
+ //
+ int32 type = 1;
+ //
+ string show_text = 2;
+ //
+ int64 jump_start_progress = 3;
+ //
+ string jump_uri = 4;
+}
+
+//
+message GotoIcon {
+ //
+ string icon_url = 1;
+ //
+ string icon_night_url = 2;
+ //
+ int32 icon_width = 3;
+ //
+ int32 icon_height = 4;
+}
+
+//
+message InlineProgressBar {
+ //
+ string icon_drag = 1;
+ //
+ string icon_drag_hash = 2;
+ //
+ string icon_stop = 3;
+ //
+ string icon_stop_hash = 4;
+}
+
+//
+message InlineThreePointPanel {
+ //
+ int32 panel_type = 1;
+ //
+ string share_id = 2;
+ //
+ string share_origin = 3;
+ //
+ repeated ShareButtonItem functional_buttons = 4;
+}
+
+message Item {
+ //
+ string uri = 1;
+ //
+ string param = 2;
+ //
+ string goto = 3;
+ //
+ string linktype = 4;
+ //
+ int32 position = 5;
+ //
+ string trackid = 6;
+ //
+ oneof card_item {
+ //
+ SearchSpecialCard special = 7;
+ //
+ SearchArticleCard article = 8;
+ //
+ SearchBannerCard banner = 9;
+ //
+ SearchLiveCard live = 10;
+ //
+ SearchGameCard game = 11;
+ //
+ SearchPurchaseCard purchase = 12;
+ //
+ SearchRecommendWordCard recommend_word = 13;
+ //
+ SearchDynamicCard dynamic = 14;
+ //
+ SearchNoResultSuggestWordCard suggest_keyword = 15;
+ //
+ SearchSpecialGuideCard special_guide = 16;
+ //
+ SearchComicCard comic = 17;
+ //
+ SearchNewChannelCard channel_new = 18;
+ //
+ SearchOgvCard ogv_card = 19;
+ //
+ SearchOgvRelationCard bangumi_relates = 20;
+ //
+ SearchOgvRecommendCard find_more = 21;
+ //
+ SearchSportCard esport = 22;
+ //
+ SearchAuthorNewCard author_new = 23;
+ //
+ SearchTipsCard tips = 24;
+ //
+ SearchAdCard cm = 25;
+ //
+ SearchPediaCard pedia_card = 26;
+ //
+ SearchUgcInlineCard ugc_inline = 27;
+ //
+ SearchLiveInlineCard live_inline = 28;
+ //
+ SearchTopGameCard top_game = 29;
+ //
+ SearchOlympicGameCard sports = 30;
+ //
+ SearchOlympicWikiCard pedia_card_inline = 31;
+ //
+ SearchRecommendTipCard recommend_tips = 32;
+ //
+ SearchCollectionCard collection_card = 33;
+ //
+ SearchOgvChannelCard ogv_channel = 34;
+ //
+ SearchOgvInlineCard ogv_inline = 35;
+ //
+ SearchUpperCard author = 36;
+ //
+ SearchVideoCard av = 37;
+ //
+ SearchBangumiCard bangumi = 38;
+ //
+ SearchSportInlineCard esports_inline = 39;
+ }
+}
+
+//
+message LikeResource {
+ //
+ string url = 1;
+ //
+ string content_hash = 2;
+}
+
+//
+message LiveBadgeResource {
+ //
+ string text = 1;
+ //
+ string animation_url = 2;
+ //
+ string animation_url_hash = 3;
+ //
+ string background_color_light = 4;
+ //
+ string background_color_night = 5;
+ //
+ int64 alpha_light = 6;
+ //
+ int64 alpha_night = 7;
+ //
+ string font_color = 8;
+}
+
+//
+message Mask {
+ //
+ Avatar avatar = 1;
+ //
+ Button button = 2;
+}
+
+//
+message MatchInfoObj {
+ //
+ int64 id = 1;
+ //
+ int32 status = 2;
+ //
+ string match_stage = 3;
+ //
+ MatchTeam team1 = 4;
+ //
+ MatchTeam team2 = 5;
+ //
+ MatchItem match_label = 6;
+ //
+ MatchItem match_time = 7;
+ //
+ MatchItem match_button = 8;
+}
+
+//
+message MatchItem {
+ //
+ int32 state = 1;
+ //
+ string text = 2;
+ //
+ string text_color = 3;
+ //
+ string text_color_night = 4;
+ //
+ string uri = 5;
+ //
+ string live_link = 6;
+ //
+ Texts texts = 7;
+}
+
+//
+message MatchTeam {
+ //
+ int64 id = 1;
+ //
+ string title = 2;
+ //
+ string cover = 3;
+ //
+ int32 score = 4;
+}
+
+//
+message Nav {
+ //
+ string name = 1;
+ //
+ int32 total = 2;
+ //
+ int32 pages = 3;
+ //
+ int32 type = 4;
+}
+
+//
+message Navigation {
+ //
+ int64 id = 1;
+ //
+ repeated Navigation children = 2;
+ //
+ repeated Navigation inline_children = 3;
+ //
+ string title = 4;
+ //
+ string uri = 5;
+ //
+ NavigationButton button = 6;
+}
+
+//
+message NavigationButton {
+ //
+ int64 type = 1;
+ //
+ string text = 2;
+ //
+ string uri = 3;
+}
+
+//
+message NftFaceIcon {
+ //
+ int32 region_type = 1;
+ //
+ string icon = 2;
+ //
+ int32 show_status = 3;
+}
+
+//
+message Notice {
+ //
+ int64 mid = 1;
+ //
+ int64 notice_id = 2;
+ //
+ string content = 3;
+ //
+ string url = 4;
+ //
+ int64 notice_type = 5;
+ //
+ string icon = 6;
+ //
+ string icon_night = 7;
+ //
+ string text_color = 8;
+ //
+ string text_color_night = 9;
+ //
+ string bg_color = 10;
+ //
+ string bg_color_night = 11;
+}
+
+//
+message OfficialVerify {
+ //
+ int32 type = 1;
+ //
+ string desc = 2;
+}
+
+//
+message OgvCardUI {
+ //
+ string background_image = 1;
+ //
+ string gaussian_blur_value = 2;
+ //
+ string module_color = 3;
+}
+
+//
+message OgvClipInfo {
+ //
+ int64 play_start_time = 1;
+ //
+ int64 play_end_time = 2;
+}
+
+//
+message OgvRecommendWord {
+ //
+ string title = 1;
+ //
+ string goto = 2;
+ //
+ string param = 3;
+ //
+ string uri = 4;
+}
+
+//
+message PediaCover {
+ //
+ int64 cover_type = 1;
+ //
+ string cover_sun_url = 2;
+ //
+ string cover_night_url = 3;
+ //
+ int32 cover_width = 4;
+ //
+ int32 cover_height = 5;
+}
+
+//
+message PlayerArgs {
+ //
+ int32 is_live = 1;
+ //
+ int64 aid = 2;
+ //
+ int64 cid = 3;
+ //
+ int32 sub_type = 4;
+ //
+ int64 room_id = 5;
+ //
+ int64 ep_id = 7;
+ //
+ int32 is_preview = 8;
+ //
+ string type = 9;
+ //
+ int32 duration = 10;
+ //
+ int64 season_id = 11;
+ //
+ int32 report_required_play_duration = 12;
+ //
+ int32 report_required_time = 13;
+ //
+ int32 manual_play = 14;
+ //
+ bool hide_play_button = 15;
+ //
+ int32 content_mode = 16;
+ //
+ int32 report_history = 17;
+}
+
+//
+message PlayerWidget {
+ //
+ string title = 1;
+ //
+ string desc = 2;
+}
+
+//
+message RankInfo {
+ //
+ string search_night_icon_url = 1;
+ //
+ string search_day_icon_url = 2;
+ //
+ string search_bkg_night_color = 3;
+ //
+ string search_bkg_day_color = 4;
+ //
+ string search_font_night_color = 5;
+ //
+ string search_font_day_color = 6;
+ //
+ string rank_content = 7;
+ //
+ string rank_link = 8;
+}
+
+//
+message RcmdReason {
+ //
+ string content = 1;
+}
+
+//
+message ReasonStyle {
+ //
+ string text = 1;
+ //
+ string text_color = 2;
+ //
+ string text_color_night = 3;
+ //
+ string bg_color = 4;
+ //
+ string bg_color_night = 5;
+ //
+ string border_color = 6;
+ //
+ string border_color_night = 7;
+ //
+ int32 bg_style = 8;
+}
+
+//
+message RecommendWord {
+ //
+ string param = 1;
+ //
+ string type = 2;
+ //
+ string title = 3;
+ //
+ string from_source = 4;
+}
+
+//
+message Relation {
+ //
+ int32 status = 1;
+}
+
+//
+message RightTopLiveBadge {
+ //
+ int32 live_status = 1;
+ //
+ LiveBadgeResource in_live = 2;
+ //
+ string live_stats_desc = 3;
+}
+
+//
+message SearchAdCard {
+ //
+ string json_str = 1;
+}
+
+//
+message SearchAllRequest {
+ //
+ string keyword = 1;
+ //
+ int32 order = 2;
+ //
+ string tid_list = 3;
+ //
+ string duration_list = 4;
+ //
+ string extra_word = 5;
+ //
+ string from_source = 6;
+ //
+ int32 is_org_query = 7;
+ //
+ int32 local_time = 8;
+ //
+ string ad_extra = 9;
+ //
+ bilibili.pagination.Pagination pagination = 10;
+ //
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 11;
+}
+
+//
+message SearchAllResponse {
+ //
+ string keyword = 1;
+ //
+ string trackid = 2;
+ //
+ repeated Nav nav = 3;
+ //
+ repeated Item item = 4;
+ //
+ EasterEgg easter_egg = 5;
+ //
+ string exp_str = 6;
+ //
+ repeated string extra_word_list = 7;
+ //
+ string org_extra_word = 8;
+ //
+ int64 select_bar_type = 9;
+ //
+ int64 new_search_exp_num = 10;
+ //
+ bilibili.pagination.PaginationReply pagination = 11;
+ //
+ DisplayOption app_display_option = 12;
+ //
+ map annotation = 13;
+}
+
+//
+message SearchArticleCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ int32 play = 3;
+ //
+ int32 like = 4;
+ //
+ int32 reply = 5;
+ //
+ repeated string image_urls = 6;
+ //
+ string author = 7;
+ //
+ int32 template_id = 8;
+ //
+ int64 id = 9;
+ //
+ int64 mid = 10;
+ //
+ string name = 11;
+ //
+ string desc = 12;
+ //
+ int32 view = 13;
+}
+
+//
+message SearchAuthorNewCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ int32 live_face = 3;
+ //
+ string live_uri = 4;
+ //
+ string live_link = 5;
+ //
+ int32 fans = 6;
+ //
+ int32 level = 7;
+ //
+ string sign = 8;
+ //
+ bool is_up = 9;
+ //
+ int32 archives = 10;
+ //
+ int64 mid = 11;
+ //
+ int64 roomid = 12;
+ //
+ Relation relation = 13;
+ //
+ OfficialVerify official_verify = 14;
+ //
+ int32 face_nft_new = 15;
+ //
+ NftFaceIcon nft_face_icon = 16;
+ //
+ int32 is_senior_member = 17;
+ //
+ Background background = 18;
+ //
+ int32 av_style = 19;
+ //
+ Space space = 20;
+ //
+ repeated AvItem av_items = 21;
+ //
+ Notice notice = 22;
+ //
+ SharePlane share_plane = 23;
+ //
+ string inline_type = 24;
+ //
+ SearchInlineData inline_live = 25;
+ //
+ int32 is_inline_live = 26;
+ //
+ repeated ThreePoint three_point = 27;
+ //
+ int32 live_status = 28;
+ //
+ VipInfo vip = 29;
+}
+
+//
+message SearchBangumiCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ int32 media_type = 3;
+ //
+ int32 play_state = 4;
+ //
+ string area = 5;
+ //
+ string style = 6;
+ //
+ string styles = 7;
+ //
+ string cv = 8;
+ //
+ double rating = 9;
+ //
+ int32 vote = 10;
+ //
+ string target = 11;
+ //
+ string staff = 12;
+ //
+ string prompt = 13;
+ //
+ int64 ptime = 14;
+ //
+ string season_type_name = 15;
+ //
+ repeated Episode episodes = 16;
+ //
+ int32 is_selection = 17;
+ //
+ int32 is_atten = 18;
+ //
+ string label = 19;
+ //
+ int64 season_id = 20;
+ //
+ string out_name = 21;
+ //
+ string out_icon = 22;
+ //
+ string out_url = 23;
+ //
+ repeated ReasonStyle badges = 24;
+ //
+ int32 is_out = 25;
+ //
+ repeated EpisodeNew episodes_new = 26;
+ //
+ WatchButton watch_button = 27;
+ //
+ string selection_style = 28;
+ //
+ CheckMore check_more = 29;
+ //
+ FollowButton follow_button = 30;
+ //
+ ReasonStyle style_label = 31;
+ //
+ repeated ReasonStyle badges_v2 = 32;
+ //
+ string styles_v2 = 33;
+}
+
+//
+message SearchBannerCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+}
+
+//
+message SearchByTypeRequest {
+ enum CategorySort {
+ CATEGORY_SORT_DEFAULT = 0;
+ CATEGORY_SORT_PUBLISH_TIME = 1;
+ CATEGORY_SORT_CLICK_COUNT = 2;
+ CATEGORY_SORT_COMMENT_COUNT = 3;
+ CATEGORY_SORT_LIKE_COUNT = 4;
+ }
+ enum UserType {
+ ALL = 0;
+ UP = 1;
+ NORMAL_USER = 2;
+ AUTHENTICATED_USER = 3;
+ }
+ enum UserSort {
+ USER_SORT_DEFAULT = 0;
+ USER_SORT_FANS_DESCEND = 1;
+ USER_SORT_FANS_ASCEND = 2;
+ USER_SORT_LEVEL_DESCEND = 3;
+ USER_SORT_LEVEL_ASCEND = 4;
+ }
+ // 搜索目标类型, 番剧为7
+ int32 type = 1;
+ // 关键词
+ string keyword = 2;
+ //
+ CategorySort category_sort = 3;
+ //
+ int64 category_id = 4;
+ //
+ UserType user_type = 5;
+ //
+ UserSort user_sort = 6;
+ //
+ bilibili.pagination.Pagination pagination = 7;
+ //
+ bilibili.app.archive.middleware.v1.PlayerArgs player_args = 8;
+}
+
+//
+message SearchByTypeResponse {
+ // 追踪id
+ string trackid = 1;
+ // 当前页码
+ int32 pages = 2;
+ //
+ string exp_str = 3;
+ // 搜索关键词
+ string keyword = 4;
+ // 是否为推荐结果
+ int32 result_is_recommend = 5;
+ // 搜索结果条目
+ repeated Item items = 6;
+ // 分页信息
+ bilibili.pagination.PaginationReply pagination = 7;
+ //
+ map annotation = 8;
+}
+
+//
+message SearchCollectionCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ string author = 3;
+ //
+ repeated AvItem av_items = 4;
+ //
+ BottomButton bottom_button = 5;
+ //
+ string collection_icon = 6;
+ //
+ string show_card_desc1 = 7;
+ //
+ string show_card_desc2 = 8;
+}
+
+//
+message SearchComicCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ string name = 3;
+ //
+ string style = 4;
+ //
+ string comic_url = 5;
+ //
+ string badge = 6;
+}
+
+//
+message SearchComicInfo {
+ //
+ string uri = 1;
+ //
+ string param = 2;
+ //
+ SearchComicCard comic = 3;
+}
+
+//
+message SearchComicRequest {
+ //
+ string id_list = 1;
+}
+
+//
+message SearchComicResponse {
+ //
+ repeated SearchComicInfo items = 1;
+}
+
+//
+message SearchDynamicCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ int32 cover_count = 3;
+ //
+ repeated string covers = 4;
+ //
+ Upper upper = 5;
+ //
+ Stat stat = 6;
+ //
+ repeated DyTopic dy_topic = 7;
+}
+
+//
+message SearchGameCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ string reserve = 3;
+ //
+ float rating = 4;
+ //
+ string tags = 5;
+ //
+ string notice_name = 6;
+ //
+ string notice_content = 7;
+ //
+ string gift_content = 8;
+ //
+ string gift_url = 9;
+ //
+ int32 reserve_status = 10;
+ //
+ RankInfo rank_info = 11;
+ //
+ string special_bg_color = 12;
+ //
+ CloudGameParams cloud_game_params = 13;
+ //
+ bool show_cloud_game_entry = 14;
+}
+
+//
+message SearchInlineData {
+ //
+ string uri = 1;
+ //
+ string title = 2;
+ //
+ PlayerArgs player_args = 3;
+ //
+ int32 can_play = 4;
+ //
+ Args args = 5;
+ //
+ string card_goto = 6;
+ //
+ string card_type = 7;
+ //
+ string cover = 8;
+ //
+ int32 cover_left_icon1 = 9;
+ //
+ int32 cover_left_icon2 = 10;
+ //
+ string cover_left_text1 = 11;
+ //
+ string cover_left_text2 = 12;
+ //
+ UpArgs up_args = 13;
+ //
+ string extra_uri = 14;
+ //
+ bool is_fav = 15;
+ //
+ bool is_coin = 16;
+ //
+ string goto = 17;
+ //
+ Share share = 18;
+ //
+ ThreePoint2 three_point = 19;
+ //
+ repeated ThreePointV2 three_point_v2 = 20;
+ //
+ SharePlane share_plane = 21;
+ //
+ InlineThreePointPanel three_point_meta = 22;
+ //
+ Avatar avatar = 23;
+ //
+ string cover_right_text = 24;
+ //
+ string desc = 25;
+ //
+ InlineProgressBar inline_progress_bar = 26;
+ //
+ SearchLikeButtonItem like_button = 27;
+ //
+ int32 official_icon = 28;
+ //
+ int32 official_icon_v2 = 29;
+ //
+ string param = 30;
+ //
+ TrafficConfig traffic_config = 31;
+ //
+ bool is_atten = 32;
+ //
+ GotoIcon goto_icon = 33;
+ //
+ bool disable_danmaku = 34;
+ //
+ bool hide_danmaku_switch = 35;
+ //
+ ReasonStyle badge_style = 36;
+ //
+ PlayerWidget player_widget = 37;
+ //
+ ReasonStyle cover_badge_style = 38;
+ //
+ RightTopLiveBadge right_top_live_badge = 39;
+}
+
+//
+message SearchLikeButtonItem {
+ //
+ int64 aid = 1;
+ //
+ int64 count = 2;
+ //
+ int32 selected = 3;
+ //
+ bool show_count = 4;
+ //
+ LikeResource like_resource = 5;
+ //
+ LikeResource like_night_resource = 6;
+ //
+ LikeResource dislike_resource = 7;
+ //
+ LikeResource dislike_night_resource = 8;
+}
+
+//
+message SearchLiveCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ RcmdReason rcmd_reason = 3;
+ //
+ string name = 4;
+ //
+ int32 online = 5;
+ //
+ string badge = 6;
+ //
+ string live_link = 7;
+ //
+ string card_left_text = 8;
+ //
+ int32 card_left_icon = 9;
+ //
+ string show_card_desc2 = 10;
+ //
+ RightTopLiveBadge right_top_live_badge = 11;
+}
+
+//
+message SearchLiveInlineCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ int64 mid = 3;
+ //
+ ReasonStyle rcmd_reason_style = 4;
+ //
+ int64 roomid = 5;
+ //
+ string live_link = 6;
+ //
+ SearchInlineData live_room_inline = 7;
+ //
+ string inline_type = 8;
+}
+
+//
+message SearchNewChannelCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ int64 id = 3;
+ //
+ string type_icon = 4;
+ //
+ ChannelLabel channel_label1 = 5;
+ //
+ ChannelLabel channel_label2 = 6;
+ //
+ ChannelLabel channel_button = 7;
+ //
+ string design_type = 8;
+ //
+ repeated ChannelMixedItem items = 9;
+}
+
+//
+message SearchNoResultSuggestWordCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ int32 sug_key_word_type = 3;
+}
+
+//
+message SearchOgvCard {
+ //
+ string title = 1;
+ //
+ string sub_title1 = 2;
+ //
+ string sub_title2 = 3;
+ //
+ string cover = 4;
+ //
+ string bg_cover = 5;
+ //
+ string special_bg_color = 6;
+ //
+ string cover_uri = 7;
+}
+
+//
+message SearchOgvChannelCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ int64 media_id = 3;
+ //
+ string styles = 4;
+ //
+ string area = 5;
+ //
+ string staff = 6;
+ //
+ string badge = 7;
+ //
+ WatchButton watch_button = 8;
+ //
+ double rating = 9;
+ //
+ string desc = 10;
+ //
+ repeated ReasonStyle badges_v2 = 11;
+ //
+ string styles_v2 = 12;
+}
+
+//
+message SearchOgvInlineCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ string author = 3;
+ //
+ int32 danmaku = 4;
+ //
+ string desc = 5;
+ //
+ string face = 6;
+ //
+ string inline_type = 7;
+ //
+ int64 mid = 8;
+ //
+ int64 play = 9;
+ //
+ SearchInlineData ogv_inline = 10;
+ //
+ OgvClipInfo ogv_clip_info = 11;
+ //
+ WatchButton watch_button = 12;
+ //
+ string score = 13;
+ //
+ int32 ogv_inline_exp = 14;
+ //
+ repeated ReasonStyle badges_v2 = 15;
+}
+
+//
+message SearchOgvRecommendCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ repeated OgvRecommendWord items = 3;
+ //
+ string special_bg_color = 4;
+}
+
+//
+message SearchOgvRelationCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ string special_bg_color = 3;
+ //
+ string more_text = 4;
+ //
+ string more_url = 5;
+ //
+ repeated DetailsRelationItem items = 6;
+ //
+ int32 is_new_style = 7;
+ //
+ OgvCardUI ogv_card_ui = 8;
+}
+
+//
+message SearchOlympicGameCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ SportsMatchItem sports_match_item = 3;
+ //
+ MatchItem match_top = 4;
+ //
+ string bg_cover = 5;
+ //
+ repeated ExtraLink extra_link = 6;
+ //
+ string inline_type = 7;
+ //
+ SearchInlineData ugc_inline = 8;
+ //
+ SearchInlineData live_room_inline = 9;
+ //
+ MatchItem match_bottom = 10;
+}
+
+//
+message SearchOlympicWikiCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ CardBusinessBadge card_business_badge = 3;
+ //
+ NavigationButton read_more = 4;
+ //
+ string inline_type = 5;
+ //
+ SearchInlineData ugc_inline = 6;
+ //
+ SearchInlineData live_room_inline = 7;
+ //
+ PediaCover pedia_cover = 8;
+ //
+ repeated Navigation navigation = 9;
+}
+
+//
+message SearchPediaCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ repeated Navigation navigation = 3;
+ //
+ NavigationButton read_more = 4;
+ //
+ int32 navigation_module_count = 5;
+ //
+ PediaCover pedia_cover = 6;
+ //
+ CardBusinessBadge card_business_badge = 7;
+}
+
+//
+message SearchPurchaseCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ string badge = 3;
+ //
+ string venue = 4;
+ //
+ int32 price = 5;
+ //
+ string price_complete = 6;
+ //
+ int32 price_type = 7;
+ //
+ int32 required_number = 8;
+ //
+ string city = 9;
+ //
+ string show_time = 10;
+ //
+ int64 id = 11;
+ //
+ string shop_name = 12;
+}
+
+//
+message SearchRecommendTipCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+}
+
+//
+message SearchRecommendWordCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ repeated RecommendWord list = 3;
+}
+
+//
+message SearchSpecialCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ repeated ReasonStyle new_rec_tags = 3;
+ //
+ CardBusinessBadge card_business_badge = 4;
+ //
+ string badge = 5;
+ //
+ string desc = 6;
+ //
+ repeated ReasonStyle new_rec_tags_v2 = 7;
+}
+
+//
+message SearchSpecialGuideCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ string phone = 3;
+ //
+ string desc = 4;
+}
+
+//
+message SearchSportCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ string bg_cover = 3;
+ //
+ MatchItem match_top = 4;
+ //
+ MatchItem match_bottom = 5;
+ //
+ repeated ExtraLink extra_link = 6;
+ //
+ repeated MatchInfoObj items = 7;
+ //
+ int64 id = 8;
+}
+
+//
+message SearchSportInlineCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ string bg_cover = 3;
+ //
+ MatchItem match_top = 4;
+ //
+ MatchItem match_bottom = 5;
+ //
+ repeated ExtraLink extra_link = 6;
+ //
+ repeated MatchInfoObj items = 7;
+ //
+ int64 id = 8;
+ //
+ SearchInlineData esports_inline = 9;
+ //
+ string inline_type = 10;
+}
+
+//
+message SearchTipsCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ string sub_title = 4;
+ //
+ string cover_night = 134;
+}
+
+//
+message SearchTopGameCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ int32 array = 3;
+ //
+ string background_image = 4;
+ //
+ int32 button_type = 5;
+ //
+ string game_icon = 6;
+ //
+ int64 game_base_id = 7;
+ //
+ int32 game_status = 8;
+ //
+ string inline_type = 9;
+ //
+ TopGameUI top_game_ui = 10;
+ //
+ string notice_content = 11;
+ //
+ string notice_name = 12;
+ //
+ float rating = 13;
+ //
+ string score = 14;
+ //
+ repeated TabInfo tab_info = 15;
+ //
+ string tags = 16;
+ //
+ SearchInlineData ugc_inline = 17;
+ //
+ string video_cover_image = 18;
+ //
+ SearchInlineData inline_live = 19;
+}
+
+//
+message SearchUgcInlineCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ string author = 3;
+ //
+ int32 danmaku = 4;
+ //
+ string desc = 5;
+ //
+ string inline_type = 6;
+ //
+ int64 mid = 7;
+ //
+ int64 play = 8;
+ //
+ SearchInlineData ugc_inline = 9;
+ //
+ FullTextResult full_text = 10;
+}
+
+//
+message SearchUpperCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ string sign = 3;
+ //
+ int32 fans = 4;
+ //
+ int32 archives = 5;
+ //
+ int32 live_status = 6;
+ //
+ int32 roomid = 7;
+ //
+ OfficialVerify official_verify = 8;
+ //
+ int32 face_nft_new = 9;
+ //
+ NftFaceIcon nft_face_icon = 10;
+ //
+ repeated AvItem av_items = 11;
+ //
+ bool is_up = 12;
+ //
+ int32 attentions = 13;
+ //
+ int32 level = 14;
+ //
+ int32 is_senior_member = 15;
+ //
+ VipInfo vip = 16;
+ //
+ Relation relation = 17;
+ //
+ string live_link = 18;
+ //
+ Notice notice = 19;
+}
+
+//
+message SearchVideoCard {
+ //
+ string title = 1;
+ //
+ string cover = 2;
+ //
+ RcmdReason rcmd_reason = 3;
+ //
+ repeated ReasonStyle new_rec_tags = 4;
+ //
+ repeated ThreePoint three_point = 5;
+ //
+ Share share = 6;
+ //
+ CardBusinessBadge card_business_badge = 7;
+ //
+ int32 play = 8;
+ //
+ int32 danmaku = 9;
+ //
+ string author = 10;
+ //
+ string desc = 11;
+ //
+ string duration = 12;
+ //
+ repeated ReasonStyle badges = 13;
+ //
+ int64 mid = 14;
+ //
+ string show_card_desc1 = 15;
+ //
+ string show_card_desc2 = 16;
+ //
+ FullTextResult full_text = 17;
+ //
+ repeated ReasonStyle new_rec_tags_v2 = 18;
+ //
+ repeated ReasonStyle badges_v2 = 19;
+}
+
+//
+message Share {
+ //
+ string type = 1;
+ //
+ Video video = 2;
+}
+
+//
+message ShareButtonItem {
+ //
+ int32 type = 1;
+ //
+ repeated ButtonMeta button_metas = 2;
+}
+
+//
+message SharePlane {
+ //
+ string title = 1;
+ //
+ string share_subtitle = 2;
+ //
+ string desc = 3;
+ //
+ string cover = 4;
+ //
+ int64 aid = 5;
+ //
+ string bvid = 6;
+ //
+ ShareTo share_to = 7;
+ //
+ string author = 8;
+ //
+ int64 author_id = 9;
+ //
+ string short_link = 10;
+ //
+ string play_number = 11;
+ //
+ int64 room_id = 12;
+ //
+ int32 ep_id = 13;
+ //
+ string area_name = 14;
+ //
+ string author_face = 15;
+ //
+ int32 season_id = 16;
+ //
+ string share_from = 17;
+ //
+ string season_title = 18;
+ //
+ string from = 19;
+}
+
+//
+message ShareTo {
+ //
+ bool dynamic = 1;
+ //
+ bool im = 2;
+ //
+ bool copy = 3;
+ //
+ bool more = 4;
+ //
+ bool wechat = 5;
+ //
+ bool weibo = 6;
+ //
+ bool wechat_monment = 7;
+ //
+ bool qq = 8;
+ //
+ bool qzone = 9;
+ //
+ bool facebook = 10;
+ //
+ bool line = 11;
+ //
+ bool messenger = 12;
+ //
+ bool whats_app = 13;
+ //
+ bool twitter = 14;
+}
+
+//
+enum Sort {
+ SORT_DEFAULT = 0; //
+ SORT_VIEW_COUNT = 1; //
+ SORT_PUBLISH_TIME = 2; //
+ SORT_DANMAKU_COUNT = 3; //
+}
+
+//
+message Space {
+ //
+ int32 show = 1;
+ //
+ string text_color = 2;
+ //
+ string text_color_night = 3;
+ //
+ string text = 4;
+ //
+ string space_url = 5;
+}
+
+//
+message SportsMatchItem {
+ //
+ int64 match_id = 1;
+ //
+ int64 season_id = 2;
+ //
+ string match_name = 3;
+ //
+ string img = 4;
+ //
+ string begin_time_desc = 5;
+ //
+ string match_status_desc = 6;
+ //
+ string sub_content = 7;
+ //
+ string sub_extra_icon = 8;
+}
+
+//
+message Stat {
+ //
+ int32 play = 1;
+ //
+ int32 like = 2;
+ //
+ int32 reply = 3;
+}
+
+//
+message TabInfo {
+ //
+ string tab_name = 1;
+ //
+ string tab_url = 2;
+ //
+ int32 sort = 3;
+}
+
+//
+message TextButton {
+ //
+ string text = 1;
+ //
+ string uri = 2;
+}
+
+//
+message TextLabel {
+ //
+ string text = 1;
+ //
+ string uri = 2;
+}
+
+//
+message Texts {
+ //
+ string booking_text = 1;
+ //
+ string unbooking_text = 2;
+}
+
+//
+message ThreePoint {
+ //
+ string type = 1;
+ //
+ string icon = 2;
+ //
+ string title = 3;
+}
+
+//
+message ThreePoint2 {
+ //
+ repeated DislikeReason dislike_reasons = 1;
+ //
+ repeated DislikeReason feedbacks = 2;
+ //
+ int32 watch_later = 3;
+}
+
+//
+message ThreePointV2 {
+ //
+ string title = 1;
+ //
+ string subtitle = 2;
+ //
+ repeated DislikeReason reasons = 3;
+ //
+ string type = 4;
+ //
+ int64 id = 5;
+}
+
+//
+message ThreePointV3 {
+ //
+ string title = 1;
+ //
+ string selected_title = 2;
+ //
+ string subtitle = 3;
+ //
+ repeated DislikeReason reasons = 4;
+ //
+ string type = 5;
+ //
+ int64 id = 6;
+ //
+ int32 selected = 7;
+ //
+ string icon = 8;
+ //
+ string selected_icon = 9;
+ //
+ string url = 10;
+ //
+ int32 default_id = 11;
+}
+
+//
+message ThreePointV4 {
+ //
+ SharePlane share_plane = 1;
+ //
+ WatchLater watch_later = 2;
+}
+
+//
+message TopGameUI {
+ //
+ string background_image = 1;
+ //
+ string cover_default_color = 2;
+ //
+ string gaussian_blur_value = 3;
+ //
+ string mask_color_value = 4;
+ //
+ string mask_opacity = 5;
+ //
+ string module_color = 6;
+}
+
+//
+message TrafficConfig {
+ //
+ string title = 1;
+ //
+ repeated TrafficConfigOption options = 2;
+ //
+ int64 default_option_id = 3;
+}
+
+//
+message TrafficConfigOption {
+ //
+ int32 id = 1;
+ //
+ string text = 2;
+}
+
+//
+message UpArgs {
+ //
+ int64 up_id = 1;
+ //
+ string up_name = 2;
+ //
+ string up_face = 3;
+ //
+ int32 selected = 4;
+}
+
+//
+message Upper {
+ //
+ int64 mid = 1;
+ //
+ string title = 2;
+ //
+ string cover = 3;
+ //
+ string ptime_text = 4;
+}
+
+//
+enum UserSort {
+ USER_SORT_DEFAULT = 0; //
+ USER_SORT_FANS_DESCEND = 1; //
+ USER_SORT_FANS_ASCEND = 2; //
+ USER_SORT_LEVEL_DESCEND = 3; //
+ USER_SORT_LEVEL_ASCEND = 4; //
+}
+
+//
+enum UserType {
+ ALL = 0; //
+ UP = 1; //
+ NORMAL_USER = 2; //
+ AUTHENTICATED_USER = 3; //
+}
+
+//
+message Video {
+ //
+ string bvid = 1;
+ //
+ int64 cid = 2;
+ //
+ string share_subtitle = 3;
+ //
+ bool is_hot_label = 4;
+ //
+ int32 page = 5;
+ //
+ int32 page_count = 6;
+ //
+ string short_link = 7;
+}
+
+//
+message VipInfo {
+ //
+ int32 type = 1;
+ //
+ int32 status = 2;
+ //
+ int64 due_date = 3;
+ //
+ int32 vip_pay_type = 4;
+ //
+ int32 theme_type = 5;
+ //
+ VipLabel label = 6;
+ //
+ int32 avatar_subscript = 7;
+ //
+ string nickname_color = 8;
+ //
+ int64 role = 9;
+ //
+ string avatar_subscript_url = 10;
+ //
+ int32 tv_vip_status = 11;
+ //
+ int32 tv_vip_pay_type = 12;
+}
+
+//
+message VipLabel {
+ //
+ string path = 1;
+ //
+ string text = 2;
+ //
+ string label_theme = 3;
+ //
+ string text_color = 4;
+ //
+ int32 bg_style = 5;
+ //
+ string bg_color = 6;
+ //
+ string border_color = 7;
+ //
+ bool use_img_label = 8;
+ //
+ string img_label_uri_hans = 9;
+ //
+ string img_label_uri_hant = 10;
+ //
+ string img_label_uri_hans_static = 11;
+ //
+ string img_label_uri_hant_static = 12;
+}
+
+//
+message WatchButton {
+ //
+ string title = 1;
+ //
+ string link = 2;
+}
+
+//
+message WatchedShow {
+ //
+ bool switch = 1;
+ //
+ int64 num = 2;
+ //
+ string text_small = 3;
+ //
+ string text_large = 4;
+ //
+ string icon = 5;
+ //
+ string icon_location = 6;
+ //
+ string icon_web = 7;
+}
+
+//
+message WatchLater {
+ //
+ int64 aid = 1;
+ //
+ string bvid = 2;
+}
diff --git a/grpc_api/bilibili/polymer/community/govern/v1/govern.proto b/grpc_api/bilibili/polymer/community/govern/v1/govern.proto
new file mode 100644
index 0000000..1c68ddf
--- /dev/null
+++ b/grpc_api/bilibili/polymer/community/govern/v1/govern.proto
@@ -0,0 +1,96 @@
+syntax = "proto3";
+
+package bilibili.polymer.app.govern.v1;
+
+// 反骚扰
+service AntiHarassmentService {
+ //
+ rpc StoreAntiHarassmentSettings(StoreAntiHarassmentSettingsReq) returns (StoreAntiHarassmentSettingsRsp);
+ //
+ rpc LoadAntiHarassmentSettings(LoadAntiHarassmentSettingsReq) returns (LoadAntiHarassmentSettingsRsp);
+}
+
+//
+message AntiHarassmentInfo {
+ //
+ int32 limit = 1;
+ //
+ int32 follow_time_limit_second = 2;
+ //
+ int64 expire_time = 3;
+}
+
+//
+enum AntiHarassmentLimit {
+ DefaultLimit = 0; //
+ FollowLimit = 1; //
+ ReFollowLimit = 2; //
+ TwoWayFollow = 3; //
+ AllLimit = 4; //
+}
+
+//
+message AntiHarassmentSetting {
+ //
+ int64 mid = 1;
+ //
+ bool auto_limit = 2;
+ //
+ AntiHarassmentInfo im = 3;
+ //
+ AntiHarassmentInfo reply = 4;
+ //
+ AntiHarassmentInfo dm = 5;
+ //
+ AntiHarassmentInfo reply_me = 6;
+ //
+ AntiHarassmentInfo like_me = 7;
+ //
+ AntiHarassmentInfo at_me = 8;
+ //
+ int64 auto_limit_expire_time = 9;
+}
+
+//
+enum BizType {
+ InvalidBizType = 0; //
+ Im = 1; //
+ Dm = 2; //
+ Reply = 3; //
+ ReplyMe = 4; //
+ LikeMe = 5; //
+ AtMe = 6; //
+}
+
+//
+message LoadAntiHarassmentSettingsReq {
+ //
+ int32 biz_type = 1;
+ //
+ int64 recv_mid = 2;
+ //
+ int64 send_mid = 3;
+}
+
+//
+message LoadAntiHarassmentSettingsRsp {
+ //
+ bool anti_harassment_ret = 1;
+ //
+ AntiHarassmentSetting anti_harassment_setting = 2;
+ //
+ int32 show_window = 3;
+}
+
+//
+message StoreAntiHarassmentSettingsReq {
+ //
+ int32 biz_type = 1;
+ //
+ int64 mid = 2;
+ //
+ AntiHarassmentSetting anti_harassment_setting = 3;
+}
+
+//
+message StoreAntiHarassmentSettingsRsp {}
\ No newline at end of file
diff --git a/grpc_api/bilibili/polymer/contract/contract.proto b/grpc_api/bilibili/polymer/contract/contract.proto
deleted file mode 100644
index a987ced..0000000
--- a/grpc_api/bilibili/polymer/contract/contract.proto
+++ /dev/null
@@ -1,42 +0,0 @@
-syntax = "proto3";
-
-package bilibili.polymer.contract;
-
-import "google/protobuf/empty.proto";
-
-//
-service Contract {
- //
- rpc AddContract(AddContractReq) returns (google.protobuf.Empty);
-}
-
-//
-message AddContractReq {
- //
- CommonReq common = 1;
- //
- int64 mid = 2;
- //
- int64 up_mid = 3;
- //
- int64 aid = 4;
-}
-
-//
-message CommonReq {
- //
- string platform = 1;
- //
- int32 build = 2;
- //
- string buvid = 3;
- //
- string mobi_app = 4;
- //
- string device = 5;
- //
- string ip = 6;
- //
- string spmid = 7;
-}
-
diff --git a/grpc_api/bilibili/polymer/contract/v1/contract.proto b/grpc_api/bilibili/polymer/contract/v1/contract.proto
new file mode 100644
index 0000000..0b04e90
--- /dev/null
+++ b/grpc_api/bilibili/polymer/contract/v1/contract.proto
@@ -0,0 +1,91 @@
+syntax = "proto3";
+
+package bilibili.polymer.contract.v1;
+
+import "google/protobuf/empty.proto";
+
+// 契约
+service Contract {
+ //
+ rpc AddContract(AddContractReq) returns (google.protobuf.Empty);
+ //
+ rpc AddContractV2(AddContractReq) returns (AddContractReply);
+ //
+ rpc ContractConfig(ContractConfigReq) returns (ContractConfigReply);
+}
+
+//
+message AddContractReply {
+ //
+ bool allow_message = 1;
+ //
+ bool allow_reply = 2;
+ //
+ string input_text = 3;
+ //
+ string input_title = 4;
+}
+
+//
+message AddContractReq {
+ //
+ CommonReq common = 1;
+ //
+ int64 mid = 2;
+ //
+ int64 up_mid = 3;
+ //
+ int64 aid = 4;
+ //
+ int32 source = 5;
+}
+
+//
+message CommonReq {
+ //
+ string platform = 1;
+ //
+ int32 build = 2;
+ //
+ string buvid = 3;
+ //
+ string mobi_app = 4;
+ //
+ string device = 5;
+ //
+ string ip = 6;
+ //
+ string spmid = 7;
+}
+
+//
+message ContractCard {
+ //
+ string title = 1;
+ //
+ string sub_title = 2;
+}
+
+//
+message ContractConfigReply {
+ //
+ int32 is_follow_display = 1;
+ //
+ int32 is_triple_display = 2;
+ //
+ ContractCard contract_card = 3;
+}
+
+//
+message ContractConfigReq {
+ //
+ CommonReq common = 1;
+ //
+ int64 mid = 2;
+ //
+ int64 up_mid = 3;
+ //
+ int64 aid = 4;
+ //
+ int32 source = 5;
+}
diff --git a/grpc_api/bilibili/polymer/list/list.proto b/grpc_api/bilibili/polymer/list/v1/list.proto
similarity index 89%
rename from grpc_api/bilibili/polymer/list/list.proto
rename to grpc_api/bilibili/polymer/list/v1/list.proto
index a4e228f..9d619e0 100644
--- a/grpc_api/bilibili/polymer/list/list.proto
+++ b/grpc_api/bilibili/polymer/list/v1/list.proto
@@ -1,6 +1,6 @@
syntax = "proto3";
-package bilibili.polymer.list;
+package bilibili.polymer.list.v1;
//
service List {
@@ -41,6 +41,4 @@ message FavoriteTabReply {
}
//
-message FavoriteTabReq {
-
-}
+message FavoriteTabReq {}
diff --git a/grpc_api/bilibili/relation/interfaces/api.proto b/grpc_api/bilibili/relation/interfaces/api.proto
new file mode 100644
index 0000000..6fe72cb
--- /dev/null
+++ b/grpc_api/bilibili/relation/interfaces/api.proto
@@ -0,0 +1,37 @@
+syntax = "proto3";
+
+package bilibili.relation.interface.v1;
+
+service RelationInterface {
+ // 评论区 At 用户列表 (无需登录鉴权)
+ rpc AtSearch (AtSearchReq) returns (AtSearchReply);
+}
+
+message AtSearchReq {
+ // 可以为 1 , 但是不能为 0 或空 不知道有啥用
+ int64 mid = 1;
+ // 用户名搜索关键词
+ string keyword = 2;
+}
+
+message AtSearchReply {
+ // 搜索结果分组
+ repeated AtGroup items = 1;
+}
+
+message AtGroup {
+ // 分组类型 2: 我的关注 4:其他 ,其他自测
+ int32 group_type = 1;
+ // 分组名称
+ string group_name = 2;
+ // 用户列表
+ repeated AtItem items = 3;
+}
+
+message AtItem {
+ int64 mid = 1;
+ string name = 2;
+ string face = 3;
+ int32 fans = 4;
+ int32 official_verify_type = 5;
+}
diff --git a/grpc_api/bilibili/render/render.proto b/grpc_api/bilibili/render/render.proto
new file mode 100644
index 0000000..1fa0204
--- /dev/null
+++ b/grpc_api/bilibili/render/render.proto
@@ -0,0 +1,17 @@
+syntax = "proto3";
+
+package bilibili.render;
+
+import "google/protobuf/any.proto";
+
+//
+message Render {
+ //
+ int64 code = 1;
+ //
+ string message = 2;
+ //
+ string ttl = 3;
+ //
+ google.protobuf.Any data = 4;
+}
\ No newline at end of file
diff --git a/grpc_api/bilibili/tv/interfaces/dm/v1/dm.proto b/grpc_api/bilibili/tv/interfaces/dm/v1/dm.proto
index a3f88ba..666bb56 100644
--- a/grpc_api/bilibili/tv/interfaces/dm/v1/dm.proto
+++ b/grpc_api/bilibili/tv/interfaces/dm/v1/dm.proto
@@ -3,30 +3,66 @@ syntax = "proto3";
package bilibili.tv.interfaces.dm.v1;
//
-message CommandDmOtt {
+message Chronos {
//
+ string md5 = 1;
+ //
+ string file = 2;
+ //
+ string sign = 3;
+}
+
+// 互动弹幕条目信息
+message CommandDm {
+ // 弹幕id
int64 id = 1;
- //
+ // 对象视频cid
int64 oid = 2;
+ // 发送者mid
+ string mid = 3;
+ // 互动弹幕指令
+ string command = 4;
+ // 互动弹幕正文
+ string content = 5;
+ // 出现时间
+ int32 progress = 6;
+ // 创建时间
+ string ctime = 7;
+ // 发布时间
+ string mtime = 8;
+ // 扩展json数据
+ string extra = 9;
+ // 弹幕id str类型
+ string idStr = 10;
//
+ int64 display = 11;
+}
+
+// ott互动弹幕条目信息
+message CommandDmOtt {
+ // 弹幕id
+ int64 id = 1;
+ // 对象视频cid
+ int64 oid = 2;
+ // 发送者mid
int64 mid = 3;
- //
+ //
int32 type = 4;
- //
+ // 互动弹幕指令
string command = 5;
- //
+ // 互动弹幕正文
string content = 6;
//
int32 state = 7;
- //
+ // 出现时间
int32 progress = 8;
- //
+ // 创建时间
string ctime = 9;
- //
+ // 发布时间
string mtime = 10;
- //
+ // 扩展json数据
string extra = 11;
- //
+ // 弹幕id str类型
string id_str = 12;
}
@@ -85,8 +121,10 @@ message DanmakuElem {
// 弹幕ai云屏蔽条目
message DanmakuFlag {
- int64 dmid = 1; // 弹幕dmid
- uint32 flag = 2; // 评分
+ // 弹幕dmid
+ int64 dmid = 1;
+ // 评分
+ uint32 flag = 2;
}
// 云屏蔽配置信息
@@ -101,44 +139,44 @@ message DanmakuFlagConfig {
// 弹幕默认配置
message DanmuDefaultPlayerConfig {
- bool player_danmaku_use_default_config = 1; // 是否使用推荐弹幕设置
- bool player_danmaku_ai_recommended_switch = 4; // 是否开启智能云屏蔽
- int32 player_danmaku_ai_recommended_level = 5; // 智能云屏蔽等级
- bool player_danmaku_blocktop = 6; // 是否屏蔽顶端弹幕
- bool player_danmaku_blockscroll = 7; // 是否屏蔽滚动弹幕
- bool player_danmaku_blockbottom = 8; // 是否屏蔽底端弹幕
- bool player_danmaku_blockcolorful = 9; // 是否屏蔽彩色弹幕
- bool player_danmaku_blockrepeat = 10; // 是否屏蔽重复弹幕
- bool player_danmaku_blockspecial = 11; // 是否屏蔽高级弹幕
- float player_danmaku_opacity = 12; // 弹幕不透明度
- float player_danmaku_scalingfactor = 13; // 弹幕缩放比例
- float player_danmaku_domain = 14; // 弹幕显示区域
- int32 player_danmaku_speed = 15; // 弹幕速度
- bool inline_player_danmaku_switch = 16; // 是否开启弹幕
- int32 player_danmaku_senior_mode_switch = 17; //
+ bool player_danmaku_use_default_config = 1; // 是否使用推荐弹幕设置
+ bool player_danmaku_ai_recommended_switch = 4; // 是否开启智能云屏蔽
+ int32 player_danmaku_ai_recommended_level = 5; // 智能云屏蔽等级
+ bool player_danmaku_blocktop = 6; // 是否屏蔽顶端弹幕
+ bool player_danmaku_blockscroll = 7; // 是否屏蔽滚动弹幕
+ bool player_danmaku_blockbottom = 8; // 是否屏蔽底端弹幕
+ bool player_danmaku_blockcolorful = 9; // 是否屏蔽彩色弹幕
+ bool player_danmaku_blockrepeat = 10; // 是否屏蔽重复弹幕
+ bool player_danmaku_blockspecial = 11; // 是否屏蔽高级弹幕
+ float player_danmaku_opacity = 12; // 弹幕不透明度
+ float player_danmaku_scalingfactor = 13; // 弹幕缩放比例
+ float player_danmaku_domain = 14; // 弹幕显示区域
+ int32 player_danmaku_speed = 15; // 弹幕速度
+ bool inline_player_danmaku_switch = 16; // 是否开启弹幕
+ int32 player_danmaku_senior_mode_switch = 17; //
}
// 弹幕配置
message DanmuPlayerConfig {
- bool player_danmaku_switch = 1; // 是否开启弹幕
- bool player_danmaku_switch_save = 2; // 是否记录弹幕开关设置
- bool player_danmaku_use_default_config = 3; // 是否使用推荐弹幕设置
- bool player_danmaku_ai_recommended_switch = 4; // 是否开启智能云屏蔽
- int32 player_danmaku_ai_recommended_level = 5; // 智能云屏蔽等级
- bool player_danmaku_blocktop = 6; // 是否屏蔽顶端弹幕
- bool player_danmaku_blockscroll = 7; // 是否屏蔽滚动弹幕
- bool player_danmaku_blockbottom = 8; // 是否屏蔽底端弹幕
- bool player_danmaku_blockcolorful = 9; // 是否屏蔽彩色弹幕
- bool player_danmaku_blockrepeat = 10; // 是否屏蔽重复弹幕
- bool player_danmaku_blockspecial = 11; // 是否屏蔽高级弹幕
- float player_danmaku_opacity = 12; // 弹幕不透明度
- float player_danmaku_scalingfactor = 13; // 弹幕缩放比例
- float player_danmaku_domain = 14; // 弹幕显示区域
- int32 player_danmaku_speed = 15; // 弹幕速度
- bool player_danmaku_enableblocklist = 16; // 是否开启屏蔽列表
- bool inline_player_danmaku_switch = 17; // 是否开启弹幕
- int32 inline_player_danmaku_config = 18; //
- int32 player_danmaku_ios_switch_save = 19; //
+ bool player_danmaku_switch = 1; // 是否开启弹幕
+ bool player_danmaku_switch_save = 2; // 是否记录弹幕开关设置
+ bool player_danmaku_use_default_config = 3; // 是否使用推荐弹幕设置
+ bool player_danmaku_ai_recommended_switch = 4; // 是否开启智能云屏蔽
+ int32 player_danmaku_ai_recommended_level = 5; // 智能云屏蔽等级
+ bool player_danmaku_blocktop = 6; // 是否屏蔽顶端弹幕
+ bool player_danmaku_blockscroll = 7; // 是否屏蔽滚动弹幕
+ bool player_danmaku_blockbottom = 8; // 是否屏蔽底端弹幕
+ bool player_danmaku_blockcolorful = 9; // 是否屏蔽彩色弹幕
+ bool player_danmaku_blockrepeat = 10; // 是否屏蔽重复弹幕
+ bool player_danmaku_blockspecial = 11; // 是否屏蔽高级弹幕
+ float player_danmaku_opacity = 12; // 弹幕不透明度
+ float player_danmaku_scalingfactor = 13; // 弹幕缩放比例
+ float player_danmaku_domain = 14; // 弹幕显示区域
+ int32 player_danmaku_speed = 15; // 弹幕速度
+ bool player_danmaku_enableblocklist = 16; // 是否开启屏蔽列表
+ bool inline_player_danmaku_switch = 17; // 是否开启弹幕
+ int32 inline_player_danmaku_config = 18; //
+ int32 player_danmaku_ios_switch_save = 19; //
}
// 弹幕显示区域自动配置
@@ -214,6 +252,8 @@ message DmViewReply {
string text_placeholder = 11;
// 弹幕输入框文案
string input_placeholder = 12;
+ //
+ bool command_close = 13;
}
// 客户端弹幕元数据-请求
@@ -249,6 +289,40 @@ message SubtitleItem {
UserInfo author = 6;
}
+//
+message TvViewProgressReply {
+ //
+ VideoGuide video_guide = 1;
+ //
+ Chronos chronos = 2;
+}
+
+//
+message TvViewProgressReq {
+ //
+ int64 aid = 1;
+ //
+ int64 cid = 2;
+ //
+ int64 up_mid = 3;
+ //
+ string engine_version = 4;
+ //
+ string message_protocol = 5;
+ //
+ string service_key = 6;
+ //
+ int64 sid = 7;
+ //
+ int64 pid = 8;
+ //
+ int64 from = 9;
+ //
+ string guest_access_key = 10;
+ //
+ int64 epid = 11;
+}
+
// 字幕作者信息
message UserInfo {
// 用户mid
@@ -265,6 +339,12 @@ message UserInfo {
int32 rank = 6;
}
+//
+message VideoGuide {
+ //
+ repeated CommandDm command_dms = 2;
+}
+
// 智能防挡弹幕蒙版信息
message VideoMask {
// 视频cid
diff --git a/grpc_api/bilibili/web/interfaces/v1/interfaces.proto b/grpc_api/bilibili/web/interfaces/v1/interfaces.proto
index 9100896..190c623 100644
--- a/grpc_api/bilibili/web/interfaces/v1/interfaces.proto
+++ b/grpc_api/bilibili/web/interfaces/v1/interfaces.proto
@@ -1,1259 +1,1275 @@
-syntax = "proto3";
-
-package bilibili.web.interfaces.v1;
-
-//
-message AccInfo {
- //
- int64 mid = 1;
- //
- string name = 2;
- //
- string sex = 3;
- //
- string face = 4;
- //
- string sign = 5;
-}
-
-//
-message AccountCard {
- //
- string mid = 1;
- //
- string name = 2;
- //
- string sex = 3;
- //
- string rank = 4;
- //
- string face = 5;
- //
- int32 spacesta = 6;
- //
- string sign = 7;
- //
- CardLevelInfo level_info = 8;
- //
- PendantInfo pendant = 9;
- //
- NameplateInfo nameplate = 10;
- //
- OfficialInfo official = 11;
- //
- OfficialVerify official_verify = 12;
- //
- CardVip vip = 13;
- //
- int64 fans = 14;
- //
- int64 friend = 15;
- //
- int64 attention = 16;
-}
-
-//
-message ActivityArchiveReply {
- //
- Arc arc = 1;
- //
- string bvid = 2;
- //
- repeated Page pages = 3;
- //
- ReqUser req_user = 4;
- //
- repeated Staff staff = 5;
- //
- OperationRelate right_relate = 6;
- //
- OperationRelate bottom_relate = 7;
-}
-
-//
-message ActivityArchiveReq {
- //
- int64 aid = 1;
- //
- string bvid = 2;
- //
- string activity_key = 3;
-}
-
-//
-message ActivityEpisode {
- //
- int64 id = 1;
- //
- int64 aid = 2;
- //
- string bvid = 3;
- //
- int64 cid = 4;
- //
- string title = 5;
- //
- string cover = 6;
- //
- Author author = 7;
- //
- Rights rights = 8;
-}
-
-//
-message ActivityGame {
- //
- repeated ActivityGameIframe iframes = 1;
- //
- string disclaimer = 2;
- //
- string disclaimer_url = 3;
-}
-
-//
-message ActivityGameIframe {
- //
- string url = 1;
- //
- int64 height = 2;
-}
-
-//
-message ActivityLive {
- //
- int64 room_id = 1;
- //
- int64 now_time = 2;
- //
- int64 start_time = 3;
- //
- int64 end_time = 4;
- //
- string hover_pic = 5;
- //
- string hover_jump_url = 6;
- //
- int64 break_cycle = 7;
- //
- repeated LiveTimeline timeline = 8;
- //
- OperationRelate operation_relate = 9;
- //
- int64 reply_type = 10;
- //
- int64 reply_id = 11;
- //
- string hover_pic_close = 12;
- //
- string gift_disclaimer = 13;
-}
-
-//
-message ActivityLiveTimeInfoReply {
- //
- int64 now_time = 1;
- //
- int64 start_time = 2;
- //
- int64 end_time = 3;
- //
- repeated LiveTimeline timeline = 4;
-}
-
-//
-message ActivityLiveTimeInfoReq {
- //
- string activity_key = 1;
-}
-
-//
-message ActivitySeasonReply {
- //
- ActivitySeasonStatus status = 1;
- //
- string title = 2;
- //
- ActivityLive live = 3;
- //
- ActivitySubscribe subscribe = 4;
- //
- ActivityGame game = 5;
- //
- ActivityView view = 6;
- //
- ActivityTheme theme = 7;
-}
-
-//
-message ActivitySeasonReq {
- //
- int64 aid = 1;
- //
- string bvid = 2;
- //
- string activity_key = 3;
-}
-
-//
-message ActivitySeasonSection {
- //
- int64 id = 1;
- //
- string title = 2;
- //
- int64 type = 3;
- //
- repeated ActivityEpisode episodes = 4;
-}
-
-//
-enum ActivitySeasonStatus {
- StatusNone = 0; //
- StatusLive = 1; //
- StatusView = 2; //
-}
-
-//
-message ActivitySubscribe {
- //
- bool status = 1;
- //
- string title = 2;
- //
- string button_title = 3;
- //
- string button_selected_title = 4;
- //
- int64 season_stat_view = 5;
- //
- int64 season_stat_danmaku = 6;
- //
- OrderType order_type = 7;
- oneof param {
- //
- ReserveActivityParam reserve_activity_param = 8;
- //
- FavSeasonParam fav_season_param = 9;
- //
- JumpURLParam jump_URL_param = 10;
- }
-}
-
-//
-message ActivityTheme {
- //
- string base_color = 1;
- //
- string loading_bg_color = 2;
- //
- string operated_bg_color = 3;
- //
- string default_element_color = 4;
- //
- string hover_element_color = 5;
- //
- string selected_element_color = 6;
- //
- string base_font_color = 7;
- //
- string info_font_color = 8;
- //
- string mask_bg_color = 9;
- //
- string page_bg_color = 10;
- //
- string center_logo_img = 11;
- //
- string page_bg_img = 12;
- //
- string decorations2233_img = 13;
- //
- string main_banner_bg_img = 14;
- //
- string main_banner_title_img = 15;
- //
- string like_animation_img = 16;
- //
- string combo_like_img = 17;
- //
- string combo_coin_img = 18;
- //
- string combo_fav_img = 19;
- //
- string arrow_btn_img = 20;
- //
- string share_icon_bg_img = 21;
- //
- string live_list_location_img = 22;
- //
- string live_list_location_img_active = 23;
- //
- string player_loading_img = 24;
- //
- string share_img = 25;
- //
- map kv_color = 26;
-}
-
-//
-message ActivityView {
- //
- Arc arc = 1;
- //
- string bvid = 2;
- //
- repeated Page pages = 3;
- //
- repeated Staff staff = 4;
- //
- ReqUser req_user = 5;
- //
- OperationRelate right_relate = 6;
- //
- OperationRelate bottom_relate = 7;
- //
- repeated ActivitySeasonSection sections = 8;
-}
-
-//
-message Arc {
- //
- int64 aid = 1;
- //
- int64 videos = 2;
- //
- int32 type_id = 3;
- //
- string type_name = 4;
- //
- int32 copyright = 5;
- //
- string pic = 6;
- //
- string title = 7;
- //
- int64 pubdate = 8;
- //
- int64 ctime = 9;
- //
- string desc = 10;
- //
- int32 state = 11;
- //
- int32 access = 12;
- //
- int32 attribute = 13;
- //
- string tag = 14;
- //
- repeated string tags = 15;
- //
- int64 duration = 16;
- //
- int64 mission_id = 17;
- //
- int64 order_id = 18;
- //
- string redirect_url = 19;
- //
- int64 forward = 20;
- //
- Rights rights = 21;
- //
- Author author = 22;
- //
- Stat stat = 23;
- //
- string report_result = 24;
- //
- string dynamic = 25;
- //
- int64 first_cid = 26;
- //
- Dimension dimension = 27;
- //
- repeated StaffInfo staff_info = 28;
- //
- int64 season_id = 29;
- //
- repeated DescV2 desc_v2 = 30;
-}
-
-//
-message Author {
- //
- int64 mid = 1;
- //
- string name = 2;
- //
- string face = 3;
-}
-
-//
-message Card {
- //
- AccountCard card = 1;
- //
- Space space = 2;
- //
- bool following = 3;
- //
- int64 archive_count = 4;
- //
- int32 article_count = 5;
- //
- int64 follower = 6;
-}
-
-//
-message CardLevelInfo {
- //
- int32 cur = 1;
- //
- int32 min = 2;
- //
- int32 now_exp = 3;
- //
- int32 next_exp = 4;
-}
-
-//
-message CardVip {
- //
- int32 type = 1;
- //
- string due_remark = 2;
- //
- int32 access_status = 3;
- //
- int32 vip_status = 4;
- //
- string vip_status_warn = 5;
- //
- int32 theme_type = 6;
-}
-
-message ClickActivitySeasonReq {
- //
- OrderType order_type = 1;
- oneof param {
- //
- ReserveActivityParam reserve_activity_param = 2;
- //
- FavSeasonParam fav_season_param = 3;
- //
- JumpURLParam jump_URL_param = 4;
- }
- //
- string spmid = 5;
- //
- int64 action = 6;
-}
-
-//
-message DescV2 {
- //
- string raw_text = 1;
- //
- int64 type = 2;
- //
- int64 biz_id = 3;
-}
-
-//
-message Dimension {
- //
- int64 width = 1;
- //
- int64 height = 2;
- //
- int64 rotate = 3;
-}
-
-//
-message FavSeasonParam {
- //
- int64 season_id = 1;
-}
-
-//
-message HotReply {
- //
- ReplyPage page = 1;
- //
- repeated Reply replies = 2;
-}
-
-//
-message JumpURLParam {
- //
- string jump_url = 1;
-}
-
-//
-message LiveTimeline {
- //
- string name = 1;
- //
- int64 start_time = 2;
- //
- int64 end_time = 3;
- //
- string cover = 4;
- //
- string subtitle = 5;
- //
- string h5_cover = 6;
-}
-
-//
-message NameplateInfo {
- //
- int32 nid = 1;
- //
- string name = 2;
- //
- string image = 3;
- //
- string image_small = 4;
- //
- string level = 5;
- //
- string condition = 6;
-}
-
-//
-message NoReply {
-
-}
-
-//
-message OfficialInfo {
- //
- int32 role = 1;
- //
- string title = 2;
- //
- string desc = 3;
-}
-
-//
-message OfficialVerify {
- //
- int32 type = 1;
- //
- string desc = 2;
-}
-
-//
-message OperationRelate {
- //
- string title = 1;
- //
- repeated RelateItem relate_item = 2;
- //
- repeated Relate ai_relate_item = 3;
-}
-
-//
-enum OrderType {
- TypeNone = 0; //
- TypeOrderActivity = 1; //
- TypeFavSeason = 2; //
- TypeClick = 3; //
-}
-
-//
-message Page {
- //
- int64 cid = 1;
- //
- int32 page = 2;
- //
- string from = 3;
- //
- string part = 4;
- //
- int64 duration = 5;
- //
- string vid = 6;
- //
- string desc = 7;
- //
- string weblink = 8;
- //
- Dimension dimension = 9;
-}
-
-//
-message PendantInfo {
- //
- int32 pid = 1;
- //
- string name = 2;
- //
- string image = 3;
- //
- int64 expire = 4;
-}
-
-//
-message Relate {
- //
- Arc arc = 1;
- //
- string bvid = 2;
- //
- int64 season_type = 3;
-}
-
-//
-message RelateItem {
- //
- string url = 1;
- //
- string cover = 2;
-}
-
-//
-message Relation {
- //
- int64 attribute = 1;
- //
- int64 special = 3;
-}
-
-//
-message Reply {
- //
- int64 rpid = 1;
- //
- int64 oid = 2;
- //
- int32 type = 3;
- //
- int64 mid = 4;
- //
- int64 root = 5;
- //
- int64 parent = 6;
- //
- int64 dialog = 7;
- //
- int32 count = 8;
- //
- int32 rcount = 9;
- //
- int32 floor = 10;
- //
- int32 state = 11;
- //
- int32 fans_grade = 12;
- //
- int32 attr = 13;
- //
- int64 ctime = 14;
- //
- string rpid_str = 15;
- //
- string root_str = 16;
- //
- string parent_str = 17;
- //
- string dialog_str = 18;
- //
- int32 like = 19;
- //
- int32 hate = 20;
- //
- int32 action = 21;
- //
- ReplyMember member = 22;
- //
- ReplyContent content = 23;
- //
- repeated Reply replies = 24;
- //
- int32 assist = 25;
- //
- ReplyFolder folder = 26;
- //
- ReplyUpAction up_action = 27;
- //
- ReplyLabel label = 28;
- //
- string raw_input = 29;
- //
- bool show_follow = 30;
-}
-
-//
-message ReplyContent {
- //
- int64 rp_id = 1;
- //
- string message = 2;
- //
- ReplyVote vote = 3;
- //
- repeated string topics = 5;
- //
- int32 ip = 6;
- //
- int32 plat = 7;
- //
- string device = 8;
- //
- string version = 9;
- //
- repeated ReplyMemberInfo members = 10;
- //
- map emote = 11;
-}
-
-//
-message ReplyEmote {
- //
- int64 id = 1;
- //
- int64 package_id = 2;
- //
- int64 state = 3;
- //
- int64 type = 4;
- //
- int64 attr = 5;
- //
- string text = 6;
- //
- string url = 7;
- //
- ReplyEmoteMeta meta = 8;
- //
- int64 ctime = 9;
- //
- int64 mtime = 10;
-}
-
-//
-message ReplyEmoteMeta {
- //
- ReplyEmoteMetaSize size = 1;
-}
-
-//
-enum ReplyEmoteMetaSize {
- EMOTE_META_SIZE_UNSPECIFIED = 0; //
- EMOTE_META_SIZE_SMALL = 1; //
- EMOTE_META_SIZE_BIG = 2; //
-}
-
-//
-message ReplyFansDetail {
- //
- int64 uid = 1;
- //
- int32 medal_id = 2;
- //
- string medal_name = 3;
- //
- int32 score = 4;
- //
- int32 level = 5;
- //
- int32 intimacy = 6;
- //
- int32 status = 7;
- //
- int32 received = 8;
-}
-
-//
-message ReplyFolder {
- //
- bool has_folded = 1;
- //
- bool is_folded = 2;
- //
- string rule = 3;
-}
-
-//
-message ReplyLabel {
- //
- int64 rpid = 1;
- //
- string content = 2;
- //
- string text_color = 3;
- //
- string text_color_night_mode = 4;
- //
- string bg_color = 5;
- //
- string bg_color_night_mode = 6;
- //
- string link = 7;
- //
- string position = 8;
-}
-
-//
-message ReplyLevelInfo {
- //
- int32 cur = 1;
- //
- int32 min = 2;
- //
- int32 now_exp = 3;
- //
- int32 next_exp = 4;
-}
-
-//
-message ReplyMember {
- //
- ReplyMemberInfo info = 1;
- //
- ReplyFansDetail fans_detail = 2;
- //
- int32 following = 3;
-}
-
-//
-message ReplyMemberInfo {
- //
- int32 role = 1;
- //
- string mid = 2;
- //
- string name = 3;
- //
- string sex = 4;
- //
- string sign = 5;
- //
- string avatar = 6;
- //
- string rank = 7;
- //
- string display_rank = 8;
- //
- ReplyLevelInfo level_info = 9;
- //
- PendantInfo pendant = 10;
- //
- NameplateInfo nameplate = 11;
- //
- OfficialVerify official_verify = 12;
- //
- ReplyVip vip = 13;
-}
-
-//
-message ReplyPage {
- //
- int64 acount = 1;
- //
- int64 count = 2;
- //
- int64 num = 3;
- //
- int64 size = 4;
-}
-
-//
-message ReplyUpAction {
- //
- bool like = 1;
- //
- bool reply = 2;
-}
-
-//
-message ReplyVip {
- //
- int32 type = 1;
- //
- int64 due_date = 2;
- //
- string due_remark = 3;
- //
- int32 access_status = 4;
- //
- int32 vip_status = 5;
- //
- string vip_status_warn = 6;
- //
- int32 theme_type = 7;
- //
- VipLabel label = 8;
-}
-
-//
-message ReplyVote {
- //
- int64 id = 1;
- //
- string title = 2;
- //
- int32 cnt = 3;
- //
- string desc = 4;
- //
- bool deleted = 5;
-}
-
-//
-message ReqUser {
- //
- bool favorite = 1;
- //
- bool like = 2;
- //
- bool dislike = 3;
- //
- int64 multiply = 4;
-}
-
-//
-message ReserveActivityParam {
- //
- int64 reserve_id = 1;
- //
- string from = 2;
- //
- string type = 3;
- //
- int64 oid = 4;
-}
-
-//
-message Rights {
- //
- int32 bp = 1;
- //
- int32 elec = 2;
- //
- int32 download = 3;
- //
- int32 movie = 4;
- //
- int32 pay = 5;
- //
- int32 hd5 = 6;
- //
- int32 no_reprint = 7;
- //
- int32 autoplay = 8;
- //
- int32 ugc_pay = 9;
- //
- int32 is_cooperation = 10;
- //
- int32 ugc_pay_preview = 11;
-}
-
-//
-message SeasonEpisode {
- //
- int64 season_id = 1;
- //
- int64 section_id = 2;
- //
- int64 id = 3;
- //
- int64 aid = 4;
- //
- int64 cid = 5;
- //
- string title = 6;
- //
- int64 attribute = 7;
- //
- Arc arc = 8;
- //
- Page page = 9;
- //
- string bvid = 10;
-}
-
-//
-message SeasonSection {
- //
- int64 season_id = 1;
- //
- int64 id = 2;
- //
- string title = 3;
- //
- int64 type = 4;
- //
- repeated SeasonEpisode episodes = 5;
-}
-
-//
-message SeasonStat {
- //
- int64 season_id = 1;
- //
- int32 view = 2;
- //
- int32 danmaku = 3;
- //
- int32 reply = 4;
- //
- int32 fav = 5;
- //
- int32 coin = 6;
- //
- int32 share = 7;
- //
- int32 now_rank = 8;
- //
- int32 his_rank = 9;
- //
- int32 like = 10;
-}
-
-//
-message Space {
- //
- string s_img = 1;
- //
- string l_img = 2;
-}
-
-//
-message Staff {
- //
- int64 mid = 1;
- //
- string title = 2;
- //
- string name = 3;
- //
- string face = 4;
- //
- VipInfo vip = 5;
- //
- OfficialInfo official = 6;
- //
- int64 follower = 7;
- //
- int32 label_style = 8;
- //
- Relation relation = 9;
-}
-
-//
-message StaffInfo {
- //
- int64 mid = 1;
- //
- string title = 2;
-}
-
-//
-message Stat {
- //
- int64 aid = 1;
- //
- int32 view = 2;
- //
- int32 danmaku = 3;
- //
- int32 reply = 4;
- //
- int32 fav = 5;
- //
- int32 coin = 6;
- //
- int32 share = 7;
- //
- int32 now_rank = 8;
- //
- int32 his_rank = 9;
- //
- int32 like = 10;
- //
- int32 dislike = 11;
- //
- string evaluation = 12;
- //
- string argue_msg = 13;
-}
-
-//
-message Subtitle {
- //
- bool allow_submit = 1;
- //
- repeated SubtitleItem list = 2;
-}
-
-//
-message SubtitleItem {
- //
- int64 id = 1;
- //
- string lan = 2;
- //
- string lan_doc = 3;
- //
- bool is_lock = 4;
- //
- int64 author_mid = 5;
- //
- string subtitle_url = 6;
- //
- AccInfo author = 7;
-}
-
-//
-message Tag {
- //
- int64 id = 1;
- //
- string name = 2;
- //
- string cover = 3;
- //
- string head_cover = 4;
- //
- string content = 5;
- //
- string short_content = 6;
- //
- int32 type = 7;
- //
- int32 state = 8;
- //
- int64 ctime = 9;
- //
- TagCount tag_count = 10;
- //
- int32 is_atten = 11;
- //
- int64 likes = 12;
- //
- int64 hates = 13;
- //
- int32 attribute = 14;
- //
- int32 liked = 15;
- //
- int32 hated = 16;
-}
-
-//
-message TagCount {
- //
- int64 view = 1;
- //
- int64 use = 2;
- //
- int64 atten = 3;
-}
-
-//
-message UGCPayAsset {
- //
- int64 price = 1;
- //
- map platform_price = 2;
-}
-
-//
-message UGCSeason {
- //
- int64 id = 1;
- //
- string title = 2;
- //
- string cover = 3;
- //
- int64 mid = 4;
- //
- string intro = 5;
- //
- int32 sign_state = 6;
- //
- int64 attribute = 7;
- //
- repeated SeasonSection sections = 8;
- //
- SeasonStat stat = 9;
- //
- int64 ep_count = 10;
- //
- int64 season_type = 11;
-}
-
-//
-message View {
- //
- Arc arc = 1;
- //
- bool no_cache = 2;
- //
- repeated Page pages = 3;
- //
- Subtitle subtitle = 4;
- //
- UGCPayAsset asset = 5;
- //
- ViewLabel label = 6;
- //
- repeated Staff staff = 7;
- //
- UGCSeason ugc_season = 8;
- //
- int64 stein_guide_cid = 9;
-}
-
-//
-message ViewDetailReply {
- //
- View view = 1;
- //
- Card card = 2;
- //
- repeated Tag tags = 3;
- //
- HotReply reply = 4;
- //
- repeated Arc related = 5;
-}
-
-//
-message ViewDetailReq {
- //
- int64 aid = 1;
- //
- string bvid = 2;
-}
-
-//
-message ViewLabel {
- //
- int64 type = 1;
-}
-
-//
-message VipInfo {
- //
- int32 type = 1;
- //
- int32 status = 2;
- //
- int32 vip_pay_type = 3;
- //
- int32 theme_type = 4;
-}
-
-//
-message VipLabel {
- //
- string path = 1;
-}
+syntax = "proto3";
+
+package bilibili.web.interfaces.v1;
+
+// 用户信息
+message AccInfo {
+ // 用户UID
+ int64 mid = 1;
+ // 用户昵称
+ string name = 2;
+ //
+ string sex = 3;
+ //
+ string face = 4;
+ //
+ string sign = 5;
+}
+
+//
+message AccountCard {
+ //
+ string mid = 1;
+ //
+ string name = 2;
+ //
+ string sex = 3;
+ //
+ string rank = 4;
+ //
+ string face = 5;
+ //
+ int32 spacesta = 6;
+ //
+ string sign = 7;
+ //
+ CardLevelInfo level_info = 8;
+ //
+ PendantInfo pendant = 9;
+ //
+ NameplateInfo nameplate = 10;
+ //
+ OfficialInfo official = 11;
+ //
+ OfficialVerify official_verify = 12;
+ //
+ CardVip vip = 13;
+ //
+ int64 fans = 14;
+ //
+ int64 friend = 15;
+ //
+ int64 attention = 16;
+}
+
+//
+message ActivityArchiveReply {
+ //
+ Arc arc = 1;
+ //
+ string bvid = 2;
+ //
+ repeated Page pages = 3;
+ //
+ ReqUser req_user = 4;
+ //
+ repeated Staff staff = 5;
+ //
+ OperationRelate right_relate = 6;
+ //
+ OperationRelate bottom_relate = 7;
+}
+
+//
+message ActivityArchiveReq {
+ //
+ int64 aid = 1;
+ //
+ string bvid = 2;
+ //
+ string activity_key = 3;
+}
+
+//
+message ActivityEpisode {
+ //
+ int64 id = 1;
+ //
+ int64 aid = 2;
+ //
+ string bvid = 3;
+ //
+ int64 cid = 4;
+ //
+ string title = 5;
+ //
+ string cover = 6;
+ //
+ Author author = 7;
+ //
+ Rights rights = 8;
+}
+
+//
+message ActivityGame {
+ //
+ repeated ActivityGameIframe iframes = 1;
+ //
+ string disclaimer = 2;
+ //
+ string disclaimer_url = 3;
+}
+
+//
+message ActivityGameIframe {
+ //
+ string url = 1;
+ //
+ int64 height = 2;
+}
+
+//
+message ActivityLive {
+ //
+ int64 room_id = 1;
+ //
+ int64 now_time = 2;
+ //
+ int64 start_time = 3;
+ //
+ int64 end_time = 4;
+ //
+ string hover_pic = 5;
+ //
+ string hover_jump_url = 6;
+ //
+ int64 break_cycle = 7;
+ //
+ repeated LiveTimeline timeline = 8;
+ //
+ OperationRelate operation_relate = 9;
+ //
+ int64 reply_type = 10;
+ //
+ int64 reply_id = 11;
+ //
+ string hover_pic_close = 12;
+ //
+ string gift_disclaimer = 13;
+}
+
+//
+message ActivityLiveTimeInfoReply {
+ //
+ int64 now_time = 1;
+ //
+ int64 start_time = 2;
+ //
+ int64 end_time = 3;
+ //
+ repeated LiveTimeline timeline = 4;
+}
+
+//
+message ActivityLiveTimeInfoReq {
+ //
+ string activity_key = 1;
+}
+
+//
+message ActivitySeasonReply {
+ //
+ ActivitySeasonStatus status = 1;
+ //
+ string title = 2;
+ //
+ ActivityLive live = 3;
+ //
+ ActivitySubscribe subscribe = 4;
+ //
+ ActivityGame game = 5;
+ //
+ ActivityView view = 6;
+ //
+ ActivityTheme theme = 7;
+}
+
+//
+message ActivitySeasonReq {
+ //
+ int64 aid = 1;
+ //
+ string bvid = 2;
+ //
+ string activity_key = 3;
+}
+
+//
+message ActivitySeasonSection {
+ //
+ int64 id = 1;
+ //
+ string title = 2;
+ //
+ int64 type = 3;
+ //
+ repeated ActivityEpisode episodes = 4;
+}
+
+//
+enum ActivitySeasonStatus {
+ StatusNone = 0; //
+ StatusLive = 1; //
+ StatusView = 2; //
+}
+
+//
+message ActivitySubscribe {
+ //
+ bool status = 1;
+ //
+ string title = 2;
+ //
+ string button_title = 3;
+ //
+ string button_selected_title = 4;
+ //
+ int64 season_stat_view = 5;
+ //
+ int64 season_stat_danmaku = 6;
+ //
+ OrderType order_type = 7;
+ oneof param {
+ //
+ ReserveActivityParam reserve_activity_param = 8;
+ //
+ FavSeasonParam fav_season_param = 9;
+ //
+ JumpURLParam jump_URL_param = 10;
+ }
+}
+
+//
+message ActivityTheme {
+ //
+ string base_color = 1;
+ //
+ string loading_bg_color = 2;
+ //
+ string operated_bg_color = 3;
+ //
+ string default_element_color = 4;
+ //
+ string hover_element_color = 5;
+ //
+ string selected_element_color = 6;
+ //
+ string base_font_color = 7;
+ //
+ string info_font_color = 8;
+ //
+ string mask_bg_color = 9;
+ //
+ string page_bg_color = 10;
+ //
+ string center_logo_img = 11;
+ //
+ string page_bg_img = 12;
+ //
+ string decorations2233_img = 13;
+ //
+ string main_banner_bg_img = 14;
+ //
+ string main_banner_title_img = 15;
+ //
+ string like_animation_img = 16;
+ //
+ string combo_like_img = 17;
+ //
+ string combo_coin_img = 18;
+ //
+ string combo_fav_img = 19;
+ //
+ string arrow_btn_img = 20;
+ //
+ string share_icon_bg_img = 21;
+ //
+ string live_list_location_img = 22;
+ //
+ string live_list_location_img_active = 23;
+ //
+ string player_loading_img = 24;
+ //
+ string share_img = 25;
+ //
+ map kv_color = 26;
+}
+
+//
+message ActivityView {
+ //
+ Arc arc = 1;
+ //
+ string bvid = 2;
+ //
+ repeated Page pages = 3;
+ //
+ repeated Staff staff = 4;
+ //
+ ReqUser req_user = 5;
+ //
+ OperationRelate right_relate = 6;
+ //
+ OperationRelate bottom_relate = 7;
+ //
+ repeated ActivitySeasonSection sections = 8;
+}
+
+//
+message Arc {
+ //
+ int64 aid = 1;
+ //
+ int64 videos = 2;
+ //
+ int32 type_id = 3;
+ //
+ string type_name = 4;
+ //
+ int32 copyright = 5;
+ //
+ string pic = 6;
+ //
+ string title = 7;
+ //
+ int64 pubdate = 8;
+ //
+ int64 ctime = 9;
+ //
+ string desc = 10;
+ //
+ int32 state = 11;
+ //
+ int32 access = 12;
+ //
+ int32 attribute = 13;
+ //
+ string tag = 14;
+ //
+ repeated string tags = 15;
+ //
+ int64 duration = 16;
+ //
+ int64 mission_id = 17;
+ //
+ int64 order_id = 18;
+ //
+ string redirect_url = 19;
+ //
+ int64 forward = 20;
+ //
+ Rights rights = 21;
+ //
+ Author author = 22;
+ //
+ Stat stat = 23;
+ //
+ string report_result = 24;
+ //
+ string dynamic = 25;
+ //
+ int64 first_cid = 26;
+ //
+ Dimension dimension = 27;
+ //
+ repeated StaffInfo staff_info = 28;
+ //
+ int64 season_id = 29;
+ //
+ repeated DescV2 desc_v2 = 30;
+ //
+ bool is_chargeable_season = 31;
+ //
+ bool is_blooper = 32;
+}
+
+//
+message Author {
+ //
+ int64 mid = 1;
+ //
+ string name = 2;
+ //
+ string face = 3;
+}
+
+//
+message Card {
+ //
+ AccountCard card = 1;
+ //
+ Space space = 2;
+ //
+ bool following = 3;
+ //
+ int64 archive_count = 4;
+ //
+ int32 article_count = 5;
+ //
+ int64 follower = 6;
+}
+
+//
+message CardLevelInfo {
+ //
+ int32 cur = 1;
+ //
+ int32 min = 2;
+ //
+ int32 now_exp = 3;
+ //
+ int32 next_exp = 4;
+}
+
+//
+message CardVip {
+ //
+ int32 type = 1;
+ //
+ string due_remark = 2;
+ //
+ int32 access_status = 3;
+ //
+ int32 vip_status = 4;
+ //
+ string vip_status_warn = 5;
+ //
+ int32 theme_type = 6;
+}
+
+message ClickActivitySeasonReq {
+ //
+ OrderType order_type = 1;
+ oneof param {
+ //
+ ReserveActivityParam reserve_activity_param = 2;
+ //
+ FavSeasonParam fav_season_param = 3;
+ //
+ JumpURLParam jump_URL_param = 4;
+ }
+ //
+ string spmid = 5;
+ //
+ int64 action = 6;
+}
+
+//
+message DescV2 {
+ //
+ string raw_text = 1;
+ //
+ int64 type = 2;
+ //
+ int64 biz_id = 3;
+}
+
+//
+message Dimension {
+ //
+ int64 width = 1;
+ //
+ int64 height = 2;
+ //
+ int64 rotate = 3;
+}
+
+//
+message FavSeasonParam {
+ //
+ int64 season_id = 1;
+}
+
+//
+message HotReply {
+ //
+ ReplyPage page = 1;
+ //
+ repeated Reply replies = 2;
+}
+
+//
+message JumpURLParam {
+ //
+ string jump_url = 1;
+}
+
+//
+message LiveTimeline {
+ //
+ string name = 1;
+ //
+ int64 start_time = 2;
+ //
+ int64 end_time = 3;
+ //
+ string cover = 4;
+ //
+ string subtitle = 5;
+ //
+ string h5_cover = 6;
+}
+
+//
+message NameplateInfo {
+ //
+ int32 nid = 1;
+ //
+ string name = 2;
+ //
+ string image = 3;
+ //
+ string image_small = 4;
+ //
+ string level = 5;
+ //
+ string condition = 6;
+}
+
+//
+message NoReply {}
+
+//
+message OfficialInfo {
+ //
+ int32 role = 1;
+ //
+ string title = 2;
+ //
+ string desc = 3;
+}
+
+//
+message OfficialVerify {
+ //
+ int32 type = 1;
+ //
+ string desc = 2;
+}
+
+//
+message OperationRelate {
+ //
+ string title = 1;
+ //
+ repeated RelateItem relate_item = 2;
+ //
+ repeated Relate ai_relate_item = 3;
+}
+
+//
+enum OrderType {
+ TypeNone = 0; //
+ TypeOrderActivity = 1; //
+ TypeFavSeason = 2; //
+ TypeClick = 3; //
+}
+
+//
+message Page {
+ //
+ int64 cid = 1;
+ //
+ int32 page = 2;
+ //
+ string from = 3;
+ //
+ string part = 4;
+ //
+ int64 duration = 5;
+ //
+ string vid = 6;
+ //
+ string desc = 7;
+ //
+ string weblink = 8;
+ //
+ Dimension dimension = 9;
+}
+
+//
+message PendantInfo {
+ //
+ int32 pid = 1;
+ //
+ string name = 2;
+ //
+ string image = 3;
+ //
+ int64 expire = 4;
+}
+
+//
+message ReasonStyle {
+ //
+ string text = 1;
+}
+
+//
+message Relate {
+ //
+ Arc arc = 1;
+ //
+ string bvid = 2;
+ //
+ int64 season_type = 3;
+}
+
+//
+message RelateItem {
+ //
+ string url = 1;
+ //
+ string cover = 2;
+}
+
+//
+message Relation {
+ //
+ int64 attribute = 1;
+ //
+ int64 special = 3;
+}
+
+//
+message Reply {
+ //
+ int64 rpid = 1;
+ //
+ int64 oid = 2;
+ //
+ int32 type = 3;
+ //
+ int64 mid = 4;
+ //
+ int64 root = 5;
+ //
+ int64 parent = 6;
+ //
+ int64 dialog = 7;
+ //
+ int32 count = 8;
+ //
+ int32 rcount = 9;
+ //
+ int32 floor = 10;
+ //
+ int32 state = 11;
+ //
+ int32 fans_grade = 12;
+ //
+ int32 attr = 13;
+ //
+ int64 ctime = 14;
+ //
+ string rpid_str = 15;
+ //
+ string root_str = 16;
+ //
+ string parent_str = 17;
+ //
+ string dialog_str = 18;
+ //
+ int32 like = 19;
+ //
+ int32 hate = 20;
+ //
+ int32 action = 21;
+ //
+ ReplyMember member = 22;
+ //
+ ReplyContent content = 23;
+ //
+ repeated Reply replies = 24;
+ //
+ int32 assist = 25;
+ //
+ ReplyFolder folder = 26;
+ //
+ ReplyUpAction up_action = 27;
+ //
+ ReplyLabel label = 28;
+ //
+ string raw_input = 29;
+ //
+ bool show_follow = 30;
+}
+
+//
+message ReplyContent {
+ //
+ int64 rp_id = 1;
+ //
+ string message = 2;
+ //
+ ReplyVote vote = 3;
+ //
+ repeated string topics = 5;
+ //
+ int32 ip = 6;
+ //
+ int32 plat = 7;
+ //
+ string device = 8;
+ //
+ string version = 9;
+ //
+ repeated ReplyMemberInfo members = 10;
+ //
+ map emote = 11;
+}
+
+//
+message ReplyEmote {
+ //
+ int64 id = 1;
+ //
+ int64 package_id = 2;
+ //
+ int64 state = 3;
+ //
+ int64 type = 4;
+ //
+ int64 attr = 5;
+ //
+ string text = 6;
+ //
+ string url = 7;
+ //
+ ReplyEmoteMeta meta = 8;
+ //
+ int64 ctime = 9;
+ //
+ int64 mtime = 10;
+}
+
+//
+message ReplyEmoteMeta {
+ //
+ ReplyEmoteMetaSize size = 1;
+}
+
+//
+enum ReplyEmoteMetaSize {
+ EMOTE_META_SIZE_UNSPECIFIED = 0; //
+ EMOTE_META_SIZE_SMALL = 1; //
+ EMOTE_META_SIZE_BIG = 2; //
+}
+
+//
+message ReplyFansDetail {
+ //
+ int64 uid = 1;
+ //
+ int32 medal_id = 2;
+ //
+ string medal_name = 3;
+ //
+ int32 score = 4;
+ //
+ int32 level = 5;
+ //
+ int32 intimacy = 6;
+ //
+ int32 status = 7;
+ //
+ int32 received = 8;
+}
+
+//
+message ReplyFolder {
+ //
+ bool has_folded = 1;
+ //
+ bool is_folded = 2;
+ //
+ string rule = 3;
+}
+
+//
+message ReplyLabel {
+ //
+ int64 rpid = 1;
+ //
+ string content = 2;
+ //
+ string text_color = 3;
+ //
+ string text_color_night_mode = 4;
+ //
+ string bg_color = 5;
+ //
+ string bg_color_night_mode = 6;
+ //
+ string link = 7;
+ //
+ string position = 8;
+}
+
+//
+message ReplyLevelInfo {
+ //
+ int32 cur = 1;
+ //
+ int32 min = 2;
+ //
+ int32 now_exp = 3;
+ //
+ int32 next_exp = 4;
+}
+
+//
+message ReplyMember {
+ //
+ ReplyMemberInfo info = 1;
+ //
+ ReplyFansDetail fans_detail = 2;
+ //
+ int32 following = 3;
+}
+
+//
+message ReplyMemberInfo {
+ //
+ int32 role = 1;
+ //
+ string mid = 2;
+ //
+ string name = 3;
+ //
+ string sex = 4;
+ //
+ string sign = 5;
+ //
+ string avatar = 6;
+ //
+ string rank = 7;
+ //
+ string display_rank = 8;
+ //
+ ReplyLevelInfo level_info = 9;
+ //
+ PendantInfo pendant = 10;
+ //
+ NameplateInfo nameplate = 11;
+ //
+ OfficialVerify official_verify = 12;
+ //
+ ReplyVip vip = 13;
+}
+
+//
+message ReplyPage {
+ //
+ int64 acount = 1;
+ //
+ int64 count = 2;
+ //
+ int64 num = 3;
+ //
+ int64 size = 4;
+}
+
+//
+message ReplyUpAction {
+ //
+ bool like = 1;
+ //
+ bool reply = 2;
+}
+
+//
+message ReplyVip {
+ //
+ int32 type = 1;
+ //
+ int64 due_date = 2;
+ //
+ string due_remark = 3;
+ //
+ int32 access_status = 4;
+ //
+ int32 vip_status = 5;
+ //
+ string vip_status_warn = 6;
+ //
+ int32 theme_type = 7;
+ //
+ VipLabel label = 8;
+}
+
+//
+message ReplyVote {
+ //
+ int64 id = 1;
+ //
+ string title = 2;
+ //
+ int32 cnt = 3;
+ //
+ string desc = 4;
+ //
+ bool deleted = 5;
+}
+
+//
+message ReqUser {
+ //
+ bool favorite = 1;
+ //
+ bool like = 2;
+ //
+ bool dislike = 3;
+ //
+ int64 multiply = 4;
+}
+
+//
+message ReserveActivityParam {
+ //
+ int64 reserve_id = 1;
+ //
+ string from = 2;
+ //
+ string type = 3;
+ //
+ int64 oid = 4;
+}
+
+//
+message Rights {
+ //
+ int32 bp = 1;
+ //
+ int32 elec = 2;
+ //
+ int32 download = 3;
+ //
+ int32 movie = 4;
+ //
+ int32 pay = 5;
+ //
+ int32 hd5 = 6;
+ //
+ int32 no_reprint = 7;
+ //
+ int32 autoplay = 8;
+ //
+ int32 ugc_pay = 9;
+ //
+ int32 is_cooperation = 10;
+ //
+ int32 ugc_pay_preview = 11;
+ //
+ int32 arc_pay = 12;
+ //
+ int32 free_watch = 13;
+}
+
+//
+message SeasonEpisode {
+ //
+ int64 season_id = 1;
+ //
+ int64 section_id = 2;
+ //
+ int64 id = 3;
+ //
+ int64 aid = 4;
+ //
+ int64 cid = 5;
+ //
+ string title = 6;
+ //
+ int64 attribute = 7;
+ //
+ Arc arc = 8;
+ //
+ Page page = 9;
+ //
+ string bvid = 10;
+ //
+ ReasonStyle badge_style = 11;
+}
+
+//
+message SeasonSection {
+ //
+ int64 season_id = 1;
+ //
+ int64 id = 2;
+ //
+ string title = 3;
+ //
+ int64 type = 4;
+ //
+ repeated SeasonEpisode episodes = 5;
+}
+
+//
+message SeasonStat {
+ //
+ int64 season_id = 1;
+ //
+ int32 view = 2;
+ //
+ int32 danmaku = 3;
+ //
+ int32 reply = 4;
+ //
+ int32 fav = 5;
+ //
+ int32 coin = 6;
+ //
+ int32 share = 7;
+ //
+ int32 now_rank = 8;
+ //
+ int32 his_rank = 9;
+ //
+ int32 like = 10;
+}
+
+//
+message Space {
+ //
+ string s_img = 1;
+ //
+ string l_img = 2;
+}
+
+//
+message Staff {
+ //
+ int64 mid = 1;
+ //
+ string title = 2;
+ //
+ string name = 3;
+ //
+ string face = 4;
+ //
+ VipInfo vip = 5;
+ //
+ OfficialInfo official = 6;
+ //
+ int64 follower = 7;
+ //
+ int32 label_style = 8;
+ //
+ Relation relation = 9;
+}
+
+//
+message StaffInfo {
+ //
+ int64 mid = 1;
+ //
+ string title = 2;
+}
+
+//
+message Stat {
+ //
+ int64 aid = 1;
+ //
+ int32 view = 2;
+ //
+ int32 danmaku = 3;
+ //
+ int32 reply = 4;
+ //
+ int32 fav = 5;
+ //
+ int32 coin = 6;
+ //
+ int32 share = 7;
+ //
+ int32 now_rank = 8;
+ //
+ int32 his_rank = 9;
+ //
+ int32 like = 10;
+ //
+ int32 dislike = 11;
+ //
+ string evaluation = 12;
+ //
+ string argue_msg = 13;
+}
+
+//
+message Subtitle {
+ //
+ bool allow_submit = 1;
+ //
+ repeated SubtitleItem list = 2;
+}
+
+//
+message SubtitleItem {
+ //
+ int64 id = 1;
+ //
+ string lan = 2;
+ //
+ string lan_doc = 3;
+ //
+ bool is_lock = 4;
+ //
+ int64 author_mid = 5;
+ //
+ string subtitle_url = 6;
+ //
+ AccInfo author = 7;
+}
+
+//
+message Tag {
+ //
+ int64 id = 1;
+ //
+ string name = 2;
+ //
+ string cover = 3;
+ //
+ string head_cover = 4;
+ //
+ string content = 5;
+ //
+ string short_content = 6;
+ //
+ int32 type = 7;
+ //
+ int32 state = 8;
+ //
+ int64 ctime = 9;
+ //
+ TagCount tag_count = 10;
+ //
+ int32 is_atten = 11;
+ //
+ int64 likes = 12;
+ //
+ int64 hates = 13;
+ //
+ int32 attribute = 14;
+ //
+ int32 liked = 15;
+ //
+ int32 hated = 16;
+}
+
+//
+message TagCount {
+ //
+ int64 view = 1;
+ //
+ int64 use = 2;
+ //
+ int64 atten = 3;
+}
+
+//
+message UGCPayAsset {
+ //
+ int64 price = 1;
+ //
+ map platform_price = 2;
+}
+
+//
+message UGCSeason {
+ //
+ int64 id = 1;
+ //
+ string title = 2;
+ //
+ string cover = 3;
+ //
+ int64 mid = 4;
+ //
+ string intro = 5;
+ //
+ int32 sign_state = 6;
+ //
+ int64 attribute = 7;
+ //
+ repeated SeasonSection sections = 8;
+ //
+ SeasonStat stat = 9;
+ //
+ int64 ep_count = 10;
+ //
+ int64 season_type = 11;
+ //
+ bool is_pay_season = 12;
+}
+
+//
+message View {
+ //
+ Arc arc = 1;
+ //
+ bool no_cache = 2;
+ //
+ repeated Page pages = 3;
+ //
+ Subtitle subtitle = 4;
+ //
+ UGCPayAsset asset = 5;
+ //
+ ViewLabel label = 6;
+ //
+ repeated Staff staff = 7;
+ //
+ UGCSeason ugc_season = 8;
+ //
+ int64 stein_guide_cid = 9;
+}
+
+//
+message ViewDetailReply {
+ //
+ View view = 1;
+ //
+ Card card = 2;
+ //
+ repeated Tag tags = 3;
+ //
+ HotReply reply = 4;
+ //
+ repeated Arc related = 5;
+}
+
+//
+message ViewDetailReq {
+ //
+ int64 aid = 1;
+ //
+ string bvid = 2;
+}
+
+//
+message ViewLabel {
+ //
+ int64 type = 1;
+}
+
+//
+message VipInfo {
+ //
+ int32 type = 1;
+ //
+ int32 status = 2;
+ //
+ int32 vip_pay_type = 3;
+ //
+ int32 theme_type = 4;
+}
+
+//
+message VipLabel {
+ //
+ string path = 1;
+}
diff --git a/grpc_api/bilibili/web/space/v1/space.proto b/grpc_api/bilibili/web/space/v1/space.proto
new file mode 100644
index 0000000..911abfe
--- /dev/null
+++ b/grpc_api/bilibili/web/space/v1/space.proto
@@ -0,0 +1,282 @@
+syntax = "proto3";
+
+package bilibili.web.space.v1;
+
+//
+message NoReply {}
+
+//
+message OfficialReply {
+ //
+ int64 id = 1;
+ //
+ int64 uid = 2;
+ //
+ string name = 3;
+ //
+ string icon = 4;
+ //
+ string scheme = 5;
+ //
+ string rcmd = 6;
+ //
+ string ios_url = 7;
+ //
+ string android_url = 8;
+ //
+ string button = 9;
+ //
+ string deleted = 10;
+ //
+ int64 mtime = 11;
+}
+
+//
+message OfficialRequest {
+ //
+ int64 mid = 1;
+}
+
+//
+message PhotoMall {
+ //
+ int64 id = 1;
+ //
+ string name = 2;
+ //
+ string img = 3;
+ //
+ string night_img = 4;
+ //
+ int64 is_activated = 5;
+}
+
+//
+message PhotoMallListReply {
+ //
+ repeated PhotoMall list = 1;
+}
+
+//
+message PhotoMallListReq {
+ //
+ string mobiapp = 1;
+ //
+ int64 mid = 2;
+ //
+ string device = 3;
+}
+
+//
+message PrivacyReply {
+ //
+ map privacy = 1;
+}
+
+//
+message PrivacyRequest {
+ //
+ int64 mid = 1;
+}
+
+//
+message SetTopPhotoReq {
+ //
+ string mobiapp = 1;
+ //
+ int64 i_d = 2;
+ //
+ int64 mid = 3;
+ //
+ int32 type = 4;
+}
+
+//
+message SpaceSettingReply {
+ //
+ int64 channel = 1;
+ //
+ int64 fav_video = 2;
+ //
+ int64 coins_video = 3;
+ //
+ int64 likes_video = 4;
+ //
+ int64 bangumi = 5;
+ //
+ int64 played_game = 6;
+ //
+ int64 groups = 7;
+ //
+ int64 comic = 8;
+ //
+ int64 b_bq = 9;
+ //
+ int64 dress_up = 10;
+ //
+ int64 disable_following = 11;
+ //
+ int64 live_playback = 12;
+ //
+ int64 close_space_medal = 13;
+ //
+ int64 only_show_wearing = 14;
+ //
+ int64 disable_show_school = 15;
+ //
+ int64 disable_show_nft = 16;
+}
+
+//
+message SpaceSettingReq {
+ //
+ int64 mid = 1;
+}
+
+//
+message TopPhoto {
+ //
+ string img_url = 1;
+ //
+ string night_img_url = 2;
+ //
+ int64 sid = 3;
+}
+
+//
+message TopPhotoArc {
+ //
+ bool show = 1;
+ //
+ int64 aid = 2;
+ //
+ string pic = 3;
+}
+
+//
+message TopPhotoArcCancelReq {
+ //
+ int64 mid = 1;
+}
+
+//
+message TopPhotoReply {
+ //
+ TopPhoto top_photo = 1;
+ //
+ TopPhotoArc top_photo_arc = 2;
+}
+
+//
+message TopPhotoReq {
+ //
+ string mobiapp = 1;
+ //
+ int64 mid = 2;
+ //
+ int32 build = 3;
+ //
+ string device = 4;
+ //
+ int64 login_mid = 5;
+}
+
+//
+enum TopPhotoType {
+ UNKNOWN = 0; //
+ PIC = 1; //
+ ARCHIVE = 2; //
+}
+
+//
+message UpActivityTabReq {
+ //
+ int64 mid = 1;
+ //
+ int32 state = 2;
+ //
+ int64 tab_cont = 3;
+ //
+ string tab_name = 4;
+}
+
+//
+message UpActivityTabResp {
+ //
+ bool success = 1;
+}
+
+//
+message UpRcmdBlackListReply {}
+
+//
+message UserTabReply {
+ //
+ int32 tab_type = 1;
+ //
+ int64 mid = 2;
+ //
+ string tab_name = 3;
+ //
+ int32 tab_order = 4;
+ //
+ int64 tab_cont = 5;
+ //
+ int32 is_default = 6;
+ //
+ string h5_link = 7;
+}
+
+//
+message UserTabReq {
+ //
+ int64 mid = 1;
+ //
+ int32 plat = 2;
+ //
+ int32 build = 3;
+}
+
+//
+message WhitelistAddReply {
+ //
+ bool add_ok = 1;
+}
+
+//
+message WhitelistAddReq {
+ //
+ int64 mid = 1;
+ //
+ int64 stime = 2;
+ //
+ int64 etime = 3;
+}
+
+//
+message WhitelistReply {
+ //
+ bool is_white = 1;
+}
+
+//
+message WhitelistReq {
+ //
+ int64 mid = 1;
+}
+
+//
+message WhitelistUpReply {
+ //
+ bool up_ok = 1;
+}
+
+//
+message WhitelistValidTimeReply {
+ //
+ bool is_white = 1;
+ //
+ int64 stime = 2;
+ //
+ int64 etime = 3;
+}
diff --git a/grpc_api/datacenter/hakase/protobuf/android_device_info.proto b/grpc_api/datacenter/hakase/protobuf/android_device_info.proto
new file mode 100644
index 0000000..f9aab95
--- /dev/null
+++ b/grpc_api/datacenter/hakase/protobuf/android_device_info.proto
@@ -0,0 +1,268 @@
+syntax = "proto3";
+
+package datacenter.hakase.protobuf;
+
+message AndroidDeviceInfo {
+ // ?
+ string sdkver = 1;
+ // 产品id
+ // 粉 白 蓝 直播姬 HD 海外 OTT 漫画 TV野版 小视频 网易漫画 网易漫画 网易漫画HD 国际版 东南亚版
+ // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 30
+ string app_id = 2;
+ // 版本号, 如 "7.39.0"
+ string app_version = 3;
+ // 版本号, 如 "7390300"
+ string app_version_code = 4;
+ // 用户 mid
+ string mid = 5;
+ // 渠道号, 如 "master"
+ string chid = 6;
+ // APP 首次安装启动时间戳
+ int64 fts = 7;
+ // 此处实际为 fp, 但不知为何命名为 buvid_local
+ string buvid_local = 8;
+ // 留空为 0
+ int32 first = 9;
+ // 进程名, 如 "tv.danmaku.bili"
+ string proc = 10;
+ // 网络信息, 为一数组直接 toString() 的结果
+ // 如 """["dummy0,fe80::18d8:6ff:fe46:c2ba%dummy0,", "wlan0,fe80::a0f4:6dff:fea8:2d37%wlan0,192.168.1.5,", "lo,::1,127.0.0.1,", "rmnet_ims00,fe80::5a02:3ff:fe04:512%rmnet_ims00,2409:815a:7c38:cee1:1773:d0b9:d163:b023,"]"""
+ string net = 11;
+ // 手机无线电固件版本号(`Build.getRadioVersion()`). 如 `21C20B686S000C000,21C20B686S000C000`.
+ string band = 12;
+ // OS 版本号, 如 "12"
+ string osver = 13;
+ // 当前毫秒时间戳
+ int64 t = 14;
+ // CPU 逻辑核心计数
+ int32 cpu_count = 15;
+ // 手机 Model, 如 "NOH-AN01"
+ string model = 16;
+ // 手机品牌, 如 "HUAWEI"
+ string brand = 17;
+ // 屏幕信息, 如 "1288,2646,560", 即 "{width},{height},{pixel}"
+ string screen = 18;
+ // CPU 型号, 留空或根据实际情况确定
+ string cpu_model = 19;
+ // 蓝牙 MAC, 留空或根据实际情况确定
+ string btmac = 20;
+ // Linux 内核 bootid
+ int64 boot = 21;
+ // 模拟器(?), 如 "000"
+ string emu = 22;
+ // 移动网络 MCC MNC, 如中国移动为 46007
+ string oid = 23;
+ // 当前网络类型, 如 "WIFI", 见 bilibili.metadata.network.NetworkType
+ string network = 24;
+ // 运行内存(Byte)
+ int64 mem = 25;
+ // 传感器信息, 为一数组直接 toString() 的结果
+ // 如 """["accelerometer-icm20690,invensense", "akm-akm09918,akm", "orientation,huawei", "als-tcs3718,ams", "proximity-tcs3718,ams", "gyroscope-icm20690,invensense", "gravity,huawei", "linear Acceleration,huawei", "rotation Vector,huawei", "airpress-bmp280,bosch", "HALL sensor,huawei", "uncalibrated Magnetic Field,Asahi Kasei Microdevices", "game Rotation Vector,huawei", "uncalibrated Gyroscope,STMicroelectronics", "significant Motion,huawei", "step Detector,huawei", "step counter,huawei", "geomagnetic Rotation Vector,huawei", "phonecall sensor,huawei", "RPC sensor,huawei", "agt,huawei", "color sensor,huawei", "uncalibrated Accelerometer,huawei", "drop sensor,huawei"]"""
+ string sensor = 26;
+ // CPU 频率, 如 2045000
+ int64 cpu_freq = 27;
+ // CPU 架构, 如 "ARM"
+ string cpu_vendor = 28;
+ // ?
+ string sim = 29;
+ // 光照传感器数值
+ int32 brightness = 30;
+ // Android Build.prop 信息, key 包括 net.hostname, ro.boot.hardware, etc.
+ // 具体 key-value 需要技术手段自行确定
+ map props = 31;
+ // 系统信息, key 包括 product, cpu_model_name, display, cpu_abi_list, etc.
+ // 具体 key-value 需要技术手段自行确定
+ map sys = 32;
+ // Wifi MAC, 一般无法获取, 留空
+ string wifimac = 33;
+ // Android ID
+ string adid = 34;
+ // OS 名称, 如 "android"
+ string os = 35;
+ // IMEI, 一般无法获取, 留空
+ string imei = 36;
+ // ?, 留空
+ string cell = 37;
+ // IMSI, 一般无法获取, 留空
+ string imsi = 38;
+ // ICCID, 一般无法获取, 留空
+ string iccid = 39;
+ // 摄像头数量, 留空
+ int32 camcnt = 40;
+ // 摄像头像素, 留空
+ string campx = 41;
+ // 手机内置存储空间(Byte)
+ int64 total_space = 42;
+ // ?, 例如 "false"
+ string axposed = 43;
+ // ?, 留空
+ string maps = 44;
+ // 如: "/data/user/0/tv.danmaku.bili/files"
+ string files = 45;
+ // 是否为虚拟化(?), 如 "0"
+ string virtual = 46;
+ // 虚拟进程, 如 "[]"
+ string virtualproc = 47;
+ // ?, 留空
+ string gadid = 48;
+ // ?, 留空
+ string glimit = 49;
+ // 设备安装的 APP 列表, 如 "[]"
+ string apps = 50;
+ // 客户端 GUID
+ string guid = 51;
+ // ?, 区分于用户 UID
+ string uid = 52;
+ // ?, 留空
+ int32 root = 53;
+ // 摄像头放大倍数(?), 留空
+ string camzoom = 54;
+ // 摄像头闪光灯(?), 留空
+ string camlight = 55;
+ // OAID 匿名设备标识符, 参见 T/TAF 095-2021 安卓系统补充设备标识技术规范, 默认 "00000000-0000-0000-0000-000000000000"
+ string oaid = 56;
+ // UDID 设备唯一标识符, 参见 T/TAF 095-2021 安卓系统补充设备标识技术规范, 可留空
+ string udid = 57;
+ // VAID 开发者匿名设备标识符, 参见 T/TAF 095-2021 安卓系统补充设备标识技术规范, 可留空
+ string vaid = 58;
+ // AAID, 应用匿名设备标识符, 参见 T/TAF 095-2021 安卓系统补充设备标识技术规范, 可留空
+ string aaid = 59;
+ // ?, 设置为 "[]"
+ string androidapp20 = 60;
+ // ?, 留空
+ int32 androidappcnt = 61;
+ // ?, 设置为 "[]"
+ string androidsysapp20 = 62;
+ // 当前剩余电量, 如 100
+ int32 battery = 63;
+ // Android 监听电量状态, 如 "BATTERY_STATUS_DISCHARGING"
+ string battery_state = 64;
+ // Wifi BSSID, 一般无法获取, 留空
+ string bssid = 65;
+ // ?, 如 "NOH-AN01 4.0.0.102(DEVC00E100R7P5)"
+ string build_id = 67;
+ // ISO 国家代码, 如 "CN"
+ string country_iso = 68;
+ // 可用运行内存(Byte)
+ int64 free_memory = 70;
+ // 可用内置存储空间(Byte)
+ string fstorage = 71;
+ // Linux kernel version
+ string kernel_version = 74;
+ // 语言, 如 "zh"
+ string languages = 75;
+ // Wifi 网卡 MAC(?), 留空
+ string mac = 76;
+ // 当前连接 Wifi 的 SSID, 留空
+ string ssid = 79;
+ // ?, 留空
+ int32 systemvolume = 80;
+ // Wifi 网卡 MAC 列表(?), 留空
+ string wifimaclist = 81;
+ // 运行内存(Byte)
+ int64 memory = 82;
+ // 当前剩余电量, 如 "100"
+ string str_battery = 83;
+ // 设备是否 Root(?), 留空
+ bool is_root = 84;
+ // 光照传感器数值字符串
+ string str_brightness = 85;
+ // 产品id, 见 2
+ string str_app_id = 86;
+ // 当前 IP(?), 留空
+ string ip = 87;
+ // 留空即可
+ string user_agent = 88;
+ // ?, 如: "1.25"
+ string light_intensity = 89;
+ // 设备 xyz 方向角度
+ repeated float device_angle = 90;
+ // GPS 传感器数量(或者是否有 GPS 传感器?), 如 "1"
+ int64 gps_sensor = 91;
+ // 速度传感器数量(或者是否有速度传感器?), 如 "1"
+ int64 speed_sensor = 92;
+ // 线性加速度传感器数量(或者是否有线性加速度传感器?), 如 "1"
+ int64 linear_speed_sensor = 93;
+ // 陀螺仪传感器数量(或者是否有陀螺仪传感器?), 如 "1"
+ int64 gyroscope_sensor = 94;
+ // 生物识别传感器数量(或者是否有生物识别传感器?), 如 "1"
+ int64 biometric = 95;
+ // 生物识别传感器类型(?), 如 "touchid"
+ repeated string biometrics = 96;
+ // 上次 Crash Dump 时的毫秒时间戳
+ int64 last_dump_ts = 97;
+ // 留空即可
+ string location = 98;
+ // 留空即可
+ string country = 99;
+ // 留空即可
+ string city = 100;
+ // ?, 默认为 0
+ int32 data_activity_state = 101;
+ // ?, 默认为 0
+ int32 data_connect_state = 102;
+ // ?, 默认为 0
+ int32 data_network_type = 103;
+ // ?, 默认为 0
+ int32 voice_network_type = 104;
+ // ?, 默认为 0
+ int32 voice_service_state = 105;
+ // USB 是否连接, 启用为 "1", 否则为 "0"
+ int32 usb_connected = 106;
+ // ADB 是否启用, 启用为 "1", 否则为 "0"
+ int32 adb_enabled = 107;
+ // 系统 UI 软件版本(?), 如 "14.0.0"
+ string ui_version = 108;
+ // 辅助服务
+ repeated string accessibility_service = 109;
+ // 传感器信息(需要和前面的 sensor 对应)
+ repeated SensorInfo sensors_info = 110;
+ // DrmId
+ string drmid = 111;
+ // 是否存在电池
+ bool battery_present = 112;
+ // 电池技术, 如 "Li-poly"
+ string battery_technology = 113;
+ // 电池温度(m℃)
+ int32 battery_temperature = 114;
+ // 电池电压(mV)
+ int32 battery_voltage = 115;
+ // 电池是否被拔开(?), 可以为 0
+ int32 battery_plugged = 116;
+ // 电池健康, 如 2
+ int32 battery_health = 117;
+ // 留空即可
+ repeated string cpu_abi_list = 118;
+ // 留空即可
+ string cpu_abi_libc = 119;
+ // 留空即可
+ string cpu_abi_libc64 = 120;
+ // 留空即可
+ string cpu_processor = 121;
+ // 留空即可
+ string cpu_model_name = 122;
+ // 留空即可
+ string cpu_hardware = 123;
+ // 留空即可
+ string cpu_features = 124;
+}
+
+// 传感器信息
+message SensorInfo {
+ // 传感器名称, 如 "rotation Vector"
+ string name = 1;
+ // 制造商
+ string vendor = 2;
+ //
+ int32 version = 3;
+ //
+ int32 type = 4;
+ //
+ float max_range = 5;
+ //
+ float resolution = 6;
+ // 耗电量(mA)
+ float power = 7;
+ //
+ int32 min_delay = 8;
+}
diff --git a/grpc_api/pgc/gaetway/vega/v1/vega.proto b/grpc_api/pgc/gateway/vega/v1/vega.proto
similarity index 88%
rename from grpc_api/pgc/gaetway/vega/v1/vega.proto
rename to grpc_api/pgc/gateway/vega/v1/vega.proto
index 10d22ab..7e76394 100644
--- a/grpc_api/pgc/gaetway/vega/v1/vega.proto
+++ b/grpc_api/pgc/gateway/vega/v1/vega.proto
@@ -2,6 +2,7 @@ syntax = "proto3";
package pgc.gateway.vega.v1;
+import "bilibili/rpc/status.proto";
import "google/protobuf/any.proto";
import "google/protobuf/empty.proto";
@@ -24,14 +25,10 @@ service VegaFrameDoc {
}
//
-message AuthReq {
-
-}
+message AuthReq {}
//
-message AuthResp {
-
-}
+message AuthResp {}
//
message FrameOption {
@@ -44,7 +41,7 @@ message FrameOption {
//
bool is_ack = 4;
//
- Status status = 5;
+ bilibili.rpc.Status status = 5;
//
string ack_origin = 6;
//
@@ -52,14 +49,10 @@ message FrameOption {
}
//
-message HeartbeatReq {
-
-}
+message HeartbeatReq {}
//
-message HeartbeatResp {
-
-}
+message HeartbeatResp {}
//
message MessageAckReq {
diff --git a/grpc_api/readme.md b/grpc_api/readme.md
index 96d75a3..b388543 100644
--- a/grpc_api/readme.md
+++ b/grpc_api/readme.md
@@ -1,34 +1,149 @@
-# grpc接口定义(protobuf结构体)
+# gRPC 接口定义(protobuf 结构体)
注:
-1. proto结构体文件按照包名分类,同级放在同一目录中
+1. proto 结构体文件按照包名分类, 同级放在同一目录中
-2. 暂时无说明文档,稍后添加
+2. gRPC 接口定义全部来自对官方粉版(即大陆版本) APP 的逆向工程, 一般不会有错误, 但是可能有更新, 有实际应用需求的建议自行反编译 APP, 定位到 `com.bapis.*` 自行补足.
-3. 以下文件全部来自apk的逆向工程,如有疏漏请包涵
+## gRPC 主机
-## grpc主机
+B 站客户端的 gRPC 接口主机包括:
-B站客户端的grpc接口主机为以下服务器
++ `grpc.biliapi.net` 原生 gRPC 接口
++ `app.bilibili.com` Failover gRPC 接口
-> grpc.biliapi.net
->
-> app.bilibili.com
+实际应用中, 后者速度相对更快. 但是需要设置如 gRPC 超时时间等参数时只能使用前者.
-## grpc鉴权
+## gRPC 鉴权
-需要在请求http头部中添加`access_key`,如下
+需要在 Metadata 中添加 `authorization`: `identify_v1 {access_key}`.
-```
-authorization:identify_v1 {access_key}
-```
+## gRPC Metadata
-## grpc头部
+参考 [gRPC Go 官方文档](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md) 对 `Metadata` 的说明.
+
+gRPC 的 `Metadata` 简单理解,就是 HTTP 的 Header 中的 key-value 对, 本质上是一个 Map. 在 gRPC `Metadata` 中,key 永远是 String,但是 value 可以是 String 也可以是二进制数据. **需要存储二进制数据时, key 应当加上一个 `-bin` 后缀, 同时二进制 value 应当编码为 Base64**.
+
+一般而言, 设定 Binary 类型的 `Metadata` 时, 需要调用各个语言的 gRPC 库的相应方法, 库会帮我们编码二进制数据, 无需我们自行编码.
+
+需要的 `Metadata` 包括(但不限于):
+
++ Ascii 类
+ + `user-agent` 客户端 UA, 如 `Dalvik/2.1.0 (Linux; U; Android 12; {device_model} Build/{device_build}) {app_ver} os/android model/{device_model} mobi_app/{mobi_app} build/{app_build} channel/master innerVer/{app_build_inner} osVer/12 network/2 grpc-java-cronet/1.36.1`(其中 `grpc-java-cronet/1.36.1` 为原生 gRPC 接口才需要的). **必需**.
+ + `device_model` 设备 Model, 如 `NOH-AN01`.
+ + `device_build` 设备 Build, 如 `HUAWEINOH-AN01`.
+ + `app_ver` APP 版本号, 如 `7.38.0`.
+ + `mobi_app` APP 包类型, 参考 [APPKey.md](/docs/misc/sign/APPKey.md).
+ + `app_build` APP 版本号, 如 `7380300`.
+ + `app_build_inner` APP 版本号(内部), 如 `7380310`. 实际应用中设置为 `app_build` 即可.
+ + `x-bili-gaia-vtoken` 暂时留空.
+ + `x-bili-aurora-eid` 如 `UFUFQ1AA`. 算法见附录. 未登录留空. **必需**.
+ + `x-bili-mid` 用户 UID, 未登录默认为 0. **必需**.
+ + `x-bili-aurora-zone` 留空. **必需**.
+ + `x-bili-trace-id` 如 `06e903399574695df75be114ff63ac64:f75be114ff63ac64:0:0`. 算法见附录. **必需**.
+ + `authorization` 鉴权, 登录时设定为 `identify_v1 {access_key}`, 未登录时无需此项.
+ + `buvid` 设备唯一标识, 算法见 [device_identity.md](/docs/misc/device_identity.md). **必需(?)**.
+ + `bili-http-engine` 恒定为 `cronet`, 使用 `grpc.biliapi.net` 作为 gRPC 主机时无需此项.
+ + `te` 恒定为 `trailers`, Java gRPC 库固定添加, 使用 `app.bilibili.com` 作为 gRPC 主机时无需此项.
++ Binary 类
+ + `x-bili-fawkes-req-bin` 设备 Fawkes 信息, 使用 [FawkesReq](bilibili/metadata/fawkes/fawkes.proto) 生成. **必需**.
+ + `x-bili-metadata-bin` 使用 [Metadata](bilibili/metadata/metadata.proto) 生成. **必需**.
+ + `x-bili-device-bin` 设备信息, 使用 [Device](bilibili/metadata/device/device.proto) 生成. **必需**.
+ + `x-bili-network-bin` 设备网络信息, 使用 [Network](bilibili/metadata/network/network.proto) 生成. **必需**.
+ + `x-bili-restriction-bin` 限制信息, 使用 [Restriction](bilibili/metadata/restriction/restriction.proto) 生成. 本项一般直接传空值即可. **必需**.
+ + `x-bili-locale-bin` 设备区域信息, 使用 [Locale](bilibili/metadata/locale/locale.proto) 生成. **必需**.
+ + `x-bili-exps-bin` 使用 [Exps](bilibili/metadata/pararbox/pararbox.proto) 生成. 本项一般直接传空值即可. **必需**.
-- [bilibili.metadata](bilibili/metadata):客户端环境参数
-- [bilibili.rpc](bilibili/rpc/status.proto):响应错误信息
## 接口请求定义
-*稍后补充*
\ No newline at end of file
+等待补充, 参见 proto 文件注释. 以下仅介绍常用接口:
+
++ [bilibili.app.playeronline.v1 -> PlayerOnline](bilibili/app/playeronline/v1/playeronline.proto) 视频在线人数接口.
++ [bilibili.app.playerunite.v1 -> PlayViewUnite](bilibili/app/playerunite/v1/playerunite.proto) United 视频播放链接接口(同时适用于 PGC, UGC 视频).
++ [bilibili.app.playurl.v1 -> PlayURL](bilibili/app/playurl/v1/playurl.proto) UGC 视频播放链接接口(V1 版本).
++ [bilibili.pgc.gateway.player.v1 -> PlayView](bilibili/pgc/gateway/player/v1/playurl.proto) PGC 视频播放链接接口(V1 版本).
++ [bilibili.pgc.gateway.player.v2 -> PlayView](bilibili/pgc/gateway/player/v2/playurl.proto) PGC 视频播放链接接口(V2 版本).
++ [bilibili.polymer.app.search.v1 -> SearchAll, etc](bilibili/polymer/app/search/v1/search.proto) 搜索接口(V1 版本).
++ [bilibili.app.dynamic.v2 -> DynAll, etc](bilibili/app/dynamic/v2/dynamic.proto) 动态接口(V2 版本).
++ ...
+
+## 应用示例
+
+### Golang
+
+B 站 gRPC API Golang 封装:[XiaoMiku01/bilibili-grpc-api-go](https://github.com/XiaoMiku01/bilibili-grpc-api-go)
+
+## 附录
+
+
+点此展开
+
+### `x-bili-aurora-eid` 生成算法
+
+```rust
+pub fn gen_aurora_eid(uid: u64) -> Option {
+ if uid == 0 {
+ return None;
+ }
+ let mut result_byte = Vec::with_capacity(64);
+ // 1. 将 UID 字符串转为字节数组.
+ let mid_byte = uid.to_string().into_bytes();
+ // 2. 将字节数组逐位(记为第 i 位)与 b"ad1va46a7lza" 中第 (i % 12) 位进行异或操作, 作为结果数组第 i 位.
+ mid_byte.iter().enumerate().for_each(|(i, v)| {
+ result_byte.push(v ^ (b"ad1va46a7lza"[i % 12]))
+ });
+ // 3. 对字节数组执行 Base64 编码, 注意 no padding, 即得到 x-bili-aurora-eid.
+ Some(base64::Engine::encode(
+ &base64::engine::general_purpose::STANDARD_NO_PAD,
+ result_byte,
+ ))
+}
+```
+
+### `x-bili-trace-id` 生成算法
+
+```rust
+pub fn gen_trace_id() -> String {
+ // 1. 生成 32 位随机字符串 random_id , Charset 为 0~9, a~z.
+ let random_id = gen_random_string!(32);
+ let mut random_trace_id = String::with_capacity(40);
+ // 2. 取 random_id 前 24 位, 作为 random_trace_id.
+ random_trace_id.push_str(&random_id[0..24]);
+ // 3. 初始化一个长度为 3 的数组 b_arr, 初始值都为 0.
+ let mut b_arr: [i8; 3] = [0i8; 3];
+ // 并获取当前时间戳
+ let mut ts = chrono::Local::now().timestamp();
+ // 使用循环从高位到低位遍历 b_arr 数组, 循环体内执行以下逻辑:
+ // - 首先将 ts 右移 8 位
+ // - 然后根据条件向 b_arr 的第 i 位赋值:
+ // - 如果 (ts / 128) % 2的结果为0, 则 b_arr[i] = ts % 256
+ // - 否则 b_arr[i] = ts % 256 - 256
+ for i in (0..3).rev() {
+ ts >>= 8;
+ b_arr[i] = {
+ if ((ts / 128) % 2) == 0 {
+ (ts % 256) as i8
+ } else {
+ (ts % 256 - 256) as i8
+ }
+ }
+ }
+ // 4. 将数组 b_arr 中的每个元素逐个转换为两位的十六进制字符串并追加到 random_trace_id 中.
+ for i in 0..3 {
+ random_trace_id.push_str(&format!("{:0>2x}", b_arr[i]))
+ }
+ // 5. 将 random_id 的第 31, 32 个字符追加到 random_trace_id 中, 此时 random_trace_id 生成完毕, 应当为 32 位长度.
+ random_trace_id.push_str(&random_id[30..32]);
+ // 6. 最后, 按 `{random_trace_id}:{random_trace_id[16..32]}:0:0` 的顺序拼接起来, 即为 x-bili-trace-id
+ let mut random_trace_id_final = String::with_capacity(64);
+ random_trace_id_final.push_str(&random_trace_id);
+ random_trace_id_final.push_str(":");
+ random_trace_id_final.push_str(&random_trace_id[16..32]);
+ random_trace_id_final.push_str(":0:0");
+ random_trace_id_final
+}
+```
+
+
diff --git a/imgs/bili_icon1.woff b/imgs/bili_icon1.woff
deleted file mode 100644
index c59194f..0000000
Binary files a/imgs/bili_icon1.woff and /dev/null differ
diff --git a/imgs/bili_icon2.woff2 b/imgs/bili_icon2.woff2
deleted file mode 100644
index 6930ed4..0000000
Binary files a/imgs/bili_icon2.woff2 and /dev/null differ
diff --git a/imgs/bili_icon3.woff2 b/imgs/bili_icon3.woff2
deleted file mode 100644
index dfa8160..0000000
Binary files a/imgs/bili_icon3.woff2 and /dev/null differ
diff --git a/imgs/up_face.jpg b/imgs/up_face.jpg
deleted file mode 100644
index 26b579c..0000000
Binary files a/imgs/up_face.jpg and /dev/null differ
diff --git a/live/info.md b/live/info.md
deleted file mode 100644
index 100d535..0000000
--- a/live/info.md
+++ /dev/null
@@ -1,425 +0,0 @@
-# 直播间基本信息
-
-- [直播间基本信息](#直播间基本信息)
- - [获取用户对应的直播间状态](#获取用户对应的直播间状态)
- - [获取房间页初始化信息](#获取房间页初始化信息)
- - [获取主播信息](#获取主播信息)
- - [批量查询直播间状态](#批量查询直播间状态)
-
----
-
-## 获取用户对应的直播间状态
-
-> http://api.live.bilibili.com/room/v1/Room/getRoomInfoOld
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| mid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------------- | ---- | ---------------- | ------------------------ |
-| roomStatus | num | 直播间状态 | 0:无房间 1:有房间 |
-| roundStatus | num | 轮播状态 | 0:未轮播 1:轮播 |
-| liveStatus | num | 直播状态 | 0:未开播 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 'http://api.live.bilibili.com/room/v1/Room/getRoomInfoOld' \
---data-urlencode 'mid=322892'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "roomStatus": 1,
- "roundStatus": 0,
- "liveStatus": 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
- }
-}
-```
-
-
-
-## 获取房间页初始化信息
-
-> http://api.live.bilibili.com/room/v1/Room/room_init
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| id | num | 目标直播间号(短号) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 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:未开播 1:直播中 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:普通直播间 1:付费直播间 |
-| special_type | num | 特殊直播间标志 | 0:普通直播间 1:付费直播间 2:拜年祭直播间 |
-
-**示例:**
-
-查询直播间`id=76`的直播间信息
-
-```shell
-curl -G 'http://api.live.bilibili.com/room/v1/Room/room_init' \
---data-urlencode 'id=76'
-```
-
-
-查看响应示例:
-
-```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
- }
-}
-```
-
-
-
-## 获取主播信息
-
-> http://api.live.bilibili.com/live_user/v1/Master/info
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| uid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------ |
-| code | num | 返回值 | 0:成功 1:参数错误 |
-| msg | str | 错误信息 | 默认为空 |
-| message | str | 错误信息 | 默认为空 |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------------- | ---- | ---------------- | ---------------- |
-| info | obj | 主播信息 | |
-| exp | obj | 经验等级 | |
-| follower_num | num | 主播粉丝数 | |
-| room_id | num | 直播间id(短号) | |
-| medal_name | str | 粉丝勋章名 | |
-| glory_count | int | 主播荣誉数 | |
-| pendant | str | 直播间头像框url | |
-| link_group_num | int | 0 | **作用尚不明确** |
-| room_news | obj | 主播公告 | |
-
-`info`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ---- | ----------- | ------------------------------ |
-| uid | num | 主播mid | |
-| uname | str | 主播用户名 | |
-| face | str | 主播头像url | |
-| official_verify | obj | 认证信息 | |
-| gender | num | 主播性别 | -1:保密 0:女 1:男 |
-
-`info`中的`official_verify`对象:
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------ | ---------------------------------------- |
-| type | num | 主播认证类型 | -1:无 0:个人认证 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 'http://api.live.bilibili.com/live_user/v1/Master/info' \
---data-urlencode 'uid=2'
-```
-
-
-查看响应示例:
-
-```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": ""
- }
- }
-}
-```
-
-
-
-## 批量查询直播间状态
-
-> http://api.live.bilibili.com/room/v1/Room/get_status_info_by_uids
-
-*请求方式:POST*
-
-认证方式:无,请不要在标头中添加cookie。
-
-
-**正文参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ |
-| uids | array | 要查询的主播mid | 必要 | |
-
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -111:csrf校验失败 |
-| message | str | 错误信息 | 默认为success |
-| msg | str | 错误信息 | 默认为success |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ---- | -------- | ------------ |
-| uid | str | 直播间信息 | 实际字段为主播mid |
-
-`uid`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ---- | -------- | ------------ |
-| 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 | 直播间父分区名 | |
-| broadcast_type | num | 直播类型 | 0:普通直播,1:手机直播 |
-| cover_from_user | str | 直播间封面url | |
-| face | str | 主播头像url | |
-| hidden_till | str | 直播间隐藏信息 | |
-| keyframe | str | 直播间关键帧url | |
-| live_status | num | 直播间开播状态 | 0:未开播,1:正在直播,2:轮播中 |
-| live_time | num | 直播持续时长 | |
-| lock_till | str | 直播间封禁信息 | |
-| online | num | 直播间在线人数 | |
-| room_id | num | 直播间房间号 | 直播间实际房间号 |
-| short_id | num | 直播间房间号 | 直播间短房间号,常见于签约主播 |
-| tag_name | str | 直播间标签 | |
-| tags | str | 直播间自定标签 | |
-| title | str | 直播间标题 | |
-| uid | num | 主播mid | |
-| uname | str | 主播用户名 | |
-
-**示例:**
-
-查询用户`mid=194484313`的直播间信息
-
-```shell
-curl https://api.live.bilibili.com/room/v1/Room/get_status_info_by_uids \
--H "Content-Type: application/json" \
--d "{\"uids\": [194484313]}"
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "msg": "success",
- "message": "success",
- "data": {
- "194484313": {
- "title": "中元节可爱鬼来喽!",
- "room_id": 6154037,
- "uid": 194484313,
- "online": 955261,
- "live_time": 0,
- "live_status": 2,
- "short_id": 732,
- "area": 1,
- "area_name": "单机联机",
- "area_v2_id": 236,
- "area_v2_name": "主机游戏",
- "area_v2_parent_name": "单机游戏",
- "area_v2_parent_id": 6,
- "uname": "Asaki大人",
- "face": "https://i1.hdslb.com/bfs/face/e8f57fd6992f7d2ef6e6bcee957fb6cf6bca3d80.jpg",
- "tag_name": "以撒,minecraft,饥荒,彩虹六号,东方",
- "tags": "",
- "cover_from_user": "https://i0.hdslb.com/bfs/live/new_room_cover/0a0a8eb5bd7fb64a036b55c748f02ad79a210ec9.jpg",
- "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe0823020500000615403721k8sp.jpg",
- "lock_till": "0000-00-00 00:00:00",
- "hidden_till": "0000-00-00 00:00:00",
- "broadcast_type": 0
- }
- }
-}
-
-```
-
-
diff --git a/live/manage.md b/live/manage.md
deleted file mode 100644
index 2742d0a..0000000
--- a/live/manage.md
+++ /dev/null
@@ -1,266 +0,0 @@
-# 直播间管理
-
-- [更新直播间标题](#更新直播间标题)
-- [开始直播](#开始直播)
-- [关闭直播](#关闭直播)
-
----
-
-## 更新直播间标题
-
-> http://api.live.bilibili.com/room/v1/Room/update
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-鉴权方式: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:成功 65530:token错误(登录错误) 1:错误 |
-| msg | str | 错误信息 | 默认为ok |
-| message | str | 错误信息 | 默认为ok |
-| data | array | 空 | |
-
-**示例:**
-
-修改直播间`10352053`标题为`测试`
-
-```shell
-curl 'http://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'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "msg": "ok",
- "message": "ok",
- "data": []
-}
-```
-
-
-
-## 开始直播
-
-> http://api.live.bilibili.com/room/v1/Room/startLive
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-鉴权方式: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端: bililink:android_link |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 65530:token错误(登录错误) 1:错误 60009:分区不存在 **(其他错误码有待补充)** |
-| msg | str | 错误信息 | 默认为空 |
-| message | str | 错误信息 | 默认为空 |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------- | ----- | ---------------- | ---------------------- |
-| change | num | 是否改变状态 | 0:未改变 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 'http://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'
-```
-
-
-查看响应示例:
-
-```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": ""
- }
- }
-}
-```
-
-
-
-## 关闭直播
-
-> http://api.live.bilibili.com/room/v1/Room/stopLive
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-鉴权方式:Cookie中`bili_jct`的值正确并与`csrf`相同
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------- | ---- | ------------------------ | ------ | -------------------- |
-| room_id | num | 直播间id | 必要 | 必须为自己的直播间id |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 65530:token错误(登录错误) -400:没有权限 **(其他错误码有待补充)** |
-| msg | str | 错误信息 | 默认为空 |
-| message | str | 错误信息 | 默认为空 |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ---- | ------------ | ---------------------- |
-| change | num | 是否改变状态 | 0:未改变 1:改变 |
-| status | str | PREPARING | |
-
-**示例:**
-
-关闭直播间`10352053`的直播
-
-```shell
-curl 'http://api.live.bilibili.com/room/v1/Room/stopLive' \
---data-urlencode 'room_id=10352053' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx;bili_jct=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "msg": "",
- "message": "",
- "data": {
- "change": 1,
- "status": "PREPARING"
- }
-}
-```
-
-
diff --git a/live/message_stream.md b/live/message_stream.md
deleted file mode 100644
index 9e7fb1f..0000000
--- a/live/message_stream.md
+++ /dev/null
@@ -1,536 +0,0 @@
-# 直播间信息流
-
-- [获取信息流认证秘钥](#获取信息流认证秘钥)
-
----
-
-## 获取信息流认证秘钥
-
-> http://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------ | ------ | ---- |
-| id | num | 直播间真实id | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 65530:token错误(登录错误) 1:错误 60009:分区不存在 **(其他错误码有待补充)** |
-| message | str | 错误信息 | 默认为空 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------------ | ----- | ------------------- | ---- |
-| group | str | live | |
-| business_id | num | 0 | |
-| refresh_row_factor | num | 0.125 | |
-| refresh_rate | num | 100 | |
-| max_delay | num | 5000 | |
-| token | str | 认证秘钥 | |
-| host_list | array | 信息流服务器节点列表 | |
-
-`host_list`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ---- | ---------- | ---- |
-| host | str | 服务器域名 | |
-| port | num | tcp端口 | |
-| wss_port | num | wss端口 | |
-| ws_port | num | ws端口 | |
-
-**示例:**
-
-获得直播间`22824550`的信息流认证秘钥
-
-```shell
-curl -G 'http://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo' \
---data-urlencode 'id=22824550'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "group": "live",
- "business_id": 0,
- "refresh_row_factor": 0.125,
- "refresh_rate": 100,
- "max_delay": 5000,
- "token": "Eac3Lm1JADzny-YnB5MW0MQcd23rw_mgMFZAnu40I-J2ecP2Qj6CH-UqjdfvwiqVEZcEksG1ONSOi1dGzm0wM4FxqA-ZYXtcQyHXPXqxmrx3AmDx8Z5-d4TuKQkaU0zxevH1B-gnu7g8TDtIE4lns4BYlw==",
- "host_list": [
- {
- "host": "tx-sh-live-comet-02.chat.bilibili.com",
- "port": 2243,
- "wss_port": 443,
- "ws_port": 2244
- },
- {
- "host": "tx-bj-live-comet-02.chat.bilibili.com",
- "port": 2243,
- "wss_port": 443,
- "ws_port": 2244
- },
- {
- "host": "broadcastlv.chat.bilibili.com",
- "port": 2243,
- "wss_port": 443,
- "ws_port": 2244
- }
- ]
- }
-}
-```
-
-
-
-## 数据包格式
-
-数据包为MQ(消息队列)使用websocket或tcp作为通道,具体格式为头部数据+正文数据
-
-操作流程:
-
-发送认证包->接收认证包回应->接收普通包&(每30秒发送心跳包->接收心跳回应)
-
-头部格式:
-
-| 偏移量 | 长度 | 类型 | 含义 |
-| ------ | ---- | ------ | ------------------------------------------------------------ |
-| 0 | 4 | uint32 | 封包总大小(头部大小+正文大小) |
-| 4 | 2 | uint16 | 头部大小(一般为0x0010,16字节) |
-| 6 | 2 | uint16 | 协议版本: 0普通包正文不使用压缩 1心跳及认证包正文不使用压缩 2普通包正文使用zlib压缩 3普通包正文使用brotli压缩,解压为一个带头部的协议0普通包 |
-| 8 | 4 | uint32 | 操作码(封包类型) |
-| 12 | 4 | uint32 | sequence,每次发包时向上递增 |
-
-操作码:
-
-| 代码 | 含义 |
-| ---- | -------------------- |
-| 2 | 心跳包 |
-| 3 | 心跳包回复(人气值) |
-| 5 | 普通包(命令) |
-| 7 | 认证包 |
-| 8 | 认证包回复 |
-
-*普通包可能包含多条命令,每个命令有一个头部,指示该条命令的长度等信息*
-
-### 认证包
-
-方式:(上行)
-
-连接成功后5秒内发送,否则强制断开连接
-
-正文:
-
-json格式
-
-| 字段 | 类型 | 内容 | 必要性 | 备注 |
-| -------- | ---- | ------------ | ------ | ------------ |
-| uid | num | 用户mid | 非必要 | |
-| roomid | num | 加入房间的id | 必要 | 直播间真实id |
-| protover | num | 协议版本 | 非必要 | 3 |
-| platform | str | 平台标识 | 非必要 | "web" |
-| type | num | 2 | 非必要 | |
-| key | str | 认证秘钥 | 非必要 | |
-
-示例:
-
-```
-00000000: 0000 00ff 0010 0001 0000 0007 0000 0001 ................
-00000001: 7b22 7569 6422 3a31 3630 3134 3836 3234 {"uid":160148624
-00000002: 2c22 726f 6f6d 6964 223a 3232 3630 3831 ,"roomid":226081
-00000003: 3132 2c22 7072 6f74 6f76 6572 223a 332c 12,"protover":3,
-00000004: 2270 6c61 7466 6f72 6d22 3a22 7765 6222 "platform":"web"
-00000005: 2c22 7479 7065 223a 322c 226b 6579 223a ,"type":2,"key":
-00000006: 2230 7670 5448 5737 7757 556e 6c6f 5270 "0vpTHW7wWUnloRp
-00000007: 5251 6b47 764e 626e 7776 7364 6d2d 7159 RQkGvNbnwvsdm-qY
-00000008: 4777 4243 5875 2d59 5164 6e57 7653 5547 GwBCXu-YQdnWvSUG
-00000009: 7373 4139 7962 4b68 7932 6a78 3952 6f63 ssA9ybKhy2jx9Roc
-0000000a: 4150 4651 6d54 4f6b 5277 6b4b 687a 4479 APFQmTOkRwkKhzDy
-0000000b: 4839 5054 756f 5468 6834 4630 7562 584c H9PTuoThh4F0ubXL
-0000000c: 4964 6e69 3734 5539 304b 4242 6972 3248 Idni74U90KBBir2H
-0000000d: 7451 3941 3777 674b 3438 4b7a 495f 5a5a tQ9A7wgK48KzI_ZZ
-0000000e: 3838 7557 4e59 6652 4f48 6964 4e6a 3732 88uWNYfROHidNj72
-0000000f: 7061 796e 3479 3071 4268 513d 3d22 7d payn4y0qBhQ=="}
-```
-
-
-
-### 认证包回复
-
-方式:(下行)
-
-在认证包发送成功后就会收到
-
-json格式
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------ | --------- |
-| code | num | 返回值 | 0认证成功 |
-
-示例:
-
-```
-00000000 00 00 00 1a 00 10 00 01 00 00 00 08 00 00 00 01 |................|
-00000010 7b 22 63 6f 64 65 22 3a 30 7d |{"code":0}|
-```
-
-
-
-### 心跳包
-
-方式:(上行)
-
-30秒左右发送一次,否则60秒后会被强制断开连接
-
-正文:
-
-可以为空或任意字符
-
-示例:
-
-```
-00000000 00 00 00 1f 00 10 00 01 00 00 00 02 00 00 00 01 |................|
-00000010 5b 6f 62 6a 65 63 74 20 4f 62 6a 65 63 74 5d |[object Object]|
-```
-
-### 心跳回应(人气值)
-
-方式:(下行)
-
-在心跳包发送成功后就会收到
-
-正文:
-
-uint32整数,代表房间当前的人气值
-
-示例:
-
-```
-00000000 00 00 00 14 00 10 00 01 00 00 00 03 00 00 00 01 |................|
-00000010 00 00 14 83 |....|
-```
-
-可见房间内人气值为5251
-
-### 普通包
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------ | --------- |
-| code | num | 返回值 | 0认证成功 |
-
-方式:(下行)
-
-#### 弹幕
-
-方式:(下行)
-
-当收到弹幕时接收到此条消息
-
-json格式
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------ | --------- |
-| cmd | string | "DANMU_MSG" | 如果是弹幕消息,内容则是"DANMU_MSG" |
-| info | list | 单条弹幕的用户、内容、粉丝勋章等各种信息 | 待补 |
-
-
-查看消息示例:
-
-``` json
-{
- "cmd": "DANMU_MSG",
- "info": [
- [
- 0,
- 4,
- 25,
- 5566168,
- 1644559560263,
- 1644558747,
- 0,
- "998a531f",
- 0,
- 0,
- 5,
- "#1453BAFF,#4C2263A2,#3353BAFF",
- 0,
- "{}",
- "{}",
- {
- "mode": 0,
- "show_player_type": 0,
- "extra": ""
- }
- ],
- "测试文本",
- [
- 1850091,
- "Jannchie见齐",
- 0,
- 0,
- 0,
- 10000,
- 1,
- "#00D1F1"
- ],
- [
- 21,
- "観測者",
- "Jannchie见齐",
- 422915,
- 1725515,
- "",
- 0,
- 6809855,
- 1725515,
- 5414290,
- 3,
- 1,
- 1850091
- ],
- [
- 20,
- 0,
- 6406234,
- "u003e50000",
- 3
- ],
- [
- "",
- ""
- ],
- 0,
- 3,
- null,
- {
- "ts": 1644559560,
- "ct": "59DEA791"
- },
- 0,
- 0,
- null,
- null,
- 0,
- 210
- ]
-}
-```
-
-
-#### 进场或关注消息
-
-方式:(下行)
-
-有用户进入或关注直播间时触发
-
-json格式
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------ | --------- |
-| cmd | string | "INTERACT_WORD" | 如果是进场或关注消息,内容则是"INTERACT_WORD" |
-| data | obj | 进场人信息 | |
-
-data字段
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------ | --------- |
-| contribution | obj | 待调查 | |
-| dmscore | number | 待调查 | |
-| fans_medal | obj | 粉丝勋章 | |
-| identities | number | 待调查 | |
-| is_spread | number | 待调查 | |
-| msg_type | number | 1为进场,2为关注 | |
-| roomid | number | 房间号 | |
-| is_spread | number | 待调查 | |
-| is_spread | number | 待调查 | |
-| score | number | 待调查 | |
-| spread_desc | string | 待调查 | |
-| spread_info | string | 待调查 | |
-| tail_icon | number | 待调查 | |
-| timestamp | number | 时间戳 | |
-| trigger_time | number | 触发时间 | |
-| uid | number | 用户ID | |
-| uname | string | 用户名称 | |
-| uname_color | string | 用户颜色 | |
-
-
-查看消息示例:
-
-```json
-{
- "cmd": "INTERACT_WORD",
- "data": {
- "contribution": {
- "grade": 0
- },
- "dmscore": 4,
- "fans_medal": {
- "anchor_roomid": 890976,
- "guard_level": 0,
- "icon_id": 0,
- "is_lighted": 0,
- "medal_color": 6067854,
- "medal_color_border": 12632256,
- "medal_color_end": 12632256,
- "medal_color_start": 12632256,
- "medal_level": 1,
- "medal_name": "小豆皮",
- "score": 134,
- "special": "",
- "target_id": 6574487
- },
- "identities": [
- 1
- ],
- "is_spread": 0,
- "msg_type": 1,
- "roomid": 24143902,
- "score": 1644563948936,
- "spread_desc": "",
- "spread_info": "",
- "tail_icon": 0,
- "timestamp": 1644563948,
- "trigger_time": 1644563947876475000,
- "uid": 335979315,
- "uname": "TIM_Init",
- "uname_color": ""
- }
-}
-```
-
-
-
-
-json格式
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------ | --------- |
-| cmd | string | "DANMU_MSG" | 如果是弹幕消息,内容则是"DANMU_MSG" |
-| info | list | 单条弹幕的用户、内容、粉丝勋章等各种信息 | 待补 |
-
-
-查看消息示例:
-
-``` json
-{
- "cmd": "DANMU_MSG",
- "info": [
- [
- 0,
- 4,
- 25,
- 5566168,
- 1644559560263,
- 1644558747,
- 0,
- "998a531f",
- 0,
- 0,
- 5,
- "#1453BAFF,#4C2263A2,#3353BAFF",
- 0,
- "{}",
- "{}",
- {
- "mode": 0,
- "show_player_type": 0,
- "extra": ""
- }
- ],
- "测试文本",
- [
- 1850091,
- "Jannchie见齐",
- 0,
- 0,
- 0,
- 10000,
- 1,
- "#00D1F1"
- ],
- [
- 21,
- "観測者",
- "Jannchie见齐",
- 422915,
- 1725515,
- "",
- 0,
- 6809855,
- 1725515,
- 5414290,
- 3,
- 1,
- 1850091
- ],
- [
- 20,
- 0,
- 6406234,
- "u003e50000",
- 3
- ],
- [
- "",
- ""
- ],
- 0,
- 3,
- null,
- {
- "ts": 1644559560,
- "ct": "59DEA791"
- },
- 0,
- 0,
- null,
- null,
- 0,
- 210
- ]
-}
-```
-
-
-#### 送礼
-
-
-
-#### 欢迎加入房间
-
-
-
-#### 欢迎房管加入房间
-
-
-
-#### 系统消息
-
-
-
-#### 主播准备中
-
-
-
-#### 直播开始
-
-
-
-#### 直播状态更新
-
-
diff --git a/login/exit.md b/login/exit.md
deleted file mode 100644
index 35be5c4..0000000
--- a/login/exit.md
+++ /dev/null
@@ -1,69 +0,0 @@
-# 退出账号登录
-
-- [退出账号登录](#退出账号登录)
- - [退出登录(web 端)](#退出登录web-端)
-
----
-
-## 退出登录(web 端)
-
-> http://passport.bilibili.com/login/exit/v2
-
-_请求方式:POST_
-
-认证方式:Cookie
-
-验证登录成功后会进行删除以下 cookie 项:
-
-`DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct`
-
-并在服务器注销该登录 Token(SESSDATA),该 Token 即失效
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| -------- | ---- | ------------------------- | --------------- | ---------------------------------- |
-| biliCSRF | str | CSRF Token(位于 cookie) | Cookie 方式必要 | |
-| gourl | str | 成功后跳转到的页面 | 非必要 | 默认为 `javascript:history.go(-1)` |
-
-**json 回复:**
-
-如果 cookie 已经失效则返回登录页面的 html 代码
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ------------------------------- | -------- | ---------------------------------- |
-| code | num | 返回值 | 0:成功 -2202:csrf 请求非法 |
-| status | num/不存在 | 返回值 | true:成功,失败时可能不存在 |
-| ts | num | 返回值 | 时间戳(例如:1631796826) |
-| message | str 无效时:不存在 | 错误信息 | |
-| data | 有效时:obj 无效时:不存在 | 信息本体 | |
-
-`data`对象:
-
-redirectUrl 重定向 url
-
-**示例:**
-
-```shell
-curl -X POST https://passport.bilibili.com/login/exit/v2 \
--b "cookie字符串" \
--d "biliCSRF=xxxxxx&gourl=https://www.bilibili.com"
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "status": true,
- "ts": 1631796826,
- "data": {
- "redirectUrl": "https://passport.biligame.com/crossDomain?DedeUserID=&DedeUserID__ckMd5=&SESSDATA=&bili_jct=&gourl=https%3A%2F%2Fwww.bilibili.com"
- }
-}
-```
-
-
diff --git a/login/login_action/QR.md b/login/login_action/QR.md
deleted file mode 100644
index eca46bb..0000000
--- a/login/login_action/QR.md
+++ /dev/null
@@ -1,360 +0,0 @@
-# 二维码登录
-
-web端流程&逻辑:
-
-1. 获取`二维码内容url`以及`密钥`,以`二维码内容url`生成二维码,等待手机客户端扫描
-2. 以`密钥`作为参数进行POST
-3. if `code` == `true` goto `6` else goto 4(是否已经确认)
-4. if `data` == `-4` goto `2` else goto 5(是否已经扫描)
-5. if `data` == `-5` goto `3` & 提示`已扫描` else goto `1`&提示`二维码超时或错误`(密钥是否有效)
-6. 成功后会自动配置cookie 如需登录游戏分站则访问`data`.`url`中的url
-
-TV端流程&逻辑:
-
-1. 获取`二维码内容url`以及`密钥`,以`二维码内容url`生成二维码,等待手机客户端扫描
-2. 以`密钥`作为参数进行POST
-3. if `code` == `0` 提示`扫码成功`并存储`access_key`于`refersh_key` else goto `4`
-4. if `code` == `86039` 提示`未扫描`&goto `2` else goto `5`
-5. if `code` == `86038` 提示`二维码超时或错误`&goto `1`
-
-
-
-
-
----
-
-- [申请二维码URL及扫码密钥(web端)](#申请二维码URL及扫码密钥(web端))
-- [使用扫码登录(web端)](#使用扫码登录(web端))
-- [申请二维码URL及扫码密钥(TV端)](#申请二维码URL及扫码密钥(TV端))
-- [使用扫码登录(TV端)](#使用扫码登录(TV端))
-
----
-
-## 申请二维码URL及扫码密钥(web端)
-
-> http://passport.bilibili.com/qrcode/getLoginUrl
-
-*请求方式:GET*
-
-密钥超时为180秒
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ---- | -------- | ------------ |
-| code | num | 返回值 | 0:成功 |
-| status | bool | true | 作用尚不明确 |
-| ts | num | 请求时间 | 时间戳 |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ---- | ------------- | ---------- |
-| url | str | 二维码内容url | 恒为87字符 |
-| oauthKey | str | 扫码登录秘钥 | 恒为32字符 |
-
-**示例:**
-
-用申请到的`data`.`url`中的值生成二维码,等待手机客户端扫描,并将`data`.`oauthKey`保存等待使用
-
-```shell
-curl 'http://passport.bilibili.com/qrcode/getLoginUrl'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "status": true,
- "ts": 1583314311,
- "data": {
- "url": "https://passport.bilibili.com/qrcode/h5/login?oauthKey=c3bd5286a2b40a822f5f60e9bf3f602e",
- "oauthKey": "c3bd5286a2b40a822f5f60e9bf3f602e"
- }
-}
-```
-
-
-
-## 使用扫码登录(web端)
-
-> http://passport.bilibili.com/qrcode/getLoginInfo
-
-*请求方式:POST*
-
-密钥超时为180秒
-
-验证登录成功后会进行设置以下cookie项:
-
- `DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct`
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| -------- | ---- | ------------ | ------ | ----------------------------- |
-| oauthKey | str | 扫码登录秘钥 | 必要 | |
-| gourl | str | 跳转url | 非必要 | 默认为http://www.bilibili.com |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---------------------------- | ----------------------------------------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 |
-| message | str | 错误信息 | 正确无 |
-| ts | num | 扫码时间 | 错误无 |
-| status | bool | 扫码是否成功 | true:成功 false:未成功 |
-| data | 正确时:obj 错误时:num | 正确时:游戏分站url 错误时:错误代码 | 未成功时: -1:密钥错误 -2:密钥超时 -4:未扫描 -5:未确认 |
-
-data 对象:
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------------- | ---- |
-| url | str | 游戏分站跨域登录url | |
-
-**示例:**
-
-使用扫描秘钥`c3bd5286a2b40a822f5f60e9bf3f602e`登录
-
-```shell
-curl "http://passport.bilibili.com/qrcode/getLoginInfo"\
---data-urlencode 'oauthKey=c3bd5286a2b40a822f5f60e9bf3f602e' \
--c 'cookie.txt'
-```
-
-当密钥正确时但未扫描时`status`为`false`,`data`为num值`-4`
-
-
-查看响应示例:
-
-```json
-{
- "status":false,
- "data":-4,
- "message":"Can't scan~"
-}
-```
-
-
-
-扫描成功但手机端未确认时`status`为`false`,`data`为num值`-5`
-
-
-查看响应示例:
-
-```json
-{
- "status":false,
- "data":-5,
- "message":"Can't confirm~"
-}
-```
-
-
-
-扫描成功手机端确认登录后,`status`为`true`,`data`为对象,并向浏览器写入cookie
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "status": true,
- "ts": 1583315474,
- "data": {
- "url": "https://passport.biligame.com/crossDomain?DedeUserID=***&DedeUserID__ckMd5=***&Expires=***&SESSDATA=***&bili_jct=***&gourl=http%3A%2F%2Fwww.bilibili.com"
- }
-}
-```
-
-
-
-**响应头部抓包信息:**
-
-可明显看见设置了几个cookie(填入浏览器即可成功登录)
-
-
-查看响应示例:
-
-```http
-HTTP/1.1 200 OK
-Date: Wed, 04 Mar 2020 10:36:37 GMT
-Content-Type: application/json;charset=UTF-8
-Transfer-Encoding: chunked
-Connection: keep-alive
-Server: Apache-Coyote/1.1
-Set-Cookie: sid=***; Domain=.bilibili.com; Expires=Thu, 04-Mar-2021 10:36:37 GMT; Path=/
-Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/
-Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/
-Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/; HttpOnly
-Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/
-Expires: Wed, 04 Mar 2020 10:36:36 GMT
-Cache-Control: no-cache
-X-Cache-Webcdn: BYPASS from ks-sxhz-dx-w-01
-```
-
-
-
-**游戏分站跨域登录url:**
-
-游戏分站跨域登录url与cookie的值一一对应,可用于不方便设置cookie的场合提取使用
-
-https://passport.biligame.com/crossDomain?
-
-DedeUserID=(登录mid)&
-
-DedeUserID__ckMd5=(登录mid MD5值)&
-
-Expires=(过期时间 秒)&
-
-SESSDATA=(登录token)&
-
-bili_jct=(csrf)&
-
-gourl=(跳转网址 默认为主页)
-
-## 申请二维码URL及扫码密钥(TV端)
-
-> http://passport.bilibili.com/x/passport-tv-login/qrcode/auth_code
-
-*请求方式:POST*
-
-鉴权方式:appkey
-
-密钥超时为180秒
-
-本接口可申请用于APP方式登录的`access_key`
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| -------- | ---- | ---------- | ----------- | ------------------------ |
-| appkey | str | APP密钥 | APP方式必要 | 仅可用`4409e2ce8ffd12b8` |
-| local_id | str | TV端id | TV端必要 | 可为0 |
-| ts | num | 当前时间戳 | APP方式必要 | |
-| sign | str | APP签名 | APP方式必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ---------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -3:API校验密匙错误 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ---- | ------------- | ---------- |
-| url | str | 二维码内容url | 恒为87字符 |
-| oauthKey | str | 扫码登录秘钥 | 恒为32字符 |
-
-**示例:**
-
-```shell
-curl 'http://passport.bilibili.com/x/passport-tv-login/qrcode/auth_code' \
---data-urlencode 'appkey=4409e2ce8ffd12b8' \
---data-urlencode 'local_id=0' \
---data-urlencode 'ts=0' \
---data-urlencode 'sign=e134154ed6add881d28fbdf68653cd9c'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "url": "https://passport.bilibili.com/x/passport-tv-login/h5/qrcode/auth?auth_code=0eeb635a64526709d70cb4c854a3b001",
- "auth_code": "0eeb635a64526709d70cb4c854a3b001"
- }
-}
-```
-
-
-
-## 使用扫码登录(TV端)
-
-> http://passport.bilibili.com/x/passport-tv-login/qrcode/poll
-
-*请求方式:POST*
-
-鉴权方式:appkey
-
-密钥超时为180秒
-
-验证登录成功后会返回可用于APP方式登录的`access_key`以及`refresh_token`
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| --------- | ---- | ---------- | ----------- | ------------------------ |
-| appkey | str | APP密钥 | APP方式必要 | 仅可用`4409e2ce8ffd12b8` |
-| auth_code | str | 扫码秘钥 | 必要 | |
-| local_id | str | TV端id | TV端必要 | 可为0 |
-| ts | num | 当前时间戳 | APP方式必要 | |
-| sign | str | APP签名 | APP方式必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ----------------------------- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -3:API校验密匙错误 -400:请求错误 86038:二维码已失效 86039:二维码尚未确认 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | 有效时:obj 无效时:null | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | ------------ | -------------------- |
-| mid | num | 登录用户mid | |
-| access_token | str | APP登录Token | |
-| refresh_token | str | APP刷新Token | |
-| expires_in | num | 有效时间 | 单位为秒 一般为30天 |
-
-**示例:**
-
-使用扫描秘钥`6214464b3025541abf6f654cf7569a01`进行验证登录
-
-```shell
-curl 'http://passport.bilibili.com/x/passport-tv-login/qrcode/poll' \
---data-urlencode 'appkey=4409e2ce8ffd12b8' \
---data-urlencode 'auth_code=6214464b3025541abf6f654cf7569a01' \
---data-urlencode 'local_id=0' \
---data-urlencode 'ts=0' \
---data-urlencode 'sign=87de3d0fee7c3f4facd244537238914e' \
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "mid": 293793435,
- "access_token": "***",
- "refresh_token": "***",
- "expires_in": 2592000
- }
-}
-```
-
-
\ No newline at end of file
diff --git a/login/login_action/SMS.md b/login/login_action/SMS.md
deleted file mode 100644
index c271a14..0000000
--- a/login/login_action/SMS.md
+++ /dev/null
@@ -1,255 +0,0 @@
-# 短信登录
-
-web端短信登录流程:
-
-1. [完成人机验证](readme.md)
-2. 发送短信,使用国际地区代码`cid`+手机号码`tel`+登录密钥`token`+极验`challenge`+验证结果`validate`+验证结果`seccode`
-3. 提交短信验证码以验证登录操作,使用国际地区代码`cid`+手机号码`tel`+短信验证码`code`
-
----
-
-- [短信登录](#短信登录)
- - [获取国际地区代码(web端)](#获取国际地区代码web端)
- - [发送短信验证码(web端)](#发送短信验证码web端)
- - [使用短信验证码登录(web端)](#使用短信验证码登录web端)
-
----
-
-## 获取国际地区代码(web端)
-
-> http://passport.bilibili.com/web/generic/country/list
-
-*请求方式:GET*
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | -------- | ------- |
-| code | num | 返回值 | 0:成功 |
-| data | obj | 数据本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ----- | -------------- | ---- |
-| common | array | 常用国家或地区 | |
-| others | array | 其他国家或地区 | |
-
-`data`中的`common`和`others`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | ---- |
-| 0 | obj | 国家或地区1 | |
-| n | obj | 国家或地区(n+1) | |
-| …… | obj | …… | …… |
-
-`common`和`others`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ---- | -------------- | ---- |
-| id | num | 国际代码值 | |
-| cname | str | 国家或地区名 | |
-| country_id | str | 国家或地区区号 | |
-
-**示例:**
-
-```shell
-curl 'http://passport.bilibili.com/web/generic/country/list'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "data": {
- "common": [
- {
- "id": 1,
- "cname": "中国大陆",
- "country_id": "86"
- },
- {
- "id": 5,
- "cname": "中国香港特别行政区",
- "country_id": "852"
- },
- …………
- ],
- "others": [
- {
- "id": 22,
- "cname": "阿富汗",
- "country_id": "93"
- },
- {
- "id": 20,
- "cname": "阿尔巴尼亚",
- "country_id": "355"
- },
- …………
- ]
- }
-}
-```
-
-
-
-## 发送短信验证码(web端)
-
-> http://passport.bilibili.com/x/passport-login/web/sms/send
-
-*请求方式:POST*
-
-短信发送CD时间为60s
-
-短信验证码超时时间为5min
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| --- | --- | --- | --- | --- |
-| tel | num | 手机号码 | 必要 | |
-| cid | num | 国际地区代码 | 必要 | |
-| source | str | 固定为`main_web` | 必要 | |
-| token | str | 在获取gt,challenge处url有 | 必要 | |
-| challenge | str | 极验challenge | 必要 | 从B站API获取 |
-| validate | str | 极验结果 | 必要 | 从极验获取 |
-| seccode | str | 极验结果+`|jordan` | 必要 | 从极验获取 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ---- | -------- | --------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 1002:手机号格式错误 86203:短信发送次数已达上限 1003:验证码已经发送 1025:该手机号在哔哩哔哩有过永久封禁记录,无法再次注册或绑定新账号 2400:登录秘钥错误 2406:验证极验服务出错 |
-| message | str | 错误信息 | 成功为0 |
-| data | obj | 数据 | 内含captcha_key |
-
-captcha_key在下方传参时需要,请备用.
-**示例:**
-
-例如手机号为`13888888888`,国际id为`1(中国大陆)`,登录秘钥为`aabbccdd`,极验challenge为`2333`,极验结果为`666666`,进行发送短信验证码操作
-
-```shell
-curl 'http://passport.bilibili.com/x/passport-login/web/sms/send' \
---data-urlencode 'tel=13888888888' \
---data-urlencode 'cid=1' \
---data-urlencode 'source=main_web' \
---data-urlencode 'token=aabbccdd' \
---data-urlencode 'challenge=2333' \
---data-urlencode 'validate=666666' \
---data-urlencode 'seccode=666666|jordan'
-```
-
-
-查看响应示例:
-
-```json
-{"code":0,
- "message":"0",
- "ttl":1,
- "data":{"captcha_key":"7542f109c3318d74847626495c68c321"}
- }
-```
-
-
-
-## 使用短信验证码登录(web端)
-
-> https://passport.bilibili.com/x/passport-login/web/login/sms
-
-*请求方式:POST*
-
-验证登录成功后会进行设置以下cookie项:
-
- `DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct`
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| --- | --- | --- | --- | --- |
-| cid | num | 国际地区代码 | 必要 | |
-| tel | num | 手机号码 | 必要 | |
-| code | num | 短信验证码 | 必要 | 超时时间为5min |
-| source | str | 固定为`main_web` | 必要 | |
-| captcha_key | str | 上方发送短信验证码时的一个参数 | 必要 | |
-| go_url | str | 跳转url | 非必要 | 默认为https://www.bilibili.com |
-| keep | str | 未知 | 非必要 | 默认为true |
-
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --- | --- | --- | --- |
-| code | num | 返回值 | 0:成功 -400:请求错误 1006:请输入正确的短信验证码 1007:短信验证码已过期 |
-| message | str | 错误信息 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --- | --- | --- | --- |
-| is_new | bool | false | 未知,估计是未注册时自动注册新用户 |
-| status | num | 0 | 未知,可能0就是成功吧 |
-| url | str | 跳转url | 默认为https://www.bilibili.com |
-
-**示例:**
-
-使用手机号`13888888888`,短信验证码为`123456`,进行验证登录操作
-
-```shell
-curl 'https://passport.bilibili.com/x/passport-login/web/login/sms'
---data-urlencode 'cid=1' \
---data-urlencode 'tel=13888888888' \
---data-urlencode 'code=123456'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "data": {
- "is_new": false,
- "status": 0,
- "url": "https://space.bilibili.com"
- }
-}
-```
-
-
-
-**响应头部抓包信息:**
-
-可明显看见设置了几个cookie(填入浏览器即可成功登录)
-
-
-查看响应示例:
-
-```http
-HTTP/1.1 200 OK
-Date: Mon, 13 Jul 2020 09:57:33 GMT
-Content-Type: application/json;charset=UTF-8
-Content-Length: 78
-Connection: keep-alive
-Server: Apache-Coyote/1.1
-Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
-Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
-Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/; HttpOnly
-Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
-Set-Cookie: sid=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
-Expires: Mon, 13 Jul 2020 09:57:32 GMT
-Cache-Control: no-cache
-X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01
-
-```
-
-
diff --git a/login/login_action/password.md b/login/login_action/password.md
deleted file mode 100644
index 0e6cb7a..0000000
--- a/login/login_action/password.md
+++ /dev/null
@@ -1,265 +0,0 @@
-# 账号密码登录
-
-web端密码登录流程:
-
-1. [完成人机验证](readme.md)
-2. 加密登录密码,获取RSA公钥`key`与盐值`hash`**(盐值有效时间为20s)**,并连接盐值+密码字串(注意先后顺序),使用RSA公钥加密,得到base64格式密文
-4. 登录操作验证,使用账号`username`**(手机号或邮箱)**+密文密码`password`+登录密钥`key`+极验`challenge`+验证结果`validate`+验证结果`seccode`
-
----
-
-- [获取加密公钥及密码盐值1(web端)](#获取加密公钥及密码盐值1(web端))
-- [获取加密公钥及密码盐值2(APP端)](#获取加密公钥及密码盐值2(APP端))
-- [登录密码的加密](#登录密码的加密)
-- [使用账号密码登录(web端)](#使用账号密码登录(web端))
-
----
-
-## 获取加密公钥及密码盐值1(web端)
-
-> http://passport.bilibili.com/login?act=getkey
-
-*请求方式:GET*
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------ | ---------------- |
-| hash | str | 密码校验盐值 | 有效时间为20s |
-| key | str | RSA公钥 | **公钥为固定值** |
-
-**示例:**
-
-```shell
-curl 'http://passport.bilibili.com/login?act=getkey'
-```
-
-
-查看响应示例:
-
-```json
-{
- "hash":"07c6501690c1af85",
- "key":"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n\n6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx\n/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+\nXl69GV6klzgxW6d2xQIDAQAB\n-----END PUBLIC KEY-----\n"
-}
-```
-
-
-
-## 获取加密公钥及密码盐值2(APP端)
-
-> http://passport.bilibili.com/api/oauth2/getKey
-
-*请求方式:POST*
-
-鉴权方式:appkey
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------- | ----------- | ---- |
-| appkey | str | APP密钥 | APP方式必要 | |
-| sign | str | APP签名 | APP方式必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------ | ---------------- |
-| hash | str | 验证hash盐值 | 有效时间为20s |
-| key | str | RSA公钥 | **公钥为固定值** |
-
-**示例:**
-
-```shell
-curl 'http://passport.bilibili.com/api/oauth2/getKey' \
---data-urlencode 'appkey=1d8b6e7d45233436' \
---data-urlencode 'sign=17004c193f688f0b5665c1068e733aff'
-```
-
-
-查看响应示例:
-
-```json
-{
- "hash":"07c6501690c1af85",
- "key":"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n\n6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx\n/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+\nXl69GV6klzgxW6d2xQIDAQAB\n-----END PUBLIC KEY-----\n"
-}
-```
-
-
-
-## 登录密码的加密
-
-**注:RSA公钥一般为固定值**
-
-```
------BEGIN PUBLIC KEY-----
-MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n
-6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx
-/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+
-Xl69GV6klzgxW6d2xQIDAQAB
------END PUBLIC KEY-----
-```
-
-例如登录密码为:
-
-```
-BiShi22332323
-```
-
-获取到的盐值为:
-
-```
-8e0db05c46f4052c
-```
-
-那么按照`盐值`+`密码字串`连接二者得到:
-
-```
-8e0db05c46f4052cBiShi22332323
-```
-
-用公钥进行RSA加密得到base64字串:
-
-因为公钥的**无法解密性**和盐值的**超时机制**,故无法本地验证加密结果
-
-```
-YgpjxAQ22pKa9socHIKPCZX0a/NS6Ng9Zzy+rp16b0LJGT6RHw2ERs3+ijCpG96PKTY1Baavwf0xgotmNvpl25l1KO5y4AjcqeWTzNTSVn6ejonBXGmBMybHHYawJ0aMPn1eDGpKrbI91mrF+h2x+fsnnpuZ1gheiYGzFmtshUc=
-```
-
-## 使用账号密码登录(web端)
-
-> http://passport.bilibili.com/web/login/v2
-
-*请求方式:POST*
-
-验证登录成功后会进行设置以下cookie项:
-
-`sid` `DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct`
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ----------- | ---- | ---------------- | ------ | ---------------- |
-| captchaType | num | 6 | 必要 | 必须为`6` |
-| username | str | 用户登录账号 | 必要 | 手机号或邮箱地址 |
-| password | str | 加密后的带盐密码 | 必要 | base64格式 |
-| keep | bool | true | 必要 | 必须为`true` |
-| key | str | 登录秘钥 | 必要 | 从B站API获取 |
-| challenge | str | 极验challenge | 必要 | 从B站API获取 |
-| validate | str | 极验结果 | 必要 | 从极验获取 |
-| seccode | str | 极验结果 | 必要 | 从极验获取 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | ---------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -400:请求错误 -629:账号或密码错误 -653:用户名或密码不能为空 -662:提交超时,请重新提交 -2001:缺少必要的的参数 -2100:需验证手机号或邮箱 2400:登录秘钥错误 2406:验证极验服务出错 86000:RSA解密失败 |
-| ts | num | 当前时间戳 | 成功时无此项 |
-| message | str | 错误信息 | 默认为0 |
-| data | obj | 数据本体 | 成功时有此项 |
-
-`data`对象:
-
-**未登录时:**
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | ------------------- | ---- |
-| redirectUrl | str | 游戏分站跨域登录url | |
-
-**已登录时:**
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | ------------------------ | ---- |
-| isLogin | bool | true | |
-| goUrl | str | https://www.bilibili.com | |
-
-**需验证手机号或邮箱时**
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ---- | ------------------------ | ---------------- |
-| mid | num | 用户mid | |
-| tel | str | 绑定的手机号 | 星号隐藏部分信息 |
-| email | str | 绑定的邮箱 | 星号隐藏部分信息 |
-| sorce | num | 0 | **作用尚不明确** |
-| keeptime | num | 1 | **作用尚不明确** |
-| goUrl | str | https://www.bilibili.com | |
-
-**示例:**
-
-例如用户账号为`12345678900`,加密后的密码为`xxx`,登录秘钥为`aabbccdd`,极验challenge为`2333`,极验结果为`666666`,进行验证登录操作
-
-```shell
-curl 'https://passport.bilibili.com/web/login/v2' \
---data-urlencode 'captchaType=6' \
---data-urlencode 'username=12345678900' \
---data-urlencode 'password=xxx' \
---data-urlencode 'keep=true' \
---data-urlencode 'key=aabbccdd' \
---data-urlencode 'challenge=2333' \
---data-urlencode 'validate=666666' \
---data-urlencode 'seccode=666666|jordan'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "data": {
- "redirectUrl": "https://passport.biligame.com/crossDomain?DedeUserID=***&DedeUserID__ckMd5=***&Expires=15551000&SESSDATA=***&bili_jct=***&gourl=https%3A%2F%2Fwww.bilibili.com"
- }
-}
-```
-
-
-
-**响应头部抓包信息:**
-
-可明显看见设置了几个cookie(填入浏览器即可成功登录)
-
-
-查看响应示例:
-
-```http
-HTTP/1.1 200 OK
-Date: Mon, 13 Jul 2020 06:56:00 GMT
-Content-Type: application/json;charset=UTF-8
-Content-Length: 273
-Connection: keep-alive
-Server: Apache-Coyote/1.1
-Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/
-Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/
-Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/; HttpOnly
-Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/
-Content-Security-Policy-Report-Only: default-src 'self' data: *.bilibili.com *.hdslb.com; style-src 'self' 'unsafe-inline' *.hdslb.com static.geetest.com; img-src 'self' data: blob: *.bilibili.com *.hdslb.com http://*.hdslb.com static.geetest.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.bilibili.com *.hdslb.com api.geetest.com static.geetest.com; object-src 'self' *.hdslb.com; media-src 'self' *.acgvideo.com http://*.acgvideo.com *.ksyungslb.com; connect-src 'self' data: wss://*.bilibili.com:* *.bilibili.com *.hdslb.com *.biliapi.net *.biliapi.com; frame-ancestors 'self' *.bilibili.com *.biligame.com; report-uri https://security.bilibili.com/csp_report
-Expires: Mon, 13 Jul 2020 06:55:59 GMT
-Cache-Control: no-cache
-X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01
-```
-
-
-
-**游戏分站跨域登录url:**
-
-游戏分站跨域登录url与cookie的值一一对应,可用于不方便设置cookie的场合提取使用
-
-https://passport.biligame.com/crossDomain?
-
-DedeUserID=(登录mid)&
-
-DedeUserID__ckMd5=(登录mid MD5值)&
-
-Expires=(过期时间 秒)&
-
-SESSDATA=(登录token)&
-
-bili_jct=(csrf)&
-
-gourl=(跳转网址 默认为主页)
diff --git a/login/login_notice.md b/login/login_notice.md
deleted file mode 100644
index 541ae2f..0000000
--- a/login/login_notice.md
+++ /dev/null
@@ -1,74 +0,0 @@
-# 登录记录
-
-- [查询登录记录](#查询登录记录)
-
----
-
-## 查询登录记录
-
-> http://api.bilibili.com/x/safecenter/login_notice
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ---------- | ------ | ------------------------------------------------------------ |
-| mid | num | 用户mid | 必要 | |
-| buvid | str | 设备虚拟id | 非必要 | web端为操作登录接口时Cookie中的`buvid3` 若登录设备无`buvid`则留空 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | ----------- | -------------------------- |
-| mid | num | 登录用户mid | |
-| device_name | str | 登录设备 | 依靠操作登录接口时的UA决定 |
-| login_type | str | 登录方式 | 根据登录接口决定 |
-| login_time | str | 登录时间 | YYYY-MM-DD hh:mm:ss |
-| location | str | 登录位置 | 依靠ip决定 |
-| ip | str | 登录ip | 部分用`*`打码 |
-
-**示例:**
-
-查询用户`293793435`设备id为`fuck_chenrui`的登录记录
-
-```shell
-curl -G 'http://api.bilibili.com/x/safecenter/login_notice' \
---data-urlencode 'mid=293793435' \
---data-urlencode 'buvid=fuck_chenrui' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "mid": 293793435,
- "device_name": "Chrome浏览器",
- "login_type": "扫码登录",
- "login_time": "2020-10-02 22:42:38",
- "location": "中国陕西渭南",
- "ip": "36.40.***.**"
- }
-}
-```
-
-
diff --git a/manga/ClockIn.md b/manga/ClockIn.md
deleted file mode 100644
index 34ca545..0000000
--- a/manga/ClockIn.md
+++ /dev/null
@@ -1,66 +0,0 @@
-# 签到
-
-> http://manga.bilibili.com/twirp/activity.v1.Activity/ClockIn
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)/ APP
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------------------ | -------------- | ------------------------------------------------------------ |
-| platform | str | 平台 | 必要 | android |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num / str | 返回值 | 0:成功 invalid_argument:今日已签到 |
-| msg | str | 错误信息 | 成功:空 已签到:clockin clockin is duplicate |
-| meta | obj | 错误信息 | 今日已签到时存在 |
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | -------- | ---- |
-| data | str | 错误信息 | |
-
-**示例:**
-
-```bash
-curl 'http://manga.bilibili.com/twirp/activity.v1.Activity/ClockIn' \
--b 'SESSDATA=xxx'
-```
-
-
-签到成功:
-
-
-```json
-{
- "code": 0,
- "msg": "",
- "data": {}
-}
-```
-
-
-
-
-今日已签到:
-
-
-```json
-{
- "code": "invalid_argument",
- "msg": "clockin clockin is duplicate",
- "meta": {
- "argument": "clockin"
- }
-}
-```
-
-
\ No newline at end of file
diff --git a/message/msg.md b/message/msg.md
deleted file mode 100644
index 20fb730..0000000
--- a/message/msg.md
+++ /dev/null
@@ -1,65 +0,0 @@
-# 通知消息
-
-- [未读消息数](#未读消息数)
-
----
-
-## 未读消息数
-
-> http://api.bilibili.com/x/msgfeed/unread
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ----------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-data 对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------------- | ------------ |
-| at | num | 未读at数 | |
-| chat | num | 0 | 作用尚不明确 |
-| like | num | 未读点赞数 | |
-| reply | num | 未读回复数 | |
-| sys_msg | num | 未读系统通知数 | |
-| up | num | UP主助手信息数 | |
-
-**示例:**
-
-以下信息代表了未读点赞数为10,未读回复数为4,未读at消息数为3,未读系统通知数为2,UP主助手信息数为1
-
-```shell
-curl 'http://api.bilibili.com/x/msgfeed/unread' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "at": 3,
- "chat": 0,
- "like": 10,
- "reply": 4,
- "sys_msg": 2,
- "up": 1
- }
-}
-```
-
-
diff --git a/message/private_msg.md b/message/private_msg.md
deleted file mode 100644
index 2e80659..0000000
--- a/message/private_msg.md
+++ /dev/null
@@ -1,215 +0,0 @@
-# 私信
-
-- [未读私信数](#未读私信数)
-- [发送私信(web端)](#发送私信web端)
-
----
-
-## 未读私信数
-
-> http://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -6:账号未登录 |
-| message | str | 错误信息 | 默认为ok |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data` 对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ---- | -------------------- | ---- |
-| unfollow_unread | num | 未关注用户未读私信数 | |
-| follow_unread | num | 已关注用户未读私信数 | |
-| _gt_ | num | 0 | |
-
-**示例:**
-
-以下信息代表了为未关注用户未读私信数为`1`条,已关注用户未读私信数为`6`条
-
-```shell
-curl 'http://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "msg": "ok",
- "message": "ok",
- "data": {
- "unfollow_unread": 1,
- "follow_unread": 6,
- "_gt_": 0
- }
-}
-```
-
-
-
-## 发送私信(web端)
-
-> http://api.vc.bilibili.com/web_im/v1/web_im/send_msg
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-**正文参数(application/x-www-form-urlencoded):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------------------ | ------------------------------------ | ------------------------ | ------ | -------------------------------------- |
-| msg[sender_uid] | num | 发送者mid | 必要 | |
-| msg[receiver_id] | num | 接收者mid | 必要 | |
-| msg[receiver_type] | num | 1 | 必要 | 固定为1 |
-| msg[msg_type] | num | 消息类型 | 必要 | 1:发送文字 2:发送图片 5:撤回消息 |
-| msg[msg_status] | num | 0 | 非必要 | |
-| msg[dev_id] | string | 372778FD-E359-461D-86A3-EA2BCC6FF52A | 必要 | **获取方式在下面** |
-| msg[timestamp] | num | 时间戳(秒) | 必要 | |
-| msg[content] | 发送文字时:str 撤回消息时:num | 消息内容 | 必要 | **详见下表** |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
----
-
-**dev_id的获取**
-
-以JS为例:
-
-```javascript
-const deviceid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (function (name) {
- let randomInt = 16 * Math.random() | 0;
- return ("x" === name ? randomInt : 3 & randomInt | 8).toString(16).toUpperCase()
-}));
-```
-
-代码来自 [andywang425/BLTH](https://github.com/andywang425/BLTH/blob/45fe93e31754ca8bf07059d46266398e787dbf45/B%E7%AB%99%E7%9B%B4%E6%92%AD%E9%97%B4%E6%8C%82%E6%9C%BA%E5%8A%A9%E6%89%8B.js#L6618)
-
----
-
-`msg[content]`消息内容:
-
-当发送文字时(`msg[msg_type]=1`):
-
-该参数为json序列字串
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ---- |
-| content | str | 私信内容 | |
-
-当发送图片时(`msg[msg_type]=2`):
-
-该参数为json序列字串
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ---- | -------- | :-------------------------------------------- |
-| url | str | 图片url | 默认为B站相簿图片上传通道 也可用三方图床 |
-| width | num | 图片的宽 | 单位:像素(非必要) |
-| height | num | 图片的高 | 单位:像素(非必要) |
-| type | str | 图片格式 | (非必要) |
-| original | num | 1 | **作用未知**(非必要) |
-| size | num | 文件大小 | 单位:千字节(非必要) __向上取整__ |
-
-当撤回消息时(`msg[msg_type]=5`):
-
-该参数为数值,为目标消息的` msg_key `
-
-**json回复:**
-
-根对象:
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ----------- |
-| code | num | 返回值 | 0:成功 |
-| message | str | 错误信息 | 默认为ok |
-| ttl | num | | 默认为1 |
-| data | obj | 主体 | 出错时为空 |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | ---------- | ------------ |
-| msg_key | num | 消息唯一id | |
-| msg_content | str | 发送的消息 | |
-| key_hit_infos | obj | | 作用尚不明确 |
-
-**示例:**
-
-给目标用户`mid=1`发一条文字私信:
-
-> up主你好,
->
-> 催更[doge]
-
-```shell
-curl 'http://api.vc.bilibili.com/web_im/v1/web_im/send_msg' \
---data-urlencode 'msg[sender_uid]=293793435' \
---data-urlencode 'msg[receiver_id]=1' \
---data-urlencode 'msg[receiver_type] =1' \
---data-urlencode 'msg[msg_type]=1' \
---data-urlencode 'msg[dev_id] =372778FD-E359-461D-86A3-EA2BCC6FF52A' \
---data-urlencode 'msg[timestamp] =1626181379' \
---data-urlencode 'msg[content]={"content":"up主你好,\n催更[doge]"}' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{"code":0,
-"message":"0",
-"ttl":1,
-"data":{"msg_key":6984393491767669026,
- "msg_content":"up主你好,\n催更[doge]",
- "key_hit_infos":{}}}
-```
-
-
-
-给目标用户`mid=1`发一条图片私信:
-
->
-
-```shell
-curl 'http://api.vc.bilibili.com/web_im/v1/web_im/send_msg' \
---data-urlencode 'msg[sender_uid]=293793435' \
---data-urlencode 'msg[receiver_id]=1' \
---data-urlencode 'msg[receiver_type] =1' \
---data-urlencode 'msg[msg_type]=2' \
---data-urlencode 'msg[content]={"url":https://i1.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg}' \
---data-urlencode 'csrf_token=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code":0,
- "msg":"ok",
- "message":"ok",
- "data":{
- "msg_key":6852570013146024354,
- "_gt_":0
- }
-}
-```
-
-
diff --git a/mkdocs/mkdocs.yml b/mkdocs/mkdocs.yml
deleted file mode 100644
index b1fcc70..0000000
--- a/mkdocs/mkdocs.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-site_name: 哔哩哔哩-API收集整理
-repo_url: https://github.com/SocialSisterYi/bilibili-API-collect
-
-site_description: 本项目旨在对B站web端、移动端以及TV端散落在世界各地的野生api进行收集整理,研究使用方法并对其进行说明
-site_author: 所有的贡献者们
-
-docs_dir: '..'
-site_dir: 'html'
\ No newline at end of file
diff --git a/other/API_sign.md b/other/API_sign.md
deleted file mode 100644
index e4f71ab..0000000
--- a/other/API_sign.md
+++ /dev/null
@@ -1,83 +0,0 @@
-# API 签名与鉴权
-
-部分客户端专用的 rest api 存在基于 sign 的鉴权,需要使用规定的`appkey`及其对应的`appsec`与原始请求参数进行签名计算
-
-不同`appkey`对应不同的 app (如客户端、概念版、必剪、漫画、bililink等)
-
-不同平台同 app 也会存在不同的 `appkey`(如安卓端、ios端、TV端等)
-
-同平台同 app 下不同功能也会存在不同的 `appkey`(如登录专用、取流专用等)
-
-**appkey与appsec一一对应**
-
-- [API 签名的计算方式](#API 签名的计算方式)
-- [已知的 APPKey](#已知的 APPKey)
-
----
-
-## API 签名的计算方式
-
-首先为参数中添加`appkey`字段,然后按照参数的 key 重新排序,再将重排序后的参数使用 url query 格式序列化拼接与该 appkey 相对应的 appsec (盐值) 进行**md5 hash计算**(32位小写),该 hash 便是 API 签名
-
-为参数尾部增添`sign`字段,它的值为上一步计算所得的 hash,一并作为表单提交
-
-**实例:**
-
-使用 appkey = `1d8b6e7d45233436`, appsec = `560c52ccd288fed045859ed18bffd973` 对如下 `params` 参数进行签名
-
-```python
-import hashlib
-import urllib.parse
-
-def appsign(params, appkey, appsec):
- '为请求参数进行 api 签名'
- params.update({'appkey': appkey})
- params = dict(sorted(params.items())) # 重排序参数 key
- query = urllib.parse.urlencode(params) # 序列化参数
- sign = hashlib.md5((query+appsec).encode()).hexdigest() # 计算 api 签名
- params.update({'sign':sign})
- return params
-
-appkey = '1d8b6e7d45233436'
-appsec = '560c52ccd288fed045859ed18bffd973'
-params = {
- 'id':114514,
- 'str':'1919810',
- 'test':'いいよ,こいよ',
-}
-signed_params = appsign(params, appkey, appsec)
-query = urllib.parse.urlencode(signed_params)
-print(signed_params)
-print(query)
-```
-
-输出以下内容,分别是进行 api 签名后参数的 dict 以及 url query 格式
-
-```
-{'appkey': '1d8b6e7d45233436', 'id': 114514, 'str': '1919810', 'test': 'いいよ,こいよ', 'sign': '01479cf20504d865519ac50f33ba3a7d'}
-appkey=1d8b6e7d45233436&id=114514&str=1919810&test=%E3%81%84%E3%81%84%E3%82%88%EF%BC%8C%E3%81%93%E3%81%84%E3%82%88&sign=01479cf20504d865519ac50f33ba3a7d
-```
-
-## 已知的 APPKey
-
-| appkey | appsec(sign盐值) | 平台 | 应用 | 备注 |
-| ---------------- | -------------------------------- | ---- | -------- | -------- |
-| 07da50c9a0bf829f | 25bdede4e1581c836cab73a48790ca6e | 安卓 | 概念版 | |
-| 1d8b6e7d45233436 | 560c52ccd288fed045859ed18bffd973 | 安卓 | 客户端 | 一般用途 |
-| 178cf125136ca8ea | 34381a26236dd1171185c0beb042e1c6 | 安卓 | 概念版 | |
-| 27eb53fc9058f8c3 | c2ed53a74eeefe3cf99fbd01d8c9c375 | ios | 客户端 | 一般用途 |
-| 37207f2beaebf8d7 | e988e794d4d4b6dd43bc0e89d6e90c43 | 安卓 | biliLink | |
-| 4409e2ce8ffd12b8 | 59b43e04ad6965f34319062b478f83dd | TV | 客户端 | |
-| 57263273bc6b67f6 | a0488e488d1567960d3a765e8d129f90 | 安卓 | 客户端 | |
-| 5dce947fe22167f9 | | 安卓 | 必剪 | |
-| 7d336ec01856996b | a1ce6983bc89e20a36c37f40c4f1a0dd | 安卓 | 概念版 | |
-| 85eb6835b0a1034e | 2ad42749773c441109bdc0191257a664 | | | |
-| 8e16697a1b4f8121 | f5dd03b752426f2e623d7badb28d190a | 安卓 | 国际版 | |
-| aae92bc66f3edfab | af125a0d5279fd576c1b4418a3e8276d | PC | 投稿工具 | |
-| ae57252b0c09105d | c75875c596a69eb55bd119e74b07cfe3 | 安卓 | 国际版 | |
-| bb3101000e232e27 | 36efcfed79309338ced0380abd824ac1 | 安卓 | 国际版 | |
-| bca7e84c2d947ac6 | 60698ba2f68e01ce44738920a0ffe768 | 安卓 | 客户端 | 登录专用 |
-| cc578d267072c94d | | 安卓 | 轻视频 | |
-| cc8617fd6961e070 | | 安卓 | 漫画 | |
-| iVGUTjsxvpLeuDCf | aHRmhWMLkdeMuILqORnYZocwMBpMEOdt | 安卓 | 客户端 | 取流专用 |
-| YvirImLGlLANCLvM | JNlZNgfNGKZEpaDTkCdPQVXntXhuiJEM | ios | 客户端 | 取流专用 |
diff --git a/other/bvid_desc.md b/other/bvid_desc.md
deleted file mode 100644
index 0837017..0000000
--- a/other/bvid_desc.md
+++ /dev/null
@@ -1,151 +0,0 @@
-# bvid说明
-
-2020-03-23 B站推出了全新的稿件视频id“bvid”来接替之前的“avid”,其用法与性质等价于“avid”
-
-详见:
-
-1. [【升级公告】AV号全面升级至BV号(专栏)](https://www.bilibili.com/read/cv5167957)
-2. [【升级公告】AV号全面升级至BV号](https://www.bilibili.com/blackboard/activity-BV-PC.html)
-
-## 格式:
-
-“bvid”恒为长度为12的字符串,前两个字母为大写“BV”,后10个位base58计算结果
-
-## 实质:
-
-“bvid"为“avid”的base58编码,可通过算法进行相互转化
-
-## avid发放方式的变化:
-
-从2009-09-09 09:09:09 [av2](https://www.bilibili.com/video/av2)的发布到2020-03-28 19:45:02 [av99999999](https://www.bilibili.com/video/av99999999)的发布B站结束了以投稿时间为顺序的avid发放,改为随机发放avid
-
-~~暗示B站东方要完?泪目~~
-
-## av->bv算法:
-
-注:本算法及示例程序仅能编码及解码avid<` 29460791296 `,无法验证avid>=` 29460791296 `的正确性
-
-1. a=(avid⊕177451812)+8728348608
-2. 以i为循环变量循环6次b[i]=(a/58^i)%58
-3. 将b[i]中各个数字转换为以下码表中的字符
-
-码表:
-
-> fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF
-
-4. 初始化字符串b[i]=`BV1 4 1 7 `
-
-5. 按照以下字符顺序编码表编码并填充至b[i]
-
-字符顺序编码表:
-
-> 0 -> 11
->
-> 1 -> 10
->
-> 2 -> 3
->
-> 3 -> 8
->
-> 4 -> 4
->
-> 5 -> 6
-
-算法以及程序主要参考[知乎@mcfx的回答](https://www.zhihu.com/question/381784377/answer/1099438784)
-
-## bv->av算法:
-
-为以上算法的逆运算
-
-## 转换程序:
-
-目前使用**Python**与**C**作为示例
-
-### python
-
-```python
-table = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF' #码表
-tr = {} #反查码表
-#初始化反查码表
-for i in range(58):
- tr[table[i]] = i
-s = [11, 10, 3, 8, 4, 6] #位置编码表
-xor = 177451812 #固定异或值
-add = 8728348608 #固定加法值
-
-def bv2av(x):
- r = 0
- for i in range(6):
- r += tr[x[s[i]]] * 58 ** i
- return (r - add) ^ xor
-
-def av2bv(x):
- x = (x ^ xor) + add
- r = list('BV1 4 1 7 ')
- for i in range(6):
- r[s[i]] = table[x // 58 ** i % 58]
- return ''. join(r)
-
-print(av2bv(170001))
-print(bv2av('BV17x411w7KC'))
-```
-
-输出为:
-
-```
-BV17x411w7KC
-170001
-```
-
-### C语言
-
-```c
-#include
-#include
-#include
-#include
-
-const char table[] = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF"; //码表
-char tr[124]; //反查码表
-const unsigned long long Xor = 177451812; //固定异或值
-const unsigned long long add = 8728348608; //固定加法值
-const int s[] = {11, 10, 3, 8, 4, 6}; //位置编码表
-
-//初始化反查码表
-void tr_init() {
- for (int i = 0; i < 58; i++)
- tr[table[i]] = i;
-}
-
-unsigned long long bv2av(char bv[]) {
- unsigned long long r = 0;
- unsigned long long av;
- for (int i = 0; i < 6; i++)
- r += tr[bv[s[i]]] * (unsigned long long)pow(58, i);
- av = (r - add) ^ Xor;
- return av;
-}
-
-char* av2bv(unsigned long long av) {
- char* result = (char*)malloc(13);
- strcpy(result,"BV1 4 1 7 ");
- av = (av ^ Xor) + add;
- for (int i = 0; i < 6; i++)
- result[s[i]] = table[(unsigned long long)(av / (unsigned long long)pow(58, i)) % 58];
- return result;
-}
-
-int main() {
- tr_init();
- printf("%s\n",av2bv(170001));
- printf("%u\n",bv2av("BV17x411w7KC"));
- return 0;
-}
-```
-
-输出为:
-
-```
-BV17x411w7KC
-170001
-```
diff --git a/other/errcode.md b/other/errcode.md
deleted file mode 100644
index e6ee918..0000000
--- a/other/errcode.md
+++ /dev/null
@@ -1,59 +0,0 @@
-# 公共错误码
-
-下表为大部分接口返回值中`code`字段的值中公共的错误代码
-
-## 权限类:
-
-| 代码 | 含义 |
-| ---- | ------------------------ |
-| -1 | 应用程序不存在或已被封禁 |
-| -2 | Access Key错误 |
-| -3 | API校验密匙错误 |
-| -4 | 调用方对该Method没有权限 |
-| -101 | 账号未登录 |
-| -102 | 账号被封停 |
-| -103 | 积分不足 |
-| -104 | 硬币不足 |
-| -105 | 验证码错误 |
-| -106 | 账号非正式会员或在适应期 |
-| -107 | 应用不存在或者被封禁 |
-| -108 | 未绑定手机 |
-| -110 | 未绑定手机 |
-| -111 | csrf 校验失败 |
-| -112 | 系统升级中 |
-| -113 | 账号尚未实名认证 |
-| -114 | 请先绑定手机 |
-| -115 | 请先完成实名认证 |
-
-## 请求类:
-
-| 代码 | 含义 |
-| ---- | --------------------- |
-| -304 | 木有改动 |
-| -307 | 撞车跳转 |
-| -400 | 请求错误 |
-| -401 | 未认证 |
-| -403 | 访问权限不足 |
-| -404 | 啥都木有 |
-| -405 | 不支持该方法 |
-| -409 | 冲突 |
-| -500 | 服务器错误 |
-| -503 | 过载保护,服务暂不可用 |
-| -504 | 服务调用超时 |
-| -509 | 超出限制 |
-| -616 | 上传文件不存在 |
-| -617 | 上传文件太大 |
-| -625 | 登录失败次数太多 |
-| -626 | 用户不存在 |
-| -628 | 密码太弱 |
-| -629 | 用户名或密码错误 |
-| -632 | 操作对象数量限制 |
-| -643 | 被锁定 |
-| -650 | 用户等级太低 |
-| -652 | 重复的用户 |
-| -658 | Token 过期 |
-| -662 | 密码时间戳过期 |
-| -688 | 地理区域限制 |
-| -689 | 版权限制 |
-| -701 | 扣节操失败 |
-|-8888|对不起,服务器开小差了~ (ಥ﹏ಥ)
diff --git a/other/picture.md b/other/picture.md
deleted file mode 100644
index dcbb835..0000000
--- a/other/picture.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# 图片格式化
-
-对于\*.hdslb.com/bfs下的图片文件都可以使用以下格式化参数
-
-> \*.hdslb.com/bfs/\*/\*.\[jpg/png/gif\]@{width}w\_{high}h\_{quality}q.{format}
-
-| 可选参数 | 含义 | 备注 |
-| -------- | ---------------- | ---------------- |
-| width | 图片最大限制宽度 | |
-| high | 图片最大限制高度 | |
-| quality | 图片质量百分比 | 仅限webp |
-| format | 图片格式 | 仅限png/jpg/webp |
-
-**示例:**
-
-原始图片
-
-http://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg
-
-
-
-高度限制为100
-
-http://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@100h
-
-
-
-宽度限制为100
-
-http://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@100w
-
-
-
-转换格式为webp
-
-http://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@.webp
-
-
-
-转换为webp图片质量为1%
-
-http://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@1q.webp
-
-
\ No newline at end of file
diff --git a/other/time_stamp.md b/other/time_stamp.md
deleted file mode 100644
index da1b0ee..0000000
--- a/other/time_stamp.md
+++ /dev/null
@@ -1,79 +0,0 @@
-# 获取当前时间戳
-
-- [获取当前时间戳](#获取当前时间戳)
- - [获取当前时间戳](#获取当前时间戳-1)
- - [获取服务器端UTC时间](#获取服务器端utc时间)
-
----
-
-## 获取当前时间戳
-
-> http://api.bilibili.com/x/report/click/now
-
-*请求方式:GET*
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------- |
-| code | num | 返回值 | 0:成功 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------ | ---- |
-| now | num | 当前的时间戳 | |
-
-**示例:**
-
-```shell
-curl 'http://api.bilibili.com/x/report/click/now'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "now": 1592666471
- }
-}
-```
-
-
-
-## 获取服务器端UTC时间
-
-> http://interface.bilibili.com/serverdate.js
-
-*请求方式:GET*
-
-**js回复:**
-
-```js
-window.serverdate = Date.UTC(YYYY, M, D, h, m, s);
-```
-
-**示例:**
-
-```shell
-curl 'https://interface.bilibili.com/serverdate.js'
-```
-
-
-
-查看响应示例:
-
-```js
-window.serverdate = Date.UTC(2021, 4, 16, 17, 31, 8);
-```
-
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..16100db
--- /dev/null
+++ b/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "bilibili-api-collect",
+ "version": "0.0.1",
+ "repository": "https://github.com/SocialSisterYi/bilibili-API-collect.git",
+ "author": "SocialSisterYi <1440239038@qq.com>",
+ "license": "CC-BY-NC-4.0",
+ "dependencies": {
+ "markdown-it-task-lists": "^2.1.1"
+ },
+ "scripts": {
+ "dev": "vuepress dev",
+ "build": "vuepress build"
+ },
+ "devDependencies": {
+ "vuepress": "2.0.0-beta.67",
+ "vuepress-plugin-copy-code2": "2.0.0-beta.237",
+ "vuepress-vite": "2.0.0-beta.67",
+ "@vuepress/plugin-search": "^2.0.0-beta.67"
+ }
+}
diff --git a/ranking&dynamic/dynamic.md b/ranking&dynamic/dynamic.md
deleted file mode 100644
index d19df41..0000000
--- a/ranking&dynamic/dynamic.md
+++ /dev/null
@@ -1,199 +0,0 @@
-# 分区最新视频
-
-- [获取分区最新视频列表](#获取分区最新视频列表)
-
----
-
-## 获取分区最新视频列表
-
-> http://api.bilibili.com/x/web-interface/dynamic/region
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ------- |
-| pn | num | 页码 | 非必要 | 默认为1 |
-| ps | num | 每页项数 | 非必要 | 默认为5 |
-| rid | num | 目标分区tid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ------ | -------- | ---- |
-| archives | array | 视频列表 | |
-| page | obj | 页面信息 | |
-
-`data`中的`archives`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------- | ---- |
-| 0 | obj | 视频1 | |
-| n | obj | 视频(n+1) | |
-| …… | obj | …… | …… |
-
-`data`中的`archives`数组中的对象:
-
-基本同[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的data对象
-
-`data`中的`page`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | ---------- | ---- |
-| count | num | 总计视频数 | |
-| num | num | 当前页码 | |
-| size | num | 每页项数 | |
-
-**示例:**
-
-获取`tid=21`(生活->日常)分区中的2条最新动态视频信息
-
-```shell
-curl -G 'http://api.bilibili.com/x/web-interface/dynamic/region' \
---data-urlencode 'rid=21' \
---data-urlencode 'ps=2' \
---data-urlencode 'pn=1' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "page": {
- "num": 1,
- "size": 2,
- "count": 189
- },
- "archives": [{
- "aid": 56998612,
- "videos": 24,
- "tid": 21,
- "tname": "日常",
- "copyright": 1,
- "pic": "http://i2.hdslb.com/bfs/archive/76536be425ed98ba1f1b9aef1ada3a09f94c9f04.jpg",
- "title": "操控百万UP主的一天!",
- "pubdate": 1562568733,
- "ctime": 1561624175,
- "desc": "拍这个视频还挺辛苦的,希望大家喜欢的话给个三连叭!",
- "state": 0,
- "attribute": 536887424,
- "duration": 1864,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 0,
- "no_reprint": 1,
- "autoplay": 0,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- },
- "owner": {
- "mid": 2206456,
- "name": "花少北丶",
- "face": "http://i1.hdslb.com/bfs/face/86ef6895a8f88c80f2885e7eb9ba7989db437b93.jpg"
- },
- "stat": {
- "aid": 56998612,
- "view": 2863604,
- "danmaku": 82588,
- "reply": 5502,
- "favorite": 65471,
- "coin": 104905,
- "share": 5815,
- "now_rank": 0,
- "his_rank": 12,
- "like": 165638,
- "dislike": 0
- },
- "dynamic": "你想看的这里都有!",
- "cid": 99548502,
- "dimension": {
- "width": 1920,
- "height": 1080,
- "rotate": 0
- },
- "bvid": "BV1Wx411d7jX"
- }, {
- "aid": 837503204,
- "videos": 1,
- "tid": 21,
- "tname": "日常",
- "copyright": 1,
- "pic": "http://i1.hdslb.com/bfs/archive/7025827d8dbfc6139a2d066daa51a08897282534.jpg",
- "title": "“都是小人物,就别说什么大话了,活着就行”",
- "pubdate": 1585264054,
- "ctime": 1585264054,
- "desc": "每一位用心生活的小人物,都是各自生活中不平凡的英雄!",
- "state": 0,
- "attribute": 16512,
- "duration": 295,
- "mission_id": 12868,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 0,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- },
- "owner": {
- "mid": 350928606,
- "name": "彼岸的岛",
- "face": "http://i2.hdslb.com/bfs/face/9814b8b6defc045aa07c3bb08e8a30e63afd9f3e.jpg"
- },
- "stat": {
- "aid": 837503204,
- "view": 142239,
- "danmaku": 602,
- "reply": 702,
- "favorite": 4728,
- "coin": 4712,
- "share": 917,
- "now_rank": 0,
- "his_rank": 0,
- "like": 7700,
- "dislike": 0
- },
- "dynamic": "#全能打卡挑战##正能量##感人#",
- "cid": 169901162,
- "dimension": {
- "width": 1280,
- "height": 720,
- "rotate": 0
- },
- "bvid": "BV1cg4y1a7tB"
- }]
- }
-}
-```
-
-
diff --git a/ranking&dynamic/ranking.md b/ranking&dynamic/ranking.md
deleted file mode 100644
index c55bb4c..0000000
--- a/ranking&dynamic/ranking.md
+++ /dev/null
@@ -1,434 +0,0 @@
-# 视频排行榜
-
-
-
-- [视频排行榜](#视频排行榜)
- - [获取分区视频排行榜列表](#获取分区视频排行榜列表)
-
----
-
-## 获取分区视频排行榜列表
-
->
-
-*请求方式:GET*
-
-获取相应时间段内播放量增速为前11的视频
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ------------------------------------- |
-| day | num | 页码 | 非必要 | 3:三日榜 7:一周榜 默认为3 |
-| rid | num | 目标分区tid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ----- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | array | 视频列表 | |
-
-`data`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| --- | ---- | --------------- | ---- |
-| 0 | obj | 排行榜第1名 | |
-| n | obj | 排行榜第(n+1)名 | |
-| …… | obj | …… | …… |
-| 10 | obj | 排行榜第11名 | |
-
-`data`数组中的对象:
-
-基本同[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的data对象
-
-**示例:**
-
-获取`tid=1`(动画)分区中的三日视频排行榜
-
-```shell
-curl -G 'http://api.bilibili.com/x/web-interface/ranking/region' \
---data-urlencode 'rid=1' \
---data-urlencode 'day=3'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": [{
- "aid": "412584612",
- "bvid": "BV1CV411f76u",
- "typename": "短片·手书·配音",
- "title": "这TM才叫平等!!!",
- "subtitle": "",
- "play": 1247112,
- "review": 2018,
- "video_review": 2264,
- "favorites": 19546,
- "mid": 719238,
- "author": "谷谷永不咕咕",
- "description": "原视频:https://www.youtube.com/watch?v=a8KgVluAJzI\u0026t=\n作者:장삐쭈\n配音大赛 台词翻配赛道 谢谢大家!",
- "create": "2020-04-05 14:30",
- "pic": "http://i0.hdslb.com/bfs/archive/64de0b0738606f24ed1eeea6676469b7970c81ca.jpg",
- "coins": 19567,
- "duration": "1:43",
- "badgepay": false,
- "pts": 1114365,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 1,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- }
- }, {
- "aid": "837736324",
- "bvid": "BV1ag4y187ec",
- "typename": "综合",
- "title": "灌篮高手全国大赛第一集",
- "subtitle": "",
- "play": 607079,
- "review": 2360,
- "video_review": 5246,
- "favorites": 23999,
- "mid": 61195337,
- "author": "enptypictures",
- "description": "“教练,我想打篮球!”老板,请让我过吧!",
- "create": "2020-04-05 13:27",
- "pic": "http://i1.hdslb.com/bfs/archive/cb4022fd764d6347983437271a10f6da64363544.jpg",
- "coins": 59153,
- "duration": "20:17",
- "badgepay": false,
- "pts": 857636,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 1,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- }
- }, {
- "aid": "370159204",
- "bvid": "BV1PZ4y1x7K3",
- "typename": "综合",
- "title": "史上最强浩克,「绿殇大帝」王者归来!浩克将自己撕成碎片",
- "subtitle": "",
- "play": 589145,
- "review": 1937,
- "video_review": 4392,
- "favorites": 5237,
- "mid": 7487399,
- "author": "努力的Lorre",
- "description": "史上最强浩克,「绿殇大帝」王者归来!浩克将自己撕成碎片",
- "create": "2020-04-05 17:07",
- "pic": "http://i0.hdslb.com/bfs/archive/513c6eb8bfafd976fd69963ae943a186c9df1321.jpg",
- "coins": 9233,
- "duration": "12:12",
- "badgepay": false,
- "pts": 582708,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 0,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- }
- }, {
- "aid": "370032119",
- "bvid": "BV1nZ4y1j76z",
- "typename": "综合",
- "title": "史上最恶心国产动画!!!",
- "subtitle": "",
- "play": 579883,
- "review": 1701,
- "video_review": 7107,
- "favorites": 3727,
- "mid": 31261235,
- "author": "L另唐",
- "description": "文案参考:百度百科\nbgm:石田勝範 - おさんぽ、ビーロボ三悪\nToby Fox - sans\nL-Train - Alphys\nVarious Artists - Feast of Spring",
- "create": "2020-04-03 22:45",
- "pic": "http://i1.hdslb.com/bfs/archive/c78e7e1df34f64a19dbcd63021806e6387c100f6.jpg",
- "coins": 2692,
- "duration": "10:42",
- "badgepay": false,
- "pts": 580753,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 1,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- }
- }, {
- "aid": "582575540",
- "bvid": "BV1w64y1u7Go",
- "typename": "短片·手书·配音",
- "title": "这TM才叫素质教育!!",
- "subtitle": "",
- "play": 482363,
- "review": 671,
- "video_review": 1760,
- "favorites": 10616,
- "mid": 9354231,
- "author": "快乐的台长",
- "description": "素质系列第四集\n第一集BV1LE411j7QS\n第二集BV17E411A7ZL\n第三集BV1vK4y1C7GA\n动画名称:小浣熊\n剧本\u0026配音:台长\n收藏过5000继续制作该系列",
- "create": "2020-04-05 12:05",
- "pic": "http://i0.hdslb.com/bfs/archive/0ebc7cd732ccbb55d5413275acd75b8d0153b32d.jpg",
- "coins": 7356,
- "duration": "1:51",
- "badgepay": false,
- "pts": 544518,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 0,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- }
- }, {
- "aid": "882646972",
- "bvid": "BV1xK4y1r7Gy",
- "typename": "综合",
- "title": "【火影人物志58】从樱酱到樱哥,小樱到底经历了些什么?",
- "subtitle": "",
- "play": 378643,
- "review": 4087,
- "video_review": 7923,
- "favorites": 8362,
- "mid": 10040906,
- "author": "四季萌芽",
- "description": "小樱的故事不只有恋爱...\n如果您喜欢这个视频,记得关注我,还有三连支持一下╮( ̄▽ ̄)╭\n相关人物志:赤砂之蝎-BV1xt411L7Fu 纲手-BV1Tb411L7n8 雏田-BV1h4411f7vq",
- "create": "2020-04-05 17:17",
- "pic": "http://i0.hdslb.com/bfs/archive/8f827200ddad2c3f504c2545edfa6274125ddcd8.jpg",
- "coins": 25143,
- "duration": "18:02",
- "badgepay": false,
- "pts": 536641,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 0,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- }
- }, {
- "aid": "925191174",
- "bvid": "BV1GT4y1G7m7",
- "typename": "综合",
- "title": "一个视频告诉你,初中男生的欲望有多恐怖",
- "subtitle": "",
- "play": 358611,
- "review": 1241,
- "video_review": 2513,
- "favorites": 8640,
- "mid": 420182,
- "author": "郁郁_Yu",
- "description": "漫画名:《故作清纯的她》\n 《清楚なフリをしてますが》",
- "create": "2020-04-05 19:18",
- "pic": "http://i2.hdslb.com/bfs/archive/e32c2ec404a703d5907f89895d195be160d5c3b0.jpg",
- "coins": 8106,
- "duration": "5:03",
- "badgepay": false,
- "pts": 441684,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 1,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- }
- }, {
- "aid": "455018358",
- "bvid": "BV1X541167K2",
- "typename": "短片·手书·配音",
- "title": "一拳超人第三季 第一集",
- "subtitle": "",
- "play": 374134,
- "review": 608,
- "video_review": 839,
- "favorites": 1392,
- "mid": 391922072,
- "author": "庄尼兔拟音实验室",
- "description": "我特么。。。。我特么太累了。。。再不给茶兔三连奶一口的话真的要和你们阴阳相隔了。。\n本期视频得到了小伙伴——一只萌萌哒的喵砸 给我们上色 大家有兴趣也可以关注这个萌妹\n还有电影《那年我的初恋》的女主角——张咏娴的配音。 我是这部电影的配乐师!!!!!\n 另外就是想招募喜欢玩配音的小伙伴!~如果你对配音感兴趣的话。请私信我。。。。因为我真的配音太业余了。。我尽力了\n 我累!~!~!~!~!~!~!~!~!~!~三连鸭三连鸭三连鸭三连鸭三连鸭三连鸭三连鸭三连鸭三连鸭三连鸭三连鸭三连鸭三连鸭三连鸭三连",
- "create": "2020-04-04 09:18",
- "pic": "http://i2.hdslb.com/bfs/archive/2cd9f93f0ffcd98cd6e20ff45522339da1b67739.jpg",
- "coins": 3749,
- "duration": "21:22",
- "badgepay": false,
- "pts": 372642,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 0,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- }
- }, {
- "aid": "455013248",
- "bvid": "BV1r541167xx",
- "typename": "短片·手书·配音",
- "title": "1996年发行的SFC游戏《在杰难逃》(迫真)",
- "subtitle": "",
- "play": 207381,
- "review": 792,
- "video_review": 4694,
- "favorites": 12307,
- "mid": 16604395,
- "author": "基洛夫战机V",
- "description": "时隔十年,某公司在SFC平台上重制了他们在FC上失败的《在杰难逃》,但是由于原作销量惨淡,重制版靠捆绑《楼下的妹妹 高清版》卖出了114份。\n\n感谢@三氧化二钢 兄贵在创意过程中提供的帮助\n\n音乐:使用了MD平台的《洛克人世界》音乐(用MD平台的音乐冒充SFC的音乐,好大的胆子)\nRockman 2: Game Start\nRockman 2: Air Man Stage\nRockman 2: Bubble Man Stage\nRockman 2: Clash Man Stage\nRockman 2: F",
- "create": "2020-04-05 04:29",
- "pic": "http://i1.hdslb.com/bfs/archive/e5ecfa9ac956933627b15eb2bb4b7a57df3f5fe5.jpg",
- "coins": 13625,
- "duration": "36:26",
- "badgepay": false,
- "pts": 355418,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 0,
- "no_reprint": 1,
- "autoplay": 0,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- }
- }, {
- "aid": "625155108",
- "bvid": "BV1st4y1U7Ei",
- "typename": "短片·手书·配音",
- "title": "司令不在家,一赞10巴掌!【定格动画】",
- "subtitle": "",
- "play": 200943,
- "review": 983,
- "video_review": 1114,
- "favorites": 12700,
- "mid": 2017611,
- "author": "利利那TD25",
- "description": "本视频其实可以拆成很多单独的,又何必呢,一次管够!\n初号机真的挺难拍的,固定不易腿还特别软,figma绫波丽是也让人头疼\n\n角色表:\n海洋堂、figma绫波丽、明日香\nfigma眼镜娘\nRG、寿屋初号机\n\n素材均来自站内:\n新宝岛、jojo、今天妈妈不在家、苏卡不列、病名为爱、抖肩舞、搓腚、安塞腰鼓、塞班\n火红的萨日朗:BV1r7411W7uR\n米津玄师lemon:BV1ut411s7ZV",
- "create": "2020-04-06 11:46",
- "pic": "http://i1.hdslb.com/bfs/archive/22a78c9a8ccba9b267b2b230b69bc243e2039667.jpg",
- "coins": 28478,
- "duration": "2:58",
- "badgepay": false,
- "pts": 322009,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 1,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- }
- }, {
- "aid": "540066906",
- "bvid": "BV1ai4y1b7qV",
- "typename": "综合",
- "title": "全球45亿点击,被翻译成28种语言!!B站新番【神之塔】",
- "subtitle": "",
- "play": 349274,
- "review": 969,
- "video_review": 752,
- "favorites": 2530,
- "mid": 392518574,
- "author": "py86-",
- "description": "昨天默哀,延迟投稿,大家见谅!这次是B站新番的神之塔!!大家喜欢的话可以三连支持一下",
- "create": "2020-04-05 07:58",
- "pic": "http://i2.hdslb.com/bfs/archive/326f340b52bac51ebbc399d27a63ef2e2279738e.jpg",
- "coins": 1786,
- "duration": "4:10",
- "badgepay": false,
- "pts": 317935,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 1,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- }
- }]
-}
-```
-
-
diff --git a/search/hot.md b/search/hot.md
deleted file mode 100644
index 080660e..0000000
--- a/search/hot.md
+++ /dev/null
@@ -1,365 +0,0 @@
-# 默认搜索&热搜
-
-- [获取默认搜索内容(web端)](#获取默认搜索内容(web端))
-- [获取热搜列表(web端)](#获取热搜列表(web端))
-
----
-
-## 获取默认搜索内容(web端)
-
-> http://api.bilibili.com/x/web-interface/search/default
-
-*请求方式:GET*
-
-默认搜索为搜索框中默认填充内容,用于官方推荐内容,若不输入点击搜索按钮跳转为`url`中的链接
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------- |
-| code | num | 返回值 | 0:成功 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ---- | --------------- | -------------- |
-| seid | str | 搜索seid | |
-| id | num | 默认搜索id | |
-| type | num | 0 | |
-| show_name | str | 显示文字 | |
-| name | str | 空 | |
-| goto_type | num | 跳转类型 | 1:视频 |
-| goto_value | str | 搜索目标id | 视频:稿件avid |
-| url | str | 搜索目标跳转url | |
-
-**示例:**
-
-```shell
-curl 'http://api.bilibili.com/x/web-interface/search/default'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "seid": "17607543598496143098",
- "id": 3296036255232726331,
- "type": 0,
- "show_name": "歪果仁在中国做模特能赚多少钱?",
- "name": "",
- "goto_type": 1,
- "goto_value": "243920322",
- "url": "https://www.bilibili.com/video/BV1Tv411q7gx"
- }
-}
-```
-
-
-
-## 获取热搜列表(web端)
-
-> http://s.search.bilibili.com/main/hotword
-
-*请求方式:GET*
-
-榜单每隔固定时间统计一次,请求后返回搜索前20的关键词
-
-带有转义
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------- | ----- | ------------ | ------------- |
-| exp_str | str | ??? | |
-| code | num | 返回值 | 0:成功 |
-| cost | obj | 详细搜索用时 | 大概是吧? |
-| seid | str | 搜索seid | |
-| timestamp | num | 榜单统计时间 | 时间戳 |
-| message | str | 错误信息 | 默认为success |
-| list | array | 热搜列表 | |
-
-`list`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | ------------ |
-| 0 | obj | 榜单第1名 | |
-| n | obj | 榜单第(n+1)名 | 按照名次顺序 |
-| 19 | obj | 榜单第20名 | 最后一项 |
-
-`list`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ---- | -------- | ----------------------------- |
-| status | str | 空 | |
-| keyword | str | 关键词 | |
-| goto_type | num | 0 | |
-| pos | num | 名次 | 1-20 |
-| word_type | num | 条目属性 | 1:正常 4:新 5:热 |
-| id | num | 名次 | 1-20 |
-| goto_value | str | 空 | |
-| name_type | str | 空 | |
-| icon | str | 图标url | |
-
-**示例:**
-
-```shell
-curl 'http://s.search.bilibili.com/main/hotword'
-```
-
-
-查看响应示例:
-
-```json
-{
- "exp_str": "8104#8200#8300#8401#8500#5502#6699",
- "code": 0,
- "cost": {
- "reas_request": "0.001895",
- "params_check": "0.000127",
- "reas_response_format": "0.000098",
- "deserialize_response": "0.000080",
- "reas_request_format": "0.000076",
- "total": "0.002479",
- "main_handler": "0.002252"
- },
- "seid": "9318821020548476185",
- "timestamp": 1596034742,
- "message": "success",
- "list": [
- {
- "status": "",
- "keyword": "特朗普",
- "goto_type": 0,
- "pos": 1,
- "word_type": 1,
- "id": 1,
- "goto_value": "",
- "name_type": "",
- "icon": ""
- },
- {
- "status": "",
- "keyword": "武汉协和医院",
- "goto_type": 0,
- "pos": 2,
- "word_type": 5,
- "id": 2,
- "goto_value": "",
- "name_type": "",
- "icon": "http://i0.hdslb.com/bfs/feed-admin/e9e7a2d8497d4063421b685e72680bf1cfb99a0d.png"
- },
- {
- "status": "",
- "keyword": "元龙",
- "goto_type": 0,
- "pos": 3,
- "word_type": 5,
- "id": 3,
- "goto_value": "",
- "name_type": "",
- "icon": "http://i0.hdslb.com/bfs/feed-admin/e9e7a2d8497d4063421b685e72680bf1cfb99a0d.png"
- },
- {
- "status": "",
- "keyword": "周深",
- "goto_type": 0,
- "pos": 4,
- "word_type": 4,
- "id": 4,
- "goto_value": "",
- "name_type": "",
- "icon": "http://i0.hdslb.com/bfs/feed-admin/4d579fb61f9655316582db193118bba3a721eec0.png"
- },
- {
- "status": "",
- "keyword": "徐大sao",
- "goto_type": 0,
- "pos": 5,
- "word_type": 4,
- "id": 5,
- "goto_value": "",
- "name_type": "",
- "icon": "http://i0.hdslb.com/bfs/feed-admin/4d579fb61f9655316582db193118bba3a721eec0.png"
- },
- {
- "status": "",
- "keyword": "FPX",
- "goto_type": 0,
- "pos": 6,
- "word_type": 4,
- "id": 6,
- "goto_value": "",
- "name_type": "",
- "icon": "http://i0.hdslb.com/bfs/feed-admin/4d579fb61f9655316582db193118bba3a721eec0.png"
- },
- {
- "status": "",
- "keyword": "BLACKPINK",
- "goto_type": 0,
- "pos": 7,
- "word_type": 1,
- "id": 7,
- "goto_value": "",
- "name_type": "",
- "icon": ""
- },
- {
- "status": "",
- "keyword": "沈力",
- "goto_type": 0,
- "pos": 8,
- "word_type": 1,
- "id": 8,
- "goto_value": "",
- "name_type": "",
- "icon": ""
- },
- {
- "status": "",
- "keyword": "老番茄",
- "goto_type": 0,
- "pos": 9,
- "word_type": 1,
- "id": 9,
- "goto_value": "",
- "name_type": "",
- "icon": ""
- },
- {
- "status": "",
- "keyword": "JDG",
- "goto_type": 0,
- "pos": 10,
- "word_type": 4,
- "id": 10,
- "goto_value": "",
- "name_type": "",
- "icon": "http://i0.hdslb.com/bfs/feed-admin/4d579fb61f9655316582db193118bba3a721eec0.png"
- },
- {
- "status": "",
- "keyword": "荒废工厂",
- "goto_type": 0,
- "pos": 11,
- "word_type": 1,
- "id": 11,
- "goto_value": "",
- "name_type": "",
- "icon": ""
- },
- {
- "status": "",
- "keyword": "活着",
- "goto_type": 0,
- "pos": 12,
- "word_type": 1,
- "id": 12,
- "goto_value": "",
- "name_type": "",
- "icon": ""
- },
- {
- "status": "",
- "keyword": "明日方舟",
- "goto_type": 0,
- "pos": 13,
- "word_type": 1,
- "id": 13,
- "goto_value": "",
- "name_type": "",
- "icon": ""
- },
- {
- "status": "",
- "keyword": "创造营2020",
- "goto_type": 0,
- "pos": 14,
- "word_type": 1,
- "id": 14,
- "goto_value": "",
- "name_type": "",
- "icon": ""
- },
- {
- "status": "",
- "keyword": "黑人抬棺",
- "goto_type": 0,
- "pos": 15,
- "word_type": 1,
- "id": 15,
- "goto_value": "",
- "name_type": "",
- "icon": ""
- },
- {
- "status": "",
- "keyword": "名侦探柯南",
- "goto_type": 0,
- "pos": 16,
- "word_type": 1,
- "id": 16,
- "goto_value": "",
- "name_type": "",
- "icon": ""
- },
- {
- "status": "",
- "keyword": "fpx",
- "goto_type": 0,
- "pos": 17,
- "word_type": 1,
- "id": 17,
- "goto_value": "",
- "name_type": "",
- "icon": ""
- },
- {
- "status": "",
- "keyword": "csgo",
- "goto_type": 0,
- "pos": 18,
- "word_type": 1,
- "id": 18,
- "goto_value": "",
- "name_type": "",
- "icon": ""
- },
- {
- "status": "",
- "keyword": "正道的光",
- "goto_type": 0,
- "pos": 19,
- "word_type": 1,
- "id": 19,
- "goto_value": "",
- "name_type": "",
- "icon": ""
- },
- {
- "status": "",
- "keyword": "bts",
- "goto_type": 0,
- "pos": 20,
- "word_type": 1,
- "id": 20,
- "goto_value": "",
- "name_type": "",
- "icon": ""
- }
- ]
-}
-```
-
-
\ No newline at end of file
diff --git a/search/suggest.md b/search/suggest.md
deleted file mode 100644
index 22ba008..0000000
--- a/search/suggest.md
+++ /dev/null
@@ -1,185 +0,0 @@
-# 搜索建议
-
-- [获取搜索建议关键词(web端)](#获取搜索建议关键词(web端))
-
----
-
-## 获取搜索建议关键词(web端)
-
-> http://s.search.bilibili.com/main/suggest
-
-*请求方式:GET*
-
-搜索建议最多提供10个候选关键词
-
-搜索建议内容可为任意语言(中 英 日等....),中文拼音支持全拼联想词
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| --------- | ---- | ---------------------- | ------ | ------------------------ |
-| term | str | 需要获得建议的输入内容 | 必要 | |
-| main_ver | str | v1 | 非必要 | 固定为`v1` |
-| highlight | str | 任意 | 非必要 | 有此项开启关键词高亮标签 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | ------------ | ------------ |
-| code | num | 返回值 | 0:成功 |
-| cost | obj | 详细搜索用时 | 大概是吧? |
-| result | obj | 搜索建议结果 | |
-| page caches | obj | ??? | 作用尚不明确 |
-| sengine | obj | ??? | 作用尚不明确 |
-| stoken | str | ??? | 作用尚不明确 |
-
-`cost`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | -------- | ---- |
-| about | obj | 套了个娃 | |
-
-`cost`中的`about`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------ | ---- | ---- | ---- |
-| params_check | str | | |
-| total | str | | |
-| main_handler | str | | |
-
-`result`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ----- | -------- | ---- |
-| tag | array | 套了个娃 | |
-
-`result`中的`tag`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------------- | ---------------------- |
-| 0 | obj | 第1建议关键词 | |
-| n | obj | 第(n+1)建议关键词 | 按照相关程度与热度顺序 |
-| 9 | obj | 第10建议关键词 | 最后一项 |
-
-`tag`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | ---------- | ------------------------------------------------------------ |
-| value | str | 关键词内容 | |
-| ref | num | 0 | 作用尚不明确 |
-| name | str | 显示内容 | 在无高亮显示时与`value`相同 有高亮显示时带有``的xml标签 |
-| spid | num | ??? | 作用尚不明确 |
-
-`page caches`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ---- | ---- | ------------ |
-| save cache | str | no | 作用尚不明确 |
-
-`sengine`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | ---- | ------------ |
-| usage | num | 0 | 作用尚不明确 |
-
-**示例:**
-
-获取关于`lei`的搜索建议,关键词带有高亮
-
-```shell
-curl -G 'http://s.search.bilibili.com/main/suggest' \
---data-urlencode 'term=lei' \
---data-urlencode 'main_ver=v1' \
---data-urlencode 'highlight='
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "cost": {
- "about": {
- "params_check": "0.000103",
- "total": "0.011644",
- "main_handler": "0.011472"
- }
- },
- "result": {
- "tag": [
- {
- "value": "雷军",
- "ref": 0,
- "name": "雷军",
- "spid": 1
- },
- {
- "value": "雷之律者",
- "ref": 0,
- "name": "雷之律者",
- "spid": 5
- },
- {
- "value": "LEI神",
- "ref": 0,
- "name": "LEI 神",
- "spid": 5
- },
- {
- "value": "LEIGH ELLEXSON",
- "ref": 0,
- "name": "LEI GH ELLEXSON",
- "spid": 5
- },
- {
- "value": "LEICA Q2",
- "ref": 0,
- "name": "LEI CA Q2",
- "spid": 5
- },
- {
- "value": "LEIGHANNE",
- "ref": 0,
- "name": "LEI GHANNE",
- "spid": 0
- },
- {
- "value": "雷达探测姬",
- "ref": 0,
- "name": "雷达探测姬",
- "spid": 5
- },
- {
- "value": "雷律",
- "ref": 0,
- "name": "雷律",
- "spid": 5
- },
- {
- "value": "雷霆嘎巴",
- "ref": 0,
- "name": "雷霆嘎巴",
- "spid": 5
- },
- {
- "value": "雷霆沙赞",
- "ref": 0,
- "name": "雷霆沙赞",
- "spid": 5
- }
- ]
- },
- "page caches": {
- "save cache": "no"
- },
- "sengine": {
- "usage": 0
- },
- "stoken": "12344377692164099019"
-}
-```
-
-
diff --git a/user/info.md b/user/info.md
deleted file mode 100644
index a720a70..0000000
--- a/user/info.md
+++ /dev/null
@@ -1,797 +0,0 @@
-# 用户基本信息
-
-
-
-- [用户空间详细信息 ](#用户空间详细信息)
-- [用户名片信息](#用户名片信息)
-- [登录用户空间详细信息](#登录用户空间详细信息)
-
----
-
-## 用户空间详细信息
-
-> http://api.bilibili.com/x/space/acc/info
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| mid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------------- | ---- | ---------------- | ------------------------------------------------------------ |
-| mid | num | mid | |
-| name | str | 昵称 | |
-| sex | str | 性别 | 男/女/保密 |
-| face | str | 头像链接 | |
-| face_nft | num | 是否为 nft 头像 | `0`不是nft头像 `1`是 nft 头像 |
-| sign | str | 签名 | |
-| rank | num | 10000 | |
-| level | num | 当前等级 | 0-6级 |
-| jointime | num | 0 | |
-| moral | num | 0 | |
-| silence | num | 封禁状态 | 0:正常 1:被封 |
-| coins | num | 硬币数 | 需要登录(Cookie) 只能查看自己的 默认为0 |
-| fans_badge | bool | 是否具有粉丝勋章 | false:无 true:有 |
-| fans_medal | obj | 粉丝勋章信息 | |
-| official | obj | 认证信息 | |
-| vip | obj | 会员信息 | |
-| pendant | obj | 头像框信息 | |
-| nameplate | obj | 勋章信息 | |
-| user_honour_info | obj | | |
-| is_followed | bool | 是否关注此用户 | true:已关注 false:未关注 需要登录(Cookie) 未登录恒为false |
-| top_photo | str | 主页头图链接 | |
-| theme | obj | 空 | **作用尚不明确** |
-| sys_notice | obj | 系统通知 | 无内容则为空对象 主要用于展示如用户争议、纪念账号等等 |
-| live_room | obj | 直播间信息 | |
-| birthday | str | 生日 | MM-DD 如设置隐私为空 |
-| school | obj | 学校 | |
-| profession | obj | | |
-| tags | null | | |
-| series | obj | | |
-| is_senior_member | num | | |
-
-`data`中的`official`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | -------- | ------------------------------------------------- |
-| role | num | 认证类型 | 0:无 1 2 7:个人认证 3 4 5 6:机构认证 |
-| title | str | 认证信息 | 无为空 |
-| desc | str | 认证备注 | 无为空 |
-| type | num | 是否认证 | -1:无 0:认证 |
-
-`data`中的`vip`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------------- | ---- | ---------------- | ----------------------------------------------- |
-| type | num | 会员类型 | 0:无 1:月大会员 2:年度及以上大会员 |
-| status | num | 会员状态 | 0:无 1:有 |
-| due_date | num | 会员过期时间 | Unix时间戳(毫秒) |
-| theme_type | num | 0 | 作用尚不明确 |
-| label | obj | 会员标签 | |
-| avatar_subscript | num | 是否显示会员图标 | 0:不显示 1:显示 |
-| nickname_color | str | 会员昵称颜色 | 颜色码 |
-
-`vip`中的`label`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | ------------ | ------------------------------------------------------------ |
-| path | str | 空 | 作用尚不明确 |
-| text | str | 会员类型文案 | |
-| label_theme | str | 会员标签 | vip:大会员 annual_vip:年度大会员 ten_annual_vip:十年大会员 hundred_annual_vip:百年大会员 |
-
-`data`中的`pendant`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ---- | ------------- | -------------------- |
-| pid | num | 头像框id | **详细说明有待补充** |
-| name | str | 头像框名称 | |
-| image | str | 头像框图片url | |
-| expire | num | (?) | |
-
-`data`中的`nameplate`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | ---------------- | -------------------- |
-| nid | num | 勋章id | **详细说明有待补充** |
-| name | str | 勋章名称 | |
-| image | str | 挂件图片url 正常 | |
-| image_small | str | 勋章图片url 小 | |
-| level | str | 勋章等级 | |
-| condition | str | 勋章条件 | |
-
-`data`中的`sys_notice`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | --------------- | ----------------------------------------------- |
-| id | num | 系统提示类型id | 8:争议账号 20:纪念账号 22:合约诉讼 |
-| content | str | 提示文案 | |
-| url | str | 提示信息页面url | |
-| notice_type | num | ? | 作用尚不明确 此字段非必须 |
-| icon | str | 提示图标url | 此字段非必须 |
-| text_color | str | 提示文字颜色 | 此字段非必须 颜色码 |
-| bg_color | str | 提示背景颜色 | 此字段非必须 颜色码 |
-
-`data`中的`live_room`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------------- | ---- | --------------- | ------------------------ |
-| roomStatus | num | 直播间状态 | 0:无房间 1:有房间 |
-| liveStatus | num | 直播状态 | 0:未开播 1:直播中 |
-| url | str | 直播间网页 url | |
-| title | str | 直播间标题 | |
-| cover | str | 直播间封面 url | |
-| watched_show | obj | | |
-| roomid | num | 直播间 id(短号) | |
-| roundStatus | num | 轮播状态 | 0:未轮播 1:轮播 |
-| broadcast_type | num | 0 | |
-
-`live_room`中的`watched_show`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | ------------------- | ---- |
-| switch | bool | ? | |
-| num | num | total watched users | |
-| text_small | str | | |
-| text_large | str | | |
-| icon | str | watched icon url | |
-| icon_location | str | ? | |
-| icon_web | str | watched icon url | |
-
-`data`中的`school`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------ | ---------- |
-| name | str | 就读大学名称 | 没有则为空 |
-
-`data`中的`profession`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---- | ---- |
-| name | str | (?) | |
-
-`data`中的`series`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------------- | ---- | ---- | ---- |
-| user_upgrade_status | num | (?) | |
-| show_upgrade_window | bool | (?) | |
-
-**示例:**
-
-查询用户`mid=2`的详细信息
-
-```shell
-curl -G 'http://api.bilibili.com/x/space/acc/info' \
---data-urlencode 'mid=2' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "mid": 2,
- "name": "碧诗",
- "sex": "男",
- "face": "http://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg",
- "sign": "kami.im 直男过气网红 # av362830 “We Are Star Dust”",
- "rank": 20000,
- "level": 6,
- "jointime": 0,
- "moral": 0,
- "silence": 0,
- "coins": 0,
- "fans_badge": true,
- "fans_medal": {
- "show": true,
- "wear": true,
- "medal": {
- "uid": 2,
- "target_id": 335115,
- "medal_id": 45408,
- "level": 21,
- "medal_name": "伍千万",
- "medal_color": 1725515,
- "intimacy": 1980,
- "next_intimacy": 2000,
- "day_limit": 250000,
- "medal_color_start": 1725515,
- "medal_color_end": 5414290,
- "medal_color_border": 1725515,
- "is_lighted": 1,
- "light_status": 1,
- "wearing_status": 1,
- "score": 50001980
- }
- },
- "official": {
- "role": 2,
- "title": "bilibili创始人(站长)",
- "desc": "",
- "type": 0
- },
- "vip": {
- "type": 2,
- "status": 1,
- "due_date": 3896524800000,
- "vip_pay_type": 0,
- "theme_type": 0,
- "label": {
- "path": "",
- "text": "十年大会员",
- "label_theme": "ten_annual_vip",
- "text_color": "#FFFFFF",
- "bg_style": 1,
- "bg_color": "#FB7299",
- "border_color": ""
- },
- "avatar_subscript": 1,
- "nickname_color": "#FB7299",
- "role": 7,
- "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 10,
- "name": "见习偶像",
- "image": "http://i0.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png",
- "image_small": "http://i1.hdslb.com/bfs/face/275b468b043ec246737ab8580a2075bee0b1263b.png",
- "level": "普通勋章",
- "condition": "所有自制视频总播放数\u003e=10万"
- },
- "user_honour_info": {
- "mid": 0,
- "colour": null,
- "tags": null
- },
- "is_followed": true,
- "top_photo": "http://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png",
- "theme": {},
- "sys_notice": {},
- "live_room": {
- "roomStatus": 1,
- "liveStatus": 1,
- "url": "https://live.bilibili.com/80397?broadcast_type=0\u0026is_room_feed=1",
- "title": "天空一道巨响!",
- "cover": "http://i0.hdslb.com/bfs/live/new_room_cover/f702ce1b7d1b728dafa57d96bbf7db319ab3aab7.jpg",
- "roomid": 80397,
- "roundStatus": 0,
- "broadcast_type": 0,
- "watched_show": {
- "switch": true,
- "num": 161436,
- "text_small": "16.1万",
- "text_large": "16.1万人看过",
- "icon": "https://i0.hdslb.com/bfs/live/a725a9e61242ef44d764ac911691a7ce07f36c1d.png",
- "icon_location": "",
- "icon_web": "https://i0.hdslb.com/bfs/live/8d9d0f33ef8bf6f308742752d13dd0df731df19c.png"
- }
- },
- "birthday": "09-19",
- "school": {
- "name": ""
- },
- "profession": {
- "name": ""
- },
- "tags": null,
- "series": {
- "user_upgrade_status": 1,
- "show_upgrade_window": false
- }
- }
-}
-```
-
-
-
-**查询到的信息解析如下:**
-
-**用户昵称为**:碧诗
-
-**性别**:男
-
-**用户的头像为**:
-
-http://i1.hdslb.com/bfs/face/3e60b20604b6fdc7d081eb6a1ec72aa47c5a3964.jpg
-
-
-
-**等级**:6级
-
-**生日**:09-19
-
-**粉丝勋章状态**:拥有
-
-**认证**:个人认证
-
-**认证名称**: bilibili创始人(站长)
-
-**大会员类型**:年度
-
-**大会员状态**:已开通
-
-**头像框**:管理员
-
- http://i2.hdslb.com/bfs/face/02a3b79edef0f0e682de7f5dca7b6b5fe36d5f65.png
-
-
-
-**粉丝勋章**: 见习偶像
-
- http://i1.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png
-
-
-
-**空间头图**:
-
-http://i2.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png
-
-
-
-
-
-## 用户名片信息
-
-> http://api.bilibili.com/x/web-interface/card
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | -------------------- | ------ | ----------------------- |
-| mid | num | 目标用户mid | 必要 | |
-| photo | bool | 是否请求用户主页头图 | 非必要 | true:是 false:否 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ----- | -------- | ---- |
-| card | obj | 卡片信息 | |
-
-`data`中的`card`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ----- | -------------- | ------------------------------------------------------------ |
-| mid | num | 用户mid | |
-| approve | bool | false | **作用尚不明确** |
-| name | str | 用户昵称 | |
-| sex | str | 用户性别 | 男 女 保密 |
-| face | str | 用户头像链接 | |
-| DisplayRank | str | 0 | **作用尚不明确** |
-| regtime | num | 0 | **作用尚不明确** |
-| spacesta | num | 0 | **作用尚不明确** |
-| birthday | str | 空 | **作用尚不明确** |
-| place | str | 空 | **作用尚不明确** |
-| description | str | 空 | **作用尚不明确** |
-| article | num | 0 | **作用尚不明确** |
-| attentions | array | 空 | **作用尚不明确** |
-| fans | num | 粉丝数 | |
-| friend | num | 关注数 | |
-| attention | num | 关注数 | |
-| level_info | obj | 等级 | |
-| pendant | obj | 挂件 | |
-| nameplate | obj | 勋章 | |
-| Official | obj | 认证信息 | |
-| official_verify | obj | 认证信息2 | |
-| vip | obj | 大会员状态 | |
-| space | obj | 主页头图 | |
-| following | bool | 是否关注此用户 | true:已关注 false:未关注 需要登录(Cookie) 未登录为false |
-| archive_count | num | 用户稿件数 | |
-| article_count | num | 0 | **作用尚不明确** |
-| follower | num | 粉丝数 | |
-
-`card`中的`level_info`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | -------- | ---------------- |
-| current_level | num | 当前等级 | 0-6级 |
-| current_min | num | 0 | 作用尚不明确 |
-| current_exp | num | 0 | **作用尚不明确** |
-| next_exp | num | 0 | **作用尚不明确** |
-
-`card`中的`pendant`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ---- | ----------- | ---------------- |
-| pid | num | 挂件id | |
-| name | str | 挂件名称 | |
-| image | str | 挂件图片url | |
-| expire | num | 0 | **作用尚不明确** |
-
-`card`中的`nameplate`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | ---------------- | -------------------- |
-| nid | num | 勋章id | **详细说明有待补充** |
-| name | str | 勋章名称 | |
-| image | str | 挂件图片url 正常 | |
-| image_small | str | 勋章图片url 小 | |
-| level | str | 勋章等级 | |
-| condition | str | 勋章条件 | |
-
-`card`中的`Official`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | -------- | ------------------------------------------------- |
-| role | num | 认证类型 | 0:无 1 2 7:个人认证 3 4 5 6:机构认证 |
-| title | str | 认证信息 | 无为空 |
-| desc | str | 认证备注 | 无为空 |
-| type | num | 是否认证 | -1:无 0:认证 |
-
-`card`中的`official_verify`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | -------- | ------------------- |
-| type | num | 是否认证 | -1:无 0:认证 |
-| desc | str | 认证信息 | 无为空 |
-
-`card`中的`vip`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | ---------- | ------------------------------------------------- |
-| vipType | num | 大会员类型 | 0:无 1:月度大会员 2:年度及以上大会员 |
-| dueRemark | str | 空 | **作用尚不明确** |
-| accessStatus | num | 0 | **作用尚不明确** |
-| vipStatus | num | 大会员状态 | 0:无 1:有 |
-| vipStatusWarn | str | 空 | **作用尚不明确** |
-| theme_type | num | 0 | **作用尚不明确** |
-
-`card`中的`space`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | ---------------- | ---- |
-| s_img | str | 主页头图url 小图 | |
-| l_img | str | 主页头图url 正常 | |
-
-**示列:**
-
-```shell
-curl -G 'api.bilibili.com/x/web-interface/card' \
---data-urlencode 'mid=2' \
---data-urlencode 'photo=true' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "card": {
- "mid": "2",
- "name": "碧诗",
- "approve": false,
- "sex": "男",
- "rank": "20000",
- "face": "http://i2.hdslb.com/bfs/face/ef0457addb24141e15dfac6fbf45293ccf1e32ab.jpg",
- "DisplayRank": "0",
- "regtime": 0,
- "spacesta": 0,
- "birthday": "",
- "place": "",
- "description": "",
- "article": 0,
- "attentions": [],
- "fans": 969999,
- "friend": 234,
- "attention": 234,
- "sign": "kami.im 直男过气网红 # av362830 “We Are Star Dust”",
- "level_info": {
- "current_level": 6,
- "current_min": 0,
- "current_exp": 0,
- "next_exp": 0
- },
- "pendant": {
- "pid": 0,
- "name": "",
- "image": "",
- "expire": 0,
- "image_enhance": "",
- "image_enhance_frame": ""
- },
- "nameplate": {
- "nid": 10,
- "name": "见习偶像",
- "image": "http://i2.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png",
- "image_small": "http://i2.hdslb.com/bfs/face/275b468b043ec246737ab8580a2075bee0b1263b.png",
- "level": "普通勋章",
- "condition": "所有自制视频总播放数\u003e=10万"
- },
- "Official": {
- "role": 2,
- "title": "bilibili创始人(站长)",
- "desc": "",
- "type": 0
- },
- "official_verify": {
- "type": 0,
- "desc": "bilibili创始人(站长)"
- },
- "vip": {
- "type": 2,
- "status": 1,
- "due_date": 3896524800000,
- "vip_pay_type": 0,
- "theme_type": 0,
- "label": {
- "path": "",
- "text": "十年大会员",
- "label_theme": "ten_annual_vip",
- "text_color": "#FFFFFF",
- "bg_style": 1,
- "bg_color": "#FB7299",
- "border_color": ""
- },
- "avatar_subscript": 1,
- "nickname_color": "#FB7299",
- "role": 7,
- "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png",
- "vipType": 2,
- "vipStatus": 1
- }
- },
- "space": {
- "s_img": "http://i1.hdslb.com/bfs/space/768cc4fd97618cf589d23c2711a1d1a729f42235.png",
- "l_img": "http://i1.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png"
- },
- "following": true,
- "archive_count": 37,
- "article_count": 0,
- "follower": 969999
- }
-}
-```
-
-
-
-## 登录用户空间详细信息
-
-> http://api.bilibili.com/x/space/myinfo
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------- |
-| code | num | 返回值 | 0:成功 -101:未登录 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ---- | ------------ | ------------------------ |
-| mid | num | mid | |
-| name | str | 昵称 | |
-| sex | str | 性别 | 男 女 保密 |
-| face | str | 头像图片url | |
-| sign | str | 签名 | |
-| rank | num | 10000 | **作用尚不明确** |
-| level | num | 当前等级 | 0-6级 |
-| jointime | num | 0 | **作用尚不明确** |
-| moral | num | 节操 | 默认70 |
-| silence | num | 封禁状态 | 0:正常 1:被封 |
-| email_status | num | 已验证邮箱 | 0:未验证 1:已验证 |
-| tel_status | num | 已验证手机号 | 0:未验证 1:已验证 |
-| identification | num | 1 | **作用尚不明确** |
-| vip | obj | 大会员状态 | |
-| birthday | num | 生日 | 时间戳 |
-| is_tourist | num | 0 | **作用尚不明确** |
-| is_fake_account | num | 0 | **作用尚不明确** |
-| pin_prompting | num | 0 | **作用尚不明确** |
-| is_deleted | num | 0 | **作用尚不明确** |
-| coins | num | 硬币数 | |
-| following | num | 粉丝数 | |
-| follower | num | 粉丝数 | |
-
-`data`中的`vip`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------------- | ---- | ---------------- | ----------------------------------------------- |
-| type | num | 会员类型 | 0:无 1:月大会员 2:年度及以上大会员 |
-| status | num | 会员状态 | 0:无 1:有 |
-| due_date | num | 会员过期时间 | Unix时间戳(毫秒) |
-| theme_type | num | 0 | 作用尚不明确 |
-| label | obj | 会员标签 | |
-| avatar_subscript | num | 是否显示会员图标 | 0:不显示 1:显示 |
-| nickname_color | str | 会员昵称颜色 | 颜色码 |
-
-`vip`中的`label`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | -------- | ------------------------------------------------------------ |
-| path | str | 空 | 作用尚不明确 |
-| text | str | 会员名称 | |
-| label_theme | str | 会员标签 | vip:大会员 annual_vip:年度大会员 ten_annual_vip:十年大会员 hundred_annual_vip:百年大会员 |
-
-`data`中的`pendant`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ---- | ----------- | -------------------- |
-| pid | num | 挂件id | **详细说明有待补充** |
-| name | str | 挂件名称 | |
-| image | str | 挂件图片url | |
-| expire | num | 0 | **作用尚不明确** |
-
-`data`中的`nameplate`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | ---------------- | -------------------- |
-| nid | num | 勋章id | **详细说明有待补充** |
-| name | str | 勋章名称 | |
-| image | str | 挂件图片url 正常 | |
-| image_small | str | 勋章图片url 小 | |
-| level | str | 勋章等级 | |
-| condition | str | 勋章条件 | |
-
-`data`中的`Official`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | -------- | ------------------------------------------------- |
-| role | num | 认证类型 | 0:无 1 2 7:个人认证 3 4 5 6:机构认证 |
-| title | str | 认证信息 | 无为空 |
-| desc | str | 认证备注 | 无为空 |
-| type | num | 是否认证 | -1:无 0:认证 |
-
-`data`中的`level_exp`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | -------- | ---------------- |
-| current_level | num | 当前等级 | 0-6级 |
-| current_min | num | 0 | 指当前等级从多少经验值开始 |
-| current_exp | num | 0 | 当前账户的经验值 |
-| next_exp | num | 0 | 下一个等级所需的经验值**(不是还需要多少)** |
-
-**示例:**
-
-```shell
-curl -G 'api.bilibili.com/x/space/myinfo' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "mid": 293793435,
- "name": "社会易姐QwQ",
- "sex": "男",
- "face": "http://i0.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg",
- "sign": "高考刚结束的普通技术宅一枚,喜欢MC和编程以及电子,是车车人也是术术人,粉丝群:1136462265",
- "rank": 10000,
- "level": 5,
- "jointime": 0,
- "moral": 70,
- "silence": 0,
- "email_status": 1,
- "tel_status": 1,
- "identification": 1,
- "vip": {
- "type": 2,
- "status": 1,
- "due_date": 1644163200000,
- "vip_pay_type": 0,
- "theme_type": 0,
- "label": {
- "path": "",
- "text": "年度大会员",
- "label_theme": "annual_vip",
- "text_color": "#FFFFFF",
- "bg_style": 1,
- "bg_color": "#FB7299",
- "border_color": ""
- },
- "avatar_subscript": 1,
- "nickname_color": "#FB7299",
- "role": 3,
- "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
- },
- "pendant": {
- "pid": 2511,
- "name": "初音未来13周年",
- "image": "http://i0.hdslb.com/bfs/garb/item/4f8f3f1f2d47f0dad84f66aa57acd4409ea46361.png",
- "expire": 0,
- "image_enhance": "http://i0.hdslb.com/bfs/garb/item/fe0b83b53e2342b16646f6e7a9370d8a867decdb.webp",
- "image_enhance_frame": "http://i0.hdslb.com/bfs/garb/item/127c507ec8448be30cf5f79500ecc6ef2fd32f2c.png"
- },
- "nameplate": {
- "nid": 4,
- "name": "青铜殿堂",
- "image": "http://i0.hdslb.com/bfs/face/2879cd5fb8518f7c6da75887994c1b2a7fe670bd.png",
- "image_small": "http://i0.hdslb.com/bfs/face/6707c120e00a3445933308fd9b7bd9fad99e9ec4.png",
- "level": "普通勋章",
- "condition": "单个自制视频总播放数\u003e=1万"
- },
- "official": {
- "role": 0,
- "title": "",
- "desc": "",
- "type": -1
- },
- "birthday": 1015257600,
- "is_tourist": 0,
- "is_fake_account": 0,
- "pin_prompting": 0,
- "is_deleted": 0,
- "in_reg_audit": 0,
- "is_rip_user": false,
- "profession": {
- "id": 0,
- "name": "",
- "show_name": ""
- },
- "level_exp": {
- "current_level": 5,
- "current_min": 10800,
- "current_exp": 27125,
- "next_exp": 28800
- },
- "coins": 9,
- "following": 1122,
- "follower": 1122
- }
-}
-```
-
-
diff --git a/user/register.md b/user/register.md
deleted file mode 100644
index 3c2b731..0000000
--- a/user/register.md
+++ /dev/null
@@ -1,88 +0,0 @@
-# 用户注册
-
-## 0. 检查昵称是否可注册(可选)
-
-[检查昵称是否可注册(可选)](check_nickname.md)
-
-
-## 1. 完成人机验证
-
-[完成人机验证(参考验证登录)](../login/login_action/readme.md#验证登录)
-
-完成后得到`key`, `challenge`, `validate`, `seccode`四个参数
-
-
-## 2. 发送短信验证码
-
-[发送短信验证码(参考短信登录)](../login/login_action/SMS.md#发送短信验证码(web端))
-
-**注意不同的是这里type=1而非21**,推测此参数决定短信内容
-
-
-查看示例
-
-```bash
-curl 'https://passport.bilibili.com/web/sms/general/v2/send' \
- -X POST \
- -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0' \
- -H 'Referer: https://passport.bilibili.com/register/phone.html' \
- -H 'Content-Type: application/x-www-form-urlencoded' \
- --data-raw 'key=6eeb28e7bbd64b389da2be3a2778c7e3&captchaType=6&type=1&cid=1&tel=13888888888&challenge=c52148f88a28b6011db52bb213483ee8&validate=a98841cd6ea58e1b1f5783fca73cddb6&seccode=a98841cd6ea58e1b1f5783fca73cddb6%7Cjordan'
-```
-
-```json
-{"code":0,"message":"验证码短信已下发"}
-```
-
-
-
-## 3. 提交注册请求
-
-> http://passport.bilibili.com/web/reg/tel
-
-*请求方式:POST*
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 |
-| --- | --- | --- |
-| nickName | str | 昵称 |
-| code | num | 短信验证码 |
-| pwd | str | 密码 |
-| gourl | str | 注册成功跳转地址 |
-| tel | num | 手机号码 |
-| cid | num | 1 |
-| plat | num | 0 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ---- | -------- | --------- |
-| code | num | 返回值 | 0:成功 1005:验证码错误 1007:验证码过期 |
-| data | obj | 成功信息 | 只在成功时存在 |
-| message | str | 错误信息 | 只在错误时存在 |
-
-成功信息
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ---- | -------- | --------- |
-| redirectUrl | str | 跳转链接 | 不确定是否有用 |
-| hint | str | "注册成功" | 成功后不提示成功还能提示什么? |
-| in_reg_audit | num | 0 | 未知 |
-
-
-查看示例
-
-```bash
-curl 'https://passport.bilibili.com/web/reg/tel' \
- -X POST \
- -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0' \
- -H 'Accept: application/json, text/plain, */*' \
- -H 'Referer: https://passport.bilibili.com/register/phone.html' \
- -H 'Content-Type: application/x-www-form-urlencoded' \
- --data-raw 'nickName=%E8%90%8C%E7%B3%BB%E5%B0%8F%E5%A6%B9%E7%BA%B8%E3%82%8F&code=121314&pwd=Password1234&gourl=https%3A%2F%2Fpassport.bilibili.com%2Flogin%3Fgourl%3Dhttps%3A%2F%2Fspace.bilibili.com&tel=13888888888&cid=1&plat=0'
-```
-
-
\ No newline at end of file
diff --git a/user/relation.md b/user/relation.md
deleted file mode 100644
index ba102db..0000000
--- a/user/relation.md
+++ /dev/null
@@ -1,2109 +0,0 @@
-# 用户关系相关
-
-- [查询用户粉丝明细](#查询用户粉丝明细)
-- [查询用户关注明细](#查询用户关注明细)
-- [搜索关注明细](#搜索关注明细)
-- [查询共同关注明细](#查询共同关注明细)
-- [查询悄悄关注明细](#查询悄悄关注明细)
-- [查询黑名单明细](#查询黑名单明细)
-- [操作用户关系](#操作用户关系)
-- [批量操作用户关系](#批量操作用户关系)
-- [查询用户与自己关系_仅查关注](#查询用户与自己关系_仅查关注)
-- [查询用户与自己关系_互相](#查询用户与自己关系_互相)
-- [批量查询用户与自己关系](#批量查询用户与自己关系)
-- [关注分组相关](#关注分组相关)
- - [查询关注分组列表](#查询关注分组列表)
- - [查询关注分组明细](#查询关注分组明细)
- - [查询目标用户所在的分组](#查询目标用户所在的分组 )
- - [查询所有特别关注的mid](#查询所有特别关注的mid)
- - [创建分组](#创建分组)
- - [重命名分组](#重命名分组)
- - [删除分组](#删除分组)
- - [修改分组成员](#修改分组成员)
- - [复制关注到分组](#复制关注到分组)
- - [移动关注到分组](#移动关注到分组)
-
----
-
-## 查询用户粉丝明细
-
-
-
-> http://api.bilibili.com/x/relation/followers
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-登录可看自己前1000名,其他用户仅可查看前100名
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | ---------------------------------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| vmid | num | 目标用户mid | 必要 | |
-| ps | num | 每页项数 | 非必要 | 默认为50 |
-| pn | num | 页码 | 非必要 | 默认为1 其他用户仅可查看前5页 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | --------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 22007:访问超过5页 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ----- | -------- | ------------ |
-| list | array | 明细列表 | |
-| re_version | num | ??? | 作用尚不明确 |
-| total | num | 粉丝总数 | |
-
-`data`中的`list`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------- | ---------------- |
-| 0 | obj | 粉丝1 | |
-| n | obj | 粉丝(n+1) | 按照关注顺序排列 |
-| …… | obj | …… | …… |
-
-`list`中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ---- | ------------ | --------------------------------------- |
-| mid | num | 用户mid | |
-| attribute | num | 关注属性 | 0:未关注 2:已关注 6:已互粉 |
-| mtime | num | 成为粉丝时间 | 时间戳 互关后刷新 |
-| tag | null | | |
-| special | num | 0 | |
-| uname | str | 用户昵称 | |
-| face | str | 用户头像url | |
-| sign | str | 用户签名 | |
-| official_verify | obj | 认证信息 | |
-| vip | obj | 会员信息 | |
-
-`list`中的对象中的`official_verify`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------ | ------------------- |
-| type | num | 用户认证类型 | -1:无 0:个人认证 1:机构认证 |
-| desc | str | 用户认证信息 | 无为空 |
-
-`list`中的对象中的`vip`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | ------------ | ----------------------------------------------- |
-| vipType | num | 会员类型 | 0:无 1:月度大会员 2:年度以上大会员 |
-| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 |
-| dueRemark | str | 空 | 作用尚不明确 |
-| accessStatus | num | 0 | 作用尚不明确 |
-| vipStatus | num | 大会员状态 | 0:无 1:有 |
-| vipStatusWarn | str | 空 | 作用尚不明确 |
-| themeType | num | 0 | 作用尚不明确 |
-| label | obj | ??? | 作用尚不明确 |
-
-`vip`中的`label`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---- | ------------ |
-| path | str | 空 | 作用尚不明确 |
-
-**示例:**
-
-获取用户`mid=293793435`的粉丝明细
-
-```shell
-curl -G 'http://api.bilibili.com/x/relation/followers' \
---data-urlencode 'vmid=293793435' \
---data-urlencode 'ps=2' \
---data-urlencode 'pn=1' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "list": [{
- "mid": 387195656,
- "attribute": 0,
- "mtime": 1583839793,
- "tag": null,
- "special": 0,
- "uname": "L_E_M_O_H_E",
- "face": "http://i1.hdslb.com/bfs/face/8ec537db75eeb292faa8dc85a9ff8aba83148c86.jpg",
- "sign": "暂时断更。。Back later",
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 0,
- "vipDueDate": 0,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": ""
- }
- }
- }, {
- "mid": 175989424,
- "attribute": 0,
- "mtime": 1583822019,
- "tag": null,
- "special": 0,
- "uname": "哥本哈根iii",
- "face": "http://i1.hdslb.com/bfs/face/e53c0fe9315176d48bd294b1f381f0da70131cd7.jpg",
- "sign": "",
- "official_verify": {
- "type": -1,
- "desc": ""
- },
- "vip": {
- "vipType": 0,
- "vipDueDate": 0,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": ""
- }
- }
- }],
- "re_version": 3857745402,
- "total": 365
- }
-}
-```
-
-
-
-## 查询用户关注明细
-
-
-
-> http://api.bilibili.com/x/relation/followings
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-登录可看自己全部,其他用户仅可查看前5页
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | ------------------------------------------------------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| vmid | num | 目标用户mid | 必要 | |
-| order_type | str | 排序方式 | 非必要 | 按照关注顺序排列:留空 按照最常访问排列:attention |
-| ps | num | 每页项数 | 非必要 | 默认为50 |
-| pn | num | 页码 | 非必要 | 默认为1 其他用户仅可查看前5页 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -400:请求错误 22007:访问超过5页 22115:用户已设置隐私,无法查看 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-data 对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ----- | -------- | ------------ |
-| list | array | 明细列表 | |
-| re_version | num | ??? | 作用尚不明确 |
-| total | num | 关注总数 | |
-
-`data`中的`list`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------- | ---------------- |
-| 0 | obj | 关注1 | |
-| n | obj | 关注(n+1) | 按照关注顺序排列 |
-| …… | obj | …… | …… |
-
-数组`list`中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ---------------------------------------- | ------------ | --------------------------------------- |
-| mid | num | 用户mid | |
-| attribute | num | 关注属性 | 0:未关注 2:已关注 6:已互粉 |
-| mtime | num | 关注对方时间 | 时间戳 互关后刷新 |
-| tag | 默认分组:null 存在至少一个分组:array | 分组id | |
-| special | num | 特别关注标志 | 0:否 1:是 |
-| uname | str | 用户昵称 | |
-| face | str | 用户头像url | |
-| sign | str | 用户签名 | |
-| official_verify | obj | 认证信息 | |
-| vip | obj | 会员信息 | |
-
-数组`list`中的对象中的`tag`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------------- | ---- |
-| 0 | num | 位于分组1的分组id | |
-| n | num | 位于分组(n+1)的分组id | |
-| …… | num | …… | …… |
-
-`list`中的对象中的`official_verify`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------ | ------------------- |
-| type | num | 用户认证类型 | -1:无 1:认证 |
-| desc | str | 用户认证信息 | 无为空 |
-
-`list`中的对象中的`vip`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | ------------ | ----------------------------------------------- |
-| vipType | num | 会员类型 | 0:无 1:月度大会员 2:年度以上大会员 |
-| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 |
-| dueRemark | str | 空 | 作用尚不明确 |
-| accessStatus | num | 0 | 作用尚不明确 |
-| vipStatus | num | 大会员状态 | 0:无 1:有 |
-| vipStatusWarn | str | 空 | 作用尚不明确 |
-| themeType | num | 0 | 作用尚不明确 |
-| label | obj | ??? | 作用尚不明确 |
-
-`vip`中的`label`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---- | ------------ |
-| path | str | 空 | 作用尚不明确 |
-
-**示例:**
-
-获取用户`mid=293793435`的关注明细,按照关注顺序
-
-```shell
-curl -G 'http://api.bilibili.com/x/relation/followings' \
---data-urlencode 'vmid=293793435' \
---data-urlencode 'order_type=' \
---data-urlencode 'ps=2' \
---data-urlencode 'pn=1' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "list": [{
- "mid": 14082,
- "attribute": 2,
- "mtime": 1584271945,
- "tag": null,
- "special": 0,
- "uname": "山新",
- "face": "http://i0.hdslb.com/bfs/face/74c82caee6d9eb623e56161ea8ed6d68afabfeae.jpg",
- "sign": "都说了是天依爹地,不是妈咪。\r私信有点多回复不过来~商业合作啥的请移步Weibo私信@山新 哦哦哦~",
- "official_verify": {
- "type": 0,
- "desc": "配音演员、声优。洛天依声源提供者。"
- },
- "vip": {
- "vipType": 2,
- "vipDueDate": 1601654400000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 1,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": ""
- }
- }
- }, {
- "mid": 420831218,
- "attribute": 2,
- "mtime": 1584208169,
- "tag": [207542],
- "special": 0,
- "uname": "支付宝Alipay",
- "face": "http://i2.hdslb.com/bfs/face/aaf18aeb2d9822e28a590bd8d878572ca8c59e04.jpg",
- "sign": "阿支来了,关注点赞转发投币四连走起!",
- "official_verify": {
- "type": 1,
- "desc": "支付宝官方账号"
- },
- "vip": {
- "vipType": 1,
- "vipDueDate": 1585065600000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 1,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": ""
- }
- }
- }],
- "re_version": 3228575555,
- "total": 699
- }
-}
-```
-
-
-
-## 搜索关注明细
-
-
-
-> http://api.bilibili.com/x/relation/followings/search
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | -------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| vmid | str | 目标用户mid | 必要 | |
-| name | str | 搜索关键词 | 必要 | |
-| ps | num | 每页项数 | 非必要 | 默认为50 |
-| pn | num | 页码 | 非必要 | 默认为1 |
-
-data 对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ----- | -------- | ------------ |
-| list | array | 明细列表 | |
-| re_version | num | ??? | 作用尚不明确 |
-| total | num | 关注总数 | |
-
-`data`中的`list`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------- | ---------------- |
-| 0 | obj | 共同关注1 | |
-| n | obj | 共同关注(n+1) | 按照关注顺序排列 |
-| …… | obj | …… | …… |
-
-数组`list`中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ------------------------------------------- | ------------ | --------------------------------------- |
-| mid | num | 用户mid | |
-| attribute | num | 关注属性 | 0:未关注 2:已关注 6:已互粉 |
-| mtime | num | 关注对方时间 | 时间戳 互关后刷新 |
-| tag | 默认分组:null 存在至少一个分组:array | 分组id | |
-| special | num | 特别关注标志 | 0:否 1:是 |
-| uname | str | 用户昵称 | |
-| face | str | 用户头像url | |
-| sign | str | 用户签名 | |
-| official_verify | obj | 认证信息 | |
-| vip | obj | 会员信息 | |
-
-数组`list`中的对象中的`tag`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------------- | ---- |
-| 0 | num | 位于分组1的分组id | |
-| n | num | 位于分组(n+1)的分组id | |
-| …… | num | …… | …… |
-
-`list`中的对象中的`official_verify`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------ | ------------------- |
-| type | num | 用户认证类型 | -1:无 1:认证 |
-| desc | str | 用户认证信息 | 无为空 |
-
-`list`中的对象中的`vip`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | ------------ | ----------------------------------------------- |
-| vipType | num | 会员类型 | 0:无 1:月度大会员 2:年度以上大会员 |
-| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 |
-| dueRemark | str | 空 | 作用尚不明确 |
-| accessStatus | num | 0 | 作用尚不明确 |
-| vipStatus | num | 大会员状态 | 0:无 1:有 |
-| vipStatusWarn | str | 空 | 作用尚不明确 |
-| themeType | num | 0 | 作用尚不明确 |
-| label | obj | ??? | 作用尚不明确 |
-
-`vip`中的`label`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---- | ------------ |
-| path | str | 空 | 作用尚不明确 |
-
-**示例:**
-
-搜索我的关注列表中关键词`warma`
-
-```shell
-curl -G 'http://api.bilibili.com/x/relation/followings/search' \
---data-urlencode 'vmid=293793435' \
---data-urlencode 'name=warma' \
---data-urlencode 'ps=2' \
---data-urlencode 'pn=1' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "list": [
- {
- "mid": 53456,
- "attribute": 2,
- "mtime": 1586415053,
- "tag": [
- -10
- ],
- "special": 1,
- "uname": "Warma",
- "face": "http://i2.hdslb.com/bfs/face/c1bbee6d255f1e7fc434e9930f0f288c8b24293a.jpg",
- "sign": "我是沃玛,做点傻开心的视频。日常发在微博:@_warma_ ",
- "official_verify": {
- "type": 0,
- "desc": "bilibili 知名UP主"
- },
- "vip": {
- "vipType": 2,
- "vipDueDate": 1637424000000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 1,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": ""
- }
- }
- }
- ],
- "total": 1
- }
-}
-```
-
-
-
-## 查询共同关注明细
-
-
-
-> http://api.bilibili.com/x/relation/same/followings
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | -------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| vmid | num | 目标用户mid | 必要 | |
-| ps | num | 每页项数 | 非必要 | 默认为50 |
-| pn | num | 页码 | 非必要 | 默认为1 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-data 对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ----- | -------- | ------------ |
-| list | array | 明细列表 | |
-| re_version | num | ??? | 作用尚不明确 |
-| total | num | 关注总数 | |
-
-`data`中的`list`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------- | ---------------- |
-| 0 | obj | 共同关注1 | |
-| n | obj | 共同关注(n+1) | 按照关注顺序排列 |
-| …… | obj | …… | …… |
-
-数组`list`中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ------------------------------------------- | ------------ | --------------------------------------- |
-| mid | num | 用户mid | |
-| attribute | num | 关注属性 | 0:未关注 2:已关注 6:已互粉 |
-| mtime | num | 关注对方时间 | 时间戳 互关后刷新 |
-| tag | 默认分组:null 存在至少一个分组:array | 分组id | |
-| special | num | 特别关注标志 | 0:否 1:是 |
-| uname | str | 用户昵称 | |
-| face | str | 用户头像url | |
-| sign | str | 用户签名 | |
-| official_verify | obj | 认证信息 | |
-| vip | obj | 会员信息 | |
-
-数组`list`中的对象中的`tag`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------------- | ---- |
-| 0 | num | 位于分组1的分组id | |
-| n | num | 位于分组(n+1)的分组id | |
-| …… | num | …… | …… |
-
-`list`中的对象中的`official_verify`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------ | ------------------- |
-| type | num | 用户认证类型 | -1:无 1:认证 |
-| desc | str | 用户认证信息 | 无为空 |
-
-`list`中的对象中的`vip`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | ------------ | ----------------------------------------------- |
-| vipType | num | 会员类型 | 0:无 1:月度大会员 2:年度以上大会员 |
-| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 |
-| dueRemark | str | 空 | 作用尚不明确 |
-| accessStatus | num | 0 | 作用尚不明确 |
-| vipStatus | num | 大会员状态 | 0:无 1:有 |
-| vipStatusWarn | str | 空 | 作用尚不明确 |
-| themeType | num | 0 | 作用尚不明确 |
-| label | obj | ??? | 作用尚不明确 |
-
-`vip`中的`label`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---- | ------------ |
-| path | str | 空 | 作用尚不明确 |
-
-**示例:**
-
-获取自己与用户`mid=2`的共同关注明细
-
-```shell
-curl -G 'http://api.bilibili.com/x/relation/same/followings' \
---data-urlencode 'vmid=2' \
---data-urlencode 'ps=2' \
---data-urlencode 'pn=1' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "list": [
- {
- "mid": 116683,
- "attribute": 2,
- "mtime": 1564627532,
- "tag": null,
- "special": 0,
- "uname": "=咬人猫=",
- "face": "http://i0.hdslb.com/bfs/face/8fad84a4470f3d894d8f0dc95555ab8f2cb10a83.jpg",
- "sign": "面瘫女仆酱~小粗腿~事业线什么的!!吐槽你就输了!喵~",
- "official_verify": {
- "type": 0,
- "desc": "bilibili 2019百大UP主、高能联盟成员"
- },
- "vip": {
- "vipType": 2,
- "vipDueDate": 1618934400000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 1,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": ""
- }
- }
- },
- {
- "mid": 517717593,
- "attribute": 2,
- "mtime": 1592126052,
- "tag": [
- 207542
- ],
- "special": 0,
- "uname": "上海爱丽丝幻乐团",
- "face": "http://i0.hdslb.com/bfs/face/851a9191cbe93e66304d7577c0f6f83834e52109.jpg",
- "sign": "日本同人社团 上海爱丽丝幻乐团",
- "official_verify": {
- "type": 0,
- "desc": "上海爱丽丝幻乐团官方账号"
- },
- "vip": {
- "vipType": 1,
- "vipDueDate": 1593792000000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": ""
- }
- }
- }
- ],
- "re_version": 2498273968,
- "total": 38
- }
-}
-```
-
-
-
-## 查询悄悄关注明细
-
-
-
-> http://api.bilibili.com/x/relation/whispers
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | -------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| ps | num | 每页项数 | 非必要 | 默认为50 |
-| pn | num | 页码 | 非必要 | 默认为1 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-data 对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ----- | -------- | ------------ |
-| list | array | 明细列表 | |
-| re_version | num | ??? | 作用尚不明确 |
-
-`data`中的`list`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------- | ---------------- |
-| 0 | obj | 关注1 | |
-| n | obj | 关注(n+1) | 按照关注顺序排列 |
-| …… | obj | …… | …… |
-
-数组`list`中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ------------------------------------------- | ------------ | --------------------------------------- |
-| mid | num | 用户mid | |
-| attribute | num | 关注属性 | 0:未关注 2:已关注 6:已互粉 |
-| mtime | num | 关注对方时间 | 时间戳 互关后刷新 |
-| tag | 默认分组:null 存在至少一个分组:array | 分组id | |
-| special | num | 特别关注标志 | 0:否 1:是 |
-| uname | str | 用户昵称 | |
-| face | str | 用户头像url | |
-| sign | str | 用户签名 | |
-| official_verify | obj | 认证信息 | |
-| vip | obj | 会员信息 | |
-
-数组`list`中的对象中的`tag`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------------- | ---- |
-| 0 | num | 位于分组1的分组id | |
-| n | num | 位于分组(n+1)的分组id | |
-| …… | num | …… | …… |
-
-`list`中的对象中的`official_verify`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------ | ------------------- |
-| type | num | 用户认证类型 | -1:无 1:认证 |
-| desc | str | 用户认证信息 | 无为空 |
-
-`list`中的对象中的`vip`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | ------------ | ----------------------------------------------- |
-| vipType | num | 会员类型 | 0:无 1:月度大会员 2:年度以上大会员 |
-| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 |
-| dueRemark | str | 空 | 作用尚不明确 |
-| accessStatus | num | 0 | 作用尚不明确 |
-| vipStatus | num | 大会员状态 | 0:无 1:有 |
-| vipStatusWarn | str | 空 | 作用尚不明确 |
-| themeType | num | 0 | 作用尚不明确 |
-| label | obj | ??? | 作用尚不明确 |
-
-`vip`中的`label`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---- | ------------ |
-| path | str | 空 | 作用尚不明确 |
-
-**示例:**
-
-获取悄悄关注明细
-
-```shell
-curl -G 'http://api.bilibili.com/x/relation/whispers' \
---data-urlencode 'ps=2' \
---data-urlencode 'pn=1' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "list": [
- {
- "mid": 178429408,
- "attribute": 1,
- "mtime": 1605972105,
- "tag": null,
- "special": 0,
- "uname": "老弟一号",
- "face": "http://i2.hdslb.com/bfs/face/21426275f3d3149b96b88783275205ba574c09e3.jpg",
- "sign": "萌新硬件玩家,前垃圾佬~(◦˙▽˙◦某宝店 老弟一号 粉丝群679540094商务合作V13869651328",
- "official_verify": {
- "type": 0,
- "desc": "知识领域优质UP主"
- },
- "vip": {
- "vipType": 2,
- "vipDueDate": 1632499200000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 1,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": ""
- }
- }
- }
- ],
- "re_version": 2137574562
- }
-}
-```
-
-
-
-## 查询黑名单明细
-
-> http://api.bilibili.com/x/relation/blacks
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | -------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| ps | num | 每页项数 | 非必要 | 默认为50 |
-| pn | num | 页码 | 非必要 | 默认为1 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-data 对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ----- | ------------ | ------------ |
-| list | array | 明细列表 | |
-| re_version | num | ??? | 作用尚不明确 |
-| total | num | 黑名单总计数 | |
-
-`data`中的`list`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------- | ---------------- |
-| 0 | obj | 关注1 | |
-| n | obj | 关注(n+1) | 按照关注顺序排列 |
-| …… | obj | …… | …… |
-
-数组`list`中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ---- | ------------ | ---------------------- |
-| mid | num | 用户mid | |
-| attribute | num | 关注属性 | 128:已拉黑 |
-| mtime | num | 关注对方时间 | 时间戳 互关后刷新 |
-| tag | null | | |
-| special | num | 0 | |
-| uname | str | 用户昵称 | |
-| face | str | 用户头像url | |
-| sign | str | 用户签名 | |
-| official_verify | obj | 认证信息 | |
-| vip | obj | 会员信息 | |
-
-`list`中的对象中的`official_verify`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------ | ------------------- |
-| type | num | 用户认证类型 | -1:无 1:认证 |
-| desc | str | 用户认证信息 | 无为空 |
-
-`list`中的对象中的`vip`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | ------------ | ----------------------------------------------- |
-| vipType | num | 会员类型 | 0:无 1:月度大会员 2:年度以上大会员 |
-| vipDueDate | num | 会员到期时间 | 时间戳 毫秒 |
-| dueRemark | str | 空 | 作用尚不明确 |
-| accessStatus | num | 0 | 作用尚不明确 |
-| vipStatus | num | 大会员状态 | 0:无 1:有 |
-| vipStatusWarn | str | 空 | 作用尚不明确 |
-| themeType | num | 0 | 作用尚不明确 |
-| label | obj | ??? | 作用尚不明确 |
-
-`vip`中的`label`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---- | ------------ |
-| path | str | 空 | 作用尚不明确 |
-
-**示例:**
-
-获取黑名单明细
-
-```shell
-curl -G 'http://api.bilibili.com/x/relation/blacks' \
---data-urlencode 'ps=2' \
---data-urlencode 'pn=1' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "list": [
- {
- "mid": 22179720,
- "attribute": 128,
- "mtime": 1603032789,
- "tag": null,
- "special": 0,
- "uname": "咩2016",
- "face": "http://i0.hdslb.com/bfs/face/41fe435a7e62eae605a5908652f32f3afff2ae74.jpg",
- "sign": "",
- "official_verify": {
- "type": 0,
- "desc": ""
- },
- "vip": {
- "vipType": 0,
- "vipDueDate": 0,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": ""
- }
- }
- },
- {
- "mid": 16174624,
- "attribute": 128,
- "mtime": 1603026420,
- "tag": null,
- "special": 0,
- "uname": "其实死亡没有那么痛",
- "face": "http://i2.hdslb.com/bfs/face/79257f5a2e7194a71337ccca5927afba7706d316.jpg",
- "sign": "等我,我马上就来",
- "official_verify": {
- "type": 0,
- "desc": ""
- },
- "vip": {
- "vipType": 0,
- "vipDueDate": 0,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": ""
- }
- }
- }
- ],
- "re_version": 897205356,
- "total": 2
- }
-}
-```
-
-
-
-## 操作用户关系
-
-
-
-> http://api.bilibili.com/x/relation/modify
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ---------------------- | -------------- | -------------------------------------------------------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| fid | num | 目标用户mid | 必要 | |
-| act | num | 操作代码 | 必要 | **操作代码见下表** |
-| re_src | num | 关注来源代码 | 必要 | 空间:11 视频:14 文章:115 活动页面:222 |
-| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
-
-操作代码`act`:
-
-| 代码 | 含义 |
-| ---- | ------------ |
-| 1 | 关注 |
-| 2 | 取关 |
-| 3 | 悄悄关注 |
-| 4 | 取消悄悄关注 |
-| 5 | 拉黑 |
-| 6 | 取消拉黑 |
-| 7 | 踢出粉丝 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -102:账号被封停 -111:csrf校验失败 -400:请求错误 22001:不能对自己进行此操作 22003:用户位于黑名单 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-关注`mid=14082`的用户
-
-```shell
-curl 'http://api.bilibili.com/x/relation/modify' \
---data-urlencode 'fid=14082' \
---data-urlencode 'act=1' \
---data-urlencode 're_src=11' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
-
-## 批量操作用户关系
-
-> http://api.bilibili.com/x/relation/batch/modify
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)或APP
-
-此接口只支持关注和拉黑操作
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ---------------------- | -------------- | ---------------------------------------------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| fids | nums | 目标用户mid | 必要 | 每个之间用`,`间隔 |
-| act | num | 操作代码 | 必要 | 同上 仅可为1或5,故只能进行批量关注和拉黑 |
-| re_src | num | 关注来源代码 | 必要 | 同上 |
-| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -102:账号被封停 -111:csrf校验失败 -400:请求错误 22003:用户位于黑名单 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 数据本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ----- | ------------- | ---- |
-| failed_fids | array | 操作失败的mid | |
-
-`data`中的`failed_fids`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------------ | ---- |
-| 0 | num | 操作失败的mid 1 | |
-| n | num | 操作失败的mid(n+1) | |
-| …… | num | …… | …… |
-
-**示例:**
-
-批量关注`mid=1,2,3,4,5`的用户
-
-```shell
-curl 'http://http://api.bilibili.com/x/relation/batch/modify' \
---data-urlencode 'fid=1,2,3,4,5' \
---data-urlencode 'act=1' \
---data-urlencode 're_src=11' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "failed_fids": []
- }
-}
-```
-
-
-
-## 查询用户与自己关系_仅查关注
-
-> http://api.bilibili.com/x/relation
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | ---- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| fid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------- | ---------------------------------------- | ------------ | --------------------------------------- |
-| mid | num | 目标用户mid | |
-| attribute | num | 关注属性 | 0:未关注 2:已关注 6:已互粉 128:拉黑 |
-| mtime | num | 关注对方时间 | 时间戳 未关注为0 |
-| tag | null默认分组 array存在至少一个分组 | 分组id | |
-| special | num | 特别关注标志 | 0:否 1:是 |
-
-`tag`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ----------------------- | ---- |
-| 0 | num | 位于分组1的分组 | |
-| n | num | 位于分组(n+1)的分组 | |
-| …… | num | …… | …… |
-
-**示例:**
-
-可得对于`mid=258150656`的用户,在`2018/10/28 0:51:41`时关注,且设为特别关注,并位于为`-10`分组中
-
-```shell
-curl -G 'http://http://api.bilibili.com/x/relation' \
---data-urlencode 'fid=258150656' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "mid": 258150656,
- "attribute": 2,
- "mtime": 1540659101,
- "tag": [-10],
- "special": 1
- }
-}
-```
-
-
-
-## 查询用户与自己关系_互相
-
-> http://api.bilibili.com/x/space/acc/relation
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | ---- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| mid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | ------------------------ | ---- |
-| relation | obj | 目标用户对于本用户的属性 | |
-| be_relation | obj | 本用户对于目标用户的属性 | |
-
-`data`中的`relation`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------- | ---------------------------------------- | ------------ | -------------- |
-| mid | num | 对方用户mid | |
-| attribute | num | 关注属性 | 0:未关注 1:悄悄关注 2:已关注 6:已互粉 128:拉黑 |
-| mtime | num | 关注对方时间 | 互关后刷新时间 |
-| tag | null默认分组 array存在至少一个分组 | 分组id | |
-| special | num | 特别关注标志 | 0:否 1:是 |
-
-`data`中的`be_relation`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------- | ---------------------------------------- | ------------ | -------------- |
-| mid | num | 自己的mid | |
-| attribute | num | 关注属性 | 0:未关注 1:悄悄关注 2:已关注 6:已互粉 128:拉黑 |
-| mtime | num | 成为粉丝时间 | 互关后刷新时间 |
-| tag | null默认分组 array存在至少一个分组 | 分组id | |
-| special | num | 特别关注标志 | 0:否 1:是 |
-
-`be_relation`与`relation`中的`tag`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------------- | ---- |
-| 0 | num | 位于分组1的分组id | |
-| n | num | 位于分组(n+1)的分组id | |
-| …… | num | …… | …… |
-
-**示例:**
-
-可得对于`mid=15858903`的用户,在`2019/1/24 14:24:19`时关注了对方,且互相关注,自己将对方特别关注,并同时位于为`-10`和`194110`的分组中,对方也将自己设为特别关注,并同时位于为`-10`和`56502`的分组中(虽然我看不到)
-
-```shell
-curl -G 'http://api.bilibili.com/x/space/acc/relation' \
---data-urlencode 'mid=15858903' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "relation": {
- "mid": 15858903,
- "attribute": 6,
- "mtime": 1548311059,
- "tag": [-10, 194110],
- "special": 1,
- "is_followed": false
- },
- "be_relation": {
- "mid": 293793435,
- "attribute": 6,
- "mtime": 1548311059,
- "tag": [56502, -10],
- "special": 1,
- "is_followed": false
- }
- }
-}
-```
-
-
-
-## 批量查询用户与自己关系
-
-> http://api.bilibili.com/x/relation/relations
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | ------------------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| fids | nums | 目标用户mid | 必要 | 每个之间用`,`间隔 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------- | ---- | ---------- | ---- |
-| {用户mid} | obj | 关注的用户 | 下同 |
-| …… | obj | …… | |
-
-`{用户mid}`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------- | --------------------------------------- | ------------ | ------------------------------------------------------------ |
-| mid | num | 目标用户mid | |
-| attribute | num | 关注属性 | 0:未关注 1:悄悄关注 2:已关注 6:已互粉 128:拉黑 |
-| mtime | num | 关注对方时间 | 时间戳 未关注为0 |
-| tag | null默认分组 array存在至少一个分组 | 分组id | |
-| special | num | 特别关注标志 | 0:否 1:是 |
-
-`tag`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------------- | ---- |
-| 0 | num | 位于分组1的分组id | |
-| n | num | 位于分组(n+1)的分组id | |
-| …… | num | …… | …… |
-
-**示例:**
-
-批量查询`mid=1,2,3,4,5`的关系
-
-```shell
-curl -G 'http://http://api.bilibili.com/x/relation/relations' \
---data-urlencode 'fid=258150656' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "1": {
- "mid": 1,
- "attribute": 2,
- "mtime": 1601654227,
- "tag": null,
- "special": 0
- },
- "2": {
- "mid": 2,
- "attribute": 2,
- "mtime": 1601654225,
- "tag": null,
- "special": 0
- }
- }
-}
-```
-
-
-
-## 关注分组相关
-
-### 查询关注分组列表
-
-> http://api.bilibili.com/x/relation/tags
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | ---- |
-| access_key | str | APP登录Token | APP方式必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ------ | -------- | ----------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | array | 分组列表 | |
-
-`data`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------ | ---- |
-| 0 | obj | 特别关注分组 | |
-| 1 | obj | 默认分组 | |
-| n | obj | 其他分组 | |
-| …… | num | …… | …… |
-
-数组`data`中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | ---------- | ---------------------------------- |
-| tagid | num | 分组id | 特别关注恒为-10 默认分组恒为0 |
-| name | str | 分组名称 | |
-| count | num | 分组成员数 | |
-
-**示例:**
-
-查询所有的分组的名字以及id
-
-```shell
-curl 'http://api.bilibili.com/x/relation/tags' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": [{
- "tagid": -10,
- "name": "特别关注",
- "count": 16
- }, {
- "tagid": 0,
- "name": "默认分组",
- "count": 536
- },{
- "tagid": 194111,
- "name": "我的同学",
- "count": 16
- },
- …………
- ]
-}
-```
-
-
-
-### 查询关注分组明细
-
-> http://api.bilibili.com/x/relation/tag
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | ------------------------------------------------------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| tagid | num | 分组id | 必要 | 特别关注恒为-10 默认分组恒为0 |
-| order_type | str | 排序方式 | 非必要 | 按照关注顺序排列:留空 按照最常访问排列:attention |
-| ps | num | 每页项数 | 非必要 | 默认为50 |
-| pn | num | 页数 | 非必要 | 默认为1 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ------ | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 22104:该分组不存在 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | array | 成员列表 | |
-
-`data`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------- | ---------------- |
-| 0 | obj | 成员信息1 | |
-| n | obj | 成员信息(n+1) | 按照添加顺序排序 |
-| …… | obj | …… | …… |
-
-数组`data`中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ---- | ----------- | ---- |
-| mid | num | 用户mid | |
-| uname | str | 用户昵称 | |
-| face | str | 用户头像url | |
-| sign | str | 用户签名 | |
-| official_verify | obj | 认证信息 | |
-| vip | obj | 会员信息 | |
-
-数组`data`中的对象中的`official_verify`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------ | ------------------- |
-| type | num | 用户认证类型 | -1:无 1:认证 |
-| desc | str | 用户认证信息 | 无为空 |
-
-数组`data`中的对象中的`vip`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | ------------ | ----------------------------------- |
-| vipType | num | 大会员类型 | 0:无 1:月会员 2:年会员 |
-| vipDueDate | num | 会员到期时间 | 毫秒 时间戳 |
-| dueRemark | str | 空 | 作用尚不明确 |
-| accessStatus | num | 0 | 作用尚不明确 |
-| vipStatus | num | 大会员状态 | 0无 1有 |
-| vipStatusWarn | str | 空 | 作用尚不明确 |
-| themeType | num | 0 | 作用尚不明确 |
-| label | obj | ??? | 作用尚不明确 |
-
-数组`data`中的对象中的`label`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---- | ------------ |
-| path | str | 空 | 作用尚不明确 |
-
-**示例:**
-
-以每页2项的方式获取了id为`207542`分组的第1页的粉丝明细,按照关注顺序
-
-```shell
-curl -G 'http://api.bilibili.com/x/relation/tag' \
---data-urlencode 'tagid=207542' \
---data-urlencode 'order_type=' \
---data-urlencode 'ps=2' \
---data-urlencode 'pn=1' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": [{
- "mid": 420831218,
- "uname": "支付宝Alipay",
- "face": "http://i2.hdslb.com/bfs/face/aaf18aeb2d9822e28a590bd8d878572ca8c59e04.jpg",
- "sign": "阿支来了,关注点赞转发投币四连走起!",
- "official_verify": {
- "type": 1,
- "desc": "支付宝官方账号"
- },
- "vip": {
- "vipType": 1,
- "vipDueDate": 1585065600000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 1,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": ""
- }
- }
- }, {
- "mid": 125086406,
- "uname": "MSI微星科技",
- "face": "http://i1.hdslb.com/bfs/face/a844760e4e491677615b39399bc761e74c579bb4.jpg",
- "sign": "你好,这里是微星显卡官方!专注显卡三十年,欢迎私信咨询或提问MSI",
- "official_verify": {
- "type": 1,
- "desc": "微星科技官方账号"
- },
- "vip": {
- "vipType": 1,
- "vipDueDate": 1540656000000,
- "dueRemark": "",
- "accessStatus": 0,
- "vipStatus": 0,
- "vipStatusWarn": "",
- "themeType": 0,
- "label": {
- "path": ""
- }
- }
- }]
-}
-```
-
-
-
-### 查询目标用户所在的分组
-
-> http://api.bilibili.com/x/relation/tag/user
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | ---- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| fid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------------- | ---- | --------- | ---- |
-| {加入的分组id 1} | str | 分组1名称 | |
-| {加入的分组id n} | str | 分组n名称 | |
-| …… | str | …… | |
-
-**示例:**
-
-查询用户`mid=319214221`存在的所有分组和名称
-
-```shell
-curl -G 'http://api.bilibili.com/x/relation/tag/user' \
---data-urlencode 'fid=319214221' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "-10": "特别关注",
- "194111": "我的同学"
- }
-}
-```
-
-
-
-### 查询所有特别关注的mid
-
-> http://api.bilibili.com/x/relation/tag/special
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------ | ----------- | ---- |
-| access_key | str | APP登录Token | APP方式必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ----- | -------- | ----------------------------- |
-| code | num | 返回值 | 0:成功 -101:账号未登录 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | array | 成员列表 | |
-
-`data`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------ | ---- |
-| 0 | num | 成员1mid | |
-| n | num | 成员(n+1)mid | |
-| …… | num | …… | …… |
-
-**示例:**
-
-```shell
-curl 'http://api.bilibili.com/x/relation/tag/special' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": [
- 500716647,
- 32832243,
- 53456,
- 25944552,
- 301839556,
- 427494870,
- 319214221,
- 31949159,
- 382666849,
- 258318451,
- 15858903,
- 54992199,
- 3379951,
- 392279807,
- 23215368,
- 258150656,
- 20165629,
- 22179720
- ]
-}
-```
-
-
-
-### 创建分组
-
-
-
-> http://api.bilibili.com/x/relation/tag/create
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ---------------------- | -------------- | ---------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| tag | str | 分组名 | 必要 | 最长16字符 |
-| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -111:csrf校验失败 -101:账号未登录 -400:请求错误 22106:该分组已经存在 22103:分组名过长 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | -------------- | ---- |
-| tagid | num | 创建的分组的id | |
-
-**示例:**
-
-创建了名为`测试`的分组,得到id为`216677`
-
-```shell
-curl 'http://api.bilibili.com/x/relation/tag/create' \
---data-urlencode 'tag=测试' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "tagid": 216677
- }
-}
-```
-
-
-
-### 重命名分组
-
-> http://api.bilibili.com/x/relation/tag/update
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ---------------------- | -------------- | ---------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| tagid | num | 分组id | 必要 | |
-| name | str | 新名称 | 必要 | 最长16字符 |
-| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -111:csrf校验失败 -101:账号未登录 -400:请求错误 22103:分组名过长 22104:该分组不存在 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-把id为`194112`的分组更名为`膜法师`
-
-```shell
-curl 'http://api.bilibili.com/x/relation/tag/update' \
---data-urlencode 'tagid=194112' \
---data-urlencode 'name=膜法师' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
-
-### 删除分组
-
-
-
-> http://api.bilibili.com/x/relation/tag/del
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ---------------------- | -------------- | ---- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| tagid | num | 分组id | 必要 | |
-| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -111:csrf校验失败 -101:账号未登录 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-示例:
-
-删除分组id为`216699`的分组
-
-```shell
-curl 'http://api.bilibili.com/x/relation/tag/del' \
---data-urlencode 'tagid=216699' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
-
-### 修改分组成员
-
-
-
-> http://api.bilibili.com/x/relation/tags/addUsers
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)或APP
-
-如需删除分组中的成员,请将`tagids`设为0,即移动至默认分组,而不是取关
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------------------ | -------------- | ------------------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| fids | nums | 目标用户mid | 必要 | 每个之间用`,`间隔 |
-| tagids | nums | 分组id | 必要 | 每个之间用`,`间隔 |
-| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -111:csrf校验失败 -101:账号未登录 -400:请求错误 22104:无权限 22105:未关注 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-把关注用户`mid=205631797`同时添加分组关系到id为`-10`和`207542`的分组中
-
-```shell
-curl 'http://api.bilibili.com/x/relation/tags/addUsers' \
---data-urlencode 'fids=205631797' \
---data-urlencode 'tagids=-10,207542' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
-
-### 复制关注到分组
-
-> http://api.bilibili.com/x/relation/tags/copyUsers
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------------------ | -------------- | ------------------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| fids | nums | 待复制的用户mid | 必要 | 每个之间用`,`间隔 |
-| tagids | nums | 目标分组id | 必要 | 每个之间用`,`间隔 |
-| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -111:csrf校验失败 -101:账号未登录 -400:请求错误 22104:无权限 22105:未关注 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-把关注用户`mid=4856007`和`mid=326499679`同时复制到为`231305`的分组id中
-
-```shell
-curl 'http://api.bilibili.com/x/relation/tags/copyUsers' \
---data-urlencode 'fids=4856007,326499679' \
---data-urlencode 'tagids=231305' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code":0,
- "message":"0",
- "ttl":1
-}
-```
-
-
-
-### 移动关注到分组
-
-> http://api.bilibili.com/x/relation/tags/moveUsers
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------------ | ---- | ------------------------ | -------------- | ------------------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| beforeTagids | nums | 原分组id | 必要 | 每个之间用`,`间隔 |
-| afterTagids | nums | 新分组id | 必要 | 每个之间用`,`间隔 |
-| fids | nums | 待移动的用户mid | 必要 | 每个之间用`,`间隔 |
-| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -111:csrf校验失败 -101:账号未登录 -400:请求错误 22104:无权限 22105:未关注 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-把关注用户`mid=321173469`和`mid=327086920`同时从id为`207542`的分组移动到为`231305`的分组中
-
-```shell
-curl 'http://api.bilibili.com/x/relation/tags/moveUsers' \
---data-urlencode 'beforeTagids=207542' \
---data-urlencode 'afterTagids=23130' \
---data-urlencode 'fids=321173469,327086920' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code":0,
- "message":"0",
- "ttl":1
-}
-```
-
-
diff --git a/user/space.md b/user/space.md
deleted file mode 100644
index f92896d..0000000
--- a/user/space.md
+++ /dev/null
@@ -1,3651 +0,0 @@
-# 用户空间相关
-
-- [主页](#主页)
- - [置顶视频](#置顶视频)
- - [查询用户置顶视频](#查询用户置顶视频)
- - [设置置顶视频](#设置置顶视频)
- - [取消置顶视频](#取消置顶视频)
- - [代表作视频](#代表作视频)
- - [查询用户代表作视频列表](#查询用户代表作视频列表)
- - [添加代表作视频](#添加代表作视频)
- - [删除代表作视频](#删除代表作视频)
- - [个人TAG](#个人TAG)
- - [查看用户个人TAG](#查看用户个人TAG)
- - [修改个人TAG](#修改个人TAG)
- - [空间公告](#空间公告)
- - [查看用户空间公告](#查看用户空间公告)
- - [修改空间公告](#修改空间公告)
- - [主页板块布局与权限](#主页板块布局与权限)
- - [查询空间设置](#查询空间设置)
- - [调整空间板块布局](#调整空间板块布局)
- - [修改空间隐私权限](#修改空间隐私权限)
- - [查询用户最近玩过的游戏](#查询用户最近玩过的游戏)
- - [获取用户最近投币的视频明细](#获取用户最近投币的视频明细)
-- [投稿](#投稿)
- - [查询用户投稿视频明细](#查询用户投稿视频明细)
- - [查询用户投稿相簿预览](#查询用户投稿相簿预览)
- - [查询用户投稿相簿明细](#查询用户投稿相簿明细)
-- [频道](#频道)
- - [查询用户频道列表](#查询用户频道列表)
- - [查询用户频道中的视频](#查询用户频道中的视频)
- - [创建频道](#创建频道)
- - [修改频道](#修改频道)
- - [删除频道](#删除频道)
- - [频道添加视频](#频道添加视频)
- - [频道删除视频](#频道删除视频)
- - [调整频道视频排序](#调整频道视频排序)
- - [检查频道中有无失效视频](#检查频道中有无失效视频)
-- [收藏](#收藏)
- - [查询用户创建的视频收藏夹](#查询用户创建的视频收藏夹)
- - [查询用户收藏的视频收藏夹](#查询用户收藏的视频收藏夹)
-- [课程](#课程)
- - [查询用户发布的课程列表](#查询用户发布的课程列表)
-- [订阅](#订阅)
- - [查询用户追番预览列表](#查询用户追番预览列表)
- - [查询用户追番(追剧)明细](#查询用户追番(追剧)明细)
- - [查询用户关注的TAG(话题)](#查询用户关注的TAG(话题))
-
----
-
-## 主页
-
-
-
-### 置顶视频
-
-#### 查询用户置顶视频
-
->http://api.bilibili.com/x/space/top/arc
-
-*请求方式:GET*
-
-粉丝在其主页上可见
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| vmid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ---------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 53016:没有置顶视频 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | ------------------------------ | ------------------------------------------------------------ |
-| aid | num | 稿件avid | |
-| videos | num | 视频分P总数 | 默认为1 |
-| tid | num | 分区tid | |
-| tname | str | 子分区名称 | |
-| copyright | num | 是否转载 | 1:原创 2:转载 |
-| pic | str | 视频封面图片url | |
-| title | str | 稿件标题 | |
-| pubdate | num | 稿件发布时间 | 时间戳 |
-| ctime | num | 用户提交稿件的时间 | 时间戳 |
-| desc | str | 视频简介 | |
-| state | num | 视频状态 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`state`备注 |
-| attribute | num | 稿件属性位配置 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`attribute`备注 |
-| duration | num | 视频总计持续时长(所有分P) | 单位为秒 |
-| rights | obj | 视频属性标志 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`rights`对象 |
-| owner | obj | 视频UP主信息 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`owner`对象 |
-| stat | obj | 视频状态数 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`stat`对象 |
-| dynamic | str | 视频同步发布的的动态的文字内容 | 无为空 |
-| cid | num | 视频1P cid | |
-| dimension | obj | 视频1P分辨率 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`dimension`对象 |
-| bvid | str | 稿件bvid | |
-| reason | str | 置顶视频备注 | |
-| inter_video | bool | 是否为合作视频 | false:否 true:是 |
-
-**示例:**
-
-查询用户`mid=23215368`的置顶视频
-
-```shell
-curl -G 'http://api.bilibili.com/x/space/top/arc' \
---data-urlencode 'vmid=23215368'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "aid": 37896701,
- "videos": 1,
- "tid": 28,
- "tname": "原创音乐",
- "copyright": 1,
- "pic": "http://i2.hdslb.com/bfs/archive/cc9e72822d68fffdd0406144f1b5348a13c89652.jpg",
- "title": "燃烧吧!铃声!把主流手机铃声编成一首曲子",
- "pubdate": 1544469671,
- "ctime": 1544469671,
- "desc": "各品牌的手机铃声大合奏,毫无违和感~",
- "state": 0,
- "attribute": 16768,
- "duration": 208,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 1,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- },
- "owner": {
- "mid": 23215368,
- "name": "Wayjon冰冰酱",
- "face": "http://i2.hdslb.com/bfs/face/7c9715f1768191137eb7ebf91918ca0f99532012.jpg"
- },
- "stat": {
- "aid": 37896701,
- "view": 1058237,
- "danmaku": 16821,
- "reply": 3725,
- "favorite": 76888,
- "coin": 100694,
- "share": 17091,
- "now_rank": 0,
- "his_rank": 0,
- "like": 90521,
- "dislike": 0
- },
- "dynamic": "#编曲##FL##纯音乐#",
- "cid": 66621209,
- "dimension": {
- "width": 1920,
- "height": 1080,
- "rotate": 0
- },
- "bvid": "BV18t411q7zz",
- "reason": "",
- "inter_video": false
- }
-}
-```
-
-
-
-#### 设置置顶视频
-
-> http://api.bilibili.com/x/space/top/arc/set
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------------ | -------------------------------- |
-| aid | num | 置顶目标稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 置顶目标稿件bvid | 必要(可选) | avid与bvid任选一个 |
-| reason | str | 置顶视频备注 | 非必要 | 置顶备注最大40字符 默认为空 |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -304:未修改 -400:请求错误 53014:稿件已失效 53015:备注过长 53017:置顶非自己的稿件 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-置顶视频`av98948772`/`BV1n741127LD`
-
-avid方式:
-
-```shell
-curl 'http://api.bilibili.com/x/space/top/arc/set' \
---data-urlencode 'aid=98948772' \
--b 'SESSDATA=xxx'
-```
-
-bvid方式:
-
-```shell
-curl 'http://api.bilibili.com/x/space/top/arc/set' \
---data-urlencode 'bvid=BV1n741127LD' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
-
-#### 取消置顶视频
-
-> http://api.bilibili.com/x/space/top/arc/cancel
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------ | ---- |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误(重复取消) |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-```shell
-curl 'http://api.bilibili.com/x/space/top/arc/cancel' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
-
-### 代表作视频
-
-#### 查询用户代表作视频列表
-
-> http://api.bilibili.com/x/space/masterpiece
-
-*请求方式:GET*
-
-新访客在其主页上可见
-
-最多可以设置3个
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| vmid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ------ | ---------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | array | 代表作列表 | |
-
-`data`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------- | ------------------------- |
-| 0 | obj | 代表作1 | 无则为空 |
-| 1 | obj | 代表作2 | 无则为空 |
-| 2 | obj | 代表作3 | 无则为空 最多设置3个 |
-
-`data`数组中的对象:
-
-同[查询用户置顶视频](#查询用户置顶视频)中的`data`对象
-
-**示例:**
-
-查询用户`mid=23215368`的代表作视频列表
-
-```shell
-curl -G 'http://api.bilibili.com/x/space/masterpiece' \
---data-urlencode 'vmid=23215368'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": [{
- "aid": 37896701,
- "videos": 1,
- "tid": 28,
- "tname": "原创音乐",
- "copyright": 1,
- "pic": "http://i2.hdslb.com/bfs/archive/cc9e72822d68fffdd0406144f1b5348a13c89652.jpg",
- "title": "燃烧吧!铃声!把主流手机铃声编成一首曲子",
- "pubdate": 1544469671,
- "ctime": 1544469671,
- "desc": "各品牌的手机铃声大合奏,毫无违和感~",
- "state": 0,
- "attribute": 16768,
- "duration": 208,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 1,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- },
- "owner": {
- "mid": 23215368,
- "name": "Wayjon冰冰酱",
- "face": "http://i2.hdslb.com/bfs/face/7c9715f1768191137eb7ebf91918ca0f99532012.jpg"
- },
- "stat": {
- "aid": 37896701,
- "view": 1058241,
- "danmaku": 16821,
- "reply": 3725,
- "favorite": 76888,
- "coin": 100694,
- "share": 17091,
- "now_rank": 0,
- "his_rank": 0,
- "like": 90521,
- "dislike": 0
- },
- "dynamic": "#编曲##FL##纯音乐#",
- "cid": 66621209,
- "dimension": {
- "width": 1920,
- "height": 1080,
- "rotate": 0
- },
- "bvid": "BV18t411q7zz",
- "reason": "",
- "inter_video": false
- }, {
- "aid": 39596658,
- "videos": 1,
- "tid": 21,
- "tname": "日常",
- "copyright": 1,
- "pic": "http://i2.hdslb.com/bfs/archive/431e51d0e40e3461e1c1b0f59c755ae8843b1adb.jpg",
- "title": "MY2018 - 纪念我的2018年",
- "pubdate": 1546328392,
- "ctime": 1546328392,
- "desc": "",
- "state": 0,
- "attribute": 16768,
- "duration": 239,
- "mission_id": 10996,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 1,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- },
- "owner": {
- "mid": 23215368,
- "name": "Wayjon冰冰酱",
- "face": "http://i2.hdslb.com/bfs/face/7c9715f1768191137eb7ebf91918ca0f99532012.jpg"
- },
- "stat": {
- "aid": 39596658,
- "view": 1518,
- "danmaku": 16,
- "reply": 40,
- "favorite": 22,
- "coin": 60,
- "share": 9,
- "now_rank": 0,
- "his_rank": 0,
- "like": 112,
- "dislike": 0
- },
- "dynamic": "#vlog##记录##生活记录#",
- "cid": 69561078,
- "dimension": {
- "width": 1920,
- "height": 1080,
- "rotate": 0
- },
- "bvid": "BV1Jt411B7La",
- "reason": "",
- "inter_video": false
- }, {
- "aid": 44721369,
- "videos": 1,
- "tid": 28,
- "tname": "原创音乐",
- "copyright": 1,
- "pic": "http://i0.hdslb.com/bfs/archive/9887797402599c42f74a7624f3db4a92a0ebf465.jpg",
- "title": "【铃声串烧系列】华米两开花;中华有为,国之荣耀!把主流手机铃声编成一首曲子",
- "pubdate": 1551128445,
- "ctime": 1551128445,
- "desc": "把主流手机铃声编成一首曲子,这一版用华为的铃声作为主旋律,毫无违和感~伴随着2019mwc的开幕,希望国产厂商能获得全世界的目光,并且将属于中国人的科技自信传递到全世界!",
- "state": 0,
- "attribute": 16768,
- "duration": 174,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 1,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- },
- "owner": {
- "mid": 23215368,
- "name": "Wayjon冰冰酱",
- "face": "http://i2.hdslb.com/bfs/face/7c9715f1768191137eb7ebf91918ca0f99532012.jpg"
- },
- "stat": {
- "aid": 44721369,
- "view": 306757,
- "danmaku": 7713,
- "reply": 1520,
- "favorite": 17216,
- "coin": 16489,
- "share": 2917,
- "now_rank": 0,
- "his_rank": 0,
- "like": 21439,
- "dislike": 0
- },
- "dynamic": "#铃声##纯音乐##音乐#【铃声串烧】Mix Ringtones!船新的版本来啦!这一版用华为的铃声作为主旋律,毫无违和感~伴随着2019mwc的开幕,希望国产厂商能获得全世界的目光,并且将属于中国人的科技自信传递到全世界!",
- "cid": 78290138,
- "dimension": {
- "width": 1920,
- "height": 1080,
- "rotate": 0
- },
- "bvid": "BV1vb411879C",
- "reason": "",
- "inter_video": false
- }]
-}
-```
-
-
-
-#### 添加代表作视频
-
-> http://api.bilibili.com/x/space/masterpiece/add
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-代表作上限为3个稿件
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------------ | -------------------------------- |
-| aid | num | 置顶目标稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 置顶目标稿件bvid | 必要(可选) | avid与bvid任选一个 |
-| reason | str | 代表作备注 | 非必要 | 置顶备注最大40字符 默认为空 |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 53014:稿件已失效 53015:备注过长 53017:置顶非自己的稿件 53019:达到上限 53020:已经存在该稿件 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-添加视频`av94916552`/`BV1ZE411K7ux`到代表作列表
-
-avid方式:
-
-```shell
-curl 'http://api.bilibili.com/x/space/masterpiece/add' \
---data-urlencode 'aid=94916552' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-bvid方式:
-
-```shell
-curl 'http://api.bilibili.com/x/space/masterpiece/add' \
---data-urlencode 'bvid=BV1ZE411K7ux' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
-
-#### 删除代表作视频
-
-> http://api.bilibili.com/x/space/masterpiece/cancel
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------------ | ------------------ |
-| aid | num | 要删除的目标稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 要删除的目标稿件bvid | 必要(可选) | avid与bvid任选一个 |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 53021:置顶列表中没有该视频 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | 作用尚不明确 |
-
-**示例:**
-
-删除置顶视频`av59765630`/`BV1Yt41137T6`
-
-avid方式:
-
-```shell
-curl 'api.bilibili.com/x/space/masterpiece/cancel' \
---data-urlencode 'aid=59765630' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-bvid方式:
-
-```shell
-curl 'http://api.bilibili.com/x/space/masterpiece/cancel' \
---data-urlencode 'bvid=BV1Yt41137T6' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-### 个人TAG
-
-#### 查看用户个人TAG
-
-> http://api.bilibili.com/x/space/acc/tags
-
-*请求方式:GET*
-
-上限5条,且内容由用户自定义
-
-带有转义
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| mid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ----- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | array | 信息本体 | |
-
-`data`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | -------- | ------------- |
-| 0 | obj | 套了个娃 | 只有1项??? |
-
-`data`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ----- | ----------- | ---- |
-| mid | num | 目标用户mid | |
-| tags | array | TAG名称 | |
-
-`data`数组中的对象中的`tags`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | -------- | ------- |
-| 0 | str | TAG1 | |
-| n | str | TAG(n+1) | |
-| …… | str | …… | |
-| 4 | str | TAG5 | 上限5条 |
-
-**示例:**
-
-查看用户`mid=53456`的个人TAG
-
-```shell
-curl -G 'http://api.bilibili.com/x/space/acc/tags' \
---data-urlencode 'mid=53456'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": [
- {
- "mid": 53456,
- "tags": [
- "游戏",
- "音乐",
- "warma",
- "搞笑",
- "动画"
- ]
- }
- ]
-}
-```
-
-
-
-#### 修改个人TAG
-
-> http://api.bilibili.com/x/space/acc/tags/set
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-鉴权方式:Cookie中`DedeUserID`存在且不为0
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------ | ------------------------------------------------------------ |
-| tags | strs | 要设置的TAG内容 | 非必要 | 删除公告留空或省去即可 各TAG长度小于10字符 最多5个TAG 各TAG之间用","(%2C)分隔 重复TAG无效 |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误(超出长度限制) |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-修改个人TAG为`minecraft,技术宅,大佬,小哥哥,可爱`
-
-```shell
-curl 'http://api.bilibili.com/x/space/acc/tags/set' \
---data-urlencode 'tags=minecraft,技术宅,大佬,小哥哥,可爱' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx;DedeUserID=1'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
-
-### 空间公告
-
-#### 查看用户空间公告
-
-> http://api.bilibili.com/x/space/notice
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| mid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | str | 公告信息 | 无则为空 |
-
-**示例:**
-
-查看用户`mid=53456`的空间公告
-
-```shell
-curl -G 'http://api.bilibili.com/x/space/notice' \
---data-urlencode 'mid=53456'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code":0,
- "message":"0",
- "ttl":1,
- "data":"我的微博 @_warma_\n直播录像上传到:warma养鸽场\n头像画师是:微博@Dr-H_喵_\n横幅画师:@薬屋"
-}
-```
-
-
-
-#### 修改空间公告
-
-> http://api.bilibili.com/x/space/notice/set
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------ | --------------------------------------- |
-| notice | str | 要设置的公告内容 | 非必要 | 删除公告留空或省去即可 少于150字符 |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -304:未修改 -400:请求错误(超出长度限制) |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | 作用尚不明确 |
-
-**示例:**
-
-修改个人空间公告为`鸽子`
-
-```shell
-curl 'http://api.bilibili.com/x/space/notice/set' \
---data-urlencode 'notice=鸽子' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
-
-### 主页板块布局与权限
-
-#### 查询空间设置
-
-> http://space.bilibili.com/ajax/settings/getSettings
-
-*请求方式:GET*
-
-注:带有转义
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| mid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ------------------- | -------- | ---- |
-| status | bool | 用户是否存在 | true:存在 false:不存在 |
-| data | 用户存在时:obj 用户不存在时:str| 用户存在时:信息本体 用户不存在时:错误信息 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------------------- | ----- | ---------------- | ------------ |
-| privacy | obj | 空间隐私权限 | |
-| index_order | array | 空间板块布局 | |
-| theme | str | default主题? | 作用尚不明确 |
-| theme_preview_img_path | str | 主题预览图路径? | 作用尚不明确 |
-| toutu | obj | 空间头图 | |
-
-`privacy`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | -------------- | ------------------------------ |
-| bangumi | num | 追番及追剧 | 0:隐藏 1:公开 **下同** |
-| bbq | num | 轻视频 | |
-| channel | num | 频道 | |
-| coins_video | num | 最近投币的视频 | |
-| comic | num | 追漫 | |
-| dress_up | num | 装扮 | |
-| fav_video | num | 收藏夹 | |
-| groups | num | 圈子? | 作用尚不明确 |
-| likes_video | num | 最近点赞的视频 | |
-| played_game | num | 最近玩过的游戏 | |
-| tags | num | 订阅标签 | |
-| user_info | num | 个人资料 | |
-
-`index_order`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------- | -------------------------------------------- |
-| 0 | obj | 板块1 | 根据板块布局顺序排序 先左侧布局后右侧布局 |
-| n | obj | 板块(n+1) | |
-| …… | obj | …… | …… |
-
-`index_order`数组内对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | -------- | ---- |
-| id | num | 板块编号 | |
-| name | str | 板块名称 | |
-
-`toutu`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | -------------------- | -------------------------------------------------- |
-| sid | num | 空间头图ID | |
-| expire | num | 到期时间? | 时间戳? 作用尚不明确 |
-| s_img | str | 空间头图小图相对路径 | 完整url为`http://i0.hdslb.com/`+相对路径 |
-| l_img | str | 空间头图相对路径 | **同上** |
-| android_img | str | 空 | 注:**手机端头图与web端不同,需要用另一个api获取** |
-| iphone_img | str | 空 | |
-| ipad_img | str | 空 | |
-| thumbnail_img | str | 缩略图 | |
-| platform | num | 0 | 作用尚不明确 |
-
-**示例:**
-
-查看`mid=2`的空间设置
-
-```shell
-curl -G 'http://space.bilibili.com/ajax/settings/getSettings' \
---data-urlencode 'mid=2'
-```
-
-
-查看响应示例:
-
-```json
-{
- "status":true,
- "data":{
- "privacy":{
- "bangumi":1,
- "bbq":1,
- "channel":1,
- "coins_video":0,
- "comic":1,
- "dress_up":1,
- "fav_video":0,
- "groups":0,
- "likes_video":0,
- "played_game":1,
- "tags":1,
- "user_info":1
- },
- "index_order":[
- {
- "id":1,
- "name":"我的稿件"
- },
- {
- "id":8,
- "name":"我的专栏"
- },
- {
- "id":7,
- "name":"我的频道"
- },
- {
- "id":2,
- "name":"我的收藏夹"
- },
- {
- "id":3,
- "name":"订阅番剧"
- },
- {
- "id":4,
- "name":"订阅标签"
- },
- {
- "id":5,
- "name":"最近投币的视频"
- },
- {
- "id":6,
- "name":"我的圈子"
- },
- {
- "id":9,
- "name":"我的相簿"
- },
- {
- "id":21,
- "name":"公告"
- },
- {
- "id":22,
- "name":"直播间"
- },
- {
- "id":23,
- "name":"个人资料"
- },
- {
- "id":24,
- "name":"官方活动"
- },
- {
- "id":25,
- "name":"最近玩过的游戏"
- }
- ],
- "theme":"default",
- "theme_preview_img_path":"",
- "toutu":{
- "sid":1,
- "expire":2861874560,
- "s_img":"bfs/space/768cc4fd97618cf589d23c2711a1d1a729f42235.png",
- "l_img":"bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png",
- "android_img":"",
- "iphone_img":"",
- "ipad_img":"",
- "thumbnail_img":"",
- "platform":0
- }
- }
-}
-```
-
-
-
-#### 调整空间板块布局
-
-> http://space.bilibili.com/ajax/settings/setIndexOrder
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-鉴权方式:Cookie中`DedeUserID`及`DedeUserID__ckMd5`存在且不为0,referer为 `.bilibili.com`域名下
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ----------- | ---- | ------------------------ | ------ | ------------------------------------------------------------ |
-| index_order | nums | 布局列表 | 必要 | 每个值之间用","(%2C)分隔 先左侧布局再右侧布局 值的意义见下表 |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-布局参数`index_order`:
-
-| 值 | 含义 |
-| ---- | ------------------------------------ |
-| 1 | (左侧)我的稿件 |
-| 2 | (左侧)我的收藏夹 |
-| 3 | (左侧)订阅番剧 |
-| 4 | (左侧)订阅标签 |
-| 5 | (左侧)最近投币的视频 |
-| 6 | (左侧)我的圈子**(此板块被隐藏)** |
-| 7 | (左侧)我的频道 |
-| 8 | (左侧)我的专栏 |
-| 9 | (左侧)我的相簿 |
-| 21 | (右侧)公告 |
-| 22 | (右侧)直播间 |
-| 23 | (右侧)个人资料 |
-| 24 | (右侧)官方活动 |
-| 25 | (右侧)最近玩的游戏 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ---- | -------- | ----------------------------------- |
-| ststus | bool | 操作结果 | true:操作成功 false:操作失败 |
-| data | str | 错误信息 | 正确时无此项 |
-
-**示例:**
-
-调整空间布局为:
-
->我的稿件 直播间
->我的专栏 个人资料
->订阅番剧 公告
->我的收藏夹 官方活动
->我的相簿 最近玩的游戏
->最近投币的视频
->订阅标签
->我的频道
-
-```shell
-curl 'http://space.bilibili.com/ajax/settings/setIndexOrder' \
---data-urlencode 'index_order=1,8,3,2,9,5,4,7,22,23,21,24,25,6' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx;DedeUserID=1;DedeUserID__ckMd5=1;' \
--e 'https://www.bilibili.com'
-```
-
-
-查看响应示例:
-
-```json
-{
- "status": true
-}
-```
-
-
-
-#### 修改空间隐私权限
-
-> http://space.bilibili.com/ajax/settings/setPrivacy
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-鉴权方式:Cookie中`DedeUserID`及`DedeUserID__ckMd5`存在且不为0,referer为 `.bilibili.com`域名下
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ----------- | ---- | ------------------------ | ------ | ---------------------------------- |
-| fav_video | num | 收藏视频 | 非必要 | 0:隐藏 1:公开 **下同** |
-| bangumi | num | 追番及追剧 | 非必要 | |
-| tags | num | 关注的TAG | 非必要 | |
-| coins_video | num | 投币的视频 | 非必要 | |
-| user_info | num | 个人信息 | 非必要 | |
-| played_game | num | 玩过的游戏 | 非必要 | |
-| csrf | nstr | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ---- | -------- | ----------------------------------- |
-| ststus | bool | 操作结果 | true:操作成功 false:操作失败 |
-| data | str | 错误信息 | 正确时无此项 |
-
-**示例:**
-
-设置`关注的TAG`为隐藏
-
-```shell
-curl 'http://space.bilibili.com/ajax/settings/setPrivacy' \
---data-urlencode 'tags=0' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx;DedeUserID=1;DedeUserID__ckMd5=1;' \
--e 'https://www.bilibili.com'
-```
-
-
-查看响应示例:
-
-```json
-{
- "status": true
-}
-```
-
-
-
-### 查询用户最近玩过的游戏
-
-> http://api.bilibili.com/x/space/lastplaygame
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| mid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ------------------------------- | -------- | ---------------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 53013:用户隐私设置未公开 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | 隐藏时:null 公开时:array | 信息本体 | |
-
-`data`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------- | ---------------- |
-| 0 | obj | 游戏1 | |
-| n | obj | 游戏(n+1) | 项数为总计游戏数 |
-| …… | obj | …… | …… |
-
-`data`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | --------------- | ---- |
-| website | str | 游戏主页链接url | |
-| image | str | 游戏图片url | |
-| name | str | 游戏名 | |
-
-**示例:**
-
-查询`mid=2`的最近玩过的游戏
-
-```shell
-curl -G 'http://api.bilibili.com/x/space/lastplaygame' \
---data-urlencode 'mid=2'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": [
- {
- "website": "https://game.bilibili.com/fgo/event_meihosou",
- "image": "http://i0.hdslb.com/bfs/game/f7d4ee0877089e4079b8f0b4f5c95dd4ceba512a.png",
- "name": "命运-冠位指定(Fate/GO)"
- },
- {
- "website": "https://game.bilibili.com/pcr/xxtix",
- "image": "http://i0.hdslb.com/bfs/game/7922ecea5cc76fe3c8c177e1d4a6c8cf1c36a700.jpg",
- "name": "公主连结Re:Dive"
- },
- {
- "website": "https://game.bilibili.com/dwbgx/",
- "image": "http://i0.hdslb.com/bfs/game/6d5b2df70dfa987408d8d09110cdc327949885e3.png",
- "name": "大王不高兴"
- },
- {
- "website": "https://game.bilibili.com/bangdream/1stanniversary-yxzx/",
- "image": "http://i0.hdslb.com/bfs/game/4a7d0b7272dffe5a489ee935b6bd2d4f7d5f1257.png",
- "name": "BanG Dream!"
- },
- {
- "website": "http://www.biligame.com/detail/?id=101772",
- "image": "http://i0.hdslb.com/bfs/game/8e8b04e7bd2170c2ba2c9f563a62c72bac2eba2c.jpg",
- "name": "明日方舟"
- }
- ]
-}
-```
-
-
-
-### 获取用户最近投币的视频明细
-
-> http://api.bilibili.com/x/space/coin/video
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-如设置隐私查看自己的需要认证
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| vmid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ------------------------------- | -------- | ---------------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 53013:用户隐私设置未公开 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | 隐藏时:null 公开时:array | 信息本体 | |
-
-`data`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | ---- |
-| 0 | obj | 投币视频1 | |
-| n | obj | 投币视频(n+1) | |
-| …… | obj | …… | |
-
-`data`数组中的对象:
-
-基本同[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的data对象
-
-**示例:**
-
-查看用户`mid=15858903`的最近投币视频
-
-```shell
-curl -G 'http://space.bilibili.com/x/space/coin/video' \
---data-urlencode 'vmid=15858903' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": [
- {
- "aid": 669644066,
- "videos": 1,
- "tid": 75,
- "tname": "动物圈",
- "copyright": 2,
- "pic": "http://i1.hdslb.com/bfs/archive/0f73a68b8f449cc72e9ef109685bd295dc0c0c9d.jpg",
- "title": "在人类幼崽身上用尽了温柔",
- "pubdate": 1600608261,
- "ctime": 1600608261,
- "desc": "https://weibo.com/tv/show/1034:4551253766897703?from=old_pc_videoshow",
- "state": 0,
- "attribute": 16384,
- "duration": 29,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 0,
- "no_reprint": 0,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- },
- "owner": {
- "mid": 258457966,
- "name": "卧龙寺",
- "face": "http://i2.hdslb.com/bfs/face/f868d1f522733fdcf72a6267e0237157dd0e9948.jpg"
- },
- "stat": {
- "aid": 669644066,
- "view": 3412898,
- "danmaku": 719,
- "reply": 1481,
- "favorite": 21909,
- "coin": 2864,
- "share": 13702,
- "now_rank": 0,
- "his_rank": 0,
- "like": 86970,
- "dislike": 0
- },
- "dynamic": "",
- "cid": 237319289,
- "dimension": {
- "width": 576,
- "height": 1024,
- "rotate": 0
- },
- "bvid": "BV1sa4y1j7jk",
- "coins": 1,
- "time": 1601802763,
- "ip": "",
- "inter_video": false
- },
- {
- "aid": 202267998,
- "videos": 1,
- "tid": 138,
- "tname": "搞笑",
- "copyright": 1,
- "pic": "http://i0.hdslb.com/bfs/archive/ca7746f2207114513f1a421d7f744523275ee679.jpg",
- "title": "充 电 器 の 痛",
- "pubdate": 1601750952,
- "ctime": 1601750952,
- "desc": "这个简介吓到我了!",
- "state": 0,
- "attribute": 16512,
- "duration": 50,
- "mission_id": 14725,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 0,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- },
- "owner": {
- "mid": 129922746,
- "name": "-白糖洒一地-",
- "face": "http://i0.hdslb.com/bfs/face/1f581f3b20a380c2fd13ecb8bbe409f8b49c6418.jpg"
- },
- "stat": {
- "aid": 202267998,
- "view": 109,
- "danmaku": 2,
- "reply": 11,
- "favorite": 5,
- "coin": 9,
- "share": 0,
- "now_rank": 0,
- "his_rank": 0,
- "like": 20,
- "dislike": 0
- },
- "dynamic": "",
- "cid": 241861687,
- "dimension": {
- "width": 1920,
- "height": 1080,
- "rotate": 0
- },
- "bvid": "BV1oh411X7iA",
- "coins": 2,
- "time": 1601773750,
- "ip": "",
- "inter_video": false
- },
- {
- "aid": 839722373,
- "videos": 1,
- "tid": 208,
- "tname": "校园学习",
- "copyright": 1,
- "pic": "http://i2.hdslb.com/bfs/archive/11ed53241ceab314c919adba9f85582d24d9313c.jpg",
- "title": "“白piáo”用日语到底怎么说?油管人气日语老师来教你!",
- "pubdate": 1601026026,
- "ctime": 1601026026,
- "desc": "志方老师的B站用语日语课又来了~\n欢迎大家来看哦,\n如果喜欢我们的作品的话,欢迎大家用2~3连+转发来支持我们~\n如果拒绝的话,也可以用日语在评论和弹幕里刷上一波~即可以锻炼日语又可以拒绝我们,岂不美哉~~",
- "state": 0,
- "attribute": 16768,
- "duration": 310,
- "mission_id": 14655,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 1,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- },
- "owner": {
- "mid": 677926489,
- "name": "日语志方老师",
- "face": "http://i2.hdslb.com/bfs/face/d465e5cd42e3523a52b3bef38dce7b23627b7723.jpg"
- },
- "stat": {
- "aid": 839722373,
- "view": 130688,
- "danmaku": 1320,
- "reply": 799,
- "favorite": 3722,
- "coin": 5883,
- "share": 339,
- "now_rank": 0,
- "his_rank": 0,
- "like": 17585,
- "dislike": 0
- },
- "dynamic": "志方老师的B站用语日语课又来了~\n欢迎大家来看哦,\n如果喜欢我们的作品的话,欢迎大家用2~3连+转发来支持我们~\n如果拒绝的话,也可以用日语在评论和弹幕里刷上一波~即可以锻炼日语又可以拒绝我们,岂不美哉~~",
- "cid": 238876133,
- "dimension": {
- "width": 1920,
- "height": 1080,
- "rotate": 0
- },
- "bvid": "BV1n54y117kq",
- "coins": 2,
- "time": 1601036198,
- "ip": "",
- "inter_video": false
- }
- ]
-}
-```
-
-
-
-## 投稿
-
-
-
-### 查询用户投稿视频明细
-
-> http://api.bilibili.com/x/space/arc/search
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------- | ---- | ------------ | ------ | ------------------------------------------------------------ |
-| mid | num | 目标用户mid | 必要 | |
-| order | str | 排序方式 | 非必要 | 默认为pubdate 最新发布:pubdate 最多播放:click 最多收藏:stow |
-| tid | num | 筛选目标分区 | 非必要 | 默认为0 0:不进行分区筛选 分区tid为所筛选的分区 |
-| keyword | str | 关键词筛选 | 非必要 | 用于使用关键词搜索该UP主视频稿件 |
-| pn | num | 页码 | 必要 | |
-| ps | num | 每页项数 | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 -412:请求被拦截 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ---- | -------------- | ---- |
-| list | obj | 列表信息 | |
-| page | obj | 页面信息 | |
-| episodic_button | obj | “播放全部“按钮 | |
-
-`data`中的`list`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ------ | ---------------- | ---- |
-| tlist | obj | 投稿视频分区索引 | |
-| vlist | array | 投稿视频列表 | |
-
-`list`中的`tlist`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | ------------ | --------------------- |
-| {tid} | obj | 该分区的详情 | 字段名为存在的分区tid |
-| …… | obj | …… | 向下扩展 |
-
-`tlist`中的`{tid}`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | -------------------- | ---- |
-| count | num | 投稿至该分区的视频数 | |
-| name | str | 该分区名称 | |
-| tid | num | 该分区tid | |
-
-`list`中的`vlist`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | ---- |
-| 0 | obj | 投稿视频1 | |
-| n | obj | 投稿视频(n+1) | |
-| …… | obj | …… | …… |
-
-`list`中的`vlist`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------------- | ---- | -------------- | ---------------------------- |
-| aid | num | 稿件avid | |
-| author | str | 视频UP主 | 不一定为目标用户(合作视频) |
-| bvid | str | 稿件bvid | |
-| comment | num | 视频评论数 | |
-| copyright | str | 空 | 作用尚不明确 |
-| created | num | 投稿时间 | 时间戳 |
-| description | str | 视频简介 | |
-| hide_click | bool | false | 作用尚不明确 |
-| is_pay | num | 0 | 作用尚不明确 |
-| is_union_video | num | 是否为合作视频 | 0:否 1:是 |
-| length | str | 视频长度 | MM:SS |
-| mid | num | 视频UP主mid | 不一定为目标用户(合作视频) |
-| pic | str | 视频封面 | |
-| play | num | 视频播放次数 | |
-| review | num | 0 | 作用尚不明确 |
-| subtitle | str | 空 | 作用尚不明确 |
-| title | str | 视频标题 | |
-| typeid | num | 视频分区tid | |
-| video_review | num | 视频弹幕数 | |
-
-`data`中的`page`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | ---------- | ---- |
-| count | num | 总计稿件数 | |
-| pn | num | 当前页码 | |
-| ps | num | 每页项数 | |
-
-`data`中的`episodic_button`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------- | ---- |
-| text | str | 按钮文字 | |
-| uri | str | 全部播放页url | |
-
-**示例:**
-
-`pn`(页码)和`ps`(每页项数)只改变`vlist`中成员的多少与内容
-
-以每页2项查询用户`mid=53456`的第1页投稿视频明细
-
-```shell
-curl -G 'http://api.bilibili.com/x/space/arc/search' \
---data-urlencode 'mid=53456' \
---data-urlencode 'ps=2' \
---data-urlencode 'pn=1'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "list": {
- "tlist": {
- "1": {
- "tid": 1,
- "count": 26,
- "name": "动画"
- },
- "160": {
- "tid": 160,
- "count": 42,
- "name": "生活"
- },
- "211": {
- "tid": 211,
- "count": 3,
- "name": "美食"
- },
- "3": {
- "tid": 3,
- "count": 33,
- "name": "音乐"
- },
- "4": {
- "tid": 4,
- "count": 72,
- "name": "游戏"
- }
- },
- "vlist": [
- {
- "comment": 3558,
- "typeid": 47,
- "play": 1275661,
- "pic": "//i2.hdslb.com/bfs/archive/90157806a34646ac2d4c6af3e8b6156cb3460d14.jpg",
- "subtitle": "",
- "description": "第一期:BV1ak4y1B7aG\n第二期:BV1eA411Y7FN\n脚本/绘画/配音/动画/片尾曲:warma\n第三期终于做完啦!这是一个以我平时发呆的时候想到的一些灵感组成的冷笑话合集,名字叫《沃玛的生活》,可以当作日常搞笑单元小动画来看。\n如果你喜欢这个系列的话请点赞投币收藏一键三连给我一些继续制作的动力吧,我真的非常非常需要更多的动力!\n祝看得开心~\n我的微博:@_warma_",
- "copyright": "",
- "title": "【warma】沃玛的新番更新!从现在开始放飞自我【沃玛的生活/第三期】",
- "review": 0,
- "author": "Warma",
- "mid": 53456,
- "created": 1605844817,
- "length": "05:16",
- "video_review": 7470,
- "aid": 585275804,
- "bvid": "BV1sz4y1y7KJ",
- "hide_click": false,
- "is_pay": 0,
- "is_union_video": 0,
- "is_steins_gate": 0
- },
- {
- "comment": 2979,
- "typeid": 21,
- "play": 840676,
- "pic": "//i2.hdslb.com/bfs/archive/b43f88c6ebae8fdc7dfb663f6f6f2931b924c763.jpg",
- "subtitle": "",
- "description": "前一阵子过生日,大家的礼物经过几番转寄终于收到了~于是录了这期礼物开箱视频。\n现在也在感慨,大家的礼物真的都太强了,居然这些全都是手工做的,真的好厉害!\n这些手工礼物背后得花多少时间和心力啊……这些对我来说都是无价的礼物,制作礼物的大家真的有心了,谢谢!!\n收到这些礼物真的很开心,视频的封面也是在这样激动的情况下画出来的,祝你看得开心~\n我的微博:@_warma_",
- "copyright": "",
- "title": "【warma】来开箱!大家寄来的生日礼物",
- "review": 0,
- "author": "Warma",
- "mid": 53456,
- "created": 1604635221,
- "length": "24:28",
- "video_review": 10476,
- "aid": 287744380,
- "bvid": "BV1xf4y1q7XN",
- "hide_click": false,
- "is_pay": 0,
- "is_union_video": 0,
- "is_steins_gate": 0
- }
- ]
- },
- "page": {
- "pn": 1,
- "ps": 2,
- "count": 176
- },
- "episodic_button": {
- "text": "播放全部",
- "uri": "//www.bilibili.com/medialist/play/53456?from=space"
- }
- }
-}
-```
-
-
-
-### 查询用户投稿相簿预览
-
-> http://api.bilibili.com/x/space/album/index
-
-*请求方式:GET*
-
-所有类型的相簿
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------ | ------ | ------- |
-| mid | num | 目标用户mid | 必要 | |
-| ps | num | 获取的相簿量 | 非必要 | 默认为8 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ------ | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | array | 相簿列表 | |
-
-`data`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | ---- |
-| 0 | obj | 相簿内容1 | |
-| n | obj | 相簿内容(n+1) | |
-| …… | obj | …… | …… |
-
-`data`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ------ | ----------- | -------------- |
-| count | num | 总计图片数 | |
-| ctime | num | 发布时间 | 时间戳 |
-| description | str | 简介 | |
-| doc_id | num | 相簿id | 非动态!!! |
-| like | num | 点赞数 | |
-| pictures | array | 图片内容 | |
-| poster_uid | num | 上传用户mid | |
-| title | str | 标题 | 动态内容无 |
-| view | num | 浏览数 | |
-
-`data`数组中的对象中的`pictures`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | --------------------- |
-| 0 | obj | 内容图片1 | |
-| n | obj | 内容图片(n+1) | 项数取决于`count`的值 |
-| …… | obj | …… | …… |
-
-`pictures`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ---- | -------- | ----------- |
-| img_height | num | 图片高度 | |
-| img_size | num | 图片大小 | 单位为KByte |
-| img_src | str | 图片url | |
-| img_width | num | 图片宽度 | |
-
-**示例:**
-
-查询用户`mid=53456`的投稿相簿预览
-
-```shell
-curl -G 'http://api.bilibili.com/x/space/album/index' \
---data-urlencode 'mid=53456' \
---data-urlencode 'ps=2'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": [{
- "doc_id": 60470424,
- "poster_uid": 53456,
- "title": "",
- "description": "你醒啦![tv_大佬]\n之前说到过的百万粉纪念的视频已经定时在了今天下午七点,欢迎来看呀!",
- "pictures": [{
- "img_src": "https://i0.hdslb.com/bfs/album/2840366e30bf7c0aba9da5adde1a771255a57bc7.jpg",
- "img_width": 625,
- "img_height": 134,
- "img_size": 14
- }],
- "count": 1,
- "ctime": 1583444859,
- "view": 1677521,
- "like": 29974
- }, {
- "doc_id": 58962388,
- "poster_uid": 53456,
- "title": "",
- "description": "上次的那些写实儿童画发出来啦!可以打印下来辟邪[tv_大佬]",
- "pictures": [{
- "img_src": "https://i0.hdslb.com/bfs/album/8acaf7c7897cb858cccab36c33a5e875adfef177.jpg",
- "img_width": 2172,
- "img_height": 3258,
- "img_size": 2831
- }, {
- "img_src": "https://i0.hdslb.com/bfs/album/1611b6b56d3d4328889a62b9f9bdc92e9d065532.jpg",
- "img_width": 3456,
- "img_height": 5184,
- "img_size": 3024
- }, {
- "img_src": "https://i0.hdslb.com/bfs/album/f3a30a2ef5b39711af8b945d54d85ffd1e932b8a.jpg",
- "img_width": 1200,
- "img_height": 757,
- "img_size": 313
- }],
- "count": 3,
- "ctime": 1582881332,
- "view": 1176646,
- "like": 25734
- }]
-}
-```
-
-
-
-### 查询用户投稿相簿明细
-
-> http://api.vc.bilibili.com/link_draw/v1/doc/doc_list
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| --------- | ---- | ----------- | ------ | ------------------------------------------------------------ |
-| uid | num | 目标用户mid | 必要 | |
-| page_num | num | 页码 | 非必要 | 默认为1 |
-| page_size | num | 每页项数 | 非必要 | 默认为20 |
-| biz | str | 查询类型 | 非必要 | 全部:all 绘画:draw 摄影:photo 日常:daily 默认为all |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------- |
-| code | num | 返回值 | 0:成功 |
-| msg | str | 错误信息 | 默认为success |
-| message | str | 错误信息 | 默认为success |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ------ | -------- | ---- |
-| items | array | 相簿列表 | |
-
-`items`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | ---- |
-| 0 | obj | 相簿内容1 | |
-| n | obj | 相簿内容(n+1) | |
-| …… | obj | …… | …… |
-
-`items`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ------ | ----------- | -------------- |
-| count | num | 总计图片数 | |
-| ctime | num | 发布时间 | 时间戳 |
-| description | str | 简介 | |
-| doc_id | num | 相簿id | 非动态!!! |
-| like | num | 点赞数 | |
-| pictures | array | 图片内容 | |
-| poster_uid | num | 上传用户mid | |
-| title | str | 标题 | 动态内容无 |
-| view | num | 浏览数 | |
-
-`items`数组中的对象中的`pictures`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | --------------------- |
-| 0 | obj | 内容图片1 | |
-| n | obj | 内容图片(n+1) | 项数取决于`count`的值 |
-| …… | obj | …… | …… |
-
-`pictures`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ---- | -------- | ----------- |
-| img_height | num | 图片高度 | |
-| img_size | num | 图片大小 | 单位为KByte |
-| img_src | str | 图片url | |
-| img_width | num | 图片宽度 | |
-
-**示例:**
-
-查询用户`mid=53456`的投稿明细中的全部类型
-
-```shell
-curl -G 'http://api.vc.bilibili.com/link_draw/v1/doc/doc_list' \
---data-urlencode 'uid=2' \
---data-urlencode 'page_num=1' \
---data-urlencode 'page_size=2' \
---data-urlencode 'biz=all'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "msg": "success",
- "message": "success",
- "data": {
- "items": [{
- "doc_id": 59015720,
- "poster_uid": 2,
- "title": "",
- "description": "6影是真的无脑,2个宝石都护不住(设计师:这真是太酷了)",
- "pictures": [{
- "img_src": "http://i0.hdslb.com/bfs/album/8456f050ec8639c6e0cef36aba27bfdedc550590.jpg",
- "img_width": 1824,
- "img_height": 840,
- "img_size": 1024
- }],
- "count": 1,
- "ctime": 1582894607,
- "view": 707073,
- "like": 7055
- }, {
- "doc_id": 46853140,
- "poster_uid": 2,
- "title": "",
- "description": "#年度报告# #新年Flag# https://www.bilibili.com/blackboard/timemachine2019.html\n决定了,这就是我的新年Flag!今年我一定要…",
- "pictures": [{
- "img_src": "http://i0.hdslb.com/bfs/album/5b3ae76f79d7cf2501afc3ca7c7da509dcf0e38a.jpg",
- "img_width": 1125,
- "img_height": 2184,
- "img_size": 465
- }, {
- "img_src": "http://i0.hdslb.com/bfs/album/87789fe9644337a1f7e6a0655a32584705af8bda.jpg",
- "img_width": 1125,
- "img_height": 2184,
- "img_size": 421
- }, {
- "img_src": "http://i0.hdslb.com/bfs/album/f752d7f3bb7952f6c0013b3f48ddcb07060b4721.jpg",
- "img_width": 1125,
- "img_height": 2184,
- "img_size": 524
- }, {
- "img_src": "http://i0.hdslb.com/bfs/active/7a52a411bccb716c8e67fe70e6c330d5209346de.jpg",
- "img_width": 1125,
- "img_height": 2184,
- "img_size": 534
- }],
- "count": 4,
- "ctime": 1577966163,
- "view": 833193,
- "like": 5667
- }]
- }
-}
-```
-
-
-
-## 频道
-
-
-
-### 查询用户频道列表
-
-> http://api.bilibili.com/x/space/channel/list
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| mid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | -------- |
-| code | num | 返回值 | 0:成功 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | 无则为空 |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ------ | ---------- | ---- |
-| count | num | 总计频道数 | |
-| list | array | 频道列表 | |
-
-`data`中的`list`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ----------- | --------------------- |
-| 0 | obj | 频道1 | |
-| n | obj | 频道(n+1) | 项数取决于`count`的值 |
-| …… | obj | …… | …… |
-
-`data`中的`list`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | -------------- | -------- |
-| cid | num | 频道id | |
-| count | num | 频道内含视频数 | |
-| cover | str | 封面图片url | |
-| intro | str | 简介 | 无则为空 |
-| mid | num | 创建用户mid | |
-| mtime | num | 创建时间 | 时间戳 |
-| name | str | 标题 | |
-
-**示例:**
-
-查询用户`mid=53456`的频道列表
-
-```shell
-curl -G 'http://api.bilibili.com/x/space/channel/list' \
---data-urlencode 'mid=53456'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "count": 6,
- "list": [{
- "cid": 100249,
- "mid": 53456,
- "name": "【实况】动物之森",
- "intro": "",
- "mtime": 1579898830,
- "count": 2,
- "cover": "http://i1.hdslb.com/bfs/archive/6a7ed9483c34e839dfca981b9e2b94cd4c4efa0a.jpg"
- }, {
- "cid": 79323,
- "mid": 53456,
- "name": "忆雨",
- "intro": "忆雨出现过的视频",
- "mtime": 1562535222,
- "count": 7,
- "cover": "http://i2.hdslb.com/bfs/archive/1783e4f03042b282495799adda1cb56270cea647.jpg"
- }, {
- "cid": 79322,
- "mid": 53456,
- "name": "大画家",
- "intro": "",
- "mtime": 1562535122,
- "count": 6,
- "cover": "http://i0.hdslb.com/bfs/archive/9c85a14e805c6c23cb7a42e1dbef97821bb68960.jpg"
- }, {
- "cid": 77758,
- "mid": 53456,
- "name": "灭火器",
- "intro": "",
- "mtime": 1561270856,
- "count": 4,
- "cover": "http://i2.hdslb.com/bfs/archive/0073208d086b4ebe9cdc540e7664aa74b483aeb6.jpg"
- }, {
- "cid": 75696,
- "mid": 53456,
- "name": "沃玛小剧场",
- "intro": "",
- "mtime": 1559129460,
- "count": 5,
- "cover": "http://i2.hdslb.com/bfs/archive/db2b20ecdb6ed013fc3780b0e741ea88d46b5b40.jpg"
- }, {
- "cid": 170,
- "mid": 53456,
- "name": "爆炸电台",
- "intro": "闲聊的电台",
- "mtime": 1503298893,
- "count": 7,
- "cover": "http://i2.hdslb.com/bfs/archive/73d77bc6bb0d44b239fd4f5a2682fe3144e81692.jpg"
- }]
- }
-}
-```
-
-
-
-
-
-### 查询用户频道中的视频
-
-> http://api.bilibili.com/x/space/channel/video
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | --------- |
-| mid | num | 目标用户mid | 必要 | |
-| cid | num | 目标频道id | 必要 | |
-| pn | num | 页码 | 非必要 | 默认为1 |
-| ps | num | 每页项数 | 非必要 | 默认为100 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 -404:无用户对应的频道 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | -------- | ---- |
-| list | obj | 频道信息 | |
-| page | obj | 页面信息 | |
-
-`data`中的`list`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ------ | -------------- | -------- |
-| archives | array | 包含的视频列表 | |
-| cid | num | 频道id | |
-| count | num | 频道内含视频数 | |
-| cover | str | 封面图片url | |
-| intro | str | 简介 | 无则为空 |
-| mid | num | 创建用户mid | |
-| mtime | num | 创建时间 | 时间戳 |
-| name | str | 标题 | |
-
-`list`中的`archives`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ----------- | --------------------- |
-| 0 | obj | 视频1 | |
-| n | obj | 视频(n+1) | 项数取决于`count`的值 |
-| …… | obj | …… | …… |
-
-`list`中的`archives`数组中的对象:
-
-基本同「[视频详细信息](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/video/info.md#视频详细信息(avid/bvid互转))」中的data对象
-
-`data`中的`page`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | ---------- | ---- |
-| count | num | 总计视频数 | |
-| num | num | 当前页码 | |
-| size | num | 每页项数 | |
-
-**示例:**
-
-查询用户`mid=53456`的频道`170`中的视频
-
-```shell
-curl -G 'http://api.bilibili.com/x/space/channel/video' \
---data-urlencode 'mid=53456' \
---data-urlencode 'cid=170' \
---data-urlencode 'ps=2' \
---data-urlencode 'pn=1'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "list": {
- "cid": 170,
- "mid": 53456,
- "name": "爆炸电台",
- "intro": "闲聊的电台",
- "mtime": 1503298893,
- "count": 7,
- "cover": "http://i2.hdslb.com/bfs/archive/73d77bc6bb0d44b239fd4f5a2682fe3144e81692.jpg",
- "archives": [{
- "aid": 87673204,
- "videos": 1,
- "tid": 21,
- "tname": "日常",
- "copyright": 1,
- "pic": "http://i0.hdslb.com/bfs/archive/5387bdcbbe4d5551adbf0ee2e607e4b7d3d8f2f0.jpg",
- "title": "【warma爆炸电台】迟来的自我介绍【第八期】",
- "pubdate": 1581244539,
- "ctime": 1581244540,
- "desc": "时隔半年的新的一期爆炸电台来啦,这是我的一系列杂谈聊天电台,这次因为多了很多新关注的朋友们,所以来做个自我介绍吧!\n画师:Dr-H_喵_ 动画:K_Lacid\n结尾提到的壁纸稍后在动态发原图,动态壁纸在steam那个壁纸软件的创意工坊里搜warma能找到\n\n往期的电台:\n第一期:av6786024 \n第三期:av13619263\n第四期:av18862091\n第五期:av25092410\n第六期:av42492515\n第七期:av62910468",
- "state": 0,
- "attribute": 16512,
- "duration": 2388,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 0,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- },
- "owner": {
- "mid": 53456,
- "name": "Warma",
- "face": "http://i1.hdslb.com/bfs/face/c1bbee6d255f1e7fc434e9930f0f288c8b24293a.jpg"
- },
- "stat": {
- "aid": 87673204,
- "view": 1383542,
- "danmaku": 88908,
- "reply": 9237,
- "favorite": 32929,
- "coin": 68849,
- "share": 5140,
- "now_rank": 0,
- "his_rank": 52,
- "like": 116164,
- "dislike": 0
- },
- "dynamic": "来做个自我介绍吧! #warma##沃玛##爆炸电台#",
- "cid": 149793525,
- "dimension": {
- "width": 1920,
- "height": 1080,
- "rotate": 0
- },
- "bvid": "BV1D7411t7Be",
- "inter_video": false
- }, {
- "aid": 62910468,
- "videos": 1,
- "tid": 21,
- "tname": "日常",
- "copyright": 1,
- "pic": "http://i2.hdslb.com/bfs/archive/4bd598f71a144d4505e259b143c0de0bf27968b2.jpg",
- "title": "【warma爆炸电台】居然收到了几千条问题!【第七期】",
- "pubdate": 1565345410,
- "ctime": 1565338559,
- "desc": "时隔半年的爆炸电台第七期终于来啦!在这一期里回答了很多问题,祝看得开心!此外,就在昨天,50万订阅了…真的谢谢大家!\n也欢迎来看往期的电台:\n第一期:av6786024 (2016年10月)\n第二期:av10373352(2017年5月)\n第三期:av13619263(2017年8月)\n第四期:av18862091(2018年1月)\n第五期:av25092410(2018年6月)\n第六期:av42492515(2019年2月)",
- "state": 0,
- "attribute": 16512,
- "duration": 1987,
- "mission_id": 11740,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 0,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- },
- "owner": {
- "mid": 53456,
- "name": "Warma",
- "face": "http://i1.hdslb.com/bfs/face/c1bbee6d255f1e7fc434e9930f0f288c8b24293a.jpg"
- },
- "stat": {
- "aid": 62910468,
- "view": 455277,
- "danmaku": 19383,
- "reply": 2108,
- "favorite": 10507,
- "coin": 19422,
- "share": 1208,
- "now_rank": 0,
- "his_rank": 0,
- "like": 31515,
- "dislike": 0
- },
- "dynamic": "爆炸电台 第七期 来啦!",
- "cid": 109284065,
- "dimension": {
- "width": 1920,
- "height": 1080,
- "rotate": 0
- },
- "bvid": "BV1gt411K7Ga",
- "inter_video": false
- }]
- },
- "page": {
- "count": 7,
- "num": 1,
- "size": 2
- }
- }
-}
-```
-
-
-
-### 创建频道
-
-> http://api.bilibili.com/x/space/channel/add
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-创建成功后会返回新建频道的id
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------ | ---- |
-| name | str | 频道名 | 必要 | |
-| intro | str | 频道简介 | 非必要 | |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 53001:频道名字数超过限制 53002:频道简介字数超过限制 53004:创建的频道已经满额 53007:频道名称已经存在 53024:编辑内容命中敏感信息 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 数据本体 | 成功有此项 |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------ | ---- |
-| cid | num | 频道id | |
-
-**示例:**
-
-创建名为`test1`的频道,简介为空
-
-```shell
-curl 'http://api.bilibili.com/x/space/channel/add' \
---data-urlencode 'name=test1' \
---data-urlencode 'intro=' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "cid": 138996
- }
-}
-```
-
-
-
-### 修改频道
-
-> http://api.bilibili.com/x/space/channel/edit
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------ | ---- |
-| cid | num | 频道id | 必要 | |
-| name | str | 频道名 | 必要 | |
-| intro | str | 频道简介 | 非必要 | |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 53001:频道名字数超过限制 53002:频道简介字数超过限制 53007:频道名称已经存在 53024:编辑内容命中敏感信息 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-修改频道`138996`名称为`测试`,简介为`123456`
-
-```shell
-curl 'http://api.bilibili.com/x/space/channel/edit' \
---data-urlencode 'cid=138996' \
---data-urlencode 'name=测试' \
---data-urlencode 'intro=123456' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
-
-### 删除频道
-
-> http://api.bilibili.com/x/space/channel/del
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------ | ---- |
-| cid | num | 需要删除的频道id | 必要 | |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-删除频道`138996`
-
-```shell
-curl 'http://api.bilibili.com/x/space/channel/del' \
---data-urlencode 'cid=138996' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
-
-### 频道添加视频
-
-> http://api.bilibili.com/x/space/channel/video/add
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-仅能添加自己是UP主的视频
-
-如添加多个视频,仅会添加正确的
-
-**注:完成后需要使用接口「查询用户频道中的视频」刷新**
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------ | ---------------------- |
-| cid | num | 频道id | 必要 | |
-| aids | nums | 要添加的目标稿件avid | 必要 | 多个使用","(%2C)分隔 |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ----- | ---------------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 -404:无此项 53003:本频道里的视频已满 53006:提交视频已失效或频道里有(非该视频UP主) |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | array | 出错稿件avid列表 | |
-
-`data`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------------- | ---- |
-| 0 | num | 出错稿件avid1 | |
-| n | num | 出错稿件avid(n+1) | |
-| …… | num | …… | …… |
-
-**示例:**
-
-向频道`138995`中添加视频`av583785685`和`av243322853`
-
-```shell
-curl 'http://api.bilibili.com/x/space/channel/video/add' \
---data-urlencode 'cid=138995' \
---data-urlencode 'aids=583785685,243322853' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": []
-}
-```
-
-
-
-### 频道删除视频
-
-> http://api.bilibili.com/x/space/channel/video/del
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-**注:完成后需要使用接口「查询用户频道中的视频」刷新**
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------ | ---- |
-| cid | num | 频道id | 必要 | |
-| aid | num | 要删除的目标稿件avid | 必要 | |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 -404:无此项 53008:频道内没有视频 53009:频道内没有该视频 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-删除频道`138995`中的视频`av583785685`
-
-```shell
-curl 'http://api.bilibili.com/x/space/channel/video/del' \
---data-urlencode 'cid=138995' \
---data-urlencode 'aid=583785685' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
-
-### 调整频道视频排序
-
-> http://api.bilibili.com/x/space/channel/video/sort
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------ | ------------------------------------------------------------ |
-| cid | num | 频道id | 必要 | |
-| aid | num | 要移动的目标稿件avid | 必要 | |
-| to | num | 视频排序倒数位置 | 非必要 | 默认为1 1为列表底部,视频总数为首端 与显示顺序恰好相反 |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-调整`138995`中的视频`av583785685`位置为倒数第2
-
-```shell
-curl 'http://api.bilibili.com/x/space/channel/video/sort' \
---data-urlencode 'cid=138995' \
---data-urlencode 'aid=583785685' \
---data-urlencode 'to=2' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
-
-### 检查频道中有无失效视频
-
-> http://api.bilibili.com/x/space/channel/video/check
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ---------- | ------ | ---- |
-| cid | num | 目标频道id | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -400:请求错误 -404:无此项 53005:频道内有失效视频 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-检查频道`138995`
-
-```shell
-curl -G 'http://api.bilibili.com/x/space/channel/video/check
---data-urlencode 'cid=138995' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
-
-## 收藏
-
-
-
-### 查询用户创建的视频收藏夹
-
-> http://api.bilibili.com/x/v3/fav/folder/created/list-all
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-查看私有收藏夹时需要认证
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| up_mid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ----------------------------- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | 隐藏时:null 公开时:obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | --------------------------------------- | -------------- | ---- |
-| count | num | 创建的收藏夹数 | |
-| list | 无收藏夹时:null 有收藏夹时:array | 收藏夹列表 | |
-
-`data`中的`list`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ----------- | --------------------- |
-| 0 | obj | 收藏夹1 | |
-| n | obj | 收藏夹(n+1) | 项数取决于`count`的值 |
-| …… | obj | …… | |
-
-`data`中的`list`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | ---------------- | --------------- |
-| id | num | 收藏夹mlid | |
-| fid | num | 原始收藏夹mlid | 去除两位mid尾号 |
-| mid | num | 创建用户mid | |
-| attr | num | 收藏夹属性位配置 | |
-| title | str | 收藏夹标题 | |
-| fav_state | num | 0 | 作用尚不明确 |
-| media_count | num | 收藏夹总计视频数 | |
-
-`attr`属性位二进制值表:
-
-| 位 | 内容 | 备注 |
-| --------------- | ---------------- | -------------------------------- |
-| 0 | 是否为默认收藏夹 | 0:默认收藏夹 1:其他收藏夹 |
-| 1 | 私有收藏夹 | 0:公开 1:私有 |
-| 其他有待补充... | | |
-
-**示例:**
-
-查询用户`mid=7792521`的收藏夹列表
-
-```shell
-curl -G 'http://api.bilibili.com/x/v3/fav/folder/created/list-all' \
---data-urlencode 'up_mid=7792521' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "count": 5,
- "list": [{
- "id": 44233921,
- "fid": 442339,
- "mid": 7792521,
- "attr": 0,
- "title": "默认收藏夹",
- "fav_state": 0,
- "media_count": 85
- }, {
- "id": 936347621,
- "fid": 9363476,
- "mid": 7792521,
- "attr": 22,
- "title": "放假君的鬼畜私房歌",
- "fav_state": 0,
- "media_count": 2
- }, {
- "id": 845218621,
- "fid": 8452186,
- "mid": 7792521,
- "attr": 22,
- "title": "♪一言不合就开唱♪",
- "fav_state": 0,
- "media_count": 4
- }, {
- "id": 844998121,
- "fid": 8449981,
- "mid": 7792521,
- "attr": 22,
- "title": "个人作品精选",
- "fav_state": 0,
- "media_count": 25
- }, {
- "id": 381779121,
- "fid": 3817791,
- "mid": 7792521,
- "attr": 22,
- "title": "鬼畜小课堂",
- "fav_state": 0,
- "media_count": 25
- }]
- }
-}
-```
-
-
-
-### 查询用户收藏的视频收藏夹
-
-> http://api.bilibili.com/x/v3/fav/folder/collected/list
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| ps | num | 每页项数 | 必要 | |
-| pn | num | 页码 | 必要 | |
-| up_mid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ----------------------------- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 40022:签名过长 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | 隐藏时:null 公开时:obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | --------------------------------------- | -------------- | ---- |
-| count | num | 创建的收藏夹数 | |
-| list | 无收藏夹时:null 有收藏夹时:array | 收藏夹列表 | |
-
-`data`中的`list`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ----------- | --------------------- |
-| 0 | obj | 收藏夹1 | |
-| n | obj | 收藏夹(n+1) | 项数取决于`count`的值 |
-| …… | obj | …… | |
-
-`data`中的`list`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------- | ---- | ------------------ | ----------------------------------------- |
-| id | num | 收藏夹ml | |
-| fid | num | 原始收藏夹mlid | 去除两位mid尾号 |
-| mid | num | 创建用户mid | |
-| attr | num | 收藏夹属性 | 转换成8-bit二进制处理 详细说明见下表 |
-| title | str | 收藏夹标题 | |
-| cover | str | 收藏夹封面图片url | |
-| upper | obj | 收藏夹创建用户信息 | |
-| cover_type | num | 2 | 作用尚不明确 |
-| intro | str | 空 | 作用尚不明确 |
-| ctime | num | 创建时间 | 时间戳 |
-| mtime | num | 审核时间 | 时间戳 |
-| state | num | 0 | 作用尚不明确 |
-| fav_state | num | 0 | 作用尚不明确 |
-| media_count | num | 收藏夹总计视频数 | |
-
-`attr`属性二进制值表:
-
-| 其他有待补充... | 1:默认收藏夹 | 0:公开性 |
-| --------------- | -------------------------------- | -------------------- |
-| | 0:默认收藏夹 1:其他收藏夹 | 0:公开 1:私有 |
-
-`data`中的`list`数组中的对象中的`upper`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---------- | ------------ |
-| mid | num | 创建人mid | |
-| name | str | 创建人昵称 | |
-| face | str | 空 | 作用尚不明确 |
-
-**示例:**
-
-查询用户`mid=293793435`的收藏夹收藏列表
-
-```shell
-curl -G 'http://api.bilibili.com/x/v3/fav/folder/collected/list' \
---data-urlencode 'up_mid=293793435' \
---data-urlencode 'ps=20' \
---data-urlencode 'pn=1' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "count": 2,
- "list": [{
- "id": 496307088,
- "fid": 4963070,
- "mid": 412466388,
- "attr": 22,
- "title": "入站必刷",
- "cover": "http://i0.hdslb.com/bfs/archive/baae2b4050363c0ab45465b7cf696b8304fdaca8.jpg",
- "upper": {
- "mid": 412466388,
- "name": "热门菌",
- "face": ""
- },
- "cover_type": 2,
- "intro": "",
- "ctime": 1563394571,
- "mtime": 1563394571,
- "state": 0,
- "fav_state": 0,
- "media_count": 55
- }, {
- "id": 381779121,
- "fid": 3817791,
- "mid": 7792521,
- "attr": 22,
- "title": "鬼畜小课堂",
- "cover": "http://i2.hdslb.com/bfs/archive/09a668cfdb38fb3a85f905c10f48a2947e36a695.jpg",
- "upper": {
- "mid": 7792521,
- "name": "还有一天就放假了",
- "face": ""
- },
- "cover_type": 2,
- "intro": "",
- "ctime": 1553700224,
- "mtime": 1557291666,
- "state": 0,
- "fav_state": 0,
- "media_count": 25
- }]
- }
-}
-```
-
-
-
-## 课程
-
-
-
-### 查询用户发布的课程列表
-
-> http://api.bilibili.com/pugv/app/web/season/page
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | -------- |
-| mid | num | 目标用户mid | 必要 | |
-| pn | num | 页码 | 非必要 | 默认为1 |
-| ps | num | 每页项数 | 非必要 | 默认为20 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ---------------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 53013:用户隐私设置未公开 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ----- | -------- | ---- |
-| list | array | 课程列表 | |
-| page | obj | 页面信息 | |
-
-`data`中的`page`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | -------------- | ------------------------------------- |
-| next | bool | 是否存在下一页 | false:最后一页 true:存在下一页 |
-| num | num | 当前页码 | |
-| size | num | 每页项数 | |
-| total | num | 总计项数 | |
-
-`data`中的`list`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ----------- | -------------------------- |
-| 0 | obj | 课程1 | |
-| n | obj | 课程(n+1) | 按照目标用户的发布顺序排列 |
-| …… | obj | …… | |
-
-`data`中的`list`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------- | ---- | ------------ | ------------- |
-| cover | str | 课程封面url | |
-| ep_count | num | 课程集数 | |
-| link | str | 课程页面url | 手机版页面url |
-| page | num | 1 | 作用尚不明确 |
-| play | num | 课程播放数 | |
-| season_id | num | 课程ssid | |
-| status | str | 更新状态说明 | |
-| subtitle | str | 课程副标题 | |
-| title | str | 课程标题 | |
-
-**示例:**
-
-查询用户`mid=33683045`的课程发布列表
-
-```shell
-curl -G 'http://api.bilibili.com/pugv/app/web/season/page' \
---data-urlencode 'mid=33683045' \
---data-urlencode 'ps=5' \
---data-urlencode 'pn=1'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "data": {
- "items": [
- {
- "cover": "http://i0.hdslb.com/bfs/archive/596575057885fff7f0ceff047437186cba459358.jpg",
- "ep_count": 10,
- "link": "https://m.bilibili.com/cheese/play/ss80",
- "page": 1,
- "play": 174467,
- "season_id": 80,
- "status": "共10期",
- "subtitle": "百科全书式军事科普短视频系列",
- "title": "《战忽知道》第一季"
- },
- {
- "cover": "http://i0.hdslb.com/bfs/archive/322aa94d27cece62d2a859caf71ac2426f29eee2.jpg",
- "ep_count": 1,
- "link": "https://m.bilibili.com/cheese/play/ss145",
- "page": 1,
- "play": 22155,
- "season_id": 145,
- "status": "更新至第1期",
- "subtitle": "此课程为《局座:第四次工业革命来了》部分集数,请谨慎购买",
- "title": "【体验课】局座讲5G:5G如何改变我们的生活?"
- },
- {
- "cover": "http://i0.hdslb.com/bfs/archive/b9794ac4507f8764e219df413b661b5faf499a19.jpg",
- "ep_count": 10,
- "link": "https://m.bilibili.com/cheese/play/ss113",
- "page": 1,
- "play": 49833,
- "season_id": 113,
- "status": "更新至第10期",
- "subtitle": "百科全书式军事科普短视频系列",
- "title": "《战忽知道》第二季"
- },
- {
- "cover": "http://i0.hdslb.com/bfs/archive/7351fcb33592a4bc7aac9f71d421b4b5ce0177d3.jpg",
- "ep_count": 10,
- "link": "https://m.bilibili.com/cheese/play/ss51",
- "page": 1,
- "play": 4981037,
- "season_id": 51,
- "status": "共10期",
- "subtitle": "洞悉国际局势,学习战略思维",
- "title": "局座的国际战略课"
- },
- {
- "cover": "http://i0.hdslb.com/bfs/archive/31e2a170b5a815e34f0537a2727b28f1b87dca18.jpg",
- "ep_count": 10,
- "link": "https://m.bilibili.com/cheese/play/ss121",
- "page": 1,
- "play": 30754,
- "season_id": 121,
- "status": "更新至第10期",
- "subtitle": "百科全书式军事科普短视频系列",
- "title": "《战忽知道》第三季"
- }
- ],
- "page": {
- "next": true,
- "num": 1,
- "size": 5,
- "total": 8
- }
- },
- "message": "success"
-}
-```
-
-
-
-## 订阅
-
-
-
-### 查询用户追番预览列表
-
-> http://space.bilibili.com/ajax/Bangumi/getList
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-如设置隐私查看自己的需要认证
-
-带有转义,且只能获取最多15条
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| mid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ------------------------ | ---------------------------------- | --------------------------- |
-| status | bool | 状态 | false:失败 true:成功 |
-| data | 失败:str 成功:obj | 失败:错误信息 成功:信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ----- | ------------ | ------------ |
-| count | num | 总计追番数 | |
-| pages | num | 0 | 作用尚不明确 |
-| result | array | 追番预览列表 | |
-
-`data`中的`result`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ----------- | -------------------------- |
-| 0 | obj | 追番1 | |
-| n | obj | 追番(n+1) | 按照目标用户的关注顺序排列 |
-| …… | obj | …… | |
-| 14 | obj | 追番15 | 最后一项 |
-
-`data`中的`result`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ---- | --------------- | --------------------------------- |
-| brief | str | 简介 | |
-| cover | str | 封面图片url | |
-| evaluate | str | 空 | |
-| favorites | num | 追番数 | |
-| is_finish | num | 是否已完结 | 0:未完结 1:已完结 |
-| last_ep_index | num | 0 | 作用尚不明确 |
-| newest_ep_index | num | 最新一话 | 可能为0 |
-| season_id | str | 番剧ssid | |
-| share_url | str | 播放页面链接url | |
-| title | str | 标题 | |
-| total_count | num | 总计集数 | 未完结:-1 已完结:非0正整数 |
-
-**示例:**
-
-查看用户`mid=14082`的追番预览列表
-
-```shell
-curl -G 'http://space.bilibili.com/ajax/Bangumi/getList' \
---data-urlencode 'mid=14082' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "status": true,
- "data": {
- "count": 25,
- "pages": 0,
- "result": [{
- "season_id": "29310",
- "share_url": "http:\/\/bangumi.bilibili.com\/anime\/29310\/",
- "title": "异度侵入 ID:INVADED",
- "is_finish": 1,
- "favorites": 3479220,
- "newest_ep_index": 13,
- "last_ep_index": 0,
- "total_count": 13,
- "cover": "http:\/\/i0.hdslb.com\/bfs\/bangumi\/image\/9bf9e66968f85b33ec3769a16c86b36dc984abbc.png",
- "evaluate": "",
- "brief": "本片讲述利用能检测出人们杀意的装置以及利用思想粒子做出的“井”,来探知事件真相的科幻故事。"
- }, {
- "season_id": "25739",
- "share_url": "http:\/\/bangumi.bilibili.com\/anime\/25739\/",
- "title": "关于我转生变成史莱姆这档事",
- "is_finish": 1,
- "favorites": 5518829,
- "newest_ep_index": 0,
- "last_ep_index": 0,
- "total_count": 27,
- "cover": "http:\/\/i0.hdslb.com\/bfs\/bangumi\/a4c0e0ccc44fe3949a734f546cf5bb07da925bad.png",
- "evaluate": "",
- "brief": "史莱姆生活,开始了。\n上班族的三上悟在道路上被歹徒给刺杀身亡后,回过神来发现自己转生到了异世界。\n不..."
- },
- …………
- ]
- }
-}
-```
-
-
-
-### 查询用户追番(追剧)明细
-
-> http://api.bilibili.com/x/space/bangumi/follow/list
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-如设置隐私查看自己的需要认证
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | -------------------- |
-| vmid | num | 目标用户mid | 必要 | |
-| pn | num | 页码 | 非必要 | 默认为1 |
-| ps | num | 每页项数 | 非必要 | 默认为15 |
-| type | num | 查询类型 | 必要 | 1:追番 2:追剧 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ---------------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 53013:用户隐私设置未公开 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ----- | ---------- | ---- |
-| list | array | 追番列表 | |
-| pn | num | 当前页码 | |
-| ps | num | 每页项数 | |
-| total | num | 总计追番数 | |
-
-`data`中的`list`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ----------- | -------------------------- |
-| 0 | obj | 追番1 | |
-| n | obj | 追番(n+1) | 按照目标用户的关注顺序排列 |
-| …… | obj | …… | |
-
-`data`中的`list`数组中的对象:
-
-基本同「番剧详细信息」中的result对象(未完工)
-
-**示例:**
-
-查看用户`mid=14082`的追番明细
-
-```shell
-curl -G 'http://api.bilibili.com/x/space/bangumi/follow/list' \
---data-urlencode 'vmid=14082' \
---data-urlencode 'type=1' \
---data-urlencode 'ps=2' \
---data-urlencode 'pn=1' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "list": [{
- "season_id": 29310,
- "media_id": 28224080,
- "season_type": 1,
- "season_type_name": "番剧",
- "title": "异度侵入 ID:INVADED",
- "cover": "http://i0.hdslb.com/bfs/bangumi/image/9bf9e66968f85b33ec3769a16c86b36dc984abbc.png",
- "total_count": 13,
- "is_finish": 1,
- "is_started": 1,
- "is_play": 1,
- "badge": "会员专享",
- "badge_type": 0,
- "rights": {
- "allow_review": 1,
- "is_selection": 1,
- "selection_style": 1
- },
- "stat": {
- "follow": 3475768,
- "view": 87500861,
- "danmaku": 1334654,
- "reply": 316632,
- "coin": 835150,
- "series_follow": 3475242,
- "series_view": 87500861
- },
- "new_ep": {
- "id": 307774,
- "index_show": "全13话",
- "cover": "http://i0.hdslb.com/bfs/archive/3dce2b856a7b0ea667aa288b51b7c0478fa56c4d.jpg",
- "title": "13",
- "long_title": "CHANNELEDⅡ",
- "pub_time": "2020-03-23 00:30:00",
- "duration": 1481000
- },
- "rating": {
- "score": 9.8,
- "count": 262589
- },
- "square_cover": "http://i0.hdslb.com/bfs/bangumi/image/664dbf039ec2da8dd982b697a108e28e87b9897e.jpg",
- "season_status": 13,
- "season_title": "TV",
- "badge_ep": "会员",
- "media_attr": 196608,
- "season_attr": 0,
- "evaluate": "本片讲述利用能检测出人们杀意的装置以及利用思想粒子做出的“井”,来探知事件真相的科幻故事。...",
- "areas": [{
- "id": 2,
- "name": "日本"
- }],
- "subtitle": "",
- "first_ep": 307446,
- "can_watch": 1,
- "series": {
- "series_id": 4760,
- "title": "ID:INVADED",
- "season_count": 1,
- "new_season_id": 29310
- },
- "publish": {
- "pub_time": "2020-01-06 00:30:00",
- "pub_time_show": "敬请期待",
- "release_date": "2020-01-06",
- "release_date_show": "2020年1月6日"
- },
- "mode": 2,
- "section": [{
- "section_id": 39327,
- "season_id": 29310,
- "limit_group": 328,
- "watch_platform": 15,
- "copyright": "dujia",
- "ban_area_show": 1
- }, {
- "section_id": 39633,
- "season_id": 29310,
- "limit_group": 328,
- "watch_platform": 15,
- "type": 1,
- "copyright": "dujia",
- "title": "其他",
- "ban_area_show": 1
- }, {
- "section_id": 44101,
- "season_id": 29310,
- "limit_group": 316,
- "watch_platform": 15,
- "type": 4,
- "copyright": "ugc",
- "ban_area_show": 1
- }],
- "url": "https://www.bilibili.com/bangumi/play/ss29310",
- "follow_status": 2,
- "is_new": 0,
- "progress": "",
- "both_follow": true
- }, {
- "season_id": 25739,
- "media_id": 139252,
- "season_type": 1,
- "season_type_name": "番剧",
- "title": "关于我转生变成史莱姆这档事",
- "cover": "http://i0.hdslb.com/bfs/bangumi/a4c0e0ccc44fe3949a734f546cf5bb07da925bad.png",
- "total_count": 27,
- "is_finish": 1,
- "is_started": 1,
- "is_play": 1,
- "badge": "会员专享",
- "badge_type": 0,
- "rights": {
- "allow_review": 1,
- "is_selection": 1,
- "selection_style": 1
- },
- "stat": {
- "follow": 5516519,
- "view": 246739631,
- "danmaku": 3802465,
- "reply": 460225,
- "coin": 1338958,
- "series_follow": 5516535,
- "series_view": 246739631
- },
- "new_ep": {
- "id": 316957,
- "index_show": "全27话",
- "cover": "http://i0.hdslb.com/bfs/archive/81d07d1a478ce3a6209b557e14df9b9c78c42abb.jpg",
- "title": "OAD03",
- "long_title": "外传:利姆鲁的华丽教师生活 其一",
- "pub_time": "2020-03-27 00:00:03",
- "duration": 1493000
- },
- "rating": {
- "score": 9.4,
- "count": 83354
- },
- "square_cover": "http://i0.hdslb.com/bfs/bangumi/8d9f5b4a566d0547bc2e3f6f733b732a09c0d3d4.jpg",
- "season_status": 13,
- "season_title": "TV",
- "badge_ep": "会员",
- "media_attr": 0,
- "season_attr": 0,
- "evaluate": "史莱姆生活,开始了。\n上班族的三上悟在道路上被歹徒给刺杀身亡后,回过神来发现自己转生到了异世界。\n不过,自己居然是“史莱姆”!\n他在得到利姆鲁这个名字后开始了自己的史莱姆人生,随着与各个种族相处交流的...",
- "areas": [{
- "id": 2,
- "name": "日本"
- }],
- "subtitle": "",
- "first_ep": 250460,
- "can_watch": 1,
- "series": {
- "series_id": 4188,
- "title": "关于我转生变成史莱姆这档事",
- "season_count": 1,
- "new_season_id": 25739
- },
- "publish": {
- "pub_time": "2018-10-02 00:30:00",
- "pub_time_show": "2018年10月02日00:30",
- "release_date": "2018-10-02",
- "release_date_show": "2018年10月2日"
- },
- "mode": 2,
- "section": [{
- "section_id": 34988,
- "season_id": 25739,
- "limit_group": 328,
- "watch_platform": 15,
- "copyright": "bilibili",
- "ban_area_show": 1
- }],
- "url": "https://www.bilibili.com/bangumi/play/ss25739",
- "follow_status": 2,
- "is_new": 0,
- "progress": "",
- "both_follow": true
- }],
- "pn": 1,
- "ps": 2,
- "total": 25
- }
-}
-```
-
-
-
-
-
-
-
-### 查询用户关注的TAG(话题)
-
-> http://space.bilibili.com/ajax/tags/getSubList
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-如设置隐私查看自己的需要认证
-
-带有转义
-
-只显示前100个
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ----------- | ------ | ---- |
-| mid | num | 目标用户mid | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ---------------------------- | -------------------------------------- | --------------------------- |
-| ststus | bool | 返回值 | false:错误 true:正确 |
-| data | 错误时:str 正确时:obj | 错误时:错误信息 正确时:数据本体 | 正确时不返回错误信息 |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ----- | ----------- | ---- |
-| tags | array | 关注TAG列表 | |
-| count | num | 关注TAG的数 | |
-
-`data`中的`tags`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | -------------- | -------- |
-| 0 | obj | 关注TAG1 | |
-| n | obj | 关注TAG(n+1) | |
-| …… | obj | …… | …… |
-| 99 | obj | 关注TAG100 | 最后一项 |
-
-`data`中的`tags`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | ------------------- | ------------ |
-| archive_count | num | 0 | 作用尚不明确 |
-| cover | str | TAG图片url | 无则为空 |
-| name | str | TAG名 | |
-| notify | num | 1 | 作用尚不明确 |
-| tag_id | num | tag_id | |
-| updated_ts | str | 1970-01-01 08:00:00 | 作用尚不明确 |
-
-**示例:**
-
-查询用户`mid=2`的关注TAG
-
-```shell
-curl -G 'http://space.bilibili.com/ajax/tags/getSubList' \
---data-urlencode 'mid=2' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "status": true,
- "data": {
- "tags": [{
- "name": "豪宅",
- "cover": "",
- "tag_id": 47637,
- "notify": 1,
- "archive_count": 0,
- "updated_ts": "1970-01-01 08:00:00"
- }, {
- "name": "死亡搁浅",
- "cover": "",
- "tag_id": 1737239,
- "notify": 1,
- "archive_count": 0,
- "updated_ts": "1970-01-01 08:00:00"
- },
- …………
- ],
- "count": 58
- }
-}
-```
-
-
\ No newline at end of file
diff --git a/user/vip.md b/user/vip.md
deleted file mode 100644
index 10ba29e..0000000
--- a/user/vip.md
+++ /dev/null
@@ -1,138 +0,0 @@
-# 大会员兑换福利
-
-- [大会员兑换福利](#大会员兑换福利)
- - [兑换状态查询](#兑换状态查询)
- - [兑换](#兑换)
-
----
-
-## 卡券状态查询
-
-> http://api.bilibili.com/x/vip/privilege/my
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)或APP
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | --------------------------- |
-| code | num | 返回值 | -101:账号未登录 -400:请求错误 0:成功 |
-| message | str | 错误信息 | |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | -------|----------------|------ |
-| list | array | 卡券列表 | |
-
-`list`数组:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | -------|-----------------|------ |
-| 0 | obj | B币兑换状态 | |
-| 1 | obj | 会员购优惠券兑换状态 | |
-
-`list`中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------------- | -----|------------------|------ |
-| type | num | 卡券类型 | 1:B币 2:会员购优惠券 3:漫画福利券 |
-| state | num | 兑换状态 | 0:当月未兑换 1:已兑换 |
-| expire_time | num | 当月过期时间 | 当月月底 |
-| vip_type | num | (?) | |
-
-
-**示例:**
-
-```shell
-curl -G 'http://api.bilibili.com/x/vip/privilege/my' \
--b "SESSDATA=xxx"
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "list": [
- {
- "type": 1,
- "state": 1,
- "expire_time": 1640966399,
- "vip_type": 2
- },
- {
- "type": 2,
- "state": 1,
- "expire_time": 1640966399,
- "vip_type": 2
- },
- {
- "type": 3,
- "state": 0,
- "expire_time": 1640966399,
- "vip_type": 2
- }
- ]
- }
-}
-```
-
-
-
-
-## 兑换
-> http://api.bilibili.com/x/vip/privilege/receive
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-**正文参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ---------- | -------- | ---------------------- |
-| type | num | 兑换类型 | 必要 | 1:B币 2:会员购优惠券 3:漫画福利券 |
-| csrf | num | CSRF token | 必要 | Cookie bili_jct字段 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | -101:账号未登录 -111:csrf 校验失败 -400:请求错误 69800:网络繁忙 请稍后再试 69801:你已领取过该权益 0:成功 |
-| message | str | 错误信息 | |
-| ttl | num | 1 | |
-
-**示例:**
-
-```shell
-curl 'http://api.bilibili.com/x/vip/privilege/receive' \
--b 'SESSDATA=xxx' \
---data-urlencode 'type=1' \
---data-urlencode 'csrf=csrf_token'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
diff --git a/video/info.md b/video/info.md
deleted file mode 100644
index 2ee0257..0000000
--- a/video/info.md
+++ /dev/null
@@ -1,660 +0,0 @@
-# 视频基本信息
-
-
-
-- [获取视频详细信息(web端)](#获取视频详细信息(web端))
-- [获取视频简介](#获取视频简介)
-- [查询视频分P列表 (avid/bvid转cid)](#查询视频分P列表 (avid/bvid转cid))
-
----
-
-## 获取视频详细信息(web端)
-
-> http://api.bilibili.com/x/web-interface/view
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-限制游客访问的视频需要登录
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | -------- | ---------- | ------------------ |
-| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -400:请求错误 -403:权限不足 -404:无视频 62002:稿件不可见 62004:稿件审核中 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | obj | 信息本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------------------- | ------- | ------------------------------ | ------------------------------------------------------------ |
-| bvid | str | 稿件bvid | |
-| aid | num | 稿件avid | |
-| videos | num | 稿件分P总数 | 默认为1 |
-| tid | num | 分区tid | |
-| tname | str | 子分区名称 | |
-| copyright | num | 视频类型 | 1:原创 2:转载 |
-| pic | str | 稿件封面图片url | |
-| title | str | 稿件标题 | |
-| pubdate | num | 稿件发布时间 | 时间戳 |
-| ctime | num | 用户投稿时间 | 时间戳 |
-| desc | str | 视频简介 | |
-| desc_v2 | array | 新版视频简介 | |
-| state | num | 视频状态 | 详情见[属性数据文档](attribute_data.md#attribute字段值(稿件属性位)) |
-| ~~attribute~~(已经弃用) | ~~num~~ | ~~稿件属性位配置~~ | 详情见[属性数据文档](attribute_data.md#state字段值(稿件状态)) |
-| duration | num | 稿件总时长(所有分P) | 单位为秒 |
-| forward | num | 撞车视频跳转avid | 仅撞车视频存在此字段 |
-| mission_id | num | 稿件参与的活动id | |
-| redirect_url | str | 重定向url | 仅番剧或影视视频存在此字段 用于番剧&影视的av/bv->ep |
-| rights | obj | 视频属性标志 | |
-| owner | obj | 视频UP主信息 | |
-| stat | obj | 视频状态数 | |
-| dynamic | str | 视频同步发布的的动态的文字内容 | |
-| cid | num | 视频1P cid | |
-| dimension | obj | 视频1P分辨率 | |
-| no_cache | bool | true | 作用尚不明确 |
-| pages | array | 视频分P列表 | |
-| subtitle | obj | 视频CC字幕信息 | |
-| staff | array | 合作成员列表 | 非合作视频无此项 |
-| user_garb | obj | 用户装扮信息 | |
-
-`data`中的`desc_v2`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------ | ---- |
-| 0 | obj | 新版简介内容 | |
-
-`desc_v2`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ---- | -------- | ---- |
-| raw_text | num | 简介内容 | |
-| type | num | ? | |
-| biz_id | num | ? | |
-
-`data`中的`rights`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ---- | ---------------------- | ------------ |
-| bp | num | 0 | 作用尚不明确 |
-| elec | num | 是否支持充电 | |
-| download | num | 是否允许下载 | |
-| movie | num | 是否电影 | |
-| pay | num | 是否PGC付费 | |
-| hd5 | num | 是否有高码率 | |
-| no_reprint | num | 是否显示“禁止转载“标志 | |
-| autoplay | num | 是否自动播放 | |
-| ugc_pay | num | 是否UGC付费 | |
-| is_stein_gate | num | 是否为互动视频 | |
-| is_cooperation | num | 是否为联合投稿 | |
-| ugc_pay_preview | num | 0 | 作用尚不明确 |
-| no_background | num | 0 | 作用尚不明确 |
-
-`data`中的`owner`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | -------- | ---- |
-| mid | num | UP主mid | |
-| name | str | UP主昵称 | |
-| face | str | UP主头像 | |
-
-`data`中的`stat`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ---- | ------------ | ------- |
-| aid | num | 稿件avid | |
-| view | num | 播放数 | |
-| danmaku | num | 弹幕数 | |
-| reply | num | 评论数 | |
-| favorite | num | 收藏数 | |
-| coin | num | 投币数 | |
-| share | num | 分享数 | |
-| now_rank | num | 当前排名 | |
-| his_rank | num | 历史最高排行 | |
-| like | num | 获赞数 | |
-| dislike | num | 点踩数 | 恒为`0` |
-| evaluation | str | 视频评分 | |
-| argue_msg | str | 警告/争议提示信息 | |
-
-`data`中的`pages`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---------- | ------------- |
-| 0 | obj | 1P内容 | 无分P仅有此项 |
-| n | obj | (n+1)P内容 | |
-| …… | obj | …… | …… |
-
-`pages`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------- | ---- | --------------- | --------------------------------------------------------- |
-| cid | num | 当前分P cid | |
-| page | num | 当前分P | |
-| from | str | 视频来源 | vupload:普通上传(B站) hunan:芒果TV qq:腾讯 |
-| part | str | 当前分P标题 | |
-| duration | num | 当前分P持续时间 | 单位为秒 |
-| vid | str | 站外视频vid | 仅站外视频有效 |
-| weblink | str | 站外视频跳转url | 仅站外视频有效 |
-| dimension | obj | 当前分P分辨率 | 部分较老视频无分辨率值 |
-
-`pages`数组中的对象中的`dimension`对象(同`data`中的`dimension`对象):
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ---- | -------------- | -------------------- |
-| width | num | 当前分P 宽度 | |
-| height | num | 当前分P 高度 | |
-| rotate | num | 是否将宽高对换 | 0:正常 1:对换 |
-
-`subtitle`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------ | ----- | ---------------- | ---- |
-| allow_submit | bool | 是否允许提交字幕 | |
-| list | array | 字幕列表 | |
-
-`subtitle`对象中的`list`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------- | ---- |
-| 0 | obj | 字幕1 | |
-| n | obj | 字幕(n+1) | |
-| …… | obj | …… | …… |
-
-`list`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------ | ---- | ------------------- | ---- |
-| id | num | 字幕id | |
-| lan | str | 字幕语言 | |
-| lan_doc | str | 字幕语言名称 | |
-| is_lock | bool | 是否锁定 | |
-| author_mid | num | 字幕上传者mid | |
-| subtitle_url | str | json格式字幕文件url | |
-| author | obj | 字幕上传者信息 | |
-
-`list`数组中的对象中的`author`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ---- | ----------------- | ------------ |
-| mid | num | 字幕上传者mid | |
-| name | str | 字幕上传者昵称 | |
-| sex | str | 字幕上传者性别 | 男 女 保密 |
-| face | str | 字幕上传者头像url | |
-| sign | str | 字幕上传者签名 | |
-| rank | num | 10000 | 作用尚不明确 |
-| birthday | num | 0 | 作用尚不明确 |
-| is_fake_account | num | 0 | 作用尚不明确 |
-| is_deleted | num | 0 | 作用尚不明确 |
-
-`staff`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------- | ---- |
-| 0 | obj | 合作成员1 | |
-| n | obj | 合作成员(n+1) | |
-| …… | obj | …… | …… |
-
-`staff`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------- | ---- | -------------- | ---- |
-| mid | num | 成员mid | |
-| title | str | 成员名称 | |
-| name | str | 成员昵称 | |
-| face | str | 成员头像url | |
-| vip | obj | 成员大会员状态 | |
-| official | obj | 成员认证信息 | |
-| follower | num | 成员粉丝数 | |
-
-`staff`数组中的对象中的`vip`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ---- | ------------ | ----------------------------------- |
-| type | num | 成员会员类型 | 0:无 1:月会员 2:年会员 |
-| status | num | 会员状态 | 0:无 1:有 |
-| theme_type | num | 0 | |
-
-`staff`数组中的对象中的`official`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | ------------ | ------------------------------------------------- |
-| role | num | 成员认证级别 | 0:无 1 2 7:个人认证 3 4 5 6:机构认证 |
-| title | str | 成员认证名 | 无为空 |
-| desc | str | 成员认证备注 | 无为空 |
-| type | num | 成员认证类型 | -1:无 0:有 |
-
-`data`中的`user_garb`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----------------- | ---- | ------- | ---- |
-| url_image_ani_cut | str | 某url? | |
-
-**示例:**
-
-获取视频`av85440373`/`BV117411r7R1`的基本信息
-
-avid方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/web-interface/view' \
---data-urlencode 'aid=85440373'
-```
-
-bvid方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/web-interface/view' \
---data-urlencode 'bvid=BV117411r7R1'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "bvid": "BV117411r7R1",
- "aid": 85440373,
- "videos": 1,
- "tid": 28,
- "tname": "原创音乐",
- "copyright": 1,
- "pic": "http://i1.hdslb.com/bfs/archive/ea0dd34bf41e23a68175680a00e3358cd249105f.jpg",
- "title": "当我给拜年祭的快板加了电音配乐…",
- "pubdate": 1580377255,
- "ctime": 1580212263,
- "desc": "【CB想说的】看完拜年祭之后最爱的一个节目!给有快板的部分简单加了一些不同风格的配乐hhh,感谢沃玛画的我!太可爱了哈哈哈哈哈哈哈!!!\n【Warma想说的】我画了打碟的CB,画风为了还原原版视频所以参考了四迹老师的画风,四迹老师的画真的太可爱啦!不过其实在画的过程中我遇到了一个问题,CB的耳机……到底是戴在哪个耳朵上呢?\n\n原版:av78977080\n编曲(配乐):Crazy Bucket\n人声(配音):Warma/谢拉\n曲绘:四迹/Warma\n动画:四迹/Crazy Bucket\n剧本:Mokurei-木灵君\n音频后期:DMYoung/纳兰寻风/Crazy Bucket\n包装:破晓天",
- "desc_v2": [
- {
- "raw_text": "【CB想说的】看完拜年祭之后最爱的一个节目!给有快板的部分简单加了一些不同风格的配乐hhh,感谢沃玛画的我!太可爱了哈哈哈哈哈哈哈!!!\n【Warma想说的】我画了打碟的CB,画风为了还原原版视频所以参考了四迹老师的画风,四迹老师的画真的太可爱啦!不过其实在画的过程中我遇到了一个问题,CB的耳机……到底是戴在哪个耳朵上呢?\n\n原版:av78977080\n编曲(配乐):Crazy Bucket\n人声(配音):Warma/谢拉\n曲绘:四迹/Warma\n动画:四迹/Crazy Bucket\n剧本:Mokurei-木灵君\n音频后期:DMYoung/纳兰寻风/Crazy Bucket\n包装:破晓天",
- "type": 1,
- "biz_id": 0
- }
- ],
- "state": 0,
- "duration": 486,
- "mission_id": 11838,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 1,
- "movie": 0,
- "pay": 0,
- "hd5": 1,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 1,
- "ugc_pay_preview": 0,
- "no_background": 0,
- "clean_mode": 0,
- "is_stein_gate": 0
- },
- "owner": {
- "mid": 66606350,
- "name": "Crazy_Bucket",
- "face": "http://i2.hdslb.com/bfs/face/c9af3b32cf74baec5a4b65af8ca18ae5ff571f77.jpg"
- },
- "stat": {
- "aid": 85440373,
- "view": 2087084,
- "danmaku": 11495,
- "reply": 2669,
- "favorite": 58113,
- "coin": 68710,
- "share": 9190,
- "now_rank": 0,
- "his_rank": 55,
- "like": 148621,
- "dislike": 0,
- "evaluation": "",
- "argue_msg": ""
- },
- "dynamic": "进来就出不去了!!!\n#全民音乐UP主##CB##warma##电音##快板##拜年祭##诸神的奥运##编曲##Remix#",
- "cid": 146044693,
- "dimension": {
- "width": 1920,
- "height": 1080,
- "rotate": 0
- },
- "no_cache": false,
- "pages": [
- {
- "cid": 146044693,
- "page": 1,
- "from": "vupload",
- "part": "建议改成:建议改成:诸 神 的 电 音 节(不是)",
- "duration": 486,
- "vid": "",
- "weblink": "",
- "dimension": {
- "width": 1920,
- "height": 1080,
- "rotate": 0
- }
- }
- ],
- "subtitle": {
- "allow_submit": false,
- "list": []
- },
- "staff": [
- {
- "mid": 66606350,
- "title": "UP主",
- "name": "Crazy_Bucket",
- "face": "http://i2.hdslb.com/bfs/face/c9af3b32cf74baec5a4b65af8ca18ae5ff571f77.jpg",
- "vip": {
- "type": 2,
- "status": 1,
- "due_date": 1642694400000,
- "vip_pay_type": 1,
- "theme_type": 0,
- "label": {
- "path": "",
- "text": "年度大会员",
- "label_theme": "annual_vip",
- "text_color": "#FFFFFF",
- "bg_style": 1,
- "bg_color": "#FB7299",
- "border_color": ""
- },
- "avatar_subscript": 1,
- "nickname_color": "#FB7299",
- "role": 3,
- "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
- },
- "official": {
- "role": 2,
- "title": "bilibili 知名音乐UP主",
- "desc": "",
- "type": 0
- },
- "follower": 662460,
- "label_style": 0
- },
- {
- "mid": 53456,
- "title": "曲绘",
- "name": "Warma",
- "face": "http://i2.hdslb.com/bfs/face/c1bbee6d255f1e7fc434e9930f0f288c8b24293a.jpg",
- "vip": {
- "type": 2,
- "status": 1,
- "due_date": 1637424000000,
- "vip_pay_type": 0,
- "theme_type": 0,
- "label": {
- "path": "",
- "text": "年度大会员",
- "label_theme": "annual_vip",
- "text_color": "#FFFFFF",
- "bg_style": 1,
- "bg_color": "#FB7299",
- "border_color": ""
- },
- "avatar_subscript": 1,
- "nickname_color": "#FB7299",
- "role": 3,
- "avatar_subscript_url": "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png"
- },
- "official": {
- "role": 1,
- "title": "bilibili 知名UP主",
- "desc": "",
- "type": 0
- },
- "follower": 2655737,
- "label_style": 0
- }
- ],
- "user_garb": {
- "url_image_ani_cut": ""
- }
- }
-}
-```
-
-
-
-视频标题为:`当我给拜年祭的快板加了电音配乐…`
-
-视频分区为:`tid=28(音乐->原创音乐)`
-
-视频时长:`486s`
-
-视频发布时间:`2020/1/30 17:40:55`
-
-视频投稿时间:`2020/1/28 19:51:3`
-
-视频分P为:`1`
-
-视频类型为:`1(原创)`
-
-视频UP主为:`66606350(Crazy_Bucket)`
-
-视频简介为:
-
-`【CB想说的】看完拜年祭之后最爱的一个节目!给有快板的部分简单加了一些不同风格的配乐hhh,感谢沃玛画的我!太可爱了哈哈哈哈哈哈哈!!!\n【Warma想说的】我画了打碟的CB,画风为了还原原版视频所以参考了四迹老师的画风,四迹老师的画真的太可爱啦!不过其实在画的过程中我遇到了一个问题,CB的耳机……到底是戴在哪个耳朵上呢?\n\n原版:av78977080\n编曲(配乐):Crazy Bucket\n人声(配音):Warma/谢拉\n曲绘:四迹/Warma\n动画:四迹/Crazy Bucket\n剧本:Mokurei-木灵君\n音频后期:DMYoung/纳兰寻风/Crazy Bucket\n包装:破晓天`
-
-视频状态为:`0(开放浏览)`
-
-视频属性为: `显示“禁止转载“标志`、`高清`、`禁止其他人添加TAG`、`联合投稿视频`
-
-视频封面为:
-
-http://i1.hdslb.com/bfs/archive/ea0dd34bf41e23a68175680a00e3358cd249105f.jpg
-
-
-
-
-
-## 获取视频简介
-
-> http://api.bilibili.com/x/web-interface/archive/desc
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | -------- | ------------ | ------------------ |
-| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | -------------------------------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 62002:稿件不可见 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | str | 简介内容 | |
-
-**示例:**
-
-查看视频(教主的咕鸽)`av39330059`/`BV1Bt411z799`的简介
-
-avid方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/archive/desc' \
---data-urlencode 'aid=39330059'
-```
-
-bvid方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/archive/desc' \
---data-urlencode 'bvid=BV1Bt411z799'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": "1.小朋友们大家好,我是你们爷爷最喜欢的超威一列姆!\r\n2.在过去的一年里,我创作了无数脍炙人口的歌曲,常常被人夸赞高产似雌豚。\r\n3.接下来的日子里我会一如既往地勤勉创作,争取继续保持现在的产量,文体两开花。\r\n4.我感觉照这个势头和速度下去别说日常更新不在话下,连出张新专辑都指日可待了啊。\r\n5.也感谢你们一如既往的支持和鼓励,我会注意身体,不把自己累垮掉的。\r\n6.我个人不建议你们在评论区里艾特任何UP主,我真的不建议,当然你们非要这么做我也没办法的。"
-}
-```
-
-
-
-## 查询视频分P列表 (avid/bvid转cid)
-
-> http://api.bilibili.com/x/player/pagelist
-
-*请求方式:GET*
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | -------- | ------------ | ------------------ |
-| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ----- | -------- | --------------------------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 -404:无视频 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | array | 分P列表 | |
-
-数组`data`:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---------- | ------------- |
-| 0 | obj | 1P内容 | 无分P仅有此项 |
-| n | obj | (n+1)P内容 | |
-| …… | obj | …… | …… |
-
-数组`data`中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------- | ---- | --------------- | --------------------------------------------------------- |
-| cid | num | 当前分P cid | |
-| page | num | 当前分P | |
-| from | str | 视频来源 | vupload:普通上传(B站) hunan:芒果TV qq:腾讯 |
-| part | str | 当前分P标题 | |
-| duration | num | 当前分P持续时间 | 单位为秒 |
-| vid | str | 站外视频vid | |
-| weblink | str | 站外视频跳转url | |
-| dimension | obj | 当前分P分辨率 | 有部分视频无法获取分辨率 |
-
-数组`data`中的对象中的`dimension`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------ | ---- | -------------- | -------------------- |
-| width | num | 当前分P 宽度 | |
-| height | num | 当前分P 高度 | |
-| rotate | num | 是否将宽高对换 | 0:正常 1:对换 |
-
-**示例:**
-
-查询视频`av13502509`/`BV1ex411J7GE`的分P列表
-
-avid方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/player/pagelist' \
---data-urlencode 'aid=13502509'
-```
-
-bvid方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/player/pagelist' \
---data-urlencode 'bvid=BV1ex411J7GE'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": [{
- "cid": 66445301,
- "page": 1,
- "from": "vupload",
- "part": "00. 宣传短片",
- "duration": 33,
- "vid": "",
- "weblink": "",
- "dimension": {
- "width": 1920,
- "height": 1080,
- "rotate": 0
- }
- }, {
- "cid": 35039663,
- "page": 2,
- "from": "vupload",
- "part": "01. 火柴人与动画师",
- "duration": 133,
- "vid": "",
- "weblink": "",
- "dimension": {
- "width": 1484,
- "height": 1080,
- "rotate": 0
- }
- }, {
- "cid": 35039678,
- "page": 3,
- "from": "vupload",
- "part": "02. 火柴人与动画师 II",
- "duration": 210,
- "vid": "",
- "weblink": "",
- "dimension": {
- "width": 1484,
- "height": 1080,
- "rotate": 0
- }
- }, {
- "cid": 35039693,
- "page": 4,
- "from": "vupload",
- "part": "03. 火柴人与动画师 III",
- "duration": 503,
- "vid": "",
- "weblink": "",
- "dimension": {
- "width": 992,
- "height": 720,
- "rotate": 0
- }
- },
- …………
- ]
-}
-```
-
-
diff --git a/video/recommend.md b/video/recommend.md
deleted file mode 100644
index 79ea44a..0000000
--- a/video/recommend.md
+++ /dev/null
@@ -1,294 +0,0 @@
-# 视频推荐
-
-- [获取单视频推荐列表(web端)](#获取单视频推荐列表(web端))
-
----
-
-## 获取单视频推荐列表(web端)
-
-> http://api.bilibili.com/x/web-interface/archive/related
-
-*请求方式:GET*
-
-最多获取40条推荐视频
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | -------- | ------------ | ------------------ |
-| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ------ | -------- | ---------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | array | 推荐列表 | |
-
-`data`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------- | ---- |
-| 0 | obj | 推荐视频1 | |
-| n | obj | 推荐视频(n+1) | |
-| …… | obj | …… | …… |
-| 39 | obj | 推荐视频40 | |
-
-`data`数组中的对象:
-
-基本同「[获取视频详细信息(web端)](info.md#获取视频详细信息(web端))」中的data对象
-
-**示例:**
-
-查询视频`av7`/`BV1xx411c7m9`的推荐视频列表
-
-avid方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/web-interface/archive/related' \
---data-urlencode 'aid=7'
-```
-
-bvid方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/web-interface/archive/related' \
---data-urlencode 'bvid=BV1xx411c7m9'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": [{
- "aid": 21322566,
- "videos": 1,
- "tid": 124,
- "tname": "趣味科普人文",
- "copyright": 1,
- "pic": "http://i2.hdslb.com/bfs/archive/37f383ac35d386af1fc578108ad643e5952ff66a.jpg",
- "title": "bilibili上市宣传视频",
- "pubdate": 1522205992,
- "ctime": 1522205994,
- "desc": "今天晚上9点30分(北京时间),bilibili将在美国纳斯达克(NASDAQ)证券交易所挂牌上市。",
- "state": 0,
- "attribute": 16768,
- "duration": 155,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 1,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- },
- "owner": {
- "mid": 208259,
- "name": "陈睿",
- "face": "http://i2.hdslb.com/bfs/face/8920e6741fc2808cce5b81bc27abdbda291655d3.png"
- },
- "stat": {
- "aid": 21322566,
- "view": 2129084,
- "danmaku": 51108,
- "reply": 18119,
- "favorite": 46524,
- "coin": 85223,
- "share": 16669,
- "now_rank": 0,
- "his_rank": 1,
- "like": 95621,
- "dislike": 0
- },
- "dynamic": "今天晚上9点30分(北京时间),bilibili将在美国纳斯达克(NASDAQ)证券交易所挂牌上市。",
- "cid": 35063529,
- "dimension": {
- "width": 1920,
- "height": 1080,
- "rotate": 0
- },
- "bvid": ""
- }, {
- "aid": 271,
- "videos": 1,
- "tid": 53,
- "tname": "",
- "copyright": 1,
- "pic": "http://i1.hdslb.com/bfs/archive/a5980672f3d03e8292148748a63de99cd45679d3.jpg",
- "title": "弹幕测试专用",
- "pubdate": 1249886475,
- "ctime": 1497344798,
- "desc": "给职人发射弹幕定位用.",
- "state": 0,
- "attribute": 32768,
- "duration": 4558,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 0,
- "no_reprint": 0,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- },
- "owner": {
- "mid": 2,
- "name": "碧诗",
- "face": "http://i1.hdslb.com/bfs/face/3e60b20604b6fdc7d081eb6a1ec72aa47c5a3964.jpg"
- },
- "stat": {
- "aid": 271,
- "view": 2532266,
- "danmaku": 699214,
- "reply": 10224,
- "favorite": 34927,
- "coin": 9712,
- "share": 3586,
- "now_rank": 0,
- "his_rank": 182,
- "like": 27257,
- "dislike": 0
- },
- "dynamic": "",
- "cid": 3659795,
- "dimension": {
- "width": 0,
- "height": 0,
- "rotate": 0
- },
- "bvid": ""
- }, {
- "aid": 106,
- "videos": 1,
- "tid": 26,
- "tname": "音MAD",
- "copyright": 2,
- "pic": "http://i2.hdslb.com/bfs/archive/34d8fdf08d1fe28c229dec2fd122815a1d012908.jpg",
- "title": "最终鬼畜蓝蓝路",
- "pubdate": 1350316631,
- "ctime": 1497348932,
- "desc": "sm2057168 把这个音mad的图腾和支柱从UP的怒火中搬出来重新立好,这是我所能做的最后的事情了。",
- "state": 0,
- "attribute": 32768,
- "duration": 318,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 0,
- "no_reprint": 0,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- },
- "owner": {
- "mid": 8839,
- "name": "TSA",
- "face": "http://i0.hdslb.com/bfs/face/0ef5daf622bf4789034b3c15147a45e11c48c9b3.jpg"
- },
- "stat": {
- "aid": 106,
- "view": 7607070,
- "danmaku": 212896,
- "reply": 41521,
- "favorite": 200705,
- "coin": 51673,
- "share": 38049,
- "now_rank": 0,
- "his_rank": 22,
- "like": 148550,
- "dislike": 0
- },
- "dynamic": "",
- "cid": 3635863,
- "dimension": {
- "width": 0,
- "height": 0,
- "rotate": 0
- },
- "bvid": ""
- }, {
- "aid": 50025934,
- "videos": 1,
- "tid": 122,
- "tname": "野生技术协会",
- "copyright": 1,
- "pic": "http://i0.hdslb.com/bfs/archive/af534399612085dbd916381b3377b18c765fab2d.png",
- "title": "B站又一位Lv9的up诞生了",
- "pubdate": 1555829289,
- "ctime": 1555829289,
- "desc": "要不关注一下?",
- "state": 0,
- "attribute": 16512,
- "duration": 45,
- "rights": {
- "bp": 0,
- "elec": 0,
- "download": 0,
- "movie": 0,
- "pay": 0,
- "hd5": 0,
- "no_reprint": 1,
- "autoplay": 1,
- "ugc_pay": 0,
- "is_cooperation": 0,
- "ugc_pay_preview": 0,
- "no_background": 0
- },
- "owner": {
- "mid": 174161216,
- "name": "血色红茶Xenomprph",
- "face": "http://i1.hdslb.com/bfs/face/5a5ececb9b7a688751024c60063ba5853bed7e1e.jpg"
- },
- "stat": {
- "aid": 50025934,
- "view": 159595,
- "danmaku": 62,
- "reply": 153,
- "favorite": 301,
- "coin": 1059,
- "share": 55,
- "now_rank": 0,
- "his_rank": 0,
- "like": 1219,
- "dislike": 0
- },
- "dynamic": "",
- "cid": 87577929,
- "dimension": {
- "width": 2560,
- "height": 1440,
- "rotate": 0
- },
- "bvid": ""
- },
- …………
- ]
-}
-```
-
-
diff --git a/video/report.md b/video/report.md
deleted file mode 100644
index 3341644..0000000
--- a/video/report.md
+++ /dev/null
@@ -1,149 +0,0 @@
-# 视频观看数据上报
-
-- [上报观看进度(双端)](#上报观看进度(双端))
-- [上报视频播放心跳(web端)](#上报视频播放心跳(web端))
-
----
-
-## 上报观看进度(双端)
-
-> http://api.bilibili.com/x/v2/history/report
-
-*请求方式:POST*
-
-认证方式:APP或Cookie(SESSDATA)
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ---------- | ---- | ------------------------ | -------------- | --------------------- |
-| access_key | str | APP登录Token | APP方式必要 | |
-| aid | num | 稿件avid | 必要 | |
-| cid | num | 视频cid | 必要 | 用于识别分P |
-| progress | num | 观看进度 | 非必要 | 单位为秒 默认为0 |
-| platform | str | 平台标识 | 非必要 | 可为android |
-| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ------------------------------------------------------------ |
-| code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-记录视频`av13662970`(`cid=126654047`)的观看记录位于`1248`秒
-
-Cookie方式:
-
-```shell
-curl 'http://api.bilibili.com/x/v2/history/report' \
---data-urlencode 'aid=13662970' \
---data-urlencode 'cid=126654047' \
---data-urlencode 'progress=1248' \
---data-urlencode 'platform=android' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-APP方式:
-
-```shell
-curl 'http://api.bilibili.com/x/v2/history/report' \
---data-urlencode 'access_key=xxx' \
---data-urlencode 'aid=13662970' \
---data-urlencode 'cid=126654047' \
---data-urlencode 'progress=1248' \
---data-urlencode 'platform=android'
-```
-
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
-
-## 上报视频播放心跳(web端)
-
-> http://api.bilibili.com/x/click-interface/web/heartbeat
-
-*请求方式:POST*
-
-认证方式:仅可Cookie(SESSDATA)
-
-默认间隔15秒一次
-
-亦可记录播放历史
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ----------- | ---- | ------------------------ | ------------ | ------------------------------------------------------------ |
-| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
-| cid | num | 视频cid | 非必要 | 用于识别分P |
-| epid | num | 番剧epid | 非必要 | |
-| sid | num | 番剧ssid | 非必要 | |
-| mid | num | 当前用户mid | 非必要 | |
-| played_time | num | 视频播放进度 | 非必要 | 单位为秒 默认为0 |
-| realtime | num | 总计播放时间 | 非必要 | 单位为秒 |
-| start_ts | num | 开始播放时刻 | 非必要 | 时间戳 |
-| type | num | 视频类型 | 非必要 | 3:投稿视频 4:剧集 10:课程 |
-| sub_type | num | 剧集副类型 | 非必要 | 当`type=4`时本参数有效 1:番剧 2:电影 3:纪录片 4:国创 5:电视剧 7:综艺 |
-| dt | num | 2 | 非必要 | |
-| play_type | num | 播放动作 | 非必要 | 0:播放中 1:开始播放 2:暂停 3:继续播放 |
-| csrf | str | CSRF Token(位于cookie) | 非必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | --------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-上报一次视频`av2`/`BV1xx411c7mD`的心跳数据
-
-```shell
-curl 'api.bilibili.com/x/click-interface/web/heartbeat' \
---data-urlencode 'aid=2' \
---data-urlencode 'bvid=BV1xx411c7mD' \
---data-urlencode 'cid=62131' \
---data-urlencode 'played_time=60' \
---data-urlencode 'realtime=60' \
---data-urlencode 'start_ts=1592720840' \
---data-urlencode 'type=3' \
---data-urlencode 'dt=2' \
---data-urlencode 'play_type=0' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
diff --git a/video/tags.md b/video/tags.md
deleted file mode 100644
index 4c174c6..0000000
--- a/video/tags.md
+++ /dev/null
@@ -1,316 +0,0 @@
-# 视频TAG
-
-- [获取视频TAG信息](#获取视频TAG信息)
-- [点赞&取消点赞视频TAG](#点赞&取消点赞视频TAG)
-- [点踩&取消点踩视频TAG](#点踩&取消点踩视频TAG)
-
----
-
-## 获取视频TAG信息
-
-> http://api.bilibili.com/x/tag/archive/tags
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | -------- | ------------ | ------------------ |
-| aid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ------ | -------- | ---------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | array | TAG列表 | 无TAG为空 |
-
-`data`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | -------------- | ---- |
-| 0 | obj | 第1个TAG | |
-| n | obj | 第(n+1)个TAG | |
-| …… | obj | …… | …… |
-
-`data`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------- | ---- | -------------- | ------------------------------------------------------------ |
-| tag_id | num | tag_id | |
-| tag_name | str | TAG名称 | |
-| cover | str | TAG图片url | |
-| head_cover | str | TAG页面头图url | |
-| content | str | TAG介绍 | |
-| short_content | str | TAG简介 | |
-| type | num | ??? | |
-| state | num | 0 | |
-| ctime | num | 创建时间 | 时间戳 |
-| count | obj | 状态数 | |
-| is_atten | num | 是否关注 | 0:未关注 1:已关注 需要登录(Cookie) 未登录为0 |
-| likes | num | 0 | 作用尚不明确 |
-| hates | num | 0 | 作用尚不明确 |
-| attribute | num | 0 | 作用尚不明确 |
-| liked | num | 是否已经点赞 | 0:未点赞 1:已点赞 需要登录(Cookie) 未登录为0 |
-| hated | num | 是否已经点踩 | 0:未点踩 1:已点踩 需要登录(Cookie) 未登录为0 |
-| extra_attr | num | ? ? ? | |
-
-`data`数组中的对象中的`count`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ----- | ---- | ------------- | ------------ |
-| view | num | 0 | 作用尚不明确 |
-| use | num | 视频添加TAG数 | |
-| atten | num | TAG关注 | |
-
-**示例:**
-
-查询视频`av89772773`/`BV1M741177Kg`的TAG
-
-avid方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/tag/archive/tags' \
---data-urlencode 'aid=89772773' \
--b 'SESSDATA=xxx'
-```
-
-bvid方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/tag/archive/tags' \
---data-urlencode 'bvid=BV1M741177Kg' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": [{
- "tag_id": 12620189,
- "tag_name": "异度侵入",
- "cover": "",
- "head_cover": "",
- "content": "",
- "short_content": "",
- "type": 1,
- "state": 0,
- "ctime": 1576235749,
- "count": {
- "view": 0,
- "use": 6392,
- "atten": 8938
- },
- "is_atten": 1,
- "likes": 1,
- "hates": 0,
- "attribute": 0,
- "liked": 0,
- "hated": 0
- }, {
- "tag_id": 7520816,
- "tag_name": "bilibili新星计划",
- "cover": "",
- "head_cover": "",
- "content": "",
- "short_content": "",
- "type": 4,
- "state": 0,
- "ctime": 1529717850,
- "count": {
- "view": 0,
- "use": 1967314,
- "atten": 65082
- },
- "is_atten": 0,
- "likes": 0,
- "hates": 0,
- "attribute": 0,
- "liked": 0,
- "hated": 0
- }, {
- "tag_id": 707,
- "tag_name": "ED",
- "cover": "",
- "head_cover": "",
- "content": "",
- "short_content": "",
- "type": 3,
- "state": 0,
- "ctime": 1436866637,
- "count": {
- "view": 0,
- "use": 62646,
- "atten": 75642
- },
- "is_atten": 1,
- "likes": 0,
- "hates": 0,
- "attribute": 0,
- "liked": 0,
- "hated": 0
- }, {
- "tag_id": 1394,
- "tag_name": "动漫",
- "cover": "http://i0.hdslb.com/bfs/tag/d08c5fe17ceb793e7ce95d9c67392743b33b46d0.jpg",
- "head_cover": "",
- "content": " “动漫”是动画和漫画的合称与缩写。在其他语言相当少用。随着现代传媒技术的发展,动画(animation或anime)和漫画(comics,manga;特别是故事性漫画)之间联系日趋紧密,两者常被合而为“动漫”。\n 由于漫画本身的发展形成了现代故事漫画的表现形式,将影视艺术融入漫画之中,使得漫画与动画更容易结合,影视艺术独特的地方在于它能通过镜头的推拉摇移和片段剪辑的蒙太奇技巧来表达想法和感受。漫画正是吸收了影视艺术的这两个特点。当讲述的故事越发复杂、人物越发丰富的时候,传统单线式叙事的方法就越行不通,蒙太奇的介入就成为一种需要了;当漫画家在传统表现手段中无法找到更合适的抒发感情的方法的时候,当读者需要作品有更强的冲击力和表现力的时候,各种镜头的灵活运用就成为一种必需了。一部现代故事漫画往往集远、中、近、特四种镜头于一身,漫画家往往能熟练地运用镜头的移动和各种蒙太奇剪接,对故事特定部分的情绪和氛围进行渲染。这就是现代故事漫画容易和动画结合的一个原因,因为它天生就像动画的分镜头剧本,读者在看漫画时如同在看一部电影。正是有着这样的相似性所以如今将动画和漫画合称为“动漫”。",
- "short_content": "",
- "type": 3,
- "state": 0,
- "ctime": 1436866637,
- "count": {
- "view": 0,
- "use": 1134143,
- "atten": 113030
- },
- "is_atten": 0,
- "likes": 0,
- "hates": 0,
- "attribute": 0,
- "liked": 0,
- "hated": 0
- }, {
- "tag_id": 13289329,
- "tag_name": "异度侵入ed原图",
- "cover": "",
- "head_cover": "",
- "content": "",
- "short_content": "",
- "type": 1,
- "state": 0,
- "ctime": 1581948411,
- "count": {
- "view": 0,
- "use": 3,
- "atten": 0
- },
- "is_atten": 0,
- "likes": 0,
- "hates": 0,
- "attribute": 0,
- "liked": 0,
- "hated": 0
- }]
-}
-```
-
-
-
-## 点赞&取消点赞视频TAG
-
-> http://api.bilibili.com/x/tag/archive/like2
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-重复请求为取消
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------ | ---- |
-| aid | num | 稿件avid | 必要 | |
-| tag_id | num | tag_id | 必要 | |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ---------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-为视频`av89772773`的TAG`12620189`点赞
-
-```shell
-curl 'http://api.bilibili.com/x/tag/archive/like2' \
---data-urlencode 'aid=89772773' \
---data-urlencode 'tag_id=12620189' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
-
-## 点踩&取消点踩视频TAG
-
-> http://api.bilibili.com/x/tag/archive/hate2
-
-*请求方式:POST*
-
-认证方式:Cookie(SESSDATA)
-
-重复访问为取消
-
-**正文参数( application/x-www-form-urlencoded ):**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ------------------------ | ------ | ---- |
-| aid | num | 稿件avid | 必要 | |
-| tag_id | num | tag_id | 必要 | |
-| csrf | str | CSRF Token(位于cookie) | 必要 | |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ---- | -------- | ---------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-
-**示例:**
-
-为视频`av89772773`的TAG`7520816`点踩
-
-```shell
-curl 'http://pi.bilibili.com/x/tag/archive/hate2' \
---data-urlencode 'aid=89772773' \
---data-urlencode 'tag_id=7520816' \
---data-urlencode 'csrf=xxx' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1
-}
-```
-
-
diff --git a/video/video_zone.md b/video/video_zone.md
deleted file mode 100644
index 5657478..0000000
--- a/video/video_zone.md
+++ /dev/null
@@ -1,302 +0,0 @@
-# 视频分区一览
-
-用于通过稿件avid判断所在的分区,或推荐分区视频等.......
-
-亦可用于更深♂入了解B站的分区
-
-## 动画
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| -------------- | --------- | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
-| 动画(主分区) | douga | 1 | | [/v/douga](https://www.bilibili.com/v/douga) |
-| MAD·AMV | mad | 24 | 具有一定制作程度的动画或静画的二次创作视频 | [/v/douga/mad](https://www.bilibili.com/v/douga/mad) |
-| MMD·3D | mmd | 25 | 使用MMD(MikuMikuDance)和其他3D建模类软件制作的视频 | [/v/douga/mmd](https://www.bilibili.com/v/douga/mmd) |
-| 短片·手书·配音 | voice | 47 | 追求创新并具有强烈特色的短片、手书(绘)及ACG相关配音 | [/v/douga/voice](https://www.bilibili.com/v/douga/voice) |
-| 手办·模玩 | garage_kit | 210 | 手办模玩的测评、改造或其他衍生内容 | [/v/douga/garage_kit](https://www.bilibili.com/v/douga/garage_kit) |
-| 特摄 | tokusatsu | 86 | 特摄相关衍生视频 | [/v/douga/tokusatsu](https://www.bilibili.com/v/douga/tokusatsu) |
-| 综合 | other | 27 | 以动画及动画相关内容为素材,包括但不仅限于音频替换、杂谈、排行榜等内容 | [/v/douga/other](https://www.bilibili.com/v/douga/other) |
-
-## 番剧
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| -------------- | ----------- | ---- | -------------------------------------------------- | ------------------------------------------------------------ |
-| 番剧(主分区) | anime | 13 | | [/anime](https://www.bilibili.com/anime) |
-| 连载动画 | serial | 33 | 当季连载的动画番剧 | [/v/anime/serial](https://www.bilibili.com/v/anime/serial) |
-| 完结动画 | finish | 32 | 已完结的动画番剧合集 | [/v/anime/finish](https://www.bilibili.com/v/anime/finish) |
-| 资讯 | information | 51 | 动画番剧相关资讯视频 | [/v/anime/information](https://www.bilibili.com/v/anime/information) |
-| 官方延伸 | offical | 152 | 动画番剧为主题的宣传节目、采访视频,及声优相关视频 | [/v/anime/offical](https://www.bilibili.com/v/anime/offical) |
-
-## 国创
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| -------------- | ----------- | ---- | ----------------- | ------------------------------------------------------------ |
-| 国创(主分区) | guochuang | 167 | | [/guochuang](https://www.bilibili.com/guochuang) |
-| 国产动画 | chinese | 153 | 我国出品的PGC动画 | [/v/guochuang/chinese](https://www.bilibili.com/v/guochuang/chinese) |
-| 国产原创相关 | original | 168 | | [/v/guochuang/original](https://www.bilibili.com/v/guochuang/original) |
-| 布袋戏 | puppetry | 169 | | [/v/guochuang/puppetry](https://www.bilibili.com/v/guochuang/puppetry) |
-| 动态漫·广播剧 | motioncomic | 195 | | [/v/guochuang/motioncomic](https://www.bilibili.com/v/guochuang/motioncomic) |
-| 资讯 | information | 170 | | [/v/guochuang/information](https://www.bilibili.com/v/guochuang/information) |
-
-## 音乐
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| -------------- | ---------- | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
-| 音乐(主分区) | music | 3 | | [/v/music](https://www.bilibili.com/v/music) |
-| 原创音乐 | original | 28 | 个人或团队制作以音乐为主要原创因素的歌曲或纯音乐 | [/v/music/original](https://www.bilibili.com/v/music/original) |
-| 翻唱 | cover | 31 | 一切非官方的人声再演绎歌曲作品 | [/v/music/cover](https://www.bilibili.com/v/music/cover) |
-| VOCALOID·UTAU | vocaloid | 30 | 以雅马哈Vocaloid和UTAU引擎为基础,包含其他调教引擎,运用各类音源进行的歌曲创作内容 | [/v/music/vocaloid](https://www.bilibili.com/v/music/vocaloid) |
-| 电音 | electronic | 194 | 以电子合成器、音乐软体等产生的电子声响制作的音乐 | [/v/music/electronic](https://www.bilibili.com/v/music/electronic) |
-| 演奏 | perform | 59 | 传统或非传统乐器及器材的演奏作品 | [/v/music/perform](https://www.bilibili.com/v/music/perform) |
-| MV | mv | 193 | 音乐录影带,为搭配音乐而拍摄的短片 | [/v/music/mv](https://www.bilibili.com/v/music/mv) |
-| 音乐现场 | live | 29 | 音乐实况表演视频 | [/v/music/live](https://www.bilibili.com/v/music/live) |
-| 音乐综合 | other | 130 | 收录无法定义到其他音乐子分区的音乐视频 | [/v/music/other](https://www.bilibili.com/v/music/other) |
-
-## 舞蹈
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| -------------- | ------- | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
-| 舞蹈(主分区) | dance | 129 | | [/v/dance](https://www.bilibili.com/v/dance) |
-| 宅舞 | otaku | 20 | 与ACG相关的翻跳、原创舞蹈 | [/v/dance/otaku](https://www.bilibili.com/v/dance/otaku) |
-| 街舞 | hiphop | 198 | 收录街舞相关内容,包括赛事现场、舞室作品、个人翻跳、FREESTYLE等 | [/v/dance/hiphop](https://www.bilibili.com/v/dance/hiphop) |
-| 明星舞蹈 | star | 199 | 国内外明星发布的官方舞蹈及其翻跳内容 | [/v/dance/star](https://www.bilibili.com/v/dance/star) |
-| 中国舞 | china | 200 | 传承中国艺术文化的舞蹈内容,包括古典舞、民族民间舞、汉唐舞、古风舞等 | [/v/dance/china](https://www.bilibili.com/v/dance/china) |
-| 舞蹈综合 | three_d | 154 | 收录无法定义到其他舞蹈子分区的舞蹈视频 | [/v/dance/three_d](https://www.bilibili.com/v/dance/three_d) |
-| 舞蹈教程 | demo | 156 | 镜面慢速,动作分解,基础教程等具有教学意义的舞蹈视频 | [/v/dance/demo](https://www.bilibili.com/v/dance/demo) |
-
-## 游戏
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| -------------- | ----------- | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
-| 游戏(主分区) | game | 4 | | [/v/game](https://www.bilibili.com/v/game) |
-| 单机游戏 | stand_alone | 17 | 以所有平台(PC、主机、移动端)的单机或联机游戏为主的视频内容,包括游戏预告、CG、实况解说及相关的评测、杂谈与视频剪辑等 | [/v/game/stand_alone](https://www.bilibili.com/v/game/stand_alone) |
-| 电子竞技 | esports | 171 | 具有高对抗性的电子竞技游戏项目,其相关的赛事、实况、攻略、解说、短剧等视频 | [/v/game/esports](https://www.bilibili.com/v/game/esports) |
-| 手机游戏 | mobile | 172 | 以手机及平板设备为主要平台的游戏,其相关的实况、攻略、解说、短剧、演示等视频 | [/v/game/mobile](https://www.bilibili.com/v/game/mobile) |
-| 网络游戏 | online | 65 | 由网络运营商运营的多人在线游戏,以及电子竞技的相关游戏内容。包括赛事、攻略、实况、解说等相关视频 | [/v/game/online](https://www.bilibili.com/v/game/online) |
-| 桌游棋牌 | board | 173 | 桌游、棋牌、卡牌对战等及其相关电子版游戏的实况、攻略、解说、演示等视频 | [/v/game/board](https://www.bilibili.com/v/game/board) |
-| GMV | gmv | 121 | 由游戏素材制作的MV视频。以游戏内容或CG为主制作的,具有一定创作程度的MV类型的视频 | [/v/game/gmv](https://www.bilibili.com/v/game/gmv) |
-| 音游 | music | 136 | 各个平台上,通过配合音乐与节奏而进行的音乐类游戏视频 | [/v/game/music](https://www.bilibili.com/v/game/music) |
-| Mugen | mugen | 19 | 以Mugen引擎为平台制作、或与Mugen相关的游戏视频 | [/v/game/mugen](https://www.bilibili.com/v/game/mugen) |
-
-## 知识
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| ---------------------------------------------- | ----------------- | ------ | ------------------------------------------------------ | ------------------------------------------------------------ |
-| 知识(主分区) | knowledge | 36 | | [/v/knowledge](https://www.bilibili.com/v/knowledge) |
-| 科学科普 | science | 201 | 回答你的十万个为什么 | [/v/knowledge/science](https://www.bilibili.com/v/knowledge/science) |
-| 社科·法律·心理(~~原社科人文、原趣味科普人文~~) | social_science | 124 | 基于社会科学、法学、心理学展开或个人观点输出的知识视频 | [/v/knowledge/social_science](https://www.bilibili.com/v/knowledge/social_science) |
-| 人文历史 | humanity_history | 228 | 看看古今人物,聊聊历史过往,品品文学典籍 | [/v/knowledge/humanity_history](https://www.bilibili.com/v/knowledge/humanity_history) |
-| 财经商业 | business | 207 | 说金融市场,谈宏观经济,一起畅聊商业故事 | [/v/knowledge/finance](https://www.bilibili.com/v/knowledge/finance) |
-| 校园学习 | campus | 208 | 老师很有趣,同学多人才,我们都爱搞学习 | [/v/knowledge/campus](https://www.bilibili.com/v/knowledge/campus) |
-| 职业职场 | career | 209 | 职场加油站,成为最有料的职场人 | [/v/knowledge/career](https://www.bilibili.com/v/knowledge/career) |
-| 设计·创意 | design | 229 | 天马行空,创意设计,都在这里 | [/v/knowledge/design](https://www.bilibili.com/v/knowledge/design) |
-| 野生技术协会 | skill | 122 | 炫酷技能大集合,是时候展现真正的技术了 | [/v/knowledge/skill](https://www.bilibili.com/v/knowledge/skill) |
-| ~~演讲·公开课~~(已下线) | ~~speech_course~~ | ~~39~~ | ~~涨知识的好地方,给爱学习的你~~ | ~~/v/technology/speech_course~~ |
-| ~~星海~~(已下线) | ~~military~~ | ~~96~~ | ~~军事类内容的圣地~~ | ~~/v/technology/military~~ |
-| ~~机械~~(已下线) | ~~mechanical~~ | ~~98~~ | ~~机械设备展示或制作视频~~ | ~~/v/technology/mechanical~~ |
-
-## 科技(~~原数码分区~~)
-
-旧: 新:
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| -------------------- | ------------------- | ------- | ---------------------------------------------------------- | ------------------------------------------------------------ |
-| 科技(主分区) | tech | 188 | | [/v/tech](https://www.bilibili.com/v/tech) |
-| 数码(~~原手机平板~~) | digital | 95 | 科技数码产品大全,一起来做发烧友 | [/v/tech/digital](https://www.bilibili.com/v/tech/digital) |
-| 软件应用 | application | 230 | 超全软件应用指南 | [/v/tech/application](https://www.bilibili.com/v/tech/application) |
-| 计算机技术 | computer_tech | 231 | 研究分析、教学演示、经验分享......有关计算机技术的都在这里 | [/v/tech/computer_tech](https://www.bilibili.com/v/tech/computer_tech) |
-| 工业·工程·机械 | industry | 232 | 前方高能,机甲重工即将出没 | [/v/tech/industry](https://www.bilibili.com/v/tech/industry) |
-| 极客DIY | diy | 233 | 炫酷技能,极客文化,硬核技巧,准备好你的惊讶 | [/v/tech/diy](https://www.bilibili.com/v/tech/diy) |
-| ~~电脑装机~~(已下线) | ~~pc~~ | ~~189~~ | ~~电脑、笔记本、装机配件、外设和软件教程等相关视频~~ | ~~/v/digital/pc~~ |
-| ~~摄影摄像~~(已下线) | ~~photography~~ | ~~190~~ | ~~摄影摄像器材、拍摄剪辑技巧、拍摄作品分享等相关视频~~ | ~~/v/digital/photography~~ |
-| ~~影音智能~~(已下线) | ~~intelligence_av~~ | ~~191~~ | ~~影音设备、智能产品等相关视频~~ | ~~/v/digital/intelligence_av~~ |
-
-## 运动
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| -------------- | ------------------ | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
-| 运动(主分区) | sports | 234 | | [/v/sports](https://www.bilibili.com/v/sports) |
-| 篮球·足球 | basketballfootball | 235 | 与篮球、足球相关的视频,包括但不限于篮足球赛事、教学、评述、剪辑、剧情等相关内容 | [/v/sports/basketballfootball](https://www.bilibili.com/v/sports/basketballfootball) |
-| 健身 | aerobics | 164 | 与健身相关的视频,包括但不限于瑜伽、CrossFit、健美、力量举、普拉提、街健等相关内容 | [/v/sports/aerobics](https://www.bilibili.com/v/sports/aerobics) |
-| 竞技体育 | athletic | 236 | 与竞技体育相关的视频,包括但不限于乒乓、羽毛球、排球、赛车等竞技项目的赛事、评述、剪辑、剧情等相关内容 | [/v/sports/culture](https://www.bilibili.com/v/sports/culture) |
-| 运动文化 | culture | 237 | 与运动文化相关的视频,包络但不限于球鞋、球衣、球星卡等运动衍生品的分享、解读,体育产业的分析、科普等相关内容 | [/v/sports/culture](https://www.bilibili.com/v/sports/culture) |
-| 运动综合 | comprehensive | 238 | 与运动综合相关的视频,包括但不限于钓鱼、骑行、滑板等日常运动分享、教学、Vlog等相关内容 | [/v/sports/comprehensive](https://www.bilibili.com/v/sports/comprehensive) |
-
-## 汽车
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| -------------- | -------- | ---- | ------------------------------------------------------------ | ---------------------------------------------------------- |
-| 汽车(主分区) | car | 223 | | [/v/car](https://www.bilibili.com/v/car) |
-| 汽车生活 | life | 176 | 分享汽车及出行相关的生活体验类视频 | [/v/car/life](https://www.bilibili.com/v/car/life) |
-| 汽车文化 | culture | 224 | 车迷的精神圣地,包括汽车赛事、品牌历史、汽车改装、经典车型和汽车模型等 | [/v/car/culture](https://www.bilibili.com/v/car/culture) |
-| 汽车极客 | geek | 225 | 汽车硬核达人聚集地,包括DIY造车、专业评测和技术知识分享 | [/v/car/geek](https://www.bilibili.com/v/car/geek) |
-| 智能出行 | smart | 226 | 探索新能源汽车和未来智能出行的前沿阵地 | [/v/car/smart](https://www.bilibili.com/v/car/smart) |
-| 购车攻略 | strategy | 227 | 丰富详实的购车建议和新车体验 | [/v/car/strategy](https://www.bilibili.com/v/car/strategy) |
-
-## 生活
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| -------------------- | -------------- | ------- | ------------------------------------------------ | ------------------------------------------------------------ |
-| 生活(主分区) | life | 160 | | [/v/life](https://www.bilibili.com/v/life) |
-| 搞笑 | funny | 138 | 各种沙雕有趣的搞笑剪辑,挑战,表演,配音等视频 | [/v/life/funny](https://www.bilibili.com/v/life/funny) |
-| 家居房产 | home | 239 | 与买房、装修、居家生活相关的分享 | [/v/life/home](https://www.bilibili.com/v/life/home) |
-| 手工 | handmake | 161 | 手工制品的制作过程或成品展示、教程、测评类视频 | [/v/life/handmake](https://www.bilibili.com/v/life/handmake) |
-| 绘画 | painting | 162 | 绘画过程或绘画教程,以及绘画相关的所有视频 | [/v/life/painting](https://www.bilibili.com/v/life/painting) |
-| 日常 | daily | 21 | 记录日常生活,分享生活故事 | [/v/life/daily](https://www.bilibili.com/v/life/daily) |
-| ~~美食圈~~(重定向) | ~~food~~ | ~~76~~ | ~~美食鉴赏&料理制作教程~~ | ~~/v/life/food~~ |
-| ~~动物圈~~(重定向) | ~~animal~~ | ~~75~~ | ~~萌萌的动物都在这里哦~~ | ~~/v/life/animal~~ |
-| ~~运动~~(重定向) | ~~sports~~ | ~~163~~ | ~~运动相关的记录、教程、装备评测和精彩瞬间剪辑视频~~ | ~~/v/life/sports~~ |
-| ~~汽车~~(重定向) | ~~automobile~~ | ~~176~~ | ~~专业汽车资讯,分享车生活~~ | ~~/v/life/automobile~~ |
-| ~~其他~~(已下线) | ~~other~~ | ~~174~~ | ~~对于分区归属不明的视频进行归纳整合的特定分区~~ | ~~/v/life/other~~ |
-
-## 美食
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| ------------------------------ | ----------- | ---- | -------------------------------- | ------------------------------------------------------------ |
-| 美食(主分区) | food | 211 | | [/v/food](https://www.bilibili.com/v/food) |
-| 美食制作(原[生活]->[美食圈]) | make | 76 | 学做人间美味,展示精湛厨艺 | [/v/food/make](https://www.bilibili.com/v/food/make) |
-| 美食侦探 | detective | 212 | 寻找美味餐厅,发现街头美食 | [/v/food/detective](https://www.bilibili.com/v/food/detective) |
-| 美食测评 | measurement | 213 | 吃货世界,品尝世间美味 | [/v/food/measurement](https://www.bilibili.com/v/food/measurement) |
-| 田园美食 | rural | 214 | 品味乡野美食,寻找山与海的味道 | [/v/food/rural](https://www.bilibili.com/v/food/rural) |
-| 美食记录 | record | 215 | 记录一日三餐,给生活添一点幸福感 | [/v/food/record](https://www.bilibili.com/v/food/record) |
-
-## 动物圈
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| -------- | ---------------- | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
-| 动物圈 | animal(主分区) | 217 | | [/v/animal](https://www.bilibili.com/v/animal) |
-| 喵星人 | cat | 218 | 喵喵喵喵喵 | [/v/animal/cat](https://www.bilibili.com/v/animal/cat) |
-| 汪星人 | dog | 219 | 汪汪汪汪汪 | [/v/animal/dog](https://www.bilibili.com/v/animal/dog) |
-| 大熊猫 | panda | 220 | 芝麻汤圆营业中 | [/v/animal/panda](https://www.bilibili.com/v/animal/panda) |
-| 野生动物 | wild_animal | 221 | 内有“猛兽”出没 | [/v/animal/wild_animal](https://www.bilibili.com/v/animal/wild_animal) |
-| 爬宠 | reptiles | 222 | 鳞甲有灵 | [/v/animal/reptiles](https://www.bilibili.com/v/animal/reptiles) |
-| 动物综合 | animal_composite | 75 | 收录除上述子分区外,其余动物相关视频以及非动物主体或多个动物主体的动物相关延伸内容 | [/v/animal/animal_composite](https://www.bilibili.com/v/animal/animal_composite) |
-
-## 鬼畜
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| -------------- | --------------- | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
-| 鬼畜(主分区) | kichiku | 119 | | [/v/kichiku](https://www.bilibili.com/v/kichiku) |
-| 鬼畜调教 | guide | 22 | 使用素材在音频、画面上做一定处理,达到与BGM一定的同步感 | [/v/kichiku/guide](https://www.bilibili.com/v/kichiku/guide) |
-| 音MAD | mad | 26 | 使用素材音频进行一定的二次创作来达到还原原曲的非商业性质稿件 | [/v/kichiku/mad/v/kichiku/mad](https://www.bilibili.com/v/kichiku/mad) |
-| 人力VOCALOID | manual_vocaloid | 126 | 将人物或者角色的无伴奏素材进行人工调音,使其就像VOCALOID一样歌唱的技术 | [/v/kichiku/manual_vocaloid](https://www.bilibili.com/v/kichiku/manual_vocaloid) |
-| 鬼畜剧场 | theatre | 216 | 使用素材进行人工剪辑编排的有剧情的作品 | [/v/kichiku/theatre](https://www.bilibili.com/v/kichiku/theatre) |
-| 教程演示 | course | 127 | 鬼畜相关的教程演示 | [/v/kichiku/course](https://www.bilibili.com/v/kichiku/course) |
-
-## 时尚
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| ------------------------------ | ------------ | ------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
-| 时尚(主分区) | fashion | 155 | | [/v/fashion](https://www.bilibili.com/v/fashion) |
-| 美妆 | makeup | 157 | 涵盖妆容、发型、美甲等教程,彩妆、护肤相关产品测评、分享等 | [/v/fashion/makeup](https://www.bilibili.com/v/fashion/makeup) |
-| 服饰 | clothing | 158 | 服饰风格、搭配技巧相关的展示和教程视频 | [/v/fashion/clothing](https://www.bilibili.com/v/fashion/clothing) |
-| ~~健身~~(重定向) | ~~aerobics~~ | ~~164~~ | ~~器械、有氧、拉伸运动等,以达到强身健体、减肥瘦身、形体塑造目的~~ | ~~/v/fashion/aerobics~~ |
-| T台 | catwalk | 159 | 发布会走秀现场及模特相关时尚片、采访、后台花絮 | [/v/fashion/catwalk](https://www.bilibili.com/v/fashion/catwalk) |
-| 风尚标 | trends | 192 | 时尚明星专访、街拍、时尚购物相关知识科普 | [/v/fashion/trends](https://www.bilibili.com/v/fashion/trends) |
-
-## 资讯
-
-**注:该分区无排名功能**
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| -------------- | ----------- | ---- | -------------------------------------------- | ------------------------------------------------------------ |
-| 资讯(主分区) | information | 202 | | [/v/information](https://www.bilibili.com/v/information) |
-| 热点 | hotspot | 203 | 全民关注的时政热门资讯 | [/v/information/hotspot](https://www.bilibili.com/v/information/hotspot) |
-| 环球 | global | 204 | 全球范围内发生的具有重大影响力的事件动态 | [/v/information/global](https://www.bilibili.com/v/information/global) |
-| 社会 | social | 205 | 日常生活的社会事件、社会问题、社会风貌的报道 | [/v/information/social](https://www.bilibili.com/v/information/social) |
-| 综合 | multiple | 206 | 除上述领域外其它垂直领域的综合资讯 | [/v/information/multiple](https://www.bilibili.com/v/information/multiple) |
-
-## ~~广告~~(已下线)
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| ------------------ | ------ | ------- | ---- | ------------ |
-| ~~广告(主分区)~~ | ~~ad~~ | ~~165~~ | | ~~/v/ad~~ |
-| ~~广告~~(已下线) | ~~ad~~ | ~~166~~ | | ~~/v/ad/ad~~ |
-
-## 娱乐
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| ----------------------- | --------- | ------- | ----------------------------------- | -------------------------------------------------------- |
-| 娱乐(主分区) | ent | 5 | | [/v/ent](https://www.bilibili.com/v/ent) |
-| 综艺 | variety | 71 | 国内外有趣的综艺和综艺相关精彩剪辑 | [/v/ent/variety](https://www.bilibili.com/v/ent/variety) |
-| 明星 | star | 137 | 娱乐圈动态、明星资讯相关 | [/v/ent/star](https://www.bilibili.com/v/ent/star) |
-| ~~Korea相关~~(已下线) | ~~korea~~ | ~~131~~ | ~~Korea相关音乐、舞蹈、综艺等视频~~ | ~~/v/ent/korea~~ |
-
-## 影视
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| -------------- | ------------ | ---- | -------------------------------- | ------------------------------------------------------------ |
-| 影视(主分区) | cinephile | 181 | | [/v/cinephile](https://www.bilibili.com/v/cinephile) |
-| 影视杂谈 | cinecism | 182 | 影视评论、解说、吐槽、科普等 | [/v/cinephile/cinecism](https://www.bilibili.com/v/cinephile/cinecism) |
-| 影视剪辑 | montage | 183 | 对影视素材进行剪辑再创作的视频 | [/v/cinephile/montage](https://www.bilibili.com/v/cinephile/montage) |
-| 短片 | shortfilm | 85 | 追求自我表达且具有特色的短片 | [/v/cinephile/shortfilm](https://www.bilibili.com/v/cinephile/shortfilm) |
-| 预告·资讯 | trailer_info | 184 | 影视类相关资讯,预告,花絮等视频 | [/v/cinephile/trailer_info](https://www.bilibili.com/v/cinephile/trailer_info) |
-
-## 纪录片
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| ---------------- | ----------- | ---- | ---- | ------------------------------------------------------------ |
-| 纪录片(主分区) | documentary | 177 | | [/documentary](https://www.bilibili.com/documentary) |
-| 人文·历史 | history | 37 | | [/v/documentary/history](https://www.bilibili.com/v/documentary/history) |
-| 科学·探索·自然 | science | 178 | | [/v/documentary/science](https://www.bilibili.com/v/documentary/science) |
-| 军事 | military | 179 | | [/v/documentary/military](https://www.bilibili.com/v/documentary/military) |
-| 社会·美食·旅行 | travel | 180 | | [/v/documentary/travel](https://www.bilibili.com/v/documentary/travel) |
-
-## 电影
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| -------------- | ------- | ---- | ---- | ------------------------------------------------------------ |
-| 电影(主分区) | movie | 23 | | [/movie](https://www.bilibili.com/movie) |
-| 华语电影 | chinese | 147 | | [/v/movie/chinese](https://www.bilibili.com/v/movie/chinese) |
-| 欧美电影 | west | 145 | | [/v/movie/west](https://www.bilibili.com/v/movie/west) |
-| 日本电影 | japan | 146 | | [/v/movie/japan](https://www.bilibili.com/v/movie/japan) |
-| 其他国家 | movie | 83 | | [/v/movie/movie](https://www.bilibili.com/v/movie/movie) |
-
-## 电视剧
-
-
-
-| 名称 | 代号 | tid | 简介 | url路由 |
-| ---------------- | -------- | ---- | ---- | -------------------------------------------------------- |
-| 电视剧(主分区) | tv | 11 | | [/tv](https://www.bilibili.com/tv) |
-| 国产剧 | mainland | 185 | | [/v/tv/mainland](https://www.bilibili.com/v/tv/mainland) |
-| 海外剧 | overseas | 187 | | [/v/tv/overseas](https://www.bilibili.com/v/tv/overseas) |
diff --git a/video/videostream_url.md b/video/videostream_url.md
deleted file mode 100644
index c181265..0000000
--- a/video/videostream_url.md
+++ /dev/null
@@ -1,1106 +0,0 @@
-# 视频流URL
-
-
-
-B站的视频为http流媒体,需要对应的api以视频id获取取流url,并进行取流
-
-- [qn视频清晰度标识](#qn视频清晰度标识)
-- [fnver视频流版本标识](#fnver视频流版本标识)
-- [fnval视频流格式标识](#fnval视频流格式标识)
-- [视频伴音音质代码](#视频伴音音质代码)
-- [获取视频流URL(web端)](#获取视频流URL(web端))
-- [视频的取流(web端及APP端)](#视频的取流(web端及APP端))
-
----
-
-## qn视频清晰度标识
-
-**注:该值在dash模式且非下载模式时无效**
-
-| 值 | 含义 | 备注 |
-| ---- | -------------- | ------------------------------------------------------------ |
-| 6 | 240P 极速 | 仅mp4方式支持 |
-| 16 | 360P 流畅 | |
-| 32 | 480P 清晰 | |
-| 64 | 720P 高清 | web端默认值 B站前端需要登录才能选择,但是直接发送请求可以不登录就拿到720P的取流地址 **无720P时则为720P60** |
-| 74 | 720P60 高帧率 | 需要认证登录账号 |
-| 80 | 1080P 高清 | TV端与APP端默认值 需要认证登录账号 |
-| 112 | 1080P+ 高码率 | 大多情况需求认证大会员账号 |
-| 116 | 1080P60 高帧率 | 大多情况需求认证大会员账号 |
-| 120 | 4K 超清 | 需要`fnver&128=128`且`fourk=1` 大多情况需求认证大会员账号 |
-| 125 | HDR 真彩色 | 仅支持dash方式 需要`fnver&64=64` 大多情况需求认证大会员账号 |
-| 126 | 杜比视界 | 仅支持dash方式 需要`fnver&512=512` 大多情况需求认证大会员账号 |
-| 127 | 8K 超高清 | 仅支持dash方式 需要`fnver&1024=1024` 大多情况需求认证大会员账号 |
-
-例如:请求1080P+的视频,则`qn=112`
-
-## fnver视频流版本标识
-
-目前该值恒为0,即`fnver=0`
-
-## fnval视频流格式标识
-
-该代码为二进制属性位,如需组合功能需要使用`OR`运算结合一下数值
-
-| 值 | 含义 | 备注 |
-| ---- | ------------------ | ------------------------------------------------------------ |
-| 0 | flv格式 | 仅H.264编码 部分老视频存在分段现象 与mp4格式及dash格式互斥 |
-| 1 | mp4格式 | 仅H.264编码 不存在视频分段 与flv格式及dash格式互斥 |
-| 16 | dash格式 | H.264编码或H.265编码 部分老视频的清晰度上限低于flv格式 与mp4格式及flv格式互斥 |
-| 64 | 是否需求 HDR 视频 | 必须为dash格式 需要`qn=125` 大多情况需求认证大会员账号 |
-| 128 | 是否需求 4K 分辨率 | 该值与`fourk`字段协同作用 需要`qn=120` 大多情况需求认证大会员账号 |
-| 256 | 是否需求杜比音频 | 必须为dash格式 大多情况需求认证大会员账号 |
-| 512 | 是否需求杜比视界 | 必须为dash格式 大多情况需求认证大会员账号 |
-| 1024 | 是否需求 8K 分辨率 | 必须为dash格式 需要`qn=127` 大多情况需求认证大会员账号 |
-| 2048 | 是否需求 av1 编码 | 必须为dash格式 |
-
-例如:请求dash格式且需要HDR的视频流,则`fnval=16|64=80`
-
-## 视频伴音音质代码
-
-| 值 | 含义 |
-| ----- | ---- |
-| 30216 | 64K |
-| 30232 | 132K |
-| 30280 | 192K |
-
-## 获取视频流URL(web端)
-
-> http://api.bilibili.com/x/player/playurl
-
-*请求方式:GET*
-
-认证方式:Cookie(SESSDATA)
-
----
-
-关于视频流会员鉴权:
-
-- 获取720P及以上清晰度视频时需要登录(Cookie)
-
-- 获取高帧率(1080P60)/高码率(1080P+)视频时需要有大会员的账号登录(Cookie)
-
-- 获取会员专属视频时需要登录(Cookie)
-
----
-
-获取的url有效时间为120min,超时失效需要重新获取
-
-**部分视频**会有**分段**,需要特别注意
-
-若视频有分P,仅为单P的视频的url,换P则需更换cid重新获取
-
-**url参数:**
-
-| 参数名 | 类型 | 内容 | 必要性 | 备注 |
-| ------ | ---- | ---------------- | ------------ | ------------------------------------------------------------ |
-| avid | num | 稿件avid | 必要(可选) | avid与bvid任选一个 |
-| bvid | str | 稿件bvid | 必要(可选) | avid与bvid任选一个 |
-| cid | num | 视频cid | 必要 | |
-| qn | num | 视频清晰度选择 | 非必要 | 未登录默认32(480P) 登录默认64(720P) **值含义见上表** 注:dash方式无效 |
-| fnval | num | 视频获取方式选择 | 非必要 | 默认为0 0 2:flv方式(可能会有分段) 1:低清mp4方式(仅240P与360P,且限速65K/s) 16 80:dash方式(音视频分流,支持H.265) |
-| fnver | num | 0 | 非必要 | 固定为0 |
-| fourk | num | 是否允许4K视频 | 非必要 | 默认为0 画质最高1080P:0 画质最高4K:1 |
-
-**json回复:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------- | ----------------------------- | -------- | ---------------------------------------------- |
-| code | num | 返回值 | 0:成功 -400:请求错误 -404:无视频 |
-| message | str | 错误信息 | 默认为0 |
-| ttl | num | 1 | |
-| data | 有效时:obj 无效时:null | 数据本体 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ------------------ | ------ | ------------------------ | ---------------------------------------- |
-| from | str | local | 作用尚不明确 |
-| result | str | suee | 作用尚不明确 |
-| message | str | 空 | 作用尚不明确 |
-| quality | num | 当前的视频分辨率代码 | **值含义见上表** |
-| format | str | 视频格式 | |
-| timelength | num | 视频长度 | 单位为毫秒 不同分辨率/格式可能有略微差异 |
-| accept_format | str | 视频支持的全部格式 | 每项用`,`分隔 |
-| accept_description | array | 视频支持的分辨率列表 | |
-| accept_quality | array | 视频支持的分辨率代码列表 | **值含义见上表** |
-| video_codecid | num | 7 | 作用尚不明确 |
-| seek_param | str | start | 作用尚不明确 |
-| seek_type | str | ??? | 作用尚不明确 |
-| durl | array | 视频分段 | **注:仅flv/mp4存在此项** |
-| dash | obj | dash音视频流信息 | **注:仅dash存在此项** |
-
-`data`中的`accept_description`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | ---- |
-| 0 | str | 分辨率名称1 | |
-| n | str | 分辨率名称(n+1) | |
-| …… | str | …… | |
-
-`data`中的`accept_quality`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | --------------- | ---- |
-| 0 | str | 分辨率代码1 | |
-| n | str | 分辨率代码(n+1) | |
-| …… | str | …… | |
-
----
-
-**flv/mp4方式:**
-
-`data`中的`durl`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ----------------- | ------------------------- |
-| 0 | obj | 视频分段1信息 | **注:仅flv方式具有分段** |
-| n | obj | 视频分段(n+1)信息 | |
-| …… | obj | …… | |
-
-`durl`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---------- | ------ | ------------ | ---------------------------------- |
-| order | num | 视频分段序号 | 某些视频会分为多个片段(从1顺序增长) |
-| length | num | 视频长度 | 单位为毫秒 |
-| size | num | 视频大小 | 单位为Byte |
-| ahead | str | 空 | 作用尚不明确 |
-| vhead | str | 空 | 作用尚不明确 |
-| url | str | 视频流url | **注:url内容存在转义符** 有效时间为120min |
-| backup_url | array | 备用视频流 | |
-
-`durl`数组中的对象中的`backup_url`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------------- | ----------------------------------------------- |
-| 0 | str | 备用视频流url 1 | **注:url内容存在转义符** 有效时间为120min |
-| n | str | 备用视频流url (n+1) | |
-| …… | str | …… | |
-
-**示例:**
-
-**视频无分段时:**
-
-获取视频`av99999999`/`BV1y7411Q7Eq`中的1P(cid=`171776208`)的视频流url,清晰度为1080P+,使用flv方式获取
-
-avid方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/player/playurl' \
---data-urlencode 'avid=99999999' \
---data-urlencode 'cid=171776208' \
---data-urlencode 'qn=112' \
---data-urlencode 'fnval=0' \
---data-urlencode 'fnver=0' \
---data-urlencode 'fourk=1' \
--b 'SESSDATA=xxx'
-```
-
- bvid方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/player/playurl' \
---data-urlencode 'bvid=BV1y7411Q7Eq' \
---data-urlencode 'cid=171776208' \
---data-urlencode 'qn=112' \
---data-urlencode 'fnval=0' \
---data-urlencode 'fnver=0' \
---data-urlencode 'fourk=1' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "from": "local",
- "result": "suee",
- "message": "",
- "quality": 112,
- "format": "hdflv2",
- "timelength": 283701,
- "accept_format": "hdflv2,flv,flv720,flv480,mp4",
- "accept_description": [
- "高清 1080P+",
- "高清 1080P",
- "高清 720P",
- "清晰 480P",
- "流畅 360P"
- ],
- "accept_quality": [
- 112,
- 80,
- 64,
- 32,
- 16
- ],
- "video_codecid": 7,
- "seek_param": "start",
- "seek_type": "offset",
- "durl": [
- {
- "order": 1,
- "length": 283701,
- "size": 219827828,
- "ahead": "",
- "vhead": "",
- "url": "http://upos-sz-mirrorhw.bilivideo.com/upgcxcode/08/62/171776208/171776208-1-112.flv?e=ig8euxZM2rNcNbhMnwhVhwdlhzK3hzdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1589565412&gen=playurl&os=hwbv&oi=606631998&trid=e0fa5f9a7610440a871279a28fae85aau&platform=pc&upsig=5f469cb4c190ed54b89bd40cc37eddff&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=80000000",
- "backup_url": [
- "http://upos-sz-mirrorks3c.bilivideo.com/upgcxcode/08/62/171776208/171776208-1-112.flv?e=ig8euxZM2rNcNbhMnwhVhwdlhzK3hzdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1589565412&gen=playurl&os=ks3cbv&oi=606631998&trid=e0fa5f9a7610440a871279a28fae85aau&platform=pc&upsig=914ef921c5258e067c382601a4b1f81c&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=40000000"
- ]
- }
- ]
- }
-}
-```
-
-
-
-**视频有分段时:**
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "from": "local",
- "result": "suee",
- "message": "",
- "quality": 16,
- "format": "flv360",
- "timelength": 1437918,
- "accept_format": "flv,flv720,flv480,flv360",
- "accept_description": [
- "高清 1080P",
- "高清 720P",
- "清晰 480P",
- "流畅 360P"
- ],
- "accept_quality": [
- 80,
- 64,
- 32,
- 16
- ],
- "video_codecid": 7,
- "seek_param": "start",
- "seek_type": "offset",
- "durl": [
- {
- "order": 1,
- "length": 364417,
- "size": 23018310,
- "ahead": "",
- "vhead": "",
- "url": "http://upos-sz-mirrorhw.bilivideo.com/upgcxcode/98/24/872498/872498-1-15.flv?e=ig8euxZM2rNcNbRB7zUVhoM17WuBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=hwbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=f99db2dc9b8c65c245515b29b9ca8b16&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=80000000",
- "backup_url": [
- "http://upos-sz-mirrorks3c.bilivideo.com/upgcxcode/98/24/872498/872498-1-15.flv?e=ig8euxZM2rNcNbRB7zUVhoM17WuBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=ks3cbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=74d0d62697364346f88d9c39430ce23c&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=40000000"
- ]
- },
- {
- "order": 2,
- "length": 364395,
- "size": 23694756,
- "ahead": "",
- "vhead": "",
- "url": "http://upos-sz-mirrorcos.bilivideo.com/upgcxcode/98/24/872498/872498-2-15.flv?e=ig8euxZM2rNcNbRjhbUVhoM17bNBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=cosbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=308c87c55f3325bdaac2a3e8632948ee&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=80000000",
- "backup_url": [
- "http://upos-sz-mirrorks3c.bilivideo.com/upgcxcode/98/24/872498/872498-2-15.flv?e=ig8euxZM2rNcNbRjhbUVhoM17bNBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=ks3cbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=eb8f043e0f36f82ab9c62fd002143438&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=40000000"
- ]
- },
- {
- "order": 3,
- "length": 352333,
- "size": 22835734,
- "ahead": "",
- "vhead": "",
- "url": "http://upos-sz-mirrorhw.bilivideo.com/upgcxcode/98/24/872498/872498-3-15.flv?e=ig8euxZM2rNcNbRjhwdVhoM17bdVhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=hwbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=2685b7649f4bb6eb90f986f125432d78&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=80000000",
- "backup_url": [
- "http://upos-sz-mirrorks3c.bilivideo.com/upgcxcode/98/24/872498/872498-3-15.flv?e=ig8euxZM2rNcNbRjhwdVhoM17bdVhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=ks3cbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=922543bfb26184f901187bf9c39c69b2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=40000000"
- ]
- },
- {
- "order": 4,
- "length": 356773,
- "size": 23466279,
- "ahead": "",
- "vhead": "",
- "url": "http://upos-sz-mirrorkodo.bilivideo.com/upgcxcode/98/24/872498/872498-4-15.flv?e=ig8euxZM2rNcNbRjhbUVhoM17bNBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=kodobv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=9d29707faf012797ef2b6de21523fcf2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=80000000",
- "backup_url": [
- "http://upos-sz-mirrorks3c.bilivideo.com/upgcxcode/98/24/872498/872498-4-15.flv?e=ig8euxZM2rNcNbRjhbUVhoM17bNBhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNo8g2ENvNo8i8o859r1qXg8xNEVE5XREto8GuFGv2U7SuxI72X6fTr859r1qXg8gNEVE5XREto8z5JZC2X2gkX5L5F1eTX1jkXlsTXHeux_f2o859IB_&uipk=5&nbs=1&deadline=1589874109&gen=playurl&os=ks3cbv&oi=1965551630&trid=ceac015d41e04a7b90ec972db710524fu&platform=pc&upsig=9ad4524d31c8d9695ae07b400b73ed29&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=40000000"
- ]
- }
- ]
- }
-}
-```
-
-
-
----
-
-**dash方式:**
-
-`data`中的`dash`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| --------------- | ----- | ---------- | ------------ |
-| duration | num | 677 | 作用尚不明确 |
-| minBufferTime | num | 1.5 | 作用尚不明确 |
-| min_buffer_time | num | 1.5 | 作用尚不明确 |
-| video | array | 视频流信息 | |
-| audio | array | 音频流信息 | |
-
-`dash`中的`video`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---------------------- | ---- |
-| 0 | obj | 清晰度1 H.264编码 | |
-| 1 | obj | 清晰度1 H.265编码 | **注:HDR仅支持H.265。** |
-| n | obj | 清晰度n H.264编码 | |
-| n+1 | obj | 清晰度 (n-1) H.265编码 | |
-| …… | obj | …… | |
-
-`dash`中的`audio`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------- | ---- |
-| 0 | obj | 清晰度1 | |
-| n | obj | 清晰度(n+1) | |
-| …… | obj | …… | |
-
-`video`及`audio`数组中的对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------------- | ----- | --------------------- | ----------------------------------------------- |
-| id | num | 音视频清晰度代码 | **见上表** |
-| baseUrl | str | 默认视频/音频流url | **注:url内容存在转义符** 有效时间为120min |
-| base_url | str | **同上** | |
-| backupUrl | array | 备用视频/音频流url | |
-| backup_url | array | **同上** | |
-| bandwidth | num | 视频/音频所需最低带宽 | |
-| mimeType | str | 视频/音频格式类型 | |
-| mime_type | str | **同上** | |
-| codecs | str | 编码/音频类型 | |
-| width | num | 视频宽度 | 单位为像素 仅视频有效 |
-| height | num | 视频高度 | 单位为像素 仅视频有效 |
-| frameRate | str | 视频帧率 | 仅视频有效 |
-| frame_rate | str | **同上** | |
-| sar | str | 1:1 | Sample Aspect Ratio,单个像素的宽高比 |
-| startWithSap | num | 1 | Stream Access Point |
-| start_with_sap | num | **同上** | |
-| SegmentBase | obj | 见下表 | url 对应 m4s 文件中,头部的位置 |
-| segment_base | obj | **同上** | |
-| codecid | num | 视频: 7或12 音频: 0 | 7=AVC,12=HEVC 出处是 FLV 格式里 VideoTag 中的 CodecId 域; FLV 标准不支持 HEVC,但 codecId 值为 12 是各厂共识 |
-
-`video`数组中的对象中的`backup_url`数组:
-
-| 项 | 类型 | 内容 | 备注 |
-| ---- | ---- | ------------------------ | ----------------------------------------------- |
-| 0 | str | 备用视频/音频流url 1 | **注:url内容存在转义符** 有效时间为120min |
-| n | str | 备用视频/音频流url (n+1) | |
-| …… | str | …… | |
-
-`video`数组中的对象中的`SegmentBase`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| -------------- | ---- | --------------------------------------------- | ------------------------------------------------------------ |
-| initialization | str | \-\ 如:0-821 | ftyp (file type) box 加上 moov box 在 m4s 文件中的范围(单位为 bytes) 如 0-821 表示开头 820 个字节 |
-| index_range | str | \-\ 如:822-1309 | sidx (segment index) box 在 m4s 文件中的范围(单位为 bytes) sidx 的核心是一个数组,记录了各关键帧的时间戳及其在文件中的位置, 其作用是索引 (拖进度条) |
-
-> 常规 MP4 文件的索引信息放在 moov box 中,其中包含每一帧 (不止是关键帧) 的一些信息。在 DASH 方式下,关键帧信息移到了 sidx box 里,其他的则分散到了各个 moof (movie fragment) box 中。 对这里的文件结构感兴趣的,可以参考标准文档 ISO/IEC 14496-12,如果不想那么深入的话可以百度「MP4 文件结构」。
-
-
-**示例:**
-
-获取视频`av969628065`/`BV1rp4y1e745`中的1P(cid=`244954665`)的视频流url,使用dash方式获取
-
-avid方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/player/playurl' \
---data-urlencode 'avid=969628065' \
---data-urlencode 'cid=244954665' \
---data-urlencode 'qn=0' \
---data-urlencode 'fnval=80' \
---data-urlencode 'fnver=0' \
---data-urlencode 'fourk=1' \
--b 'SESSDATA=xxx'
-```
-
- bvid方式:
-
-```shell
-curl -G 'http://api.bilibili.com/x/player/playurl' \
---data-urlencode 'bvid=BV1rp4y1e745' \
---data-urlencode 'cid=244954665' \
---data-urlencode 'qn=0' \
---data-urlencode 'fnval=80' \
---data-urlencode 'fnver=0' \
---data-urlencode 'fourk=1' \
--b 'SESSDATA=xxx'
-```
-
-
-查看响应示例:
-
-```json
-{
- "code": 0,
- "message": "0",
- "ttl": 1,
- "data": {
- "from": "local",
- "result": "suee",
- "message": "",
- "quality": 64,
- "format": "flv720_p60",
- "timelength": 346410,
- "accept_format": "hdflv2,hdflv2,flv_p60,flv,flv720_p60,flv480,mp4",
- "accept_description": [
- "真彩 HDR",
- "超清 4K",
- "高清 1080P60",
- "高清 1080P",
- "高清 720P60",
- "清晰 480P",
- "流畅 360P"
- ],
- "accept_quality": [
- 125,
- 120,
- 116,
- 80,
- 64,
- 32,
- 16
- ],
- "video_codecid": 7,
- "seek_param": "start",
- "seek_type": "offset",
- "dash": {
- "duration": 347,
- "minBufferTime": 1.5,
- "min_buffer_time": 1.5,
- "video": [
- {
- "id": 125,
- "baseUrl": "http://cn-hbyc3-dx-v-03.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30125.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=688e42ac8ee0d5fcc0bfccee56070185&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3603&mid=5087321&orderid=0,3&agrr=0&logo=80000000",
- "base_url": "http://cn-hbyc3-dx-v-03.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30125.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=688e42ac8ee0d5fcc0bfccee56070185&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3603&mid=5087321&orderid=0,3&agrr=0&logo=80000000",
- "backupUrl": [
- "http://cn-hbxy-dx-v-04.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30125.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=688e42ac8ee0d5fcc0bfccee56070185&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3263&mid=5087321&orderid=1,3&agrr=0&logo=40000000",
- "http://cn-jxjj-dx-v-03.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30125.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=688e42ac8ee0d5fcc0bfccee56070185&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=4263&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "backup_url": [
- "http://cn-hbxy-dx-v-04.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30125.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=688e42ac8ee0d5fcc0bfccee56070185&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3263&mid=5087321&orderid=1,3&agrr=0&logo=40000000",
- "http://cn-jxjj-dx-v-03.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30125.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=688e42ac8ee0d5fcc0bfccee56070185&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=4263&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "bandwidth": 13799375,
- "mimeType": "video/mp4",
- "mime_type": "video/mp4",
- "codecs": "hev1.2.4.L156.90",
- "width": 3840,
- "height": 1920,
- "frameRate": "125",
- "frame_rate": "125",
- "sar": "1:1",
- "startWithSap": 1,
- "start_with_sap": 1,
- "SegmentBase": {
- "Initialization": "0-1066",
- "indexRange": "1067-1926"
- },
- "segment_base": {
- "initialization": "0-1066",
- "index_range": "1067-1926"
- },
- "codecid": 12
- },
- {
- "id": 120,
- "baseUrl": "http://cn-hbyc3-dx-v-10.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30120.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=85c32836fb30bfc64e6157c8d490889f&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3612&mid=5087321&orderid=0,3&agrr=0&logo=80000000",
- "base_url": "http://cn-hbyc3-dx-v-10.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30120.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=85c32836fb30bfc64e6157c8d490889f&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3612&mid=5087321&orderid=0,3&agrr=0&logo=80000000",
- "backupUrl": [
- "http://cn-hbxy-dx-v-02.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30120.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=85c32836fb30bfc64e6157c8d490889f&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3261&mid=5087321&orderid=1,3&agrr=0&logo=40000000",
- "http://cn-jxjj-dx-v-09.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30120.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=85c32836fb30bfc64e6157c8d490889f&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=9620&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "backup_url": [
- "http://cn-hbxy-dx-v-02.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30120.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=85c32836fb30bfc64e6157c8d490889f&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3261&mid=5087321&orderid=1,3&agrr=0&logo=40000000",
- "http://cn-jxjj-dx-v-09.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30120.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=85c32836fb30bfc64e6157c8d490889f&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=9620&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "bandwidth": 16974415,
- "mimeType": "video/mp4",
- "mime_type": "video/mp4",
- "codecs": "avc1.640034",
- "width": 3840,
- "height": 1920,
- "frameRate": "16000/144",
- "frame_rate": "16000/144",
- "sar": "1:1",
- "startWithSap": 1,
- "start_with_sap": 1,
- "SegmentBase": {
- "Initialization": "0-995",
- "indexRange": "996-1855"
- },
- "segment_base": {
- "initialization": "0-995",
- "index_range": "996-1855"
- },
- "codecid": 7
- },
- {
- "id": 120,
- "baseUrl": "http://cn-hbxy-dx-v-05.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30121.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=b3b30e93881df90737b9a441ea1aeeb2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3264&mid=5087321&orderid=0,3&agrr=0&logo=80000000",
- "base_url": "http://cn-hbxy-dx-v-05.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30121.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=b3b30e93881df90737b9a441ea1aeeb2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3264&mid=5087321&orderid=0,3&agrr=0&logo=80000000",
- "backupUrl": [
- "http://cn-jxjj-dx-v-02.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30121.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=b3b30e93881df90737b9a441ea1aeeb2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=4262&mid=5087321&orderid=1,3&agrr=0&logo=40000000",
- "http://upos-sz-mirrorkodo.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30121.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=kodobv&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=64ad9849e06e98714b86dbb20e3e5fee&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "backup_url": [
- "http://cn-jxjj-dx-v-02.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30121.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=b3b30e93881df90737b9a441ea1aeeb2&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=4262&mid=5087321&orderid=1,3&agrr=0&logo=40000000",
- "http://upos-sz-mirrorkodo.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30121.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=kodobv&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=64ad9849e06e98714b86dbb20e3e5fee&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "bandwidth": 10247697,
- "mimeType": "video/mp4",
- "mime_type": "video/mp4",
- "codecs": "hev1.1.6.L156.90",
- "width": 3840,
- "height": 1920,
- "frameRate": "16000/144",
- "frame_rate": "16000/144",
- "sar": "1:1",
- "startWithSap": 1,
- "start_with_sap": 1,
- "SegmentBase": {
- "Initialization": "0-1057",
- "indexRange": "1058-1917"
- },
- "segment_base": {
- "initialization": "0-1057",
- "index_range": "1058-1917"
- },
- "codecid": 12
- },
- {
- "id": 116,
- "baseUrl": "http://xy182x87x189x128xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30116.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=d5bec6f8aa00449a0b83fd301c0c37e9&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=2000120&mid=5087321&orderid=0,3&agrr=0&logo=A0000002",
- "base_url": "http://xy182x87x189x128xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30116.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=d5bec6f8aa00449a0b83fd301c0c37e9&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=2000120&mid=5087321&orderid=0,3&agrr=0&logo=A0000002",
- "backupUrl": [
- "http://xy110x85x55x73xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30116.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=d5bec6f8aa00449a0b83fd301c0c37e9&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=11000009&mid=5087321&orderid=1,3&agrr=0&logo=60000400",
- "http://cn-hbyc3-dx-v-10.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30116.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=8d788fd06d046a87c34adcc316d5e821&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3612&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "backup_url": [
- "http://xy110x85x55x73xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30116.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=d5bec6f8aa00449a0b83fd301c0c37e9&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=11000009&mid=5087321&orderid=1,3&agrr=0&logo=60000400",
- "http://cn-hbyc3-dx-v-10.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30116.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=8d788fd06d046a87c34adcc316d5e821&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3612&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "bandwidth": 5204909,
- "mimeType": "video/mp4",
- "mime_type": "video/mp4",
- "codecs": "avc1.640032",
- "width": 2160,
- "height": 1080,
- "frameRate": "16000/256",
- "frame_rate": "16000/256",
- "sar": "1:1",
- "startWithSap": 1,
- "start_with_sap": 1,
- "SegmentBase": {
- "Initialization": "0-996",
- "indexRange": "997-1856"
- },
- "segment_base": {
- "initialization": "0-996",
- "index_range": "997-1856"
- },
- "codecid": 7
- },
- {
- "id": 116,
- "baseUrl": "http://xy111x76x65x192xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30106.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=f3c22e57a98d73c2d3dfe876fcdd85c7&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1001507&mid=5087321&orderid=0,3&agrr=0&logo=A0000001",
- "base_url": "http://xy111x76x65x192xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30106.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=f3c22e57a98d73c2d3dfe876fcdd85c7&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1001507&mid=5087321&orderid=0,3&agrr=0&logo=A0000001",
- "backupUrl": [
- "http://xy60x176x136x6xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30106.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=f3c22e57a98d73c2d3dfe876fcdd85c7&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=6000006&mid=5087321&orderid=1,3&agrr=0&logo=60000020",
- "http://cn-hbyc3-dx-v-07.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30106.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=fe9939a90aa73533c01331aab33e05a9&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3608&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "backup_url": [
- "http://xy60x176x136x6xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30106.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=f3c22e57a98d73c2d3dfe876fcdd85c7&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=6000006&mid=5087321&orderid=1,3&agrr=0&logo=60000020",
- "http://cn-hbyc3-dx-v-07.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30106.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=fe9939a90aa73533c01331aab33e05a9&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3608&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "bandwidth": 3136294,
- "mimeType": "video/mp4",
- "mime_type": "video/mp4",
- "codecs": "hev1.1.6.L150.90",
- "width": 2160,
- "height": 1080,
- "frameRate": "16000/256",
- "frame_rate": "16000/256",
- "sar": "1:1",
- "startWithSap": 1,
- "start_with_sap": 1,
- "SegmentBase": {
- "Initialization": "0-1057",
- "indexRange": "1058-1917"
- },
- "segment_base": {
- "initialization": "0-1057",
- "index_range": "1058-1917"
- },
- "codecid": 12
- },
- {
- "id": 80,
- "baseUrl": "http://xy111x77x103x124xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=a481360fc47bad80ff47322ba098f595&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=2000121&mid=5087321&orderid=0,3&agrr=0&logo=A0000002",
- "base_url": "http://xy111x77x103x124xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=a481360fc47bad80ff47322ba098f595&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=2000121&mid=5087321&orderid=0,3&agrr=0&logo=A0000002",
- "backupUrl": [
- "http://xy115x151x244x68xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=a481360fc47bad80ff47322ba098f595&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=2000125&mid=5087321&orderid=1,3&agrr=0&logo=60000002",
- "http://cn-hbyc3-dx-v-06.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=1d5ef268f749f2ebf0ea5ecac733720e&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3606&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "backup_url": [
- "http://xy115x151x244x68xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=a481360fc47bad80ff47322ba098f595&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=2000125&mid=5087321&orderid=1,3&agrr=0&logo=60000002",
- "http://cn-hbyc3-dx-v-06.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=1d5ef268f749f2ebf0ea5ecac733720e&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3606&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "bandwidth": 2630160,
- "mimeType": "video/mp4",
- "mime_type": "video/mp4",
- "codecs": "avc1.640032",
- "width": 2160,
- "height": 1080,
- "frameRate": "16000/544",
- "frame_rate": "16000/544",
- "sar": "1:1",
- "startWithSap": 1,
- "start_with_sap": 1,
- "SegmentBase": {
- "Initialization": "0-996",
- "indexRange": "997-1856"
- },
- "segment_base": {
- "initialization": "0-996",
- "index_range": "997-1856"
- },
- "codecid": 7
- },
- {
- "id": 80,
- "baseUrl": "http://xy222x218x211x39xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=213a86927fc14dd9a2e870a115f194e4&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1001441&mid=5087321&orderid=0,3&agrr=0&logo=A0000001",
- "base_url": "http://xy222x218x211x39xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=213a86927fc14dd9a2e870a115f194e4&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1001441&mid=5087321&orderid=0,3&agrr=0&logo=A0000001",
- "backupUrl": [
- "http://xy218x67x10x126xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=213a86927fc14dd9a2e870a115f194e4&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1001675&mid=5087321&orderid=1,3&agrr=0&logo=60000001",
- "http://cn-hbyc3-dx-v-02.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=794a98625664ffce0dd4181bc245a7b6&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3601&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "backup_url": [
- "http://xy218x67x10x126xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=213a86927fc14dd9a2e870a115f194e4&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1001675&mid=5087321&orderid=1,3&agrr=0&logo=60000001",
- "http://cn-hbyc3-dx-v-02.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=794a98625664ffce0dd4181bc245a7b6&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3601&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "bandwidth": 1583424,
- "mimeType": "video/mp4",
- "mime_type": "video/mp4",
- "codecs": "hev1.1.6.L150.90",
- "width": 2160,
- "height": 1080,
- "frameRate": "16000/544",
- "frame_rate": "16000/544",
- "sar": "1:1",
- "startWithSap": 1,
- "start_with_sap": 1,
- "SegmentBase": {
- "Initialization": "0-1057",
- "indexRange": "1058-1917"
- },
- "segment_base": {
- "initialization": "0-1057",
- "index_range": "1058-1917"
- },
- "codecid": 12
- },
- {
- "id": 64,
- "baseUrl": "http://xy59x54x224x76xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=128309bc946d295a58d710e07a4f67a8&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=8000027&mid=5087321&orderid=0,3&agrr=0&logo=A0000080",
- "base_url": "http://xy59x54x224x76xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=128309bc946d295a58d710e07a4f67a8&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=8000027&mid=5087321&orderid=0,3&agrr=0&logo=A0000080",
- "backupUrl": [
- "http://xy117x26x192x2xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=128309bc946d295a58d710e07a4f67a8&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1000883&mid=5087321&orderid=1,3&agrr=0&logo=60000001",
- "http://cn-hbyc3-dx-v-01.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=ec1785c5077599bb1a3addd295e3be2a&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3600&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "backup_url": [
- "http://xy117x26x192x2xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=128309bc946d295a58d710e07a4f67a8&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1000883&mid=5087321&orderid=1,3&agrr=0&logo=60000001",
- "http://cn-hbyc3-dx-v-01.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30074.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=ec1785c5077599bb1a3addd295e3be2a&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3600&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "bandwidth": 1756920,
- "mimeType": "video/mp4",
- "mime_type": "video/mp4",
- "codecs": "avc1.640028",
- "width": 1440,
- "height": 720,
- "frameRate": "16000/256",
- "frame_rate": "16000/256",
- "sar": "1:1",
- "startWithSap": 1,
- "start_with_sap": 1,
- "SegmentBase": {
- "Initialization": "0-994",
- "indexRange": "995-1854"
- },
- "segment_base": {
- "initialization": "0-994",
- "index_range": "995-1854"
- },
- "codecid": 7
- },
- {
- "id": 64,
- "baseUrl": "http://xy111x76x65x193xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30076.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=fb9744dbe6d55ec10e6d3195886b98bf&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1001507&mid=5087321&orderid=0,3&agrr=0&logo=A0000001",
- "base_url": "http://xy111x76x65x193xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30076.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=fb9744dbe6d55ec10e6d3195886b98bf&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1001507&mid=5087321&orderid=0,3&agrr=0&logo=A0000001",
- "backupUrl": [
- "http://xy59x54x226x245xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30076.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=fb9744dbe6d55ec10e6d3195886b98bf&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=8000027&mid=5087321&orderid=1,3&agrr=0&logo=60000080",
- "http://cn-hbyc3-dx-v-03.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30076.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=b8a7a7cb99ebee9f755f602364d6f875&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3603&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "backup_url": [
- "http://xy59x54x226x245xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30076.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=fb9744dbe6d55ec10e6d3195886b98bf&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=8000027&mid=5087321&orderid=1,3&agrr=0&logo=60000080",
- "http://cn-hbyc3-dx-v-03.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30076.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=b8a7a7cb99ebee9f755f602364d6f875&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3603&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "bandwidth": 1065983,
- "mimeType": "video/mp4",
- "mime_type": "video/mp4",
- "codecs": "hev1.1.6.L120.90",
- "width": 1440,
- "height": 720,
- "frameRate": "16000/256",
- "frame_rate": "16000/256",
- "sar": "1:1",
- "startWithSap": 1,
- "start_with_sap": 1,
- "SegmentBase": {
- "Initialization": "0-1058",
- "indexRange": "1059-1918"
- },
- "segment_base": {
- "initialization": "0-1058",
- "index_range": "1059-1918"
- },
- "codecid": 12
- },
- {
- "id": 32,
- "baseUrl": "http://xy110x85x55x67xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=f7515a5788e25691358407e910556a5e&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=11000003&mid=5087321&orderid=0,3&agrr=0&logo=A0000400",
- "base_url": "http://xy110x85x55x67xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=f7515a5788e25691358407e910556a5e&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=11000003&mid=5087321&orderid=0,3&agrr=0&logo=A0000400",
- "backupUrl": [
- "http://xy61x154x54x191xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=f7515a5788e25691358407e910556a5e&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=9000302&mid=5087321&orderid=1,3&agrr=0&logo=60000100",
- "http://cn-hbxy-dx-v-04.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=a3ba7028bd52fff9ef286a3c24266666&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3263&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "backup_url": [
- "http://xy61x154x54x191xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=f7515a5788e25691358407e910556a5e&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=9000302&mid=5087321&orderid=1,3&agrr=0&logo=60000100",
- "http://cn-hbxy-dx-v-04.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30032.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=a3ba7028bd52fff9ef286a3c24266666&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3263&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "bandwidth": 790280,
- "mimeType": "video/mp4",
- "mime_type": "video/mp4",
- "codecs": "avc1.64001F",
- "width": 960,
- "height": 480,
- "frameRate": "16000/544",
- "frame_rate": "16000/544",
- "sar": "1:1",
- "startWithSap": 1,
- "start_with_sap": 1,
- "SegmentBase": {
- "Initialization": "0-994",
- "indexRange": "995-1854"
- },
- "segment_base": {
- "initialization": "0-994",
- "index_range": "995-1854"
- },
- "codecid": 7
- },
- {
- "id": 32,
- "baseUrl": "http://xy218x67x10x126xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=47fc5c899b464f8f8b9b584aefdbd6fb&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1001675&mid=5087321&orderid=0,3&agrr=0&logo=A0000001",
- "base_url": "http://xy218x67x10x126xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=47fc5c899b464f8f8b9b584aefdbd6fb&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1001675&mid=5087321&orderid=0,3&agrr=0&logo=A0000001",
- "backupUrl": [
- "http://xy110x87x251x147xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=47fc5c899b464f8f8b9b584aefdbd6fb&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1001002&mid=5087321&orderid=1,3&agrr=0&logo=60000001",
- "http://cn-hbyc3-dx-v-04.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=22bedec619ade8602e6dcd3ad1e9fca3&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3604&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "backup_url": [
- "http://xy110x87x251x147xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=47fc5c899b464f8f8b9b584aefdbd6fb&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1001002&mid=5087321&orderid=1,3&agrr=0&logo=60000001",
- "http://cn-hbyc3-dx-v-04.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30033.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=22bedec619ade8602e6dcd3ad1e9fca3&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3604&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "bandwidth": 479386,
- "mimeType": "video/mp4",
- "mime_type": "video/mp4",
- "codecs": "hev1.1.6.L120.90",
- "width": 960,
- "height": 480,
- "frameRate": "16000/544",
- "frame_rate": "16000/544",
- "sar": "1:1",
- "startWithSap": 1,
- "start_with_sap": 1,
- "SegmentBase": {
- "Initialization": "0-1056",
- "indexRange": "1057-1916"
- },
- "segment_base": {
- "initialization": "0-1056",
- "index_range": "1057-1916"
- },
- "codecid": 12
- },
- {
- "id": 16,
- "baseUrl": "http://xy111x78x162x6xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=c0b9b928876f29ad2a237c011cbb4d79&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=2000559&mid=5087321&orderid=0,3&agrr=0&logo=A0000002",
- "base_url": "http://xy111x78x162x6xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=c0b9b928876f29ad2a237c011cbb4d79&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=2000559&mid=5087321&orderid=0,3&agrr=0&logo=A0000002",
- "backupUrl": [
- "http://xy220x161x19x177xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=c0b9b928876f29ad2a237c011cbb4d79&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1001675&mid=5087321&orderid=1,3&agrr=0&logo=60000001",
- "http://cn-hbyc3-dx-v-04.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=71df51e492a25c30b1d4dbb528b71c3a&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3604&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "backup_url": [
- "http://xy220x161x19x177xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=c0b9b928876f29ad2a237c011cbb4d79&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1001675&mid=5087321&orderid=1,3&agrr=0&logo=60000001",
- "http://cn-hbyc3-dx-v-04.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30011.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=71df51e492a25c30b1d4dbb528b71c3a&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3604&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "bandwidth": 218119,
- "mimeType": "video/mp4",
- "mime_type": "video/mp4",
- "codecs": "hev1.1.6.L120.90",
- "width": 720,
- "height": 360,
- "frameRate": "16000/544",
- "frame_rate": "16000/544",
- "sar": "1:1",
- "startWithSap": 1,
- "start_with_sap": 1,
- "SegmentBase": {
- "Initialization": "0-1056",
- "indexRange": "1057-1916"
- },
- "segment_base": {
- "initialization": "0-1056",
- "index_range": "1057-1916"
- },
- "codecid": 12
- },
- {
- "id": 16,
- "baseUrl": "http://xy124x227x203x184xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=705c2a6b1c5bc4ced54112602f6668c4&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=9000430&mid=5087321&orderid=0,3&agrr=0&logo=A0000100",
- "base_url": "http://xy124x227x203x184xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=705c2a6b1c5bc4ced54112602f6668c4&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=9000430&mid=5087321&orderid=0,3&agrr=0&logo=A0000100",
- "backupUrl": [
- "http://xy125x115x20x243xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=705c2a6b1c5bc4ced54112602f6668c4&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=8000090&mid=5087321&orderid=1,3&agrr=0&logo=60000080",
- "http://cn-hbyc3-dx-v-04.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=5292a28e404739d7f78bdb88b40e67a4&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3604&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "backup_url": [
- "http://xy125x115x20x243xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=705c2a6b1c5bc4ced54112602f6668c4&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=8000090&mid=5087321&orderid=1,3&agrr=0&logo=60000080",
- "http://cn-hbyc3-dx-v-04.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30016.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=5292a28e404739d7f78bdb88b40e67a4&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3604&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "bandwidth": 353623,
- "mimeType": "video/mp4",
- "mime_type": "video/mp4",
- "codecs": "avc1.64001E",
- "width": 720,
- "height": 360,
- "frameRate": "16000/544",
- "frame_rate": "16000/544",
- "sar": "1:1",
- "startWithSap": 1,
- "start_with_sap": 1,
- "SegmentBase": {
- "Initialization": "0-1003",
- "indexRange": "1004-1863"
- },
- "segment_base": {
- "initialization": "0-1003",
- "index_range": "1004-1863"
- },
- "codecid": 7
- }
- ],
- "audio": [
- {
- "id": 30280,
- "baseUrl": "http://xy115x151x244x90xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=7a2cb6f2e18c4ddc953822a47956a487&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=2000119&mid=5087321&orderid=0,3&agrr=0&logo=A0000002",
- "base_url": "http://xy115x151x244x90xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=7a2cb6f2e18c4ddc953822a47956a487&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=2000119&mid=5087321&orderid=0,3&agrr=0&logo=A0000002",
- "backupUrl": [
- "http://xy115x229x13x65xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=7a2cb6f2e18c4ddc953822a47956a487&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1001384&mid=5087321&orderid=1,3&agrr=0&logo=60000001",
- "http://cn-hbyc3-dx-v-09.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=392584aebbe78927007600f3e6554e5a&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3611&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "backup_url": [
- "http://xy115x229x13x65xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=7a2cb6f2e18c4ddc953822a47956a487&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=1001384&mid=5087321&orderid=1,3&agrr=0&logo=60000001",
- "http://cn-hbyc3-dx-v-09.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30280.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=392584aebbe78927007600f3e6554e5a&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3611&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "bandwidth": 329376,
- "mimeType": "audio/mp4",
- "mime_type": "audio/mp4",
- "codecs": "mp4a.40.2",
- "width": 0,
- "height": 0,
- "frameRate": "",
- "frame_rate": "",
- "sar": "",
- "startWithSap": 0,
- "start_with_sap": 0,
- "SegmentBase": {
- "Initialization": "0-907",
- "indexRange": "908-1779"
- },
- "segment_base": {
- "initialization": "0-907",
- "index_range": "908-1779"
- },
- "codecid": 0
- },
- {
- "id": 30216,
- "baseUrl": "http://xy59x54x225x162xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=8e6caaf2d9eb00b53fc185974d8b10ec&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=8000027&mid=5087321&orderid=0,3&agrr=0&logo=A0000080",
- "base_url": "http://xy59x54x225x162xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=8e6caaf2d9eb00b53fc185974d8b10ec&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=8000027&mid=5087321&orderid=0,3&agrr=0&logo=A0000080",
- "backupUrl": [
- "http://xy171x109x208x152xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=8e6caaf2d9eb00b53fc185974d8b10ec&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=2000070&mid=5087321&orderid=1,3&agrr=0&logo=60000002",
- "http://cn-hbyc3-dx-v-04.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=53bd263d269b12aeb1921b35310e6135&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3604&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "backup_url": [
- "http://xy171x109x208x152xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=8e6caaf2d9eb00b53fc185974d8b10ec&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=2000070&mid=5087321&orderid=1,3&agrr=0&logo=60000002",
- "http://cn-hbyc3-dx-v-04.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=53bd263d269b12aeb1921b35310e6135&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3604&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "bandwidth": 67279,
- "mimeType": "audio/mp4",
- "mime_type": "audio/mp4",
- "codecs": "mp4a.40.2",
- "width": 0,
- "height": 0,
- "frameRate": "",
- "frame_rate": "",
- "sar": "",
- "startWithSap": 0,
- "start_with_sap": 0,
- "SegmentBase": {
- "Initialization": "0-941",
- "indexRange": "942-1813"
- },
- "segment_base": {
- "initialization": "0-941",
- "index_range": "942-1813"
- },
- "codecid": 0
- },
- {
- "id": 30232,
- "baseUrl": "http://xy61x131x241x176xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=af4d99e5549d76fa99b589da1bbd8bd5&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=2000118&mid=5087321&orderid=0,3&agrr=0&logo=A0000002",
- "base_url": "http://xy61x131x241x176xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=af4d99e5549d76fa99b589da1bbd8bd5&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=2000118&mid=5087321&orderid=0,3&agrr=0&logo=A0000002",
- "backupUrl": [
- "http://xy140x237x232x110xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=af4d99e5549d76fa99b589da1bbd8bd5&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=9000304&mid=5087321&orderid=1,3&agrr=0&logo=60000100",
- "http://cn-hbyc3-dx-v-02.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=a7591f91acd5e1e046c4db816f1fde09&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3601&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "backup_url": [
- "http://xy140x237x232x110xy.mcdn.bilivideo.cn:4483/upgcxcode/65/46/244954665/244954665_f9-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=mcdn&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=af4d99e5549d76fa99b589da1bbd8bd5&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mcdnid=9000304&mid=5087321&orderid=1,3&agrr=0&logo=60000100",
- "http://cn-hbyc3-dx-v-02.bilivideo.com/upgcxcode/65/46/244954665/244954665_f9-1-30232.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1615860500&gen=playurlv2&os=vcache&oi=3702125999&trid=e4aa2dea3e2142f996ab744b2cff702du&platform=pc&upsig=a7591f91acd5e1e046c4db816f1fde09&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=3601&mid=5087321&orderid=2,3&agrr=0&logo=40000000"
- ],
- "bandwidth": 132768,
- "mimeType": "audio/mp4",
- "mime_type": "audio/mp4",
- "codecs": "mp4a.40.2",
- "width": 0,
- "height": 0,
- "frameRate": "",
- "frame_rate": "",
- "sar": "",
- "startWithSap": 0,
- "start_with_sap": 0,
- "SegmentBase": {
- "Initialization": "0-907",
- "indexRange": "908-1779"
- },
- "segment_base": {
- "initialization": "0-907",
- "index_range": "908-1779"
- },
- "codecid": 0
- }
- ]
- },
- "support_formats": [
- {
- "quality": 125,
- "format": "hdflv2",
- "new_description": "HDR 真彩",
- "display_desc": "HDR",
- "superscript": ""
- },
- {
- "quality": 120,
- "format": "hdflv2",
- "new_description": "4K 超清",
- "display_desc": "4K",
- "superscript": ""
- },
- {
- "quality": 116,
- "format": "flv_p60",
- "new_description": "1080P 60帧",
- "display_desc": "1080P",
- "superscript": "60帧"
- },
- {
- "quality": 80,
- "format": "flv",
- "new_description": "1080P 高清",
- "display_desc": "1080P",
- "superscript": ""
- },
- {
- "quality": 64,
- "format": "flv720_p60",
- "new_description": "720P 60帧",
- "display_desc": "720P",
- "superscript": "60帧"
- },
- {
- "quality": 32,
- "format": "flv480",
- "new_description": "480P 清晰",
- "display_desc": "480P",
- "superscript": ""
- },
- {
- "quality": 16,
- "format": "mp4",
- "new_description": "360P 流畅",
- "display_desc": "360P",
- "superscript": ""
- }
- ],
- "high_format": null
- }
-}
-```
-
-
-
-## 视频的取流(web端及APP端)
-
-**注意:**
-
-1. 如flv模式则可能产生分段情况,将`$.data.durl[1-n].url`或`$.data.durl[1-n].backup_url[0]`中的内容作为url进行GET操作, 如果有多个视频, 需要手动合并处理
-2. 如mp4模式则需要获取对应的视频流(方法同上)
-3. 如dash模式则需要同时获取对应的视频流和伴音流(方法同上)
-4. web端取流需要验证防盗链,即`referer`为 `.bilibili.com`域名下且UA不能为空;app端也需要验证防盗链,即UA需要含有`Mozilla/5.0 BiliDroid/*.*.* (bbcallen@gmail.com)`(*为版本);如`referer`或UA错误的情况会被判定为盗链,返回403 Forbidden故无法取流
-5. **注意unicode转义符**
-
-以上述视频流url为例:
-
-```shell
-wget 'http://upos-sz-mirrorhw.bilivideo.com/upgcxcode/08/62/171776208/171776208-1-112.flv?e=ig8euxZM2rNcNbhMnwhVhwdlhzK3hzdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1589565412&gen=playurl&os=hwbv&oi=606631998&trid=e0fa5f9a7610440a871279a28fae85aau&platform=pc&upsig=5f469cb4c190ed54b89bd40cc37eddff&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=80000000' \
---referer 'https://www.bilibili.com' \
--O 'Download_video.flv'
-```
-
-响应正文将返回一个flv文件
diff --git a/web_widget/404_manga.md b/web_widget/404_manga.md
deleted file mode 100644
index 1781596..0000000
--- a/web_widget/404_manga.md
+++ /dev/null
@@ -1,189 +0,0 @@
-# 404页漫画收集
-
-## 视频稿件错误提示图
-
-https://static.hdslb.com/images/error/no_video.png
-
-https://static.hdslb.com/images/error/wait_for_release.png
-
-https://static.hdslb.com/images/error/wait_for_review.png
-
-https://static.hdslb.com/images/error/no_video_login.png
-
-https://static.hdslb.com/images/error/video_conflict.png
-
-## static类型
-
-https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-1.png
-
-https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-2.png
-
-https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-3.png
-
-https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-4.png
-
-https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-5.png
-
-https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-6.png
-
-https://activity.hdslb.com/zzjs/cartoon/errorPage-manga-7.png
-
-## dynamic类型
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171215/o6y3r7or6z.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171215/2978n4wwpj.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171215/697mr4w97k.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171215/1297m40w7j.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171110/697zx5k7p3.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171110/z4prl744z3.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171110/798z30yro1.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171110/890zl5z890.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171110/o6y4qnjr3z.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171103/j6q4m9o9k3.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171103/9073x5k78w.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171103/n6xkqmlkr0.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171103/597vq87jxx.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171103/4973p51n10.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171103/9073x5084w.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171103/397ro5k761.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171103/597vq8kwxk.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171103/697wr522nn.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171103/n6xkqm5wjp.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171103/k7rwnj474r.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171103/397rokjopp.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171103/9073xqk97w.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171103/4973pln894.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/l61j9zw8qm.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/o6kmv3r2w5.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/396mxjn5mq.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/k7z6myrz2v.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/y4xzkn6y09.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/y4xzkn1ryz.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/z4y06on3mm.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/j6y5nx3wjw.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/m62ko1j4j8.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/p6lnm09plj.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/z4y06mm37l.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/n6jl5yq9yp.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/x60yjknjzw.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/o6kmvzp2pz.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/p6lnm169w7.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/029jozv8jp.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/126kq1owy3.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/596ox53lzp.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/p6lnm1p94x.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/k7z6mv4ryr.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/l61j9jzwvm.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20171017/496nrnmz9x.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170626/q0r1q5o63q.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170626/39l7rjmxl5.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170626/q0r1q51434.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170626/n6oxk2onql.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170626/y46oqn1lj9.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170626/49m73k2r1x.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170626/90r73kv75y.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170522/39lv2lxqnp.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170522/r9v5j96lk4.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170522/z45lr4vmk3.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/m66kmm08q8.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/z440ww0xox.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/l66jllq8kq.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170522/12j0zwpp5l.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/m66kmm8w78.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/399m88l87m.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/n66lnnmqjj.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170522/m6nz424xn9.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/122k334q84.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/900vooj8xw.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/o66mooowy6.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/k776kkw10o.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/499njjrv79.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/y44zww9mz9.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/m66km4xz6p.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/499njw4m17.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/122k3zlm7j.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/l66jl28oqq.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/w44xw048k8.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/j665jz9j5v.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/699pl2484w.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/x66y3r2nyo.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/122k3z3lp3.png
-
-https://i0.hdslb.com/bfs/activity-plat/cover/20170511/w44xw6r98w.png
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..c097ecb
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,1749 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/parser@^7.20.15", "@babel/parser@^7.21.3":
+ version "7.22.15"
+ resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.22.15.tgz#d34592bfe288a32e741aa0663dbc4829fcd55160"
+ integrity sha512-RWmQ/sklUN9BvGGpCDgSubhHWfAx24XDTDObup4ffvxaYsptOg2P3KG0j+1eWKLxpkX0j0uHxmpq2Z1SP/VhxA==
+
+"@esbuild/android-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622"
+ integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==
+
+"@esbuild/android-arm@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682"
+ integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==
+
+"@esbuild/android-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2"
+ integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==
+
+"@esbuild/darwin-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1"
+ integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==
+
+"@esbuild/darwin-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d"
+ integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==
+
+"@esbuild/freebsd-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54"
+ integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==
+
+"@esbuild/freebsd-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e"
+ integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==
+
+"@esbuild/linux-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0"
+ integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==
+
+"@esbuild/linux-arm@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0"
+ integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==
+
+"@esbuild/linux-ia32@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7"
+ integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==
+
+"@esbuild/linux-loong64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d"
+ integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==
+
+"@esbuild/linux-mips64el@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231"
+ integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==
+
+"@esbuild/linux-ppc64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb"
+ integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==
+
+"@esbuild/linux-riscv64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6"
+ integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==
+
+"@esbuild/linux-s390x@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071"
+ integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==
+
+"@esbuild/linux-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338"
+ integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==
+
+"@esbuild/netbsd-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1"
+ integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==
+
+"@esbuild/openbsd-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae"
+ integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==
+
+"@esbuild/sunos-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d"
+ integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==
+
+"@esbuild/win32-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9"
+ integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==
+
+"@esbuild/win32-ia32@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102"
+ integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==
+
+"@esbuild/win32-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d"
+ integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==
+
+"@jridgewell/sourcemap-codec@^1.4.15":
+ version "1.4.15"
+ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@mdit-vue/plugin-component@^0.12.1":
+ version "0.12.1"
+ resolved "https://registry.npmjs.org/@mdit-vue/plugin-component/-/plugin-component-0.12.1.tgz#ed04c94c767e4ba1f6fc16ab458da82750b401f6"
+ integrity sha512-L3elbvuKUufXwPLHrmJGd/ijd/QKxfcHXy3kRy4O+P7UIV7HSWePpfB0k+wWee+by3MviYYxjVAi392z+DGy3Q==
+ dependencies:
+ "@types/markdown-it" "^13.0.0"
+ markdown-it "^13.0.1"
+
+"@mdit-vue/plugin-frontmatter@^0.12.1":
+ version "0.12.1"
+ resolved "https://registry.npmjs.org/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-0.12.1.tgz#af02ebc6622fa24d71343fde627a0e49d4ffbab5"
+ integrity sha512-C6ycNjrJ+T4JgbVxwo9cUkfLacOO841Yl8ogqd5PJmAVpc5cM2OLBkqqkZxNRXos3g9xM1VvIQ7gK/047UNADg==
+ dependencies:
+ "@mdit-vue/types" "0.12.0"
+ "@types/markdown-it" "^13.0.0"
+ gray-matter "^4.0.3"
+ markdown-it "^13.0.1"
+
+"@mdit-vue/plugin-headers@^0.12.1":
+ version "0.12.1"
+ resolved "https://registry.npmjs.org/@mdit-vue/plugin-headers/-/plugin-headers-0.12.1.tgz#2ab8c446fca6d39ce951819b5e18fef614a227aa"
+ integrity sha512-DXAw/iWW8f3qUYMDHgQmamL+XGjnaoeRzdvDseLRyr7gXX4xpYO9OIhe/pv9LzSvUoY7UGYmn4kFeI+0qpWJ+g==
+ dependencies:
+ "@mdit-vue/shared" "0.12.1"
+ "@mdit-vue/types" "0.12.0"
+ "@types/markdown-it" "^13.0.0"
+ markdown-it "^13.0.1"
+
+"@mdit-vue/plugin-sfc@^0.12.1":
+ version "0.12.1"
+ resolved "https://registry.npmjs.org/@mdit-vue/plugin-sfc/-/plugin-sfc-0.12.1.tgz#49d6060e71e4016252ac35140f6960eb9a50cb6f"
+ integrity sha512-6j332CsSqumy1+StIM3XphdXG1zj9NXuWestDJrKgS3OLy5P0EAioXScUYiZYysw61ZG+2pP37MW7Hg+eHbyIg==
+ dependencies:
+ "@mdit-vue/types" "0.12.0"
+ "@types/markdown-it" "^13.0.0"
+ markdown-it "^13.0.1"
+
+"@mdit-vue/plugin-title@^0.12.1":
+ version "0.12.1"
+ resolved "https://registry.npmjs.org/@mdit-vue/plugin-title/-/plugin-title-0.12.1.tgz#d01c2b0e9fd374fc3d52a551689cadf5fe066890"
+ integrity sha512-JOsiDj+CryGbrTDWUnDAwB9kSkN6o9GDo3udR6BPDgBNVb3zAnx9ZNaRpEhDW1LnQhf9/LYicWJ2eTNRKPcJNQ==
+ dependencies:
+ "@mdit-vue/shared" "0.12.1"
+ "@mdit-vue/types" "0.12.0"
+ "@types/markdown-it" "^13.0.0"
+ markdown-it "^13.0.1"
+
+"@mdit-vue/plugin-toc@^0.12.1":
+ version "0.12.1"
+ resolved "https://registry.npmjs.org/@mdit-vue/plugin-toc/-/plugin-toc-0.12.1.tgz#ed650a05d3f4b84637e79d8b3b06e89295cc78bf"
+ integrity sha512-nFGwTwVa8GLCKJMV7cGST7lYuljSjEiCTPgKIpQ/WifwouHsQaL/rnBDr22kpzY2hRTAhM3+TT5GDwLyxa/e6A==
+ dependencies:
+ "@mdit-vue/shared" "0.12.1"
+ "@mdit-vue/types" "0.12.0"
+ "@types/markdown-it" "^13.0.0"
+ markdown-it "^13.0.1"
+
+"@mdit-vue/shared@0.12.1", "@mdit-vue/shared@^0.12.1":
+ version "0.12.1"
+ resolved "https://registry.npmjs.org/@mdit-vue/shared/-/shared-0.12.1.tgz#b67cbfc71cac6fb49a7a0be169cd53d921e30344"
+ integrity sha512-bXgd0KThe4jC2leCFDFsyrudXIckvTwV4WnQK/rRMrXq0/BAuVdSNdIv1LGCWZxD5+oDyPyEPd0lalTIFwqsmg==
+ dependencies:
+ "@mdit-vue/types" "0.12.0"
+ "@types/markdown-it" "^13.0.0"
+ markdown-it "^13.0.1"
+
+"@mdit-vue/types@0.12.0", "@mdit-vue/types@^0.12.0":
+ version "0.12.0"
+ resolved "https://registry.npmjs.org/@mdit-vue/types/-/types-0.12.0.tgz#096ff57d3590d076f7d7561dbc9956fb0bb89fe1"
+ integrity sha512-mrC4y8n88BYvgcgzq9bvTlDgFyi2zuvzmPilRvRc3Uz1iIvq8mDhxJ0rHKFUNzPEScpDvJdIujqiDrulMqiudA==
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.8"
+ resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@types/debug@^4.1.8":
+ version "4.1.8"
+ resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz#cef723a5d0a90990313faec2d1e22aee5eecb317"
+ integrity sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==
+ dependencies:
+ "@types/ms" "*"
+
+"@types/fs-extra@^11.0.1":
+ version "11.0.1"
+ resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.1.tgz#f542ec47810532a8a252127e6e105f487e0a6ea5"
+ integrity sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==
+ dependencies:
+ "@types/jsonfile" "*"
+ "@types/node" "*"
+
+"@types/hash-sum@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/@types/hash-sum/-/hash-sum-1.0.0.tgz#838f4e8627887d42b162d05f3d96ca636c2bc504"
+ integrity sha512-FdLBT93h3kcZ586Aee66HPCVJ6qvxVjBlDWNmxSGSbCZe9hTsjRKdSsl4y1T+3zfujxo9auykQMnFsfyHWD7wg==
+
+"@types/jsonfile@*":
+ version "6.1.1"
+ resolved "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz#ac84e9aefa74a2425a0fb3012bdea44f58970f1b"
+ integrity sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==
+ dependencies:
+ "@types/node" "*"
+
+"@types/linkify-it@*":
+ version "3.0.3"
+ resolved "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz#15a0712296c5041733c79efe233ba17ae5a7587b"
+ integrity sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==
+
+"@types/markdown-it-emoji@^2.0.2":
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/@types/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz#f12a97df2758f38b4b38f277b468780459faff14"
+ integrity sha512-2ln8Wjbcj/0oRi/6VnuMeWEHHuK8uapFttvcLmDIe1GKCsFBLOLBX+D+xhDa9oWOQV0IpvxwrSfKKssAqqroog==
+ dependencies:
+ "@types/markdown-it" "*"
+
+"@types/markdown-it@*", "@types/markdown-it@^13.0.0", "@types/markdown-it@^13.0.1":
+ version "13.0.1"
+ resolved "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.1.tgz#2f45bd54315f5db2d9bd909ec7fd4d994cf75df4"
+ integrity sha512-SUEb8Frsxs3D5Gg9xek6i6EG6XQ5s+O+ZdQzIPESZVZw3Pv3CPQfjCJBI+RgqZd1IBeu18S0Rn600qpPnEK37w==
+ dependencies:
+ "@types/linkify-it" "*"
+ "@types/mdurl" "*"
+
+"@types/mdurl@*":
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9"
+ integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==
+
+"@types/ms@*":
+ version "0.7.31"
+ resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
+ integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
+
+"@types/node@*":
+ version "20.5.9"
+ resolved "https://registry.npmjs.org/@types/node/-/node-20.5.9.tgz#a70ec9d8fa0180a314c3ede0e20ea56ff71aed9a"
+ integrity sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==
+
+"@types/web-bluetooth@^0.0.17":
+ version "0.0.17"
+ resolved "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz#5c9f3c617f64a9735d7b72a7cc671e166d900c40"
+ integrity sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==
+
+"@vitejs/plugin-vue@^4.3.3":
+ version "4.3.4"
+ resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.4.tgz#a289dff38e01949fe7be581d5542cabaeb961dec"
+ integrity sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==
+
+"@vue/compiler-core@3.3.4":
+ version "3.3.4"
+ resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz#7fbf591c1c19e1acd28ffd284526e98b4f581128"
+ integrity sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==
+ dependencies:
+ "@babel/parser" "^7.21.3"
+ "@vue/shared" "3.3.4"
+ estree-walker "^2.0.2"
+ source-map-js "^1.0.2"
+
+"@vue/compiler-dom@3.3.4":
+ version "3.3.4"
+ resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz#f56e09b5f4d7dc350f981784de9713d823341151"
+ integrity sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==
+ dependencies:
+ "@vue/compiler-core" "3.3.4"
+ "@vue/shared" "3.3.4"
+
+"@vue/compiler-sfc@3.3.4":
+ version "3.3.4"
+ resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz#b19d942c71938893535b46226d602720593001df"
+ integrity sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==
+ dependencies:
+ "@babel/parser" "^7.20.15"
+ "@vue/compiler-core" "3.3.4"
+ "@vue/compiler-dom" "3.3.4"
+ "@vue/compiler-ssr" "3.3.4"
+ "@vue/reactivity-transform" "3.3.4"
+ "@vue/shared" "3.3.4"
+ estree-walker "^2.0.2"
+ magic-string "^0.30.0"
+ postcss "^8.1.10"
+ source-map-js "^1.0.2"
+
+"@vue/compiler-ssr@3.3.4":
+ version "3.3.4"
+ resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz#9d1379abffa4f2b0cd844174ceec4a9721138777"
+ integrity sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==
+ dependencies:
+ "@vue/compiler-dom" "3.3.4"
+ "@vue/shared" "3.3.4"
+
+"@vue/devtools-api@^6.5.0":
+ version "6.5.0"
+ resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07"
+ integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==
+
+"@vue/reactivity-transform@3.3.4":
+ version "3.3.4"
+ resolved "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz#52908476e34d6a65c6c21cd2722d41ed8ae51929"
+ integrity sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==
+ dependencies:
+ "@babel/parser" "^7.20.15"
+ "@vue/compiler-core" "3.3.4"
+ "@vue/shared" "3.3.4"
+ estree-walker "^2.0.2"
+ magic-string "^0.30.0"
+
+"@vue/reactivity@3.3.4":
+ version "3.3.4"
+ resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz#a27a29c6cd17faba5a0e99fbb86ee951653e2253"
+ integrity sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==
+ dependencies:
+ "@vue/shared" "3.3.4"
+
+"@vue/runtime-core@3.3.4":
+ version "3.3.4"
+ resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz#4bb33872bbb583721b340f3088888394195967d1"
+ integrity sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==
+ dependencies:
+ "@vue/reactivity" "3.3.4"
+ "@vue/shared" "3.3.4"
+
+"@vue/runtime-dom@3.3.4":
+ version "3.3.4"
+ resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz#992f2579d0ed6ce961f47bbe9bfe4b6791251566"
+ integrity sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==
+ dependencies:
+ "@vue/runtime-core" "3.3.4"
+ "@vue/shared" "3.3.4"
+ csstype "^3.1.1"
+
+"@vue/server-renderer@3.3.4":
+ version "3.3.4"
+ resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz#ea46594b795d1536f29bc592dd0f6655f7ea4c4c"
+ integrity sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==
+ dependencies:
+ "@vue/compiler-ssr" "3.3.4"
+ "@vue/shared" "3.3.4"
+
+"@vue/shared@3.3.4", "@vue/shared@^3.3.4":
+ version "3.3.4"
+ resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz#06e83c5027f464eef861c329be81454bc8b70780"
+ integrity sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==
+
+"@vuepress/bundler-vite@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/bundler-vite/-/bundler-vite-2.0.0-beta.67.tgz#a259fc47156afdfe494dc7a5af3578a1d602f7f3"
+ integrity sha512-W6YXixxu2G+xPECPFvx4Tzv5fmpBYvApEYVw7qfSNf/5YZ6aeIfV0AMGJZvhk7R/KniofvBTGCjAMSK4fqKp8w==
+ dependencies:
+ "@vitejs/plugin-vue" "^4.3.3"
+ "@vuepress/client" "2.0.0-beta.67"
+ "@vuepress/core" "2.0.0-beta.67"
+ "@vuepress/shared" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ autoprefixer "^10.4.15"
+ connect-history-api-fallback "^2.0.0"
+ postcss "^8.4.28"
+ postcss-load-config "^4.0.1"
+ rollup "^3.28.1"
+ vite "~4.4.9"
+ vue "^3.3.4"
+ vue-router "^4.2.4"
+
+"@vuepress/cli@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/cli/-/cli-2.0.0-beta.67.tgz#f50e25dab06355f0b10f27ac27e926bfe6cbb317"
+ integrity sha512-OWd5JMq9pEHrz2MTTQV91EoG+7o18s1JWKP7GBfYQ2DRAu/Hf4rZPmluuibhFolTvnTDuTtXrfb6Wbx4iZ+M9Q==
+ dependencies:
+ "@vuepress/core" "2.0.0-beta.67"
+ "@vuepress/shared" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ cac "^6.7.14"
+ chokidar "^3.5.3"
+ envinfo "^7.10.0"
+ esbuild "~0.18.20"
+
+"@vuepress/client@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-beta.67.tgz#7cb444eaa12032a7d07b8d59a515d291933518dc"
+ integrity sha512-xfXZXmZmMbCvQxUhNltuAZzpoiwM0x9ke+DdPPDBF0oGMNDlmtOlsD7NcH322vQE3ehYy5mXJttXuEmfoNOG6A==
+ dependencies:
+ "@vue/devtools-api" "^6.5.0"
+ "@vuepress/shared" "2.0.0-beta.67"
+ "@vueuse/core" "^10.4.1"
+ vue "^3.3.4"
+ vue-router "^4.2.4"
+
+"@vuepress/core@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-beta.67.tgz#925eac48fdc27855a9e75b46c23c6dd37a1c2e4c"
+ integrity sha512-pbCm1x+zFKZqpJjS68sv3ziEQLMn0KM04Q6W249stcTUUBrKox2OPx+OcX/BrN6yH60OviXN8hD6MgCnFSWdZA==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.67"
+ "@vuepress/markdown" "2.0.0-beta.67"
+ "@vuepress/shared" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ vue "^3.3.4"
+
+"@vuepress/markdown@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-beta.67.tgz#179f1bbe57a590da362358c8ccad1198875db77a"
+ integrity sha512-dwciE7dbfDruLan+w9x/LUl5dLdBWB39QXznX/Hhv4oPp+Mm4as53J58gqjuRPi6N25DfRi3ODrzjG5Lduwnfw==
+ dependencies:
+ "@mdit-vue/plugin-component" "^0.12.1"
+ "@mdit-vue/plugin-frontmatter" "^0.12.1"
+ "@mdit-vue/plugin-headers" "^0.12.1"
+ "@mdit-vue/plugin-sfc" "^0.12.1"
+ "@mdit-vue/plugin-title" "^0.12.1"
+ "@mdit-vue/plugin-toc" "^0.12.1"
+ "@mdit-vue/shared" "^0.12.1"
+ "@mdit-vue/types" "^0.12.0"
+ "@types/markdown-it" "^13.0.1"
+ "@types/markdown-it-emoji" "^2.0.2"
+ "@vuepress/shared" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ markdown-it "^13.0.1"
+ markdown-it-anchor "^8.6.7"
+ markdown-it-emoji "^2.0.2"
+ mdurl "^1.0.1"
+
+"@vuepress/plugin-active-header-links@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/plugin-active-header-links/-/plugin-active-header-links-2.0.0-beta.67.tgz#9dd4bfbbba578c2bd35c281e34436a8bd3bc0cc4"
+ integrity sha512-2AxtFnnvHn750x+dCFbCWgqxpS+zsNucw8vuATmyRiBAleEqfM1Wz+RuMSKBM38GxsI/7mnQgWOgqj4S90G+ZA==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.67"
+ "@vuepress/core" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ ts-debounce "^4.0.0"
+ vue "^3.3.4"
+ vue-router "^4.2.4"
+
+"@vuepress/plugin-back-to-top@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/plugin-back-to-top/-/plugin-back-to-top-2.0.0-beta.67.tgz#aff0935cc036925fbd9947beb31bdd2971c316df"
+ integrity sha512-ystolf429cvAfX4qw1o9sHfkB8+KdQ4rV8P4ILR5LERgTZprL+1FbQfcHgVjEF2p0UKu2QXJQNGx2LfWWVuYdw==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.67"
+ "@vuepress/core" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ ts-debounce "^4.0.0"
+ vue "^3.3.4"
+
+"@vuepress/plugin-container@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/plugin-container/-/plugin-container-2.0.0-beta.67.tgz#a18acdf5b05165c03c29c2d7a04837cb6bf9f649"
+ integrity sha512-NuxjNkyJ2bYsRpw3iAiok2aeKYzZQsEZ8A/i+4LYwrDXbj3HfjlDhfPYhN+BMQfbxE9LpXOG0APNcXVCNMu0hw==
+ dependencies:
+ "@types/markdown-it" "^13.0.1"
+ "@vuepress/core" "2.0.0-beta.67"
+ "@vuepress/markdown" "2.0.0-beta.67"
+ "@vuepress/shared" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ markdown-it "^13.0.1"
+ markdown-it-container "^3.0.0"
+
+"@vuepress/plugin-external-link-icon@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/plugin-external-link-icon/-/plugin-external-link-icon-2.0.0-beta.67.tgz#e291b4a6052bcde0099675c4a8e62bfaebfdfec2"
+ integrity sha512-JD0/Uvt1WQXiGoAA0pjpqQ7OINDUm1TSgWeIpfPq9tZJNfgjmqUoartMFUuqcvl4eMi4Alfx0dWkzSF9qHL7Pg==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.67"
+ "@vuepress/core" "2.0.0-beta.67"
+ "@vuepress/markdown" "2.0.0-beta.67"
+ "@vuepress/shared" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ vue "^3.3.4"
+
+"@vuepress/plugin-git@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/plugin-git/-/plugin-git-2.0.0-beta.67.tgz#e4b91a78afe6e5350d155deb26d2893bb8343d37"
+ integrity sha512-9JSGmEtDqBWEmszqEE7spBjWdbeZo0jeMi2ZQLT4KgQrYh5fU/DO8MgeJxGXXd9xvpz4aVAzQR+gqYpL6kO5Jw==
+ dependencies:
+ "@vuepress/core" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ execa "^8.0.1"
+
+"@vuepress/plugin-medium-zoom@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-2.0.0-beta.67.tgz#74ebc6e118f3ea7f00a41a2d7e983ef859576996"
+ integrity sha512-KLXfzKKbAhLSaRdbkHlvpbpYtaqINYBJ9gB4Q7CQ5AUaA8uStLG6rX0RjyhKAONfIJWuFiVYCp38QSI++fa/tA==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.67"
+ "@vuepress/core" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ medium-zoom "^1.0.8"
+ vue "^3.3.4"
+
+"@vuepress/plugin-nprogress@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/plugin-nprogress/-/plugin-nprogress-2.0.0-beta.67.tgz#f1e16521953d5a7364c160ece403d5045a809738"
+ integrity sha512-BlqALWsNCllrqhMgRGz+50ah984XCwp1wejNYGP0ENEGSo1SY2dUI4AatIWep4Zj+0s7gbBR0swZc49hkLpENg==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.67"
+ "@vuepress/core" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ vue "^3.3.4"
+ vue-router "^4.2.4"
+
+"@vuepress/plugin-palette@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/plugin-palette/-/plugin-palette-2.0.0-beta.67.tgz#64149c26bfab6b7b154299abddcff9032036b1d0"
+ integrity sha512-Ea2nLx9yH4c70MUQpFXuRAD6OZNVdyVGppvNwyGswutqPkRu7km18ml4Jk767iGMAVfzmrlphd6VIUJBUJ81JQ==
+ dependencies:
+ "@vuepress/core" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ chokidar "^3.5.3"
+
+"@vuepress/plugin-prismjs@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/plugin-prismjs/-/plugin-prismjs-2.0.0-beta.67.tgz#1b5fc0f628e1dbc68a4746dae8be5ab600dc4cc0"
+ integrity sha512-IaTc/BHwdO/ydfcoGmqUsDI5G2rPsgffxDtHx4pogaBCF2A6X9O++hrR/YExOHwwyhaE/6c6kflJAefaHb+Arg==
+ dependencies:
+ "@vuepress/core" "2.0.0-beta.67"
+ prismjs "^1.29.0"
+
+"@vuepress/plugin-search@^2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.yarnpkg.com/@vuepress/plugin-search/-/plugin-search-2.0.0-beta.67.tgz#f903a10c360de0180517026b2bd992c2e33b9167"
+ integrity sha512-oju9DK2zQE7PqP7EXm/c0ekoG0clLSn4h6Y7DvgbXJRmonM42oHHj3DdC/eGtyLhTUGuD7mw93Svj2uaC556Nw==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.67"
+ "@vuepress/core" "2.0.0-beta.67"
+ "@vuepress/shared" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ chokidar "^3.5.3"
+ vue "^3.3.4"
+ vue-router "^4.2.4"
+
+"@vuepress/plugin-theme-data@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/plugin-theme-data/-/plugin-theme-data-2.0.0-beta.67.tgz#e2258b6b71096436dc89629a5a4b82b7bca4d275"
+ integrity sha512-emTj1fvYXM/+WWObmgR0STRwkcDEM9QLD9ZP/JK5hEdt9KQnl8qO9NIzVfP/acgqbxFJQVvsmMSruXXknN68FQ==
+ dependencies:
+ "@vue/devtools-api" "^6.5.0"
+ "@vuepress/client" "2.0.0-beta.67"
+ "@vuepress/core" "2.0.0-beta.67"
+ "@vuepress/shared" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ vue "^3.3.4"
+
+"@vuepress/shared@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-beta.67.tgz#fb9abc662904117a97c26004aa436f1f2aa02263"
+ integrity sha512-gm8/6oAnd0Jh8g9xB89S+g8XJxt30QmeXK79J2Nwcbgy88CZnYbZssU1noyxFt4cHDX8wpUf8V5I388/dfHfoQ==
+ dependencies:
+ "@mdit-vue/types" "^0.12.0"
+ "@vue/shared" "^3.3.4"
+
+"@vuepress/theme-default@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/theme-default/-/theme-default-2.0.0-beta.67.tgz#815acbbcdf12bfedef1cf916e5cbbfa33ad44b0c"
+ integrity sha512-t8wfKaf/WUAifcKTYfnpsUxTVF5C4LUSiX2DH+JTt0lB/bv4SKQstuZtLvLiV9C4q2ekjGpitaW85T4KDnshug==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.67"
+ "@vuepress/core" "2.0.0-beta.67"
+ "@vuepress/plugin-active-header-links" "2.0.0-beta.67"
+ "@vuepress/plugin-back-to-top" "2.0.0-beta.67"
+ "@vuepress/plugin-container" "2.0.0-beta.67"
+ "@vuepress/plugin-external-link-icon" "2.0.0-beta.67"
+ "@vuepress/plugin-git" "2.0.0-beta.67"
+ "@vuepress/plugin-medium-zoom" "2.0.0-beta.67"
+ "@vuepress/plugin-nprogress" "2.0.0-beta.67"
+ "@vuepress/plugin-palette" "2.0.0-beta.67"
+ "@vuepress/plugin-prismjs" "2.0.0-beta.67"
+ "@vuepress/plugin-theme-data" "2.0.0-beta.67"
+ "@vuepress/shared" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ "@vueuse/core" "^10.4.1"
+ sass "^1.66.1"
+ sass-loader "^13.3.2"
+ vue "^3.3.4"
+ vue-router "^4.2.4"
+
+"@vuepress/utils@2.0.0-beta.67":
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-beta.67.tgz#16bcc4bb5a3db270f205ca7b809c178d6774d9fa"
+ integrity sha512-wCK0uggm4gXroy7UkS1u8wDQmD4b0L6Gjqd/1PZTDhNlMLsrjBx7lqqoIKqarMdB2wmDLroPJcC9otvCz2oQug==
+ dependencies:
+ "@types/debug" "^4.1.8"
+ "@types/fs-extra" "^11.0.1"
+ "@types/hash-sum" "^1.0.0"
+ "@vuepress/shared" "2.0.0-beta.67"
+ debug "^4.3.4"
+ fs-extra "^11.1.1"
+ globby "^13.2.2"
+ hash-sum "^2.0.0"
+ ora "^7.0.1"
+ picocolors "^1.0.0"
+ upath "^2.0.1"
+
+"@vueuse/core@^10.4.1":
+ version "10.4.1"
+ resolved "https://registry.npmjs.org/@vueuse/core/-/core-10.4.1.tgz#fc2c8a83a571c207aaedbe393b22daa6d35123f2"
+ integrity sha512-DkHIfMIoSIBjMgRRvdIvxsyboRZQmImofLyOHADqiVbQVilP8VVHDhBX2ZqoItOgu7dWa8oXiNnScOdPLhdEXg==
+ dependencies:
+ "@types/web-bluetooth" "^0.0.17"
+ "@vueuse/metadata" "10.4.1"
+ "@vueuse/shared" "10.4.1"
+ vue-demi ">=0.14.5"
+
+"@vueuse/metadata@10.4.1":
+ version "10.4.1"
+ resolved "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.4.1.tgz#9d2ff5c67abf17a8c07865c2413fbd0e92f7b7d7"
+ integrity sha512-2Sc8X+iVzeuMGHr6O2j4gv/zxvQGGOYETYXEc41h0iZXIRnRbJZGmY/QP8dvzqUelf8vg0p/yEA5VpCEu+WpZg==
+
+"@vueuse/shared@10.4.1":
+ version "10.4.1"
+ resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-10.4.1.tgz#d5ce33033c156efb60664b5d6034d6cd4e2f530c"
+ integrity sha512-vz5hbAM4qA0lDKmcr2y3pPdU+2EVw/yzfRsBdu+6+USGa4PxqSQRYIUC9/NcT06y+ZgaTsyURw2I9qOFaaXHAg==
+ dependencies:
+ vue-demi ">=0.14.5"
+
+ansi-regex@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+ integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+
+anymatch@~3.1.2:
+ version "3.1.3"
+ resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+ integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+autoprefixer@^10.4.15:
+ version "10.4.15"
+ resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz#a1230f4aeb3636b89120b34a1f513e2f6834d530"
+ integrity sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==
+ dependencies:
+ browserslist "^4.21.10"
+ caniuse-lite "^1.0.30001520"
+ fraction.js "^4.2.0"
+ normalize-range "^0.1.2"
+ picocolors "^1.0.0"
+ postcss-value-parser "^4.2.0"
+
+balloon-css@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/balloon-css/-/balloon-css-1.2.0.tgz#53d3fb4051264a278a58713bed6865845dbcaf4b"
+ integrity sha512-urXwkHgwp6GsXVF+it01485Z2Cj4pnW02ICnM0TemOlkKmCNnDLmyy+ZZiRXBpwldUXO+aRNr7Hdia4CBvXJ5A==
+
+base64-js@^1.3.1:
+ version "1.5.1"
+ resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+binary-extensions@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+ integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+bl@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273"
+ integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==
+ dependencies:
+ buffer "^6.0.3"
+ inherits "^2.0.4"
+ readable-stream "^3.4.0"
+
+boolbase@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
+
+braces@^3.0.2, braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+browserslist@^4.21.10:
+ version "4.21.10"
+ resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0"
+ integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==
+ dependencies:
+ caniuse-lite "^1.0.30001517"
+ electron-to-chromium "^1.4.477"
+ node-releases "^2.0.13"
+ update-browserslist-db "^1.0.11"
+
+buffer@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
+ integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.2.1"
+
+cac@^6.7.14:
+ version "6.7.14"
+ resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959"
+ integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==
+
+caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001520:
+ version "1.0.30001653"
+ resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz"
+ integrity sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==
+
+chalk@^5.0.0, chalk@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385"
+ integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==
+
+cheerio-select@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4"
+ integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==
+ dependencies:
+ boolbase "^1.0.0"
+ css-select "^5.1.0"
+ css-what "^6.1.0"
+ domelementtype "^2.3.0"
+ domhandler "^5.0.3"
+ domutils "^3.0.1"
+
+cheerio@1.0.0-rc.12:
+ version "1.0.0-rc.12"
+ resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683"
+ integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==
+ dependencies:
+ cheerio-select "^2.1.0"
+ dom-serializer "^2.0.0"
+ domhandler "^5.0.3"
+ domutils "^3.0.1"
+ htmlparser2 "^8.0.1"
+ parse5 "^7.0.0"
+ parse5-htmlparser2-tree-adapter "^7.0.0"
+
+"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3:
+ version "3.5.3"
+ resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+ integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+cli-cursor@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea"
+ integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==
+ dependencies:
+ restore-cursor "^4.0.0"
+
+cli-spinners@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db"
+ integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==
+
+connect-history-api-fallback@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8"
+ integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==
+
+cross-spawn@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+css-select@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
+ integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
+ dependencies:
+ boolbase "^1.0.0"
+ css-what "^6.1.0"
+ domhandler "^5.0.2"
+ domutils "^3.0.1"
+ nth-check "^2.0.1"
+
+css-what@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
+ integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
+
+csstype@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
+ integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
+
+dayjs@^1.11.9:
+ version "1.11.9"
+ resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz#9ca491933fadd0a60a2c19f6c237c03517d71d1a"
+ integrity sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==
+
+debug@^4.3.4:
+ version "4.3.4"
+ resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ dependencies:
+ ms "2.1.2"
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+dom-serializer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
+ integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
+ dependencies:
+ domelementtype "^2.3.0"
+ domhandler "^5.0.2"
+ entities "^4.2.0"
+
+domelementtype@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
+ integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+
+domhandler@^5.0.2, domhandler@^5.0.3:
+ version "5.0.3"
+ resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
+ integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
+ dependencies:
+ domelementtype "^2.3.0"
+
+domutils@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
+ integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
+ dependencies:
+ dom-serializer "^2.0.0"
+ domelementtype "^2.3.0"
+ domhandler "^5.0.3"
+
+eastasianwidth@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+ integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
+electron-to-chromium@^1.4.477:
+ version "1.4.508"
+ resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.508.tgz#5641ff2f5ba11df4bd960fe6a2f9f70aa8b9af96"
+ integrity sha512-FFa8QKjQK/A5QuFr2167myhMesGrhlOBD+3cYNxO9/S4XzHEXesyTD/1/xF644gC8buFPz3ca6G1LOQD0tZrrg==
+
+emoji-regex@^10.2.1:
+ version "10.2.1"
+ resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz#a41c330d957191efd3d9dfe6e1e8e1e9ab048b3f"
+ integrity sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==
+
+entities@^4.2.0, entities@^4.4.0:
+ version "4.5.0"
+ resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
+ integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+
+entities@~3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4"
+ integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==
+
+envinfo@^7.10.0:
+ version "7.10.0"
+ resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13"
+ integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==
+
+esbuild@^0.18.10, esbuild@~0.18.20:
+ version "0.18.20"
+ resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6"
+ integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==
+ optionalDependencies:
+ "@esbuild/android-arm" "0.18.20"
+ "@esbuild/android-arm64" "0.18.20"
+ "@esbuild/android-x64" "0.18.20"
+ "@esbuild/darwin-arm64" "0.18.20"
+ "@esbuild/darwin-x64" "0.18.20"
+ "@esbuild/freebsd-arm64" "0.18.20"
+ "@esbuild/freebsd-x64" "0.18.20"
+ "@esbuild/linux-arm" "0.18.20"
+ "@esbuild/linux-arm64" "0.18.20"
+ "@esbuild/linux-ia32" "0.18.20"
+ "@esbuild/linux-loong64" "0.18.20"
+ "@esbuild/linux-mips64el" "0.18.20"
+ "@esbuild/linux-ppc64" "0.18.20"
+ "@esbuild/linux-riscv64" "0.18.20"
+ "@esbuild/linux-s390x" "0.18.20"
+ "@esbuild/linux-x64" "0.18.20"
+ "@esbuild/netbsd-x64" "0.18.20"
+ "@esbuild/openbsd-x64" "0.18.20"
+ "@esbuild/sunos-x64" "0.18.20"
+ "@esbuild/win32-arm64" "0.18.20"
+ "@esbuild/win32-ia32" "0.18.20"
+ "@esbuild/win32-x64" "0.18.20"
+
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+estree-walker@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
+ integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
+
+execa@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c"
+ integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==
+ dependencies:
+ cross-spawn "^7.0.3"
+ get-stream "^8.0.1"
+ human-signals "^5.0.0"
+ is-stream "^3.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^5.1.0"
+ onetime "^6.0.0"
+ signal-exit "^4.1.0"
+ strip-final-newline "^3.0.0"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==
+ dependencies:
+ is-extendable "^0.1.0"
+
+fast-glob@^3.3.0:
+ version "3.3.1"
+ resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4"
+ integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fastq@^1.6.0:
+ version "1.15.0"
+ resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
+ integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
+ dependencies:
+ reusify "^1.0.4"
+
+fflate@^0.8.0:
+ version "0.8.0"
+ resolved "https://registry.npmjs.org/fflate/-/fflate-0.8.0.tgz#f93ad1dcbe695a25ae378cf2386624969a7cda32"
+ integrity sha512-FAdS4qMuFjsJj6XHbBaZeXOgaypXp8iw/Tpyuq/w3XA41jjLHT8NPA+n7czH/DDhdncq0nAyDZmPeWXh2qmdIg==
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+fraction.js@^4.2.0:
+ version "4.3.6"
+ resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz#e9e3acec6c9a28cf7bc36cbe35eea4ceb2c5c92d"
+ integrity sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==
+
+fs-extra@^11.1.1:
+ version "11.1.1"
+ resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d"
+ integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fsevents@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+get-stream@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2"
+ integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==
+
+glob-parent@^5.1.2, glob-parent@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+globby@^13.2.2:
+ version "13.2.2"
+ resolved "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592"
+ integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==
+ dependencies:
+ dir-glob "^3.0.1"
+ fast-glob "^3.3.0"
+ ignore "^5.2.4"
+ merge2 "^1.4.1"
+ slash "^4.0.0"
+
+graceful-fs@^4.1.6, graceful-fs@^4.2.0:
+ version "4.2.11"
+ resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+gray-matter@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798"
+ integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==
+ dependencies:
+ js-yaml "^3.13.1"
+ kind-of "^6.0.2"
+ section-matter "^1.0.0"
+ strip-bom-string "^1.0.0"
+
+hash-sum@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a"
+ integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==
+
+htmlparser2@^8.0.1:
+ version "8.0.2"
+ resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21"
+ integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==
+ dependencies:
+ domelementtype "^2.3.0"
+ domhandler "^5.0.3"
+ domutils "^3.0.1"
+ entities "^4.4.0"
+
+human-signals@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28"
+ integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==
+
+ieee754@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+ignore@^5.2.4:
+ version "5.2.4"
+ resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
+ integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
+
+immutable@^4.0.0:
+ version "4.3.4"
+ resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f"
+ integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==
+
+inherits@^2.0.3, inherits@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-extendable@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-glob@^4.0.1, is-glob@~4.0.1:
+ version "4.0.3"
+ resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-interactive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90"
+ integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
+ integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
+
+is-unicode-supported@^1.1.0, is-unicode-supported@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714"
+ integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+js-yaml@^3.13.1:
+ version "3.14.1"
+ resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+ integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsonfile@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+ integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ dependencies:
+ universalify "^2.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.3"
+ resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+lilconfig@^2.0.5:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
+ integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
+
+linkify-it@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz#01f1d5e508190d06669982ba31a7d9f56a5751ec"
+ integrity sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==
+ dependencies:
+ uc.micro "^1.0.1"
+
+log-symbols@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93"
+ integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==
+ dependencies:
+ chalk "^5.0.0"
+ is-unicode-supported "^1.1.0"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+magic-string@^0.30.0:
+ version "0.30.3"
+ resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz#403755dfd9d6b398dfa40635d52e96c5ac095b85"
+ integrity sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==
+ dependencies:
+ "@jridgewell/sourcemap-codec" "^1.4.15"
+
+markdown-it-anchor@^8.6.7:
+ version "8.6.7"
+ resolved "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz#ee6926daf3ad1ed5e4e3968b1740eef1c6399634"
+ integrity sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==
+
+markdown-it-container@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/markdown-it-container/-/markdown-it-container-3.0.0.tgz#1d19b06040a020f9a827577bb7dbf67aa5de9a5b"
+ integrity sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==
+
+markdown-it-emoji@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz#cd42421c2fda1537d9cc12b9923f5c8aeb9029c8"
+ integrity sha512-zLftSaNrKuYl0kR5zm4gxXjHaOI3FAOEaloKmRA5hijmJZvSjmxcokOLlzycb/HXlUFWzXqpIEoyEMCE4i9MvQ==
+
+markdown-it-task-lists@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz#f68f4d2ac2bad5a2c373ba93081a1a6848417088"
+ integrity sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==
+
+markdown-it@^13.0.1:
+ version "13.0.1"
+ resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz#c6ecc431cacf1a5da531423fc6a42807814af430"
+ integrity sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==
+ dependencies:
+ argparse "^2.0.1"
+ entities "~3.0.1"
+ linkify-it "^4.0.1"
+ mdurl "^1.0.1"
+ uc.micro "^1.0.5"
+
+mdurl@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
+ integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==
+
+medium-zoom@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.0.8.tgz#2bd1fbcf2961fa7b0e318fe284462aa9b8608ed2"
+ integrity sha512-CjFVuFq/IfrdqesAXfg+hzlDKu6A2n80ZIq0Kl9kWjoHh9j1N9Uvk5X0/MmN0hOfm5F9YBswlClhcwnmtwz7gA==
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.3.0, merge2@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micromatch@^4.0.4:
+ version "4.0.5"
+ resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+ integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+ dependencies:
+ braces "^3.0.2"
+ picomatch "^2.3.1"
+
+mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+mimic-fn@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
+ integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+nanoid@^3.3.6:
+ version "3.3.6"
+ resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
+ integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
+
+neo-async@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+ integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+node-releases@^2.0.13:
+ version "2.0.13"
+ resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d"
+ integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
+
+npm-run-path@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00"
+ integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==
+ dependencies:
+ path-key "^4.0.0"
+
+nth-check@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+ integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+ dependencies:
+ boolbase "^1.0.0"
+
+onetime@^5.1.0:
+ version "5.1.2"
+ resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+ integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+onetime@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4"
+ integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==
+ dependencies:
+ mimic-fn "^4.0.0"
+
+ora@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz#cdd530ecd865fe39e451a0e7697865669cb11930"
+ integrity sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==
+ dependencies:
+ chalk "^5.3.0"
+ cli-cursor "^4.0.0"
+ cli-spinners "^2.9.0"
+ is-interactive "^2.0.0"
+ is-unicode-supported "^1.3.0"
+ log-symbols "^5.1.0"
+ stdin-discarder "^0.1.0"
+ string-width "^6.1.0"
+ strip-ansi "^7.1.0"
+
+parse5-htmlparser2-tree-adapter@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1"
+ integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==
+ dependencies:
+ domhandler "^5.0.2"
+ parse5 "^7.0.0"
+
+parse5@^7.0.0:
+ version "7.1.2"
+ resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32"
+ integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
+ dependencies:
+ entities "^4.4.0"
+
+path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-key@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
+ integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+picocolors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+ integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+postcss-load-config@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd"
+ integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==
+ dependencies:
+ lilconfig "^2.0.5"
+ yaml "^2.1.1"
+
+postcss-value-parser@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+postcss@^8.1.10, postcss@^8.4.27, postcss@^8.4.28:
+ version "8.4.29"
+ resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz#33bc121cf3b3688d4ddef50be869b2a54185a1dd"
+ integrity sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==
+ dependencies:
+ nanoid "^3.3.6"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
+prismjs@^1.29.0:
+ version "1.29.0"
+ resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12"
+ integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+readable-stream@^3.4.0:
+ version "3.6.2"
+ resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+ integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
+restore-cursor@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9"
+ integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rollup@^3.27.1, rollup@^3.28.1:
+ version "3.28.1"
+ resolved "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz#fb44aa6d5e65c7e13fd5bcfff266d0c4ea9ba433"
+ integrity sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+safe-buffer@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+sass-loader@^13.3.2:
+ version "13.3.2"
+ resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz#460022de27aec772480f03de17f5ba88fa7e18c6"
+ integrity sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==
+ dependencies:
+ neo-async "^2.6.2"
+
+sass@^1.66.1:
+ version "1.66.1"
+ resolved "https://registry.npmjs.org/sass/-/sass-1.66.1.tgz#04b51c4671e4650aa393740e66a4e58b44d055b1"
+ integrity sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==
+ dependencies:
+ chokidar ">=3.0.0 <4.0.0"
+ immutable "^4.0.0"
+ source-map-js ">=0.6.2 <2.0.0"
+
+section-matter@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167"
+ integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==
+ dependencies:
+ extend-shallow "^2.0.1"
+ kind-of "^6.0.0"
+
+semver@^7.5.4:
+ version "7.5.4"
+ resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
+ integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
+ dependencies:
+ lru-cache "^6.0.0"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+signal-exit@^3.0.2:
+ version "3.0.7"
+ resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
+ integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+
+signal-exit@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
+ integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+
+slash@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
+ integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+
+"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+ integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+
+stdin-discarder@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz#22b3e400393a8e28ebf53f9958f3880622efde21"
+ integrity sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==
+ dependencies:
+ bl "^5.0.0"
+
+string-width@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz#96488d6ed23f9ad5d82d13522af9e4c4c3fd7518"
+ integrity sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==
+ dependencies:
+ eastasianwidth "^0.2.0"
+ emoji-regex "^10.2.1"
+ strip-ansi "^7.0.1"
+
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+strip-ansi@^7.0.1, strip-ansi@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+ integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+ dependencies:
+ ansi-regex "^6.0.1"
+
+strip-bom-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92"
+ integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==
+
+strip-final-newline@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
+ integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
+
+striptags@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz#cc74a137db2de8b0b9a370006334161f7dd67052"
+ integrity sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+ts-debounce@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/ts-debounce/-/ts-debounce-4.0.0.tgz#33440ef64fab53793c3d546a8ca6ae539ec15841"
+ integrity sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==
+
+uc.micro@^1.0.1, uc.micro@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
+ integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
+
+universalify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
+ integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+
+upath@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b"
+ integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==
+
+update-browserslist-db@^1.0.11:
+ version "1.0.11"
+ resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940"
+ integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
+ dependencies:
+ escalade "^3.1.1"
+ picocolors "^1.0.0"
+
+util-deprecate@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+vite@~4.4.9:
+ version "4.4.9"
+ resolved "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz#1402423f1a2f8d66fd8d15e351127c7236d29d3d"
+ integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==
+ dependencies:
+ esbuild "^0.18.10"
+ postcss "^8.4.27"
+ rollup "^3.27.1"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+vue-demi@>=0.14.5:
+ version "0.14.6"
+ resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz#dc706582851dc1cdc17a0054f4fec2eb6df74c92"
+ integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==
+
+vue-router@^4.2.4:
+ version "4.2.4"
+ resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.2.4.tgz#382467a7e2923e6a85f015d081e1508052c191b9"
+ integrity sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==
+ dependencies:
+ "@vue/devtools-api" "^6.5.0"
+
+vue@^3.3.4:
+ version "3.3.4"
+ resolved "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz#8ed945d3873667df1d0fcf3b2463ada028f88bd6"
+ integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==
+ dependencies:
+ "@vue/compiler-dom" "3.3.4"
+ "@vue/compiler-sfc" "3.3.4"
+ "@vue/runtime-dom" "3.3.4"
+ "@vue/server-renderer" "3.3.4"
+ "@vue/shared" "3.3.4"
+
+vuepress-plugin-copy-code2@2.0.0-beta.237:
+ version "2.0.0-beta.237"
+ resolved "https://registry.npmjs.org/vuepress-plugin-copy-code2/-/vuepress-plugin-copy-code2-2.0.0-beta.237.tgz#686097f7f9ae8c2966a88b9219cebae82426c6a0"
+ integrity sha512-k8HhFrLLxFc81AURJQh4pXbAlRE4OdF5MflcCSCi4R104A+vNs2DvvkmQHtNTiLyXmrciS8oyS3LwUdRvilhxQ==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.67"
+ "@vuepress/shared" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ "@vueuse/core" "^10.4.1"
+ balloon-css "^1.2.0"
+ vue "^3.3.4"
+ vue-router "^4.2.4"
+ vuepress-plugin-sass-palette "2.0.0-beta.237"
+ vuepress-shared "2.0.0-beta.237"
+
+vuepress-plugin-sass-palette@2.0.0-beta.237:
+ version "2.0.0-beta.237"
+ resolved "https://registry.npmjs.org/vuepress-plugin-sass-palette/-/vuepress-plugin-sass-palette-2.0.0-beta.237.tgz#6098f2bbf5260c83a79c54f26f469c75085f4492"
+ integrity sha512-Z0XpgRpYBp1ulL1zYk+H7XKnFU37HxTRGXFJLOkgEiTmVluQqYxH1pCrWDMvTkwoaEn+xOQytQgCW8S+5jrH0w==
+ dependencies:
+ "@vuepress/shared" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ chokidar "^3.5.3"
+ sass "^1.66.1"
+ vuepress-shared "2.0.0-beta.237"
+
+vuepress-shared@2.0.0-beta.237:
+ version "2.0.0-beta.237"
+ resolved "https://registry.npmjs.org/vuepress-shared/-/vuepress-shared-2.0.0-beta.237.tgz#526e9cbd5d9fb1e2c5ec8183875aa2ebbaf27811"
+ integrity sha512-R4lGkX0GD1yUyK0iDrWIZvJbuoGyi9Z41gPz3jFexJM4ojjirkuvLy6DuMwFCi80GKJlrfWq19Tpeo5z5foPBA==
+ dependencies:
+ "@vuepress/client" "2.0.0-beta.67"
+ "@vuepress/shared" "2.0.0-beta.67"
+ "@vuepress/utils" "2.0.0-beta.67"
+ "@vueuse/core" "^10.4.1"
+ cheerio "1.0.0-rc.12"
+ dayjs "^1.11.9"
+ execa "^8.0.1"
+ fflate "^0.8.0"
+ gray-matter "^4.0.3"
+ semver "^7.5.4"
+ striptags "^3.2.0"
+ vue "^3.3.4"
+ vue-router "^4.2.4"
+
+vuepress-vite@2.0.0-beta.67:
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/vuepress-vite/-/vuepress-vite-2.0.0-beta.67.tgz#24db0ce1ba96e1a50c14883970329f933b9d6418"
+ integrity sha512-oaak2RPKBP0LeaDpDntlsQWLklCBf2vdeceXtPSLV2IzL/wtMHs5DQ/f7zXxCzvku3h/FIstmgoKq/vC0TvHkA==
+ dependencies:
+ "@vuepress/bundler-vite" "2.0.0-beta.67"
+ "@vuepress/cli" "2.0.0-beta.67"
+ "@vuepress/core" "2.0.0-beta.67"
+ "@vuepress/theme-default" "2.0.0-beta.67"
+ vue "^3.3.4"
+
+vuepress@2.0.0-beta.67:
+ version "2.0.0-beta.67"
+ resolved "https://registry.npmjs.org/vuepress/-/vuepress-2.0.0-beta.67.tgz#eacf63d6d14f2364bd8043f13eba67234319cd53"
+ integrity sha512-931pKDOph20RKMLZAH5YYlMz+nfx9jcOQio1Gxk0pB7DwuSxAVFxPv2dbIUP4E/4uWOkLppRhLYcrOoxEbVYzA==
+ dependencies:
+ vuepress-vite "2.0.0-beta.67"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yaml@^2.1.1:
+ version "2.3.2"
+ resolved "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144"
+ integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==