feat: 各种接口补充与错误修正 (#1066)

* fix(video/collection.md): unclosed xml tags

* feat(video/report.md): uuid not really random

* feat: b23.tv short link

* feat: login/moral/exp log

* feat: v_voucher

* feat: upload video cover & post

* feat(creativecenter/upload.md): upload octet-stream

* feat(creativecenter/upload.md): update some notes

* feat(clientinfo/ip.md): another from live

* feat: live web heartbeat

* feat: update popular series & precious

* fix(creativecenter/upload.md): mistakes in example

* feat: merge duplicate fav info

* feat(README.md): missing link to webmask

* feat(search/hot.md): word_type

* feat(login/login_action): recovery old api

* feat(video/collection.md):  series operation

* feat: video season operation

* feat: add & mod some links

* feat(search/suggest.md): up to date

* feat: web home header image

* feat(misc/sign/bili_ticket.md): demo for nodejs

* feat(creativecenter/upload.md): x-upos-auth validity period

* feat: add referer & buvid3 to request header

* feat: customer service message heartbeat & upload

* feat(customerservice/msg.md): upload code 1200201

* feat(video/report.md): click/web/h5

* feat(video/report.md): view count desc

* feat: laser2

* feat: wbi_key in bili_ticket

* fix: typo & unclosed XML tags

* feat(misc/sign/v_voucher): cookie x-bili-gaia-vtoken

* feat(search/hot.md): square

* feat(video/status_number.md): fold archive_stat/stat

* feat(fav/info.md): resource/infos invalid type 21

* feat: /x/activity/subject/info

* feat: lottery

* feat(docs/misc/b23.tv): remove some unnecessary fields

* feat(creativecenter/upload.md): types/predict

* fix(video/collection.md): invalid end tag

* feat: app version upgrade

* feat(creativecenter/upload.md): tag/recommend #528

* feat(user/status_number.md): navnum

* feat: /x/activity/page/list

* feat(comment/list.md): desc about pagination_str

* feat(comment/list.md): update example

* feat(dynamic/all.md): #1082

* fix(comment/list.md): -352 not -412

* feat: #700

* feat(video/video_stream.md): #606 & cv949156

* feat(message/private_msg.md): single_unread freq

* feat: getUserWallet

* fix: broken form

* feat(Layout.vue): copyright to 2024

* feat: /x/topic/pub/rcmd/search

* feat: #425

* feat(misc/time_stamp.md): rtc/getTimestamp

* fix(misc/time_stamp.md): missing end tag

* feat: #745

* feat(dynamic/all.md): update feed/all

* feat(danmaku/action.md): #220

* feat(live/info.md): gethistory from cv8186413

* fix(danmaku/action.md): missing end tag
This commit is contained in:
Session小胡 2024-08-21 19:02:39 +08:00 committed by GitHub
parent f7599fb693
commit 60a0c5d1a2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
46 changed files with 18489 additions and 8207 deletions

View File

@ -2,7 +2,7 @@
<ParentLayout> <ParentLayout>
<template #page-bottom> <template #page-bottom>
<footer style="text-align: center"> <footer style="text-align: center">
Copyright © 2020-2023 Copyright © 2020-2024
<a href="https://github.com/SocialSisterYi/">SocialSisterYi</a> | <a href="https://github.com/SocialSisterYi/">SocialSisterYi</a> |
<a <a
href="https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/LICENSE" href="https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/LICENSE"

View File

@ -68,12 +68,15 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC少部分接
- [x] [已知的 APPKey](docs/misc/sign/APPKey.md) - [x] [已知的 APPKey](docs/misc/sign/APPKey.md)
- [x] [Wbi 签名](docs/misc/sign/wbi.md)`wts`与`w_rid` - [x] [Wbi 签名](docs/misc/sign/wbi.md)`wts`与`w_rid`
- [ ] [bili_ticket](docs/misc/sign/bili_ticket.md) - [ ] [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/errcode.md)
- [x] [图片格式化](docs/misc/picture.md) - [x] [图片格式化](docs/misc/picture.md)
- [x] [bvid 说明](docs/misc/bvid_desc.md) - [x] [bvid 说明](docs/misc/bvid_desc.md)
- [ ] [设备唯一标识BUVID](docs/misc/device_identity.md) - [ ] [设备唯一标识BUVID](docs/misc/device_identity.md)
- [ ] [获取 buvid3 / buvid4 / b_nut](docs/misc/buvid3_4.md) - [ ] [获取 buvid3 / buvid4 / b_nut](docs/misc/buvid3_4.md)
- [ ] [b23.tv 短链](docs/misc/b23tv.md)
- [ ] [gRPC API 接口定义](grpc_api) - [ ] [gRPC API 接口定义](grpc_api)
- [ ] [登录](docs/login) - [ ] [登录](docs/login)
- [x] [登录操作 (人机认证)](docs/login/login_action) - [x] [登录操作 (人机认证)](docs/login/login_action)
@ -99,6 +102,7 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC少部分接
- [x] [用户注册](docs/user/register.md) - [x] [用户注册](docs/user/register.md)
- [x] [用户认证类型一览](docs/user/official_role.md) - [x] [用户认证类型一览](docs/user/official_role.md)
- [ ] [加入老粉计划](docs/user/contract.md) - [ ] [加入老粉计划](docs/user/contract.md)
- [x] [所有粉丝勋章](docs/user/medals.md)
- [ ] [大会员](docs/vip) - [ ] [大会员](docs/vip)
- [ ] [大会员基本信息](docs/vip/info.md) - [ ] [大会员基本信息](docs/vip/info.md)
- [ ] [大会员中心](docs/vip/center.md) - [ ] [大会员中心](docs/vip/center.md)
@ -122,6 +126,7 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC少部分接
- [ ] [稿件投诉](docs/video/appeal.md) - [ ] [稿件投诉](docs/video/appeal.md)
- [ ] [视频状态数](docs/video/status_number.md) - [ ] [视频状态数](docs/video/status_number.md)
- [ ] [视频合集](docs/video/collection.md) - [ ] [视频合集](docs/video/collection.md)
- [ ] [播放器](docs/video/player.md)
- [ ] [剧集 (番剧、影视)](docs/bangumi) - [ ] [剧集 (番剧、影视)](docs/bangumi)
- [ ] [基本信息](docs/bangumi/info.md) - [ ] [基本信息](docs/bangumi/info.md)
- [ ] [播放&下载地址(视频流)](docs/bangumi/videostream_url.md) - [ ] [播放&下载地址(视频流)](docs/bangumi/videostream_url.md)
@ -138,7 +143,7 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC少部分接
- [ ] [弹幕操作](docs/danmaku/action.md) - [ ] [弹幕操作](docs/danmaku/action.md)
- [ ] 高级弹幕 - [ ] 高级弹幕
- [ ] 屏蔽管理 - [ ] 屏蔽管理
- [ ] 智能防挡弹幕 - [ ] [智能防挡弹幕](docs/danmaku/webmask.md)
- [x] [弹幕个人配置修改](docs/danmaku/config.md) - [x] [弹幕个人配置修改](docs/danmaku/config.md)
- [x] [名词解释](docs/danmaku/buzzword.md) - [x] [名词解释](docs/danmaku/buzzword.md)
- [x] [点赞查询](docs/danmaku/thumbup.md) - [x] [点赞查询](docs/danmaku/thumbup.md)
@ -183,9 +188,12 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC少部分接
- [x] [表情及表情包信息](docs/emoji/list.md) - [x] [表情及表情包信息](docs/emoji/list.md)
- [x] [操作](docs/emoji/action.md) - [x] [操作](docs/emoji/action.md)
- [ ] [创作中心](docs/creativecenter) - [ ] [创作中心](docs/creativecenter)
- [ ] [投稿](docs/creativecenter/upload.md)
- [ ] [统计与数据](docs/creativecenter/statistics&data.md) - [ ] [统计与数据](docs/creativecenter/statistics&data.md)
- [ ] 列表查询相关 - [ ] 列表查询相关
- [x] [电磁力数据](docs/creativecenter/railgun.md) - [x] [电磁力数据](docs/creativecenter/railgun.md)
- [ ] [合集管理](docs/creativecenter/season.md)
- [ ] [视频相关杂项](docs/creativecenter/videos.md)
- [x] [实时广播(通讯协议)](docs/broadcast) - [x] [实时广播(通讯协议)](docs/broadcast)
- [x] [视频内广播](docs/broadcast/video_room.md) - [x] [视频内广播](docs/broadcast/video_room.md)
- [ ] [充电](docs/electric) - [ ] [充电](docs/electric)
@ -201,8 +209,9 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC少部分接
- [ ] [动态基本信息](docs/dynamic/basicInfo.md) - [ ] [动态基本信息](docs/dynamic/basicInfo.md)
- [ ] [动态详细信息字段](docs/dynamic/card_info.md) - [ ] [动态详细信息字段](docs/dynamic/card_info.md)
- [ ] [获取动态详情](docs/dynamic/detail.md) - [ ] [获取动态详情](docs/dynamic/detail.md)
- [ ] [动态类型](docs/dynamic/dynamic_enum.md) - [ ] [动态类型对照](docs/dynamic/dynamic_enum.md)
- [ ] [动态信息](docs/dynamic/content.md) - [ ] [动态信息](docs/dynamic/content.md)
- [ ] [话题搜索](docs/dynamic/topic.md)
- [ ] [发送 & 转载动态](docs/dynamic/publish.md) - [ ] [发送 & 转载动态](docs/dynamic/publish.md)
- [ ] [根据关键字搜索用户at 别人时的填充列表)](docs/dynamic/atlist.md) - [ ] [根据关键字搜索用户at 别人时的填充列表)](docs/dynamic/atlist.md)
- [ ] [操作](docs/dynamic/action.md) - [ ] [操作](docs/dynamic/action.md)
@ -210,7 +219,7 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC少部分接
- [x] [特定话题动态列表](docs/dynamic/tag_dynamics.md) - [x] [特定话题动态列表](docs/dynamic/tag_dynamics.md)
- [ ] [动态内容](docs/dynamic/get_dynamic_detail.md) - [ ] [动态内容](docs/dynamic/get_dynamic_detail.md)
- [ ] [导航栏动态](docs/dynamic/nav.md) - [ ] [导航栏动态](docs/dynamic/nav.md)
- [ ] [相簿](docs/album) - [ ] [相簿](docs/album) (已下线)
- [x] [基本信息](docs/album/info.md) - [x] [基本信息](docs/album/info.md)
- [x] [相簿列表](docs/album/list.md) - [x] [相簿列表](docs/album/list.md)
- [x] [推荐作者](docs/album/recommend_author.md) - [x] [推荐作者](docs/album/recommend_author.md)
@ -241,6 +250,10 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC少部分接
- [ ] [直播间用户实用 API](docs/live/user.md) - [ ] [直播间用户实用 API](docs/live/user.md)
- [x] [直播间禁言相关](docs/live/silent_user_manage.md) - [x] [直播间禁言相关](docs/live/silent_user_manage.md)
- [ ] [关注UP直播情况](docs/live/follow_up_live.md) - [ ] [关注UP直播情况](docs/live/follow_up_live.md)
- [ ] [直播心跳上报](docs/live/report.md)
- [ ] [活动](docs/activity)
- [ ] [活动列表](docs/activity/list.md)
- [ ] [活动主题信息](docs/activity/info.md)
- [ ] [转正答题](docs/newbie_exam) - [ ] [转正答题](docs/newbie_exam)
- [x] [查询信息](docs/newbie_exam/info.md) - [x] [查询信息](docs/newbie_exam/info.md)
- [x] [拉取题目](docs/newbie_exam/fetch.md) - [x] [拉取题目](docs/newbie_exam/fetch.md)
@ -249,8 +262,8 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC少部分接
- [x] [青少年模式](docs/teenager/teenager_mode.md) - [x] [青少年模式](docs/teenager/teenager_mode.md)
- [ ] 亲子平台 - [ ] 亲子平台
- [ ] 课堂模式 - [ ] 课堂模式
- [ ] B币钱包 - [ ] [B币钱包](docs/wallet/)
- [ ] 基本信息 - [ ] [基本信息](docs/wallet/info.md)
- [ ] B币充值 - [ ] B币充值
- [ ] 贝壳相关 - [ ] 贝壳相关
- [ ] [哔哩哔哩漫画](docs/manga) - [ ] [哔哩哔哩漫画](docs/manga)
@ -267,16 +280,19 @@ B站 API 采用 C/S 结构,大多数接口为 REST API 和 gRPC少部分接
- [ ] 哔哩哔哩游戏 - [ ] 哔哩哔哩游戏
- [ ] [终端网络查询](docs/clientinfo) - [ ] [终端网络查询](docs/clientinfo)
- [x] [基于 ip 的地理位置查询](docs/clientinfo/ip.md) - [x] [基于 ip 的地理位置查询](docs/clientinfo/ip.md)
- [ ] [其他](docs/misc) - [ ] [客服中心](docs/customerservice)
- [x] [获取当前时间戳](docs/misc/time_stamp.md) - [ ] [客服消息](docs/customerservice/msg.md)
- [ ] [web端组件](docs/web_widget) - [ ] [web端组件](docs/web_widget)
- [x] [分区当日投稿数](docs/web_widget/zone_upload.md) - [x] [分区当日投稿数](docs/web_widget/zone_upload.md)
- [x] [404 页漫画收集](docs/web_widget/404_manga.md) - [x] [404 页漫画收集](docs/web_widget/404_manga.md)
- [ ] [首页横幅头图](docs/web_widget/header.md)
- [ ] [APP端组件](docs/APP_widget) - [ ] [APP端组件](docs/APP_widget)
- [x] [开屏图片 + 恰饭珍贵录像](docs/APP_widget/splash.md) - [x] [开屏图片 + 恰饭珍贵录像](docs/APP_widget/splash.md)
- [ ] [获取最新 APP 版本](docs/APP_widget/ver.md)
- [ ] [个性装扮](docs/garb) - [ ] [个性装扮](docs/garb)
- [x] [APP 主题](docs/garb/skin.md) - [x] [APP 主题](docs/garb/skin.md)
- [x] [主题色](docs/garb/color.md) - [x] [主题色](docs/garb/color.md)
- [ ] [装扮/收藏集](docs/garb/lottery.md)
## ✨鸣谢 ## ✨鸣谢

