1. 鉴权说明
1.1 必需参数
通过 Query Strings 传入
| 参数 | 类型 | 说明 |
|---|---|---|
access_key | string | 用户登录凭证, 绑定到具体账号 |
appkey | string | 应用标识, 固定值 1d8b6e7d45233436 |
1.2 占位参数(需存在, 但是b站实际没有使用)
| 参数 | 类型 | 说明 |
|---|---|---|
ts | string | 时间戳占位. 缺失则 CDN 返回 412 |
sign | string | 签名占位, 实际上并不校验 |
1.3 请求头
| Header | 说明 |
|---|---|
User-Agent | 除python-requests 之外任意均可 |
2. Tab 方式获取收藏视频列表
请求: GET https://api.bilibili.com/x/v3/fav/tab/fav
Query 参数
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
tab_id | integer | 是 | 101: 全部收藏内容;102: 仅视频; 103: 仅专栏 |
start_oid | integer | 是 | ?, 首页传 0,后续传 next_oid |
start_otype | integer | 是 | ?,首页传 0,后续传 next_otype |
start_score | integer | 是 | ?,首页传 0,后续传 next_score |
page_type | integer | 是 | 固定传 1 |
响应
{
"code": 0,
"message": "OK",
"data": {
"list": [ / Item[] / ],
"count": 1273, // 有效内容总数(不含失效)
"has_more": true, // 是否有下一页
"next_oid": 115813726165518,// 下一页的 start_oid
"next_otype": 2, // 下一页的 start_otype
"next_score": 1770479068, // 下一页的 start_score
"has_invalid": true // 列表中是否包含失效内容
}
}
3. 按收藏夹获取收藏视频列表
请求
GET https://api.bilibili.com/x/v3/fav/folder/resources
Query 参数
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
media_id | integer | 是 | 收藏夹 ID |
pn | integer | 是 | 页码,从 1 开始 |
ps | integer | 否 | 每页条数,默认 20,最大 50 |
响应
{
"code": 0,
"message": "OK",
"data": {
"list": [ / Item[] / ],
"total": 1517, // 收藏夹内容总数(含失效)
"has_more": true, // 是否有下一页
"has_invalid": true // 列表中是否包含失效内容
}
}
示例:
<img width="250" alt="Image" src="https://github.com/user-attachments/assets/b010277b-37b2-4afe-b070-772a7bc7d459" /><img width="540" alt="Image" src="https://github.com/user-attachments/assets/46a251e5-2e33-476a-8667-70eb2c075ba5" />
移动端收藏夹 API 不返回发布时间和收藏时间, 所以还得结合 web 端.
问题:
1. 这两个接口每次返回的数据似乎都会有所波动, 可能多请求几次才能获取完整的收藏夹内容
2. 移动端的 access_key 有什么获取的好办法吗? 我记得去年初次尝试的时候, 拿 tv 端的 access_key 也是能返回数据的, 但是现在会提示鉴权失败