BiliAPI
API认证与鉴权
Cookie方式(web端)
cookie中的值在访问登录接口成功登录时,用set-cookie
写入
在访问api时为Cookie
头的数据
Token有效期为1月,更改密码或过期失效
cookie项 | 含义 | 备注 |
---|---|---|
DedeUserID | 当前用户UID | |
DedeUserID__ckMd5 | 用户UID md5校验值 | |
SESSDATA | 登录Token | 用于用户识别与鉴权 作用同 access_key |
bili_jct | CSRF Token | 用于操作性接口 |
APP方式(手机客户端及TV端等)
参数 | 含义 | 备注 |
---|---|---|
access_key | APP登录Token | 注意必须在第一个参数 |
appkey | APP密钥 | |
refresh_token | APP刷新登录Token | 仅在刷新时使用 |
ts | 当前时间戳 | |
sign | APP签名 | 注意必须在最后一个参数 |
接口鉴权:
使用appkey
作为api的必要参数,并使用除sign
外所有参数的url字串后连接相对应的盐值进行md5校验(32位小写),把计算结果作为sign的值,与前面参数一同发送
appkey与appsec一一对应
已知的appkey与签名:
appkey | appsec(sign盐值) | 平台 | 应用 | 备注 |
---|---|---|---|---|
07da50c9a0bf829f | 75d35aa5c06fb46e40059a6a5bf671a6 | 安卓 | 概念版 | |
1d8b6e7d45233436 | 560c52ccd288fed045859ed18bffd973 | 安卓 | 客户端 | 一般用途 |
37207f2beaebf8d7 | e988e794d4d4b6dd43bc0e89d6e90c43 | 安卓 | biliLink | |
4409e2ce8ffd12b8 | 59b43e04ad6965f34319062b478f83dd | TV | 客户端 | |
5dce947fe22167f9 | 安卓 | 必剪 | ||
85eb6835b0a1034e | 2ad42749773c441109bdc0191257a664 | |||
aae92bc66f3edfab | af125a0d5279fd576c1b4418a3e8276d | PC | 投稿工具 | |
bb3101000e232e27 | 36efcfed79309338ced0380abd824ac1 | |||
bca7e84c2d947ac6 | 安卓 | 客户端 | 登录专用 | |
cc578d267072c94d | 安卓 | 轻视频 | ||
cc8617fd6961e070 | 安卓 | 漫画 | ||
iVGUTjsxvpLeuDCf | aHRmhWMLkdeMuILqORnYZocwMBpMEOdt | 安卓 | 客户端 | 取流专用 |
例如:
参数的url为appkey=1d8b6e7d45233436&test=123
->连接盐值后为appkey=1d8b6e7d45233436&test=123560c52ccd288fed045859ed18bffd973
->进行md5 32bit校验,结果为8a3fdd74911862810f5c78f65afcce5d
->最终参数为appkey=1d8b6e7d45233436&test=123&sign=8a3fdd74911862810f5c78f65afcce5d
身份认证:
使用参数 access_key
进行身份验证,有效期为1月,作用同SESSDATA
可以使用 refresh_token
进行刷新
公共错误码
下表为大部分接口返回值中code
字段的值中公共的错误代码
权限类:
代码 | 含义 |
---|---|
-1 | 应用程序不存在或已被封禁 |
-2 | Access Key错误 |
-3 | API校验密匙错误 |
-4 | 调用方对该Method没有权限 |
-101 | 账号未登录 |
-102 | 账号被封停 |
-103 | 积分不足 |
-104 | 硬币不足 |
-105 | 验证码错误 |
-106 | 账号非正式会员或在适应期 |
-107 | 应用不存在或者被封禁 |
-108 | 未绑定手机 |
-110 | 未绑定手机 |
-111 | csrf 校验失败 |
-112 | 系统升级中 |
-113 | 账号尚未实名认证 |
-114 | 请先绑定手机 |
-115 | 请先完成实名认证 |
请求类:
代码 | 含义 |
---|---|
-304 | 木有改动 |
-307 | 撞车跳转 |
-400 | 请求错误 |
-401 | 未认证 |
-403 | 访问权限不足 |
-404 | 啥都木有 |
-405 | 不支持该方法 |
-409 | 冲突 |
-500 | 服务器错误 |
-503 | 过载保护,服务暂不可用 |
-504 | 服务调用超时 |
-509 | 超出限制 |
-616 | 上传文件不存在 |
-617 | 上传文件太大 |
-625 | 登录失败次数太多 |
-626 | 用户不存在 |
-628 | 密码太弱 |
-629 | 用户名或密码错误 |
-632 | 操作对象数量限制 |
-643 | 被锁定 |
-650 | 用户等级太低 |
-652 | 重复的用户 |
-658 | Token 过期 |
-662 | 密码时间戳过期 |
-688 | 地理区域限制 |
-689 | 版权限制 |
-701 | 扣节操失败 |
登录操作
人机验证方式登录包含账号密码登录与手机短信验证码登录
注:扫码登录不需要进行人机验证,故不使用以下接口
扫码登录
验证登录
人机验证流程:
- 请求验证码参数,得到登录密钥
key
与极验IDgt
和极验KEYchallenge
- 进行滑动or点击验证
- 返回验证结果
validate
与seccode
,进行短信或密码登录
申请验证码参数
请求方式:GET
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 | 登录秘钥 | 与人机验证无关,与登录接口有关,但与极验KEY对应 |
示例:
curl 'https://passport.bilibili.com/web/captcha/combine?plat=6'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"data": {
"result": {
"success": 1,
"gt": "bd111e81eda1cbb9f54425aafc0908ac",
"challenge": "2903a8eb967a1d990444cb23ea42f417",
"key": "76fb59fbd83a4d9d816162c5156fc964"
},
"type": 1
}
}
</details>
进行验证
本文档为Bilibili文档,验证码为geetest极验提供,故不提供api
- 打开手动验证器,在1、2分别填入上面API返回的
gt
和challenge
- 点击按钮3,稍等加载验证码,点击按钮4进行验证
- 验证完成后,点击按钮5生成验证结果
- 使用最开始获得到的
key
、challenge
和刚获得到的validate
、seccode
继续之后的登录操作
继续登录
二维码登录
web端流程&逻辑:
- 获取
二维码内容url
以及密钥
,以二维码内容url
生成二维码,等待手机客户端扫描 - 以
密钥
作为参数进行POST - if
code
==true
goto6
else goto 4(是否已经确认) - if
data
==-4
goto2
else goto 5(是否已经扫描) - if
data
==-5
goto3
& 提示已扫描
else goto1
&提示二维码超时或错误
(密钥是否有效) - 成功后会自动配置cookie 如需登录游戏分站则访问
data
.url
中的url
TV端流程&逻辑:
- 获取
二维码内容url
以及密钥
,以二维码内容url
生成二维码,等待手机客户端扫描 - 以
密钥
作为参数进行POST - if
code
==0
提示扫码成功
并存储access_key
于refersh_key
else goto4
- if
code
==86039
提示未扫描
&goto2
else goto5
- if
code
==86038
提示二维码超时或错误
&goto1
申请二维码URL及扫码密钥(web端)
请求方式:GET
密钥超时为180秒
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 |
status | bool | true | 作用尚不明确 |
ts | num | 请求时间 | 时间戳 |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
url | str | 二维码内容url | 恒为87字符 |
oauthKey | str | 扫码登录秘钥 | 恒为32字符 |
示例:
用申请到的data
.url
中的值生成二维码,等待手机客户端扫描,并将data
.oauthKey
保存等待使用
curl 'http://passport.bilibili.com/qrcode/getLoginUrl'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"status": true,
"ts": 1583314311,
"data": {
"url": "https://passport.bilibili.com/qrcode/h5/login?oauthKey=c3bd5286a2b40a822f5f60e9bf3f602e",
"oauthKey": "c3bd5286a2b40a822f5f60e9bf3f602e"
}
}
</details>
使用扫码登录(web端)
请求方式:POST
密钥超时为180秒
验证登录成功后会进行设置以下cookie项:
DedeUserID
DedeUserID__ckMd5
SESSDATA
bili_jct
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
oauthKey | str | 扫码登录秘钥 | 必要 | |
gourl | str | 跳转url | 非必要 | 默认为http://www.bilibili.com |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 |
message | str | 错误信息 | 正确无 |
ts | num | 扫码时间 | 错误无 |
status | bool | 扫码是否成功 | true:成功 false:未成功 |
data | 正确时:obj 错误时:num | 正确时:游戏分站url 错误时:错误代码 | 未成功时: -1:密钥错误 -2:密钥超时 -4:未扫描 -5:未确认 |
data 对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
url | str | 游戏分站跨域登录url |
示例:
使用扫描秘钥c3bd5286a2b40a822f5f60e9bf3f602e
登录
curl "http://passport.bilibili.com/qrcode/getLoginInfo"\
--data-urlencode 'oauthKey=c3bd5286a2b40a822f5f60e9bf3f602e' \
-c 'cookie.txt'
当密钥正确时但未扫描时status
为false
,data
为num值-4
<details>
<summary>查看响应示例:</summary>
{
"status":false,
"data":-4,
"message":"Can't scan~"
}
</details>
扫描成功但手机端未确认时status
为false
,data
为num值-5
<details>
<summary>查看响应示例:</summary>
{
"status":false,
"data":-5,
"message":"Can't confirm~"
}
</details>
扫描成功手机端确认登录后,status
为true
,data
为对象,并向浏览器写入cookie
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"status": true,
"ts": 1583315474,
"data": {
"url": "https://passport.biligame.com/crossDomain?DedeUserID=***&DedeUserID__ckMd5=***&Expires=***&SESSDATA=***&bili_jct=***&gourl=http%3A%2F%2Fwww.bilibili.com"
}
}
</details>
响应头部抓包信息:
可明显看见设置了几个cookie(填入浏览器即可成功登录)
<details>
<summary>查看响应示例:</summary>
HTTP/1.1 200 OK
Date: Wed, 04 Mar 2020 10:36:37 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: Apache-Coyote/1.1
Set-Cookie: sid=***; Domain=.bilibili.com; Expires=Thu, 04-Mar-2021 10:36:37 GMT; Path=/
Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/
Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/
Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/; HttpOnly
Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/
Expires: Wed, 04 Mar 2020 10:36:36 GMT
Cache-Control: no-cache
X-Cache-Webcdn: BYPASS from ks-sxhz-dx-w-01
</details>
游戏分站跨域登录url:
游戏分站跨域登录url与cookie的值一一对应,可用于不方便设置cookie的场合提取使用
https://passport.biligame.com/crossDomain?
DedeUserID=(登录UID)&
DedeUserID__ckMd5=(登录UID MD5值)&
Expires=(过期时间 秒)&
SESSDATA=(登录token)&
bili_jct=(csrf)&
gourl=(跳转网址 默认为主页)
申请二维码URL及扫码密钥(TV端)
http://passport.bilibili.com/x/passport-tv-login/qrcode/auth_code
请求方式:POST
鉴权方式:appkey
密钥超时为180秒
本接口可申请用于APP方式登录的access_key
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
appkey | str | APP密钥 | APP方式必要 | 仅可用4409e2ce8ffd12b8 |
local_id | str | TV端ID | TV端必要 | 可为0 |
ts | num | 当前时间戳 | APP方式必要 | |
sign | str | APP签名 | APP方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -3:API校验密匙错误 -400:请求错误 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
url | str | 二维码内容url | 恒为87字符 |
oauthKey | str | 扫码登录秘钥 | 恒为32字符 |
示例:
curl 'http://passport.bilibili.com/x/passport-tv-login/qrcode/auth_code' \
--data-urlencode 'appkey=4409e2ce8ffd12b8' \
--data-urlencode 'local_id=0' \
--data-urlencode 'ts=0' \
--data-urlencode 'sign=e134154ed6add881d28fbdf68653cd9c'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"url": "https://passport.bilibili.com/x/passport-tv-login/h5/qrcode/auth?auth_code=0eeb635a64526709d70cb4c854a3b001",
"auth_code": "0eeb635a64526709d70cb4c854a3b001"
}
}
</details>
使用扫码登录(TV端)
http://passport.bilibili.com/x/passport-tv-login/qrcode/poll
请求方式:POST
鉴权方式:appkey
密钥超时为180秒
验证登录成功后会返回可用于APP方式登录的access_key
以及refresh_token
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
appkey | str | APP密钥 | APP方式必要 | 仅可用4409e2ce8ffd12b8 |
auth_code | str | 扫码秘钥 | 必要 | |
local_id | str | TV端ID | TV端必要 | 可为0 |
ts | num | 当前时间戳 | APP方式必要 | |
sign | str | APP签名 | APP方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -3:API校验密匙错误 -400:请求错误 86038:二维码已失效 86039:二维码尚未确认 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | 有效时:obj 无效时:null | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
mid | num | 登录用户UID | |
access_token | str | APP登录Token | |
refresh_token | str | APP刷新Token | |
expires_in | num | 有效时间 | 单位为秒 一般为30天 |
示例:
使用扫描秘钥6214464b3025541abf6f654cf7569a01
进行验证登录
curl 'http://passport.bilibili.com/x/passport-tv-login/qrcode/poll' \
--data-urlencode 'appkey=4409e2ce8ffd12b8' \
--data-urlencode 'auth_code=6214464b3025541abf6f654cf7569a01' \
--data-urlencode 'local_id=0' \
--data-urlencode 'ts=0' \
--data-urlencode 'sign=87de3d0fee7c3f4facd244537238914e' \
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"mid": 293793435,
"access_token": "***",
"refresh_token": "***",
"expires_in": 2592000
}
}
</details>
二维码登录
web端流程&逻辑:
- 获取
二维码内容url
以及密钥
,以二维码内容url
生成二维码,等待手机客户端扫描 - 以
密钥
作为参数进行POST - if
code
==true
goto6
else goto 4(是否已经确认) - if
data
==-4
goto2
else goto 5(是否已经扫描) - if
data
==-5
goto3
& 提示已扫描
else goto1
&提示二维码超时或错误
(密钥是否有效) - 成功后会自动配置cookie 如需登录游戏分站则访问
data
.url
中的url
TV端流程&逻辑:
- 获取
二维码内容url
以及密钥
,以二维码内容url
生成二维码,等待手机客户端扫描 - 以
密钥
作为参数进行POST - if
code
==0
提示扫码成功
并存储access_key
于refersh_key
else goto4
- if
code
==86039
提示未扫描
&goto2
else goto5
- if
code
==86038
提示二维码超时或错误
&goto1
申请二维码URL及扫码密钥(web端)
请求方式:GET
密钥超时为180秒
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 |
status | bool | true | 作用尚不明确 |
ts | num | 请求时间 | 时间戳 |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
url | str | 二维码内容url | 恒为87字符 |
oauthKey | str | 扫码登录秘钥 | 恒为32字符 |
示例:
用申请到的data
.url
中的值生成二维码,等待手机客户端扫描,并将data
.oauthKey
保存等待使用
curl 'http://passport.bilibili.com/qrcode/getLoginUrl'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"status": true,
"ts": 1583314311,
"data": {
"url": "https://passport.bilibili.com/qrcode/h5/login?oauthKey=c3bd5286a2b40a822f5f60e9bf3f602e",
"oauthKey": "c3bd5286a2b40a822f5f60e9bf3f602e"
}
}
</details>
使用扫码登录(web端)
请求方式:POST
密钥超时为180秒
验证登录成功后会进行设置以下cookie项:
DedeUserID
DedeUserID__ckMd5
SESSDATA
bili_jct
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
oauthKey | str | 扫码登录秘钥 | 必要 | |
gourl | str | 跳转url | 非必要 | 默认为http://www.bilibili.com |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 |
message | str | 错误信息 | 正确无 |
ts | num | 扫码时间 | 错误无 |
status | bool | 扫码是否成功 | true:成功 false:未成功 |
data | 正确时:obj 错误时:num | 正确时:游戏分站url 错误时:错误代码 | 未成功时: -1:密钥错误 -2:密钥超时 -4:未扫描 -5:未确认 |
data 对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
url | str | 游戏分站跨域登录url |
示例:
使用扫描秘钥c3bd5286a2b40a822f5f60e9bf3f602e
登录
curl "http://passport.bilibili.com/qrcode/getLoginInfo"\
--data-urlencode 'oauthKey=c3bd5286a2b40a822f5f60e9bf3f602e' \
-c 'cookie.txt'
当密钥正确时但未扫描时status
为false
,data
为num值-4
<details>
<summary>查看响应示例:</summary>
{
"status":false,
"data":-4,
"message":"Can't scan~"
}
</details>
扫描成功但手机端未确认时status
为false
,data
为num值-5
<details>
<summary>查看响应示例:</summary>
{
"status":false,
"data":-5,
"message":"Can't confirm~"
}
</details>
扫描成功手机端确认登录后,status
为true
,data
为对象,并向浏览器写入cookie
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"status": true,
"ts": 1583315474,
"data": {
"url": "https://passport.biligame.com/crossDomain?DedeUserID=***&DedeUserID__ckMd5=***&Expires=***&SESSDATA=***&bili_jct=***&gourl=http%3A%2F%2Fwww.bilibili.com"
}
}
</details>
响应头部抓包信息:
可明显看见设置了几个cookie(填入浏览器即可成功登录)
<details>
<summary>查看响应示例:</summary>
HTTP/1.1 200 OK
Date: Wed, 04 Mar 2020 10:36:37 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: Apache-Coyote/1.1
Set-Cookie: sid=***; Domain=.bilibili.com; Expires=Thu, 04-Mar-2021 10:36:37 GMT; Path=/
Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/
Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/
Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/; HttpOnly
Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Mon, 31-Aug-2020 10:19:57 GMT; Path=/
Expires: Wed, 04 Mar 2020 10:36:36 GMT
Cache-Control: no-cache
X-Cache-Webcdn: BYPASS from ks-sxhz-dx-w-01
</details>
游戏分站跨域登录url:
游戏分站跨域登录url与cookie的值一一对应,可用于不方便设置cookie的场合提取使用
https://passport.biligame.com/crossDomain?
DedeUserID=(登录UID)&
DedeUserID__ckMd5=(登录UID MD5值)&
Expires=(过期时间 秒)&
SESSDATA=(登录token)&
bili_jct=(csrf)&
gourl=(跳转网址 默认为主页)
申请二维码URL及扫码密钥(TV端)
http://passport.bilibili.com/x/passport-tv-login/qrcode/auth_code
请求方式:POST
鉴权方式:appkey
密钥超时为180秒
本接口可申请用于APP方式登录的access_key
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
appkey | str | APP密钥 | APP方式必要 | 仅可用4409e2ce8ffd12b8 |
local_id | str | TV端ID | TV端必要 | 可为0 |
ts | num | 当前时间戳 | APP方式必要 | |
sign | str | APP签名 | APP方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -3:API校验密匙错误 -400:请求错误 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
url | str | 二维码内容url | 恒为87字符 |
oauthKey | str | 扫码登录秘钥 | 恒为32字符 |
示例:
curl 'http://passport.bilibili.com/x/passport-tv-login/qrcode/auth_code' \
--data-urlencode 'appkey=4409e2ce8ffd12b8' \
--data-urlencode 'local_id=0' \
--data-urlencode 'ts=0' \
--data-urlencode 'sign=e134154ed6add881d28fbdf68653cd9c'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"url": "https://passport.bilibili.com/x/passport-tv-login/h5/qrcode/auth?auth_code=0eeb635a64526709d70cb4c854a3b001",
"auth_code": "0eeb635a64526709d70cb4c854a3b001"
}
}
</details>
使用扫码登录(TV端)
http://passport.bilibili.com/x/passport-tv-login/qrcode/poll
请求方式:POST
鉴权方式:appkey
密钥超时为180秒
验证登录成功后会返回可用于APP方式登录的access_key
以及refresh_token
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
appkey | str | APP密钥 | APP方式必要 | 仅可用4409e2ce8ffd12b8 |
auth_code | str | 扫码秘钥 | 必要 | |
local_id | str | TV端ID | TV端必要 | 可为0 |
ts | num | 当前时间戳 | APP方式必要 | |
sign | str | APP签名 | APP方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -3:API校验密匙错误 -400:请求错误 86038:二维码已失效 86039:二维码尚未确认 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | 有效时:obj 无效时:null | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
mid | num | 登录用户UID | |
access_token | str | APP登录Token | |
refresh_token | str | APP刷新Token | |
expires_in | num | 有效时间 | 单位为秒 一般为30天 |
示例:
使用扫描秘钥6214464b3025541abf6f654cf7569a01
进行验证登录
curl 'http://passport.bilibili.com/x/passport-tv-login/qrcode/poll' \
--data-urlencode 'appkey=4409e2ce8ffd12b8' \
--data-urlencode 'auth_code=6214464b3025541abf6f654cf7569a01' \
--data-urlencode 'local_id=0' \
--data-urlencode 'ts=0' \
--data-urlencode 'sign=87de3d0fee7c3f4facd244537238914e' \
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"mid": 293793435,
"access_token": "***",
"refresh_token": "***",
"expires_in": 2592000
}
}
</details>
短信登录
web端短信登录流程:
- 完成人机验证
- 发送短信,使用国际地区代码
cid
+手机号码tel
+登录密钥key
+极验challenge
+验证结果validate
+验证结果seccode
- 提交短信验证码以验证登录操作,使用国际地区代码
cid
+手机号码tel
+短信验证码smsCode
获取国际地区代码(web端)
请求方式:GET
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 |
data | obj | 数据本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
common | array | 常用国家或地区 | |
others | array | 其他国家或地区 |
data
中的common
和others
数组:
项 | 类型 | 内容 | 备注 |
---|---|---|---|
0 | obj | 国家或地区1 | |
n | obj | 国家或地区(n+1) | |
…… | obj | …… | …… |
common
和others
数组中的对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
id | num | 国际代码值 | |
cname | str | 国家或地区名 | |
country_id | str | 国家或地区区号 |
示例:
curl 'http://passport.bilibili.com/web/generic/country/list'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"data": {
"common": [
{
"id": 1,
"cname": "中国大陆",
"country_id": "86"
},
{
"id": 5,
"cname": "中国香港特别行政区",
"country_id": "852"
},
…………
],
"others": [
{
"id": 22,
"cname": "阿富汗",
"country_id": "93"
},
{
"id": 20,
"cname": "阿尔巴尼亚",
"country_id": "355"
},
…………
]
}
}
</details>
发送短信验证码(web端)
请求方式:POST
短信发送CD时间为60s
短信验证码超时时间为5min
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 | |
---|---|---|---|---|---|
tel | num | 手机号码 | 必要 | ||
cid | num | 国际地区代码 | 必要 | ||
type | num | 21 | 必要 | 必须为21 | |
captchaType | num | 6 | 必要 | 必须为6 | |
key | str | 登录秘钥 | 必要 | 从B站API获取 | |
challenge | str | 极验challenge | 必要 | 从B站API获取 | |
validate | str | 极验结果 | 必要 | 从极验获取 | |
seccode | str | 极验结果+` | jordan` | 必要 | 从极验获取 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -400:请求错误 1002:手机号格式错误 1015:短信发送次数已达上限 1003:验证码已经发送 2400:登录秘钥错误 2406:验证极验服务出错 |
message | str | 错误信息 | 成功为"验证码短信已下发" |
示例:
例如手机号为13888888888
,国际ID为1(中国大陆)
,登录秘钥为aabbccdd
,极验challenge为2333
,极验结果为666666
,进行发送短信验证码操作
curl 'http://passport.bilibili.com/web/sms/general/v2/send' \
--data-urlencode 'tel=13888888888' \
--data-urlencode 'cid=1' \
--data-urlencode 'type=21' \
--data-urlencode 'captchaType=6' \
--data-urlencode 'key=aabbccdd' \
--data-urlencode 'challenge=2333' \
--data-urlencode 'validate=666666' \
--data-urlencode 'seccode=666666|jordan'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "验证码短信已下发"
}
</details>
使用短信验证码登录(web端)
请求方式:POST
验证登录成功后会进行设置以下cookie项:
DedeUserID
DedeUserID__ckMd5
SESSDATA
bili_jct
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
cid | num | 国际地区代码 | 必要 | |
tel | num | 手机号码 | 必要 | |
smsCode | num | 短信验证码 | 必要 | 超时时间为5min |
goUrl | str | 跳转url | 非必要 | 默认为https://www.bilibili.com |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -400:请求错误 1006:请输入正确的短信验证码 1007:短信验证码已过期 |
message | str | 错误信息 | |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
is_new | bool | false | 未知,估计是未注册时自动注册新用户 |
status | num | 0 | 未知,可能0就是成功吧 |
url | str | 跳转url | 默认为https://www.bilibili.com |
示例:
使用手机号13888888888
,短信验证码为123456
,进行验证登录操作
curl 'https://passport.bilibili.com/web/login/rapid'
--data-urlencode 'cid=1' \
--data-urlencode 'tel=13888888888' \
--data-urlencode 'smsCode=123456'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"data": {
"is_new": false,
"status": 0,
"url": "https://space.bilibili.com"
}
}
</details>
响应头部抓包信息:
可明显看见设置了几个cookie(填入浏览器即可成功登录)
<details>
<summary>查看响应示例:</summary>
HTTP/1.1 200 OK
Date: Mon, 13 Jul 2020 09:57:33 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 78
Connection: keep-alive
Server: Apache-Coyote/1.1
Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/; HttpOnly
Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
Expires: Mon, 13 Jul 2020 09:57:32 GMT
Cache-Control: no-cache
X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01
</details>
账号密码登录
web端密码登录流程:
- 完成人机验证
- 加密登录密码,获取RSA公钥
key
与盐值hash
(盐值有效时间为20s),并连接盐值+密码字串(注意先后顺序),使用RSA公钥加密,得到base64格式密文 - 登录操作验证,使用账号
username
(手机号或邮箱)+密文密码password
+登录密钥key
+极验challenge
+验证结果validate
+验证结果seccode
获取加密公钥及密码盐值1(web端)
请求方式:GET
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
hash | str | 密码校验盐值 | 有效时间为20s |
key | str | RSA公钥 | 公钥为固定值 |
示例:
curl 'http://passport.bilibili.com/login?act=getkey'
<details>
<summary>查看响应示例:</summary>
{
"hash":"07c6501690c1af85",
"key":"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n\n6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx\n/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+\nXl69GV6klzgxW6d2xQIDAQAB\n-----END PUBLIC KEY-----\n"
}
</details>
获取加密公钥及密码盐值2(APP端)
请求方式:POST
鉴权方式:appkey
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
appkey | str | APP密钥 | APP方式必要 | |
sign | str | APP签名 | APP方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
hash | str | 验证hash盐值 | 有效时间为20s |
key | str | RSA公钥 | 公钥为固定值 |
示例:
curl 'http://passport.bilibili.com/api/oauth2/getKey' \
--data-urlencode 'appkey=1d8b6e7d45233436' \
--data-urlencode 'sign=17004c193f688f0b5665c1068e733aff'
<details>
<summary>查看响应示例:</summary>
{
"hash":"07c6501690c1af85",
"key":"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n\n6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx\n/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+\nXl69GV6klzgxW6d2xQIDAQAB\n-----END PUBLIC KEY-----\n"
}
</details>
登录密码的加密
注:RSA公钥一般为固定值
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjb4V7EidX/ym28t2ybo0U6t0n
6p4ej8VjqKHg100va6jkNbNTrLQqMCQCAYtXMXXp2Fwkk6WR+12N9zknLjf+C9sx
/+l48mjUU8RqahiFD1XT/u2e0m2EN029OhCgkHx3Fc/KlFSIbak93EH/XlYis0w+
Xl69GV6klzgxW6d2xQIDAQAB
-----END PUBLIC KEY-----
例如登录密码为:
BiShi22332323
获取到的盐值为:
8e0db05c46f4052c
那么按照盐值
+密码字串
连接二者得到:
8e0db05c46f4052cBiShi22332323
用公钥进行RSA加密得到base64字串:
因为公钥的无法解密性和盐值的超时机制,故无法本地验证加密结果
YgpjxAQ22pKa9socHIKPCZX0a/NS6Ng9Zzy+rp16b0LJGT6RHw2ERs3+ijCpG96PKTY1Baavwf0xgotmNvpl25l1KO5y4AjcqeWTzNTSVn6ejonBXGmBMybHHYawJ0aMPn1eDGpKrbI91mrF+h2x+fsnnpuZ1gheiYGzFmtshUc=
使用账号密码登录(web端)
请求方式:POST
验证登录成功后会进行设置以下cookie项:
sid
DedeUserID
DedeUserID__ckMd5
SESSDATA
bili_jct
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
captchaType | num | 6 | 必要 | 必须为6 |
username | str | 用户登录账号 | 必要 | 手机号或邮箱地址 |
password | str | 加密后的带盐密码 | 必要 | base64格式 |
keep | bool | true | 必要 | 必须为true |
key | str | 登录秘钥 | 必要 | 从B站API获取 |
challenge | str | 极验challenge | 必要 | 从B站API获取 |
validate | str | 极验结果 | 必要 | 从极验获取 |
seccode | str | 极验结果 | 必要 | 从极验获取 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -400:请求错误 -629:账号或密码错误 -653:用户名或密码不能为空 -662:提交超时,请重新提交 -2001:缺少必要的的参数 -2100:需验证手机号或邮箱 2400:登录秘钥错误 2406:验证极验服务出错 |
ts | num | 当前时间戳 | 成功时无此项 |
message | str | 错误信息 | 默认为0 |
data | obj | 数据本体 | 成功时有此项 |
data
对象:
未登录时:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
redirectUrl | str | 游戏分站跨域登录url |
已登录时:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
isLogin | bool | true | |
goUrl | str | https://www.bilibili.com |
需验证手机号或邮箱时
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
mid | num | 用户UID | |
tel | str | 绑定的手机号 | 星号隐藏部分信息 |
str | 绑定的邮箱 | 星号隐藏部分信息 | |
sorce | num | 0 | 作用尚不明确 |
keeptime | num | 1 | 作用尚不明确 |
goUrl | str | https://www.bilibili.com |
示例:
例如用户账号为12345678900
,加密后的密码为xxx
,登录秘钥为aabbccdd
,极验challenge为2333
,极验结果为666666
,进行验证登录操作
curl 'https://passport.bilibili.com/web/login/v2' \
--data-urlencode 'captchaType=6' \
--data-urlencode 'username=12345678900' \
--data-urlencode 'password=xxx' \
--data-urlencode 'keep=true' \
--data-urlencode 'key=aabbccdd' \
--data-urlencode 'challenge=2333' \
--data-urlencode 'validate=666666' \
--data-urlencode 'seccode=666666|jordan'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"data": {
"redirectUrl": "https://passport.biligame.com/crossDomain?DedeUserID=***&DedeUserID__ckMd5=***&Expires=15551000&SESSDATA=***&bili_jct=***&gourl=https%3A%2F%2Fwww.bilibili.com"
}
}
</details>
响应头部抓包信息:
可明显看见设置了几个cookie(填入浏览器即可成功登录)
<details>
<summary>查看响应示例:</summary>
HTTP/1.1 200 OK
Date: Mon, 13 Jul 2020 06:56:00 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 273
Connection: keep-alive
Server: Apache-Coyote/1.1
Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/
Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/
Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/; HttpOnly
Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Sat, 09-Jan-2021 06:39:43 GMT; Path=/
Content-Security-Policy-Report-Only: default-src 'self' data: *.bilibili.com *.hdslb.com; style-src 'self' 'unsafe-inline' *.hdslb.com static.geetest.com; img-src 'self' data: blob: *.bilibili.com *.hdslb.com http://*.hdslb.com static.geetest.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.bilibili.com *.hdslb.com api.geetest.com static.geetest.com; object-src 'self' *.hdslb.com; media-src 'self' *.acgvideo.com http://*.acgvideo.com *.ksyungslb.com; connect-src 'self' data: wss://*.bilibili.com:* *.bilibili.com *.hdslb.com *.biliapi.net *.biliapi.com; frame-ancestors 'self' *.bilibili.com *.biligame.com; report-uri https://security.bilibili.com/csp_report
Expires: Mon, 13 Jul 2020 06:55:59 GMT
Cache-Control: no-cache
X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01
</details>
游戏分站跨域登录url:
游戏分站跨域登录url与cookie的值一一对应,可用于不方便设置cookie的场合提取使用
https://passport.biligame.com/crossDomain?
DedeUserID=(登录UID)&
DedeUserID__ckMd5=(登录UID MD5值)&
Expires=(过期时间 秒)&
SESSDATA=(登录token)&
bili_jct=(csrf)&
gourl=(跳转网址 默认为主页)
登录基本信息
本页所有操作均需登录(Cookie或APP)
登录用户信息1(web端)
请求方式:GET
认证方式:仅可Cookie(SESSDATA)
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
isLogin | bool | 是否已登录 | false:未登录 true:已登录 |
email_verified | num | 是否验证邮箱地址 | 0:未验证 1:已验证 |
face | str | 用户头像url | |
level_info | obj | 等级信息 | |
mid | num | 用户UID | |
mobile_verified | num | 是否验证手机号 | 0:未验证 1:已验证 |
money | num | 拥有硬币数 | |
moral | num | 当前节操值 | 上限70 |
official | obj | 认证信息 | |
officialVerify | obj | 认证信息2 | |
pendant | obj | 头像框信息 | |
scores | num | 0 | 作用尚不明确 |
uname | str | 用户昵称 | |
vipDueDate | num | 大会员到期时间 | 毫秒 时间戳 |
vipStatus | num | 会员开通状态 | 0:无 1:有 |
vipType | num | 大会员类型 | 0:无 1:月度 2:年度 |
vip_pay_type | num | 会员开通状态 | 0:无 1:有 |
vip_theme_type | num | 0 | 作用尚不明确 |
vip_label | obj | 大会员信息 | |
vip_avatar_subscript | num | 是否显示会员图标 | 0:不显示 1:显示 |
vip_nickname_color | str | 会员昵称颜色 | 颜色码 |
wallet | obj | B币信息 | |
has_shop | bool | false | 作用尚不明确 |
shop_url | str | 空 | 作用尚不明确 |
allowance_count | num | 0 | 作用尚不明确 |
answer_status | num | 0 | 作用尚不明确 |
data
中的level_info
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
current_level | num | 当前等级 | |
current_min | num | 当前等级经验最低值 | |
current_exp | num | 当前经验 | |
next_exp | 小于6级时:num 6级时:str | 升级下一等级需达到的经验 | 当用户等级为Lv6时,值为-- ,代表无穷大 |
data
中的official
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
role | num | 认证类型 | 0:无 1 2:个人认证 3 4 5 6:机构认证 |
title | str | 认证信息 | 无为空 |
desc | str | 认证备注 | 无为空 |
type | num | 是否认证 | -1:无 0:认证 |
data
中的official_verify
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
type | num | 是否认证 | -1:无 0:认证 |
desc | str | 认证信息 | 无为空 |
data
中的pendant
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
pid | num | 挂件id | |
name | str | 挂件名称 | |
image | str | 挂件图片url | |
expire | num | 0 | 作用尚不明确 |
data
中的vip_label
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
path | str | 空 | 作用尚不明确 |
text | str | 会员类型文字 | |
label_theme | str | 会员类型 |
data
中的wallet
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
mid | num | 登录用户UID | |
bcoin_balance | num | 拥有B币数 | |
coupon_balance | num | 每月奖励B币数 | |
coupon_due_time | num | 0 | 作用尚不明确 |
示例:
curl 'http://api.bilibili.com/nav' \
-b 'SESSDATA=xxx'
<details>
<summary>查看响应示例:</summary>
{
"code":0,
"message":"0",
"ttl":1,
"data":{
"isLogin":true,
"email_verified":1,
"face":"http://i1.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg",
"level_info":{
"current_level":5,
"current_min":10800,
"current_exp":17065,
"next_exp":28800
},
"mid":293793435,
"mobile_verified":1,
"money":33.4,
"moral":70,
"official":{
"role":0,
"title":"",
"desc":"",
"type":-1
},
"officialVerify":{
"type":-1,
"desc":""
},
"pendant":{
"pid":0,
"name":"",
"image":"",
"expire":0,
"image_enhance":""
},
"scores":0,
"uname":"社会易姐QwQ",
"vipDueDate":1612454400000,
"vipStatus":1,
"vipType":2,
"vip_pay_type":1,
"vip_theme_type":0,
"vip_label":{
"path":"",
"text":"年度大会员",
"label_theme":"annual_vip"
},
"vip_avatar_subscript":1,
"vip_nickname_color":"#FB7299",
"wallet":{
"mid":293793435,
"bcoin_balance":8,
"coupon_balance":5,
"coupon_due_time":0
},
"has_shop":false,
"shop_url":"",
"allowance_count":0,
"answer_status":0
}
}
</details>
登录用户信息2(web端)(仅部分)
请求方式:GET
认证方式:仅可Cookie(SESSDATA)
鉴权方式:Cookie中DedeUserID
存在且不为0
带有转义
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 |
status | bool | true | 作用尚不明确 |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
level_info | obj | 等级信息 | |
bCoins | num | 拥有B币数 | |
coins | num | 拥有硬币数 | |
face | str | 登录用户头像url | |
nameplate_current | null | ??? | 作用尚不明确 |
nameplate_current | str | 登录用户勋章url | |
pendant_current | str | 登录用户头像框url | |
uname | str | 登录用户昵称 | |
userStatus | str | 登录用户状态 | |
vipType | num | 大会员类型 | 0:无 1:月度 2:年度 |
vipStatus | num | 会员开通状态 | 0:无 1:有 |
official_verify | num | 是否认证 | -1:无 0:认证 |
pointBalance | num | 0 | 作用尚不明确 |
data
中的level_info
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
current_level | num | 当前等级 | |
current_min | num | 当前等级经验最低值 | |
current_exp | num | 当前经验 | |
next_exp | num | 升级下一等级需达到的经验 |
示例:
curl 'http://account.bilibili.com/home/userInfo' \
-b 'SESSDATA=xxx;DedeUserID=1;'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"status": true,
"data": {
"level_info": {
"current_level": 5,
"current_min": 10800,
"current_exp": 14270,
"next_exp": 28800
},
"bCoins": 10,
"coins": 2.5,
"face": "http:\/\/i2.hdslb.com\/bfs\/face\/480e2e98513aaeb65d2f2c76dbae750c4de722e9.jpg",
"nameplate_current": null,
"pendant_current": "http:\/\/i0.hdslb.com\/bfs\/face\/6550f53324c330f201a528e70ef305cb10ac2c01.png",
"uname": "\u793e\u4f1a\u6613\u59d0QwQ",
"userStatus": "\u6b63\u5f0f\u4f1a\u5458",
"vipType": 2,
"vipStatus": 1,
"official_verify": -1,
"pointBalance": 0
}
}
</details>
登录用户信息(APP端)
请求方式:GET
认证方式:仅可APP
鉴权方式:appkey
url参数:
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 | |
appkey | str | APP密钥 | APP方式必要 | |
ts | num | 当前时间戳 | APP方式必要 | |
sign | str | APP签名 | APP方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -3:API校验密匙错误 -101:账号未登录 -400:请求错误 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
mid | num | 用户UID | |
name | str | 用户昵称 | |
sign | str | 用户签名 | |
coins | num | 拥有硬币数 | |
birthday | str | 用户生日 | YYYY-MM-DD |
face | str | 用户头像url | |
sex | num | 用户性别 | 0:私密 1:男 2:女 |
level | num | 用户等级 | 0-6 |
rank | num | 1000 | 作用尚不明确 |
silence | num | 用户是否被封禁 | 0:正常 1:封禁 |
vip | obj | 会员信息 | |
email_status | num | 是否验证邮箱地址 | 0:未验证 1:已验证 |
tel_status | num | 是否验证手机号 | 0:未验证 1:已验证 |
official | obj | 认证信息 | |
identification | num | 1 | 作用尚不明确 |
invite | obj | ||
is_tourist | num | 0 | 作用尚不明确 |
pin_prompting | num | 0 | 作用尚不明确 |
data
中的vip
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
type | num | 大会员类型 | 0:无 1:月度 2:年度 |
status | num | 会员开通状态 | 0:无 1:有 |
due_date | num | 大会员到期时间 | 毫秒 时间戳 |
vip_pay_type | num | 会员开通状态 | 0:无 1:有 |
theme_type | num | 会员开通状态 | 0:无 1:有 |
label | obj | 大会员信息 | |
avatar_subscript | num | 是否显示会员图标 | 0:不显示 1:显示 |
nickname_color | str | 会员昵称颜色 | 颜色码 |
vip
中的label
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
path | str | 空 | 作用尚不明确 |
text | str | 会员类型文字 | |
label_theme | str | 会员类型 |
data
中的official
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
role | num | 认证类型 | 0:无 1 2:个人认证 3 4 5 6:机构认证 |
title | str | 认证信息 | 无为空 |
desc | str | 认证备注 | 无为空 |
type | num | 认证备注 | 无为空 |
data
中的invite
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
invite_remind | num | 1 | 作用尚不明确 |
display | bool | true | 作用尚不明确 |
示例:
curl -G 'http://app.bilibili.com/x/v2/account/myinfo' \
--data-urlencode 'access_key=xxx' \
--data-urlencode 'appkey=4409e2ce8ffd12b8' \
--data-urlencode 'ts=0' \
--data-urlencode 'sign=b8fb8480049c525994be6507a97ae0b6'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"mid": 293793435,
"name": "社会易姐QwQ",
"sign": "高中技术宅一枚,爱好MC&电子&8-bit音乐&数码&编程,资深猿厨,粉丝群:1136462265",
"coins": 33.4,
"birthday": "2002-03-05",
"face": "http://i1.hdslb.com/bfs/face/aebb2639a0d47f2ce1fec0631f412eaf53d4a0be.jpg",
"sex": 1,
"level": 5,
"rank": 10000,
"silence": 0,
"vip": {
"type": 2,
"status": 1,
"due_date": 1612454400000,
"vip_pay_type": 1,
"theme_type": 0,
"label": {
"path": "",
"text": "年度大会员",
"label_theme": "annual_vip"
},
"avatar_subscript": 1,
"nickname_color": "#FB7299"
},
"email_status": 1,
"tel_status": 1,
"official": {
"role": 0,
"title": "",
"desc": "",
"type": -1
},
"identification": 1,
"invite": {
"invite_remind": 1,
"display": true
},
"is_tourist": 0,
"pin_prompting": 0
}
}
</details>
登录用户状态数(双端)
请求方式:GET
认证方式:Cookie(SESSDATA)或APP
url参数:
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | obj | 信息本体 |
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
following | num | 关注数 | |
follower | num | 粉丝数 | |
dynamic_count | num | 发布动态数 |
示例:
当前登录用户的状态数为粉丝596,关注754,发送的动态252
Cookie方式:
curl 'http://api.bilibili.com/x/web-interface/nav/stat' \
-b 'SESSDATA=xxx'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"following": 754,
"follower": 596,
"dynamic_count": 252
}
}
</details>
APP方式:
curl -G 'http://api.bilibili.com/x/web-interface/nav/stat' \
--data-urlencode 'access_key=d907f51122c59599d580ade2315af971'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"following": 754,
"follower": 596,
"dynamic_count": 252
}
}
</details>
获取硬币数
请求方式:GET
认证方式:仅可Cookie(SESSDATA)
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 |
status | bool | true | 作用尚不明确 |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
money | 硬币为正数时:num 硬币为0时:null | 当前硬币数 |
示例:
curl 'http://account.bilibili.com/site/getCoin' \
-b 'SESSDATA=xxx'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"status": true,
"data": {
"money": 42.4
}
}
</details>
个人中心
获取我的信息
请求方式:GET
认证方式:Cookie(SESSDATA)或APP
url参数:
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
mid | num | 我的UID | |
uname | str | 我的昵称 | |
userid | str | 我的用户名 | |
sign | str | 我的签名 | |
birthday | str | 我的生日 | YYYY-MM-DD |
sex | str | 我的性别 | 男 女 保密 |
nick_free | bool | 是否未设置昵称 | false:设置过昵称 true:未设置昵称 |
rank | str | 我的会员等级 |
示例:
curl 'http://api.bilibili.com/x/member/web/account' \
-b 'SESSDATA=xxx'
<details>
<summary>查看响应示例:</summary>
{
"code":0,
"message":"0",
"ttl":1,
"data":{
"mid":293793435,
"uname":"社会易姐QwQ",
"userid":"bili_84675323391",
"sign":"高中技术宅一枚,爱好MC&电子&8-bit音乐&数码&编程,资深猿厨,粉丝群:1136462265",
"birthday":"2002-03-05",
"sex":"男",
"nick_free":false,
"rank":"正式会员"
}
}
</details>
查询每日奖励状态
请求方式:GET
认证方式:Cookie(SESSDATA)或APP
url参数:
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
login | bool | 每日登录 | false:未完成 true:已完成 完成奖励5经验 |
watch | bool | 每日观看 | false:未完成 true:已完成 完成奖励5经验 |
coins | num | 每日投币所奖励的经验 | 上限为50 注:该值更新存在延迟 另外一个专门API |
share | bool | 每日分享 | false:未完成 true:已完成 完成奖励5经验 |
bool | 绑定邮箱 | false:未完成 true:已完成 | |
tel | bool | 绑定手机号 | false:未完成 true:已完成 首次完成完成奖励100经验 |
safe_question | bool | 设置密保问题 | false:未完成 true:已完成 |
identify_card | bool | 实名认证 | false:未完成 true:已完成 首次完成奖励50经验 |
示例:
curl 'http://api.bilibili.com/x/member/web/exp/reward' \
-b 'SESSDATA=xxx'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"login": true,
"watch": true,
"coins": 30,
"share": true,
"email": true,
"tel": true,
"safe_question": true,
"identify_card": true
}
}
</details>
查询每日投币获得经验数
请求方式:GET
认证方式:仅可Cookie(SESSDATA)
鉴权方式:Cookie中DedeUserID
存在且不为0
该接口实时更新,未发现延迟
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 |
message | str | 错误信息 | 默认为0 |
number | num | 每日投币所奖励的经验 | 上限为50<br |
示例:
curl 'http://www.bilibili.com/plus/account/exp.php' \
-b 'SESSDATA=xxx;DedeUserID=1'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "0",
"number": 20
}
</details>
查询大会员状态
请求方式:GET
认证方式:仅可Cookie(SESSDATA)
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
mid | num | 我的UID | |
vip_type | num | 大会员类型 | 0:无 1:月度 2:年度 |
vip_status | num | 大会员状态 | 1:正常 2:由于IP地址更换过于频繁,服务被冻结 3:你的大会员账号风险过高,大会员功能已被锁定 |
vip_due_date | num | 大会员到期时间 | 时间戳 毫秒 |
vip_pay_type | num | 是否已购买大会员 | 0:未购买 1:已购买 |
theme_type | num | 0 | 作用尚不明确 |
示例:
curl 'http://api.bilibili.com/x/vip/web/user/info' \
-b 'SESSDATA=xxx'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"mid": 293793435,
"vip_type": 2,
"vip_status": 1,
"vip_due_date": 1612454400000,
"vip_pay_type": 1,
"theme_type": 0
}
}
</details>
查询账号安全情况
请求方式:GET
认证方式:Cookie(SESSDATA)或APP
鉴权方式:如用Cookie方式认证时Cookie中DedeUserID
存在且不为0
url参数:
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
account_info | obj | 账号绑定信息 | |
account_safe | obj | 密码安全信息 | |
account_sns | obj | 互联登录绑定信息 | |
account_other | obj |
data
中的account_info
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
hide_tel | str | 绑定的手机号 | 星号隐藏部分信息 |
hide_mail | str | 绑定的邮箱 | 星号隐藏部分信息 |
bind_tel | bool | 是否绑定手机号 | false:未绑定 true:已绑定 |
bind_mail | bool | 是否绑定邮箱 | false:未绑定 true:已绑定 |
tel_verify | bool | 是否验证手机号 | false:未验证 true:已验证 |
mail_verify | bool | 是否验证邮箱 | false:未验证 true:已验证 |
unneeded_check | bool | 是否未设置密码 | false:已设置 true:未设置 |
data
中的account_safe
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
Score | num | 当前密码强度 | 0-100 |
pwd_level | num | 当前密码强度等级 | 1:弱 2:中 3:强 |
security | bool | 当前密码是否安全 | false:不安全 true:安全 |
data
中的account_sns
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
weibo_bind | num | 是否绑定微博 | 0:未绑定 1:已绑定 |
qq_bind | num | 是否绑定qq | 0:未绑定 1:已绑定 |
data
中的account_other
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
skipVerify | bool | false | 作用尚不明确 |
示例:
curl 'http://passport.bilibili.com/web/site/user/info' \
-b 'SESSDATA=xxx;DedeUserID=1;'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"data": {
"account_info": {
"hide_tel": "153*****056",
"hide_mail": "144****@qq.com",
"bind_tel": true,
"bind_mail": true,
"tel_verify": true,
"mail_verify": true,
"unneeded_check": false
},
"account_safe": {
"Score": 90,
"pwd_level": 3,
"security": true
},
"account_sns": {
"weibo_bind": 1,
"qq_bind": 1
},
"account_other": {
"skipVerify": false
}
}
}
</details>
查询账号实名认证状态
请求方式:GET
认证方式:Cookie(SESSDATA)或APP
url参数:
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
status | num | 实名认证状态 | 0:未认证 1:已认证 |
示例:
当前状态为已认证
curl 'http://api.bilibili.com/x/member/realname/status' \
-b 'SESSDATA=xxx'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"status": 1
}
}
</details>
查询实名认证详细信息
请求方式:GET
认证方式:Cookie(SESSDATA)或APP
url参数:
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | obj | 数据本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
status | num | 认证状态 | 1:已认证 3:未认证 |
remark | str | 驳回信息 | 默认为空 |
realname | str | 实名姓名 | 星号隐藏完全信息 |
card | str | 证件号码 | 星号隐藏部分信息 |
card_type | num | 证件类型代码 | 0:身份证 2:港澳居民来往内地通行证 3:台湾居民来往大陆通行证 4:护照(中国签发) 5:外国人永久居留证 6:其他国家或地区身份证明 |
curl 'http://api.bilibili.com/x/member/realname/apply/status' \
-b 'SESSDATA=xxx'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"status": 1,
"remark": "",
"realname": "***",
"card": "6****************7",
"card_type": 0
}
}
</details>
查询硬币变化情况
请求方式:GET
认证方式:Cookie(SESSDATA)或APP
仅能查询最近一周的情况
url参数:
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | obj | 数据本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
list | array | 变化记录条目列表 | |
count | num | 变化记录条目数 |
data
中的list
数组:
项 | 类型 | 内容 | 备注 |
---|---|---|---|
0 | obj | 变化记录条目1 | |
n | obj | 变化记录条目(n+1) | |
…… | obj | …… | …… |
list
数组中的对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
time | str | 变化时间 | YYYY-MM-DD HH:MM:SS |
delta | num | 变化量 | 正值为收入,负值为支出 |
reason | str | 变化说明 |
示例:
curl 'http://api.bilibili.com/x/member/web/coin/log' \
-b 'SESSDATA=xxx'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"list": [
{
"time": "2020-05-19 23:58:29",
"delta": -1,
"reason": "给视频 BV1j5411s7M8 打赏"
},
{
"time": "2020-05-19 16:02:53",
"delta": -1,
"reason": "给视频 BV1Ht4y117A1 打赏"
},
{
"time": "2020-05-19 15:38:42",
"delta": 0.1,
"reason": "给视频 BV1nb411C7aa 打赏"
},
{
"time": "2020-05-19 02:19:20",
"delta": 1,
"reason": "登录奖励"
},
{
"time": "2020-05-18 22:34:04",
"delta": -1,
"reason": "给视频 BV1Bp4y1Q7uw 打赏"
},
{
"time": "2020-05-18 22:33:59",
"delta": -1,
"reason": "给视频 BV1j5411s7M8 打赏"
},
{
"time": "2020-05-18 02:45:53",
"delta": 1,
"reason": "登录奖励"
},
{
"time": "2020-05-17 03:02:38",
"delta": 1,
"reason": "登录奖励"
},
{
"time": "2020-05-16 01:57:02",
"delta": 1,
"reason": "登录奖励"
},
{
"time": "2020-05-15 11:10:35",
"delta": 0.2,
"reason": "给视频 BV1Yt41137T6 打赏"
},
{
"time": "2020-05-15 00:34:27",
"delta": 1,
"reason": "登录奖励"
},
{
"time": "2020-05-14 02:11:37",
"delta": 1,
"reason": "登录奖励"
},
{
"time": "2020-05-13 02:12:28",
"delta": 1,
"reason": "登录奖励"
}
],
"count": 13
}
}
</details>
修改个人签名
请求方式:POST
认证方式:Cookie(SESSDATA)或APP
修改签名不会立即生效,会等待审核队列稍后生效
正文参数( application/x-www-form-urlencoded ):
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
access_key | str | APP登录Token | APP方式必要 | |
user_sign | str | 要设置的签名内容 | 非必要 | 删除签名留空或省去即可 最多支持70个字符 |
csrf | str | CSRF Token(位于cookie) | Cookie方式必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:账号未登录 -111:csrf校验失败 40015:签名包含敏感词 40021:签名不能包含表情图片 40022:签名过长 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 |
示例:
更新个人标签为高中技术宅一枚,爱好MC&电子&8-bit音乐&数码&编程,资深猿厨,粉丝群:1136462265
curl 'http://api.bilibili.com/x/member/web/sign/update' \
--data-urlencode 'user_sign=高中技术宅一枚,爱好MC&电子&8-bit音乐&数码&编程,粉丝群:1136462265' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxx'
<details>
<summary>查看响应示例:</summary>
{
"code":0,
"message":"0",
"ttl":1
}
</details>
用户基本信息
用户详细信息1 (用于空间)
请求方式:GET
认证方式:Cookie(SESSDATA)
url参数:
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
mid | num | 目标用户UID | 必要 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -400:请求错误 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
mid | num | UID | |
name | str | 昵称 | |
sex | str | 性别 | 男 女 保密 |
face | str | 头像链接 | |
sign | str | 签名 | |
rank | num | 10000 | 作用尚不明确 |
level | num | 当前等级 | 0-6级 |
jointime | num | 0 | 作用尚不明确 |
moral | num | 0 | 作用尚不明确 |
silence | num | 封禁状态 | 0:正常 1:被封 |
birthday | str | 生日 | MM-DD |
coins | num | 硬币数 | 需要登录(Cookie) 只能查看自己的 默认为0 |
fans_badge | bool | 是否具有粉丝勋章 | false:无 true:有 |
official | obj | 认证信息 | |
vip | obj | 大会员信息 | |
pendant | obj | 头像框信息 | |
nameplate | obj | 勋章信息 | |
is_followed | bool | 是否关注此用户 | true:已关注 false:未关注 需要登录(Cookie) 未登录恒为false |
top_photo | str | 主页头图链接 | |
theme | obj | 空 | 作用尚不明确 |
sys_notice | obj | 系统通知 | 无内容则为空 |
data
中的official
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
role | num | 认证类型 | 0:无 1 2:个人认证 3 4 5 6:机构认证 |
title | str | 认证信息 | 无为空 |
desc | str | 认证备注 | 无为空 |
type | num | 是否认证 | -1:无 0:认证 |
data
中的vip
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
type | num | 大会员类型 | 0:无 1:月会员 2:年会员 |
status | num | 大会员状态 | 0:无 1:有 |
theme_type | num | 0 | 作用尚不明确 |
data
中的pendant
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
pid | num | 头像框id | 详细说明有待补充 |
name | str | 头像框名称 | |
image | str | 头像框图片url | |
expire | num | 0 | 作用尚不明确 |
data
中的nameplate
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
nid | num | 勋章id | 详细说明有待补充 |
name | str | 勋章名称 | |
image | str | 挂件图片url 正常 | |
image_small | str | 勋章图片url 小 | |
level | str | 勋章等级 | |
condition | str | 勋章条件 |
data
中的sys_notice
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
id | num | 系统提示类型ID | 详细说明有待补充 |
content | str | 提示信息 | |
url | str | 提示信息链接url |
示列:
查询用户UID=2
的详细信息
curl -G 'http://api.bilibili.com/x/space/acc/info' \
--data-urlencode 'mid=2' \
-b 'SESSDATA=xxx'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"mid": 2,
"name": "碧诗",
"sex": "男",
"face": "http://i0.hdslb.com/bfs/app/3e60b20604b6fdc7d081eb6a1ec72aa47c5a3964.jpg",
"sign": "kami.im 直男过气网红 # av362830 “We Are Star Dust”",
"rank": 20000,
"level": 6,
"jointime": 0,
"moral": 0,
"silence": 0,
"birthday": "09-19",
"coins": 0,
"fans_badge": true,
"official": {
"role": 2,
"title": "bilibili创始人(站长)",
"desc": "",
"type": 0
},
"vip": {
"type": 2,
"status": 1,
"theme_type": 0
},
"pendant": {
"pid": 76,
"name": "管理员",
"image": "http://i2.hdslb.com/bfs/face/02a3b79edef0f0e682de7f5dca7b6b5fe36d5f65.png",
"expire": 0
},
"nameplate": {
"nid": 10,
"name": "见习偶像",
"image": "http://i1.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png",
"image_small": "http://i2.hdslb.com/bfs/face/275b468b043ec246737ab8580a2075bee0b1263b.png",
"level": "普通勋章",
"condition": "所有自制视频总播放数\u003e=10万"
},
"is_followed": true,
"top_photo": "http://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png",
"theme": {},
"sys_notice": {}
}
}
</details>
查询到的信息解析如下:
用户昵称为:碧诗
性别:男
用户的头像为:
http://i1.hdslb.com/bfs/face/3e60b20604b6fdc7d081eb6a1ec72aa47c5a3964.jpg
等级:6级
生日:09-19
粉丝勋章状态:拥有
认证:个人认证
认证名称: bilibili创始人(站长)
大会员类型:年度
大会员状态:已开通
头像框:管理员
http://i2.hdslb.com/bfs/face/02a3b79edef0f0e682de7f5dca7b6b5fe36d5f65.png
粉丝勋章: 见习偶像
http://i1.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png
空间头图:
http://i2.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png
用户详细信息2 (用于名片)
请求方式:GET
认证方式:Cookie(SESSDATA)
url参数:
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
mid | num | 目标用户UID | 必要 | |
photo | bool | 是否请求用户主页头图 | 非必要 | true:是 false:否 |
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -400:请求错误 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
card | obj | 卡片信息 |
data
中的card
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
mid | num | 用户UID | |
approve | bool | false | 作用尚不明确 |
name | str | 用户昵称 | |
sex | str | 用户性别 | 男 女 保密 |
face | str | 用户头像链接 | |
DisplayRank | str | 0 | 作用尚不明确 |
regtime | num | 0 | 作用尚不明确 |
spacesta | num | 0 | 作用尚不明确 |
birthday | str | 空 | 作用尚不明确 |
place | str | 空 | 作用尚不明确 |
description | str | 空 | 作用尚不明确 |
article | num | 0 | 作用尚不明确 |
attentions | array | 空 | 作用尚不明确 |
fans | num | 粉丝数 | |
friend | num | 关注数 | |
attention | num | 关注数 | |
level_info | obj | 等级 | |
pendant | obj | 挂件 | |
nameplate | obj | 勋章 | |
Official | obj | 认证信息 | |
official_verify | obj | 认证信息2 | |
vip | obj | 大会员状态 | |
space | obj | 主页头图 | |
following | bool | 是否关注此用户 | true:已关注 false:未关注 需要登录(Cookie) 未登录为false |
archive_count | num | 用户稿件数 | |
article_count | num | 0 | 作用尚不明确 |
follower | num | 粉丝数 |
card
中的level_info
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
current_level | num | 当前等级 | 0-6级 |
current_min | num | 0 | 作用尚不明确 |
current_exp | num | 0 | 作用尚不明确 |
next_exp | num | 0 | 作用尚不明确 |
card
中的pendant
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
pid | num | 挂件id | |
name | str | 挂件名称 | |
image | str | 挂件图片url | |
expire | num | 0 | 作用尚不明确 |
card
中的nameplate
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
nid | num | 勋章id | 详细说明有待补充 |
name | str | 勋章名称 | |
image | str | 挂件图片url 正常 | |
image_small | str | 勋章图片url 小 | |
level | str | 勋章等级 | |
condition | str | 勋章条件 |
card
中的Official
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
role | num | 认证类型 | 0:无 1 2:个人认证 3 4 5 6:机构认证 |
title | str | 认证信息 | 无为空 |
desc | str | 认证备注 | 无为空 |
type | num | 是否认证 | -1:无 0:认证 |
card
中的official_verify
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
type | num | 是否认证 | -1:无 0:认证 |
desc | str | 认证信息 | 无为空 |
card
中的vip
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
vipType | num | 大会员类型 | 0:无 1:月会员 2:年会员 |
dueRemark | str | 空 | 作用尚不明确 |
accessStatus | num | 0 | 作用尚不明确 |
vipStatus | num | 大会员状态 | 0:无 1:有 |
vipStatusWarn | str | 空 | 作用尚不明确 |
theme_type | num | 0 | 作用尚不明确 |
card
中的space
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
s_img | str | 主页头图url 小图 | |
l_img | str | 主页头图url 正常 |
示列:
curl -G 'api.bilibili.com/x/web-interface/card' \
--data-urlencode 'mid=2' \
--data-urlencode 'photo=true' \
-b 'SESSDATA=xxx'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"card": {
"mid": "2",
"name": "碧诗",
"approve": false,
"sex": "男",
"rank": "20000",
"face": "http://i1.hdslb.com/bfs/face/3e60b20604b6fdc7d081eb6a1ec72aa47c5a3964.jpg",
"DisplayRank": "0",
"regtime": 0,
"spacesta": 0,
"birthday": "",
"place": "",
"description": "",
"article": 0,
"attentions": [],
"fans": 810968,
"friend": 192,
"attention": 192,
"sign": "kami.im 直男过气网红 # av362830 “We Are Star Dust”",
"level_info": {
"current_level": 6,
"current_min": 0,
"current_exp": 0,
"next_exp": 0
},
"pendant": {
"pid": 76,
"name": "管理员",
"image": "http://i2.hdslb.com/bfs/face/02a3b79edef0f0e682de7f5dca7b6b5fe36d5f65.png",
"expire": 0
},
"nameplate": {
"nid": 10,
"name": "见习偶像",
"image": "http://i0.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png",
"image_small": "http://i1.hdslb.com/bfs/face/275b468b043ec246737ab8580a2075bee0b1263b.png",
"level": "普通勋章",
"condition": "所有自制视频总播放数\u003e=10万"
},
"Official": {
"role": 2,
"title": "bilibili创始人(站长)",
"desc": "",
"type": 0
},
"official_verify": {
"type": 0,
"desc": "bilibili创始人(站长)"
},
"vip": {
"vipType": 2,
"dueRemark": "",
"accessStatus": 0,
"vipStatus": 1,
"vipStatusWarn": "",
"theme_type": 0
}
},
"space": {
"s_img": "http://i2.hdslb.com/bfs/space/768cc4fd97618cf589d23c2711a1d1a729f42235.png",
"l_img": "http://i2.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png"
},
"following": true,
"archive_count": 35,
"article_count": 0,
"follower": 810968
}
}
</details>
本用户详细信息
请求方式:GET
认证方式:Cookie(SESSDATA)
功能同「登录用户信息1」
json回复:
根对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
code | num | 返回值 | 0:成功 -101:未登录 |
message | str | 错误信息 | 默认为0 |
ttl | num | 1 | |
data | obj | 信息本体 |
data
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
mid | num | UID | |
name | str | 昵称 | |
sex | str | 性别 | 男 女 保密 |
face | str | 头像图片url | |
sign | str | 签名 | |
rank | num | 10000 | 作用尚不明确 |
level | num | 当前等级 | 0-6级 |
jointime | num | 0 | 作用尚不明确 |
moral | num | 节操 | 默认70 |
silence | num | 封禁状态 | 0:正常 1:被封 |
email_status | num | 已验证邮箱 | 0:未验证 1:已验证 |
tel_status | num | 已验证手机号 | 0:未验证 1:已验证 |
identification | num | 1 | 作用尚不明确 |
vip | obj | 大会员状态 | |
birthday | num | 生日 | 时间戳 |
is_tourist | num | 0 | 作用尚不明确 |
is_fake_account | num | 0 | 作用尚不明确 |
pin_prompting | num | 0 | 作用尚不明确 |
is_deleted | num | 0 | 作用尚不明确 |
coins | num | 硬币数 | |
following | num | 粉丝数 | |
follower | num | 粉丝数 |
data
中的vip
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
type | num | 大会员类型 | 0:无 1:月会员 2:年会员 |
status | num | 大会员状态 | 0:无 1:有 |
due_date | num | 大会员到期时间 | 毫秒 时间戳 |
vip_pay_type | num | 1 | 作用尚不明确 |
theme_type | num | 0 | 作用尚不明确 |
label | obj | ??? |
vip
中的label
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
path | str | 空 | 作用尚不明确 |
data
中的pendant
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
pid | num | 挂件id | 详细说明有待补充 |
name | str | 挂件名称 | |
image | str | 挂件图片url | |
expire | num | 0 | 作用尚不明确 |
data
中的nameplate
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
nid | num | 勋章id | 详细说明有待补充 |
name | str | 勋章名称 | |
image | str | 挂件图片url 正常 | |
image_small | str | 勋章图片url 小 | |
level | str | 勋章等级 | |
condition | str | 勋章条件 |
data
中的Official
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
role | num | 认证类型 | 0:无 1 2:个人认证 3 4 5 6:机构认证 |
title | str | 认证信息 | 无为空 |
desc | str | 认证备注 | 无为空 |
type | num | 是否认证 | -1:无 0:认证 |
data
中的level_exp
对象:
字段 | 类型 | 内容 | 备注 |
---|---|---|---|
current_level | num | 当前等级 | 0-6级 |
current_min | num | 0 | 作用尚不明确 |
current_exp | num | 0 | 作用尚不明确 |
next_exp | num | 0 | 作用尚不明确 |
示例:
curl -G 'api.bilibili.com/x/space/myinfo' \
-b 'SESSDATA=xxx'
<details>
<summary>查看响应示例:</summary>
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"mid": 293793435,
"name": "社会易姐QwQ",
"sex": "男",
"face": "http://i2.hdslb.com/bfs/face/480e2e98513aaeb65d2f2c76dbae750c4de722e9.jpg",
"sign": "咕咕咕咕咕",
"rank": 10000,
"level": 5,
"jointime": 0,
"moral": 70,
"silence": 0,
"email_status": 1,
"tel_status": 1,
"identification": 1,
"vip": {
"type": 2,
"status": 1,
"due_date": 1612454400000,
"vip_pay_type": 1,
"theme_type": 0,
"label": {
"path": ""
}
},
"pendant": {
"pid": 294,
"name": "茶啊二中",
"image": "http://i0.hdslb.com/bfs/face/5bb7bef5107e448892ab54539298d50eb678de05.png",
"expire": 0
},
"nameplate": {
"nid": 0,
"name": "",
"image": "",
"image_small": "",
"level": "",
"condition": ""
},
"official": {
"role": 0,
"title": "",
"desc": "",
"type": -1
},
"birthday": 1015257600,
"is_tourist": 0,
"is_fake_account": 0,
"pin_prompting": 0,
"is_deleted": 0,
"level_exp": {
"current_level": 5,
"current_min": 10800,
"current_exp": 13985,
"next_exp": 28800
},
"coins": 10.4,
"following": 358,
"follower": 358
}
}
</details>