91
docs/APP_widget/ver.md Normal file
View File

@ -0,0 +1,91 @@
# 获取最新 APP 版本
## 版本升级
> https://app.bilibili.com/x/v2/version/fawkes/upgrade
*请求方式: GET*
**URL参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| - | - | - | - | - |
| appkey | str | APP 密钥 | 不必要 | |
| build | int | 当前 APP 版本号 | 必要 | 将会影响是否有新版本 |
| mobi_app | str | 目标客户端类型 | 必要 | 如 `android` |
| nt | str | 任意非空串 | 必要 | 默认为 `1` |
| ov | str | 任意非空串 | 必要 | 默认为 `22` |
| platform | str | 设备平台 | 必要 | 任意非空串即可, 如 `android` |
| sn | int | 设备序列号? | 必要 | 任意数字即可, 如 `4462369` |
| vn | str | 当前版本号 | 必要 | 任意非空串即可, 如 `6.13.0` |
**JSON回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| - | - | - | - |
| code | int | 返回值 | 0: 成功<br />-304: 木有改动<br />-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 | 发布时间 | |
**示例:**
```curl
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=!!!'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"title": "升级提醒",
"content": "-修复了一些bug并优化了一些搜索和播放体验~\n-让我们举起双手,把力量借给备考的小伙伴们!",
"version": "7.81.0",
"version_code": 7810200,
"url": "https://dl.hdslb.com/mobile/pack/android/15013586/iBiliPlayer-apinkRelease-7.81.0-b15013586.apk",
"size": 138723520,
"md5": "60f83fb828bc05aefdac67504ba72ea9",
"silent": 0,
"upgrade_type": 1,
"cycle": 4,
"policy": 0,
"policy_url": "",
"ptime": 1717554395
}
}
```
</details>

93
docs/activity/info.md Normal file
View File

@ -0,0 +1,93 @@
# 活动主题信息
## 主题信息
> https://api.bilibili.com/x/activity/subject/info
*请求方式: GET*
**URL参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| - | - | - | - | - | - | - |
| sid | num | 活动 id | 必要 | |
| bvid | str | 来源视频 bvid | 非必要 | |
**JSON回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| - | - | - | - |
| code | num | 返回值 | 0: 成功<br />-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'
```
<details>
<summary>查看响应示例:</summary>
```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
}
}
```
</details>

213
docs/activity/list.md Normal file
View File

@ -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成功<br />-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'
```
<details>
<summary>查看响应示例:</summary>
```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
}
}
```
</details>

View File

@ -3,6 +3,8 @@
## 根据请求IP确定属地 ## 根据请求IP确定属地
> https://api.bilibili.com/x/web-interface/zone > https://api.bilibili.com/x/web-interface/zone
>
> https://api.live.bilibili.com/xlive/web-room/v1/index/getIpInfo
*请求方式GET* *请求方式GET*
@ -28,8 +30,8 @@
| isp | str | 运营商名 | | | isp | str | 运营商名 | |
| latitude | num | 纬度 | | | latitude | num | 纬度 | |
| longitude | num | 经度 | | | longitude | num | 经度 | |
| zone_id | num | ip数据库id | | | zone_id | num | ip数据库id | 第二个接口无 |
| country_code | num | 国家/地区代码 | | | country_code | num | 国家/地区代码 | 第二个接口无 |
**示例:** **示例:**
@ -66,7 +68,7 @@ curl 'https://api.bilibili.com/x/web-interface/zone'
> https://api.live.bilibili.com/ip_service/v1/ip_service/get_ip_addr > https://api.live.bilibili.com/ip_service/v1/ip_service/get_ip_addr
> https://api.live.bilibili.com/client/v1/Ip/getInfoNew > https://api.live.bilibili.com/client/v1/Ip/getInfoNew
注: 接口等效 注: 以上接口等效
*请求方式GET* *请求方式GET*
@ -90,7 +92,7 @@ curl 'https://api.bilibili.com/x/web-interface/zone'
`data`对象: `data`对象:
与[根据请求IP确定地理位置](#根据请求ip确定地理位置)回复的`data`对象基本相同, 但无 `country_code` 字段 与[根据请求IP确定地理位置](#根据请求ip确定地理位置)回复的`data`对象基本相同, 但无 `zone_id` `country_code` 字段
**示例:** **示例:**

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,730 @@
# 合集管理
关于用户空间的合集及视频列表参见 [合集和视频列表信息](../video/collection.md)
## 获取合集列表
> https://member.bilibili.com/x2/creative/web/seasons
*请求方式: GET*
认证方式: Cookie (SESSDATA)
**URL参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | --------- | ----------- | ----------------- |
| pn | num | 页码 | 必要 | 默认为 1 |
| ps | num | 每页数量 | 必要 | 默认为 30 |
| order | str | 排序方式 | 不必要 | 创建时间: ctime<br />修改时间: mtime |
| sort | str | 排序方式 | 不必要 | 创建时间: asc<br />修改时间: 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: 正常显示<br />-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"
```
<details>
<summary>查看响应示例:</summary>
```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
}
}
```
</details>
## 创建合集
> ttps://member.bilibili.com/x2/creative/web/season/add
*请求方式: POST*
认证方式: Cookie (SESSDATA)
注: 有人工审核
**正文参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | -------- | ------ | ---- |
| 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'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": 3541247
}
```
</details>
## 添加视频到合集
> 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'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1
}
```
</details>
## 编辑合集小节
> 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'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1
}
```
</details>
## 编辑合集信息
> 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未完结<br />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'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1
}
```
</details>
## 删除合集
> 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'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1
}
```
</details>

File diff suppressed because it is too large Load Diff

View File

@ -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: 可以<br />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"
```
<details>
<summary>查看响应示例:</summary>
```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
}
}
```
</details>
## 视频基础信息
> 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"
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"archive": {
"aid": 1906473802,
"bvid": "BV1MU411S7iJ",
"title": "Linux小寄巧: 原地卸载内核然后尝试救活!"
},
"videos": [
{
"cid": 1625992822,
"index": 1,
"title": "Linux小寄巧: 原地卸载内核然后尝试救活!",
"duration": 0
}
]
}
}
```
</details>

115
docs/customerservice/msg.md Normal file
View File

@ -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"
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"msg": "ok",
"message": "ok",
"ttl": 1
}
```
</details>
## 上传文件
> 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: 成功<br />1000011: 仅支持上传300M内的文件<br />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'
```
<details>
<summary>查看响应示例:</summary>
```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"
}
}
```
</details>

View File

@ -12,6 +12,15 @@
`mode=6`的逆向弹幕与`mode=8`的代码弹幕不可发送 `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 ** **正文参数( application/x-www-form-urlencoded **
| 参数名 | 类型 | 内容 | 必要性 | 备注 | | 参数名 | 类型 | 内容 | 必要性 | 备注 |
@ -320,6 +329,84 @@ curl 'https://api.bilibili.com/x/v2/dm/command/post' \
</details> </details>
## 发送打分弹幕
> https://api.bilibili.com/x/v2/dm/command/grade/post
*请求方式: POST*
认证方式: Cookie (SESSDATA)
<!--{
"gh": [220]
}-->
**正文参数 (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'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"dmid": 1651556419721443584,
"dmidStr": "1651556419721443584",
"visible": true,
"action": "grade:5"
}
}
```
</details>
## 撤回弹幕 ## 撤回弹幕

File diff suppressed because it is too large Load Diff

View File

