XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/bilibili-API-collect

添加部分【转正答题】api

74eed00
SocialSisterYi <45892418+SocialSisterYi@users.noreply.github.com>
提交于

代码差异

4 个文件 +792 -2
Modified README.md +5 -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币充值
Added newbie_exam/action.md +76 -0
@@ -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>
Added newbie_exam/fetch.md +263 -0
@@ -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>
Added newbie_exam/info.md +448 -0
@@ -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>