返回提交历史
Modified
README.md
+5
-2
Added
newbie_exam/action.md
+76
-0
Added
newbie_exam/fetch.md
+263
-0
Added
newbie_exam/info.md
+448
-0
XFEstudio/bilibili-API-collect
添加部分【转正答题】api
74eed00
代码差异
4 个文件
+792
-2
@@ -20,7 +20,7 @@
20
20
21
21
<h3 align="center">野生API文档</h3>
22
22
<h3 align="center">不断更新中....</h3>
23
本项目旨在对B站web端、移动端以及TV端散落在世界各地的野生api进行收集整理,研究使用方法并对其进行说明,运用了黑箱法、控制变量法、js逆向分析法、网络抓包法等研究办法
23
本项目旨在对B站web端、移动端以及TV端散落在世界各地的野生api进行收集整理,研究使用方法并对其进行说明,运用了黑箱法、控制变量法、js逆向分析法、apk拆包及反编译法、网络抓包法等研究办法
24
24
25
25
所有api均为标准http协议,返回数据大都为json或protobuf
26
26
@@ -174,7 +174,10 @@ PS:所有http协议地址均可使用https,文档中为了统一写作`http`
174
174
- 直播间操作
175
175
- [直播视频流](live/live_stream.md)×
176
176
- [直播信息流](live/message_stream.md)×
177
- 答题
177
- [转正答题](newbie_exam)
178
- [查询信息](newbie_exam/info.md)×
179
- [拉取题目](newbie_exam/fetch.md)√
180
- [操作](newbie_exam/action.md)×
178
181
- B币钱包
179
182
- 基本信息
180
183
- B币充值
@@ -0,0 +1,76 @@
1
# 操作
2
3
- [提交答题](#提交答题)
4
- [提交基础题](#提交基础题)
5
- 提交附加题
6
- 提交自选题
7
8
- 获取极验验证码
9
- 提交自选题分类
10
- 提前交卷
11
12
---
13
14
## 提交答题
15
16
### 提交基础题
17
18
> http://api.bilibili.com/x/answer/v4/base/check
19
20
*请求方式:POST*
21
22
认证方式:APP或Cookie(SESSDATA)
23
24
**正文参数( application/x-www-form-urlencoded ):**
25
26
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
27
| ----------- | ---- | ------------------------ | -------------- | ------------------------------------------ |
28
| question_id | num | 题目id | 必要 | 从[拉取基础题api](fetch.md#拉取基础题)获得 |
29
| ans_hash | str | 选项hash | 必要 | 从[拉取基础题api](fetch.md#拉取基础题)获得 |
30
| csrf | str | CSRF Token(位于cookie) | Cookie方式必要 | |
31
32
**json回复:**
33
34
根对象:
35
36
| 字段 | 类型 | 内容 | 备注 |
37
| ------- | ---- | -------- | ------------------------------------------------------------ |
38
| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误<br />41014:答题过快或错误太多<br />41012:用户答题提交题目id不合法<br />41020:用户基础题已通过 |
39
| message | str | 错误信息 | 默认为0 |
40
| ttl | num | 1 | |
41
| data | obj | 信息本体 | |
42
43
`data`对象:
44
45
| 字段 | 类型 | 内容 | 备注 |
46
| ------ | ---- | ------------ | ----------------------------------- |
47
| passed | bool | 选项是否正确 | true:选项正确<br />false:选项错误 |
48
49
**示例:**
50
51
提交题目id为`104`的题,选项hash为`cb4c8cc9424fc771f7c1598e74de498f`
52
53
```shell
54
curl 'http://api.bilibili.com/x/answer/v4/base/check' \
55
--data-urlencode 'question_id=104' \
56
--data-urlencode 'ans_hash=cb4c8cc9424fc771f7c1598e74de498f' \
57
--data-urlencode 'csrf=xxxx' \
58
-b 'SESSDATA=xxxx'
59
```
60
61
<details>
62
<summary>查看响应示例:</summary>
63
64
65
```json
66
{
67
"code": 0,
68
"message": "0",
69
"ttl": 1,
70
"data": {
71
"passed": true
72
}
73
}
74
```
75
76
</details>
@@ -0,0 +1,263 @@
1
# 拉取题目
2
3
- [拉取基础题](#拉取基础题)
4
- [拉取附加题](#拉取附加题)
5
- [拉取自选题](#拉取自选题)
6
7
---
8
9
## 拉取基础题
10
11
> http://api.bilibili.com/x/answer/v4/base
12
13
*请求方式:GET*
14
15
认证方式:Cookie或APP
16
17
**json回复:**
18
19
根对象:
20
21
| 字段 | 类型 | 内容 | 备注 |
22
| ------- | ---- | -------- | ------------------------------------------------------------ |
23
| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />41014:答题过快或错误太多<br />41020:用户基础题已通过<br />41023:用户答题记录不存在 |
24
| message | str | 错误信息 | 默认为0 |
25
| ttl | num | 1 | |
26
| data | obj | 信息本体 | |
27
28
`data`对象:
29
30
| 字段 | 类型 | 内容 | 备注 |
31
| -------- | ---- | -------- | ---- |
32
| question | obj | 题目内容 | |
33
34
`data`中的`question`对象:
35
36
| 字段 | 类型 | 内容 | 备注 |
37
| ---------- | ----- | ------------------ | ------------------------------------------------------------ |
38
| id | num | 问题id | |
39
| number | num | 当前题号 | |
40
| q_height | num | 问题部分总高度 | |
41
| q_coord_y | num | 问题部分Y裁剪起始 | 当然是0 |
42
| image | str | 题图url | 题目+所有的选项 |
43
| from | str | 问题来源页面url | 如:“xx弹幕是否违规”所在的视频页 |
44
| options | array | 选项列表 | |
45
| type_id | num | 题目父类型id | 见[查询自选题分类](info.md#查询自选题分类)<br />**注:36为基础题** |
46
| type_name | str | 分院小电视提示文案 | 如:xx小电视 |
47
| type_image | str | 分院小电视图标url | |
48
49
`question`中的`options`数组:
50
51
| 项 | 类型 | 内容 | 备注 |
52
| ---- | ---- | ----- | ---------------------- |
53
| 0 | obj | 选项A | |
54
| 1 | obj | 选项B | 选项至少2个 |
55
| 2 | obj | 选项C | 数组长度取决于选项个数 |
56
| 3 | obj | 选项D | |
57
58
`question`中的`options`数组中的对象:
59
60
| 字段 | 类型 | 内容 | 备注 |
61
| ------- | ---- | ----------------- | ------------------------ |
62
| number | num | 选项序号 | 如:1为A 2为B |
63
| high | num | 选项部分总高度 | |
64
| coord_y | num | 选项部分Y裁剪起始 | |
65
| hash | str | 选项hash | 作为提交对应选项时的参数 |
66
67
**示例:**
68
69
```shell
70
curl -G 'http://api.bilibili.com/x/answer/v4/base' \
71
-b 'SESSDATA=xxx'
72
```
73
74
<details>
75
<summary>查看响应示例:</summary>
76
77
```json
78
{
79
"code": 0,
80
"message": "0",
81
"ttl": 1,
82
"data": {
83
"question": {
84
"id": 6511,
85
"number": 1,
86
"q_height": 38.4,
87
"q_coord_y": 0,
88
"image": "https://i0.hdslb.com/bfs/member/9d7f1f1f0b7478a621d1b998a5a98982.png",
89
"from": "",
90
"options": [
91
{
92
"number": 1,
93
"high": 42,
94
"coord_y": 38.4,
95
"hash": "f7619d6c2040d44f39dc87a7aa34fb9e"
96
},
97
{
98
"number": 2,
99
"high": 42,
100
"coord_y": 80.4,
101
"hash": "dce5140040f40ca4030783585684369d"
102
}
103
],
104
"type_id": 36,
105
"type_name": "小电视校长",
106
"type_image": "https://i0.hdslb.com/bfs/face/7b67c0c0da64a6ab059ff49bb0d4b92988b91806.png"
107
}
108
}
109
}
110
```
111
</details>
112
113
## 拉取附加题
114
115
> http://api.bilibili.com/x/answer/v4/extra
116
117
*请求方式:GET*
118
119
认证方式:Cookie或APP
120
121
**json回复:**
122
123
根对象:
124
125
| 字段 | 类型 | 内容 | 备注 |
126
| ------- | ---- | -------- | ------------------------------------------------------------ |
127
| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />41014:答题过快或错误太多<br />41021:用户基础题未通过<br />41023:用户答题记录不存在<br />41054:用户附加题已通过 |
128
| message | str | 错误信息 | 默认为0 |
129
| ttl | num | 1 | |
130
| data | obj | 信息本体 | |
131
132
`data`对象:
133
134
同[拉取基础题](#拉取基础题)的`data`对象
135
136
**示例:**
137
138
```shell
139
curl -G 'http://api.bilibili.com/x/answer/v4/extra' \
140
-b 'SESSDATA=xxx'
141
```
142
143
<details>
144
<summary>查看响应示例:</summary>
145
146
```json
147
{
148
"code": 0,
149
"message": "0",
150
"ttl": 1,
151
"data": {
152
"question": {
153
"id": 11492,
154
"number": 44,
155
"q_height": 76.8,
156
"q_coord_y": 0,
157
"image": "https://i0.hdslb.com/bfs/member/b6c846613bd0b44cd7c8af1d83e3f0c2.png",
158
"from": "https://www.bilibili.com/video/av14659093",
159
"options": [
160
{
161
"number": 1,
162
"high": 42,
163
"coord_y": 76.8,
164
"hash": "ca15e6009047cf82358c50ab90fd8d9e"
165
},
166
{
167
"number": 2,
168
"high": 42,
169
"coord_y": 118.8,
170
"hash": "60e86a1c736c68da3462f66377e4e8ca"
171
}
172
],
173
"type_id": 36,
174
"type_name": "小电视校长",
175
"type_image": "https://i0.hdslb.com/bfs/face/7b67c0c0da64a6ab059ff49bb0d4b92988b91806.png"
176
}
177
}
178
}
179
```
180
</details>
181
182
## 拉取自选题
183
184
> http://api.bilibili.com/x/answer/v4/pro
185
186
*请求方式:GET*
187
188
认证方式:Cookie或APP
189
190
**json回复:**
191
192
根对象:
193
194
| 字段 | 类型 | 内容 | 备注 |
195
| ------- | ---- | -------- | ------------------------------------------------------------ |
196
| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />41014:答题过快或错误太多<br />41021:用户基础题未通过<br />41023:用户答题记录不存在<br />41051:用户答题验证码未通过<br />41055:基础附加题未通过 |
197
| message | str | 错误信息 | 默认为0 |
198
| ttl | num | 1 | |
199
| data | obj | 信息本体 | |
200
201
`data`对象:
202
203
同[拉取基础题](#拉取基础题)的`data`对象
204
205
**示例:**
206
207
```shell
208
curl -G 'http://api.bilibili.com/x/answer/v4/extra' \
209
-b 'SESSDATA=xxx'
210
```
211
212
<details>
213
<summary>查看响应示例:</summary>
214
215
216
```json
217
{
218
"code": 0,
219
"message": "0",
220
"ttl": 1,
221
"data": {
222
"question": {
223
"id": 824,
224
"number": 54,
225
"q_height": 38.4,
226
"q_coord_y": 0,
227
"image": "https://i0.hdslb.com/bfs/member/417e02be5652f79d0312fa2fcee28869.png",
228
"from": "",
229
"options": [
230
{
231
"number": 1,
232
"high": 42,
233
"coord_y": 38.4,
234
"hash": "c4574c23cf728c19abeab3e7525258d4"
235
},
236
{
237
"number": 2,
238
"high": 42,
239
"coord_y": 80.4,
240
"hash": "ffd48760758fbb8a2c183d1d04f692f8"
241
},
242
{
243
"number": 3,
244
"high": 42,
245
"coord_y": 122.4,
246
"hash": "898d414dff49fe20c4a1da1e148fadb2"
247
},
248
{
249
"number": 4,
250
"high": 42,
251
"coord_y": 164.4,
252
"hash": "09018443f09d8ef4f6fec5e96e082270"
253
}
254
],
255
"type_id": 1,
256
"type_name": "游戏小电视",
257
"type_image": "https://i0.hdslb.com/bfs/face/6590bee26086fed66ee7cc5bac26a32d2f733037.png"
258
}
259
}
260
}
261
```
262
263
</details>
@@ -0,0 +1,448 @@
1
# 查询信息
2
3
- [查询答题状态](#查询答题状态)
4
- [查询自选题分类](#查询自选题分类)
5
- [查询答题结果](#查询答题结果)
6
7
---
8
9
## 查询答题状态
10
11
> http://api.bilibili.com/x/answer/v4/status
12
13
*请求方式:GET*
14
15
认证方式:Cookie或APP
16
17
**json回复:**
18
19
| 字段 | 类型 | 内容 | 备注 |
20
| ------- | ---- | -------- | ------------------------------------------------------------ |
21
| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />41014:答题过快或错误太多 |
22
| message | str | 错误信息 | 默认为0 |
23
| ttl | num | 1 | |
24
| data | obj | 信息本体 | |
25
26
`data`对象:
27
28
| 字段 | 类型 | 内容 | 备注 |
29
| ------------ | ---- | ---------------- | ------------------------------------------------------------ |
30
| hid | num | 答题会话id | |
31
| mid | num | 答题用户UID | |
32
| score | num | 当前得分 | |
33
| status | num | 答题状态 | 0:未答题<br />2:答题中<br />3:已通过 |
34
| number | num | 当前题号 | |
35
| result | str | 是否通过答题 | failed:未通过<br />succeed:已通过 |
36
| stage | str | 当前答题阶段 | base:基础题<br />extra:附加题<br />pro_type:等待选择自选题类型<br />pro:自选题<br />complete:已完成 |
37
| version | str | 答题版本 | |
38
| start_time | num | 本次答题开始时间 | |
39
| first_answer | num | (?) | |
40
| progress | str | 当前答题进度 | 百分比<br />60分为100% |
41
| text | str | 提示文案 | |
42
| url | str | 答题页面url | |
43
| in_reg_audit | bool | (?) | |
44
45
**示例:**
46
47
```shell
48
curl -G 'http://api.bilibili.com/x/answer/v4/status' \
49
-b 'SESSDATA=xxx'
50
```
51
52
<details>
53
<summary>查看响应示例:</summary>
54
55
```json
56
{
57
"code": 0,
58
"message": "0",
59
"ttl": 1,
60
"data": {
61
"hid": 1614593296356209,
62
"mid": 1386643599,
63
"score": 28,
64
"status": 2,
65
"number": 28,
66
"result": "failed",
67
"stage": "base",
68
"version": "v4",
69
"start_time": 1614593296,
70
"first_answer": 2,
71
"progress": "47",
72
"text": "继续答题",
73
"url": "https://www.bilibili.com/h5/newbie/entry?navhide=1",
74
"in_reg_audit": false
75
}
76
}
77
```
78
79
</details>
80
81
## 查询自选题分类
82
83
> http://api.bilibili.com/x/answer/v4/pro/type
84
85
*请求方式:GET*
86
87
认证方式:Cookie或APP
88
89
**json回复:**
90
91
| 字段 | 类型 | 内容 | 备注 |
92
| ------- | ----- | ---------- | ------------------------------------------------------------ |
93
| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />41014:答题过快或错误太多<br />41021:用户基础题未通过<br />41031:自选题未通过<br />41055:基础附加题未通过 |
94
| message | str | 错误信息 | 默认为0 |
95
| ttl | num | 1 | |
96
| data | array | 父分类列表 | |
97
98
`data`数组:
99
100
| 项 | 类型 | 内容 | 备注 |
101
| ---- | ---- | ----------- | ---- |
102
| 0 | obj | 父分类1 | |
103
| n | obj | 父分类(n+1) | |
104
| …… | obj | …… | …… |
105
106
`data`数组中的对象:
107
108
| 字段 | 类型 | 内容 | 备注 |
109
| ------ | ----- | ---------- | ---- |
110
| id | num | 父分类id | |
111
| name | str | 父分类名 | |
112
| fields | array | 子分类列表 | |
113
114
`data`数组中的对象中的`fields`数组:
115
116
| 项 | 类型 | 内容 | 备注 |
117
| ---- | ---- | ----------- | ---- |
118
| 0 | obj | 子分类1 | |
119
| n | obj | 子分类(n+1) | |
120
| …… | obj | …… | …… |
121
122
`fields`数组中的对象:
123
124
| 字段 | 类型 | 内容 | 备注 |
125
| ---- | ---- | -------- | ---- |
126
| id | num | 子分类id | |
127
| name | str | 子分类名 | |
128
129
**示例:**
130
131
```shell
132
curl -G 'http://api.bilibili.com/x/answer/v4/pro/type' \
133
-b 'SESSDATA=xxx'
134
```
135
136
<details>
137
<summary>查看响应示例:</summary>
138
139
```json
140
{
141
"code": 0,
142
"message": "0",
143
"ttl": 1,
144
"data": [
145
{
146
"id": 1,
147
"name": "游戏",
148
"fields": [
149
{
150
"id": 8,
151
"name": "动作射击"
152
},
153
{
154
"id": 9,
155
"name": "冒险格斗"
156
},
157
{
158
"id": 12,
159
"name": "策略模拟 "
160
},
161
{
162
"id": 13,
163
"name": "角色扮演 "
164
},
165
{
166
"id": 14,
167
"name": "音乐体育 "
168
}
169
]
170
},
171
{
172
"id": 2,
173
"name": "影视",
174
"fields": [
175
{
176
"id": 15,
177
"name": "纪录片 "
178
},
179
{
180
"id": 16,
181
"name": "电影 "
182
},
183
{
184
"id": 17,
185
"name": "电视剧 "
186
}
187
]
188
},
189
{
190
"id": 3,
191
"name": "科技",
192
"fields": [
193
{
194
"id": 18,
195
"name": "军事 "
196
},
197
{
198
"id": 19,
199
"name": "地理 "
200
},
201
{
202
"id": 20,
203
"name": "历史 "
204
},
205
{
206
"id": 21,
207
"name": "文学 "
208
},
209
{
210
"id": 22,
211
"name": "数学 "
212
},
213
{
214
"id": 23,
215
"name": "物理 "
216
},
217
{
218
"id": 24,
219
"name": "化学 "
220
},
221
{
222
"id": 25,
223
"name": "生物 "
224
},
225
{
226
"id": 26,
227
"name": "数码科技 "
228
}
229
]
230
},
231
{
232
"id": 4,
233
"name": "动画",
234
"fields": [
235
{
236
"id": 27,
237
"name": "动画声优 "
238
},
239
{
240
"id": 28,
241
"name": "动漫内容 "
242
}
243
]
244
},
245
{
246
"id": 5,
247
"name": "艺术",
248
"fields": [
249
{
250
"id": 29,
251
"name": "ACG音乐 "
252
},
253
{
254
"id": 30,
255
"name": "三次元音乐 "
256
},
257
{
258
"id": 31,
259
"name": "绘画 "
260
}
261
]
262
},
263
{
264
"id": 6,
265
"name": "流行前线",
266
"fields": [
267
{
268
"id": 32,
269
"name": "娱乐 "
270
},
271
{
272
"id": 33,
273
"name": "时尚 "
274
},
275
{
276
"id": 34,
277
"name": "运动 "
278
}
279
]
280
},
281
{
282
"id": 7,
283
"name": "鬼畜",
284
"fields": [
285
{
286
"id": 35,
287
"name": "鬼畜 "
288
}
289
]
290
}
291
]
292
}
293
```
294
295
</details>
296
297
## 查询答题结果
298
299
> http://api.bilibili.com/x/answer/v4/result
300
301
*请求方式:GET*
302
303
认证方式:Cookie或APP
304
305
**url参数:**
306
307
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
308
| ------ | ---- | ---------- | ------ | ---- |
309
| hid | num | 答题会话id | 必要 | |
310
311
**json回复:**
312
313
| 字段 | 类型 | 内容 | 备注 |
314
| ------- | ---- | -------- | ------------------------------------------------------------ |
315
| code | num | 返回值 | 0:成功<br />-101:账号未登录<br />-400:请求错误<br />41014:答题过快或错误太多<br />41023:用户答题记录不存在 |
316
| message | str | 错误信息 | 默认为0 |
317
| ttl | num | 1 | |
318
| data | obj | 信息本体 | |
319
320
`data`对象:
321
322
| 字段 | 类型 | 内容 | 备注 |
323
| ----------------- | ----- | ------------------ | ------ |
324
| hid | num | 答题会话id | |
325
| mid | num | 答题用户UID | |
326
| member | num | | |
327
| score | num | 得分 | |
328
| level | num | | |
329
| first_pass | num | | |
330
| uname | str | 答题用户昵称 | |
331
| face | str | 答题用户头像url | |
332
| status | str | 答题结果 | |
333
| question_types | array | 已选择的自选题列表 | |
334
| power | array | 自选题分类得分情况 | |
335
| start_time | num | 开始答题时间 | 时间戳 |
336
| share | array | | |
337
| can_show_rank_btn | bool | | |
338
| is_same_user | bool | | |
339
| view_more | str | | |
340
| video_info | obj | | |
341
| main_tids | array | | |
342
| sub_tids | array | | |
343
| power_result | null | | |
344
| score_rate | num | | |
345
| permission | obj | | |
346
347
**示例:**
348
349
```shell
350
curl -G 'http://api.bilibili.com/x/answer/v4/result' \
351
--data-urlencode 'hid=1615088061307609' \
352
-b 'SESSDATA=xxx'
353
```
354
355
<details>
356
<summary>查看响应示例:</summary>
357
358
```json
359
{
360
"code": 0,
361
"message": "0",
362
"ttl": 1,
363
"data": {
364
"hid": 1615088061307609,
365
"mid": 1386643599,
366
"member": 0,
367
"score": 70,
368
"level": 0,
369
"first_pass": 0,
370
"uname": "眉凭铱ひ前非",
371
"face": "http://i0.hdslb.com/bfs/face/cd83d4cdbfb521455c168eaa181915b40cb664d1.jpg",
372
"status": "succeed",
373
"question_types": [
374
{
375
"id": 12,
376
"name": "策略模拟 "
377
},
378
{
379
"id": 13,
380
"name": "角色扮演 "
381
},
382
{
383
"id": 14,
384
"name": "音乐体育 "
385
},
386
{
387
"id": 8,
388
"name": "动作射击"
389
},
390
{
391
"id": 9,
392
"name": "冒险格斗"
393
}
394
],
395
"power": [
396
{
397
"score": 0,
398
"name": "动画"
399
},
400
{
401
"score": 0,
402
"name": "艺术"
403
},
404
{
405
"score": 5,
406
"name": "游戏"
407
},
408
{
409
"score": 0,
410
"name": "科技"
411
},
412
{
413
"score": 0,
414
"name": "影视"
415
},
416
{
417
"score": 0,
418
"name": "鬼畜"
419
}
420
],
421
"start_time": 1615088061,
422
"share": {
423
"content": "",
424
"short_content": ""
425
},
426
"can_show_rank_btn": false,
427
"is_same_user": true,
428
"view_more": "",
429
"video_info": {
430
"url": "",
431
"name": "",
432
"img": "",
433
"watch_num": "",
434
"up_num": ""
435
},
436
"main_tids": [],
437
"sub_tids": [],
438
"power_result": null,
439
"score_rate": 84,
440
"permission": {
441
"reply": true,
442
"color_dm": true
443
}
444
}
445
}
446
```
447
448
</details>