@ -1,31 +1,33 @@
# 动态类型 # 动态类型对照
| 类型 | 说明 | 示例 | ## 动态类型
|-------------------------------|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| DYNAMIC_TYPE_NONE | 无效动态 | [716510857084796964](https://t.bilibili.com/716510857084796964) |
| DYNAMIC_TYPE_FORWARD | 动态转发 | |
| DYNAMIC_TYPE_AV | 投稿视频 | |
| DYNAMIC_TYPE_PGC | 剧集(番剧、电影、纪录片) | |
| DYNAMIC_TYPE_COURSES | | |
| DYNAMIC_TYPE_WORD | 纯文字动态 | [718377531474968613](https://t.bilibili.com/718377531474968613) |
| DYNAMIC_TYPE_DRAW | 带图动态 | [718384798557536290](https://t.bilibili.com/718384798557536290) |
| DYNAMIC_TYPE_ARTICLE | 投稿专栏 | [718372214316990512](https://t.bilibili.com/718372214316990512) |
| DYNAMIC_TYPE_MUSIC | 音乐 | |
| DYNAMIC_TYPE_COMMON_SQUARE | 装扮<br/>剧集点评<br/>普通分享 | [551309621391003098](https://t.bilibili.com/551309621391003098)<br/>[716503778995470375](https://t.bilibili.com/716503778995470375)<br/>[716481612656672789](https://t.bilibili.com/716481612656672789) |
| DYNAMIC_TYPE_COMMON_VERTICAL | | |
| DYNAMIC_TYPE_LIVE | 直播间分享 | [216042859353895488](https://t.bilibili.com/216042859353895488) |
| DYNAMIC_TYPE_MEDIALIST | 收藏夹 | [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 | 直播开播 | [718371505648435205](https://t.bilibili.com/718371505648435205) |
| DYNAMIC_TYPE_BANNER | | |
| DYNAMIC_TYPE_UGC_SEASON | 合集更新 | [718390979031203873](https://t.bilibili.com/718390979031203873) |
| DYNAMIC_TYPE_SUBSCRIPTION_NEW | | |
# 富文本节点类型 | 类型 | 说明 | 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 | 装扮<br/>剧集点评<br/>普通分享 ||17|| [551309621391003098](https://t.bilibili.com/551309621391003098)<br/>[716503778995470375](https://t.bilibili.com/716503778995470375)<br/>[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 | ||| ||
## 富文本节点类型
| 类型 | 说明 | 示例 | | 类型 | 说明 | 示例 |
|---------------------------------|------|-----------------------------------------------------------------| |---------------------------------|------|-----------------------------------------------------------------|
@ -49,7 +51,7 @@
| RICH_TEXT_NODE_TYPE_OGV_EP | | | | RICH_TEXT_NODE_TYPE_OGV_EP | | |
| RICH_TEXT_NODE_TYPE_SEARCH_WORD | | | | RICH_TEXT_NODE_TYPE_SEARCH_WORD | | |
# 作者类型 ## 作者类型
| 类型 | 说明 | 示例 | | 类型 | 说明 | 示例 |
|------------------------|------|-----| |------------------------|------|-----|
@ -65,7 +67,7 @@
| EMOJI_TYPE_NEW | | | | EMOJI_TYPE_NEW | | |
| EMOJI_TYPE_VIP | | | | EMOJI_TYPE_VIP | | |
# 相关内容卡片类型 ## 相关内容卡片类型
| 类型 | 说明 | 示例 | | 类型 | 说明 | 示例 |
|-------------------------|------|--------------------------------------------------------------------------| |-------------------------|------|--------------------------------------------------------------------------|
@ -112,7 +114,7 @@
| HIGHLIGHT_TEXT_STYLE_TYPE_NONE | | | | HIGHLIGHT_TEXT_STYLE_TYPE_NONE | | |
| HIGHLIGHT_TEXT_STYLE_TYPE_ACTIVE | | | | HIGHLIGHT_TEXT_STYLE_TYPE_ACTIVE | | |
# 动态主体类型 ## 动态主体类型
| 类型 | 说明 | 示例 | | 类型 | 说明 | 示例 |
|-----------------------------|-------|-----------------------------------------------------------------| |-----------------------------|-------|-----------------------------------------------------------------|

202
docs/dynamic/topic.md Normal file
View File

@ -0,0 +1,202 @@
# 话题搜索
## 搜索发布话题
> https://app.bilibili.com/x/topic/pub/search
> https://api.bilibili.com/x/topic/pub/search
*请求方法: GET*
注: 该接口可能存在传入页面大小与返回数量不匹配的问题, 可能与访问权限有关
<!--{
"from": {
"url": "https://t.bilibili.com/"
"selector": ".bili-topic-search__input__inner"
}
}-->
**URL参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| --- | --- | --- | --- | --- |
| keywords | str | 关键词 | 不必要 | |
| content | str | 空 | 不必要 | |
| upload_id | str | 上传 id? | 不必要 | 页面刷新第一次请求时为空, 后均非空<br />似乎为固定值, 格式: `${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: 成功<br />-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'
```
<details>
<summary>查看响应示例:</summary>
```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
}
}
}
```
</details>
## 推荐搜索话题?
> https://app.bilibili.com/x/topic/pub/rcmd/search
> https://api.bilibili.com/x/topic/pub/rcmd/search
*请求方法: GET*
注: 该接口啥也不返回, 但是网页端会请求该接口
<!--{
"from": {
"url": "https://t.bilibili.com/"
},
"gh": [1083]
}-->
**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'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"topic_items": [],
"request_id": ""
}
}
```
</details>

View File

@ -1,12 +1,14 @@
# 收藏夹基本信息 # 收藏夹基本信息
<img src="../../assets/img/collect.svg" width="100" height="100" />
## 获取收藏夹元数据 ## 获取收藏夹元数据
> https://api.bilibili.com/x/v3/fav/folder/info > https://api.bilibili.com/x/v3/fav/folder/info
*请求方式GET* *请求方式GET*
认证方式Cookie或APP 认证方式Cookie(SESSDATA) APP
**注:查询权限收藏夹时需要相应用户登录** **注:查询权限收藏夹时需要相应用户登录**
@ -48,7 +50,6 @@
| like_state | num | 点赞状态 | 已点赞1<br />未点赞0<br />需要登录 | | like_state | num | 点赞状态 | 已点赞1<br />未点赞0<br />需要登录 |
| media_count | num | 收藏夹内容数量 | | | media_count | num | 收藏夹内容数量 | |
`data`中的`upper`对象: `data`中的`upper`对象:
| 字段 | 类型 | 内容 | 备注 | | 字段 | 类型 | 内容 | 备注 |
@ -129,16 +130,14 @@ curl -G 'https://api.bilibili.com/x/v3/fav/folder/info' \
*请求方式GET* *请求方式GET*
认证方式Cookie或APP 认证方式Cookie (SESSDATA) APP
**注:查询权限收藏夹时需要相应用户登录** 若欲查看相应用户的私密收藏夹需要登录
该接口也能查询目标内容id存在于那些收藏夹中
**url参数** **url参数**
| 参数名 | 类型 | 内容 | 必要性 | 备注 | | 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | ------------ | ------ | ---------------------------------------- | | ------ | ---- | ----------- | ------ | ---- |
| up_mid | num | 目标用户mid | 必要 | | | up_mid | num | 目标用户mid | 必要 | |
| type | num | 目标内容属性 | 非必要 | 默认为全部<br />0全部<br />2视频稿件 | | type | num | 目标内容属性 | 非必要 | 默认为全部<br />0全部<br />2视频稿件 |
| rid | num | 目标内容id | 非必要 | 视频稿件视频稿件avid | | rid | num | 目标内容id | 非必要 | 视频稿件视频稿件avid |
@ -151,43 +150,195 @@ curl -G 'https://api.bilibili.com/x/v3/fav/folder/info' \
| ------- | ----------------------------- | -------- | --------------------------- | | ------- | ----------------------------- | -------- | --------------------------- |
| code | num | 返回值 | 0成功<br />-400请求错误 | | code | num | 返回值 | 0成功<br />-400请求错误 |
| message | str | 错误信息 | 默认为0 | | message | str | 错误信息 | 默认为0 |
| data | 有效时obj<br />无效或null | 信息本体 | | | ttl | num | 1 | |
| data | 隐藏时null<br />公开时obj | 信息本体 | |
`data`对象: `data`对象:
| 字段 | 类型 | 内容 | 备注 | | 字段 | 类型 | 内容 | 备注 |
| ------ | ----- | ---------------- | ---- | | ----- | --------------------------------------- | -------------- | ---- |
| count | num | 创建的收藏夹数 | | | count | num | 创建的收藏夹数 | |
| list | array | 创建的收藏夹列表 | | | list | 无收藏夹时null<br />有收藏夹时array | 收藏夹列表 | |
| season | null | | | | season | null | | |
`list`数组: `data`中的`list`数组:
| 项 | 类型 | 内容 | 备注 | | 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ------------- | ---- | | ---- | ---- | ----------- | --------------------- |
| 0 | obj | 收藏夹1 | | | 0 | obj | 收藏夹1 | |
| n | obj | 收藏夹n+1 | | | n | obj | 收藏夹(n+1) | 项数取决于`count`的值 |
| ... | obj | ... | | | …… | obj | …… | |
`medias`数组中的对象: `data`中的`list`数组中的对象:
| 字段 | 类型 | 内容 | 备注 | | 字段 | 类型 | 内容 | 备注 |
| ----------- | ---- | ------------------------ | ------------------------------------------ | | ----------- | ---- | ------------------------ | ------------------------------------------ |
| id | num | 收藏夹mlid完整id | 收藏夹原始id+创建者mid尾号2位 | | id | num | 收藏夹mlid完整id | 收藏夹原始id+创建者mid尾号2位 |
| fid | num | 收藏夹原始id | | | fid | num | 收藏夹原始id | |
| mid | num | 创建者mid | | | mid | num | 创建者mid | |
| attr | num | 属性位 | | | attr | num | 属性位 | |
| title | str | 收藏夹标题 | | | title | str | 收藏夹标题 | |
| fav_state | num | 目标id是否存在于该收藏夹 | 存在于该收藏夹1<br />不存在于该收藏夹0 | | fav_state | num | 目标id是否存在于该收藏夹 | 存在于该收藏夹1<br />不存在于该收藏夹0 |
| media_count | num | 收藏夹内容数量 | | | media_count | num | 收藏夹内容数量 | |
`attr`属性位二进制值表:
| 位 | 内容 | 备注 |
| --------------- | ---------------- | -------------------------------- |
| 0 | 是否为默认收藏夹 | 0默认收藏夹<br />1其他收藏夹 |
| 1 | 私有收藏夹 | 0公开<br />1私有 |
| 其他有待补充... | | |
**示例:** **示例:**
查询用户`mid=509372`的所有创建收藏夹列表 查询用户`mid=7792521`的收藏夹列表
```shell ```shell
curl -G 'https://api.bilibili.com/x/v3/fav/folder/created/list-all' \ curl -G 'https://api.bilibili.com/x/v3/fav/folder/created/list-all' \
--data-urlencode 'up_mid=509372' \ --data-urlencode 'up_mid=7792521' \
-b 'SESSDATA=xxx'
```
<details>
<summary>查看响应示例:</summary>
```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
}]
}
}
```
</details>
## 查询用户收藏的视频收藏夹
> 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成功<br />-101账号未登录<br />-111csrf校验失败<br />40022签名过长 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | 隐藏时null<br />公开时obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ----- | --------------------------------------- | -------------- | ---- |
| count | num | 创建的收藏夹数 | |
| list | 无收藏夹时null<br />有收藏夹时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二进制处理<br />详细说明见下表 |
| 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 | 收藏夹总计视频数 | |
`attr`属性二进制值表:
| 其他有待补充... | 1默认收藏夹 | 0公开性 |
| --------------- | -------------------------------- | -------------------- |
| | 0默认收藏夹<br />1其他收藏夹 | 0公开<br />1私有 |
`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' -b 'SESSDATA=xxx'
``` ```
@ -201,27 +352,45 @@ curl -G 'https://api.bilibili.com/x/v3/fav/folder/created/list-all' \
"ttl": 1, "ttl": 1,
"data": { "data": {
"count": 2, "count": 2,
"list": [ "list": [{
{ "id": 496307088,
"id": 939227072, "fid": 4963070,
"fid": 9392270, "mid": 412466388,
"mid": 509372,
"attr": 54,
"title": "学习",
"fav_state": 0,
"media_count": 22
},
{
"id": 75020272,
"fid": 750202,
"mid": 509372,
"attr": 22, "attr": 22,
"title": "MAD/AMV", "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, "fav_state": 0,
"media_count": 16 "media_count": 55
} }, {
], "id": 381779121,
"season": null "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
}]
} }
} }
``` ```
@ -238,7 +407,7 @@ curl -G 'https://api.bilibili.com/x/v3/fav/folder/created/list-all' \
| 参数名 | 类型 | 内容 | 必要性 | 备注 | | 参数名 | 类型 | 内容 | 必要性 | 备注 |
| --------- | ---- | -------------- | ------ | ------------------------------------------------------------ | | --------- | ---- | -------------- | ------ | ------------------------------------------------------------ |
| resources | strs | 目标内容id列表 | 必要 | 格式:{内容id}:{内容类型}<br />每个成员间用`,`分隔<br />类型:<br />2视频稿件<br />12音频<br />21视频合集<br />内容id<br />视频稿件视频稿件avid<br />音频音频auid<br />视频合集:视频合集id | | resources | strs | 目标内容id列表 | 必要 | 格式:{内容id}:{内容类型}<br />每个成员间用`,`分隔<br />类型:<br />2视频稿件<br />12音频<br />内容id<br />视频稿件视频稿件avid<br />音频音频auid |
| platform | str | 平台标识 | 非必要 | 可为web影响内容列表类型 | | platform | str | 平台标识 | 非必要 | 可为web影响内容列表类型 |
**json回复** **json回复**
@ -263,8 +432,8 @@ curl -G 'https://api.bilibili.com/x/v3/fav/folder/created/list-all' \
| 字段 | 类型 | 内容 | 备注 | | 字段 | 类型 | 内容 | 备注 |
| -------- | ---- | ------------- | ------------------------------------------------------------ | | -------- | ---- | ------------- | ------------------------------------------------------------ |
| id | num | 内容id | 视频稿件视频稿件avid<br />音频音频auid<br />视频合集视频合集id | | id | num | 内容id | 视频稿件视频稿件avid<br />音频音频auid |
| type | num | 内容类型 | 2视频稿件<br />12音频<br />21视频合集 | | type | num | 内容类型 | 2视频稿件<br />12音频 |
| title | str | 标题 | | | title | str | 标题 | |
| cover | str | 封面url | | | cover | str | 封面url | |
| intro | str | 简介 | | | intro | str | 简介 | |
@ -303,13 +472,11 @@ curl -G 'https://api.bilibili.com/x/v3/fav/folder/created/list-all' \
1-视频稿件-`av583785685` 1-视频稿件-`av583785685`
2-视频合集-`523` 2-音频-`au15664`
3-音频-`au15664`
```shell ```shell
curl -G 'https://api.bilibili.com/x/v3/fav/resource/infos' \ curl -G 'https://api.bilibili.com/x/v3/fav/resource/infos' \
--data-urlencode 'resources=583785685:2,523:21,15664:12' --data-urlencode 'resources=583785685:2,15664:12'
``` ```
<details> <details>

742
docs/garb/lottery.md Normal file
View File

@ -0,0 +1,742 @@
# 装扮/收藏集
由 [#1080](https://github.com/SocialSisterYi/bilibili-API-collect/issues/1080) 提供
## 装扮/收藏集搜索API
> https://api.bilibili.com/x/garb/v2/mall/home/search
*请求方式: GET*
**URL参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|----- |--- |------- |----- |--- |
| keyword | 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 'keyword=2233' \
-b 'SESSDATA=xxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"list": null,
"pn": 1,
"ps": 20,
"total": 0
}
}
```
</details>
## 收藏集信息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'
```
<details>
<summary>查看响应示例:</summary>
```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
}
}
```
</details>

File diff suppressed because it is too large Load Diff

66
docs/live/report.md Normal file
View File

@ -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"
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"next_interval": 60
}
}
```
</details>

View File

@ -109,7 +109,7 @@ data 对象:
| 字段 | 类型 | 内容 | 备注 | | 字段 | 类型 | 内容 | 备注 |
|---------------|-----|-------------------|------------------------| |---------------|-----|-------------------|------------------------|
| message | str | 扫码状态信息 | | | message | str | 扫码状态信息 | 若提示 `本次登录环境存在风险, 需使用手机号进行验证或绑定`, 参见 [手机号验证](#手机号验证) |
| refresh_token | str | 刷新`refresh_token` | | | refresh_token | str | 刷新`refresh_token` | |
| status | num | 0 | | | status | num | 0 | |
| timestamp | num | 登录时间 | 未登录为`0`<br />时间戳 单位为毫秒 | | timestamp | num | 登录时间 | 未登录为`0`<br />时间戳 单位为毫秒 |
@ -481,3 +481,308 @@ public class Test3 {
} }
``` ```
## 手机号验证
### 简述
有时 [登录操作(web端)](#登录操作web端) (APP 端可能也有类似操作) 会返回如下内容, 此时需要进行手机号验证或绑定
```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'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"recaptcha_type": "geetest",
"recaptcha_token": "8a418aa9eebe411599d759fc318d55e1",
"gee_challenge": "4e5353e7ab9f9aef0c97fa5a5b1ad101",
"gee_gt": "ac597a4506fee079629df5d8b66dd4fe"
}
}
```
</details>
### 发送验证码
> 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'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"captcha_key": "42403fb08ed2cd97afff14edefbae482"
}
}
```
</details>
### 验证手机验证码
> 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'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"code": "6eadf783c55a387b143773282b217682"
}
}
```
</details>
### 交换 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'
```
<details>
<summary>查看响应示例:</summary>
```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"
}
}
```
</details>
<details>
<summary>查看响应头部示例:</summary>
```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
```
</details>

View File

@ -1,6 +1,6 @@
# 登录操作 # 登录操作
人机验证方式登录包含**账号密码登录**与**机短信验证码登录** 人机验证方式登录包含**账号密码登录**与**机短信验证码登录**
**注:扫码登录**不需要进行**人机验证**,故**不使用**以下接口 **注:扫码登录**不需要进行**人机验证**,故**不使用**以下接口
@ -16,13 +16,14 @@
2. 进行滑动or点击验证 2. 进行滑动or点击验证
3. 返回验证结果`validate`与`seccode`,进行短信或密码登录 3. 返回验证结果`validate`与`seccode`,进行短信或密码登录
### 申请captcha验证码 ### 申请captcha验证码
> https://passport.bilibili.com/x/passport-login/captcha?source=main_web > https://passport.bilibili.com/x/passport-login/captcha?source=main_web
*请求方式GET* *请求方式GET*
注: 另外参见 [密码登录-手机号验证-获取 captcha](password.md#获取-captcha)
**json回复** **json回复**
根对象: 根对象:
@ -80,6 +81,71 @@ curl 'https://passport.bilibili.com/x/passport-login/captcha?source=main_web'
</details> </details>
### 申请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'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"data": {
"result": {
"success": 1,
"gt": "bd111e81eda1cbb9f54425aafc0908ac",
"challenge": "2903a8eb967a1d990444cb23ea42f417",
"key": "76fb59fbd83a4d9d816162c5156fc964"
},
"type": 1
}
}
```
</details>
### 进行验证 ### 进行验证
本文档为 Bilibili 文档,验证码为 [geetest 极验](https://docs.geetest.com/sensebot/start/) 提供,故不提供相关 API 本文档为 Bilibili 文档,验证码为 [geetest 极验](https://docs.geetest.com/sensebot/start/) 提供,故不提供相关 API
@ -92,7 +158,6 @@ curl 'https://passport.bilibili.com/x/passport-login/captcha?source=main_web'
3. 验证完成后点击按钮5生成验证结果 3. 验证完成后点击按钮5生成验证结果
4. 使用最开始获得到的`key`、`challenge`和刚获得到的`validate`、`seccode`继续之后的登录操作 4. 使用最开始获得到的`key`、`challenge`和刚获得到的`validate`、`seccode`继续之后的登录操作
### 继续登录 ### 继续登录
- [短信登录](SMS.md) - [短信登录](SMS.md)

View File

@ -68,3 +68,194 @@ curl -G 'https://api.bilibili.com/x/safecenter/login_notice' \
``` ```
</details> </details>
## 最近一周的登录情况
> https://api.bilibili.com/x/member/web/login/log
*请求方式: GET*
认证方式: Cookie (SESSDATA)
**URL参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | ---------- | ------ | -------- |
| jsonp | str | 回调函数名? | 非必要 | 默认 jsonp |
| web_location | str | 网页位置? | 非必要 | 默认 333.33 |
**JSON回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | --------- |
| code | num | 返回值 | 0成功<br />-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 | 末两位以 `*` 打码 |
| 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"
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"count": 14,
"list": [
{
"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"
}
]
}
}
```
</details>

View File

@ -660,4 +660,197 @@ curl 'https://api.bilibili.com/x/member/web/sign/update' \
</details> </details>
## 最近一周的经验记录
> 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: 成功<br />-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
```
<details>
<summary>查看响应示例:</summary>
```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
}
}
```
</details>
## 最近一周的节操记录
> 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: 成功<br />-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
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"moral": 70,
"list": [],
"count": 0
}
}
```
</details>

View File

@ -8,6 +8,8 @@
认证方式CookieSESSDATA 认证方式CookieSESSDATA
注: 该接口默认每 2 分钟请求一次
**URL参数:** **URL参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 | | 参数名 | 类型 | 内容 | 必要性 | 备注 |

127
docs/misc/b23tv.md Normal file
View File

@ -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 存在时无意义<s>(可是 oid 不可能不存在啊)</s> |
| 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 |
<!-- 此处被注释是因为以下值均失效
| 动态 | dt.dt-detail.0.0.pv | 动态 id |
| 专栏 | read.column-detail.roof.8.click | 文章 cvid |
| 文集 | read.column-readlist.share.0.click | 文集 rlid |
| 直播 | live.live-room-detail.0.0.pv | 直播 room_id |
| 用户 | main.space-total.more.0.click | 用户 mid |
| 课程 | pugv.pugv-video-detail.0.0.pv | 课程 id? |
| 番剧 | main.space-bangumi.0.0 | 番剧 id? |
| 链接 | public.webview.0.0.pv | ? |
-->
**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"
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"content": "【【官方 MV】Never Gonna Give You Up - Rick Astley-哔哩哔哩】 https://b23.tv/5x4wy5f",
"count": 0
}
}
```
</details>

