@ikenxuan/amagi 4.4.7 → 4.4.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -34
- package/dist/default/cjs/index.cjs +1150 -685
- package/dist/default/esm/index.mjs +1140 -683
- package/dist/default/index.d.ts +533 -402
- package/package.json +4 -6
|
@@ -78,6 +78,500 @@ var BiLiBiLiAPI = class {
|
|
|
78
78
|
}
|
|
79
79
|
};
|
|
80
80
|
var bilibiliAPI = new BiLiBiLiAPI();
|
|
81
|
+
var bilibiliApiUrls = new BiLiBiLiAPI();
|
|
82
|
+
|
|
83
|
+
// src/platform/bilibili/qtparam.ts
|
|
84
|
+
async function qtparam(BASEURL, cookie) {
|
|
85
|
+
if (cookie === "") return { QUERY: "&platform=html5", STATUS: "!isLogin" };
|
|
86
|
+
const logininfo = await new Networks({ url: bilibiliAPI.\u767B\u5F55\u57FA\u672C\u4FE1\u606F(), headers: { Cookie: cookie } }).getData();
|
|
87
|
+
const sign = await wbi_sign(BASEURL, cookie);
|
|
88
|
+
const qn = [6, 16, 32, 64, 74, 80, 112, 116, 120, 125, 126, 127];
|
|
89
|
+
let isvip;
|
|
90
|
+
logininfo.data.vipStatus === 1 ? isvip = true : isvip = false;
|
|
91
|
+
if (isvip) {
|
|
92
|
+
return { QUERY: `&fnval=16&fourk=1&${sign}`, STATUS: "isLogin", isvip };
|
|
93
|
+
} else return { QUERY: `&qn=${qn[3]}&fnval=16`, STATUS: "isLogin", isvip };
|
|
94
|
+
}
|
|
95
|
+
var mixinKeyEncTab = [
|
|
96
|
+
46,
|
|
97
|
+
47,
|
|
98
|
+
18,
|
|
99
|
+
2,
|
|
100
|
+
53,
|
|
101
|
+
8,
|
|
102
|
+
23,
|
|
103
|
+
32,
|
|
104
|
+
15,
|
|
105
|
+
50,
|
|
106
|
+
10,
|
|
107
|
+
31,
|
|
108
|
+
58,
|
|
109
|
+
3,
|
|
110
|
+
45,
|
|
111
|
+
35,
|
|
112
|
+
27,
|
|
113
|
+
43,
|
|
114
|
+
5,
|
|
115
|
+
49,
|
|
116
|
+
33,
|
|
117
|
+
9,
|
|
118
|
+
42,
|
|
119
|
+
19,
|
|
120
|
+
29,
|
|
121
|
+
28,
|
|
122
|
+
14,
|
|
123
|
+
39,
|
|
124
|
+
12,
|
|
125
|
+
38,
|
|
126
|
+
41,
|
|
127
|
+
13,
|
|
128
|
+
37,
|
|
129
|
+
48,
|
|
130
|
+
7,
|
|
131
|
+
16,
|
|
132
|
+
24,
|
|
133
|
+
55,
|
|
134
|
+
40,
|
|
135
|
+
61,
|
|
136
|
+
26,
|
|
137
|
+
17,
|
|
138
|
+
0,
|
|
139
|
+
1,
|
|
140
|
+
60,
|
|
141
|
+
51,
|
|
142
|
+
30,
|
|
143
|
+
4,
|
|
144
|
+
22,
|
|
145
|
+
25,
|
|
146
|
+
54,
|
|
147
|
+
21,
|
|
148
|
+
56,
|
|
149
|
+
59,
|
|
150
|
+
6,
|
|
151
|
+
63,
|
|
152
|
+
57,
|
|
153
|
+
62,
|
|
154
|
+
11,
|
|
155
|
+
36,
|
|
156
|
+
20,
|
|
157
|
+
34,
|
|
158
|
+
44,
|
|
159
|
+
52
|
|
160
|
+
];
|
|
161
|
+
var getMixinKey = (orig) => mixinKeyEncTab.map((n) => orig[n]).join("").slice(0, 32);
|
|
162
|
+
function encWbi(params, img_key, sub_key) {
|
|
163
|
+
const mixin_key = getMixinKey(img_key + sub_key);
|
|
164
|
+
const curr_time = Math.round(Date.now() / 1e3);
|
|
165
|
+
const chr_filter = /[!'()*]/g;
|
|
166
|
+
Object.assign(params, { wts: curr_time });
|
|
167
|
+
const query = Object.keys(params).sort().map((key) => {
|
|
168
|
+
const value = params[key].toString().replace(chr_filter, "");
|
|
169
|
+
return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
|
|
170
|
+
}).join("&");
|
|
171
|
+
const wbi_sign2 = crypto__default.default.createHash("md5").update(query + mixin_key).digest("hex");
|
|
172
|
+
return `&wts=${curr_time}&w_rid=${wbi_sign2}`;
|
|
173
|
+
}
|
|
174
|
+
async function getWbiKeys(cookie) {
|
|
175
|
+
const res = await axios__default.default("https://api.bilibili.com/x/web-interface/nav", {
|
|
176
|
+
headers: {
|
|
177
|
+
Cookie: cookie
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
const responseJson = res.data;
|
|
181
|
+
const response = responseJson;
|
|
182
|
+
const {
|
|
183
|
+
data: {
|
|
184
|
+
wbi_img: { img_url, sub_url }
|
|
185
|
+
}
|
|
186
|
+
} = response;
|
|
187
|
+
return {
|
|
188
|
+
img_key: img_url.slice(img_url.lastIndexOf("/") + 1, img_url.lastIndexOf(".")),
|
|
189
|
+
sub_key: sub_url.slice(sub_url.lastIndexOf("/") + 1, sub_url.lastIndexOf("."))
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
async function wbi_sign(BASEURL, cookie) {
|
|
193
|
+
const web_keys = await getWbiKeys(cookie);
|
|
194
|
+
const url = new URL(BASEURL);
|
|
195
|
+
const params = {};
|
|
196
|
+
for (const [key, value] of url.searchParams.entries()) {
|
|
197
|
+
params[key] = value;
|
|
198
|
+
}
|
|
199
|
+
const query = encWbi(params, web_keys.img_key, web_keys.sub_key);
|
|
200
|
+
return query;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// src/platform/bilibili/sign/bv2av.ts
|
|
204
|
+
var XOR_CODE = 23442827791579n;
|
|
205
|
+
var MASK_CODE = 2251799813685247n;
|
|
206
|
+
var MAX_AID = 1n << 51n;
|
|
207
|
+
var BASE = 58n;
|
|
208
|
+
var data = "FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf";
|
|
209
|
+
function av2bv(aid) {
|
|
210
|
+
const bytes = ["B", "V", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0"];
|
|
211
|
+
let bvIndex = bytes.length - 1;
|
|
212
|
+
let tmp = (MAX_AID | BigInt(aid)) ^ XOR_CODE;
|
|
213
|
+
while (tmp > 0) {
|
|
214
|
+
bytes[bvIndex] = data[Number(tmp % BigInt(BASE))];
|
|
215
|
+
tmp = tmp / BASE;
|
|
216
|
+
bvIndex -= 1;
|
|
217
|
+
}
|
|
218
|
+
[bytes[3], bytes[9]] = [bytes[9], bytes[3]];
|
|
219
|
+
[bytes[4], bytes[7]] = [bytes[7], bytes[4]];
|
|
220
|
+
return bytes.join("");
|
|
221
|
+
}
|
|
222
|
+
function bv2av(bvid) {
|
|
223
|
+
const bvidArr = Array.from(bvid);
|
|
224
|
+
[bvidArr[3], bvidArr[9]] = [bvidArr[9], bvidArr[3]];
|
|
225
|
+
[bvidArr[4], bvidArr[7]] = [bvidArr[7], bvidArr[4]];
|
|
226
|
+
bvidArr.splice(0, 3);
|
|
227
|
+
const tmp = bvidArr.reduce((pre, bvidChar) => pre * BASE + BigInt(data.indexOf(bvidChar)), 0n);
|
|
228
|
+
return Number(tmp & MASK_CODE ^ XOR_CODE);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// src/platform/bilibili/BilibiliApi.ts
|
|
232
|
+
var bilibili = {
|
|
233
|
+
/**
|
|
234
|
+
* 获取单个视频作品数据
|
|
235
|
+
* @param options 请求参数,包含 bvid 和可选的 typeMode
|
|
236
|
+
* @param cookie 有效的用户 Cookie
|
|
237
|
+
* @returns 接口返回的原始数据
|
|
238
|
+
*/
|
|
239
|
+
async getVideoInfo(options, cookie) {
|
|
240
|
+
const { typeMode, ...restOptions } = options;
|
|
241
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E" }, cookie);
|
|
242
|
+
return data2;
|
|
243
|
+
},
|
|
244
|
+
/**
|
|
245
|
+
* 获取单个视频下载信息数据
|
|
246
|
+
* @param options 请求参数,包含 avid, cid 和可选的 typeMode
|
|
247
|
+
* @param cookie 有效的用户 Cookie
|
|
248
|
+
* @returns 接口返回的原始数据
|
|
249
|
+
*/
|
|
250
|
+
async getVideoStream(options, cookie) {
|
|
251
|
+
const { typeMode, ...restOptions } = options;
|
|
252
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E" }, cookie);
|
|
253
|
+
return data2;
|
|
254
|
+
},
|
|
255
|
+
/**
|
|
256
|
+
* 获取评论数据
|
|
257
|
+
* @param options 请求参数,包含 type, oid, 可选的 number, pn 和 typeMode
|
|
258
|
+
* @param cookie 有效的用户 Cookie
|
|
259
|
+
* @returns 接口返回的原始数据
|
|
260
|
+
*/
|
|
261
|
+
async getComments(options, cookie) {
|
|
262
|
+
const { typeMode, ...restOptions } = options;
|
|
263
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "\u8BC4\u8BBA\u6570\u636E" }, cookie);
|
|
264
|
+
return data2;
|
|
265
|
+
},
|
|
266
|
+
/**
|
|
267
|
+
* 获取用户主页数据
|
|
268
|
+
* @param options 请求参数,包含 host_mid 和可选的 typeMode
|
|
269
|
+
* @param cookie 有效的用户 Cookie
|
|
270
|
+
* @returns 接口返回的原始数据
|
|
271
|
+
*/
|
|
272
|
+
async getUserProfile(options, cookie) {
|
|
273
|
+
const { typeMode, ...restOptions } = options;
|
|
274
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "\u7528\u6237\u4E3B\u9875\u6570\u636E" }, cookie);
|
|
275
|
+
return data2;
|
|
276
|
+
},
|
|
277
|
+
/**
|
|
278
|
+
* 获取用户主页动态列表数据
|
|
279
|
+
* @param options 请求参数,包含 host_mid 和可选的 typeMode
|
|
280
|
+
* @param cookie 有效的用户 Cookie
|
|
281
|
+
* @returns 接口返回的原始数据
|
|
282
|
+
*/
|
|
283
|
+
async getUserDynamic(options, cookie) {
|
|
284
|
+
const { typeMode, ...restOptions } = options;
|
|
285
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E" }, cookie);
|
|
286
|
+
return data2;
|
|
287
|
+
},
|
|
288
|
+
/**
|
|
289
|
+
* 获取 Emoji 数据
|
|
290
|
+
* @param options 可选的请求参数 (主要用于 typeMode)
|
|
291
|
+
* @param cookie 有效的用户 Cookie
|
|
292
|
+
* @returns 接口返回的原始数据
|
|
293
|
+
*/
|
|
294
|
+
async getEmojiList(options, cookie) {
|
|
295
|
+
const { typeMode, ...restOptions } = options;
|
|
296
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "Emoji\u6570\u636E" }, cookie);
|
|
297
|
+
return data2;
|
|
298
|
+
},
|
|
299
|
+
/**
|
|
300
|
+
* 获取番剧基本信息数据
|
|
301
|
+
* @param options 请求参数,包含可选的 season_id, ep_id 和 typeMode
|
|
302
|
+
* @param cookie 有效的用户 Cookie
|
|
303
|
+
* @returns 接口返回的原始数据
|
|
304
|
+
*/
|
|
305
|
+
async getBangumiInfo(options, cookie) {
|
|
306
|
+
const { typeMode, ...restOptions } = options;
|
|
307
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E" }, cookie);
|
|
308
|
+
return data2;
|
|
309
|
+
},
|
|
310
|
+
/**
|
|
311
|
+
* 获取番剧下载信息数据
|
|
312
|
+
* @param options 请求参数,包含 cid, ep_id 和可选的 typeMode
|
|
313
|
+
* @param cookie 有效的用户 Cookie
|
|
314
|
+
* @returns 接口返回的原始数据
|
|
315
|
+
*/
|
|
316
|
+
async getBangumiStream(options, cookie) {
|
|
317
|
+
const { typeMode, ...restOptions } = options;
|
|
318
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E" }, cookie);
|
|
319
|
+
return data2;
|
|
320
|
+
},
|
|
321
|
+
/**
|
|
322
|
+
* 获取动态详情数据
|
|
323
|
+
* @param options 请求参数,包含 dynamic_id 和可选的 typeMode
|
|
324
|
+
* @param cookie 有效的用户 Cookie
|
|
325
|
+
* @returns 接口返回的原始数据
|
|
326
|
+
*/
|
|
327
|
+
async getDynamicInfo(options, cookie) {
|
|
328
|
+
const { typeMode, ...restOptions } = options;
|
|
329
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "\u52A8\u6001\u8BE6\u60C5\u6570\u636E" }, cookie);
|
|
330
|
+
return data2;
|
|
331
|
+
},
|
|
332
|
+
/**
|
|
333
|
+
* 获取动态卡片数据
|
|
334
|
+
* @param options 请求参数,包含 dynamic_id 和可选的 typeMode
|
|
335
|
+
* @param cookie 有效的用户 Cookie
|
|
336
|
+
* @returns 接口返回的原始数据
|
|
337
|
+
*/
|
|
338
|
+
async getDynamicCard(options, cookie) {
|
|
339
|
+
const { typeMode, ...restOptions } = options;
|
|
340
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "\u52A8\u6001\u5361\u7247\u6570\u636E" }, cookie);
|
|
341
|
+
return data2;
|
|
342
|
+
},
|
|
343
|
+
/**
|
|
344
|
+
* 获取直播间信息
|
|
345
|
+
* @param options 请求参数,包含 room_id 和可选的 typeMode
|
|
346
|
+
* @param cookie 有效的用户 Cookie
|
|
347
|
+
* @returns 接口返回的原始数据
|
|
348
|
+
*/
|
|
349
|
+
async getLiveRoomDetail(options, cookie) {
|
|
350
|
+
const { typeMode, ...restOptions } = options;
|
|
351
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "\u76F4\u64AD\u95F4\u4FE1\u606F" }, cookie);
|
|
352
|
+
return data2;
|
|
353
|
+
},
|
|
354
|
+
/**
|
|
355
|
+
* 获取直播间初始化信息
|
|
356
|
+
* @param options 请求参数,包含 room_id 和可选的 typeMode
|
|
357
|
+
* @param cookie 有效的用户 Cookie
|
|
358
|
+
* @returns 接口返回的原始数据
|
|
359
|
+
*/
|
|
360
|
+
async getLiveRoomInitInfo(options, cookie) {
|
|
361
|
+
const { typeMode, ...restOptions } = options;
|
|
362
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F" }, cookie);
|
|
363
|
+
return data2;
|
|
364
|
+
},
|
|
365
|
+
/**
|
|
366
|
+
* 获取登录基本信息
|
|
367
|
+
* @param options 可选的请求参数 (主要用于 typeMode)
|
|
368
|
+
* @param cookie 有效的用户 Cookie
|
|
369
|
+
* @returns 接口返回的原始数据
|
|
370
|
+
*/
|
|
371
|
+
async getLoginBasicInfo(options, cookie) {
|
|
372
|
+
const { typeMode, ...restOptions } = options;
|
|
373
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "\u767B\u5F55\u57FA\u672C\u4FE1\u606F" }, cookie);
|
|
374
|
+
return data2;
|
|
375
|
+
},
|
|
376
|
+
/**
|
|
377
|
+
* 申请登录二维码
|
|
378
|
+
* @param options 可选的请求参数 (主要用于 typeMode)
|
|
379
|
+
* @param cookie 有效的用户 Cookie
|
|
380
|
+
* @returns 接口返回的原始数据
|
|
381
|
+
*/
|
|
382
|
+
async getLoginQrcode(options, cookie) {
|
|
383
|
+
const { typeMode, ...restOptions } = options;
|
|
384
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "\u7533\u8BF7\u4E8C\u7EF4\u7801" }, cookie);
|
|
385
|
+
return data2;
|
|
386
|
+
},
|
|
387
|
+
/**
|
|
388
|
+
* 检查二维码状态
|
|
389
|
+
* @param options 请求参数,包含 qrcode_key 和可选的 typeMode
|
|
390
|
+
* @param cookie 有效的用户 Cookie
|
|
391
|
+
* @returns 接口返回的原始数据
|
|
392
|
+
*/
|
|
393
|
+
async checkQrcodeStatus(options, cookie) {
|
|
394
|
+
const { typeMode, ...restOptions } = options;
|
|
395
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "\u4E8C\u7EF4\u7801\u72B6\u6001" }, cookie);
|
|
396
|
+
return data2;
|
|
397
|
+
},
|
|
398
|
+
/**
|
|
399
|
+
* 获取 UP 主总播放量
|
|
400
|
+
* @param options 请求参数,包含 host_mid 和可选的 typeMode
|
|
401
|
+
* @param cookie 有效的用户 Cookie
|
|
402
|
+
* @returns 接口返回的原始数据
|
|
403
|
+
*/
|
|
404
|
+
async getUserTotalPlayCount(options, cookie) {
|
|
405
|
+
const { typeMode, ...restOptions } = options;
|
|
406
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF" }, cookie);
|
|
407
|
+
return data2;
|
|
408
|
+
},
|
|
409
|
+
/**
|
|
410
|
+
* 将 AV 号转换为 BV 号
|
|
411
|
+
* @param options 请求参数,包含 avid
|
|
412
|
+
* @param cookie 有效的用户 Cookie (此接口通常不需要)
|
|
413
|
+
* @returns 接口返回的原始数据
|
|
414
|
+
*/
|
|
415
|
+
async convertAvToBv(options, cookie) {
|
|
416
|
+
const { typeMode, ...restOptions } = options;
|
|
417
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "AV\u8F6CBV" }, cookie);
|
|
418
|
+
return data2;
|
|
419
|
+
},
|
|
420
|
+
/**
|
|
421
|
+
* 将 BV 号转换为 AV 号
|
|
422
|
+
* @param options 请求参数,包含 bvid
|
|
423
|
+
* @param cookie 有效的用户 Cookie (此接口通常不需要)
|
|
424
|
+
* @returns 接口返回的原始数据
|
|
425
|
+
*/
|
|
426
|
+
async convertBvToAv(options, cookie) {
|
|
427
|
+
const { typeMode, ...restOptions } = options;
|
|
428
|
+
const data2 = await BilibiliData({ ...restOptions, methodType: "BV\u8F6CAV" }, cookie);
|
|
429
|
+
return data2;
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
var registerBilibiliRoutes = (cookie) => {
|
|
433
|
+
const router = express__default.default.Router();
|
|
434
|
+
router.get("/new_login_qrcode", async (req, res) => {
|
|
435
|
+
const data2 = await BilibiliData({
|
|
436
|
+
methodType: "\u7533\u8BF7\u4E8C\u7EF4\u7801"
|
|
437
|
+
}, req.headers.cookie || cookie);
|
|
438
|
+
res.json(data2);
|
|
439
|
+
});
|
|
440
|
+
router.get("/check_qrcode", async (req, res) => {
|
|
441
|
+
const data2 = await BilibiliData({
|
|
442
|
+
methodType: "\u4E8C\u7EF4\u7801\u72B6\u6001",
|
|
443
|
+
qrcode_key: req.query.qrcode_key
|
|
444
|
+
}, req.headers.cookie || cookie);
|
|
445
|
+
res.json(data2);
|
|
446
|
+
});
|
|
447
|
+
router.get("/login_basic_info", async (req, res) => {
|
|
448
|
+
const data2 = await BilibiliData({
|
|
449
|
+
methodType: "\u767B\u5F55\u57FA\u672C\u4FE1\u606F"
|
|
450
|
+
}, req.headers.cookie || cookie);
|
|
451
|
+
res.json(data2);
|
|
452
|
+
});
|
|
453
|
+
router.get("/fetch_one_video", async (req, res) => {
|
|
454
|
+
const data2 = await BilibiliData({
|
|
455
|
+
methodType: "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E",
|
|
456
|
+
bvid: req.query.bvid
|
|
457
|
+
}, req.headers.cookie || cookie);
|
|
458
|
+
res.json(data2);
|
|
459
|
+
});
|
|
460
|
+
router.get("/fetch_video_playurl", async (req, res) => {
|
|
461
|
+
const data2 = await BilibiliData({
|
|
462
|
+
methodType: "\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E",
|
|
463
|
+
avid: parseInt(req.query.avid),
|
|
464
|
+
cid: parseInt(req.query.cid)
|
|
465
|
+
}, req.headers.cookie || cookie);
|
|
466
|
+
res.json(data2);
|
|
467
|
+
});
|
|
468
|
+
router.get("/fetch_work_comments", async (req, res) => {
|
|
469
|
+
const data2 = await BilibiliData({
|
|
470
|
+
methodType: "\u8BC4\u8BBA\u6570\u636E",
|
|
471
|
+
oid: Number(req.query.oid),
|
|
472
|
+
number: Number(req.query.number),
|
|
473
|
+
type: Number(req.query.type ?? 1)
|
|
474
|
+
}, req.headers.cookie || cookie);
|
|
475
|
+
res.json(data2);
|
|
476
|
+
});
|
|
477
|
+
router.get("/fetch_work_comments", async (req, res) => {
|
|
478
|
+
const data2 = await BilibiliData({
|
|
479
|
+
methodType: "Emoji\u6570\u636E"
|
|
480
|
+
}, req.headers.cookie || cookie);
|
|
481
|
+
res.json(data2);
|
|
482
|
+
});
|
|
483
|
+
router.get("/fetch_bangumi_video_info", async (req, res) => {
|
|
484
|
+
const data2 = await BilibiliData({
|
|
485
|
+
methodType: "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E",
|
|
486
|
+
ep_id: req.query.ep_id
|
|
487
|
+
}, req.headers.cookie || cookie);
|
|
488
|
+
res.json(data2);
|
|
489
|
+
});
|
|
490
|
+
router.get("/fetch_bangumi_video_playurl", async (req, res) => {
|
|
491
|
+
const data2 = await BilibiliData({
|
|
492
|
+
methodType: "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E",
|
|
493
|
+
cid: parseInt(req.query.cid),
|
|
494
|
+
ep_id: req.query.ep_id
|
|
495
|
+
}, req.headers.cookie || cookie);
|
|
496
|
+
res.json(data2);
|
|
497
|
+
});
|
|
498
|
+
router.get("/fetch_user_dynamic", async (req, res) => {
|
|
499
|
+
const data2 = await BilibiliData({
|
|
500
|
+
methodType: "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E",
|
|
501
|
+
host_mid: parseInt(req.query.host_mid)
|
|
502
|
+
}, req.headers.cookie || cookie);
|
|
503
|
+
res.json(data2);
|
|
504
|
+
});
|
|
505
|
+
router.get("/fetch_dynamic_info", async (req, res) => {
|
|
506
|
+
const data2 = await BilibiliData({
|
|
507
|
+
methodType: "\u52A8\u6001\u8BE6\u60C5\u6570\u636E",
|
|
508
|
+
dynamic_id: req.query.dynamic_id
|
|
509
|
+
}, req.headers.cookie || cookie);
|
|
510
|
+
res.json(data2);
|
|
511
|
+
});
|
|
512
|
+
router.get("/fetch_dynamic_card", async (req, res) => {
|
|
513
|
+
const data2 = await BilibiliData({
|
|
514
|
+
methodType: "\u52A8\u6001\u5361\u7247\u6570\u636E",
|
|
515
|
+
dynamic_id: req.query.dynamic_id
|
|
516
|
+
}, req.headers.cookie || cookie);
|
|
517
|
+
res.json(data2);
|
|
518
|
+
});
|
|
519
|
+
router.get("/fetch_user_profile", async (req, res) => {
|
|
520
|
+
const data2 = await BilibiliData({
|
|
521
|
+
methodType: "\u7528\u6237\u4E3B\u9875\u6570\u636E",
|
|
522
|
+
host_mid: parseInt(req.query.host_mid)
|
|
523
|
+
}, req.headers.cookie || cookie);
|
|
524
|
+
res.json(data2);
|
|
525
|
+
});
|
|
526
|
+
router.get("/fetch_live_room_detail", async (req, res) => {
|
|
527
|
+
const data2 = await BilibiliData({
|
|
528
|
+
methodType: "\u76F4\u64AD\u95F4\u4FE1\u606F",
|
|
529
|
+
room_id: req.query.room_id
|
|
530
|
+
}, req.headers.cookie || cookie);
|
|
531
|
+
res.json(data2);
|
|
532
|
+
});
|
|
533
|
+
router.get("/fetch_liveroom_def", async (req, res) => {
|
|
534
|
+
const data2 = await BilibiliData({
|
|
535
|
+
methodType: "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F",
|
|
536
|
+
room_id: req.query.room_id
|
|
537
|
+
}, req.headers.cookie || cookie);
|
|
538
|
+
res.json(data2);
|
|
539
|
+
});
|
|
540
|
+
router.get("/bv_to_av", async (req, res) => {
|
|
541
|
+
const data2 = await BilibiliData({
|
|
542
|
+
methodType: "BV\u8F6CAV",
|
|
543
|
+
bvid: req.query.bvid
|
|
544
|
+
}, req.headers.cookie || cookie);
|
|
545
|
+
res.json(data2);
|
|
546
|
+
});
|
|
547
|
+
router.get("/av_to_bv", async (req, res) => {
|
|
548
|
+
const data2 = await BilibiliData({
|
|
549
|
+
methodType: "AV\u8F6CBV",
|
|
550
|
+
avid: parseInt(req.query.avid)
|
|
551
|
+
}, req.headers.cookie || cookie);
|
|
552
|
+
res.json(data2);
|
|
553
|
+
});
|
|
554
|
+
router.get("/fetch_user_full_view", async (req, res) => {
|
|
555
|
+
const data2 = await BilibiliData({
|
|
556
|
+
methodType: "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF",
|
|
557
|
+
host_mid: parseInt(req.query.host_mid)
|
|
558
|
+
}, req.headers.cookie || cookie);
|
|
559
|
+
res.json(data2);
|
|
560
|
+
});
|
|
561
|
+
return router;
|
|
562
|
+
};
|
|
563
|
+
|
|
564
|
+
// src/platform/bilibili/index.ts
|
|
565
|
+
var bilibiliUtils = {
|
|
566
|
+
sign: {
|
|
567
|
+
wbi_sign,
|
|
568
|
+
av2bv,
|
|
569
|
+
bv2av
|
|
570
|
+
},
|
|
571
|
+
bilibiliApiUrls,
|
|
572
|
+
getBilibiliData,
|
|
573
|
+
api: bilibili
|
|
574
|
+
};
|
|
81
575
|
|
|
82
576
|
// src/platform/bilibili/getdata.ts
|
|
83
577
|
var defheaders = {
|
|
@@ -187,513 +681,235 @@ var BilibiliData = async (data2, cookie) => {
|
|
|
187
681
|
...tmpresp.data,
|
|
188
682
|
// 去重
|
|
189
683
|
replies: Array.from(new Map(fetchedComments.map((item) => [item.rpid, item])).values()).slice(0, Number(data2.number))
|
|
190
|
-
}
|
|
191
|
-
};
|
|
192
|
-
return finalResponse;
|
|
193
|
-
}
|
|
194
|
-
case "Emoji\u6570\u636E": {
|
|
195
|
-
return await GlobalGetData({
|
|
196
|
-
url: bilibiliAPI.\u8868\u60C5\u5217\u8868(),
|
|
197
|
-
...data2
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
case "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E": {
|
|
201
|
-
let id = data2.ep_id ? data2.ep_id : data2.season_id;
|
|
202
|
-
if (!id) {
|
|
203
|
-
BilibiliValidateData(data2, ["ep_id"]);
|
|
204
|
-
return false;
|
|
205
|
-
}
|
|
206
|
-
const idType = id ? id.startsWith("ep") ? "ep_id" : "season_id" : "ep_id";
|
|
207
|
-
const newId = idType === "ep_id" ? id.replace("ep", "") : id.replace("ss", "");
|
|
208
|
-
const INFO = await GlobalGetData({
|
|
209
|
-
url: bilibiliAPI.\u756A\u5267\u660E\u7EC6({ [idType]: newId }),
|
|
210
|
-
headers: headers2,
|
|
211
|
-
...data2
|
|
212
|
-
});
|
|
213
|
-
return INFO;
|
|
214
|
-
}
|
|
215
|
-
case "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E": {
|
|
216
|
-
BilibiliValidateData(data2, ["cid", "ep_id"]);
|
|
217
|
-
const BASEURL = bilibiliAPI.\u756A\u5267\u89C6\u9891\u6D41\u4FE1\u606F({ cid: data2.cid, ep_id: data2.ep_id.replace("ep", "") });
|
|
218
|
-
const SIGN = await qtparam(BASEURL, headers2.cookie);
|
|
219
|
-
const DATA = await GlobalGetData({
|
|
220
|
-
url: bilibiliAPI.\u756A\u5267\u89C6\u9891\u6D41\u4FE1\u606F({ cid: data2.cid, ep_id: data2.ep_id.replace("ep", "") }) + SIGN.QUERY,
|
|
221
|
-
headers: headers2,
|
|
222
|
-
...data2
|
|
223
|
-
});
|
|
224
|
-
return DATA;
|
|
225
|
-
}
|
|
226
|
-
case "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E": {
|
|
227
|
-
BilibiliValidateData(data2, ["host_mid"]);
|
|
228
|
-
delete headers2.referer;
|
|
229
|
-
const { host_mid } = data2;
|
|
230
|
-
const result = await GlobalGetData({
|
|
231
|
-
url: bilibiliAPI.\u7528\u6237\u7A7A\u95F4\u52A8\u6001({ host_mid }),
|
|
232
|
-
headers: headers2,
|
|
233
|
-
...data2
|
|
234
|
-
});
|
|
235
|
-
return result;
|
|
236
|
-
}
|
|
237
|
-
case "\u52A8\u6001\u8BE6\u60C5\u6570\u636E": {
|
|
238
|
-
BilibiliValidateData(data2, ["dynamic_id"]);
|
|
239
|
-
delete headers2.referer;
|
|
240
|
-
const dynamicINFO = await GlobalGetData({
|
|
241
|
-
url: bilibiliAPI.\u52A8\u6001\u8BE6\u60C5({ dynamic_id: data2.dynamic_id }),
|
|
242
|
-
headers: headers2,
|
|
243
|
-
...data2
|
|
244
|
-
});
|
|
245
|
-
return dynamicINFO;
|
|
246
|
-
}
|
|
247
|
-
case "\u52A8\u6001\u5361\u7247\u6570\u636E": {
|
|
248
|
-
BilibiliValidateData(data2, ["dynamic_id"]);
|
|
249
|
-
delete headers2.referer;
|
|
250
|
-
const { dynamic_id } = data2;
|
|
251
|
-
const dynamicINFO_CARD = await GlobalGetData({
|
|
252
|
-
url: bilibiliAPI.\u52A8\u6001\u5361\u7247\u4FE1\u606F({ dynamic_id }),
|
|
253
|
-
headers: headers2,
|
|
254
|
-
...data2
|
|
255
|
-
});
|
|
256
|
-
return dynamicINFO_CARD;
|
|
257
|
-
}
|
|
258
|
-
case "\u7528\u6237\u4E3B\u9875\u6570\u636E": {
|
|
259
|
-
BilibiliValidateData(data2, ["host_mid"]);
|
|
260
|
-
const { host_mid } = data2;
|
|
261
|
-
const result = await GlobalGetData({
|
|
262
|
-
url: bilibiliAPI.\u7528\u6237\u540D\u7247\u4FE1\u606F({ host_mid }),
|
|
263
|
-
headers: headers2,
|
|
264
|
-
...data2
|
|
265
|
-
});
|
|
266
|
-
return result;
|
|
267
|
-
}
|
|
268
|
-
case "\u76F4\u64AD\u95F4\u4FE1\u606F": {
|
|
269
|
-
BilibiliValidateData(data2, ["room_id"]);
|
|
270
|
-
const result = await GlobalGetData({
|
|
271
|
-
url: bilibiliAPI.\u76F4\u64AD\u95F4\u4FE1\u606F({ room_id: data2.room_id }),
|
|
272
|
-
headers: headers2,
|
|
273
|
-
...data2
|
|
274
|
-
});
|
|
275
|
-
return result;
|
|
684
|
+
}
|
|
685
|
+
};
|
|
686
|
+
return finalResponse;
|
|
276
687
|
}
|
|
277
|
-
case "\
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
url: bilibiliAPI.\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F({ room_id: data2.room_id }),
|
|
281
|
-
headers: headers2,
|
|
688
|
+
case "Emoji\u6570\u636E": {
|
|
689
|
+
return await GlobalGetData({
|
|
690
|
+
url: bilibiliAPI.\u8868\u60C5\u5217\u8868(),
|
|
282
691
|
...data2
|
|
283
692
|
});
|
|
284
|
-
return result;
|
|
285
693
|
}
|
|
286
|
-
case "\
|
|
287
|
-
|
|
288
|
-
|
|
694
|
+
case "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E": {
|
|
695
|
+
let id = data2.ep_id ? data2.ep_id : data2.season_id;
|
|
696
|
+
if (!id) {
|
|
697
|
+
BilibiliValidateData(data2, ["ep_id"]);
|
|
698
|
+
return false;
|
|
699
|
+
}
|
|
700
|
+
const idType = id ? id.startsWith("ep") ? "ep_id" : "season_id" : "ep_id";
|
|
701
|
+
const newId = idType === "ep_id" ? id.replace("ep", "") : id.replace("ss", "");
|
|
702
|
+
const INFO = await GlobalGetData({
|
|
703
|
+
url: bilibiliAPI.\u756A\u5267\u660E\u7EC6({ [idType]: newId }),
|
|
289
704
|
headers: headers2,
|
|
290
705
|
...data2
|
|
291
706
|
});
|
|
292
|
-
return
|
|
707
|
+
return INFO;
|
|
293
708
|
}
|
|
294
|
-
case "\
|
|
295
|
-
BilibiliValidateData(data2, ["
|
|
296
|
-
const
|
|
297
|
-
|
|
709
|
+
case "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E": {
|
|
710
|
+
BilibiliValidateData(data2, ["cid", "ep_id"]);
|
|
711
|
+
const BASEURL = bilibiliAPI.\u756A\u5267\u89C6\u9891\u6D41\u4FE1\u606F({ cid: data2.cid, ep_id: data2.ep_id.replace("ep", "") });
|
|
712
|
+
const SIGN = await qtparam(BASEURL, headers2.cookie);
|
|
713
|
+
const DATA = await GlobalGetData({
|
|
714
|
+
url: bilibiliAPI.\u756A\u5267\u89C6\u9891\u6D41\u4FE1\u606F({ cid: data2.cid, ep_id: data2.ep_id.replace("ep", "") }) + SIGN.QUERY,
|
|
298
715
|
headers: headers2,
|
|
299
716
|
...data2
|
|
300
|
-
})
|
|
301
|
-
return
|
|
717
|
+
});
|
|
718
|
+
return DATA;
|
|
302
719
|
}
|
|
303
|
-
case "\
|
|
720
|
+
case "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E": {
|
|
721
|
+
BilibiliValidateData(data2, ["host_mid"]);
|
|
722
|
+
delete headers2.referer;
|
|
723
|
+
const { host_mid } = data2;
|
|
304
724
|
const result = await GlobalGetData({
|
|
305
|
-
url: bilibiliAPI.\
|
|
725
|
+
url: bilibiliAPI.\u7528\u6237\u7A7A\u95F4\u52A8\u6001({ host_mid }),
|
|
306
726
|
headers: headers2,
|
|
307
727
|
...data2
|
|
308
728
|
});
|
|
309
729
|
return result;
|
|
310
730
|
}
|
|
311
|
-
case "\
|
|
312
|
-
BilibiliValidateData(data2, ["
|
|
313
|
-
|
|
314
|
-
|
|
731
|
+
case "\u52A8\u6001\u8BE6\u60C5\u6570\u636E": {
|
|
732
|
+
BilibiliValidateData(data2, ["dynamic_id"]);
|
|
733
|
+
delete headers2.referer;
|
|
734
|
+
const dynamicINFO = await GlobalGetData({
|
|
735
|
+
url: bilibiliAPI.\u52A8\u6001\u8BE6\u60C5({ dynamic_id: data2.dynamic_id }),
|
|
315
736
|
headers: headers2,
|
|
316
737
|
...data2
|
|
317
738
|
});
|
|
318
|
-
return
|
|
319
|
-
}
|
|
320
|
-
case "AV\u8F6CBV": {
|
|
321
|
-
BilibiliValidateData(data2, ["avid"]);
|
|
322
|
-
const result = av2bv(Number(data2.avid.toString().replace(/^av/i, "")));
|
|
323
|
-
return {
|
|
324
|
-
code: 0,
|
|
325
|
-
message: "success",
|
|
326
|
-
data: {
|
|
327
|
-
bvid: result
|
|
328
|
-
}
|
|
329
|
-
};
|
|
330
|
-
}
|
|
331
|
-
case "BV\u8F6CAV": {
|
|
332
|
-
BilibiliValidateData(data2, ["bvid"]);
|
|
333
|
-
const result = "av" + bv2av(data2.bvid);
|
|
334
|
-
return {
|
|
335
|
-
code: 0,
|
|
336
|
-
message: "success",
|
|
337
|
-
data: {
|
|
338
|
-
aid: result
|
|
339
|
-
}
|
|
340
|
-
};
|
|
739
|
+
return dynamicINFO;
|
|
341
740
|
}
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
};
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
\u8BF7\u6C42\u63A5\u53E3\u7C7B\u578B\uFF1A${options.methodType}
|
|
353
|
-
\u8BF7\u6C42URL\uFF1A${options.url}
|
|
354
|
-
\u9519\u8BEF\u4EE3\u7801\uFF1A${result.code}\uFF0C
|
|
355
|
-
\u542B\u4E49\uFF1A${result.message}`);
|
|
356
|
-
return result;
|
|
357
|
-
} else {
|
|
358
|
-
const errorMessage = errorMap[result.code] || result.message || "\u672A\u77E5\u9519\u8BEF";
|
|
359
|
-
logger.warn(`\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01
|
|
360
|
-
\u8BF7\u6C42\u63A5\u53E3\u7C7B\u578B\uFF1A${options.methodType}
|
|
361
|
-
\u8BF7\u6C42URL\uFF1A${options.url}
|
|
362
|
-
\u9519\u8BEF\u4EE3\u7801\uFF1A${result.code}\uFF0C
|
|
363
|
-
\u542B\u4E49\uFF1A${errorMessage}`);
|
|
364
|
-
return result;
|
|
365
|
-
}
|
|
366
|
-
};
|
|
367
|
-
var errorMap = {
|
|
368
|
-
"-1": "\u5E94\u7528\u7A0B\u5E8F\u4E0D\u5B58\u5728\u6216\u5DF2\u88AB\u5C01\u7981",
|
|
369
|
-
"-2": "Access Key \u9519\u8BEF",
|
|
370
|
-
"-3": "API \u6821\u9A8C\u5BC6\u5319\u9519\u8BEF",
|
|
371
|
-
"-4": "\u8C03\u7528\u65B9\u5BF9\u8BE5 Method \u6CA1\u6709\u6743\u9650",
|
|
372
|
-
"-101": "\u8D26\u53F7\u672A\u767B\u5F55",
|
|
373
|
-
"-102": "\u8D26\u53F7\u88AB\u5C01\u505C",
|
|
374
|
-
"-103": "\u79EF\u5206\u4E0D\u8DB3",
|
|
375
|
-
"-104": "\u786C\u5E01\u4E0D\u8DB3",
|
|
376
|
-
"-105": "\u9A8C\u8BC1\u7801\u9519\u8BEF",
|
|
377
|
-
"-106": "\u8D26\u53F7\u975E\u6B63\u5F0F\u4F1A\u5458\u6216\u5728\u9002\u5E94\u671F",
|
|
378
|
-
"-107": "\u5E94\u7528\u4E0D\u5B58\u5728\u6216\u8005\u88AB\u5C01\u7981",
|
|
379
|
-
"-108": "\u672A\u7ED1\u5B9A\u624B\u673A",
|
|
380
|
-
"-110": "\u672A\u7ED1\u5B9A\u624B\u673A",
|
|
381
|
-
"-111": "csrf \u6821\u9A8C\u5931\u8D25",
|
|
382
|
-
"-112": "\u7CFB\u7EDF\u5347\u7EA7\u4E2D",
|
|
383
|
-
"-113": "\u8D26\u53F7\u5C1A\u672A\u5B9E\u540D\u8BA4\u8BC1",
|
|
384
|
-
"-114": "\u8BF7\u5148\u7ED1\u5B9A\u624B\u673A",
|
|
385
|
-
"-115": "\u8BF7\u5148\u5B8C\u6210\u5B9E\u540D\u8BA4\u8BC1",
|
|
386
|
-
"-304": "\u6728\u6709\u6539\u52A8",
|
|
387
|
-
"-307": "\u649E\u8F66\u8DF3\u8F6C",
|
|
388
|
-
"-352": "\u98CE\u63A7\u6821\u9A8C\u5931\u8D25 (UA \u6216 wbi \u53C2\u6570\u4E0D\u5408\u6CD5)",
|
|
389
|
-
"-400": "\u8BF7\u6C42\u9519\u8BEF",
|
|
390
|
-
"-401": "\u672A\u8BA4\u8BC1 (\u6216\u975E\u6CD5\u8BF7\u6C42)",
|
|
391
|
-
"-403": "\u8BBF\u95EE\u6743\u9650\u4E0D\u8DB3",
|
|
392
|
-
"-404": "\u5565\u90FD\u6728\u6709",
|
|
393
|
-
"-405": "\u4E0D\u652F\u6301\u8BE5\u65B9\u6CD5",
|
|
394
|
-
"-409": "\u51B2\u7A81",
|
|
395
|
-
"-412": "\u8BF7\u6C42\u88AB\u62E6\u622A (\u5BA2\u6237\u7AEF ip \u88AB\u670D\u52A1\u7AEF\u98CE\u63A7)",
|
|
396
|
-
"-500": "\u670D\u52A1\u5668\u9519\u8BEF",
|
|
397
|
-
"-503": "\u8FC7\u8F7D\u4FDD\u62A4,\u670D\u52A1\u6682\u4E0D\u53EF\u7528",
|
|
398
|
-
"-504": "\u670D\u52A1\u8C03\u7528\u8D85\u65F6",
|
|
399
|
-
"-509": "\u8D85\u51FA\u9650\u5236",
|
|
400
|
-
"-616": "\u4E0A\u4F20\u6587\u4EF6\u4E0D\u5B58\u5728",
|
|
401
|
-
"-617": "\u4E0A\u4F20\u6587\u4EF6\u592A\u5927",
|
|
402
|
-
"-625": "\u767B\u5F55\u5931\u8D25\u6B21\u6570\u592A\u591A",
|
|
403
|
-
"-626": "\u7528\u6237\u4E0D\u5B58\u5728",
|
|
404
|
-
"-628": "\u5BC6\u7801\u592A\u5F31",
|
|
405
|
-
"-629": "\u7528\u6237\u540D\u6216\u5BC6\u7801\u9519\u8BEF",
|
|
406
|
-
"-632": "\u64CD\u4F5C\u5BF9\u8C61\u6570\u91CF\u9650\u5236",
|
|
407
|
-
"-643": "\u88AB\u9501\u5B9A",
|
|
408
|
-
"-650": "\u7528\u6237\u7B49\u7EA7\u592A\u4F4E",
|
|
409
|
-
"-652": "\u91CD\u590D\u7684\u7528\u6237",
|
|
410
|
-
"-658": "Token \u8FC7\u671F",
|
|
411
|
-
"-662": "\u5BC6\u7801\u65F6\u95F4\u6233\u8FC7\u671F",
|
|
412
|
-
"-688": "\u5730\u7406\u533A\u57DF\u9650\u5236",
|
|
413
|
-
"-689": "\u7248\u6743\u9650\u5236",
|
|
414
|
-
"-701": "\u6263\u8282\u64CD\u5931\u8D25",
|
|
415
|
-
"-799": "\u8BF7\u6C42\u8FC7\u4E8E\u9891\u7E41\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5",
|
|
416
|
-
"-8888": "\u5BF9\u4E0D\u8D77\uFF0C\u670D\u52A1\u5668\u5F00\u5C0F\u5DEE\u4E86~ (\u0CA5\uFE4F\u0CA5)"
|
|
417
|
-
};
|
|
418
|
-
|
|
419
|
-
// src/platform/bilibili/qtparam.ts
|
|
420
|
-
async function qtparam(BASEURL, cookie) {
|
|
421
|
-
if (cookie === "") return { QUERY: "&platform=html5", STATUS: "!isLogin" };
|
|
422
|
-
const logininfo = await new Networks({ url: bilibiliAPI.\u767B\u5F55\u57FA\u672C\u4FE1\u606F(), headers: { Cookie: cookie } }).getData();
|
|
423
|
-
const sign = await wbi_sign(BASEURL, cookie);
|
|
424
|
-
const qn = [6, 16, 32, 64, 74, 80, 112, 116, 120, 125, 126, 127];
|
|
425
|
-
let isvip;
|
|
426
|
-
logininfo.data.vipStatus === 1 ? isvip = true : isvip = false;
|
|
427
|
-
if (isvip) {
|
|
428
|
-
return { QUERY: `&fnval=16&fourk=1&${sign}`, STATUS: "isLogin", isvip };
|
|
429
|
-
} else return { QUERY: `&qn=${qn[3]}&fnval=16`, STATUS: "isLogin", isvip };
|
|
430
|
-
}
|
|
431
|
-
var mixinKeyEncTab = [
|
|
432
|
-
46,
|
|
433
|
-
47,
|
|
434
|
-
18,
|
|
435
|
-
2,
|
|
436
|
-
53,
|
|
437
|
-
8,
|
|
438
|
-
23,
|
|
439
|
-
32,
|
|
440
|
-
15,
|
|
441
|
-
50,
|
|
442
|
-
10,
|
|
443
|
-
31,
|
|
444
|
-
58,
|
|
445
|
-
3,
|
|
446
|
-
45,
|
|
447
|
-
35,
|
|
448
|
-
27,
|
|
449
|
-
43,
|
|
450
|
-
5,
|
|
451
|
-
49,
|
|
452
|
-
33,
|
|
453
|
-
9,
|
|
454
|
-
42,
|
|
455
|
-
19,
|
|
456
|
-
29,
|
|
457
|
-
28,
|
|
458
|
-
14,
|
|
459
|
-
39,
|
|
460
|
-
12,
|
|
461
|
-
38,
|
|
462
|
-
41,
|
|
463
|
-
13,
|
|
464
|
-
37,
|
|
465
|
-
48,
|
|
466
|
-
7,
|
|
467
|
-
16,
|
|
468
|
-
24,
|
|
469
|
-
55,
|
|
470
|
-
40,
|
|
471
|
-
61,
|
|
472
|
-
26,
|
|
473
|
-
17,
|
|
474
|
-
0,
|
|
475
|
-
1,
|
|
476
|
-
60,
|
|
477
|
-
51,
|
|
478
|
-
30,
|
|
479
|
-
4,
|
|
480
|
-
22,
|
|
481
|
-
25,
|
|
482
|
-
54,
|
|
483
|
-
21,
|
|
484
|
-
56,
|
|
485
|
-
59,
|
|
486
|
-
6,
|
|
487
|
-
63,
|
|
488
|
-
57,
|
|
489
|
-
62,
|
|
490
|
-
11,
|
|
491
|
-
36,
|
|
492
|
-
20,
|
|
493
|
-
34,
|
|
494
|
-
44,
|
|
495
|
-
52
|
|
496
|
-
];
|
|
497
|
-
var getMixinKey = (orig) => mixinKeyEncTab.map((n) => orig[n]).join("").slice(0, 32);
|
|
498
|
-
function encWbi(params, img_key, sub_key) {
|
|
499
|
-
const mixin_key = getMixinKey(img_key + sub_key);
|
|
500
|
-
const curr_time = Math.round(Date.now() / 1e3);
|
|
501
|
-
const chr_filter = /[!'()*]/g;
|
|
502
|
-
Object.assign(params, { wts: curr_time });
|
|
503
|
-
const query = Object.keys(params).sort().map((key) => {
|
|
504
|
-
const value = params[key].toString().replace(chr_filter, "");
|
|
505
|
-
return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
|
|
506
|
-
}).join("&");
|
|
507
|
-
const wbi_sign2 = crypto__default.default.createHash("md5").update(query + mixin_key).digest("hex");
|
|
508
|
-
return `&wts=${curr_time}&w_rid=${wbi_sign2}`;
|
|
509
|
-
}
|
|
510
|
-
async function getWbiKeys(cookie) {
|
|
511
|
-
const res = await axios__default.default("https://api.bilibili.com/x/web-interface/nav", {
|
|
512
|
-
headers: {
|
|
513
|
-
Cookie: cookie
|
|
741
|
+
case "\u52A8\u6001\u5361\u7247\u6570\u636E": {
|
|
742
|
+
BilibiliValidateData(data2, ["dynamic_id"]);
|
|
743
|
+
delete headers2.referer;
|
|
744
|
+
const { dynamic_id } = data2;
|
|
745
|
+
const dynamicINFO_CARD = await GlobalGetData({
|
|
746
|
+
url: bilibiliAPI.\u52A8\u6001\u5361\u7247\u4FE1\u606F({ dynamic_id }),
|
|
747
|
+
headers: headers2,
|
|
748
|
+
...data2
|
|
749
|
+
});
|
|
750
|
+
return dynamicINFO_CARD;
|
|
514
751
|
}
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
752
|
+
case "\u7528\u6237\u4E3B\u9875\u6570\u636E": {
|
|
753
|
+
BilibiliValidateData(data2, ["host_mid"]);
|
|
754
|
+
const { host_mid } = data2;
|
|
755
|
+
const result = await GlobalGetData({
|
|
756
|
+
url: bilibiliAPI.\u7528\u6237\u540D\u7247\u4FE1\u606F({ host_mid }),
|
|
757
|
+
headers: headers2,
|
|
758
|
+
...data2
|
|
759
|
+
});
|
|
760
|
+
return result;
|
|
521
761
|
}
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
762
|
+
case "\u76F4\u64AD\u95F4\u4FE1\u606F": {
|
|
763
|
+
BilibiliValidateData(data2, ["room_id"]);
|
|
764
|
+
const result = await GlobalGetData({
|
|
765
|
+
url: bilibiliAPI.\u76F4\u64AD\u95F4\u4FE1\u606F({ room_id: data2.room_id }),
|
|
766
|
+
headers: headers2,
|
|
767
|
+
...data2
|
|
768
|
+
});
|
|
769
|
+
return result;
|
|
770
|
+
}
|
|
771
|
+
case "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F": {
|
|
772
|
+
BilibiliValidateData(data2, ["room_id"]);
|
|
773
|
+
const result = await GlobalGetData({
|
|
774
|
+
url: bilibiliAPI.\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F({ room_id: data2.room_id }),
|
|
775
|
+
headers: headers2,
|
|
776
|
+
...data2
|
|
777
|
+
});
|
|
778
|
+
return result;
|
|
779
|
+
}
|
|
780
|
+
case "\u7533\u8BF7\u4E8C\u7EF4\u7801": {
|
|
781
|
+
const result = await GlobalGetData({
|
|
782
|
+
url: bilibiliAPI.\u7533\u8BF7\u4E8C\u7EF4\u7801(),
|
|
783
|
+
headers: headers2,
|
|
784
|
+
...data2
|
|
785
|
+
});
|
|
786
|
+
return result;
|
|
787
|
+
}
|
|
788
|
+
case "\u4E8C\u7EF4\u7801\u72B6\u6001": {
|
|
789
|
+
BilibiliValidateData(data2, ["qrcode_key"]);
|
|
790
|
+
const result = await new Networks({
|
|
791
|
+
url: bilibiliAPI.\u4E8C\u7EF4\u7801\u72B6\u6001({ qrcode_key: data2.qrcode_key }),
|
|
792
|
+
headers: headers2,
|
|
793
|
+
...data2
|
|
794
|
+
}).getHeadersAndData();
|
|
795
|
+
return result;
|
|
796
|
+
}
|
|
797
|
+
case "\u767B\u5F55\u57FA\u672C\u4FE1\u606F": {
|
|
798
|
+
const result = await GlobalGetData({
|
|
799
|
+
url: bilibiliAPI.\u767B\u5F55\u57FA\u672C\u4FE1\u606F(),
|
|
800
|
+
headers: headers2,
|
|
801
|
+
...data2
|
|
802
|
+
});
|
|
803
|
+
return result;
|
|
804
|
+
}
|
|
805
|
+
case "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF": {
|
|
806
|
+
BilibiliValidateData(data2, ["host_mid"]);
|
|
807
|
+
const result = await GlobalGetData({
|
|
808
|
+
url: bilibiliAPI.\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF({ host_mid: data2.host_mid }),
|
|
809
|
+
headers: headers2,
|
|
810
|
+
...data2
|
|
811
|
+
});
|
|
812
|
+
return result;
|
|
813
|
+
}
|
|
814
|
+
case "AV\u8F6CBV": {
|
|
815
|
+
BilibiliValidateData(data2, ["avid"]);
|
|
816
|
+
const result = av2bv(Number(data2.avid.toString().replace(/^av/i, "")));
|
|
817
|
+
return {
|
|
818
|
+
code: 0,
|
|
819
|
+
message: "success",
|
|
820
|
+
data: {
|
|
821
|
+
bvid: result
|
|
822
|
+
}
|
|
823
|
+
};
|
|
824
|
+
}
|
|
825
|
+
case "BV\u8F6CAV": {
|
|
826
|
+
BilibiliValidateData(data2, ["bvid"]);
|
|
827
|
+
const result = "av" + bv2av(data2.bvid);
|
|
828
|
+
return {
|
|
829
|
+
code: 0,
|
|
830
|
+
message: "success",
|
|
831
|
+
data: {
|
|
832
|
+
aid: result
|
|
833
|
+
}
|
|
834
|
+
};
|
|
835
|
+
}
|
|
836
|
+
default:
|
|
837
|
+
logger.warn(`\u672A\u77E5\u7684\u6296\u97F3\u6570\u636E\u63A5\u53E3\uFF1A\u300D${logger.red(data2.methodType)}\u300D`);
|
|
838
|
+
return null;
|
|
534
839
|
}
|
|
535
|
-
const query = encWbi(params, web_keys.img_key, web_keys.sub_key);
|
|
536
|
-
return query;
|
|
537
|
-
}
|
|
538
|
-
var registerBilibiliRoutes = (cookie) => {
|
|
539
|
-
const router = express__default.default.Router();
|
|
540
|
-
router.get("/new_login_qrcode", async (req, res) => {
|
|
541
|
-
const data2 = await BilibiliData({
|
|
542
|
-
methodType: "\u7533\u8BF7\u4E8C\u7EF4\u7801"
|
|
543
|
-
}, req.headers.cookie || cookie);
|
|
544
|
-
res.json(data2);
|
|
545
|
-
});
|
|
546
|
-
router.get("/check_qrcode", async (req, res) => {
|
|
547
|
-
const data2 = await BilibiliData({
|
|
548
|
-
methodType: "\u4E8C\u7EF4\u7801\u72B6\u6001",
|
|
549
|
-
qrcode_key: req.query.qrcode_key
|
|
550
|
-
}, req.headers.cookie || cookie);
|
|
551
|
-
res.json(data2);
|
|
552
|
-
});
|
|
553
|
-
router.get("/login_basic_info", async (req, res) => {
|
|
554
|
-
const data2 = await BilibiliData({
|
|
555
|
-
methodType: "\u767B\u5F55\u57FA\u672C\u4FE1\u606F"
|
|
556
|
-
}, req.headers.cookie || cookie);
|
|
557
|
-
res.json(data2);
|
|
558
|
-
});
|
|
559
|
-
router.get("/fetch_one_video", async (req, res) => {
|
|
560
|
-
const data2 = await BilibiliData({
|
|
561
|
-
methodType: "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E",
|
|
562
|
-
bvid: req.query.bvid
|
|
563
|
-
}, req.headers.cookie || cookie);
|
|
564
|
-
res.json(data2);
|
|
565
|
-
});
|
|
566
|
-
router.get("/fetch_video_playurl", async (req, res) => {
|
|
567
|
-
const data2 = await BilibiliData({
|
|
568
|
-
methodType: "\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E",
|
|
569
|
-
avid: parseInt(req.query.avid),
|
|
570
|
-
cid: parseInt(req.query.cid)
|
|
571
|
-
}, req.headers.cookie || cookie);
|
|
572
|
-
res.json(data2);
|
|
573
|
-
});
|
|
574
|
-
router.get("/fetch_work_comments", async (req, res) => {
|
|
575
|
-
const data2 = await BilibiliData({
|
|
576
|
-
methodType: "\u8BC4\u8BBA\u6570\u636E",
|
|
577
|
-
oid: Number(req.query.oid),
|
|
578
|
-
number: Number(req.query.number),
|
|
579
|
-
type: Number(req.query.type ?? 1)
|
|
580
|
-
}, req.headers.cookie || cookie);
|
|
581
|
-
res.json(data2);
|
|
582
|
-
});
|
|
583
|
-
router.get("/fetch_work_comments", async (req, res) => {
|
|
584
|
-
const data2 = await BilibiliData({
|
|
585
|
-
methodType: "Emoji\u6570\u636E"
|
|
586
|
-
}, req.headers.cookie || cookie);
|
|
587
|
-
res.json(data2);
|
|
588
|
-
});
|
|
589
|
-
router.get("/fetch_bangumi_video_info", async (req, res) => {
|
|
590
|
-
const data2 = await BilibiliData({
|
|
591
|
-
methodType: "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E",
|
|
592
|
-
ep_id: req.query.ep_id
|
|
593
|
-
}, req.headers.cookie || cookie);
|
|
594
|
-
res.json(data2);
|
|
595
|
-
});
|
|
596
|
-
router.get("/fetch_bangumi_video_playurl", async (req, res) => {
|
|
597
|
-
const data2 = await BilibiliData({
|
|
598
|
-
methodType: "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E",
|
|
599
|
-
cid: parseInt(req.query.cid),
|
|
600
|
-
ep_id: req.query.ep_id
|
|
601
|
-
}, req.headers.cookie || cookie);
|
|
602
|
-
res.json(data2);
|
|
603
|
-
});
|
|
604
|
-
router.get("/fetch_user_dynamic", async (req, res) => {
|
|
605
|
-
const data2 = await BilibiliData({
|
|
606
|
-
methodType: "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E",
|
|
607
|
-
host_mid: parseInt(req.query.host_mid)
|
|
608
|
-
}, req.headers.cookie || cookie);
|
|
609
|
-
res.json(data2);
|
|
610
|
-
});
|
|
611
|
-
router.get("/fetch_dynamic_info", async (req, res) => {
|
|
612
|
-
const data2 = await BilibiliData({
|
|
613
|
-
methodType: "\u52A8\u6001\u8BE6\u60C5\u6570\u636E",
|
|
614
|
-
dynamic_id: req.query.dynamic_id
|
|
615
|
-
}, req.headers.cookie || cookie);
|
|
616
|
-
res.json(data2);
|
|
617
|
-
});
|
|
618
|
-
router.get("/fetch_dynamic_card", async (req, res) => {
|
|
619
|
-
const data2 = await BilibiliData({
|
|
620
|
-
methodType: "\u52A8\u6001\u5361\u7247\u6570\u636E",
|
|
621
|
-
dynamic_id: req.query.dynamic_id
|
|
622
|
-
}, req.headers.cookie || cookie);
|
|
623
|
-
res.json(data2);
|
|
624
|
-
});
|
|
625
|
-
router.get("/fetch_user_profile", async (req, res) => {
|
|
626
|
-
const data2 = await BilibiliData({
|
|
627
|
-
methodType: "\u7528\u6237\u4E3B\u9875\u6570\u636E",
|
|
628
|
-
host_mid: parseInt(req.query.host_mid)
|
|
629
|
-
}, req.headers.cookie || cookie);
|
|
630
|
-
res.json(data2);
|
|
631
|
-
});
|
|
632
|
-
router.get("/fetch_live_room_detail", async (req, res) => {
|
|
633
|
-
const data2 = await BilibiliData({
|
|
634
|
-
methodType: "\u76F4\u64AD\u95F4\u4FE1\u606F",
|
|
635
|
-
room_id: req.query.room_id
|
|
636
|
-
}, req.headers.cookie || cookie);
|
|
637
|
-
res.json(data2);
|
|
638
|
-
});
|
|
639
|
-
router.get("/fetch_liveroom_def", async (req, res) => {
|
|
640
|
-
const data2 = await BilibiliData({
|
|
641
|
-
methodType: "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F",
|
|
642
|
-
room_id: req.query.room_id
|
|
643
|
-
}, req.headers.cookie || cookie);
|
|
644
|
-
res.json(data2);
|
|
645
|
-
});
|
|
646
|
-
router.get("/bv_to_av", async (req, res) => {
|
|
647
|
-
const data2 = await BilibiliData({
|
|
648
|
-
methodType: "BV\u8F6CAV",
|
|
649
|
-
bvid: req.query.bvid
|
|
650
|
-
}, req.headers.cookie || cookie);
|
|
651
|
-
res.json(data2);
|
|
652
|
-
});
|
|
653
|
-
router.get("/av_to_bv", async (req, res) => {
|
|
654
|
-
const data2 = await BilibiliData({
|
|
655
|
-
methodType: "AV\u8F6CBV",
|
|
656
|
-
avid: parseInt(req.query.avid)
|
|
657
|
-
}, req.headers.cookie || cookie);
|
|
658
|
-
res.json(data2);
|
|
659
|
-
});
|
|
660
|
-
router.get("/fetch_user_full_view", async (req, res) => {
|
|
661
|
-
const data2 = await BilibiliData({
|
|
662
|
-
methodType: "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF",
|
|
663
|
-
host_mid: parseInt(req.query.host_mid)
|
|
664
|
-
}, req.headers.cookie || cookie);
|
|
665
|
-
res.json(data2);
|
|
666
|
-
});
|
|
667
|
-
return router;
|
|
668
840
|
};
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
841
|
+
var GlobalGetData = async (options) => {
|
|
842
|
+
const result = await new Networks(options).getData();
|
|
843
|
+
if (result && result.code === 0) {
|
|
844
|
+
return result;
|
|
845
|
+
} else if (result.code === 12061) {
|
|
846
|
+
logger.warn(`\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01
|
|
847
|
+
\u8BF7\u6C42\u63A5\u53E3\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
|
|
848
|
+
\u8BF7\u6C42URL\uFF1A${options.url}
|
|
849
|
+
\u9519\u8BEF\u4EE3\u7801\uFF1A${result.code}\uFF0C
|
|
850
|
+
\u542B\u4E49\uFF1A${result.message}`);
|
|
851
|
+
return result;
|
|
852
|
+
} else {
|
|
853
|
+
const errorMessage = errorMap[result.code] || result.message || "\u672A\u77E5\u9519\u8BEF";
|
|
854
|
+
logger.warn(`\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01
|
|
855
|
+
\u8BF7\u6C42\u63A5\u53E3\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
|
|
856
|
+
\u8BF7\u6C42URL\uFF1A${options.url}
|
|
857
|
+
\u9519\u8BEF\u4EE3\u7801\uFF1A${result.code}\uFF0C
|
|
858
|
+
\u542B\u4E49\uFF1A${errorMessage}`);
|
|
859
|
+
return result;
|
|
684
860
|
}
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
861
|
+
};
|
|
862
|
+
var errorMap = {
|
|
863
|
+
"-1": "\u5E94\u7528\u7A0B\u5E8F\u4E0D\u5B58\u5728\u6216\u5DF2\u88AB\u5C01\u7981",
|
|
864
|
+
"-2": "Access Key \u9519\u8BEF",
|
|
865
|
+
"-3": "API \u6821\u9A8C\u5BC6\u5319\u9519\u8BEF",
|
|
866
|
+
"-4": "\u8C03\u7528\u65B9\u5BF9\u8BE5 Method \u6CA1\u6709\u6743\u9650",
|
|
867
|
+
"-101": "\u8D26\u53F7\u672A\u767B\u5F55",
|
|
868
|
+
"-102": "\u8D26\u53F7\u88AB\u5C01\u505C",
|
|
869
|
+
"-103": "\u79EF\u5206\u4E0D\u8DB3",
|
|
870
|
+
"-104": "\u786C\u5E01\u4E0D\u8DB3",
|
|
871
|
+
"-105": "\u9A8C\u8BC1\u7801\u9519\u8BEF",
|
|
872
|
+
"-106": "\u8D26\u53F7\u975E\u6B63\u5F0F\u4F1A\u5458\u6216\u5728\u9002\u5E94\u671F",
|
|
873
|
+
"-107": "\u5E94\u7528\u4E0D\u5B58\u5728\u6216\u8005\u88AB\u5C01\u7981",
|
|
874
|
+
"-108": "\u672A\u7ED1\u5B9A\u624B\u673A",
|
|
875
|
+
"-110": "\u672A\u7ED1\u5B9A\u624B\u673A",
|
|
876
|
+
"-111": "csrf \u6821\u9A8C\u5931\u8D25",
|
|
877
|
+
"-112": "\u7CFB\u7EDF\u5347\u7EA7\u4E2D",
|
|
878
|
+
"-113": "\u8D26\u53F7\u5C1A\u672A\u5B9E\u540D\u8BA4\u8BC1",
|
|
879
|
+
"-114": "\u8BF7\u5148\u7ED1\u5B9A\u624B\u673A",
|
|
880
|
+
"-115": "\u8BF7\u5148\u5B8C\u6210\u5B9E\u540D\u8BA4\u8BC1",
|
|
881
|
+
"-304": "\u6728\u6709\u6539\u52A8",
|
|
882
|
+
"-307": "\u649E\u8F66\u8DF3\u8F6C",
|
|
883
|
+
"-352": "\u98CE\u63A7\u6821\u9A8C\u5931\u8D25 (UA \u6216 wbi \u53C2\u6570\u4E0D\u5408\u6CD5)",
|
|
884
|
+
"-400": "\u8BF7\u6C42\u9519\u8BEF",
|
|
885
|
+
"-401": "\u672A\u8BA4\u8BC1 (\u6216\u975E\u6CD5\u8BF7\u6C42)",
|
|
886
|
+
"-403": "\u8BBF\u95EE\u6743\u9650\u4E0D\u8DB3",
|
|
887
|
+
"-404": "\u5565\u90FD\u6728\u6709",
|
|
888
|
+
"-405": "\u4E0D\u652F\u6301\u8BE5\u65B9\u6CD5",
|
|
889
|
+
"-409": "\u51B2\u7A81",
|
|
890
|
+
"-412": "\u8BF7\u6C42\u88AB\u62E6\u622A (\u5BA2\u6237\u7AEF ip \u88AB\u670D\u52A1\u7AEF\u98CE\u63A7)",
|
|
891
|
+
"-500": "\u670D\u52A1\u5668\u9519\u8BEF",
|
|
892
|
+
"-503": "\u8FC7\u8F7D\u4FDD\u62A4,\u670D\u52A1\u6682\u4E0D\u53EF\u7528",
|
|
893
|
+
"-504": "\u670D\u52A1\u8C03\u7528\u8D85\u65F6",
|
|
894
|
+
"-509": "\u8D85\u51FA\u9650\u5236",
|
|
895
|
+
"-616": "\u4E0A\u4F20\u6587\u4EF6\u4E0D\u5B58\u5728",
|
|
896
|
+
"-617": "\u4E0A\u4F20\u6587\u4EF6\u592A\u5927",
|
|
897
|
+
"-625": "\u767B\u5F55\u5931\u8D25\u6B21\u6570\u592A\u591A",
|
|
898
|
+
"-626": "\u7528\u6237\u4E0D\u5B58\u5728",
|
|
899
|
+
"-628": "\u5BC6\u7801\u592A\u5F31",
|
|
900
|
+
"-629": "\u7528\u6237\u540D\u6216\u5BC6\u7801\u9519\u8BEF",
|
|
901
|
+
"-632": "\u64CD\u4F5C\u5BF9\u8C61\u6570\u91CF\u9650\u5236",
|
|
902
|
+
"-643": "\u88AB\u9501\u5B9A",
|
|
903
|
+
"-650": "\u7528\u6237\u7B49\u7EA7\u592A\u4F4E",
|
|
904
|
+
"-652": "\u91CD\u590D\u7684\u7528\u6237",
|
|
905
|
+
"-658": "Token \u8FC7\u671F",
|
|
906
|
+
"-662": "\u5BC6\u7801\u65F6\u95F4\u6233\u8FC7\u671F",
|
|
907
|
+
"-688": "\u5730\u7406\u533A\u57DF\u9650\u5236",
|
|
908
|
+
"-689": "\u7248\u6743\u9650\u5236",
|
|
909
|
+
"-701": "\u6263\u8282\u64CD\u5931\u8D25",
|
|
910
|
+
"-799": "\u8BF7\u6C42\u8FC7\u4E8E\u9891\u7E41\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5",
|
|
911
|
+
"-8888": "\u5BF9\u4E0D\u8D77\uFF0C\u670D\u52A1\u5668\u5F00\u5C0F\u5DEE\u4E86~ (\u0CA5\uFE4F\u0CA5)"
|
|
912
|
+
};
|
|
697
913
|
|
|
698
914
|
// src/platform/douyin/sign/a_bogus.ts
|
|
699
915
|
var SM3 = class {
|
|
@@ -1085,70 +1301,339 @@ var douyinSign = class {
|
|
|
1085
1301
|
}
|
|
1086
1302
|
};
|
|
1087
1303
|
|
|
1088
|
-
// src/platform/douyin/API.ts
|
|
1089
|
-
var fp = douyinSign.VerifyFpManager();
|
|
1090
|
-
var DouyinAPI = class {
|
|
1091
|
-
\u89C6\u9891\u6216\u56FE\u96C6(data2) {
|
|
1092
|
-
return `https://www.douyin.com/aweme/v1/web/aweme/detail/?device_platform=webapp&aid=6383&channel=channel_pc_web&aweme_id=${data2.aweme_id}&update_version_code=170400&pc_client_type=1&version_code=190500&version_name=19.5.0&cookie_enabled=true&screen_width=2328&screen_height=1310&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=150&webid=7351848354471872041&msToken=${douyinSign.Mstoken(
|
|
1093
|
-
116
|
|
1094
|
-
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1095
|
-
}
|
|
1096
|
-
\u8BC4\u8BBA(data2) {
|
|
1097
|
-
return `https://www.douyin.com/aweme/v1/web/comment/list/?device_platform=webapp&aid=6383&channel=channel_pc_web&aweme_id=${data2.aweme_id}&cursor=${data2.cursor ?? 0}&count=${data2.number ?? 50}&item_type=0&insert_ids=&whale_cut_token=&cut_version=1&rcFT=&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&msToken=${douyinSign.Mstoken(
|
|
1098
|
-
116
|
|
1099
|
-
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1100
|
-
}
|
|
1101
|
-
\u4E8C\u7EA7\u8BC4\u8BBA(data2) {
|
|
1102
|
-
return `https://www.douyin.com/aweme/v1/web/comment/list/reply/?device_platform=webapp&aid=6383&channel=channel_pc_web&item_id=${data2.aweme_id}&comment_id=${data2.comment_id}&cut_version=1&cursor=${data2.cursor}&count=${data2.number}&item_type=0&update_version_code=170400&pc_client_type=1&pc_libra_divert=Windows&support_h265=1&support_dash=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh-CN&browser_platform=Win32&browser_name=Edge&browser_version=132.0.0.0&browser_online=true&engine_name=Blink&engine_version=132.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7386217876267796006&verifyFp=${fp}&fp=${fp}`;
|
|
1103
|
-
}
|
|
1104
|
-
\u52A8\u56FE(data2) {
|
|
1105
|
-
return `https://www.iesdouyin.com/web/api/v2/aweme/slidesinfo/?reflow_source=reflow_page&web_id=7326472315356857893&device_id=7326472315356857893&aweme_ids=[${data2.aweme_id}]&request_source=200&msToken=${douyinSign.Mstoken(
|
|
1106
|
-
116
|
|
1107
|
-
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1108
|
-
}
|
|
1109
|
-
\u8868\u60C5() {
|
|
1110
|
-
return "https://www.douyin.com/aweme/v1/web/emoji/list";
|
|
1111
|
-
}
|
|
1112
|
-
\u7528\u6237\u4E3B\u9875\u89C6\u9891(data2) {
|
|
1113
|
-
return `https://www.douyin.com/aweme/v1/web/aweme/post/?device_platform=webapp&aid=6383&channel=channel_pc_web&sec_user_id=${data2.sec_uid}&max_cursor=0&locate_query=false&show_live_replay_strategy=1&need_time_list=1&time_list_query=0&whale_cut_token=&cut_version=1&count=18&publish_video_strategy_type=2&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7338423850134226495&msToken=${douyinSign.Mstoken(
|
|
1114
|
-
116
|
|
1115
|
-
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1116
|
-
}
|
|
1117
|
-
\u7528\u6237\u4E3B\u9875\u4FE1\u606F(data2) {
|
|
1118
|
-
return `https://www.douyin.com/aweme/v1/web/user/profile/other/?device_platform=webapp&aid=6383&channel=channel_pc_web&publish_video_strategy_type=2&source=channel_pc_web&sec_user_id=${data2.sec_uid}&personal_center_strategy=1&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=0&webid=7327957959955580467&msToken=${douyinSign.Mstoken(
|
|
1119
|
-
116
|
|
1120
|
-
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1121
|
-
}
|
|
1122
|
-
\u70ED\u70B9\u8BCD(data2) {
|
|
1123
|
-
return `https://www.douyin.com/aweme/v1/web/api/suggest_words/?device_platform=webapp&aid=6383&channel=channel_pc_web&query=${data2.query}&business_id=30088&from_group_id=7129543174929812767&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh - CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7327957959955580467&msToken=${douyinSign.Mstoken(
|
|
1124
|
-
116
|
|
1125
|
-
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1126
|
-
}
|
|
1127
|
-
\u641C\u7D22(data2) {
|
|
1128
|
-
return `https://www.douyin.com/aweme/v1/web/general/search/single/?device_platform=webapp&aid=6383&channel=channel_pc_web&search_channel=aweme_general&sort_type=0&publish_time=0&keyword=${data2.query}&search_source=normal_search&query_correct_type=1&is_filter_search=0&from_group_id=&offset=0&count=15&pc_client_type=1&version_code=190600&version_name=19.6.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7338423850134226495&msToken=${douyinSign.Mstoken(
|
|
1129
|
-
116
|
|
1130
|
-
)}&verifyFp=${fp}&fp=${fp}&search_id=${data2.search_id ?? ""}&count=${data2.number ?? 10}`;
|
|
1131
|
-
}
|
|
1132
|
-
\u4E92\u52A8\u8868\u60C5() {
|
|
1133
|
-
return `https://www.douyin.com/aweme/v1/web/im/strategy/config?device_platform=webapp&aid=1128&channel=channel_pc_web&publish_video_strategy_type=2&app_id=1128&scenes=[%22interactive_resources%22]&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=2328&screen_height=1310&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=126.0.0.0&browser_online=true&engine_name=Blink&engine_version=126.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=1.5&effective_type=4g&round_trip_time=350&webid=7347329698282833447&msToken=${douyinSign.Mstoken(
|
|
1134
|
-
116
|
|
1135
|
-
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1136
|
-
}
|
|
1137
|
-
\u80CC\u666F\u97F3\u4E50(data2) {
|
|
1138
|
-
return `https://www.douyin.com/aweme/v1/web/music/detail/?device_platform=webapp&aid=6383&channel=channel_pc_web&music_id=${data2.music_id}&scene=1&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=2328&screen_height=1310&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=126.0.0.0&browser_online=true&engine_name=Blink&engine_version=126.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=1.5&effective_type=4g&round_trip_time=350&webid=7347329698282833447&msToken=${douyinSign.Mstoken(
|
|
1139
|
-
116
|
|
1140
|
-
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1141
|
-
}
|
|
1142
|
-
\u76F4\u64AD\u95F4\u4FE1\u606F(data2) {
|
|
1143
|
-
return `https://live.douyin.com/webcast/room/web/enter/?aid=6383&app_name=douyin_web&live_id=1&device_platform=web&language=zh-CN&enter_from=web_share_link&cookie_enabled=true&screen_width=2048&screen_height=1152&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&web_rid=${data2.web_rid}&room_id_str=${data2.room_id}&enter_source=&is_need_double_stream=false&insert_task_id=&live_reason=&msToken=${douyinSign.Mstoken(
|
|
1144
|
-
116
|
|
1145
|
-
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1146
|
-
}
|
|
1147
|
-
\u7533\u8BF7\u4E8C\u7EF4\u7801(data2) {
|
|
1148
|
-
return `https://sso.douyin.com/get_qrcode/?verifyFp=${data2.verify_fp}&fp=${data2.verify_fp}`;
|
|
1149
|
-
}
|
|
1304
|
+
// src/platform/douyin/API.ts
|
|
1305
|
+
var fp = douyinSign.VerifyFpManager();
|
|
1306
|
+
var DouyinAPI = class {
|
|
1307
|
+
\u89C6\u9891\u6216\u56FE\u96C6(data2) {
|
|
1308
|
+
return `https://www.douyin.com/aweme/v1/web/aweme/detail/?device_platform=webapp&aid=6383&channel=channel_pc_web&aweme_id=${data2.aweme_id}&update_version_code=170400&pc_client_type=1&version_code=190500&version_name=19.5.0&cookie_enabled=true&screen_width=2328&screen_height=1310&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=150&webid=7351848354471872041&msToken=${douyinSign.Mstoken(
|
|
1309
|
+
116
|
|
1310
|
+
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1311
|
+
}
|
|
1312
|
+
\u8BC4\u8BBA(data2) {
|
|
1313
|
+
return `https://www.douyin.com/aweme/v1/web/comment/list/?device_platform=webapp&aid=6383&channel=channel_pc_web&aweme_id=${data2.aweme_id}&cursor=${data2.cursor ?? 0}&count=${data2.number ?? 50}&item_type=0&insert_ids=&whale_cut_token=&cut_version=1&rcFT=&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&msToken=${douyinSign.Mstoken(
|
|
1314
|
+
116
|
|
1315
|
+
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1316
|
+
}
|
|
1317
|
+
\u4E8C\u7EA7\u8BC4\u8BBA(data2) {
|
|
1318
|
+
return `https://www.douyin.com/aweme/v1/web/comment/list/reply/?device_platform=webapp&aid=6383&channel=channel_pc_web&item_id=${data2.aweme_id}&comment_id=${data2.comment_id}&cut_version=1&cursor=${data2.cursor}&count=${data2.number}&item_type=0&update_version_code=170400&pc_client_type=1&pc_libra_divert=Windows&support_h265=1&support_dash=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh-CN&browser_platform=Win32&browser_name=Edge&browser_version=132.0.0.0&browser_online=true&engine_name=Blink&engine_version=132.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7386217876267796006&verifyFp=${fp}&fp=${fp}`;
|
|
1319
|
+
}
|
|
1320
|
+
\u52A8\u56FE(data2) {
|
|
1321
|
+
return `https://www.iesdouyin.com/web/api/v2/aweme/slidesinfo/?reflow_source=reflow_page&web_id=7326472315356857893&device_id=7326472315356857893&aweme_ids=[${data2.aweme_id}]&request_source=200&msToken=${douyinSign.Mstoken(
|
|
1322
|
+
116
|
|
1323
|
+
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1324
|
+
}
|
|
1325
|
+
\u8868\u60C5() {
|
|
1326
|
+
return "https://www.douyin.com/aweme/v1/web/emoji/list";
|
|
1327
|
+
}
|
|
1328
|
+
\u7528\u6237\u4E3B\u9875\u89C6\u9891(data2) {
|
|
1329
|
+
return `https://www.douyin.com/aweme/v1/web/aweme/post/?device_platform=webapp&aid=6383&channel=channel_pc_web&sec_user_id=${data2.sec_uid}&max_cursor=0&locate_query=false&show_live_replay_strategy=1&need_time_list=1&time_list_query=0&whale_cut_token=&cut_version=1&count=18&publish_video_strategy_type=2&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7338423850134226495&msToken=${douyinSign.Mstoken(
|
|
1330
|
+
116
|
|
1331
|
+
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1332
|
+
}
|
|
1333
|
+
\u7528\u6237\u4E3B\u9875\u4FE1\u606F(data2) {
|
|
1334
|
+
return `https://www.douyin.com/aweme/v1/web/user/profile/other/?device_platform=webapp&aid=6383&channel=channel_pc_web&publish_video_strategy_type=2&source=channel_pc_web&sec_user_id=${data2.sec_uid}&personal_center_strategy=1&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=0&webid=7327957959955580467&msToken=${douyinSign.Mstoken(
|
|
1335
|
+
116
|
|
1336
|
+
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1337
|
+
}
|
|
1338
|
+
\u70ED\u70B9\u8BCD(data2) {
|
|
1339
|
+
return `https://www.douyin.com/aweme/v1/web/api/suggest_words/?device_platform=webapp&aid=6383&channel=channel_pc_web&query=${data2.query}&business_id=30088&from_group_id=7129543174929812767&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh - CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7327957959955580467&msToken=${douyinSign.Mstoken(
|
|
1340
|
+
116
|
|
1341
|
+
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1342
|
+
}
|
|
1343
|
+
\u641C\u7D22(data2) {
|
|
1344
|
+
return `https://www.douyin.com/aweme/v1/web/general/search/single/?device_platform=webapp&aid=6383&channel=channel_pc_web&search_channel=aweme_general&sort_type=0&publish_time=0&keyword=${data2.query}&search_source=normal_search&query_correct_type=1&is_filter_search=0&from_group_id=&offset=0&count=15&pc_client_type=1&version_code=190600&version_name=19.6.0&cookie_enabled=true&screen_width=1552&screen_height=970&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7338423850134226495&msToken=${douyinSign.Mstoken(
|
|
1345
|
+
116
|
|
1346
|
+
)}&verifyFp=${fp}&fp=${fp}&search_id=${data2.search_id ?? ""}&count=${data2.number ?? 10}`;
|
|
1347
|
+
}
|
|
1348
|
+
\u4E92\u52A8\u8868\u60C5() {
|
|
1349
|
+
return `https://www.douyin.com/aweme/v1/web/im/strategy/config?device_platform=webapp&aid=1128&channel=channel_pc_web&publish_video_strategy_type=2&app_id=1128&scenes=[%22interactive_resources%22]&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=2328&screen_height=1310&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=126.0.0.0&browser_online=true&engine_name=Blink&engine_version=126.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=1.5&effective_type=4g&round_trip_time=350&webid=7347329698282833447&msToken=${douyinSign.Mstoken(
|
|
1350
|
+
116
|
|
1351
|
+
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1352
|
+
}
|
|
1353
|
+
\u80CC\u666F\u97F3\u4E50(data2) {
|
|
1354
|
+
return `https://www.douyin.com/aweme/v1/web/music/detail/?device_platform=webapp&aid=6383&channel=channel_pc_web&music_id=${data2.music_id}&scene=1&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=2328&screen_height=1310&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=126.0.0.0&browser_online=true&engine_name=Blink&engine_version=126.0.0.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=8&platform=PC&downlink=1.5&effective_type=4g&round_trip_time=350&webid=7347329698282833447&msToken=${douyinSign.Mstoken(
|
|
1355
|
+
116
|
|
1356
|
+
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1357
|
+
}
|
|
1358
|
+
\u76F4\u64AD\u95F4\u4FE1\u606F(data2) {
|
|
1359
|
+
return `https://live.douyin.com/webcast/room/web/enter/?aid=6383&app_name=douyin_web&live_id=1&device_platform=web&language=zh-CN&enter_from=web_share_link&cookie_enabled=true&screen_width=2048&screen_height=1152&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=125.0.0.0&web_rid=${data2.web_rid}&room_id_str=${data2.room_id}&enter_source=&is_need_double_stream=false&insert_task_id=&live_reason=&msToken=${douyinSign.Mstoken(
|
|
1360
|
+
116
|
|
1361
|
+
)}&verifyFp=${fp}&fp=${fp}`;
|
|
1362
|
+
}
|
|
1363
|
+
\u7533\u8BF7\u4E8C\u7EF4\u7801(data2) {
|
|
1364
|
+
return `https://sso.douyin.com/get_qrcode/?verifyFp=${data2.verify_fp}&fp=${data2.verify_fp}`;
|
|
1365
|
+
}
|
|
1366
|
+
};
|
|
1367
|
+
var douyinAPI = new DouyinAPI();
|
|
1368
|
+
var douyinApiUrls = new DouyinAPI();
|
|
1369
|
+
|
|
1370
|
+
// src/platform/douyin/DouyinApi.ts
|
|
1371
|
+
var douyin = {
|
|
1372
|
+
/**
|
|
1373
|
+
* 聚合解析 (视频/图集/合辑)
|
|
1374
|
+
* @param options 请求参数,包含 aweme_id 和可选的 typeMode
|
|
1375
|
+
* @param cookie 有效的用户 Cookie
|
|
1376
|
+
* @returns 接口返回的原始数据
|
|
1377
|
+
*/
|
|
1378
|
+
async getWorkInfo(options, cookie) {
|
|
1379
|
+
const { typeMode, ...restOptions } = options;
|
|
1380
|
+
const data2 = await DouyinData({ ...restOptions, methodType: "\u805A\u5408\u89E3\u6790" }, cookie);
|
|
1381
|
+
return data2;
|
|
1382
|
+
},
|
|
1383
|
+
/**
|
|
1384
|
+
* 获取视频作品数据
|
|
1385
|
+
* @param options 请求参数,包含 aweme_id 和可选的 typeMode
|
|
1386
|
+
* @param cookie 有效的用户 Cookie
|
|
1387
|
+
* @returns 接口返回的原始数据
|
|
1388
|
+
*/
|
|
1389
|
+
async getVideoWorkInfo(options, cookie) {
|
|
1390
|
+
const { typeMode, ...restOptions } = options;
|
|
1391
|
+
const data2 = await DouyinData({ ...restOptions, methodType: "\u89C6\u9891\u4F5C\u54C1\u6570\u636E" }, cookie);
|
|
1392
|
+
return data2;
|
|
1393
|
+
},
|
|
1394
|
+
/**
|
|
1395
|
+
* 获取图集作品数据
|
|
1396
|
+
* @param options 请求参数,包含 aweme_id 和可选的 typeMode
|
|
1397
|
+
* @param cookie 有效的用户 Cookie
|
|
1398
|
+
* @returns 接口返回的原始数据
|
|
1399
|
+
*/
|
|
1400
|
+
async getImageAlbumWorkInfo(options, cookie) {
|
|
1401
|
+
const { typeMode, ...restOptions } = options;
|
|
1402
|
+
const data2 = await DouyinData({ ...restOptions, methodType: "\u56FE\u96C6\u4F5C\u54C1\u6570\u636E" }, cookie);
|
|
1403
|
+
return data2;
|
|
1404
|
+
},
|
|
1405
|
+
/**
|
|
1406
|
+
* 获取合辑作品数据
|
|
1407
|
+
* @param options 请求参数,包含 aweme_id 和可选的 typeMode
|
|
1408
|
+
* @param cookie 有效的用户 Cookie
|
|
1409
|
+
* @returns 接口返回的原始数据
|
|
1410
|
+
*/
|
|
1411
|
+
async getSlidesWorkInfo(options, cookie) {
|
|
1412
|
+
const { typeMode, ...restOptions } = options;
|
|
1413
|
+
const data2 = await DouyinData({ ...restOptions, methodType: "\u5408\u8F91\u4F5C\u54C1\u6570\u636E" }, cookie);
|
|
1414
|
+
return data2;
|
|
1415
|
+
},
|
|
1416
|
+
/**
|
|
1417
|
+
* 获取评论数据
|
|
1418
|
+
* @param options 请求参数,包含 aweme_id, 可选的 number, cursor 和 typeMode
|
|
1419
|
+
* @param cookie 有效的用户 Cookie
|
|
1420
|
+
* @returns 接口返回的原始数据
|
|
1421
|
+
*/
|
|
1422
|
+
async getComments(options, cookie) {
|
|
1423
|
+
const { typeMode, ...restOptions } = options;
|
|
1424
|
+
const data2 = await DouyinData({ ...restOptions, methodType: "\u8BC4\u8BBA\u6570\u636E" }, cookie);
|
|
1425
|
+
return data2;
|
|
1426
|
+
},
|
|
1427
|
+
/**
|
|
1428
|
+
* 获取指定评论回复数据
|
|
1429
|
+
* @param options 请求参数,包含 aweme_id, comment_id, 可选的 number, cursor 和 typeMode
|
|
1430
|
+
* @param cookie 有效的用户 Cookie
|
|
1431
|
+
* @returns 接口返回的原始数据
|
|
1432
|
+
*/
|
|
1433
|
+
async getCommentReplies(options, cookie) {
|
|
1434
|
+
const { typeMode, ...restOptions } = options;
|
|
1435
|
+
const data2 = await DouyinData({ ...restOptions, methodType: "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E" }, cookie);
|
|
1436
|
+
return data2;
|
|
1437
|
+
},
|
|
1438
|
+
/**
|
|
1439
|
+
* 获取用户主页数据
|
|
1440
|
+
* @param options 请求参数,包含 sec_uid 和可选的 typeMode
|
|
1441
|
+
* @param cookie 有效的用户 Cookie
|
|
1442
|
+
* @returns 接口返回的原始数据
|
|
1443
|
+
*/
|
|
1444
|
+
async getUserProfile(options, cookie) {
|
|
1445
|
+
const { typeMode, ...restOptions } = options;
|
|
1446
|
+
const data2 = await DouyinData({ ...restOptions, methodType: "\u7528\u6237\u4E3B\u9875\u6570\u636E" }, cookie);
|
|
1447
|
+
return data2;
|
|
1448
|
+
},
|
|
1449
|
+
/**
|
|
1450
|
+
* 获取 Emoji 数据
|
|
1451
|
+
* @param options 可选的请求参数 (主要用于 typeMode)
|
|
1452
|
+
* @param cookie 可选的用户 Cookie
|
|
1453
|
+
* @returns 接口返回的原始数据
|
|
1454
|
+
*/
|
|
1455
|
+
async getEmojiList(options, cookie) {
|
|
1456
|
+
const { typeMode, ...restOptions } = options;
|
|
1457
|
+
const data2 = await DouyinData({ ...restOptions, methodType: "Emoji\u6570\u636E" }, cookie);
|
|
1458
|
+
return data2;
|
|
1459
|
+
},
|
|
1460
|
+
/**
|
|
1461
|
+
* 获取动态表情数据
|
|
1462
|
+
* @param options 可选的请求参数 (主要用于 typeMode)
|
|
1463
|
+
* @param cookie 有效的用户 Cookie
|
|
1464
|
+
* @returns 接口返回的原始数据
|
|
1465
|
+
*/
|
|
1466
|
+
async getEmojiProList(options, cookie) {
|
|
1467
|
+
const { typeMode, ...restOptions } = options;
|
|
1468
|
+
const data2 = await DouyinData({ ...restOptions, methodType: "\u52A8\u6001\u8868\u60C5\u6570\u636E" }, cookie);
|
|
1469
|
+
return data2;
|
|
1470
|
+
},
|
|
1471
|
+
/**
|
|
1472
|
+
* 获取用户主页视频列表数据
|
|
1473
|
+
* @param options 请求参数,包含 sec_uid, 可选的 number, max_cursor 和 typeMode
|
|
1474
|
+
* @param cookie 有效的用户 Cookie
|
|
1475
|
+
* @returns 接口返回的原始数据
|
|
1476
|
+
*/
|
|
1477
|
+
async getUserVideos(options, cookie) {
|
|
1478
|
+
const { typeMode, ...restOptions } = options;
|
|
1479
|
+
const data2 = await DouyinData({ ...restOptions, methodType: "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E" }, cookie);
|
|
1480
|
+
return data2;
|
|
1481
|
+
},
|
|
1482
|
+
/**
|
|
1483
|
+
* 获取音乐数据
|
|
1484
|
+
* @param options 请求参数,包含 music_id 和可选的 typeMode
|
|
1485
|
+
* @param cookie 有效的用户 Cookie
|
|
1486
|
+
* @returns 接口返回的原始数据
|
|
1487
|
+
*/
|
|
1488
|
+
async getMusicInfo(options, cookie) {
|
|
1489
|
+
const { typeMode, ...restOptions } = options;
|
|
1490
|
+
const data2 = await DouyinData({ ...restOptions, methodType: "\u97F3\u4E50\u6570\u636E" }, cookie);
|
|
1491
|
+
return data2;
|
|
1492
|
+
},
|
|
1493
|
+
/**
|
|
1494
|
+
* 获取热点词数据
|
|
1495
|
+
* @param options 请求参数,包含 query, 可选的 number 和 typeMode
|
|
1496
|
+
* @param cookie 有效的用户 Cookie
|
|
1497
|
+
* @returns 接口返回的原始数据
|
|
1498
|
+
*/
|
|
1499
|
+
async getSuggestWords(options, cookie) {
|
|
1500
|
+
const { typeMode, ...restOptions } = options;
|
|
1501
|
+
const data2 = await DouyinData({ ...restOptions, methodType: "\u70ED\u70B9\u8BCD\u6570\u636E" }, cookie);
|
|
1502
|
+
return data2;
|
|
1503
|
+
},
|
|
1504
|
+
/**
|
|
1505
|
+
* 获取搜索数据
|
|
1506
|
+
* @param options 请求参数,包含 query, 可选的 number, search_id, cursor 和 typeMode
|
|
1507
|
+
* @param cookie 有效的用户 Cookie
|
|
1508
|
+
* @returns 接口返回的原始数据
|
|
1509
|
+
*/
|
|
1510
|
+
async search(options, cookie) {
|
|
1511
|
+
const { typeMode, ...restOptions } = options;
|
|
1512
|
+
const data2 = await DouyinData({ ...restOptions, methodType: "\u641C\u7D22\u6570\u636E" }, cookie);
|
|
1513
|
+
return data2;
|
|
1514
|
+
},
|
|
1515
|
+
/**
|
|
1516
|
+
* 获取直播间信息
|
|
1517
|
+
* @param options 请求参数,包含 sec_uid 和可选的 typeMode
|
|
1518
|
+
* @param cookie 有效的用户 Cookie
|
|
1519
|
+
* @returns 接口返回的原始数据
|
|
1520
|
+
*/
|
|
1521
|
+
async getLiveRoomInfo(options, cookie) {
|
|
1522
|
+
const { typeMode, ...restOptions } = options;
|
|
1523
|
+
const data2 = await DouyinData({ ...restOptions, methodType: "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E" }, cookie);
|
|
1524
|
+
return data2;
|
|
1525
|
+
},
|
|
1526
|
+
/**
|
|
1527
|
+
* 申请二维码数据
|
|
1528
|
+
* @param options 请求参数,包含 verify_fp 和可选的 typeMode
|
|
1529
|
+
* @param cookie 有效的用户 Cookie
|
|
1530
|
+
* @returns 接口返回的原始数据 (any)
|
|
1531
|
+
*/
|
|
1532
|
+
async getLoginQrcode(options, cookie) {
|
|
1533
|
+
const { typeMode, ...restOptions } = options;
|
|
1534
|
+
const data2 = await DouyinData({ ...restOptions, methodType: "\u7533\u8BF7\u4E8C\u7EF4\u7801\u6570\u636E" }, cookie);
|
|
1535
|
+
return data2;
|
|
1536
|
+
}
|
|
1537
|
+
};
|
|
1538
|
+
var registerDouyinRoutes = (cookie) => {
|
|
1539
|
+
const router = express__default.default.Router();
|
|
1540
|
+
router.get("/fetch_one_work", async (req, res) => {
|
|
1541
|
+
const data2 = await DouyinData({
|
|
1542
|
+
methodType: "\u805A\u5408\u89E3\u6790",
|
|
1543
|
+
aweme_id: req.query.aweme_id
|
|
1544
|
+
}, req.headers.cookie || cookie);
|
|
1545
|
+
res.json(data2);
|
|
1546
|
+
});
|
|
1547
|
+
router.get("/fetch_work_comments", async (req, res) => {
|
|
1548
|
+
const data2 = await DouyinData({
|
|
1549
|
+
methodType: "\u8BC4\u8BBA\u6570\u636E",
|
|
1550
|
+
aweme_id: req.query.aweme_id,
|
|
1551
|
+
number: parseInt(req.query.number ?? "50"),
|
|
1552
|
+
cursor: parseInt(req.query.cursor ?? "0")
|
|
1553
|
+
}, req.headers.cookie || cookie);
|
|
1554
|
+
res.json(data2);
|
|
1555
|
+
});
|
|
1556
|
+
router.get("/fetch_video_comment_replies", async (req, res) => {
|
|
1557
|
+
const data2 = await DouyinData({
|
|
1558
|
+
methodType: "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E",
|
|
1559
|
+
aweme_id: req.query.aweme_id,
|
|
1560
|
+
comment_id: req.query.comment_id
|
|
1561
|
+
}, req.headers.cookie || cookie);
|
|
1562
|
+
res.json(data2);
|
|
1563
|
+
});
|
|
1564
|
+
router.get("/fetch_user_info", async (req, res) => {
|
|
1565
|
+
const data2 = await DouyinData({
|
|
1566
|
+
methodType: "\u7528\u6237\u4E3B\u9875\u6570\u636E",
|
|
1567
|
+
sec_uid: req.query.sec_uid
|
|
1568
|
+
}, req.headers.cookie || cookie);
|
|
1569
|
+
res.json(data2);
|
|
1570
|
+
});
|
|
1571
|
+
router.get("/fetch_user_post_videos", async (req, res) => {
|
|
1572
|
+
const data2 = await DouyinData({
|
|
1573
|
+
methodType: "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E",
|
|
1574
|
+
sec_uid: req.query.sec_uid
|
|
1575
|
+
}, req.headers.cookie || cookie);
|
|
1576
|
+
res.json(data2);
|
|
1577
|
+
});
|
|
1578
|
+
router.get("/fetch_suggest_words", async (req, res) => {
|
|
1579
|
+
const data2 = await DouyinData({
|
|
1580
|
+
methodType: "\u70ED\u70B9\u8BCD\u6570\u636E",
|
|
1581
|
+
query: req.query.query
|
|
1582
|
+
}, req.headers.cookie || cookie);
|
|
1583
|
+
res.json(data2);
|
|
1584
|
+
});
|
|
1585
|
+
router.get("/fetch_search_info", async (req, res) => {
|
|
1586
|
+
const data2 = await DouyinData({
|
|
1587
|
+
methodType: "\u641C\u7D22\u6570\u636E",
|
|
1588
|
+
query: req.query.query,
|
|
1589
|
+
number: parseInt(req.query.number ?? "10"),
|
|
1590
|
+
search_id: req.query.search_id
|
|
1591
|
+
}, req.headers.cookie || cookie);
|
|
1592
|
+
res.json(data2);
|
|
1593
|
+
});
|
|
1594
|
+
router.get("/fetch_emoji_list", async (req, res) => {
|
|
1595
|
+
const data2 = await DouyinData({
|
|
1596
|
+
methodType: "Emoji\u6570\u636E"
|
|
1597
|
+
}, req.headers.cookie || cookie);
|
|
1598
|
+
res.json(data2);
|
|
1599
|
+
});
|
|
1600
|
+
router.get("/fetch_emoji_pro_list", async (req, res) => {
|
|
1601
|
+
const data2 = await DouyinData({
|
|
1602
|
+
methodType: "\u52A8\u6001\u8868\u60C5\u6570\u636E"
|
|
1603
|
+
}, req.headers.cookie || cookie);
|
|
1604
|
+
res.json(data2);
|
|
1605
|
+
});
|
|
1606
|
+
router.get("/fetch_music_work", async (req, res) => {
|
|
1607
|
+
const data2 = await DouyinData({
|
|
1608
|
+
methodType: "\u97F3\u4E50\u6570\u636E",
|
|
1609
|
+
music_id: req.query.music_id
|
|
1610
|
+
}, req.headers.cookie || cookie);
|
|
1611
|
+
res.json(data2);
|
|
1612
|
+
});
|
|
1613
|
+
router.get("/fetch_user_mix_videos", async (req, res) => {
|
|
1614
|
+
const data2 = await DouyinData({
|
|
1615
|
+
methodType: "\u5408\u8F91\u4F5C\u54C1\u6570\u636E",
|
|
1616
|
+
aweme_id: req.query.aweme_id
|
|
1617
|
+
}, req.headers.cookie || cookie);
|
|
1618
|
+
res.json(data2);
|
|
1619
|
+
});
|
|
1620
|
+
router.get("/fetch_user_live_videos", async (req, res) => {
|
|
1621
|
+
const data2 = await DouyinData({
|
|
1622
|
+
methodType: "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E",
|
|
1623
|
+
sec_uid: req.query.sec_uid
|
|
1624
|
+
}, req.headers.cookie || cookie);
|
|
1625
|
+
res.json(data2);
|
|
1626
|
+
});
|
|
1627
|
+
return router;
|
|
1628
|
+
};
|
|
1629
|
+
|
|
1630
|
+
// src/platform/douyin/index.ts
|
|
1631
|
+
var douyinUtils = {
|
|
1632
|
+
sign: douyinSign,
|
|
1633
|
+
douyinApiUrls,
|
|
1634
|
+
getDouyinData,
|
|
1635
|
+
api: douyin
|
|
1150
1636
|
};
|
|
1151
|
-
var douyinAPI = new DouyinAPI();
|
|
1152
1637
|
|
|
1153
1638
|
// src/platform/douyin/getdata.ts
|
|
1154
1639
|
var defheaders2 = {
|
|
@@ -1269,6 +1754,10 @@ var DouyinData = async (data2, cookie) => {
|
|
|
1269
1754
|
},
|
|
1270
1755
|
...data2
|
|
1271
1756
|
});
|
|
1757
|
+
if (response.data.length === 0) {
|
|
1758
|
+
logger.warn("\u83B7\u53D6\u641C\u7D22\u6570\u636E\u5931\u8D25\uFF01\u8BF7\u6C42\u6210\u529F\u4F46\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\n\u4F60\u7684\u6296\u97F3ck\u53EF\u80FD\u5DF2\u7ECF\u5931\u6548\uFF01\n\u8BF7\u6C42\u7C7B\u578B\uFF1A" + data2.methodType);
|
|
1759
|
+
return false;
|
|
1760
|
+
}
|
|
1272
1761
|
if (!response.data) {
|
|
1273
1762
|
response.data = [];
|
|
1274
1763
|
}
|
|
@@ -1343,6 +1832,9 @@ var DouyinData = async (data2, cookie) => {
|
|
|
1343
1832
|
});
|
|
1344
1833
|
return LoginQrcodeStatusData;
|
|
1345
1834
|
}
|
|
1835
|
+
default:
|
|
1836
|
+
logger.warn(`\u672A\u77E5\u7684B\u7AD9\u6570\u636E\u63A5\u53E3\uFF1A\u300C${logger.red(data2.methodType)}\u300D`);
|
|
1837
|
+
return null;
|
|
1346
1838
|
}
|
|
1347
1839
|
};
|
|
1348
1840
|
async function fetchPaginatedData(apiUrlGenerator, params, maxPageSize, headers2) {
|
|
@@ -1378,102 +1870,14 @@ async function fetchPaginatedData(apiUrlGenerator, params, maxPageSize, headers2
|
|
|
1378
1870
|
async function GlobalGetData2(options) {
|
|
1379
1871
|
const ResponseData = await new Networks(options).getData();
|
|
1380
1872
|
if (ResponseData === "" || !ResponseData) {
|
|
1381
|
-
logger.warn(
|
|
1873
|
+
logger.warn(`\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A
|
|
1874
|
+
\u4F60\u7684\u6296\u97F3ck\u53EF\u80FD\u5DF2\u7ECF\u5931\u6548\uFF01
|
|
1875
|
+
\u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${options.methodType}\u300D
|
|
1876
|
+
\u8BF7\u6C42URL\uFF1A options.url`);
|
|
1382
1877
|
return false;
|
|
1383
1878
|
}
|
|
1384
1879
|
return ResponseData;
|
|
1385
1880
|
}
|
|
1386
|
-
var registerDouyinRoutes = (cookie) => {
|
|
1387
|
-
const router = express__default.default.Router();
|
|
1388
|
-
router.get("/fetch_one_work", async (req, res) => {
|
|
1389
|
-
const data2 = await DouyinData({
|
|
1390
|
-
methodType: "\u805A\u5408\u89E3\u6790",
|
|
1391
|
-
aweme_id: req.query.aweme_id
|
|
1392
|
-
}, req.headers.cookie || cookie);
|
|
1393
|
-
res.json(data2);
|
|
1394
|
-
});
|
|
1395
|
-
router.get("/fetch_work_comments", async (req, res) => {
|
|
1396
|
-
const data2 = await DouyinData({
|
|
1397
|
-
methodType: "\u8BC4\u8BBA\u6570\u636E",
|
|
1398
|
-
aweme_id: req.query.aweme_id,
|
|
1399
|
-
number: parseInt(req.query.number ?? "50"),
|
|
1400
|
-
cursor: parseInt(req.query.cursor ?? "0")
|
|
1401
|
-
}, req.headers.cookie || cookie);
|
|
1402
|
-
res.json(data2);
|
|
1403
|
-
});
|
|
1404
|
-
router.get("/fetch_video_comment_replies", async (req, res) => {
|
|
1405
|
-
const data2 = await DouyinData({
|
|
1406
|
-
methodType: "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E",
|
|
1407
|
-
aweme_id: req.query.aweme_id,
|
|
1408
|
-
comment_id: req.query.comment_id
|
|
1409
|
-
}, req.headers.cookie || cookie);
|
|
1410
|
-
res.json(data2);
|
|
1411
|
-
});
|
|
1412
|
-
router.get("/fetch_user_info", async (req, res) => {
|
|
1413
|
-
const data2 = await DouyinData({
|
|
1414
|
-
methodType: "\u7528\u6237\u4E3B\u9875\u6570\u636E",
|
|
1415
|
-
sec_uid: req.query.sec_uid
|
|
1416
|
-
}, req.headers.cookie || cookie);
|
|
1417
|
-
res.json(data2);
|
|
1418
|
-
});
|
|
1419
|
-
router.get("/fetch_user_post_videos", async (req, res) => {
|
|
1420
|
-
const data2 = await DouyinData({
|
|
1421
|
-
methodType: "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E",
|
|
1422
|
-
sec_uid: req.query.sec_uid
|
|
1423
|
-
}, req.headers.cookie || cookie);
|
|
1424
|
-
res.json(data2);
|
|
1425
|
-
});
|
|
1426
|
-
router.get("/fetch_suggest_words", async (req, res) => {
|
|
1427
|
-
const data2 = await DouyinData({
|
|
1428
|
-
methodType: "\u70ED\u70B9\u8BCD\u6570\u636E",
|
|
1429
|
-
query: req.query.query
|
|
1430
|
-
}, req.headers.cookie || cookie);
|
|
1431
|
-
res.json(data2);
|
|
1432
|
-
});
|
|
1433
|
-
router.get("/fetch_search_info", async (req, res) => {
|
|
1434
|
-
const data2 = await DouyinData({
|
|
1435
|
-
methodType: "\u641C\u7D22\u6570\u636E",
|
|
1436
|
-
query: req.query.query,
|
|
1437
|
-
number: parseInt(req.query.number ?? "10"),
|
|
1438
|
-
search_id: req.query.search_id
|
|
1439
|
-
}, req.headers.cookie || cookie);
|
|
1440
|
-
res.json(data2);
|
|
1441
|
-
});
|
|
1442
|
-
router.get("/fetch_emoji_list", async (req, res) => {
|
|
1443
|
-
const data2 = await DouyinData({
|
|
1444
|
-
methodType: "Emoji\u6570\u636E"
|
|
1445
|
-
}, req.headers.cookie || cookie);
|
|
1446
|
-
res.json(data2);
|
|
1447
|
-
});
|
|
1448
|
-
router.get("/fetch_emoji_pro_list", async (req, res) => {
|
|
1449
|
-
const data2 = await DouyinData({
|
|
1450
|
-
methodType: "\u52A8\u6001\u8868\u60C5\u6570\u636E"
|
|
1451
|
-
}, req.headers.cookie || cookie);
|
|
1452
|
-
res.json(data2);
|
|
1453
|
-
});
|
|
1454
|
-
router.get("/fetch_music_work", async (req, res) => {
|
|
1455
|
-
const data2 = await DouyinData({
|
|
1456
|
-
methodType: "\u97F3\u4E50\u6570\u636E",
|
|
1457
|
-
music_id: req.query.music_id
|
|
1458
|
-
}, req.headers.cookie || cookie);
|
|
1459
|
-
res.json(data2);
|
|
1460
|
-
});
|
|
1461
|
-
router.get("/fetch_user_mix_videos", async (req, res) => {
|
|
1462
|
-
const data2 = await DouyinData({
|
|
1463
|
-
methodType: "\u5408\u8F91\u4F5C\u54C1\u6570\u636E",
|
|
1464
|
-
aweme_id: req.query.aweme_id
|
|
1465
|
-
}, req.headers.cookie || cookie);
|
|
1466
|
-
res.json(data2);
|
|
1467
|
-
});
|
|
1468
|
-
router.get("/fetch_user_live_videos", async (req, res) => {
|
|
1469
|
-
const data2 = await DouyinData({
|
|
1470
|
-
methodType: "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E",
|
|
1471
|
-
sec_uid: req.query.sec_uid
|
|
1472
|
-
}, req.headers.cookie || cookie);
|
|
1473
|
-
res.json(data2);
|
|
1474
|
-
});
|
|
1475
|
-
return router;
|
|
1476
|
-
};
|
|
1477
1881
|
|
|
1478
1882
|
// src/platform/kuaishou/API.ts
|
|
1479
1883
|
var API = class {
|
|
@@ -1523,6 +1927,73 @@ var API = class {
|
|
|
1523
1927
|
}
|
|
1524
1928
|
};
|
|
1525
1929
|
var KuaishouAPI = new API();
|
|
1930
|
+
var kuaishouAPI = new API();
|
|
1931
|
+
var kuaishouApiUrls = new API();
|
|
1932
|
+
var registerKuaishouRoutes = (cookie) => {
|
|
1933
|
+
const router = express__default.default.Router();
|
|
1934
|
+
router.get("/fetch_one_work", async (req, res) => {
|
|
1935
|
+
const data2 = await KuaishouData({
|
|
1936
|
+
methodType: "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E",
|
|
1937
|
+
photoId: req.query.photoId
|
|
1938
|
+
}, req.headers.cookie || cookie);
|
|
1939
|
+
res.json(data2);
|
|
1940
|
+
});
|
|
1941
|
+
router.get("/fetch_work_comments", async (req, res) => {
|
|
1942
|
+
const data2 = await KuaishouData({
|
|
1943
|
+
methodType: "\u8BC4\u8BBA\u6570\u636E",
|
|
1944
|
+
photoId: req.query.photoId
|
|
1945
|
+
}, req.headers.cookie || cookie);
|
|
1946
|
+
res.json(data2);
|
|
1947
|
+
});
|
|
1948
|
+
router.get("/fetch_emoji_list", async (req, res) => {
|
|
1949
|
+
const data2 = await KuaishouData({
|
|
1950
|
+
methodType: "Emoji\u6570\u636E"
|
|
1951
|
+
}, req.headers.cookie || cookie);
|
|
1952
|
+
res.json(data2);
|
|
1953
|
+
});
|
|
1954
|
+
return router;
|
|
1955
|
+
};
|
|
1956
|
+
|
|
1957
|
+
// src/platform/kuaishou/KuaishouApi.ts
|
|
1958
|
+
var kuaishou = {
|
|
1959
|
+
/**
|
|
1960
|
+
* 获取单个视频作品数据
|
|
1961
|
+
* @param options 请求参数,包含 photoId 和可选的 typeMode
|
|
1962
|
+
* @param cookie 可选的用户 Cookie
|
|
1963
|
+
* @returns 接口返回的原始数据
|
|
1964
|
+
*/
|
|
1965
|
+
async getWorkInfo(options, cookie) {
|
|
1966
|
+
const data2 = await KuaishouData({ ...options, methodType: "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E" }, cookie);
|
|
1967
|
+
return data2;
|
|
1968
|
+
},
|
|
1969
|
+
/**
|
|
1970
|
+
* 获取评论数据
|
|
1971
|
+
* @param options 请求参数,包含 photoId 和可选的 typeMode
|
|
1972
|
+
* @param cookie 可选的用户 Cookie
|
|
1973
|
+
* @returns 接口返回的原始数据
|
|
1974
|
+
*/
|
|
1975
|
+
async getComments(options, cookie) {
|
|
1976
|
+
const data2 = await KuaishouData({ ...options, methodType: "\u8BC4\u8BBA\u6570\u636E" }, cookie);
|
|
1977
|
+
return data2;
|
|
1978
|
+
},
|
|
1979
|
+
/**
|
|
1980
|
+
* 获取 Emoji 数据
|
|
1981
|
+
* @param options 可选的请求参数 (主要用于 typeMode)
|
|
1982
|
+
* @param cookie 可选的用户 Cookie
|
|
1983
|
+
* @returns 接口返回的原始数据
|
|
1984
|
+
*/
|
|
1985
|
+
async getEmojiList(options, cookie) {
|
|
1986
|
+
const data2 = await KuaishouData({ ...options, methodType: "Emoji\u6570\u636E" }, cookie);
|
|
1987
|
+
return data2;
|
|
1988
|
+
}
|
|
1989
|
+
};
|
|
1990
|
+
|
|
1991
|
+
// src/platform/kuaishou/index.ts
|
|
1992
|
+
var kuaishouUtils = {
|
|
1993
|
+
kuaishouApiUrls,
|
|
1994
|
+
getKuaishouData,
|
|
1995
|
+
api: kuaishou
|
|
1996
|
+
};
|
|
1526
1997
|
|
|
1527
1998
|
// src/platform/kuaishou/getdata.ts
|
|
1528
1999
|
var defheaders3 = {
|
|
@@ -1541,7 +2012,7 @@ var KuaishouData = async (data2, cookie) => {
|
|
|
1541
2012
|
switch (data2.methodType) {
|
|
1542
2013
|
case "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E": {
|
|
1543
2014
|
KusiahouValidateData(data2, ["photoId"]);
|
|
1544
|
-
const body =
|
|
2015
|
+
const body = kuaishouAPI.\u5355\u4E2A\u4F5C\u54C1\u4FE1\u606F({ photoId: data2.photoId });
|
|
1545
2016
|
const VideoData = await GlobalGetData3({
|
|
1546
2017
|
url: body.url,
|
|
1547
2018
|
method: "POST",
|
|
@@ -1553,7 +2024,7 @@ var KuaishouData = async (data2, cookie) => {
|
|
|
1553
2024
|
}
|
|
1554
2025
|
case "\u8BC4\u8BBA\u6570\u636E": {
|
|
1555
2026
|
KusiahouValidateData(data2, ["photoId"]);
|
|
1556
|
-
const body =
|
|
2027
|
+
const body = kuaishouAPI.\u4F5C\u54C1\u8BC4\u8BBA\u4FE1\u606F({ photoId: data2.photoId });
|
|
1557
2028
|
const VideoData = await GlobalGetData3({
|
|
1558
2029
|
url: body.url,
|
|
1559
2030
|
method: "POST",
|
|
@@ -1564,7 +2035,7 @@ var KuaishouData = async (data2, cookie) => {
|
|
|
1564
2035
|
return VideoData;
|
|
1565
2036
|
}
|
|
1566
2037
|
case "Emoji\u6570\u636E": {
|
|
1567
|
-
const body =
|
|
2038
|
+
const body = kuaishouAPI.\u8868\u60C5();
|
|
1568
2039
|
const EmojiData = await GlobalGetData3({
|
|
1569
2040
|
url: body.url,
|
|
1570
2041
|
method: "POST",
|
|
@@ -1574,6 +2045,9 @@ var KuaishouData = async (data2, cookie) => {
|
|
|
1574
2045
|
});
|
|
1575
2046
|
return EmojiData;
|
|
1576
2047
|
}
|
|
2048
|
+
default:
|
|
2049
|
+
logger.warn(`\u672A\u77E5\u7684\u5FEB\u624B\u6570\u636E\u63A5\u53E3\uFF1A\u300C${logger.red(data2.methodType)}\u300D`);
|
|
2050
|
+
return null;
|
|
1577
2051
|
}
|
|
1578
2052
|
};
|
|
1579
2053
|
async function GlobalGetData3(options) {
|
|
@@ -1588,30 +2062,6 @@ async function GlobalGetData3(options) {
|
|
|
1588
2062
|
}
|
|
1589
2063
|
return ResponseData;
|
|
1590
2064
|
}
|
|
1591
|
-
var registerKuaishouRoutes = (cookie) => {
|
|
1592
|
-
const router = express__default.default.Router();
|
|
1593
|
-
router.get("/fetch_one_work", async (req, res) => {
|
|
1594
|
-
const data2 = await KuaishouData({
|
|
1595
|
-
methodType: "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E",
|
|
1596
|
-
photoId: req.query.photoId
|
|
1597
|
-
}, req.headers.cookie || cookie);
|
|
1598
|
-
res.json(data2);
|
|
1599
|
-
});
|
|
1600
|
-
router.get("/fetch_work_comments", async (req, res) => {
|
|
1601
|
-
const data2 = await KuaishouData({
|
|
1602
|
-
methodType: "\u8BC4\u8BBA\u6570\u636E",
|
|
1603
|
-
photoId: req.query.photoId
|
|
1604
|
-
}, req.headers.cookie || cookie);
|
|
1605
|
-
res.json(data2);
|
|
1606
|
-
});
|
|
1607
|
-
router.get("/fetch_emoji_list", async (req, res) => {
|
|
1608
|
-
const data2 = await KuaishouData({
|
|
1609
|
-
methodType: "Emoji\u6570\u636E"
|
|
1610
|
-
}, req.headers.cookie || cookie);
|
|
1611
|
-
res.json(data2);
|
|
1612
|
-
});
|
|
1613
|
-
return router;
|
|
1614
|
-
};
|
|
1615
2065
|
|
|
1616
2066
|
// src/model/DataFetchers.ts
|
|
1617
2067
|
async function getDouyinData(type, arg2, arg3) {
|
|
@@ -1736,17 +2186,21 @@ var CustomLogger = class {
|
|
|
1736
2186
|
}
|
|
1737
2187
|
};
|
|
1738
2188
|
var logger = new CustomLogger("default");
|
|
1739
|
-
var logMiddleware = (
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
2189
|
+
var logMiddleware = (pathsToLog) => {
|
|
2190
|
+
return (req, res, next) => {
|
|
2191
|
+
if (!pathsToLog || pathsToLog.some((path) => req.url.startsWith(path))) {
|
|
2192
|
+
const startTime = Date.now();
|
|
2193
|
+
const url = req.url;
|
|
2194
|
+
const method = req.method;
|
|
2195
|
+
const clientIP = req.headers["x-forwarded-for"] || req.socket.remoteAddress;
|
|
2196
|
+
res.on("finish", () => {
|
|
2197
|
+
const responseTime = Date.now() - startTime;
|
|
2198
|
+
const statusCode = res.statusCode;
|
|
2199
|
+
logger.info(`[${method}] ${url} (Status: ${statusCode}, Time: ${responseTime}ms, Client: ${clientIP})`);
|
|
2200
|
+
});
|
|
2201
|
+
}
|
|
2202
|
+
next();
|
|
2203
|
+
};
|
|
1750
2204
|
};
|
|
1751
2205
|
var Networks = class {
|
|
1752
2206
|
url;
|
|
@@ -1908,7 +2362,7 @@ var KusiahouValidateData = (data2, fields, atLeastOne = false) => {
|
|
|
1908
2362
|
throw new Error(`\u83B7\u53D6\u300C${data2.methodType}\u300D${logger.red("\u7F3A\u5C11\u53C2\u6570")}: ${missingStr}`);
|
|
1909
2363
|
}
|
|
1910
2364
|
};
|
|
1911
|
-
var
|
|
2365
|
+
var amagiClient = class {
|
|
1912
2366
|
douyin;
|
|
1913
2367
|
bilibili;
|
|
1914
2368
|
kuaishou;
|
|
@@ -1935,17 +2389,17 @@ var amagi = class {
|
|
|
1935
2389
|
app.get("/docs", (_req, res) => {
|
|
1936
2390
|
res.redirect(301, "https://amagi.apifox.cn");
|
|
1937
2391
|
});
|
|
1938
|
-
app.use("/api/
|
|
2392
|
+
app.use(logMiddleware(["/api/douyin", "/api/bilibili", "/api/kuaishou"]));
|
|
1939
2393
|
app.use("/api/douyin", registerDouyinRoutes(this.douyin));
|
|
1940
2394
|
app.use("/api/bilibili", registerBilibiliRoutes(this.bilibili));
|
|
1941
|
-
app.use(
|
|
2395
|
+
app.use("/api/kuaishou", registerKuaishouRoutes(this.kuaishou));
|
|
1942
2396
|
app.listen(port, "::", () => {
|
|
1943
2397
|
logger.mark(`Amagi server listening on ${logger.green(`http://localhost:${port}`)} ${logger.yellow("API docs: https://amagi.apifox.cn ")}`);
|
|
1944
2398
|
});
|
|
1945
2399
|
return app;
|
|
1946
2400
|
}
|
|
1947
2401
|
/**
|
|
1948
|
-
*
|
|
2402
|
+
* 快捷获取抖音数据
|
|
1949
2403
|
* @param type - 请求数据类型
|
|
1950
2404
|
* @param options - 请求参数,是一个对象
|
|
1951
2405
|
* @returns 返回接口的原始数据
|
|
@@ -1970,7 +2424,7 @@ var amagi = class {
|
|
|
1970
2424
|
return await getDouyinData(methodType, this.douyin, fullOptions);
|
|
1971
2425
|
};
|
|
1972
2426
|
/**
|
|
1973
|
-
*
|
|
2427
|
+
* 快捷获取B站数据
|
|
1974
2428
|
* @param type - 请求数据类型
|
|
1975
2429
|
* @param options - 请求参数,是一个对象
|
|
1976
2430
|
* @returns 返回接口的原始数据
|
|
@@ -1994,7 +2448,7 @@ var amagi = class {
|
|
|
1994
2448
|
return await getBilibiliData(methodType, this.bilibili, fullOptions);
|
|
1995
2449
|
};
|
|
1996
2450
|
/**
|
|
1997
|
-
*
|
|
2451
|
+
* 快捷获取快手数据
|
|
1998
2452
|
* @param type - 请求数据类型
|
|
1999
2453
|
* @param options - 请求参数,是一个对象
|
|
2000
2454
|
* @returns 返回接口的原始数据
|
|
@@ -2020,33 +2474,44 @@ var amagi = class {
|
|
|
2020
2474
|
};
|
|
2021
2475
|
|
|
2022
2476
|
// src/index.ts
|
|
2023
|
-
var index_default =
|
|
2477
|
+
var index_default = amagiClient;
|
|
2478
|
+
function amagi(options) {
|
|
2479
|
+
return new amagiClient(options);
|
|
2480
|
+
}
|
|
2024
2481
|
function Amagi(options) {
|
|
2025
|
-
return new
|
|
2482
|
+
return new amagiClient(options);
|
|
2026
2483
|
}
|
|
2027
2484
|
|
|
2028
2485
|
exports.Amagi = Amagi;
|
|
2029
|
-
exports.BilibiliData = BilibiliData;
|
|
2030
2486
|
exports.BilibiliValidateData = BilibiliValidateData;
|
|
2031
|
-
exports.DouyinData = DouyinData;
|
|
2032
2487
|
exports.DouyinValidateData = DouyinValidateData;
|
|
2033
2488
|
exports.KuaishouAPI = KuaishouAPI;
|
|
2034
|
-
exports.KuaishouData = KuaishouData;
|
|
2035
2489
|
exports.KusiahouValidateData = KusiahouValidateData;
|
|
2036
2490
|
exports.Networks = Networks;
|
|
2037
2491
|
exports.amagi = amagi;
|
|
2492
|
+
exports.amagiClient = amagiClient;
|
|
2038
2493
|
exports.av2bv = av2bv;
|
|
2494
|
+
exports.bilibili = bilibili;
|
|
2039
2495
|
exports.bilibiliAPI = bilibiliAPI;
|
|
2496
|
+
exports.bilibiliApiUrls = bilibiliApiUrls;
|
|
2497
|
+
exports.bilibiliUtils = bilibiliUtils;
|
|
2040
2498
|
exports.bv2av = bv2av;
|
|
2041
2499
|
exports.default = index_default;
|
|
2500
|
+
exports.douyin = douyin;
|
|
2042
2501
|
exports.douyinAPI = douyinAPI;
|
|
2502
|
+
exports.douyinApiUrls = douyinApiUrls;
|
|
2043
2503
|
exports.douyinSign = douyinSign;
|
|
2504
|
+
exports.douyinUtils = douyinUtils;
|
|
2044
2505
|
exports.fetchBilibiliData = fetchBilibiliData;
|
|
2045
2506
|
exports.fetchDouyinData = fetchDouyinData;
|
|
2046
2507
|
exports.fetchKuaishouData = fetchKuaishouData;
|
|
2047
2508
|
exports.getBilibiliData = getBilibiliData;
|
|
2048
2509
|
exports.getDouyinData = getDouyinData;
|
|
2049
2510
|
exports.getKuaishouData = getKuaishouData;
|
|
2511
|
+
exports.kuaishou = kuaishou;
|
|
2512
|
+
exports.kuaishouAPI = kuaishouAPI;
|
|
2513
|
+
exports.kuaishouApiUrls = kuaishouApiUrls;
|
|
2514
|
+
exports.kuaishouUtils = kuaishouUtils;
|
|
2050
2515
|
exports.logMiddleware = logMiddleware;
|
|
2051
2516
|
exports.logger = logger;
|
|
2052
2517
|
exports.qtparam = qtparam;
|