补充【转正答题】相关api

This commit is contained in:
社会易姐QwQ 2021-11-14 21:48:11 +08:00
parent 97ded2a097
commit 9fa97ccd48
4 changed files with 558 additions and 72 deletions

View File

@ -13,11 +13,12 @@
<img src="https://img.shields.io/github/forks/SocialSisterYi/bilibili-API-collect.svg" alt="GitHub forks"/>
</a>
<a href="https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/LICENSE" style="text-decoration:none" >
<img src="https://img.shields.io/github/license/SocialSisterYi/bilibili-API-collect.svg" alt="GitHub license"/>
<img src="https://img.shields.io/badge/License-CC%20BY--NC%204.0-lightgrey.svg" alt="GitHub license"/>
</a>
</p>
<h3 align="center">野生API文档</h3>
<h3 align="center">不断更新中....</h3>
本项目旨在对B站web端、移动端以及TV端散落在世界各地的野生api进行收集整理研究使用方法并对其进行说明运用了黑箱法、控制变量法、js逆向分析法、apk拆包及反编译法、网络抓包法等研究办法
所有api均为标准http协议返回数据大都为json或protobuf
@ -181,10 +182,10 @@ PS所有http协议地址均可使用https文档中为了统一写作`http`
- 直播间操作
- [直播视频流](live/live_stream.md)×
- [直播信息流](live/message_stream.md)×
- [转正答题](newbie_exam)
- [查询信息](newbie_exam/info.md)×
- [转正答题](newbie_exam)×
- [查询信息](newbie_exam/info.md)
- [拉取题目](newbie_exam/fetch.md)√
- [操作](newbie_exam/action.md)×
- [操作](newbie_exam/action.md)
- B币钱包
- 基本信息
- B币充值

View File