View File

@ -1,6 +1,6 @@
# 获取 buvid3 / buvid4 / b_nut # 获取 buvid3 / buvid4 / b_nut
## 游客获取 buvid3 / buvid4 ## 接口获取 buvid3 / buvid4
> https://api.bilibili.com/x/frontend/finger/spi > https://api.bilibili.com/x/frontend/finger/spi

View File

@ -1,6 +1,8 @@
# 图片格式化 # 图片格式化
对于 `*.hdslb.com/bfs` 下的图片文件都可以使用以下可选格式化参数. 已知 `*.hdslb.com` `archive.biliimg.com` 等域名作用等效, 对于请求头 `Referer` 要求留空或在 `.bilibili.com` 等 B 站域名下 <!--(所以 B 站图床 img 标签要加上 `referrerpolicy="no-referrer"`)-->
对于以上域名的 `/bfs/` 下的图片文件都可以使用以下可选格式化参数
使用 `@` 开始参数 (无论格式如何, 无论是否有参数, 通过计算 HASH 发现, 使用 `@` 均会导致返回图片不同), 多个参数以 `_` 分隔, 图片格式无需分隔且必须放在最后 使用 `@` 开始参数 (无论格式如何, 无论是否有参数, 通过计算 HASH 发现, 使用 `@` 均会导致返回图片不同), 多个参数以 `_` 分隔, 图片格式无需分隔且必须放在最后

