commit
1f6d4c9498
2
.github/FUNDING.yml
vendored
2
.github/FUNDING.yml
vendored
@ -9,4 +9,4 @@ community_bridge: # Replace with a single Community Bridge project-name e.g., cl
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
custom: https://afdian.net/@ShakaiAneE
|
||||
custom: https://afdian.com/@ShakaiAneE
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
[bilibili-API-collect](https://github.com/SocialSisterYi/bilibili-API-collect) 项目(简称 BAC 或 b-a-c)是一个仅用于学习研究、社区开源、公益性质的 [B 站(哔哩哔哩)](https://www.bilibili.com/)API(应用程序接口)文档,使用 [CC-BY-NC 4.0 协议](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/LICENSE)开源,它将无差别收集整理相关的**主站业务接口**。
|
||||
|
||||
该项目使用 [MarkDown](https://zh.wikipedia.org/zh-cn/Markdown) 语法进行文档书写,按照业务类型及功能以**路径**+**文件**形式索引,任何用户都可通过 Issue、Pull Request 与 Discussion 提供自己分析出的接口地址与使用说明。
|
||||
该项目使用 [Markdown](https://zh.wikipedia.org/zh-cn/Markdown) 语法进行文档书写,按照业务类型及功能以**路径**+**文件**形式索引,任何用户都可通过 Issue、Pull Request 与 Discussion 提供自己分析出的接口地址与使用说明。
|
||||
|
||||
本项目收集的接口类型包括但不限于 REST API、gRPC、WebSocket,文档内统一优先使用安全套接字协议,如 `https`、`securityRpc`、`wss`。
|
||||
|
||||
@ -16,9 +16,9 @@
|
||||
|
||||
提交 Issue 请遵守以下原则:
|
||||
|
||||
1. 标题需要点明 API 的用处,如 `[新增请求] 新增 xx 接口`、`[更新请求] xx 接口地址已失效`、`[更新请求] xx 接口的参数有变化`,切勿仅填写 `补充`、`修复` 等标题
|
||||
1. 标题需要点明 API 的用处, `<title>` 要替换为标题主要内容而不是保留不动,切勿仅填写 `补充`、`修复`,形式良好的标题可以是 `[新增请求] 新增 xx 接口`、`[更新请求] xx 接口地址已失效`、`[更新请求] xx 接口的参数有变化`
|
||||
2. 正文请按照 Issue 模板进行填写,标明 API 来源(Web、Android、iOS、TV 等)、API 类型(REST、gRPC、WebSocket 等)、API 地址
|
||||
3. 详情描述需要提供该 API 的使用场景、请求及响应字段等,可附上原始抓包记录;在更新时还需指出原文档中与最新 API 行为不符之处,并附上已知的最新改动。例如:“在前端页面某地址 / APP 某界面访问某 API(标明地址),它的某参数与文档中不符(标明文档地址)”
|
||||
3. 详情描述需要提供该 API 的使用场景、请求及响应字段等,可附上原始抓包记录 (文本格式优先);在更新时还需指出原文档中与最新 API 行为不符之处,并附上已知的最新改动。例如:“在前端页面某地址 / APP 某界面访问某 API(标明地址),它的某参数与文档中不符(标明文档地址)”
|
||||
|
||||
发起 Discussion 请遵守以下原则:
|
||||
|
||||
@ -69,27 +69,27 @@ Telegram 交流群主要用作 [BAC 项目](https://github.com/SocialSisterYi/bi
|
||||
|
||||
### 路径
|
||||
|
||||
路径层级应当与文档目录一致,以文件夹的形式存放在项目中的 `/docs` 路径下,命名统一使用英文小写,如 `video`、`danmaku`、`comment`
|
||||
路径层级应当与文档目录一致,以文件夹的形式存放在项目中的 `/docs` 路径下,命名统一使用英文小写,如 `video`、`danmaku`、`comment`, 不建议出现 `&` 等特殊字符
|
||||
|
||||
二级、三级路径应当存在二级三级目录,可选添加 `README.md` 以描述该子目录
|
||||
|
||||
### 文件
|
||||
|
||||
各个子接口集整理为 MarkDown(md)文件,命名统一使用英文小写,如 `info.md`、`action.md`、`list.md`
|
||||
各个子接口集整理为 Markdown (.md) 文件,命名统一使用英文小写,如 `info.md`、`action.md`、`list.md`
|
||||
|
||||
文档文件中用于存放相关的接口的说明,如 `video/` 下的 `info.md`,存在 `查询视频基本信息`、`查询视频简介`、`查询视频分P列表` 等内容
|
||||
|
||||
## Markdown 文档内容格式
|
||||
|
||||
文档使用 [Vuepress](https://vuepress.vuejs.org/) 生成,可以使用 [Vuepress md 扩展语法](https://vuepress.vuejs.org/guide/markdown.html)编写
|
||||
文档使用 [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 自动生成
|
||||
**文档头部不需要手写索引**,索引由 VuePress 自动生成
|
||||
|
||||
### 接口说明
|
||||
|
||||
@ -121,7 +121,7 @@ e.g.:
|
||||
|
||||
**请求参数**应在**接口说明**的下方,应注明参数类型 url 参数或正文参数(正文参数应注明 content-type,如 `application/x-www-form-urlencoded` 或 `multipart/form-data`),使用**加粗**语法
|
||||
|
||||
对象的字段及其含义使用**表格**进行整理,表头统一依次为 `参数名`、`类型`、`内容`、`必要性`、`备注`,类型为 `num`、`str`、`bool`、`nums`、`strs`、`file` 等,必要性为 `必要`、`非必要`、`必要 (可选)` 等,表格内每个字段为一行
|
||||
对象的字段及其含义使用**表格**进行整理,表头统一依次为 `参数名`、`类型`、`内容`、`必要性`、`备注`,类型为 `num`、`str`、`bool`、`nums`、`strs`、`file` 等 (未来可能会统一改为基于 TypeScript 的类型系统),必要性为 `必要`、`非必要`、`必要 (可选)` 等,表格内每个字段为一行
|
||||
|
||||
e.g.:
|
||||
|
||||
@ -132,13 +132,13 @@ e.g.:
|
||||
|
||||
**响应正文**应在**请求参数**的下方,接口响应的数据格式应标注,如 `JSON 回复`、`XML 回复`、`ProtoBuf 回复`,使用**加粗**语法
|
||||
|
||||
JSON Object 或 ProtoBuf Message 应以对象的**表格**形式书写,表头为 `根对象` 或 `xx 中的 yy 对象`,若对象位于数组中则为 `xx 数组中的对象`
|
||||
JSON Object 或 ProtoBuf Message 应以对象的**表格**形式书写,表头为 `根对象` 或 `xx 中的 yy 对象` 或 `xx.yy.zz 对象`,若对象位于数组中则为 `xx 数组中的对象` 或 `xx[] 中的对象`
|
||||
|
||||
表头统一依次为 `字段`、`类型`、`内容`、`备注`,类型为 JSON / Protobuf 的标准类型,如 `num`、`str`、`bool`、`obj`、`array`、`null` 等
|
||||
|
||||
不明确定义的字段说明在内容的末尾添加问号,如 `播放数?`;定义尚未明确的字段使用 `(?)` 在内容中占位,并在备注中填写 `作用尚不明确`
|
||||
|
||||
多个对象及数组,使用**遍历树**的顺序进行排列
|
||||
多个对象及数组,使用**遍历树**的顺序进行排列, 若数组中的每一项结构均相同也可以直接省略为像 `xxx 数组中的对象` 这样的格式
|
||||
|
||||
e.g.:
|
||||
|
||||
@ -168,13 +168,13 @@ e.g.:
|
||||
|
||||
**示例**部分位于所有**响应正文**部分下方,需要**加粗**格式,分为请求命令示例与响应体示例两部分
|
||||
|
||||
请求命令示例为一段可测试该接口的 curl 命令或 Python 脚本,使用**代码块**语法书写,命令应当尽可能简短、便于使人阅读
|
||||
请求命令示例为一段可测试该接口的 cURL 命令或某种编程语言的代码,使用**代码块**语法书写,命令应当尽可能简短、便于使人阅读, 代码缩进为 **2** 个 **空格 (U+0020)**
|
||||
|
||||
示例命令中的认证信息应做**脱敏处理**,如 Cookie、Token、access_key 等,可替换为 `xxx` 占位
|
||||
|
||||
示例命令前后可以适当添加一些文字说明
|
||||
|
||||
响应体示例为一段格式化后的 JSON 或 ProtoBuf Message,使用**代码块**语法书写,并使用 `<details>` 标签进行折叠
|
||||
响应体示例为一段格式化后的 JSON 或 ProtoBuf Message,使用**代码块**语法书写,并使用 `<details>` 标签进行折叠, 仍一律使用 **2** 个 **空格** 进行缩进
|
||||
|
||||
e.g.:
|
||||
|
||||
@ -258,6 +258,26 @@ message Author {
|
||||
|
||||
## 文档提交
|
||||
|
||||
使用 Pull Request 将修改后的文档提交到 `master` 分支,标题需写明提交的内容
|
||||
### 拉取 (Pull) 与 提交 (Commit)
|
||||
|
||||
(TODO)
|
||||
本项目仓库仅托管于 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 后出现重复相同提交的问题
|
||||
|
||||
28
README.md
28
README.md
@ -56,7 +56,7 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC,少部分接
|
||||
|
||||
1. 文档二级目录尚未完成
|
||||
2. 部分文档较旧,修改与更新没有跟进
|
||||
3. 目前文档使用 markdown 语法编写,不易生成编程语言的 SDK,详见 [#604](https://github.com/SocialSisterYi/bilibili-API-collect/issues/604)
|
||||
3. 目前文档使用 Markdown 语法编写,不易生成编程语言的 SDK,详见 [#604](https://github.com/SocialSisterYi/bilibili-API-collect/issues/604)
|
||||
|
||||
更多信息请浏览 [贡献指南](CONTRIBUTING.md)
|
||||
|
||||
@ -100,7 +100,7 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC,少部分接
|
||||
- [x] [状态数](docs/user/status_number.md)
|
||||
- [x] [关系](docs/user/relation.md)
|
||||
- [ ] [个人空间](docs/user/space.md)
|
||||
- [x] [检查昵称是否可注册](docs/user/check_nickname.md)
|
||||
- [x] ~~[检查昵称是否可注册](docs/user/check_nickname.md)~~ (已失效)
|
||||
- [x] [用户注册](docs/user/register.md)
|
||||
- [x] [用户认证类型一览](docs/user/official_role.md)
|
||||
- [ ] [加入老粉计划](docs/user/contract.md)
|
||||
@ -114,7 +114,7 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC,少部分接
|
||||
- [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/status_number.md)~~ (已失效)
|
||||
- [x] [快照](docs/video/snapshot.md)
|
||||
- [x] [点赞 & 投币 & 收藏 & 分享](docs/video/action.md)
|
||||
- [ ] [TAG](docs/video/tags.md)
|
||||
@ -221,16 +221,16 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC,少部分接
|
||||
- [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/history&toview)
|
||||
- [x] [历史记录](docs/history&toview/history.md)
|
||||
- [x] [稍后再看](docs/history&toview/toview.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)
|
||||
@ -333,7 +333,7 @@ WeChat & Alipay:
|
||||
|
||||
<img src="./assets/img/sponsorQR.jpg" width="300" height="300" />
|
||||
|
||||
OR Aifadian:[https://afdian.net/@ShakaiAneE](https://afdian.net/@ShakaiAneE)
|
||||
OR Aifadian:[https://afdian.com/@ShakaiAneE](https://afdian.com/@ShakaiAneE)
|
||||
|
||||
## 🔗相关项目推荐
|
||||
|
||||
|
||||
@ -134,7 +134,7 @@ curl -G 'https://app.bilibili.com/x/v2/splash/brand/list' \
|
||||
|
||||
如id=11的图片为:
|
||||
|
||||

|
||||
<img src="https://i0.hdslb.com/bfs/archive/fe737da5cdedf9dad038e5fd30e957be8a063bc2.png" referrerpolicy="no-referrer" />
|
||||
|
||||
|
||||
## 获取APP端开屏幕广告信息
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
# 相簿操作
|
||||
|
||||
<details>
|
||||
<summary>功能已下线</summary>
|
||||
|
||||
## ~~点赞相簿~~
|
||||
|
||||
> https://api.vc.bilibili.com/link_draw/v2/Vote/operate
|
||||
@ -168,3 +171,4 @@ curl 'https://api.vc.bilibili.com/user_plus/v1/Fav/delete' \
|
||||
```
|
||||
|
||||
</details>
|
||||
</details>
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
# 相簿活动列表
|
||||
|
||||
<details>
|
||||
<summary>功能已下线</summary>
|
||||
|
||||
## 获取相簿热门活动列表
|
||||
|
||||
> https://api.vc.bilibili.com/photo_activity/v2/Activity/list
|
||||
@ -146,3 +149,4 @@ curl -G 'https://api.vc.bilibili.com/photo_activity/v2/Activity/list' \
|
||||
```
|
||||
|
||||
</details>
|
||||
</details>
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
# 相簿基本信息
|
||||
|
||||
<details>
|
||||
<summary>功能已下线</summary>
|
||||
|
||||
## 获取相簿详细信息
|
||||
|
||||
>https://api.vc.bilibili.com/link_draw/v1/doc/detail
|
||||
@ -243,3 +246,4 @@ curl -G 'https://api.vc.bilibili.com/link_draw/v1/doc/detail' \
|
||||
```
|
||||
|
||||
</details>
|
||||
</details>
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
# 相簿列表
|
||||
|
||||
<details>
|
||||
<summary>功能已下线</summary>
|
||||
|
||||
## 获取画友首页列表
|
||||
|
||||
> https://api.vc.bilibili.com/link_draw/v2/Doc/index
|
||||
@ -2432,3 +2435,4 @@ curl -G 'https://api.vc.bilibili.com/link_draw/v1/doc/others' \
|
||||
```
|
||||
|
||||
</details>
|
||||
</details>
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
# 相簿推荐作者
|
||||
|
||||
<details>
|
||||
<summary>功能已下线</summary>
|
||||
|
||||
## 获取摄影推荐作者
|
||||
|
||||
> https://api.vc.bilibili.com/link_draw/v2/Photo/uper
|
||||
@ -163,4 +166,4 @@ curl -G 'https://api.vc.bilibili.com/link_draw/v2/Doc/drawer' \
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
</details>
|
||||
|
||||
@ -384,7 +384,7 @@ func main() {
|
||||
|
||||
|
||||
### C++
|
||||
```c++
|
||||
```cpp
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <print>
|
||||
@ -497,9 +497,7 @@ int main() {
|
||||
|
||||
### 编程实现
|
||||
|
||||
使用 [Python](#Python) [C](#C) [TypeScript](#TypeScript) [Java](#Java) [Kotlin](#Kotlin) [Golang](#Golang) [Rust](#Rust) 等语言作为示例,欢迎社区提交更多例程
|
||||
|
||||
注: 新算法只提供了 [Python](#Python) 和 [Rust](#Rust) 版本
|
||||
使用 Python C TypeScript Java Kotlin Golang Rust 等语言作为示例,欢迎社区提交更多例程
|
||||
|
||||
#### Python
|
||||
|
||||
|
||||
@ -34,32 +34,31 @@
|
||||
|
||||
https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg
|
||||
|
||||

|
||||
<img src="https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg" referrerpolicy="no-referrer" />
|
||||
|
||||
高度限制为100
|
||||
|
||||
https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@100h
|
||||
|
||||

|
||||
<img src="https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@100h" referrerpolicy="no-referrer" />
|
||||
|
||||
宽度限制为100
|
||||
|
||||
https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@100w
|
||||
|
||||

|
||||
<img src="https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@100w" referrerpolicy="no-referrer" />
|
||||
|
||||
转换格式为webp
|
||||
|
||||
https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@.webp
|
||||
|
||||

|
||||
<img src="https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@.webp" referrerpolicy="no-referrer" />
|
||||
|
||||
转换为webp图片质量为1%
|
||||
|
||||
https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@1q.webp
|
||||
|
||||

|
||||
|
||||
<img src="https://i1.hdslb.com/bfs/archive/e5fff1472bad1c0c6bcb3004205f9be23b58ffc0.jpg@1q.webp" referrerpolicy="no-referrer" />
|
||||
</details>
|
||||
|
||||
## avg_color格式说明
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
|
||||
## Demo
|
||||
|
||||
该 Demo 提供 [Python](#Python)、[Java](#Java)、[TS/JS](#TypeScript/JavaScript)、[Swift](#Swift)、[C++](#CplusPlus) 语言例程
|
||||
该 Demo 提供 [Python](#python)、[Java](#java)、[TS/JS](#typescript-javascript)、[Swift](#swift)、[C++](#cplusplus) 语言例程
|
||||
|
||||
使用 appkey = `1d8b6e7d45233436`, appsec = `560c52ccd288fed045859ed18bffd973` 对如下 `params` 参数进行签名
|
||||
|
||||
|
||||
@ -6,12 +6,14 @@
|
||||
|
||||
`v_voucher` 结构为字符串 `voucher_` 尾随一串以 `-` 为分隔符的小写 UUID
|
||||
|
||||
`v_voucher` 可用于申请 captcha 验证码, 根据验证结果使用 `validate` 接口获取 `grisk_id` 作为被风控接口的 `gaia_vtoken` 与 Cookie 中的 `x-bili-gaia-vtoken` 即可恢复正常访问
|
||||
`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`
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
自 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`,如:
|
||||
经持续观察,大部分查询性接口都已经或准备采用 WBI 签名鉴权,请求 WBI 签名鉴权接口时,若签名参数 `w_rid` 与时间戳 `wts` 缺失、错误,会返回 [`v_voucher`](v_voucher.md),如:
|
||||
|
||||
```json
|
||||
{"code":0,"message":"0","ttl":1,"data":{"v_voucher":"voucher_******"}}
|
||||
@ -12,6 +12,8 @@
|
||||
|
||||
细节更新:[#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`
|
||||
@ -30,6 +32,7 @@
|
||||
`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`
|
||||
|
||||
@ -97,9 +100,9 @@
|
||||
}
|
||||
```
|
||||
|
||||
随后按键名升序排序后编码 URL Query,拼接前面得到的 `mixin_key`,如 `bar=514&foo=114&wts=1702204169&zab=1919810ea1db124af3c7062474693fa704f4ff8`,计算其 MD5 即为 `w_rid`。
|
||||
随后按键名升序排序后百分号编码 URL Query,拼接前面得到的 `mixin_key`,如 `bar=514&foo=114&wts=1702204169&zab=1919810ea1db124af3c7062474693fa704f4ff8`,计算其 MD5 即为 `w_rid`。
|
||||
|
||||
需要注意的是:如果参数值含中文或特殊字符等,编码字符字母应当**大写** (部分库会编码为小写字母),空格应当编码为 `%20`(部分库按 `application/x-www-form-urlencoded` 约定编码为 `+`)。
|
||||
需要注意的是:如果参数值含中文或特殊字符等,编码字符字母应当**大写** (部分库会错误编码为小写字母),空格应当编码为 `%20`(部分库按 `application/x-www-form-urlencoded` 约定编码为 `+`), 具体正确行为可参考 [encodeURIComponent 函数](https://tc39.es/ecma262/multipage/global-object.html#sec-encodeuricomponent-uricomponent)
|
||||
|
||||
例如:
|
||||
|
||||
@ -121,7 +124,7 @@
|
||||
|
||||
## Demo
|
||||
|
||||
含 [Python](#python)、[JavaScript](#javascript)、[Golang](#golang)、[C#](#csharp)、[Java](#java)、[Kotlin](#kotlin)、[Swift](#swift)、[C++](#cplusplus)、[Rust](#rust)、[Haskell](#haskell) 语言编写的 Demo 。
|
||||
含 [Python](#python)、[JavaScript](#javascript)、[Golang](#golang)、[C#](#csharp)、[Java](#java)、[Kotlin](#kotlin)、[Swift](#swift)、[C++](#cplusplus)、[Rust](#rust)、[Haskell](#haskell) 语言编写的 Demo
|
||||
|
||||
### Python
|
||||
|
||||
|
||||
@ -610,7 +610,7 @@ curl -G 'https://api.bilibili.com/x/web-interface/view' \
|
||||
|
||||
https://i1.hdslb.com/bfs/archive/ea0dd34bf41e23a68175680a00e3358cd249105f.jpg
|
||||
|
||||

|
||||
<img src="https://i1.hdslb.com/bfs/archive/ea0dd34bf41e23a68175680a00e3358cd249105f.jpg" referrerpolicy="no-referrer" />
|
||||
|
||||
## 获取视频超详细信息(web端)
|
||||
|
||||
|
||||
@ -280,7 +280,7 @@ curl -G 'https://api.bilibili.com/pvideo' \
|
||||
|
||||
示例拼版图片url:http://i0.hdslb.com/bfs/videoshot/49075258.jpg
|
||||
|
||||

|
||||
<img src="https://i0.hdslb.com/bfs/videoshot/49075258.jpg" referrerpolicy="no-referrer" />
|
||||
|
||||
## bin格式截取时间表
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user