@ -2,12 +2,12 @@
- [提交答题](#提交答题)
- [提交基础题](#提交基础题)
- 提交附加题
- 提交自选题
- 获取极验验证码
- 提交自选题分类
- 提前交卷
- [提交附加题](#提交附加题)
- [提交自选题](#提交自选题)
- [获取验证码](#获取验证码)
- [提交验证码](#提交验证码)
- [提交自选题分类](#提交自选题分类)
- [提前交卷](#提前交卷)
---
@ -35,7 +35,67 @@
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | 0成功<br />-101账号未登录<br />-400请求错误<br />41014答题过快或错误太多<br />41012用户答题提交题目id不合法<br />41020用户基础题已通过 |
| code | num | 返回值 | 0成功<br />-101账号未登录<br />-400请求错误<br />41014答题过快或错误太多<br />41012用户答题提交题目id不合法<br />41020用户基础题已通过<br />41023用户答题记录不存在 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------ | ---- | ------------ | ----------------------------------- |
| passed | bool | 选项是否正确 | true选项正确<br />false选项错误 |
**示例:**
提交题目id为`104`的题选项hash为`cb4c8cc9424fc771f7c1598e74de498f`
```shell
curl 'http://api.bilibili.com/x/answer/v4/base/check' \
--data-urlencode 'question_id=104' \
--data-urlencode 'ans_hash=cb4c8cc9424fc771f7c1598e74de498f' \
--data-urlencode 'csrf=xxxx' \
-b 'SESSDATA=xxxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"passed": true
}
}
```
</details>
### 提交附加题
> http://api.bilibili.com/x/answer/v4/base/check
*请求方式POST*
认证方式APP或CookieSESSDATA
**正文参数( application/x-www-form-urlencoded **
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ----------- | ---- | ------------------------ | -------------- | ------------------------------------------ |
| question_id | num | 题目id | 必要 | 从[拉取基础题api](fetch.md#拉取基础题)获得 |
| ans_hash | str | 选项hash | 必要 | 从[拉取基础题api](fetch.md#拉取基础题)获得 |
| csrf | str | CSRF Token位于cookie | Cookie方式必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | 0成功<br />-101账号未登录<br />-400请求错误<br />41014答题过快或错误太多<br />41012用户答题提交题目id不合法<br />41023用户答题记录不存在 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
@ -61,6 +121,66 @@ curl 'http://api.bilibili.com/x/answer/v4/base/check' \
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"passed": true
}
}
```
</details>
### 提交自选题
> http://api.bilibili.com/x/answer/v4/pro/check
*请求方式POST*
认证方式APP或CookieSESSDATA
**正文参数( application/x-www-form-urlencoded **
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ----------- | ---- | ------------------------ | -------------- | ------------------------------------------ |
| question_id | num | 题目id | 必要 | 从[拉取基础题api](fetch.md#拉取基础题)获得 |
| ans_hash | str | 选项hash | 必要 | 从[拉取基础题api](fetch.md#拉取基础题)获得 |
| csrf | str | CSRF Token位于cookie | Cookie方式必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | 0成功<br />-101账号未登录<br />-400请求错误<br />41014答题过快或错误太多<br />41012用户答题提交题目id不合法<br />41023用户答题记录不存在<br />41026获取用户DB题目信息异常 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------ | ---- | ---- | ---------- |
| passed | bool | true | 恒为`true` |
**示例:**
提交题目id为`2935`的题选项hash为`ffd55cbe0624f466bee2ea3eb576a4d0`
```shell
curl -G 'http://api.bilibili.com/x/answer/v4/pro/check' \
--data-urlencode 'question_id=2935' \
--data-urlencode 'ans_hash=ffd55cbe0624f466bee2ea3eb576a4d0' \
--data-urlencode 'csrf=xxxx' \
-b 'SESSDATA=xxxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
@ -73,4 +193,262 @@ curl 'http://api.bilibili.com/x/answer/v4/base/check' \
}
```
</details>
</details>
## 获取验证码
> http://api.bilibili.com/x/answer/v4/captcha
*请求方式GET*
认证方式APP或CookieSESSDATA
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | 0成功<br />-101账号未登录<br />-400请求错误<br />41010用户答题非法访问<br />41014答题过快或错误太多<br />41020用户基础题已通过<br />41021用户基础题未通过 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| --------- | ---- | ----------- | ------------- |
| type | str | 验证码类型? | geetest极验 |
| gt | str | 极验id | |
| challenge | str | 极验key | |
| token | str | (?) | |
| url | str | (?) | |
**示例:**
```shell
curl 'http://api.bilibili.com/x/answer/v4/captcha' \
-b 'SESSDATA=xxxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"type": "geetest",
"gt": "abc55d1fb914cb110cfb4c232a4b4c35",
"challenge": "90a6e03e626e13ee186ddae0107c3ae2",
"token": "",
"url": ""
}
}
```
</details>
## 提交验证码
> http://api.bilibili.com/x/answer/v4/captcha/check
*请求方式POST*
认证方式APP或CookieSESSDATA
**注:**
旧版`edition=0`同时提交自选题分类以及验证码
新版`edition=2`仅仅提交验证码
**正文参数( application/x-www-form-urlencoded **
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ----------------- | ---- | ---------------------- | -------------- | ---------------- |
| types | nums | 自选题分类(旧版) | 非必要 | 新版不需要此字段 |
| type | str | 验证码类型 | 非必要 | |
| bilibili_token | str | | 非必要 | |
| bilibili_code | str | | 非必要 | |
| geetest_challenge | str | 极验key | 非必要 | |
| geetest_seccode | str | 极验结果+\|jordan | 非必要 | |
| geetest_validate | str | 极验结果 | 非必要 | |
| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | 0成功<br />-101账号未登录<br />-105验证码错误<br />-400请求错误<br />41010用户答题非法访问<br />41014答题过快或错误太多<br />41021用户基础题未通过<br />41031自选题未通过 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
**示例:**
```shell
curl 'http://api.bilibili.com/x/answer/v4/captcha/check' \
--data-urlencode 'types=' \
--data-urlencode 'type=geetest' \
--data-urlencode 'bilibili_token=' \
--data-urlencode 'bilibili_code=' \
--data-urlencode 'geetest_challenge=3f809a7a9c51edca751fd26c032c182d' \
--data-urlencode 'geetest_seccode=513ec576a275a3eb250829202d4dce46|jordan' \
--data-urlencode 'geetest_validate=513ec576a275a3eb250829202d4dce46' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1
}
```
</details>
## 提交自选题分类
> http://api.bilibili.com/x/answer/v4/pro/type/check
*请求方式POST*
认证方式APP或CookieSESSDATA
**正文参数( application/x-www-form-urlencoded **
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | ---------------------- | -------------- | ---- |
| types | nums | 自选题分类(新版) | 必要 | |
| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | 0成功<br />-101账号未登录<br />-400请求错误<br />41010用户答题非法访问<br />41014答题过快或错误太多<br />41021用户基础题未通过<br />41031自选题未通过<br />41052用户题目类型不合法<br />41055基础附加题未通过 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
**示例:**
选择`游戏` `影视` `科教/知识` `动画/动漫`分类
```shell
curl 'http://api.bilibili.com/x/answer/v4/pro/type/check' \
--data-urlencode 'types=1,2,3,4' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1
}
```
</details>
## 提前交卷
> http://api.bilibili.com/x/answer/v4/submit
*请求方式POST*
认证方式APP或CookieSESSDATA
当当前得分>=60时可请求本接口提前完成答题
**正文参数( application/x-www-form-urlencoded **
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ------ | ---- | ---------------------- | -------------- | ---- |
| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
**json回复**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | 0成功<br />-101账号未登录<br />-400请求错误<br />41014答题过快或错误太多<br />41023用户答题记录不存在<br />41031自选题未通过 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------------ | ---- | ---------------- | -------------------------------------------- |
| hid | num | 答题会话id | |
| mid | num | 答题用户mid | |
| score | num | 得分 | |
| status | num | 0 | |
| number | num | 0 | |
| result | str | succeed | |
| stage | str | result | |
| version | str | 版本 | 目前为`v4` |
| start_time | num | 本次答题开始时间 | 时间戳 |
| first_answer | num | 0 | |
| progress | str | | |
| text | str | | |
| url | str | | |
| in_reg_audit | bool | | |
| edition | num | 答题版本 | 0旧版40+10+50<br />2新版40+30+30 |
| rewards | null | | |
| captcha | num | 1 | |
**示例:**
```shell
curl 'http://api.bilibili.com/x/answer/v4/submit' \
--data-urlencode 'csrf=xxx' \
-b 'SESSDATA=xxxx'
```
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"hid": 1623207905520705,
"mid": 293793435,
"score": 63,
"status": 3,
"number": 0,
"result": "succeed",
"stage": "result",
"version": "v4",
"start_time": 1636889218,
"first_answer": 0,
"progress": "",
"text": "",
"url": "",
"in_reg_audit": false,
"edition": 0,
"rewards": null,
"captcha": 1
}
}
```
</details>

View File

@ -35,11 +35,11 @@
| 字段 | 类型 | 内容 | 备注 |
| ---------- | ----- | ------------------ | ------------------------------------------------------------ |
| id | num | 问题id | |
| id | num | 问题id | **问题id不代表题图因为选项是打乱的** |
| number | num | 当前题号 | |
| q_height | num | 问题部分总高度 | |
| q_coord_y | num | 问题部分Y裁剪起始 | 当然是0 |
| image | str | 题图url | 题目+所有的选项 |
| image | str | 题图url | 题目文字+所有的选项文字排版成一张图存储在bfs中 |
| from | str | 问题来源页面url | 如“xx弹幕是否违规”所在的视频页 |
| options | array | 选项列表 | |
| type_id | num | 题目父类型id | 见[查询自选题分类](info.md#查询自选题分类)<br />**注36为基础题** |
@ -62,7 +62,7 @@
| number | num | 选项序号 | 如1为A 2为B |
| high | num | 选项部分总高度 | |
| coord_y | num | 选项部分Y裁剪起始 | |
| hash | str | 选项hash | 作为提交对应选项时的参数 |
| hash | str | 选项hash | 作为提交对应选项时应传参 |
**示例:**
@ -211,8 +211,6 @@ curl -G 'http://api.bilibili.com/x/answer/v4/pro' \
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
@ -260,4 +258,5 @@ curl -G 'http://api.bilibili.com/x/answer/v4/pro' \
}
```
</details>
</details>

View File

@ -25,22 +25,25 @@
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ------------ | ---- | ---------------- | ------------------------------------------------------------ |
| hid | num | 答题会话id | |
| mid | num | 答题用户mid | |
| score | num | 当前得分 | |
| status | num | 答题状态 | 0未答题<br />2答题中<br />3已通过 |
| number | num | 当前题号 | |
| result | str | 是否通过答题 | failed未通过<br />succeed已通过 |
| stage | str | 当前答题阶段 | base基础题<br />extra附加题<br />pro_type等待选择自选题类型<br />pro自选题<br />complete已完成 |
| version | str | 答题版本 | |
| start_time | num | 本次答题开始时间 | |
| first_answer | num | | |
| progress | str | 当前答题进度 | 百分比<br />60分为100% |
| text | str | 提示文案 | |
| url | str | 答题页面url | |
| in_reg_audit | bool | | |
| 字段 | 类型 | 内容 | 备注 |
| ------------ | ---- | ------------------ | ------------------------------------------------------------ |
| hid | num | 答题会话id | |
| mid | num | 答题用户mid | |
| score | num | 当前得分 | |
| status | num | 答题状态 | 0未答题<br />2答题中<br />3已通过 |
| number | num | 当前题号 | |
| result | str | 是否通过答题 | failed未通过<br />succeed已通过 |
| stage | str | 当前答题阶段 | base基础题<br />extra附加题<br />pro_type等待选择自选题类型<br />pro自选题<br />complete已完成 |
| version | str | 答题版本 | 当前为`v4` |
| start_time | num | 本次答题开始时间 | 时间戳 |
| first_answer | num | ? | |
| progress | str | 当前答题进度 | 百分比<br />60分为100% |
| text | str | 提示文案 | |
| url | str | 答题页面url | |
| in_reg_audit | bool | 是否为第一次答题 | |
| edition | num | 答题版本 | 0旧版40+10+50<br />2新版40+30+30 |
| rewards | null | (?) | |
| captcha | num | 是否已经提交验证码 | 1已提交<br />仅新版提交验证码后存在 |
**示例:**
@ -58,20 +61,22 @@ curl -G 'http://api.bilibili.com/x/answer/v4/status' \
"message": "0",
"ttl": 1,
"data": {
"hid": 1614593296356209,
"mid": 1386643599,
"score": 28,
"hid": 1623207905520705,
"mid": 293793435,
"score": 2,
"status": 2,
"number": 28,
"number": 2,
"result": "failed",
"stage": "base",
"version": "v4",
"start_time": 1614593296,
"start_time": 1623207905,
"first_answer": 2,
"progress": "47",
"progress": "3",
"text": "继续答题",
"url": "https://www.bilibili.com/h5/newbie/entry?navhide=1",
"in_reg_audit": false
"in_reg_audit": false,
"edition": 0,
"rewards": null
}
}
```
@ -86,6 +91,8 @@ curl -G 'http://api.bilibili.com/x/answer/v4/status' \
认证方式Cookie或APP
当字段`edition`的值不同时,该接口返回的数据也不同
**json回复**
| 字段 | 类型 | 内容 | 备注 |
@ -133,6 +140,8 @@ curl -G 'http://api.bilibili.com/x/answer/v4/pro/type' \
-b 'SESSDATA=xxx'
```
旧版`edition=0`返回:
<details>
<summary>查看响应示例:</summary>
@ -294,13 +303,111 @@ curl -G 'http://api.bilibili.com/x/answer/v4/pro/type' \
</details>
新版`edition=2`返回:
<details>
<summary>查看响应示例:</summary>
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": [
{
"id": 1,
"name": "游戏",
"fields": [
{
"id": 1,
"name": "游戏"
}
]
},
{
"id": 2,
"name": "影视",
"fields": [
{
"id": 2,
"name": "影视"
}
]
},
{
"id": 3,
"name": "科教/知识",
"fields": [
{
"id": 3,
"name": "科教/知识"
}
]
},
{
"id": 4,
"name": "动画/动漫",
"fields": [
{
"id": 4,
"name": "动画/动漫"
}
]
},
{
"id": 5,
"name": "音乐/舞蹈",
"fields": [
{
"id": 5,
"name": "音乐/舞蹈"
}
]
},
{
"id": 32,
"name": "明星/娱乐",
"fields": [
{
"id": 32,
"name": "明星/娱乐"
}
]
},
{
"id": 35,
"name": "鬼畜",
"fields": [
{
"id": 35,
"name": "鬼畜"
}
]
},
{
"id": 42,
"name": "时尚/健身",
"fields": [
{
"id": 42,
"name": "时尚/健身"
}
]
}
]
}
```
</details>
## 查询答题结果
> http://api.bilibili.com/x/answer/v4/result
*请求方式GET*
认证方式Cookie或APP
认证方式:
**url参数**
@ -310,39 +417,40 @@ curl -G 'http://api.bilibili.com/x/answer/v4/pro/type' \
**json回复**
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ------------------------------------------------------------ |
| code | num | 返回值 | 0成功<br />-101账号未登录<br />-400请求错误<br />41014答题过快或错误太多<br />41023用户答题记录不存在 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ---------------------------------------------------------- |
| code | num | 返回值 | 0成功<br />-400请求错误<br />41023用户答题记录不存在 |
| message | str | 错误信息 | 默认为0 |
| ttl | num | 1 | |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ----------------- | ----- | ------------------ | ------ |
| hid | num | 答题会话id | |
| mid | num | 答题用户mid | |
| member | num | | |
| score | num | 得分 | |
| level | num | | |
| first_pass | num | | |
| uname | str | 答题用户昵称 | |
| face | str | 答题用户头像url | |
| status | str | 答题结果 | |
| question_types | array | 已选择的自选题列表 | |
| power | array | 自选题分类得分情况 | |
| start_time | num | 开始答题时间 | 时间戳 |
| share | array | | |
| can_show_rank_btn | bool | | |
| is_same_user | bool | | |
| view_more | str | | |
| video_info | obj | | |
| main_tids | array | | |
| sub_tids | array | | |
| power_result | null | | |
| score_rate | num | | |
| permission | obj | | |
| 字段 | 类型 | 内容 | 备注 |
| ----------------- | ----- | ------------------------ | ----------------------------------- |
| hid | num | 答题会话id | |
| mid | num | 答题用户mid | |
| member | num | | |
| score | num | 得分 | |
| level | num | 用户等级 | |
| first_pass | num | | |
| uname | str | 用户昵称 | |
| face | str | 用户头像url | |
| status | str | 答题结果 | failed未通过<br />succeed已通过 |
| question_types | array | 已选择的自选题列表 | |
| power | array | 自选题分类得分情况 | |
| start_time | num | 开始答题时间 | 时间戳 |
| share | obj | | |
| can_show_rank_btn | bool | | |
| is_same_user | bool | | |
| view_more | str | | |
| video_info | obj | | |
| main_tids | array | | |
| sub_tids | array | | |
| power_result | null | | |
| score_rate | num | 分数超过平均用户的百分比 | |
| permission | obj | | |
| rewards | null | | |
**示例:**