View File

@ -24,8 +24,78 @@
3. 构造请求参数,`key_id` 为 `ec02``hexsign` 为变量 `hexsign` 值,`context[ts]` 为变量 `timestamp` 值,`csrf` 为 cookie 中的 `bili_jct` 值也可为空 3. 构造请求参数,`key_id` 为 `ec02``hexsign` 为变量 `hexsign` 值,`context[ts]` 为变量 `timestamp` 值,`csrf` 为 cookie 中的 `bili_jct` 值也可为空
4. 发送 `POST` 请求,获取 `data` 字段中的 `ticket` 字段的值即为所求 4. 发送 `POST` 请求,获取 `data` 字段中的 `ticket` 字段的值即为所求
## 接口
> https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket
*请求方式: POST*
**URL参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ----- | ---- | ---- | ------ | ---- |
| key_id | str | ec02 | 必要 | |
| hexsign | str | 由 `hmac_sha256` 算法计算的 `hexsign` 值 | 必要 | |
| context[ts] | num | UNIX 秒级时间戳 | 必要 | |
| csrf | str | cookie 中的 `bili_jct` 值 | 非必要 | |
**JSON回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | ---- | ---- |
| code | num | 返回值 | 0: 成功<br />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) |
**示例:**
<details>
<summary>查看响应示例:</summary>
```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
}
```
</details>
## Demo ## Demo
此处提供 [Python](#python), [Java](#java), [JavaScript (Node.js)](#javascript-nodejs) 的示例代码
### Python ### Python
需要 `requests` 依赖 需要 `requests` 依赖
@ -176,3 +246,62 @@ public class BiliTicketDemo {
} }
``` ```
### 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<any>} 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 || ''
});
try {
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}`);
}
const data = await response.json();
return data;
} catch (e) {
throw error;
}
}
(async () => {
try {
const ticketResponse = await getBiliTicket(''); // use empty CSRF here
console.log(ticketResponse);
} catch (e) {
console.error('Failed to get BiliTicket:', error);
}
})();
```

177
docs/misc/sign/v_voucher.md Normal file
View File

@ -0,0 +1,177 @@
# v_voucher 验证
## 简述
当同一接口在短时间内被同一用户/IP/UA多次请求或异常时, 会触发风控, 如接口返回 `code``-352``风控校验失败`, 同时 `data` 中出现 `v_voucher` 字段
`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)
## 操作流程
1. 快速以不正确的姿势请求接口, 直到返回 `v_voucher` 字段如下
```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`
5. 重新请求原接口, 原 URL 参数加入 `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成功<br />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"
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"type": "geetest",
"token": "e7abdb050c3d4609979f1685137e3bc0",
"geetest": {
"challenge": "85118f8714875ca4c6d5641bb0ce9ddf",
"gt": "ac597a4506fee079629df5d8b66dd4fe"
},
"biliword": null,
"phone": null,
"sms": null
}
}
```
</details>
## 从验证结果获取 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成功<br />-111: csrf 校验失败<br />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"
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"is_valid": 1,
"grisk_id": "2e91cf2b67172ca8432fe7c9ab66a5c4"
}
}
```
</details>

View File

@ -2,7 +2,7 @@
自 2023 年 3 月起Bilibili Web 端部分接口开始采用 WBI 签名鉴权,表现在 REST API 请求时在 Query param 中添加了 `w_rid``wts` 字段。WBI 签名鉴权独立于 [APP 鉴权](APP.md) 与其他 Cookie 鉴权,目前被认为是一种 Web 端风控手段。 自 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`(推测为内部记录错误请求的 ID 方便 Debug,如: 经持续观察,大部分查询性接口都已经或准备采用 WBI 签名鉴权,请求 WBI 签名鉴权接口时,若签名参数 `w_rid` 与时间戳 `wts` 缺失、错误,会返回 `v_voucher`,如:
```json ```json
{"code":0,"message":"0","ttl":1,"data":{"v_voucher":"voucher_******"}} {"code":0,"message":"0","ttl":1,"data":{"v_voucher":"voucher_******"}}
@ -17,6 +17,7 @@
1. 获取实时口令 `img_key`、`sub_key` 1. 获取实时口令 `img_key`、`sub_key`
从 [nav 接口](../../login/login_info.md#导航栏用户信息) 中获取 `img_url`、`sub_url` 两个字段的参数。 从 [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** **注:`img_url`、`sub_url` 两个字段的值看似为存于 BFS 中的 png 图片 url实则只是经过伪装的实时 Token故无需且不能试图访问这两个 url**

View File

@ -46,6 +46,59 @@ curl 'https://api.bilibili.com/x/report/click/now'
</details> </details>
## 获取适用于 RTC 的时间戳
> https://api.live.bilibili.com/xlive/open-interface/v1/rtc/getTimestamp
*请求方法: GET*
<!--{
"from": {
"url": "https://live.bilibili.com/9196015"
}
}-->
**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'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"timestamp": 1723899823,
"microtime": 1723899823683
}
}
```
</details>
## 获取服务器端UTC时间 ## 获取服务器端UTC时间
> https://interface.bilibili.com/serverdate.js > https://interface.bilibili.com/serverdate.js
@ -64,11 +117,11 @@ window.serverdate = Date.UTC(YYYY, M, D, h, m, s);
curl 'https://interface.bilibili.com/serverdate.js' curl 'https://interface.bilibili.com/serverdate.js'
``` ```
<details> <details>
<summary>查看响应示例:</summary> <summary>查看响应示例:</summary>
```js ```js
window.serverdate = Date.UTC(2021, 4, 16, 17, 31, 8); window.serverdate = Date.UTC(2021, 4, 16, 17, 31, 8);
``` ```
</details> </details>

View File

@ -65,6 +65,123 @@ curl 'https://api.bilibili.com/x/web-interface/search/default'
</details> </details>
## 获取热搜列表
> https://api.bilibili.com/x/web-interface/search/square
*请求方式: GET*
**URL参数:**
|参数名|类型|内容|必要性|备注|
|-|-|-|-|-|
|limit|num|结果限制|必要|范围 [1, 50]|
|platform|str|平台标识|不必要|web: web 端|
**JSON回复:**
根对象:
|字段|类型|内容|备注|
|-|-|-|-|
|code|num|返回值|0: 成功<br />-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'
```
<details>
<summary>查看响应示例:</summary>
```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": []
}
}
}
```
</details>
## 获取热搜列表web端 ## 获取热搜列表web端
> https://s.search.bilibili.com/main/hotword > https://s.search.bilibili.com/main/hotword
@ -109,7 +226,7 @@ curl 'https://api.bilibili.com/x/web-interface/search/default'
| res | array| null | | | res | array| null | |
| show_name | str | 完整关键词| | | show_name | str | 完整关键词| |
| pos | num | 名次 | 1-10 | | pos | num | 名次 | 1-10 |
| word_type | num | 条目属性 | 均返回8 | | word_type | num | 条目属性 | 4: 新<br />5: 热<br />6: [雾,咒,小丑(愚人节)] 具体看icon<b r/>7: 直播中<br />8: 默认(无标签)<br />9: 梗<br />11: 话题<br />12: 独家 |
| id | num | 名次 | 1-10 | | id | num | 名次 | 1-10 |
| goto_value | str | 空 | | | goto_value | str | 空 | |
| live_id | array| null | | | live_id | array| null | |
@ -353,7 +470,7 @@ curl 'https://s.search.bilibili.com/main/hotword'
*请求方式GET* *请求方式GET*
榜单每隔固定时间统计一次请求后返回搜索前20的关键词 榜单每隔固定时间统计一次
带有转义 带有转义
@ -361,7 +478,7 @@ curl 'https://s.search.bilibili.com/main/hotword'
| 参数名 | 类型 | 内容 | 必要性 | 备注 | | 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------- | ---- | ---------------- | ------ | ---- | | ------- | ---- | ---------------- | ------ | ---- |
| limit | num | 热搜数量 | 非必要 | 1~100 | | limit | num | 热搜数量 | 非必要 | 留空为20, 最大为100 |
**json回复** **json回复**
@ -395,7 +512,7 @@ curl 'https://s.search.bilibili.com/main/hotword'
| position | num | 名次 | 1-20/limit | | position | num | 名次 | 1-20/limit |
| keyword | str | 关键词 | | | keyword | str | 关键词 | |
| show_name | str | 完整关键词| | | show_name | str | 完整关键词| |
| word_type | num | 条目属性 | 4<br />5<br />6<br />8默认 | | word_type | num | 条目属性 | 同 web 端 |
| icon | str | 图标url | | | icon | str | 图标url | |
| hot_id | num | 热词id | 大概是吧? | | hot_id | num | 热词id | 大概是吧? |

View File

@ -579,8 +579,6 @@ curl -G 'https://api.bilibili.com/x/web-interface/search/all/v2' \
</details> </details>
## 分类搜索web端 ## 分类搜索web端
> https://api.bilibili.com/x/web-interface/wbi/search/type > https://api.bilibili.com/x/web-interface/wbi/search/type
@ -589,9 +587,7 @@ curl -G 'https://api.bilibili.com/x/web-interface/search/all/v2' \
*请求方式GET* *请求方式GET*
认证方式CookieSESSDATA 鉴权方式:[Wbi 签名](../misc/sign/wbi.md), Cookie 中含有 [`buvid3`](../misc/buvid3_4.md) 字段, Referer 在 `.bilibili.com` 下, User-Agent 不含敏感子串
鉴权方式:[Wbi 签名](../misc/sign/wbi.md)
根据关键词进行搜索返回结果每页20项 根据关键词进行搜索返回结果每页20项

View File

@ -13,10 +13,25 @@
**url参数** **url参数**
| 参数名 | 类型 | 内容 | 必要性 | 备注 | | 参数名 | 类型 | 内容 | 必要性 | 备注 |
| --------- | ---- | ---------------------- | ------ | ------------------------ | | --------------- | ---- | ---------------------- | ------ | ------------------------ |
| term | str | 需要获得建议的输入内容 | 必要 | | | term | str | 需要获得建议的输入内容 | 必要 | |
| main_ver | str | v1 | 非必要 | 固定为`v1` | | main_ver | str | v1 | 非必要 | 默认为 `v1` |
| highlight | str | 任意 | 非必要 | 有此项开启关键词高亮标签 | | 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回复** **json回复**
@ -24,27 +39,11 @@
| 字段 | 类型 | 内容 | 备注 | | 字段 | 类型 | 内容 | 备注 |
| ----------- | ---- | ------------ | ------------ | | ----------- | ---- | ------------ | ------------ |
| exp_str | str | 实验字符串? | 作用尚不明确 |
| code | num | 返回值 | 0成功 | | code | num | 返回值 | 0成功 |
| cost | obj | 详细搜索用时 | 大概是吧? |
| result | obj | 搜索建议结果 | | | result | obj | 搜索建议结果 | |
| page caches | obj | | 作用尚不明确 |
| sengine | obj | | 作用尚不明确 |
| stoken | str | | 作用尚不明确 | | stoken | str | | 作用尚不明确 |
`cost`对象:
| 字段 | 类型 | 内容 | 备注 |
| ----- | ---- | -------- | ---- |
| about | obj | 套了个娃 | |
`cost`中的`about`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------------ | ---- | ---- | ---- |
| params_check | str | | |
| total | str | | |
| main_handler | str | | |
`result`对象: `result`对象:
| 字段 | 类型 | 内容 | 备注 | | 字段 | 类型 | 内容 | 备注 |
@ -62,119 +61,114 @@
`tag`数组中的对象: `tag`数组中的对象:
| 字段 | 类型 | 内容 | 备注 | | 字段 | 类型 | 内容 | 备注 |
| ----- | ---- | ---------- | ------------------------------------------------------------ | | ----- | ---- | ---------- | -------------------------------------------------- |
| value | str | 关键词内容 | | | value | str | 关键词内容 | |
| ref | num | 0 | 作用尚不明确 | | ref | num | 0 | 作用尚不明确 |
| name | str | 显示内容 | 在无高亮显示时与`value`相同<br />有高亮显示时带有`<em class="suggest_high_light">`的xml标签 | | name | str | 显示内容 | 带有 `<em class="suggest_high_light">` 的 XML 标签 |
| spid | num | | 作用尚不明确 | | spid | num | 5 | 作用尚不明确 |
| type | str | 空 | |
`page caches`对象:
| 字段 | 类型 | 内容 | 备注 |
| ---------- | ---- | ---- | ------------ |
| save cache | str | no | 作用尚不明确 |
`sengine`对象:
| 字段 | 类型 | 内容 | 备注 |
| ----- | ---- | ---- | ------------ |
| usage | num | 0 | 作用尚不明确 |
**示例:** **示例:**
获取关于`lei`的搜索建议,关键词带有高亮 获取关于 `洛天依` 的搜索建议
```shell ```shell
curl -G 'https://s.search.bilibili.com/main/suggest' \ curl -G 'https://s.search.bilibili.com/main/suggest' \
--data-urlencode 'term=lei' \ --data-urlencode 'term=洛天依'
--data-urlencode 'main_ver=v1' \
--data-urlencode 'highlight='
``` ```
<details> <details>
<summary>查看响应示例</summary> <summary>查看响应示例:</summary>
```json ```json
{ {
"exp_str": "106301_106700",
"code": 0, "code": 0,
"cost": {
"about": {
"params_check": "0.000103",
"total": "0.011644",
"main_handler": "0.011472"
}
},
"result": { "result": {
"tag": [ "tag": [
{ {
"value": "雷军", "value": "洛天依",
"term": "洛天依",
"ref": 0, "ref": 0,
"name": "雷军", "name": "<em class=\"suggest_high_light\">洛天依</em>",
"spid": 1 "spid": 5,
"type": ""
}, },
{ {
"value": "雷之律者", "value": "洛天依十二周年",
"term": "洛天依十二周年",
"ref": 0, "ref": 0,
"name": "雷之律者", "name": "<em class=\"suggest_high_light\">洛天依</em>十二周年",
"spid": 5 "spid": 5,
"type": ""
}, },
{ {
"value": "LEI神", "value": "洛天依演唱会",
"term": "洛天依演唱会",
"ref": 0, "ref": 0,
"name": "<em class=\"suggest_high_light\">LEI</em>神", "name": "<em class=\"suggest_high_light\">洛天依</em>演唱会",
"spid": 5 "spid": 5,
"type": ""
}, },
{ {
"value": "LEIGH ELLEXSON", "value": "洛天依手办",
"term": "洛天依手办",
"ref": 0, "ref": 0,
"name": "<em class=\"suggest_high_light\">LEI</em>GH ELLEXSON", "name": "<em class=\"suggest_high_light\">洛天依</em>手办",
"spid": 5 "spid": 5,
"type": ""
}, },
{ {
"value": "LEICA Q2", "value": "洛天依歌曲",
"term": "洛天依歌曲",
"ref": 0, "ref": 0,
"name": "<em class=\"suggest_high_light\">LEI</em>CA Q2", "name": "<em class=\"suggest_high_light\">洛天依</em>歌曲",
"spid": 5 "spid": 5,
"type": ""
}, },
{ {
"value": "LEIGHANNE", "value": "洛天依童话镇",
"term": "洛天依童话镇",
"ref": 0, "ref": 0,
"name": "<em class=\"suggest_high_light\">LEI</em>GHANNE", "name": "<em class=\"suggest_high_light\">洛天依</em>童话镇",
"spid": 0 "spid": 5,
"type": ""
}, },
{ {
"value": "雷达探测姬", "value": "洛天依东京不太热",
"term": "洛天依东京不太热",
"ref": 0, "ref": 0,
"name": "雷达探测姬", "name": "<em class=\"suggest_high_light\">洛天依</em>东京不太热",
"spid": 5 "spid": 5,
"type": ""
}, },
{ {
"value": "雷律", "value": "洛天依霜雪千年",
"term": "洛天依霜雪千年",
"ref": 0, "ref": 0,
"name": "雷律", "name": "<em class=\"suggest_high_light\">洛天依</em>霜雪千年",
"spid": 5 "spid": 5,
"type": ""
}, },
{ {
"value": "雷霆嘎巴", "value": "洛天依生日会",
"term": "洛天依生日会",
"ref": 0, "ref": 0,
"name": "雷霆嘎巴", "name": "<em class=\"suggest_high_light\">洛天依</em>生日会",
"spid": 5 "spid": 5,
"type": ""
}, },
{ {
"value": "雷霆沙赞", "value": "洛天依生日",
"term": "洛天依生日",
"ref": 0, "ref": 0,
"name": "雷霆沙赞", "name": "<em class=\"suggest_high_light\">洛天依</em>生日",
"spid": 5 "spid": 5,
"type": ""
} }
] ]
}, },
"page caches": { "stoken": "4020133863501304726"
"save cache": "no"
},
"sengine": {
"usage": 0
},
"stoken": "12344377692164099019"
} }
``` ```

822
docs/user/medals.md Normal file
View File

@ -0,0 +1,822 @@
# 所有粉丝勋章
## 指定用户的所有粉丝勋章信息
> https://api.live.bilibili.com/xlive/web-ucenter/user/MedalWall
*请求方法: GET*
认证方式: Cookie (SESSDATA)
<!--{
"gh": [425]
}-->
**URL参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| --------- | ---- | -------- | ------ | ---- |
| target_id | num | 目标 mid | 必要 | |
**JSON回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ----------------------------- |
| code | num | 返回值 | 0: 成功<br />-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: 未直播<br />1: 正在直播<br />2: 轮播中 |
| offical | num | 主播认证类型 | 参见 [用户认证类型一览](offical_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 | 守护等级? | |
| wearing_status | num | 佩戴状态 | 0: 未佩戴<br />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 | 守护等级? | |
| 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'
```
<details>
<summary>查看响应示例:</summary>
```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
}
}
```
</details>

View File

@ -2559,6 +2559,8 @@ curl -G 'https://app.bilibili.com/x/v2/space/likearc' \
鉴权方式:[Wbi 签名](../misc/sign/wbi.md) 鉴权方式:[Wbi 签名](../misc/sign/wbi.md)
另见 [根据关键词查找视频](../video/collection.md#根据关键词查找视频), 功能基本相同, 暂未发现风控校验
**url参数** **url参数**
| 参数名 | 类型 | 内容 | 必要性 | 备注 | | 参数名 | 类型 | 内容 | 必要性 | 备注 |
@ -2778,6 +2780,11 @@ curl -G 'https://api.bilibili.com/x/space/arc/search' \
### 查询用户投稿相簿预览 ### 查询用户投稿相簿预览
<details>
<summary>相簿功能已下线, 以下接口失效, 参见
<a href="https://github.com/SocialSisterYi/bilibili-API-collect/issues/801">#801</a>
</summary>
> https://api.bilibili.com/x/space/album/index > https://api.bilibili.com/x/space/album/index
*请求方式GET* *请求方式GET*
@ -2905,8 +2912,15 @@ curl -G 'https://api.bilibili.com/x/space/album/index' \
</details> </details>
</details>
### 查询用户投稿相簿明细 ### 查询用户投稿相簿明细
<details>
<summary>
相簿功能已下线, 以下接口失效
</summary>
> https://api.vc.bilibili.com/link_draw/v1/doc/doc_list > https://api.vc.bilibili.com/link_draw/v1/doc/doc_list
> https://api.bilibili.com/x/dynamic/feed/draw/doc_list > https://api.bilibili.com/x/dynamic/feed/draw/doc_list
@ -3050,6 +3064,8 @@ curl -G 'https://api.vc.bilibili.com/link_draw/v1/doc/doc_list' \
</details> </details>
</details>
## 频道 ## 频道
<img src="../../assets/img/channel.svg" width="100" height="100" /> <img src="../../assets/img/channel.svg" width="100" height="100" />
@ -3784,280 +3800,6 @@ curl -G 'https://api.bilibili.com/x/space/channel/video/check
</details> </details>
## 收藏
<img src="../../assets/img/collect.svg" width="100" height="100" />
### 查询用户创建的视频收藏夹
> https://api.bilibili.com/x/v3/fav/folder/created/list-all
*请求方式GET*
认证方式CookieSESSDATA
查看私有收藏夹时需要认证
**url参数**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | ----------- | ------ | ---- |
| up_mid | num | 目标用户mid | 必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ----------------------------- | -------- | --------------------------- |
| code | num | 返回值 | 0成功<br />-400请求错误 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | 隐藏时null<br />公开时obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ----- | --------------------------------------- | -------------- | ---- |
| count | num | 创建的收藏夹数 | |
| list | 无收藏夹时null<br />有收藏夹时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默认收藏夹<br />1其他收藏夹 |
| 1 | 私有收藏夹 | 0公开<br />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'
```
<details>
<summary>查看响应示例:</summary>
```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
}]
}
}
```
</details>
### 查询用户收藏的视频收藏夹
> 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成功<br />-101账号未登录<br />-111csrf校验失败<br />40022签名过长 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | 隐藏时null<br />公开时obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ----- | --------------------------------------- | -------------- | ---- |
| count | num | 创建的收藏夹数 | |
| list | 无收藏夹时null<br />有收藏夹时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二进制处理<br />详细说明见下表 |
| 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 | 收藏夹总计视频数 | |
`attr`属性二进制值表:
| 其他有待补充... | 1默认收藏夹 | 0公开性 |
| --------------- | -------------------------------- | -------------------- |
| | 0默认收藏夹<br />1其他收藏夹 | 0公开<br />1私有 |
`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'
```
<details>
<summary>查看响应示例:</summary>
```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
}]
}
}
```
</details>
## 课程 ## 课程
<img src="../../assets/img/class.svg" width="100" height="100" /> <img src="../../assets/img/class.svg" width="100" height="100" />

View File

@ -145,10 +145,8 @@ curl -G 'https://api.bilibili.com/x/space/upstat' \
</details> </details>
## ~~订阅&投稿状态数(已弃用)~~ ## 用户导航栏状态数
<details>
<summary>查看折叠内容</summary>
> https://api.bilibili.com/x/space/navnum > https://api.bilibili.com/x/space/navnum
*请求方式GET* *请求方式GET*
@ -158,6 +156,7 @@ curl -G 'https://api.bilibili.com/x/space/upstat' \
| 参数名 | 类型 | 内容 | 必要性 | 备注 | | 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | ----------- | ------ | ---- | | ------ | ---- | ----------- | ------ | ---- |
| mid | num | 目标用户mid | 必要 | | | mid | num | 目标用户mid | 必要 | |
| web_location | str | 333.999 | 不必要 ||
**json回复** **json回复**
@ -177,37 +176,38 @@ curl -G 'https://api.bilibili.com/x/space/upstat' \
| video | num | 投稿视频数 | | | video | num | 投稿视频数 | |
| bangumi | num | 追番数 | 无视隐私设置 | | bangumi | num | 追番数 | 无视隐私设置 |
| cinema | num | 追剧数 | 无视隐私设置 | | cinema | num | 追剧数 | 无视隐私设置 |
| channel | obj | 频道数 | | | channel | obj | 视频列表数 | |
| favourite | obj | 收藏夹数 | 无视隐私设置 | | favourite | obj | 收藏夹数 | |
| tag | num | 关注TAG数 | 无视隐私设置 | | tag | num | 关注TAG数 | 无视隐私设置 |
| article | num | 投稿专栏数 | | | article | num | 投稿专栏数 | |
| playlist | num | 0 | 作用尚不明确 | | playlist | num | 0 | 作用尚不明确 |
| album | num | 投稿相簿数 | | | album | num | 投稿图文数 | |
| audio | num | 投稿音频数 | | | audio | num | 投稿音频数 | |
| pugv | num | 投稿课程数 | | | pugv | num | 投稿课程数 | |
| upos | num | 动态数 | |
| season_num | num | 视频合集数 | |
`data`中的`channel`对象: `data`中的`channel`对象:
| 字段 | 类型 | 内容 | 备注 | | 字段 | 类型 | 内容 | 备注 |
| ------- | ----- | ---------- | ------------ | | ------- | ----- | ---------- | ------------ |
| master | num | 频道数 | | | master | num | 视频列表数 | |
| guest | num | 频道数 | | | guest | num | 视频列表数 | |
`data`中的`favourite`对象: `data`中的`favourite`对象:
| 字段 | 类型 | 内容 | 备注 | | 字段 | 类型 | 内容 | 备注 |
| ------ | ---- | ------------ | --------------------------------------- | | ------ | ---- | ------------ | --------------------------------------- |
| master | num | 全部收藏夹数 | 需要登录(SESSDATA) <br />只能查看自己的 | | master | num | 全部收藏夹数 | 需要登录(SESSDATA) <br />只能查看自己的 |
| guest | num | 公开收藏夹数 | 无视隐私设置 | | guest | num | 公开收藏夹数 | |
**示例:** **示例:**
查询用户`mid=239202390`的订阅&投稿状态数 查询用户`mid=645769214`的订阅&投稿状态数
```shell ```shell
curl -G 'https://api.bilibili.com/x/space/navnum' \ curl -G 'https://api.bilibili.com/x/space/navnum' \
--data-urlencode 'mid=239202390' \ --data-urlencode 'mid=645769214'
-b 'SESSDATA=xxx'
``` ```
<details> <details>
@ -219,28 +219,29 @@ curl -G 'https://api.bilibili.com/x/space/navnum' \
"message": "0", "message": "0",
"ttl": 1, "ttl": 1,
"data": { "data": {
"video": 290, "video": 34,
"bangumi": 25, "bangumi": 1,
"cinema": 13, "cinema": 0,
"channel": { "channel": {
"master": 2, "master": 5,
"guest": 2 "guest": 5
}, },
"favourite": { "favourite": {
"master": 6, "master": 0,
"guest": 6 "guest": 0
}, },
"tag": 0, "tag": 0,
"article": 1, "article": 1,
"playlist": 0, "playlist": 0,
"album": 150, "album": 59,
"audio": 4, "audio": 0,
"pugv": 0 "pugv": 0,
"season_num": 1,
"opus": 59
} }
} }
``` ```
</details>
</details> </details>
## 相簿投稿数 ## 相簿投稿数

View File

@ -2,7 +2,7 @@
请注意区分 **合集(seasons_archives)** 和 **视频列表(seasons_series)** 请注意区分 **合集(seasons_archives)** 和 **视频列表(seasons_series)**
合集是后加入的功能, 图标为立体叠放的正方形(.icon-heji), 可以在创作中心管理 合集是后加入的功能, 图标为立体叠放的正方形(.icon-heji), 可以在创作中心管理, 参见 [合集管理](../creativecenter/season.md)
列表即系列(series)或频道(channel), 图标为平面叠放的矩形且中央有播放按钮标识(.icon-ic_channel1), 在个人空间直接操作 列表即系列(series)或频道(channel), 图标为平面叠放的矩形且中央有播放按钮标识(.icon-ic_channel1), 在个人空间直接操作
@ -1563,3 +1563,424 @@ curl -G "https://api.bilibili.com/x/series/archives" \
``` ```
</details> </details>
## 根据关键词查找视频
> https://api.bilibili.com/x/series/recArchivesByKeywords
*请求方式GET*
**URL参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | -------- | ------ | ---- |
| mid | num | 用户 mid | 必要 | |
| keywords | str | 关键词 | 必要 | 可为空, 即获取所有视频 |
| ps | num | 每页视频数 | 非必要 | 默认为 0, 留空为 20 |
| pn | num | 页码 | 非必要 | 留空为 1 |
| orderby | str | 排序方式 | 非必要 | 最新发布: pubdate(默认)<br />最多播放: views<br />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"
```
<details>
<summary>查看响应示例:</summary>
```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
}
}
}
```
</details>
## 创建视频列表
> 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"
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"series_id": 4269765
}
}
```
</details>
## 删除视频列表
> 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"
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {}
}
```
</details>
## 删除视频列表中的稿件
> 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"
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {}
}
```
</details>
## 添加稿件至视频列表
> 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"
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {}
}
```
</details>
## 编辑视频列表信息
> 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"
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {}
}
```
</details>

View File

@ -1,4 +1,6 @@
# web 播放器信息 # 播放器
## web 播放器信息
web 播放器的信息接口,提供正常播放需要的元数据,包括:智能防挡弹幕、字幕、章节看点等。 web 播放器的信息接口,提供正常播放需要的元数据,包括:智能防挡弹幕、字幕、章节看点等。
@ -16,7 +18,6 @@ web 播放器的信息接口,提供正常播放需要的元数据,包括:
| w_rid | str | WBI 签名 | 不必要 | | | w_rid | str | WBI 签名 | 不必要 | |
| wts | num | 当前 unix 时间戳 | 不必要 | | | wts | num | 当前 unix 时间戳 | 不必要 | |
**json 回复:** **json 回复:**
根对象: 根对象:
@ -38,8 +39,7 @@ web 播放器的信息接口,提供正常播放需要的元数据,包括:
|dm_mask | obj | | webmask 信息(如果没有这一项,说明这个视频没有防挡功能) | |dm_mask | obj | | webmask 信息(如果没有这一项,说明这个视频没有防挡功能) |
|subtitle | obj | | 字幕信息(需要登录,不登录此项内容为 `[]` | |subtitle | obj | | 字幕信息(需要登录,不登录此项内容为 `[]` |
|view_points| array | | 章节看点信息 | |view_points| array | | 章节看点信息 |
| 其他 | ... | | 主要是观看记录、使用者等级权限等个人信息 | | 其他 | ... | | 主要是观看记录、使用者等级权限、背景音乐等信息 |
`dm_mask`对象(如果有): `dm_mask`对象(如果有):
@ -58,7 +58,7 @@ web 播放器的信息接口,提供正常播放需要的元数据,包括:
| --------- | ----- | -------- | ---- | | --------- | ----- | -------- | ---- |
|allow_submit|bool | true | | |allow_submit|bool | true | |
| lan | str | "" | | | lan | str | "" | |
|lan_doc | str | "" | | | |lan_doc | str | "" | |
|subtitles| array | | 不登录为 `[]` | |subtitles| array | | 不登录为 `[]` |
`subtitles` 数组内的元素: `subtitles` 数组内的元素:
@ -69,7 +69,7 @@ web 播放器的信息接口,提供正常播放需要的元数据,包括:
| ai_type | num | | | | ai_type | num | | |
| id | num | | | | id | num | | |
|id_str | str| | 和 id 不一样 | |id_str | str| | 和 id 不一样 |
| is_lock | bool | | | is_lock | bool | | |
| lan | str | 语言类型英文字母缩写 || | lan | str | 语言类型英文字母缩写 ||
| lan_doc | str| 语言类型中文名称 | | | lan_doc | str| 语言类型中文名称 | |
|subtitle_url|str| 资源 url 地址 | | |subtitle_url|str| 资源 url 地址 | |
@ -89,10 +89,10 @@ web 播放器的信息接口,提供正常播放需要的元数据,包括:
示例: 示例:
```shell ```shell
curl -G https://api.bilibili.com/x/player/wbi/v2?aid=515345690&cid=825851971 curl -G "https://api.bilibili.com/x/player/wbi/v2?aid=515345690&cid=825851971"
``` ```
```json ```jsonc
{ {
"code": 0, "code": 0,
"message": "0", "message": "0",
@ -149,5 +149,62 @@ curl -G https://api.bilibili.com/x/player/wbi/v2?aid=515345690&cid=825851971
} }
``` ```
## 播放反馈
> 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<br />可为任意非空字符串|
|url|str|日志 URL|非必要|从 [上传接口](../creativecenter/upload.md#上传接口) 得到的 upos 协议 URL|
|task_type|num|任务类型|非必要|300: 播放卡顿<br />301: 进度条君无法调戏<br />354: 校园网无法访问<br />303: 弹幕无法显示<br />553: 跳过首尾时间有误<br />304: 出现浮窗广告<br />305: 无限小电视<br />302: 音画不同步<br />306: 黑屏<br />307: 其他|
**JSON回复:**
|字段|类型|内容|备注|
|-|-|-|-|
|code|num|返回值|0: 成功<br />-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"
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"task_id": 850448532
}
}
```
</details>

View File

@ -80,8 +80,6 @@ curl 'https://api.bilibili.com/x/v2/history/report' \
默认间隔15秒一次, 亦可记录播放历史 默认间隔15秒一次, 亦可记录播放历史
尽管以下除正文 `aid` 以外的参数均为非必要, 但缺少可能会导致播放不被记录, 同一 IP/登陆用户 每五分钟最多记录一次播放
该接口较为复杂, 且参数计算方法均为推测, 实际过程不明, 可能含有错误, 若要正式使用可以把已播放的持续时间全都设为相同值 该接口较为复杂, 且参数计算方法均为推测, 实际过程不明, 可能含有错误, 若要正式使用可以把已播放的持续时间全都设为相同值
**URL参数:** **URL参数:**
@ -125,11 +123,11 @@ curl 'https://api.bilibili.com/x/v2/history/report' \
| dt | num | 2 | 非必要 | | | dt | num | 2 | 非必要 | |
| outer | num | 0 | 非必要 | | | outer | num | 0 | 非必要 | |
| spmid | str | 333.788.0.0 | 非必要 | 作用尚不明确 | | spmid | str | 333.788.0.0 | 非必要 | 作用尚不明确 |
| from_spmid | str | 播放来源? | 非必要 | 也可为空, 如: 444.41.list.card_archive.click | | from_spmid | str | 播放来源? | 非必要 | 也可为空, 如: `444.41.list.card_archive.click` `333.999.0.0` |
| session | str | 会话信息? | 非必要 | 每次刷新均不同, 生成原理尚不明确 | | session | str | 会话信息? | 非必要 | 一串无分隔小写 UUID |
| extra | obj | 额外信息, 如播放器版本 | 非必要 | 如: `{"player_version":"4.8.36"}` | | extra | obj | 额外信息, 如播放器版本 | 非必要 | 如: `{"player_version":"4.8.36"}` |
| play_type | num | 播放动作 | 非必要 | 0播放中<br />1开始播放<br />2暂停<br />3继续播放<br />4: 结束播放 | | play_type | num | 播放动作 | 非必要 | 0播放中<br />1开始播放<br />2暂停<br />3继续播放<br />4: 结束播放 |
| csrf | str | CSRF Token即 Cookie 中 bili_jct) | 非必要 | | | csrf | str | CSRF Token (即 Cookie 中 bili_jct) | 非必要 | |
**json回复** **json回复**
@ -172,3 +170,76 @@ curl 'https://api.bilibili.com/x/click-interface/web/heartbeat' \
``` ```
</details> </details>
## 开始观看视频 (web端)
> https://api.bilibili.com/x/click-interface/click/web/h5
*请求方式: POST*
认证方式: Cookie (SESSDATA)
该接口亦被用于计算播放量, 播放量更新不是实时的
**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 签名](docs/misc/sign/wbi.md) |
| wts | num | UNIX 秒级时间戳 | 不必要 | 参见[WBI 签名](docs/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成功<br />-400请求错误|
|message|str|错误信息|默认为 `0`|
|ttl|num|1||
**示例:**
```shell
curl 'https://api.bilibili.com/x/click-interface/click/web/h5' \
--data-urlencode 'aid=2' \
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1
}
```
</details>

View File

@ -1,6 +1,10 @@
# 视频状态数 # 视频状态数
## 视频状态数仅avid ## 视频状态数仅avid
<details>
<summary>该接口已失效</summary>
> https://api.bilibili.com/archive_stat/stat > https://api.bilibili.com/archive_stat/stat
*请求方式GET* *请求方式GET*
@ -79,6 +83,8 @@ curl -G 'https://api.bilibili.com/archive_stat/stat' \
</details> </details>
</details>
## 视频状态数bvid/avid ## 视频状态数bvid/avid
> https://api.bilibili.com/x/web-interface/archive/stat > https://api.bilibili.com/x/web-interface/archive/stat

View File

@ -6,7 +6,9 @@
## qn视频清晰度标识 ## qn视频清晰度标识
**注:该值在 DASH 格式下无效,因为 DASH 格式会取到所有分辨率的流地址** 注:该值在 DASH 格式下无效,因为 DASH 格式会取到所有分辨率的流地址
又注: B站对于新的视频更新了播放设置, 较高分辨率均采用 DASH, 较低分辨率与老视频还保留了 MP4, 这导致较新视频无法获取 MP4 格式的高分辨率视频, 参见 [#606](https://github.com/SocialSisterYi/bilibili-API-collect/issues/606) 或 [cv949156](https://www.bilibili.com/read/cv949156/)
| 值 | 含义 | 备注 | | 值 | 含义 | 备注 |
| ---- | -------------- | ------------------------------------------------------------ | | ---- | -------------- | ------------------------------------------------------------ |

File diff suppressed because it is too large Load Diff

View File

@ -4,12 +4,7 @@
> https://api.bilibili.com/x/web-interface/popular/precious > https://api.bilibili.com/x/web-interface/popular/precious
**url参数** *请求方式GET*
| 字段 | 类型 | 内容 | 必要性 | 备注 |
| --------- | ---- | -------- | ----- | ----- |
| page | num | 页码 | 非必要 | 默认为`1` |
| page_size | num | 每页数量 | 非必要 | 默认为`85` |
**json回复** **json回复**
@ -26,53 +21,25 @@
| 字段 | 类型 | 内容 | 备注 | | 字段 | 类型 | 内容 | 备注 |
| - | - | - | - | | - | - | - | - |
| title | string | 标题 | 入站必刷 | | title | str | 标题 | 入站必刷 |
| media_id | int | media_id | | | media_id | num | media_id | |
| explain | string | 解释(概括)| 我不允许还有人没看过这85个宝藏视频! | | explain | str | 解释(概括)| 我不允许还有人没看过这??个宝藏视频! |
| list | list | 列表 | | | list | array | 列表 | |
`data` 中的 `list` 字段: `data`中的`list`数组中的对象:
| 字段 | 类型 | 内容 | 备注 | 基本同[获取视频详细信息web端](../video/info.md#获取视频详细信息web端)中的data对象
| - | - | - | - |
| aid | int | aid | |
| videos | int | 视频数? | |
| tid | int | 分区 id | |
| tname | string | 分区名称 | |
| copyright | int | 版权 | |
| pic | url | 封面 url | |
| title | string | 标题 | |
| pubdate | int | 发布时间 | 时间戳 |
| ctime | int | 暂不清楚 | 时间戳 |
| desc | string | 简介 | |
| state | int | 暂不清楚 | |
| duration | int | 视频时长 | 单位为秒 |
| mission_id | int | 暂不清楚 | |
| rights | dict | 暂不清楚 | 好像没啥么用 |
| owner | dict | 作者 | |
| stat | dict | 状态 | |
| dynamic | string | 动态发布时写的文字 | |
| cid | int | cid | |
| dimension | dict | 视频的一些属性 | |
| season_id | int | 暂不清楚 | |
| short_link | string | 短链 | |
| short_link_v2 | string | 短链 | 第二版 |
| bvid | string | bvid | |
| season_type | int | 分区 tid? | |
| is_ogv | bool | 暂不清楚 | |
| ogv_info | dict/null? | 暂不清楚 | |
| rcmd_reason | string? | 暂不清楚 | |
| achievement | string | 荣誉概述 | |
**示例:** **示例:**
``` shell ``` shell
curl -G 'https://api.bilibili.com/x/web-interface/popular/precious' curl -G 'https://api.bilibili.com/x/web-interface/popular/precious'
``` ```
<details>
<summary>查看响应事例:</summary>
``` json <details>
<summary>查看响应示例:</summary>
```jsonc
{ {
"code": 0, "code": 0,
"message": "0", "message": "0",
@ -80,22 +47,22 @@ curl -G 'https://api.bilibili.com/x/web-interface/popular/precious'
"data": { "data": {
"title": "入站必刷", "title": "入站必刷",
"media_id": 496307088, "media_id": 496307088,
"explain":"我不允许还有人没看过这85个宝藏视频!", "explain": "我不允许还有人没看过这98个宝藏视频",
"list": [ "list": [
// ...
{ {
"aid":715024588, "aid": 706,
"videos": 1, "videos": 1,
"tid":233, "tid": 47,
"tname":"极客DIY", "tname": "同人·手书",
"copyright":1, "copyright": 2,
"pic":"http://i1.hdslb.com/bfs/archive/55ce9a4d1797ec56a0d4ed727f1a279b89ec3664.jpg", "pic": "http://i1.hdslb.com/bfs/archive/753453a776fca838165a52c7511e8557857b61ea.jpg",
"title":"【才浅】15天花20万元用500克黄金敲数万锤纯手工打造三星堆黄金面具", "title": "【東方】Bad Apple!! PV【影絵】",
"pubdate":1618207101, "pubdate": 1256995125,
"ctime":1618207101, "ctime": 1497344829,
"desc":"倾家荡产求三连支持!!!请大家帮忙给新系列想个名字,点赞一百万的话制作三星堆黄金权杖,不会真的可以点到一百万吧\nbgm:\n-Old-B - 【Free Beat】侠之道 、于剑飞 - 01 片头曲 帝陵、AniFace - 夜辞秋江", "desc": "sm8628149 2011/9/25追记大家如果看到空耳字幕请果断举报净化弹幕环境你我有责感谢。",
"state": 0, "state": 0,
"duration":717, "duration": 219,
"mission_id":16881,
"rights": { "rights": {
"bp": 0, "bp": 0,
"elec": 0, "elec": 0,
@ -103,7 +70,7 @@ curl -G 'https://api.bilibili.com/x/web-interface/popular/precious'
"movie": 0, "movie": 0,
"pay": 0, "pay": 0,
"hd5": 0, "hd5": 0,
"no_reprint":1, "no_reprint": 0,
"autoplay": 1, "autoplay": 1,
"ugc_pay": 0, "ugc_pay": 0,
"is_cooperation": 0, "is_cooperation": 0,
@ -113,43 +80,48 @@ curl -G 'https://api.bilibili.com/x/web-interface/popular/precious'
"pay_free_watch": 0 "pay_free_watch": 0
}, },
"owner": { "owner": {
"mid":2200736, "mid": 37,
"name":"才疏学浅的才浅", "name": "折射",
"face":"http://i2.hdslb.com/bfs/face/1f4819b224cd882025a9a6a5f2c6680c332f37bc.jpg" "face": "http://i1.hdslb.com/bfs/face/49d19d3d9cc4b3938128cacd650859ac612156a1.gif"
}, },
"stat": { "stat": {
"aid":715024588, "aid": 706,
"view":13833908, "view": 11329388,
"danmaku":215105, "danmaku": 82247,
"reply":39792, "reply": 544932,
"favorite":619513, "favorite": 502984,
"coin":2484204, "coin": 195079,
"share":122302, "share": 95877,
"now_rank": 0, "now_rank": 0,
"his_rank":1, "his_rank": 88,
"like":2338710, "like": 480388,
"dislike":0 "dislike": 0,
"vt": 0,
"vv": 11329388
}, },
"dynamic":"倾家荡产求三连!!", "dynamic": "",
"cid":323723441, "cid": 3724723,
"dimension": { "dimension": {
"width":1920, "width": 480,
"height":1080, "height": 360,
"rotate": 0 "rotate": 0
}, },
"season_id":19992, "season_id": 879555,
"short_link":"https://b23.tv/BV16X4y1g7wT", "short_link_v2": "https://b23.tv/BV1xx411c79H",
"short_link_v2":"https://b23.tv/BV16X4y1g7wT", "cover43": "",
"bvid":"BV16X4y1g7wT", "bvid": "BV1xx411c79H",
"season_type": 0, "season_type": 0,
"is_ogv": false, "is_ogv": false,
"ogv_info": null, "ogv_info": null,
"rcmd_reason": "", "rcmd_reason": "",
"achievement":"央视新华社点赞,博物馆喊话来上班!" "enable_vt": 0,
"ai_rcmd": null,
"achievement": "东方project标志性视频"
}, },
... // ...
] ]
} }
} }
``` ```
</details> </details>

83
docs/wallet/info.md Normal file
View File

@ -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: 成功<br />8006000004: 缺参<br />别的错误码在 errno |
| errno | num | 错误码 | 8006000004: 缺参<br />800501008: 内部错误(传的不是JSON)<br />800501007: 用户未登录 |
| msg | str | 返回信息 | SUCCESS: 成功<br />否则为错误信息 |
| showMsg | str | 显示信息 | 成功时为空 |
| data | obj | 数据本体 | |
| success | bool | 是否成功 | |
`data` 对象:
| 字段 | 类型 | 内容 | 备注 |
| ----------------- | ---- | ----------- | ---- |
| mid | num | 用户 mid | |
| totalBp | num | 总计 B 币 | |
| defaultBp | num | 默认 B 币? | |
| isoBp | 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'
```
<details>
<summary>查看响应示例:</summary>
```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
}
```
</details>

133
docs/web_widget/header.md Normal file

File diff suppressed because one or more lines are too long