@ikenxuan/amagi 4.5.2 → 5.0.1
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/dist/default/cjs/index.cjs +957 -627
- package/dist/default/esm/index.mjs +911 -618
- package/dist/default/index.d.ts +16561 -117
- package/package.json +1 -6
- package/dist/default/cjs/v5.cjs +0 -3105
- package/dist/default/esm/v5.mjs +0 -3020
- package/dist/default/index-2b526zmm.d.ts +0 -15752
- package/dist/default/v5.d.ts +0 -766
|
@@ -151,142 +151,49 @@ var logMiddleware = (pathsToLog) => {
|
|
|
151
151
|
next();
|
|
152
152
|
};
|
|
153
153
|
};
|
|
154
|
-
var
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
axiosInstance;
|
|
161
|
-
isGetResult;
|
|
162
|
-
timeout;
|
|
163
|
-
timer;
|
|
164
|
-
data;
|
|
165
|
-
constructor(data2) {
|
|
166
|
-
this.headers = data2.headers ?? {};
|
|
167
|
-
this.url = data2.url ?? "";
|
|
168
|
-
this.type = data2.responseType ?? "json";
|
|
169
|
-
this.method = data2.method ?? "GET";
|
|
170
|
-
this.body = data2.body ?? null;
|
|
171
|
-
this.data = {};
|
|
172
|
-
this.timeout = data2.timeout ?? 15e3;
|
|
173
|
-
this.isGetResult = false;
|
|
174
|
-
this.timer = void 0;
|
|
175
|
-
this.axiosInstance = axios.create({
|
|
176
|
-
timeout: this.timeout,
|
|
177
|
-
headers: this.headers,
|
|
178
|
-
maxRedirects: 5,
|
|
179
|
-
validateStatus: (status) => {
|
|
180
|
-
return status >= 200 && status < 600;
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
get config() {
|
|
185
|
-
let config = {
|
|
186
|
-
url: this.url,
|
|
187
|
-
method: this.method,
|
|
188
|
-
headers: this.headers
|
|
189
|
-
};
|
|
190
|
-
if (this.method === "POST" && this.body) {
|
|
191
|
-
config.data = this.body;
|
|
192
|
-
}
|
|
193
|
-
return config;
|
|
194
|
-
}
|
|
195
|
-
async getfetch() {
|
|
196
|
-
try {
|
|
197
|
-
const result = await this.returnResult();
|
|
198
|
-
if (result.status === 504) {
|
|
199
|
-
return result;
|
|
200
|
-
}
|
|
201
|
-
this.isGetResult = true;
|
|
202
|
-
return result;
|
|
203
|
-
} catch (error) {
|
|
204
|
-
logger.info(error);
|
|
205
|
-
return false;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
async returnResult() {
|
|
209
|
-
return await this.axiosInstance(this.config);
|
|
210
|
-
}
|
|
211
|
-
/** 最终地址(跟随重定向) */
|
|
212
|
-
async getLongLink() {
|
|
213
|
-
try {
|
|
214
|
-
const response = await this.axiosInstance({
|
|
215
|
-
method: "GET",
|
|
216
|
-
url: this.url
|
|
217
|
-
});
|
|
218
|
-
return response.request.res.responseUrl;
|
|
219
|
-
} catch (error) {
|
|
220
|
-
if (error instanceof AxiosError) {
|
|
221
|
-
throw new Error(error.stack);
|
|
222
|
-
}
|
|
223
|
-
return "";
|
|
154
|
+
var fetchData = async (config) => {
|
|
155
|
+
try {
|
|
156
|
+
const response = await axios(config);
|
|
157
|
+
if (response.status === 429) {
|
|
158
|
+
logger.error("HTTP \u54CD\u5E94\u72B6\u6001\u7801: 429");
|
|
159
|
+
throw new Error("ratelimit triggered, \u89E6\u53D1\u901F\u7387\u9650\u5236\uFF01");
|
|
224
160
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
method: "GET",
|
|
231
|
-
url: this.url,
|
|
232
|
-
maxRedirects: 0,
|
|
233
|
-
// 禁止跟随重定向
|
|
234
|
-
validateStatus: (status) => status >= 300 && status < 400
|
|
235
|
-
// 仅处理3xx响应
|
|
236
|
-
});
|
|
237
|
-
return response.headers["location"];
|
|
238
|
-
} catch (error) {
|
|
239
|
-
if (error instanceof AxiosError) {
|
|
240
|
-
throw new Error(error.stack);
|
|
241
|
-
}
|
|
242
|
-
return "";
|
|
161
|
+
return response.data;
|
|
162
|
+
} catch (error) {
|
|
163
|
+
if (error instanceof AxiosError) {
|
|
164
|
+
logger.error("\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25:", error.message);
|
|
165
|
+
throw error;
|
|
243
166
|
}
|
|
167
|
+
throw error;
|
|
244
168
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
}
|
|
253
|
-
if (result.status === 429) {
|
|
254
|
-
logger.error("HTTP \u54CD\u5E94\u72B6\u6001\u7801: 429");
|
|
255
|
-
throw new Error("ratelimit triggered, \u89E6\u53D1 https://www.douyin.com/ \u7684\u901F\u7387\u9650\u5236\uFF01\uFF01\uFF01");
|
|
256
|
-
}
|
|
257
|
-
this.axiosInstance = result;
|
|
258
|
-
this.isGetResult = true;
|
|
259
|
-
} else {
|
|
260
|
-
this.axiosInstance = new_fetch;
|
|
261
|
-
}
|
|
262
|
-
return this.axiosInstance.data;
|
|
263
|
-
} catch (error) {
|
|
264
|
-
if (error instanceof AxiosError) {
|
|
265
|
-
throw new Error(error.stack);
|
|
266
|
-
}
|
|
267
|
-
return false;
|
|
169
|
+
};
|
|
170
|
+
var fetchResponse = async (config) => {
|
|
171
|
+
try {
|
|
172
|
+
return await axios(config);
|
|
173
|
+
} catch (error) {
|
|
174
|
+
if (error instanceof AxiosError) {
|
|
175
|
+
throw error;
|
|
268
176
|
}
|
|
177
|
+
throw new Error("\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25");
|
|
269
178
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
return { headers: null, data: null };
|
|
282
|
-
}
|
|
179
|
+
};
|
|
180
|
+
var getHeadersAndData = async (config) => {
|
|
181
|
+
try {
|
|
182
|
+
const response = await fetchResponse(config);
|
|
183
|
+
return {
|
|
184
|
+
headers: response.headers,
|
|
185
|
+
data: response.data
|
|
186
|
+
};
|
|
187
|
+
} catch (error) {
|
|
188
|
+
logger.error("\u83B7\u53D6\u54CD\u5E94\u5934\u548C\u6570\u636E\u5931\u8D25:", error);
|
|
189
|
+
return { headers: {}, data: {} };
|
|
283
190
|
}
|
|
284
191
|
};
|
|
285
192
|
|
|
286
193
|
// src/platform/bilibili/qtparam.ts
|
|
287
194
|
var qtparam = async (BASEURL, cookie) => {
|
|
288
195
|
if (cookie === "") return { QUERY: "&platform=html5", STATUS: "!isLogin" };
|
|
289
|
-
const logininfo = await
|
|
196
|
+
const logininfo = await fetchData({ url: bilibiliApiUrls.\u767B\u5F55\u57FA\u672C\u4FE1\u606F(), headers: { Cookie: cookie } });
|
|
290
197
|
const sign = await wbi_sign(BASEURL, cookie);
|
|
291
198
|
const qn = [6, 16, 32, 64, 74, 80, 112, 116, 120, 125, 126, 127];
|
|
292
199
|
let isvip;
|
|
@@ -513,43 +420,117 @@ var wbi_sign = async (BASEURL, cookie) => {
|
|
|
513
420
|
return query;
|
|
514
421
|
};
|
|
515
422
|
|
|
423
|
+
// src/platform/defaultConfigs.ts
|
|
424
|
+
var generateSecChUa = (userAgent) => {
|
|
425
|
+
const chromeMatch = userAgent.match(/Chrome\/(\d+)/);
|
|
426
|
+
const chromeVersion = chromeMatch ? chromeMatch[1] : "125";
|
|
427
|
+
return `"Not)A;Brand";v="8", "Chromium";v="${chromeVersion}", "Google Chrome";v="${chromeVersion}"`;
|
|
428
|
+
};
|
|
429
|
+
var getDouyinDefaultConfig = (cookie, requestConfig) => {
|
|
430
|
+
var _a;
|
|
431
|
+
const finalUserAgent = ((_a = void 0 ) == null ? void 0 : _a["User-Agent"]) || "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36";
|
|
432
|
+
const defHeaders = {
|
|
433
|
+
Accept: "application/json, text/plain, */*",
|
|
434
|
+
"Accept-Encoding": "gzip, deflate, br, zstd",
|
|
435
|
+
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
|
|
436
|
+
Cookie: cookie ? cookie.replace(/\s+/g, "") : "",
|
|
437
|
+
Priority: "u=1, i",
|
|
438
|
+
Referer: "https://www.douyin.com/",
|
|
439
|
+
"Sec-Ch-Ua": generateSecChUa(finalUserAgent),
|
|
440
|
+
"Sec-Ch-Ua-Mobile": "?0",
|
|
441
|
+
"Sec-Ch-Ua-Platform": '"Windows"',
|
|
442
|
+
"Sec-Fetch-Dest": "empty",
|
|
443
|
+
"Sec-Fetch-Mode": "cors",
|
|
444
|
+
"Sec-Fetch-Site": "same-origin",
|
|
445
|
+
"User-Agent": finalUserAgent
|
|
446
|
+
};
|
|
447
|
+
return {
|
|
448
|
+
method: "GET",
|
|
449
|
+
timeout: 1e4,
|
|
450
|
+
...requestConfig,
|
|
451
|
+
headers: {
|
|
452
|
+
...defHeaders,
|
|
453
|
+
...{}
|
|
454
|
+
}
|
|
455
|
+
};
|
|
456
|
+
};
|
|
457
|
+
var getBilibiliDefaultConfig = (cookie, requestConfig) => {
|
|
458
|
+
const defHeaders = {
|
|
459
|
+
Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
|
460
|
+
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
|
|
461
|
+
"Cache-Control": "max-age=0",
|
|
462
|
+
Priority: "u=0, i",
|
|
463
|
+
"Sec-Ch-Ua": '"Microsoft Edge";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
|
|
464
|
+
"Sec-Ch-Ua-Mobile": "?0",
|
|
465
|
+
"Sec-Ch-Ua-Platform": '"Windows"',
|
|
466
|
+
"Sec-Fetch-Dest": "document",
|
|
467
|
+
"Sec-Fetch-Mode": "navigate",
|
|
468
|
+
"Sec-Fetch-Site": "none",
|
|
469
|
+
"Sec-Fetch-User": "?1",
|
|
470
|
+
"Upgrade-Insecure-Requests": "1",
|
|
471
|
+
Referer: "https://www.bilibili.com/",
|
|
472
|
+
Cookie: cookie ? cookie.replace(/\s+/g, "") : ""
|
|
473
|
+
};
|
|
474
|
+
return {
|
|
475
|
+
method: "GET",
|
|
476
|
+
timeout: 1e4,
|
|
477
|
+
...requestConfig,
|
|
478
|
+
headers: {
|
|
479
|
+
...defHeaders,
|
|
480
|
+
...{}
|
|
481
|
+
}
|
|
482
|
+
};
|
|
483
|
+
};
|
|
484
|
+
var getKuaishouDefaultConfig = (cookie, requestConfig) => {
|
|
485
|
+
const defHeaders = {
|
|
486
|
+
Referer: "https://www.kuaishou.com/new-reco",
|
|
487
|
+
Origin: "https://www.kuaishou.com",
|
|
488
|
+
Accept: "application/json, text/plain, */*",
|
|
489
|
+
"Accept-Encoding": "gzip, deflate, br, zstd",
|
|
490
|
+
"Content-Type": "application/json",
|
|
491
|
+
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
|
|
492
|
+
Priority: "u=0, i",
|
|
493
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0",
|
|
494
|
+
Cookie: cookie ? cookie.replace(/\s+/g, "") : ""
|
|
495
|
+
};
|
|
496
|
+
return {
|
|
497
|
+
method: "POST",
|
|
498
|
+
timeout: 1e4,
|
|
499
|
+
...requestConfig,
|
|
500
|
+
headers: {
|
|
501
|
+
...defHeaders,
|
|
502
|
+
...{}
|
|
503
|
+
}
|
|
504
|
+
};
|
|
505
|
+
};
|
|
506
|
+
|
|
516
507
|
// src/platform/bilibili/getdata.ts
|
|
517
|
-
var
|
|
518
|
-
|
|
519
|
-
"
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
"sec-fetch-user": "?1",
|
|
529
|
-
"upgrade-insecure-requests": "1",
|
|
530
|
-
referer: "https://www.bilibili.com/"
|
|
531
|
-
};
|
|
532
|
-
var fetchBilibili = async (data2, cookie) => {
|
|
533
|
-
var _a, _b, _c;
|
|
534
|
-
const headers2 = {
|
|
535
|
-
...defheaders,
|
|
536
|
-
cookie: cookie ? cookie.replace(/\s+/g, "") : ""
|
|
508
|
+
var fetchBilibili = async (data2, cookie, requestConfig) => {
|
|
509
|
+
var _a, _b, _c, _d, _e, _f;
|
|
510
|
+
const defHeaders = getBilibiliDefaultConfig(cookie)["headers"];
|
|
511
|
+
const baseRequestConfig = {
|
|
512
|
+
method: "GET",
|
|
513
|
+
timeout: 1e4,
|
|
514
|
+
...requestConfig,
|
|
515
|
+
headers: {
|
|
516
|
+
...defHeaders,
|
|
517
|
+
...{}
|
|
518
|
+
}
|
|
537
519
|
};
|
|
538
520
|
switch (data2.methodType) {
|
|
539
521
|
case "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E": {
|
|
540
|
-
const INFODATA = await GlobalGetData({
|
|
541
|
-
|
|
542
|
-
|
|
522
|
+
const INFODATA = await GlobalGetData(data2.methodType, {
|
|
523
|
+
...baseRequestConfig,
|
|
524
|
+
url: bilibiliApiUrls.\u89C6\u9891\u8BE6\u7EC6\u4FE1\u606F({ bvid: data2.bvid })
|
|
543
525
|
});
|
|
544
526
|
return INFODATA;
|
|
545
527
|
}
|
|
546
528
|
case "\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E": {
|
|
547
529
|
const BASEURL = bilibiliApiUrls.\u89C6\u9891\u6D41\u4FE1\u606F({ avid: data2.avid, cid: data2.cid });
|
|
548
|
-
const SIGN = await qtparam(BASEURL,
|
|
549
|
-
const DATA = await GlobalGetData({
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
...data2
|
|
530
|
+
const SIGN = await qtparam(BASEURL, (_a = baseRequestConfig.headers) == null ? void 0 : _a.cookie);
|
|
531
|
+
const DATA = await GlobalGetData(data2.methodType, {
|
|
532
|
+
...baseRequestConfig,
|
|
533
|
+
url: bilibiliApiUrls.\u89C6\u9891\u6D41\u4FE1\u606F({ avid: data2.avid, cid: data2.cid }) + SIGN.QUERY
|
|
553
534
|
});
|
|
554
535
|
return DATA;
|
|
555
536
|
}
|
|
@@ -562,10 +543,9 @@ var fetchBilibili = async (data2, cookie) => {
|
|
|
562
543
|
let nextPaginationStr = pagination_str;
|
|
563
544
|
let isEnd = false;
|
|
564
545
|
const checkStatusUrl = bilibiliApiUrls.\u8BC4\u8BBA\u533A\u72B6\u6001({ oid, type });
|
|
565
|
-
const checkStatusRes = await GlobalGetData({
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
...data2
|
|
546
|
+
const checkStatusRes = await GlobalGetData(data2.methodType, {
|
|
547
|
+
...baseRequestConfig,
|
|
548
|
+
url: checkStatusUrl
|
|
569
549
|
});
|
|
570
550
|
if (checkStatusRes.data === null) {
|
|
571
551
|
logger.error("\u8BC4\u8BBA\u533A\u672A\u5F00\u653E");
|
|
@@ -585,18 +565,17 @@ var fetchBilibili = async (data2, cookie) => {
|
|
|
585
565
|
seek_rpid,
|
|
586
566
|
web_location: web_location ?? "1315875"
|
|
587
567
|
});
|
|
588
|
-
const wbiSignQuery = await wbi_sign(baseUrl,
|
|
568
|
+
const wbiSignQuery = await wbi_sign(baseUrl, (_b = baseRequestConfig.headers) == null ? void 0 : _b.cookie);
|
|
589
569
|
const finalUrl = baseUrl + wbiSignQuery;
|
|
590
|
-
const response = await GlobalGetData({
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
...data2
|
|
570
|
+
const response = await GlobalGetData(data2.methodType, {
|
|
571
|
+
...baseRequestConfig,
|
|
572
|
+
url: finalUrl
|
|
594
573
|
});
|
|
595
574
|
tmpresp = response;
|
|
596
|
-
const currentComments = ((
|
|
575
|
+
const currentComments = ((_c = response.data) == null ? void 0 : _c.replies) || [];
|
|
597
576
|
fetchedComments.push(...currentComments);
|
|
598
|
-
if ((
|
|
599
|
-
nextPaginationStr = (
|
|
577
|
+
if ((_d = response.data) == null ? void 0 : _d.cursor) {
|
|
578
|
+
nextPaginationStr = (_e = response.data.cursor.pagination_reply) == null ? void 0 : _e.next_offset;
|
|
600
579
|
isEnd = response.data.cursor.is_end;
|
|
601
580
|
} else {
|
|
602
581
|
isEnd = true;
|
|
@@ -618,9 +597,9 @@ var fetchBilibili = async (data2, cookie) => {
|
|
|
618
597
|
return finalResponse;
|
|
619
598
|
}
|
|
620
599
|
case "Emoji\u6570\u636E": {
|
|
621
|
-
return await GlobalGetData({
|
|
622
|
-
|
|
623
|
-
|
|
600
|
+
return await GlobalGetData(data2.methodType, {
|
|
601
|
+
...baseRequestConfig,
|
|
602
|
+
url: bilibiliApiUrls.\u8868\u60C5\u5217\u8868()
|
|
624
603
|
});
|
|
625
604
|
}
|
|
626
605
|
case "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E": {
|
|
@@ -630,106 +609,121 @@ var fetchBilibili = async (data2, cookie) => {
|
|
|
630
609
|
}
|
|
631
610
|
const idType = id ? id.startsWith("ep") ? "ep_id" : "season_id" : "ep_id";
|
|
632
611
|
const newId = idType === "ep_id" ? id.replace("ep", "") : id.replace("ss", "");
|
|
633
|
-
const INFO = await GlobalGetData({
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
...data2
|
|
612
|
+
const INFO = await GlobalGetData(data2.methodType, {
|
|
613
|
+
...baseRequestConfig,
|
|
614
|
+
url: bilibiliApiUrls.\u756A\u5267\u660E\u7EC6({ [idType]: newId })
|
|
637
615
|
});
|
|
638
616
|
return INFO;
|
|
639
617
|
}
|
|
640
618
|
case "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E": {
|
|
641
619
|
const BASEURL = bilibiliApiUrls.\u756A\u5267\u89C6\u9891\u6D41\u4FE1\u606F({ cid: data2.cid, ep_id: data2.ep_id.replace("ep", "") });
|
|
642
|
-
const SIGN = await qtparam(BASEURL,
|
|
643
|
-
const DATA = await GlobalGetData({
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
...data2
|
|
620
|
+
const SIGN = await qtparam(BASEURL, (_f = baseRequestConfig.headers) == null ? void 0 : _f.cookie);
|
|
621
|
+
const DATA = await GlobalGetData(data2.methodType, {
|
|
622
|
+
...baseRequestConfig,
|
|
623
|
+
url: bilibiliApiUrls.\u756A\u5267\u89C6\u9891\u6D41\u4FE1\u606F({ cid: data2.cid, ep_id: data2.ep_id.replace("ep", "") }) + SIGN.QUERY
|
|
647
624
|
});
|
|
648
625
|
return DATA;
|
|
649
626
|
}
|
|
650
627
|
case "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E": {
|
|
651
|
-
|
|
628
|
+
const customConfig = {
|
|
629
|
+
...baseRequestConfig,
|
|
630
|
+
headers: {
|
|
631
|
+
...baseRequestConfig.headers,
|
|
632
|
+
// 只有在外部配置没有referer时才删除内部的referer
|
|
633
|
+
...{
|
|
634
|
+
referer: void 0
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
};
|
|
652
638
|
const { host_mid } = data2;
|
|
653
|
-
const result = await GlobalGetData({
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
...data2
|
|
639
|
+
const result = await GlobalGetData(data2.methodType, {
|
|
640
|
+
...customConfig,
|
|
641
|
+
url: bilibiliApiUrls.\u7528\u6237\u7A7A\u95F4\u52A8\u6001({ host_mid })
|
|
657
642
|
});
|
|
658
643
|
return result;
|
|
659
644
|
}
|
|
660
645
|
case "\u52A8\u6001\u8BE6\u60C5\u6570\u636E": {
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
646
|
+
const customConfig = {
|
|
647
|
+
...baseRequestConfig,
|
|
648
|
+
headers: {
|
|
649
|
+
...baseRequestConfig.headers,
|
|
650
|
+
// 只有在外部配置没有referer时才删除内部的referer
|
|
651
|
+
...{
|
|
652
|
+
referer: void 0
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
};
|
|
656
|
+
const dynamicINFO = await GlobalGetData(data2.methodType, {
|
|
657
|
+
...customConfig,
|
|
658
|
+
url: bilibiliApiUrls.\u52A8\u6001\u8BE6\u60C5({ dynamic_id: data2.dynamic_id })
|
|
666
659
|
});
|
|
667
660
|
return dynamicINFO;
|
|
668
661
|
}
|
|
669
662
|
case "\u52A8\u6001\u5361\u7247\u6570\u636E": {
|
|
670
|
-
|
|
663
|
+
const customConfig = {
|
|
664
|
+
...baseRequestConfig,
|
|
665
|
+
headers: {
|
|
666
|
+
...baseRequestConfig.headers,
|
|
667
|
+
// 只有在外部配置没有referer时才删除内部的referer
|
|
668
|
+
...{
|
|
669
|
+
referer: void 0
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
};
|
|
671
673
|
const { dynamic_id } = data2;
|
|
672
|
-
const dynamicINFO_CARD = await GlobalGetData({
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
...data2
|
|
674
|
+
const dynamicINFO_CARD = await GlobalGetData(data2.methodType, {
|
|
675
|
+
...customConfig,
|
|
676
|
+
url: bilibiliApiUrls.\u52A8\u6001\u5361\u7247\u4FE1\u606F({ dynamic_id })
|
|
676
677
|
});
|
|
677
678
|
return dynamicINFO_CARD;
|
|
678
679
|
}
|
|
679
680
|
case "\u7528\u6237\u4E3B\u9875\u6570\u636E": {
|
|
680
681
|
const { host_mid } = data2;
|
|
681
|
-
const result = await GlobalGetData({
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
...data2
|
|
682
|
+
const result = await GlobalGetData(data2.methodType, {
|
|
683
|
+
...baseRequestConfig,
|
|
684
|
+
url: bilibiliApiUrls.\u7528\u6237\u540D\u7247\u4FE1\u606F({ host_mid })
|
|
685
685
|
});
|
|
686
686
|
return result;
|
|
687
687
|
}
|
|
688
688
|
case "\u76F4\u64AD\u95F4\u4FE1\u606F": {
|
|
689
|
-
const result = await GlobalGetData({
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
...data2
|
|
689
|
+
const result = await GlobalGetData(data2.methodType, {
|
|
690
|
+
...baseRequestConfig,
|
|
691
|
+
url: bilibiliApiUrls.\u76F4\u64AD\u95F4\u4FE1\u606F({ room_id: data2.room_id })
|
|
693
692
|
});
|
|
694
693
|
return result;
|
|
695
694
|
}
|
|
696
695
|
case "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F": {
|
|
697
|
-
const result = await GlobalGetData({
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
...data2
|
|
696
|
+
const result = await GlobalGetData(data2.methodType, {
|
|
697
|
+
...baseRequestConfig,
|
|
698
|
+
url: bilibiliApiUrls.\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F({ room_id: data2.room_id })
|
|
701
699
|
});
|
|
702
700
|
return result;
|
|
703
701
|
}
|
|
704
702
|
case "\u7533\u8BF7\u4E8C\u7EF4\u7801": {
|
|
705
|
-
const result = await GlobalGetData({
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
...data2
|
|
703
|
+
const result = await GlobalGetData(data2.methodType, {
|
|
704
|
+
...baseRequestConfig,
|
|
705
|
+
url: bilibiliApiUrls.\u7533\u8BF7\u4E8C\u7EF4\u7801()
|
|
709
706
|
});
|
|
710
707
|
return result;
|
|
711
708
|
}
|
|
712
709
|
case "\u4E8C\u7EF4\u7801\u72B6\u6001": {
|
|
713
|
-
const result = await
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
}).getHeadersAndData();
|
|
710
|
+
const result = await getHeadersAndData({
|
|
711
|
+
...baseRequestConfig,
|
|
712
|
+
url: bilibiliApiUrls.\u4E8C\u7EF4\u7801\u72B6\u6001({ qrcode_key: data2.qrcode_key })
|
|
713
|
+
});
|
|
718
714
|
return result;
|
|
719
715
|
}
|
|
720
716
|
case "\u767B\u5F55\u57FA\u672C\u4FE1\u606F": {
|
|
721
|
-
const result = await GlobalGetData({
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
...data2
|
|
717
|
+
const result = await GlobalGetData(data2.methodType, {
|
|
718
|
+
...baseRequestConfig,
|
|
719
|
+
url: bilibiliApiUrls.\u767B\u5F55\u57FA\u672C\u4FE1\u606F()
|
|
725
720
|
});
|
|
726
721
|
return result;
|
|
727
722
|
}
|
|
728
723
|
case "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF": {
|
|
729
|
-
const result = await GlobalGetData({
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
...data2
|
|
724
|
+
const result = await GlobalGetData(data2.methodType, {
|
|
725
|
+
...baseRequestConfig,
|
|
726
|
+
url: bilibiliApiUrls.\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF({ host_mid: data2.host_mid })
|
|
733
727
|
});
|
|
734
728
|
return result;
|
|
735
729
|
}
|
|
@@ -758,19 +752,19 @@ var fetchBilibili = async (data2, cookie) => {
|
|
|
758
752
|
return null;
|
|
759
753
|
}
|
|
760
754
|
};
|
|
761
|
-
var GlobalGetData = async (options) => {
|
|
755
|
+
var GlobalGetData = async (type, options) => {
|
|
762
756
|
let warningMessage = "";
|
|
763
757
|
try {
|
|
764
|
-
const result = await
|
|
758
|
+
const result = await fetchData(options);
|
|
765
759
|
if (!result || result === "") {
|
|
766
760
|
const Err = {
|
|
767
761
|
errorDescription: "\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u4F60\u7684B\u7AD9ck\u53EF\u80FD\u5DF2\u7ECF\u5931\u6548\uFF01",
|
|
768
|
-
requestType:
|
|
762
|
+
requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
|
|
769
763
|
requestUrl: options.url
|
|
770
764
|
};
|
|
771
765
|
warningMessage = `
|
|
772
766
|
\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${logger.yellow("\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u4F60\u7684B\u7AD9ck\u53EF\u80FD\u5DF2\u7ECF\u5931\u6548\uFF01")}
|
|
773
|
-
\u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${
|
|
767
|
+
\u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
|
|
774
768
|
\u8BF7\u6C42URL\uFF1A${options.url}
|
|
775
769
|
`;
|
|
776
770
|
logger.warn(warningMessage);
|
|
@@ -784,13 +778,13 @@ var GlobalGetData = async (options) => {
|
|
|
784
778
|
const errorMessage = bilibiliErrorCodeMap[result.code] || result.message || "\u672A\u77E5\u9519\u8BEF";
|
|
785
779
|
const Err = {
|
|
786
780
|
errorDescription: `\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${errorMessage}\uFF01`,
|
|
787
|
-
requestType:
|
|
781
|
+
requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
|
|
788
782
|
requestUrl: options.url
|
|
789
783
|
};
|
|
790
784
|
warningMessage = `
|
|
791
785
|
\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${logger.yellow(errorMessage)}
|
|
792
786
|
\u9519\u8BEF\u4EE3\u7801\uFF1A${result.code}
|
|
793
|
-
\u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${
|
|
787
|
+
\u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
|
|
794
788
|
\u8BF7\u6C42URL\uFF1A${options.url}
|
|
795
789
|
`;
|
|
796
790
|
logger.warn(warningMessage);
|
|
@@ -811,7 +805,7 @@ var GlobalGetData = async (options) => {
|
|
|
811
805
|
data: error.data,
|
|
812
806
|
amagiError: {
|
|
813
807
|
errorDescription: "\u672A\u77E5\u9519\u8BEF",
|
|
814
|
-
requestType:
|
|
808
|
+
requestType: type,
|
|
815
809
|
requestUrl: options.url
|
|
816
810
|
},
|
|
817
811
|
amagiMessage: warningMessage
|
|
@@ -1225,9 +1219,7 @@ var a_bogus_default = (url, user_agent) => {
|
|
|
1225
1219
|
};
|
|
1226
1220
|
|
|
1227
1221
|
// src/platform/douyin/sign/index.ts
|
|
1228
|
-
var
|
|
1229
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
|
|
1230
|
-
};
|
|
1222
|
+
var defaultUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36";
|
|
1231
1223
|
var douyinSign = class {
|
|
1232
1224
|
/**
|
|
1233
1225
|
* 生成一个指定长度的随机字符串
|
|
@@ -1244,8 +1236,8 @@ var douyinSign = class {
|
|
|
1244
1236
|
* @param url 需要签名的地址
|
|
1245
1237
|
* @returns 对此地址签名后的URL查询参数
|
|
1246
1238
|
*/
|
|
1247
|
-
static AB(url) {
|
|
1248
|
-
return a_bogus_default(url,
|
|
1239
|
+
static AB(url, userAgent) {
|
|
1240
|
+
return a_bogus_default(url, userAgent || defaultUserAgent);
|
|
1249
1241
|
}
|
|
1250
1242
|
/** 生成一个唯一的验证字符串 */
|
|
1251
1243
|
static VerifyFpManager() {
|
|
@@ -1269,160 +1261,530 @@ var douyinSign = class {
|
|
|
1269
1261
|
};
|
|
1270
1262
|
|
|
1271
1263
|
// src/platform/douyin/API.ts
|
|
1264
|
+
var extractBrowserVersion = (userAgent) => {
|
|
1265
|
+
if (!userAgent) return "125.0.0.0";
|
|
1266
|
+
const chromeMatch = userAgent.match(/Chrome\/(\d+\.\d+\.\d+\.\d+)/);
|
|
1267
|
+
if (chromeMatch) {
|
|
1268
|
+
return chromeMatch[1];
|
|
1269
|
+
}
|
|
1270
|
+
const edgeMatch = userAgent.match(/Edg\/(\d+\.\d+\.\d+\.\d+)/);
|
|
1271
|
+
if (edgeMatch) {
|
|
1272
|
+
return edgeMatch[1];
|
|
1273
|
+
}
|
|
1274
|
+
return "125.0.0.0";
|
|
1275
|
+
};
|
|
1276
|
+
var buildQueryString = (params) => {
|
|
1277
|
+
return Object.entries(params).filter(([_, value]) => value !== void 0 && value !== null).map(([key, value]) => `${key}=${encodeURIComponent(value)}`).join("&");
|
|
1278
|
+
};
|
|
1272
1279
|
var fp = douyinSign.VerifyFpManager();
|
|
1273
1280
|
var DouyinAPI = class {
|
|
1281
|
+
browserVersion;
|
|
1282
|
+
/**
|
|
1283
|
+
* 构造函数
|
|
1284
|
+
* @param userAgent - 用户代理字符串,用于提取浏览器版本信息
|
|
1285
|
+
*/
|
|
1286
|
+
constructor(userAgent) {
|
|
1287
|
+
this.browserVersion = extractBrowserVersion(userAgent);
|
|
1288
|
+
}
|
|
1289
|
+
/**
|
|
1290
|
+
* 获取通用的基础参数
|
|
1291
|
+
* @returns 通用基础参数对象
|
|
1292
|
+
*/
|
|
1293
|
+
getBaseParams() {
|
|
1294
|
+
return {
|
|
1295
|
+
device_platform: "webapp",
|
|
1296
|
+
aid: "6383",
|
|
1297
|
+
channel: "channel_pc_web",
|
|
1298
|
+
pc_client_type: "1",
|
|
1299
|
+
cookie_enabled: "true",
|
|
1300
|
+
browser_language: "zh-CN",
|
|
1301
|
+
browser_platform: "Win32",
|
|
1302
|
+
browser_name: "Chrome",
|
|
1303
|
+
browser_version: this.browserVersion,
|
|
1304
|
+
browser_online: "true",
|
|
1305
|
+
engine_name: "Blink",
|
|
1306
|
+
engine_version: this.browserVersion,
|
|
1307
|
+
os_name: "Windows",
|
|
1308
|
+
os_version: "10",
|
|
1309
|
+
cpu_core_num: "16",
|
|
1310
|
+
device_memory: "8",
|
|
1311
|
+
platform: "PC",
|
|
1312
|
+
downlink: "10",
|
|
1313
|
+
effective_type: "4g",
|
|
1314
|
+
msToken: douyinSign.Mstoken(116),
|
|
1315
|
+
verifyFp: fp,
|
|
1316
|
+
fp
|
|
1317
|
+
};
|
|
1318
|
+
}
|
|
1319
|
+
/**
|
|
1320
|
+
* 获取视频或图集数据的接口地址
|
|
1321
|
+
* @param data - 请求参数,包含aweme_id
|
|
1322
|
+
* @returns 完整的接口URL
|
|
1323
|
+
*/
|
|
1274
1324
|
\u89C6\u9891\u6216\u56FE\u96C6(data2) {
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1325
|
+
const baseUrl = "https://www.douyin.com/aweme/v1/web/aweme/detail/";
|
|
1326
|
+
const params = {
|
|
1327
|
+
...this.getBaseParams(),
|
|
1328
|
+
aweme_id: data2.aweme_id,
|
|
1329
|
+
update_version_code: "170400",
|
|
1330
|
+
version_code: "190500",
|
|
1331
|
+
version_name: "19.5.0",
|
|
1332
|
+
screen_width: "2328",
|
|
1333
|
+
screen_height: "1310",
|
|
1334
|
+
round_trip_time: "150",
|
|
1335
|
+
webid: "7351848354471872041"
|
|
1336
|
+
};
|
|
1337
|
+
return `${baseUrl}?${buildQueryString(params)}`;
|
|
1278
1338
|
}
|
|
1339
|
+
/**
|
|
1340
|
+
* 获取评论数据的接口地址
|
|
1341
|
+
* @param data - 请求参数,包含aweme_id、cursor、number等
|
|
1342
|
+
* @returns 完整的接口URL
|
|
1343
|
+
*/
|
|
1279
1344
|
\u8BC4\u8BBA(data2) {
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1345
|
+
const baseUrl = "https://www.douyin.com/aweme/v1/web/comment/list/";
|
|
1346
|
+
const params = {
|
|
1347
|
+
...this.getBaseParams(),
|
|
1348
|
+
aweme_id: data2.aweme_id,
|
|
1349
|
+
cursor: data2.cursor ?? 0,
|
|
1350
|
+
count: data2.number ?? 50,
|
|
1351
|
+
item_type: "0",
|
|
1352
|
+
insert_ids: "",
|
|
1353
|
+
whale_cut_token: "",
|
|
1354
|
+
cut_version: "1",
|
|
1355
|
+
rcFT: "",
|
|
1356
|
+
version_code: "170400",
|
|
1357
|
+
version_name: "17.4.0",
|
|
1358
|
+
screen_width: "1552",
|
|
1359
|
+
screen_height: "970",
|
|
1360
|
+
round_trip_time: "50"
|
|
1361
|
+
};
|
|
1362
|
+
return `${baseUrl}?${buildQueryString(params)}`;
|
|
1283
1363
|
}
|
|
1364
|
+
/**
|
|
1365
|
+
* 获取二级评论数据的接口地址
|
|
1366
|
+
* @param data - 请求参数,包含aweme_id、comment_id等
|
|
1367
|
+
* @returns 完整的接口URL
|
|
1368
|
+
*/
|
|
1284
1369
|
\u4E8C\u7EA7\u8BC4\u8BBA(data2) {
|
|
1285
|
-
|
|
1370
|
+
const baseUrl = "https://www.douyin.com/aweme/v1/web/comment/list/reply/";
|
|
1371
|
+
const params = {
|
|
1372
|
+
device_platform: "webapp",
|
|
1373
|
+
aid: "6383",
|
|
1374
|
+
channel: "channel_pc_web",
|
|
1375
|
+
item_id: data2.aweme_id,
|
|
1376
|
+
comment_id: data2.comment_id,
|
|
1377
|
+
cut_version: "1",
|
|
1378
|
+
cursor: data2.cursor,
|
|
1379
|
+
count: data2.number,
|
|
1380
|
+
item_type: "0",
|
|
1381
|
+
update_version_code: "170400",
|
|
1382
|
+
pc_client_type: "1",
|
|
1383
|
+
pc_libra_divert: "Windows",
|
|
1384
|
+
support_h265: "1",
|
|
1385
|
+
support_dash: "1",
|
|
1386
|
+
version_code: "170400",
|
|
1387
|
+
version_name: "17.4.0",
|
|
1388
|
+
cookie_enabled: "true",
|
|
1389
|
+
screen_width: "1552",
|
|
1390
|
+
screen_height: "970",
|
|
1391
|
+
browser_language: "zh-CN",
|
|
1392
|
+
browser_platform: "Win32",
|
|
1393
|
+
browser_name: "Edge",
|
|
1394
|
+
browser_version: "132.0.0.0",
|
|
1395
|
+
browser_online: "true",
|
|
1396
|
+
engine_name: "Blink",
|
|
1397
|
+
engine_version: "132.0.0.0",
|
|
1398
|
+
os_name: "Windows",
|
|
1399
|
+
os_version: "10",
|
|
1400
|
+
cpu_core_num: "16",
|
|
1401
|
+
device_memory: "8",
|
|
1402
|
+
platform: "PC",
|
|
1403
|
+
downlink: "10",
|
|
1404
|
+
effective_type: "4g",
|
|
1405
|
+
round_trip_time: "50",
|
|
1406
|
+
webid: "7386217876267796006",
|
|
1407
|
+
verifyFp: fp,
|
|
1408
|
+
fp
|
|
1409
|
+
};
|
|
1410
|
+
return `${baseUrl}?${buildQueryString(params)}`;
|
|
1286
1411
|
}
|
|
1412
|
+
/**
|
|
1413
|
+
* 获取动图数据的接口地址
|
|
1414
|
+
* @param data - 请求参数,包含aweme_id
|
|
1415
|
+
* @returns 完整的接口URL
|
|
1416
|
+
*/
|
|
1287
1417
|
\u52A8\u56FE(data2) {
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1418
|
+
const baseUrl = "https://www.iesdouyin.com/web/api/v2/aweme/slidesinfo/";
|
|
1419
|
+
const params = {
|
|
1420
|
+
reflow_source: "reflow_page",
|
|
1421
|
+
web_id: "7326472315356857893",
|
|
1422
|
+
device_id: "7326472315356857893",
|
|
1423
|
+
aweme_ids: `[${data2.aweme_id}]`,
|
|
1424
|
+
request_source: "200",
|
|
1425
|
+
msToken: douyinSign.Mstoken(116),
|
|
1426
|
+
verifyFp: fp,
|
|
1427
|
+
fp
|
|
1428
|
+
};
|
|
1429
|
+
return `${baseUrl}?${buildQueryString(params)}`;
|
|
1291
1430
|
}
|
|
1431
|
+
/**
|
|
1432
|
+
* 获取表情数据的接口地址
|
|
1433
|
+
* @returns 完整的接口URL
|
|
1434
|
+
*/
|
|
1292
1435
|
\u8868\u60C5() {
|
|
1293
1436
|
return "https://www.douyin.com/aweme/v1/web/emoji/list";
|
|
1294
1437
|
}
|
|
1438
|
+
/**
|
|
1439
|
+
* 获取用户主页视频数据的接口地址
|
|
1440
|
+
* @param data - 请求参数,包含sec_uid
|
|
1441
|
+
* @returns 完整的接口URL
|
|
1442
|
+
*/
|
|
1295
1443
|
\u7528\u6237\u4E3B\u9875\u89C6\u9891(data2) {
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1444
|
+
const baseUrl = "https://www.douyin.com/aweme/v1/web/aweme/post/";
|
|
1445
|
+
const params = {
|
|
1446
|
+
...this.getBaseParams(),
|
|
1447
|
+
sec_user_id: data2.sec_uid,
|
|
1448
|
+
max_cursor: "0",
|
|
1449
|
+
locate_query: "false",
|
|
1450
|
+
show_live_replay_strategy: "1",
|
|
1451
|
+
need_time_list: "1",
|
|
1452
|
+
time_list_query: "0",
|
|
1453
|
+
whale_cut_token: "",
|
|
1454
|
+
cut_version: "1",
|
|
1455
|
+
count: "18",
|
|
1456
|
+
publish_video_strategy_type: "2",
|
|
1457
|
+
version_code: "170400",
|
|
1458
|
+
version_name: "17.4.0",
|
|
1459
|
+
screen_width: "1552",
|
|
1460
|
+
screen_height: "970",
|
|
1461
|
+
round_trip_time: "50",
|
|
1462
|
+
webid: "7338423850134226495"
|
|
1463
|
+
};
|
|
1464
|
+
return `${baseUrl}?${buildQueryString(params)}`;
|
|
1299
1465
|
}
|
|
1466
|
+
/**
|
|
1467
|
+
* 获取用户主页信息的接口地址
|
|
1468
|
+
* @param data - 请求参数,包含sec_uid
|
|
1469
|
+
* @returns 完整的接口URL
|
|
1470
|
+
*/
|
|
1300
1471
|
\u7528\u6237\u4E3B\u9875\u4FE1\u606F(data2) {
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1472
|
+
const baseUrl = "https://www.douyin.com/aweme/v1/web/user/profile/other/";
|
|
1473
|
+
const params = {
|
|
1474
|
+
...this.getBaseParams(),
|
|
1475
|
+
publish_video_strategy_type: "2",
|
|
1476
|
+
source: "channel_pc_web",
|
|
1477
|
+
sec_user_id: data2.sec_uid,
|
|
1478
|
+
personal_center_strategy: "1",
|
|
1479
|
+
version_code: "170400",
|
|
1480
|
+
version_name: "17.4.0",
|
|
1481
|
+
screen_width: "1552",
|
|
1482
|
+
screen_height: "970",
|
|
1483
|
+
round_trip_time: "0",
|
|
1484
|
+
webid: "7327957959955580467"
|
|
1485
|
+
};
|
|
1486
|
+
return `${baseUrl}?${buildQueryString(params)}`;
|
|
1304
1487
|
}
|
|
1488
|
+
/**
|
|
1489
|
+
* 获取热点词数据的接口地址
|
|
1490
|
+
* @param data - 请求参数,包含query
|
|
1491
|
+
* @returns 完整的接口URL
|
|
1492
|
+
*/
|
|
1305
1493
|
\u70ED\u70B9\u8BCD(data2) {
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1494
|
+
const baseUrl = "https://www.douyin.com/aweme/v1/web/api/suggest_words/";
|
|
1495
|
+
const params = {
|
|
1496
|
+
...this.getBaseParams(),
|
|
1497
|
+
query: data2.query,
|
|
1498
|
+
business_id: "30088",
|
|
1499
|
+
from_group_id: "7129543174929812767",
|
|
1500
|
+
version_code: "170400",
|
|
1501
|
+
version_name: "17.4.0",
|
|
1502
|
+
screen_width: "1552",
|
|
1503
|
+
screen_height: "970",
|
|
1504
|
+
round_trip_time: "50",
|
|
1505
|
+
webid: "7327957959955580467"
|
|
1506
|
+
};
|
|
1507
|
+
return `${baseUrl}?${buildQueryString(params)}`;
|
|
1309
1508
|
}
|
|
1509
|
+
/**
|
|
1510
|
+
* 获取搜索数据的接口地址
|
|
1511
|
+
* @param data - 请求参数,包含query、number、search_id等
|
|
1512
|
+
* @returns 完整的接口URL
|
|
1513
|
+
*/
|
|
1310
1514
|
\u641C\u7D22(data2) {
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1515
|
+
const baseUrl = "https://www.douyin.com/aweme/v1/web/general/search/single/";
|
|
1516
|
+
const params = {
|
|
1517
|
+
...this.getBaseParams(),
|
|
1518
|
+
search_channel: "aweme_general",
|
|
1519
|
+
sort_type: "0",
|
|
1520
|
+
publish_time: "0",
|
|
1521
|
+
keyword: data2.query,
|
|
1522
|
+
search_source: "normal_search",
|
|
1523
|
+
query_correct_type: "1",
|
|
1524
|
+
is_filter_search: "0",
|
|
1525
|
+
from_group_id: "",
|
|
1526
|
+
offset: "0",
|
|
1527
|
+
version_code: "190600",
|
|
1528
|
+
version_name: "19.6.0",
|
|
1529
|
+
screen_width: "1552",
|
|
1530
|
+
screen_height: "970",
|
|
1531
|
+
round_trip_time: "50",
|
|
1532
|
+
webid: "7338423850134226495",
|
|
1533
|
+
search_id: data2.search_id ?? "",
|
|
1534
|
+
count: data2.number ?? 10
|
|
1535
|
+
};
|
|
1536
|
+
return `${baseUrl}?${buildQueryString(params)}`;
|
|
1314
1537
|
}
|
|
1538
|
+
/**
|
|
1539
|
+
* 获取互动表情数据的接口地址
|
|
1540
|
+
* @returns 完整的接口URL
|
|
1541
|
+
*/
|
|
1315
1542
|
\u4E92\u52A8\u8868\u60C5() {
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1543
|
+
const baseUrl = "https://www.douyin.com/aweme/v1/web/im/strategy/config";
|
|
1544
|
+
const params = {
|
|
1545
|
+
device_platform: "webapp",
|
|
1546
|
+
aid: "1128",
|
|
1547
|
+
channel: "channel_pc_web",
|
|
1548
|
+
publish_video_strategy_type: "2",
|
|
1549
|
+
app_id: "1128",
|
|
1550
|
+
scenes: "[%22interactive_resources%22]",
|
|
1551
|
+
pc_client_type: "1",
|
|
1552
|
+
version_code: "170400",
|
|
1553
|
+
version_name: "17.4.0",
|
|
1554
|
+
cookie_enabled: "true",
|
|
1555
|
+
screen_width: "2328",
|
|
1556
|
+
screen_height: "1310",
|
|
1557
|
+
browser_language: "zh-CN",
|
|
1558
|
+
browser_platform: "Win32",
|
|
1559
|
+
browser_name: "Chrome",
|
|
1560
|
+
browser_version: "126.0.0.0",
|
|
1561
|
+
browser_online: "true",
|
|
1562
|
+
engine_name: "Blink",
|
|
1563
|
+
engine_version: "126.0.0.0",
|
|
1564
|
+
os_name: "Windows",
|
|
1565
|
+
os_version: "10",
|
|
1566
|
+
cpu_core_num: "16",
|
|
1567
|
+
device_memory: "8",
|
|
1568
|
+
platform: "PC",
|
|
1569
|
+
downlink: "1.5",
|
|
1570
|
+
effective_type: "4g",
|
|
1571
|
+
round_trip_time: "350",
|
|
1572
|
+
webid: "7347329698282833447",
|
|
1573
|
+
msToken: douyinSign.Mstoken(116),
|
|
1574
|
+
verifyFp: fp,
|
|
1575
|
+
fp
|
|
1576
|
+
};
|
|
1577
|
+
return `${baseUrl}?${buildQueryString(params)}`;
|
|
1319
1578
|
}
|
|
1579
|
+
/**
|
|
1580
|
+
* 获取背景音乐数据的接口地址
|
|
1581
|
+
* @param data - 请求参数,包含music_id
|
|
1582
|
+
* @returns 完整的接口URL
|
|
1583
|
+
*/
|
|
1320
1584
|
\u80CC\u666F\u97F3\u4E50(data2) {
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1585
|
+
const baseUrl = "https://www.douyin.com/aweme/v1/web/music/detail/";
|
|
1586
|
+
const params = {
|
|
1587
|
+
device_platform: "webapp",
|
|
1588
|
+
aid: "6383",
|
|
1589
|
+
channel: "channel_pc_web",
|
|
1590
|
+
music_id: data2.music_id,
|
|
1591
|
+
scene: "1",
|
|
1592
|
+
pc_client_type: "1",
|
|
1593
|
+
version_code: "170400",
|
|
1594
|
+
version_name: "17.4.0",
|
|
1595
|
+
cookie_enabled: "true",
|
|
1596
|
+
screen_width: "2328",
|
|
1597
|
+
screen_height: "1310",
|
|
1598
|
+
browser_language: "zh-CN",
|
|
1599
|
+
browser_platform: "Win32",
|
|
1600
|
+
browser_name: "Chrome",
|
|
1601
|
+
browser_version: "126.0.0.0",
|
|
1602
|
+
browser_online: "true",
|
|
1603
|
+
engine_name: "Blink",
|
|
1604
|
+
engine_version: "126.0.0.0",
|
|
1605
|
+
os_name: "Windows",
|
|
1606
|
+
os_version: "10",
|
|
1607
|
+
cpu_core_num: "16",
|
|
1608
|
+
device_memory: "8",
|
|
1609
|
+
platform: "PC",
|
|
1610
|
+
downlink: "1.5",
|
|
1611
|
+
effective_type: "4g",
|
|
1612
|
+
round_trip_time: "350",
|
|
1613
|
+
webid: "7347329698282833447",
|
|
1614
|
+
msToken: douyinSign.Mstoken(116),
|
|
1615
|
+
verifyFp: fp,
|
|
1616
|
+
fp
|
|
1617
|
+
};
|
|
1618
|
+
return `${baseUrl}?${buildQueryString(params)}`;
|
|
1324
1619
|
}
|
|
1620
|
+
/**
|
|
1621
|
+
* 获取直播间信息的接口地址
|
|
1622
|
+
* @param data - 请求参数,包含web_rid、room_id
|
|
1623
|
+
* @returns 完整的接口URL
|
|
1624
|
+
*/
|
|
1325
1625
|
\u76F4\u64AD\u95F4\u4FE1\u606F(data2) {
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1626
|
+
const baseUrl = "https://live.douyin.com/webcast/room/web/enter/";
|
|
1627
|
+
const params = {
|
|
1628
|
+
aid: "6383",
|
|
1629
|
+
app_name: "douyin_web",
|
|
1630
|
+
live_id: "1",
|
|
1631
|
+
device_platform: "web",
|
|
1632
|
+
language: "zh-CN",
|
|
1633
|
+
enter_from: "web_share_link",
|
|
1634
|
+
cookie_enabled: "true",
|
|
1635
|
+
screen_width: "2048",
|
|
1636
|
+
screen_height: "1152",
|
|
1637
|
+
browser_language: "zh-CN",
|
|
1638
|
+
browser_platform: "Win32",
|
|
1639
|
+
browser_name: "Chrome",
|
|
1640
|
+
browser_version: "125.0.0.0",
|
|
1641
|
+
web_rid: data2.web_rid,
|
|
1642
|
+
room_id_str: data2.room_id,
|
|
1643
|
+
enter_source: "",
|
|
1644
|
+
is_need_double_stream: "false",
|
|
1645
|
+
insert_task_id: "",
|
|
1646
|
+
live_reason: "",
|
|
1647
|
+
msToken: douyinSign.Mstoken(116),
|
|
1648
|
+
verifyFp: fp,
|
|
1649
|
+
fp
|
|
1650
|
+
};
|
|
1651
|
+
return `${baseUrl}?${buildQueryString(params)}`;
|
|
1329
1652
|
}
|
|
1653
|
+
/**
|
|
1654
|
+
* 获取申请二维码的接口地址
|
|
1655
|
+
* @param data - 请求参数,包含verify_fp
|
|
1656
|
+
* @returns 完整的接口URL
|
|
1657
|
+
*/
|
|
1330
1658
|
\u7533\u8BF7\u4E8C\u7EF4\u7801(data2) {
|
|
1331
|
-
|
|
1659
|
+
const baseUrl = "https://sso.douyin.com/get_qrcode/";
|
|
1660
|
+
const params = {
|
|
1661
|
+
verifyFp: data2.verify_fp,
|
|
1662
|
+
fp: data2.verify_fp
|
|
1663
|
+
};
|
|
1664
|
+
return `${baseUrl}?${buildQueryString(params)}`;
|
|
1332
1665
|
}
|
|
1333
1666
|
};
|
|
1667
|
+
var createDouyinApiUrls = (userAgent) => {
|
|
1668
|
+
return new DouyinAPI(userAgent);
|
|
1669
|
+
};
|
|
1334
1670
|
var douyinApiUrls = new DouyinAPI();
|
|
1335
1671
|
|
|
1336
1672
|
// src/platform/douyin/getdata.ts
|
|
1337
|
-
var
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
}
|
|
1347
|
-
|
|
1348
|
-
var _a, _b;
|
|
1349
|
-
const headers2 = {
|
|
1350
|
-
...defheaders2,
|
|
1351
|
-
cookie: cookie ? cookie.replace(/\s+/g, "") : ""
|
|
1673
|
+
var DouyinData = async (data2, cookie, requestConfig) => {
|
|
1674
|
+
var _a, _b, _c, _d, _e;
|
|
1675
|
+
const defHeaders = getDouyinDefaultConfig(cookie)["headers"];
|
|
1676
|
+
const baseRequestConfig = {
|
|
1677
|
+
method: "GET",
|
|
1678
|
+
timeout: 1e4,
|
|
1679
|
+
...requestConfig,
|
|
1680
|
+
headers: {
|
|
1681
|
+
...defHeaders,
|
|
1682
|
+
...(requestConfig == null ? void 0 : requestConfig.headers) || {}
|
|
1683
|
+
}
|
|
1352
1684
|
};
|
|
1685
|
+
const userAgent = (_a = baseRequestConfig.headers) == null ? void 0 : _a["User-Agent"];
|
|
1686
|
+
const douyinApiUrls3 = createDouyinApiUrls(userAgent);
|
|
1353
1687
|
switch (data2.methodType) {
|
|
1354
1688
|
case "\u805A\u5408\u89E3\u6790":
|
|
1355
1689
|
case "\u89C6\u9891\u4F5C\u54C1\u6570\u636E":
|
|
1356
1690
|
case "\u56FE\u96C6\u4F5C\u54C1\u6570\u636E":
|
|
1357
1691
|
case "\u5408\u8F91\u4F5C\u54C1\u6570\u636E": {
|
|
1358
|
-
const url =
|
|
1359
|
-
const VideoData = await GlobalGetData2({
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
...data2
|
|
1692
|
+
const url = douyinApiUrls3.\u89C6\u9891\u6216\u56FE\u96C6({ aweme_id: data2.aweme_id });
|
|
1693
|
+
const VideoData = await GlobalGetData2(data2.methodType, {
|
|
1694
|
+
...baseRequestConfig,
|
|
1695
|
+
url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
|
|
1363
1696
|
});
|
|
1364
1697
|
return VideoData;
|
|
1365
1698
|
}
|
|
1366
1699
|
case "\u8BC4\u8BBA\u6570\u636E": {
|
|
1367
|
-
const urlGenerator = (params) =>
|
|
1368
|
-
const response = await fetchPaginatedData(
|
|
1700
|
+
const urlGenerator = (params) => douyinApiUrls3.\u8BC4\u8BBA(params);
|
|
1701
|
+
const response = await fetchPaginatedData(
|
|
1702
|
+
data2.methodType,
|
|
1703
|
+
urlGenerator,
|
|
1704
|
+
data2,
|
|
1705
|
+
50,
|
|
1706
|
+
baseRequestConfig
|
|
1707
|
+
);
|
|
1369
1708
|
return response;
|
|
1370
1709
|
}
|
|
1371
1710
|
case "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E": {
|
|
1372
|
-
const urlGenerator = (params) =>
|
|
1711
|
+
const urlGenerator = (params) => douyinApiUrls3.\u4E8C\u7EA7\u8BC4\u8BBA(params);
|
|
1712
|
+
const customConfig = {
|
|
1713
|
+
...baseRequestConfig,
|
|
1714
|
+
headers: {
|
|
1715
|
+
...baseRequestConfig.headers,
|
|
1716
|
+
// 只有在外部配置没有referer时才设置内部的referer
|
|
1717
|
+
...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("referer" in requestConfig.headers)) && {
|
|
1718
|
+
referer: `https://www.douyin.com/note/${data2.aweme_id}`
|
|
1719
|
+
}
|
|
1720
|
+
}
|
|
1721
|
+
};
|
|
1373
1722
|
const response = await fetchPaginatedData(
|
|
1723
|
+
data2.methodType,
|
|
1374
1724
|
urlGenerator,
|
|
1375
1725
|
data2,
|
|
1376
1726
|
3,
|
|
1377
|
-
|
|
1378
|
-
...headers2,
|
|
1379
|
-
referer: `https://www.douyin.com/note/${data2.aweme_id}`
|
|
1380
|
-
}
|
|
1727
|
+
customConfig
|
|
1381
1728
|
);
|
|
1382
1729
|
return response;
|
|
1383
1730
|
}
|
|
1384
1731
|
case "\u7528\u6237\u4E3B\u9875\u6570\u636E": {
|
|
1385
|
-
const url =
|
|
1386
|
-
const
|
|
1387
|
-
|
|
1732
|
+
const url = douyinApiUrls3.\u7528\u6237\u4E3B\u9875\u4FE1\u606F({ sec_uid: data2.sec_uid });
|
|
1733
|
+
const customConfig = {
|
|
1734
|
+
...baseRequestConfig,
|
|
1388
1735
|
headers: {
|
|
1389
|
-
...
|
|
1390
|
-
Referer
|
|
1391
|
-
|
|
1392
|
-
|
|
1736
|
+
...baseRequestConfig.headers,
|
|
1737
|
+
// 只有在外部配置没有Referer时才设置内部的Referer
|
|
1738
|
+
...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
|
|
1739
|
+
Referer: `https://www.douyin.com/user/${data2.sec_uid}`
|
|
1740
|
+
}
|
|
1741
|
+
}
|
|
1742
|
+
};
|
|
1743
|
+
const UserInfoData = await GlobalGetData2(data2.methodType, {
|
|
1744
|
+
...customConfig,
|
|
1745
|
+
url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
|
|
1393
1746
|
});
|
|
1394
1747
|
return UserInfoData;
|
|
1395
1748
|
}
|
|
1396
1749
|
case "Emoji\u6570\u636E": {
|
|
1397
|
-
const url =
|
|
1398
|
-
const EmojiData = await GlobalGetData2({
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
...data2
|
|
1750
|
+
const url = douyinApiUrls3.\u8868\u60C5();
|
|
1751
|
+
const EmojiData = await GlobalGetData2(data2.methodType, {
|
|
1752
|
+
...baseRequestConfig,
|
|
1753
|
+
url
|
|
1402
1754
|
});
|
|
1403
1755
|
return EmojiData;
|
|
1404
1756
|
}
|
|
1405
1757
|
case "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E": {
|
|
1406
|
-
const url =
|
|
1407
|
-
const
|
|
1408
|
-
|
|
1758
|
+
const url = douyinApiUrls3.\u7528\u6237\u4E3B\u9875\u89C6\u9891({ sec_uid: data2.sec_uid });
|
|
1759
|
+
const customConfig = {
|
|
1760
|
+
...baseRequestConfig,
|
|
1409
1761
|
headers: {
|
|
1410
|
-
...
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1762
|
+
...baseRequestConfig.headers,
|
|
1763
|
+
...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
|
|
1764
|
+
Referer: `https://www.douyin.com/user/${data2.sec_uid}`
|
|
1765
|
+
}
|
|
1766
|
+
}
|
|
1767
|
+
};
|
|
1768
|
+
const UserVideoListData = await GlobalGetData2(data2.methodType, {
|
|
1769
|
+
...customConfig,
|
|
1770
|
+
url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
|
|
1414
1771
|
});
|
|
1415
1772
|
return UserVideoListData;
|
|
1416
1773
|
}
|
|
1417
1774
|
case "\u70ED\u70B9\u8BCD\u6570\u636E": {
|
|
1418
|
-
const url =
|
|
1419
|
-
const
|
|
1420
|
-
|
|
1775
|
+
const url = douyinApiUrls3.\u70ED\u70B9\u8BCD({ query: data2.query, number: data2.number ?? 10 });
|
|
1776
|
+
const customConfig = {
|
|
1777
|
+
...baseRequestConfig,
|
|
1421
1778
|
headers: {
|
|
1422
|
-
...
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1779
|
+
...baseRequestConfig.headers,
|
|
1780
|
+
...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
|
|
1781
|
+
Referer: `https://www.douyin.com/search/${encodeURIComponent(String(data2.query))}`
|
|
1782
|
+
}
|
|
1783
|
+
}
|
|
1784
|
+
};
|
|
1785
|
+
const SuggestWordsData = await GlobalGetData2(data2.methodType, {
|
|
1786
|
+
...customConfig,
|
|
1787
|
+
url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
|
|
1426
1788
|
});
|
|
1427
1789
|
return SuggestWordsData;
|
|
1428
1790
|
}
|
|
@@ -1431,22 +1793,27 @@ var DouyinData = async (data2, cookie) => {
|
|
|
1431
1793
|
const maxPageSize = 15;
|
|
1432
1794
|
let fetchedSearchList = [];
|
|
1433
1795
|
let tmpresp = {};
|
|
1796
|
+
const customConfig = {
|
|
1797
|
+
...baseRequestConfig,
|
|
1798
|
+
headers: {
|
|
1799
|
+
...baseRequestConfig.headers,
|
|
1800
|
+
...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
|
|
1801
|
+
Referer: `https://www.douyin.com/search/${encodeURIComponent(String(data2.query))}`
|
|
1802
|
+
}
|
|
1803
|
+
}
|
|
1804
|
+
};
|
|
1434
1805
|
while (fetchedSearchList.length < Number(data2.number ?? 10)) {
|
|
1435
1806
|
const requestCount = Math.min(Number(data2.number ?? 50) - fetchedSearchList.length, maxPageSize);
|
|
1436
|
-
const url =
|
|
1807
|
+
const url = douyinApiUrls3.\u641C\u7D22({
|
|
1437
1808
|
query: data2.query,
|
|
1438
1809
|
number: requestCount,
|
|
1439
1810
|
search_id: search_id === "" ? void 0 : search_id
|
|
1440
1811
|
});
|
|
1441
|
-
const response = await GlobalGetData2({
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
...headers2,
|
|
1445
|
-
Referer: `https://www.douyin.com/search/${encodeURIComponent(String(data2.query))}`
|
|
1446
|
-
},
|
|
1447
|
-
...data2
|
|
1812
|
+
const response = await GlobalGetData2(data2.methodType, {
|
|
1813
|
+
...customConfig,
|
|
1814
|
+
url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
|
|
1448
1815
|
});
|
|
1449
|
-
if (response.data.length === 0) {
|
|
1816
|
+
if (((_b = response.data) == null ? void 0 : _b.length) === 0) {
|
|
1450
1817
|
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);
|
|
1451
1818
|
return false;
|
|
1452
1819
|
}
|
|
@@ -1455,7 +1822,7 @@ var DouyinData = async (data2, cookie) => {
|
|
|
1455
1822
|
}
|
|
1456
1823
|
fetchedSearchList.push(...response.data);
|
|
1457
1824
|
tmpresp = response;
|
|
1458
|
-
search_id = response.log_pb.impr_id;
|
|
1825
|
+
search_id = (_c = response.log_pb) == null ? void 0 : _c.impr_id;
|
|
1459
1826
|
}
|
|
1460
1827
|
const finalResponse = {
|
|
1461
1828
|
...tmpresp,
|
|
@@ -1464,36 +1831,39 @@ var DouyinData = async (data2, cookie) => {
|
|
|
1464
1831
|
return finalResponse;
|
|
1465
1832
|
}
|
|
1466
1833
|
case "\u52A8\u6001\u8868\u60C5\u6570\u636E": {
|
|
1467
|
-
const url =
|
|
1468
|
-
const ExpressionPlusData = await GlobalGetData2({
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
...data2
|
|
1834
|
+
const url = douyinApiUrls3.\u4E92\u52A8\u8868\u60C5();
|
|
1835
|
+
const ExpressionPlusData = await GlobalGetData2(data2.methodType, {
|
|
1836
|
+
...baseRequestConfig,
|
|
1837
|
+
url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
|
|
1472
1838
|
});
|
|
1473
1839
|
return ExpressionPlusData;
|
|
1474
1840
|
}
|
|
1475
1841
|
case "\u97F3\u4E50\u6570\u636E": {
|
|
1476
|
-
const url =
|
|
1477
|
-
const MusicData = await GlobalGetData2({
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
...data2
|
|
1842
|
+
const url = douyinApiUrls3.\u80CC\u666F\u97F3\u4E50({ music_id: data2.music_id });
|
|
1843
|
+
const MusicData = await GlobalGetData2(data2.methodType, {
|
|
1844
|
+
...baseRequestConfig,
|
|
1845
|
+
url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
|
|
1481
1846
|
});
|
|
1482
1847
|
return MusicData;
|
|
1483
1848
|
}
|
|
1484
1849
|
case "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E": {
|
|
1485
|
-
let url =
|
|
1486
|
-
const fetchUrl = `${url}&a_bogus=${douyinSign.AB(url)}`;
|
|
1487
|
-
const
|
|
1488
|
-
|
|
1850
|
+
let url = douyinApiUrls3.\u7528\u6237\u4E3B\u9875\u4FE1\u606F({ sec_uid: data2.sec_uid });
|
|
1851
|
+
const fetchUrl = `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`;
|
|
1852
|
+
const customConfig = {
|
|
1853
|
+
...baseRequestConfig,
|
|
1489
1854
|
headers: {
|
|
1490
|
-
...
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1855
|
+
...baseRequestConfig.headers,
|
|
1856
|
+
...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
|
|
1857
|
+
Referer: `https://www.douyin.com/user/${data2.sec_uid}`
|
|
1858
|
+
}
|
|
1859
|
+
}
|
|
1860
|
+
};
|
|
1861
|
+
const UserInfoData = await GlobalGetData2(data2.methodType, {
|
|
1862
|
+
...customConfig,
|
|
1863
|
+
url: fetchUrl
|
|
1494
1864
|
});
|
|
1495
|
-
if (!((
|
|
1496
|
-
logger.error((((
|
|
1865
|
+
if (!((_d = UserInfoData == null ? void 0 : UserInfoData.user) == null ? void 0 : _d.live_status) || UserInfoData.user.live_status !== 1) {
|
|
1866
|
+
logger.error((((_e = UserInfoData == null ? void 0 : UserInfoData.user) == null ? void 0 : _e.nickname) || "\u7528\u6237") + "\u5F53\u524D\u672A\u5728\u76F4\u64AD");
|
|
1497
1867
|
const Err = {
|
|
1498
1868
|
errorDescription: "\u68C0\u67E5\u5931\u8D25\uFF01\u8BE5\u7528\u6237\u5F53\u524D\u672A\u5728\u76F4\u64AD\uFF01 TypeError: Cannot read properties of undefined (reading 'live_status')",
|
|
1499
1869
|
requestType: data2.methodType ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
|
|
@@ -1515,35 +1885,42 @@ var DouyinData = async (data2, cookie) => {
|
|
|
1515
1885
|
};
|
|
1516
1886
|
}
|
|
1517
1887
|
const room_data = JSON.parse(UserInfoData.user.room_data);
|
|
1518
|
-
url =
|
|
1519
|
-
const
|
|
1520
|
-
|
|
1888
|
+
url = douyinApiUrls3.\u76F4\u64AD\u95F4\u4FE1\u606F({ room_id: UserInfoData.user.room_id_str, web_rid: room_data.owner.web_rid });
|
|
1889
|
+
const liveCustomConfig = {
|
|
1890
|
+
...baseRequestConfig,
|
|
1521
1891
|
headers: {
|
|
1522
|
-
...
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1892
|
+
...baseRequestConfig.headers,
|
|
1893
|
+
...(!(requestConfig == null ? void 0 : requestConfig.headers) || !("Referer" in requestConfig.headers)) && {
|
|
1894
|
+
Referer: `https://live.douyin.com/${room_data.owner.web_rid}`
|
|
1895
|
+
}
|
|
1896
|
+
}
|
|
1897
|
+
};
|
|
1898
|
+
const LiveRoomData = await GlobalGetData2(data2.methodType, {
|
|
1899
|
+
...liveCustomConfig,
|
|
1900
|
+
url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
|
|
1526
1901
|
});
|
|
1527
1902
|
return LiveRoomData;
|
|
1528
1903
|
}
|
|
1529
1904
|
case "\u7533\u8BF7\u4E8C\u7EF4\u7801\u6570\u636E": {
|
|
1530
|
-
const url =
|
|
1531
|
-
const LoginQrcodeStatusData = await GlobalGetData2({
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
...data2
|
|
1905
|
+
const url = douyinApiUrls3.\u7533\u8BF7\u4E8C\u7EF4\u7801({ verify_fp: data2.verify_fp });
|
|
1906
|
+
const LoginQrcodeStatusData = await GlobalGetData2(data2.methodType, {
|
|
1907
|
+
...baseRequestConfig,
|
|
1908
|
+
url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
|
|
1535
1909
|
});
|
|
1536
1910
|
return LoginQrcodeStatusData;
|
|
1537
1911
|
}
|
|
1538
|
-
default:
|
|
1539
|
-
logger.warn(`\u672A\u77E5\
|
|
1912
|
+
default: {
|
|
1913
|
+
logger.warn(`\u672A\u77E5\u7684\u6296\u97F3\u6570\u636E\u63A5\u53E3\uFF1A\u300C${logger.red(data2.methodType)}\u300D`);
|
|
1540
1914
|
return null;
|
|
1915
|
+
}
|
|
1541
1916
|
}
|
|
1542
1917
|
};
|
|
1543
|
-
var fetchPaginatedData = async (apiUrlGenerator, params, maxPageSize,
|
|
1918
|
+
var fetchPaginatedData = async (type, apiUrlGenerator, params, maxPageSize, requestConfig) => {
|
|
1919
|
+
var _a;
|
|
1544
1920
|
let cursor = params.cursor ?? 0;
|
|
1545
1921
|
let fetchedData = [];
|
|
1546
1922
|
let tmpresp = {};
|
|
1923
|
+
const userAgent = (_a = requestConfig.headers) == null ? void 0 : _a["User-Agent"];
|
|
1547
1924
|
while (fetchedData.length < Number(params.number ?? maxPageSize)) {
|
|
1548
1925
|
const requestCount = Math.min(Number(params.number ?? maxPageSize) - fetchedData.length, maxPageSize);
|
|
1549
1926
|
const url = apiUrlGenerator({
|
|
@@ -1551,10 +1928,9 @@ var fetchPaginatedData = async (apiUrlGenerator, params, maxPageSize, headers2)
|
|
|
1551
1928
|
number: requestCount,
|
|
1552
1929
|
cursor
|
|
1553
1930
|
});
|
|
1554
|
-
const response = await GlobalGetData2({
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
...params
|
|
1931
|
+
const response = await GlobalGetData2(type, {
|
|
1932
|
+
...requestConfig,
|
|
1933
|
+
url: `${url}&a_bogus=${douyinSign.AB(url, userAgent)}`
|
|
1558
1934
|
});
|
|
1559
1935
|
fetchedData.push(...response.comments || response.data || []);
|
|
1560
1936
|
tmpresp = response;
|
|
@@ -1570,20 +1946,20 @@ var fetchPaginatedData = async (apiUrlGenerator, params, maxPageSize, headers2)
|
|
|
1570
1946
|
};
|
|
1571
1947
|
return finalResponse;
|
|
1572
1948
|
};
|
|
1573
|
-
var GlobalGetData2 = async (
|
|
1949
|
+
var GlobalGetData2 = async (type, config) => {
|
|
1574
1950
|
let warningMessage = "";
|
|
1575
1951
|
try {
|
|
1576
|
-
const result = await
|
|
1952
|
+
const result = await fetchData(config);
|
|
1577
1953
|
if (!result || result === "") {
|
|
1578
1954
|
const Err = {
|
|
1579
1955
|
errorDescription: "\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u4F60\u7684\u6296\u97F3ck\u53EF\u80FD\u5DF2\u7ECF\u5931\u6548\uFF01",
|
|
1580
|
-
requestType:
|
|
1581
|
-
requestUrl:
|
|
1956
|
+
requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
|
|
1957
|
+
requestUrl: config.url
|
|
1582
1958
|
};
|
|
1583
1959
|
warningMessage = `
|
|
1584
1960
|
\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${logger.yellow("\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u4F60\u7684\u6296\u97F3ck\u53EF\u80FD\u5DF2\u7ECF\u5931\u6548\uFF01")}
|
|
1585
|
-
\u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${
|
|
1586
|
-
\u8BF7\u6C42URL\uFF1A${
|
|
1961
|
+
\u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
|
|
1962
|
+
\u8BF7\u6C42URL\uFF1A${config.url}
|
|
1587
1963
|
`;
|
|
1588
1964
|
logger.warn(warningMessage);
|
|
1589
1965
|
throw {
|
|
@@ -1596,13 +1972,13 @@ var GlobalGetData2 = async (options) => {
|
|
|
1596
1972
|
const filterReason = result.filter_detail.filter_reason;
|
|
1597
1973
|
const Err = {
|
|
1598
1974
|
errorDescription: `\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${filterReason}\uFF01`,
|
|
1599
|
-
requestType:
|
|
1600
|
-
requestUrl:
|
|
1975
|
+
requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
|
|
1976
|
+
requestUrl: config.url
|
|
1601
1977
|
};
|
|
1602
1978
|
warningMessage = `
|
|
1603
1979
|
\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${logger.yellow(filterReason)}
|
|
1604
|
-
\u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${
|
|
1605
|
-
\u8BF7\u6C42URL\uFF1A${
|
|
1980
|
+
\u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
|
|
1981
|
+
\u8BF7\u6C42URL\uFF1A${config.url}
|
|
1606
1982
|
`;
|
|
1607
1983
|
logger.warn(warningMessage);
|
|
1608
1984
|
throw {
|
|
@@ -1622,8 +1998,8 @@ var GlobalGetData2 = async (options) => {
|
|
|
1622
1998
|
data: null,
|
|
1623
1999
|
amagiError: {
|
|
1624
2000
|
errorDescription: "\u672A\u77E5\u9519\u8BEF",
|
|
1625
|
-
requestType:
|
|
1626
|
-
requestUrl:
|
|
2001
|
+
requestType: type,
|
|
2002
|
+
requestUrl: config.url
|
|
1627
2003
|
},
|
|
1628
2004
|
amagiMessage: warningMessage
|
|
1629
2005
|
};
|
|
@@ -1680,50 +2056,42 @@ var API = class {
|
|
|
1680
2056
|
var kuaishouApiUrls = new API();
|
|
1681
2057
|
|
|
1682
2058
|
// src/platform/kuaishou/getdata.ts
|
|
1683
|
-
var
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
...defheaders3,
|
|
1694
|
-
cookie: cookie ? cookie.replace(/\s+/g, "") : ""
|
|
2059
|
+
var KuaishouData = async (data2, cookie, requestConfig) => {
|
|
2060
|
+
const defHeaders = getKuaishouDefaultConfig(cookie)["headers"];
|
|
2061
|
+
const baseRequestConfig = {
|
|
2062
|
+
method: "POST",
|
|
2063
|
+
timeout: 1e4,
|
|
2064
|
+
...requestConfig,
|
|
2065
|
+
headers: {
|
|
2066
|
+
...defHeaders,
|
|
2067
|
+
...{}
|
|
2068
|
+
}
|
|
1695
2069
|
};
|
|
1696
2070
|
switch (data2.methodType) {
|
|
1697
2071
|
case "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E": {
|
|
1698
2072
|
const body = kuaishouApiUrls.\u5355\u4E2A\u4F5C\u54C1\u4FE1\u606F({ photoId: data2.photoId });
|
|
1699
|
-
const VideoData = await GlobalGetData3({
|
|
2073
|
+
const VideoData = await GlobalGetData3(data2.methodType, {
|
|
2074
|
+
...baseRequestConfig,
|
|
1700
2075
|
url: body.url,
|
|
1701
|
-
|
|
1702
|
-
headers: headers2,
|
|
1703
|
-
body: body.body,
|
|
1704
|
-
...data2
|
|
2076
|
+
data: body.body
|
|
1705
2077
|
});
|
|
1706
2078
|
return VideoData;
|
|
1707
2079
|
}
|
|
1708
2080
|
case "\u8BC4\u8BBA\u6570\u636E": {
|
|
1709
2081
|
const body = kuaishouApiUrls.\u4F5C\u54C1\u8BC4\u8BBA\u4FE1\u606F({ photoId: data2.photoId });
|
|
1710
|
-
const VideoData = await GlobalGetData3({
|
|
2082
|
+
const VideoData = await GlobalGetData3(data2.methodType, {
|
|
2083
|
+
...baseRequestConfig,
|
|
1711
2084
|
url: body.url,
|
|
1712
|
-
|
|
1713
|
-
headers: headers2,
|
|
1714
|
-
body: body.body,
|
|
1715
|
-
...data2
|
|
2085
|
+
data: body.body
|
|
1716
2086
|
});
|
|
1717
2087
|
return VideoData;
|
|
1718
2088
|
}
|
|
1719
2089
|
case "Emoji\u6570\u636E": {
|
|
1720
2090
|
const body = kuaishouApiUrls.\u8868\u60C5();
|
|
1721
|
-
const EmojiData = await GlobalGetData3({
|
|
2091
|
+
const EmojiData = await GlobalGetData3(data2.methodType, {
|
|
2092
|
+
...baseRequestConfig,
|
|
1722
2093
|
url: body.url,
|
|
1723
|
-
|
|
1724
|
-
headers: headers2,
|
|
1725
|
-
body: body.body,
|
|
1726
|
-
...data2
|
|
2094
|
+
data: body.body
|
|
1727
2095
|
});
|
|
1728
2096
|
return EmojiData;
|
|
1729
2097
|
}
|
|
@@ -1732,22 +2100,22 @@ var KuaishouData = async (data2, cookie) => {
|
|
|
1732
2100
|
return null;
|
|
1733
2101
|
}
|
|
1734
2102
|
};
|
|
1735
|
-
var GlobalGetData3 = async (options) => {
|
|
2103
|
+
var GlobalGetData3 = async (type, options) => {
|
|
1736
2104
|
let warningMessage = "";
|
|
1737
2105
|
try {
|
|
1738
|
-
const result = await
|
|
2106
|
+
const result = await fetchData(options);
|
|
1739
2107
|
if (result === "" || !result || result.result === 2) {
|
|
1740
2108
|
const Err = {
|
|
1741
2109
|
errorDescription: `\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF01`,
|
|
1742
|
-
requestType:
|
|
2110
|
+
requestType: type ?? "\u672A\u77E5\u8BF7\u6C42\u7C7B\u578B",
|
|
1743
2111
|
requestUrl: options.url,
|
|
1744
|
-
requestBody: JSON.stringify(options.
|
|
2112
|
+
requestBody: JSON.stringify(options.data)
|
|
1745
2113
|
};
|
|
1746
2114
|
warningMessage = `
|
|
1747
2115
|
\u83B7\u53D6\u54CD\u5E94\u6570\u636E\u5931\u8D25\uFF01\u539F\u56E0\uFF1A${logger.yellow("\u63A5\u53E3\u8FD4\u56DE\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u4F60\u7684\u5FEB\u624Bck\u53EF\u80FD\u5DF2\u7ECF\u5931\u6548\uFF01")}
|
|
1748
|
-
\u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${
|
|
2116
|
+
\u8BF7\u6C42\u7C7B\u578B\uFF1A\u300C${type}\u300D
|
|
1749
2117
|
\u8BF7\u6C42URL\uFF1A${options.url}
|
|
1750
|
-
\u8BF7\u6C42\u53C2\u6570\uFF1A${JSON.stringify(options.
|
|
2118
|
+
\u8BF7\u6C42\u53C2\u6570\uFF1A${JSON.stringify(options.data, null, 2)}
|
|
1751
2119
|
`;
|
|
1752
2120
|
logger.warn(warningMessage);
|
|
1753
2121
|
throw {
|
|
@@ -1767,7 +2135,7 @@ var GlobalGetData3 = async (options) => {
|
|
|
1767
2135
|
data: null,
|
|
1768
2136
|
amagiError: {
|
|
1769
2137
|
errorDescription: "\u672A\u77E5\u9519\u8BEF",
|
|
1770
|
-
requestType:
|
|
2138
|
+
requestType: type,
|
|
1771
2139
|
requestUrl: options.url
|
|
1772
2140
|
},
|
|
1773
2141
|
amagiMessage: warningMessage
|
|
@@ -1991,23 +2359,26 @@ var createErrorResponse = (error, message, code = 500) => {
|
|
|
1991
2359
|
};
|
|
1992
2360
|
|
|
1993
2361
|
// src/model/DataFetchers.ts
|
|
1994
|
-
async function getDouyinData(methodType, optionsOrCookie, cookieOrOptions) {
|
|
2362
|
+
async function getDouyinData(methodType, optionsOrCookie, cookieOrOptions, requestConfig) {
|
|
1995
2363
|
try {
|
|
1996
2364
|
let options;
|
|
1997
2365
|
let cookie;
|
|
2366
|
+
let config;
|
|
1998
2367
|
if (typeof optionsOrCookie === "string") {
|
|
1999
2368
|
cookie = optionsOrCookie;
|
|
2000
2369
|
options = cookieOrOptions;
|
|
2370
|
+
config = requestConfig;
|
|
2001
2371
|
} else {
|
|
2002
2372
|
options = optionsOrCookie;
|
|
2003
2373
|
cookie = cookieOrOptions;
|
|
2374
|
+
config = requestConfig;
|
|
2004
2375
|
}
|
|
2005
2376
|
const { typeMode: _, ...validationOptions } = options || {};
|
|
2006
2377
|
const validatedParams = validateDouyinParams(methodType, validationOptions);
|
|
2007
2378
|
const apiParams = {
|
|
2008
2379
|
...validatedParams
|
|
2009
2380
|
};
|
|
2010
|
-
const rawData = await DouyinData(apiParams, cookie);
|
|
2381
|
+
const rawData = await DouyinData(apiParams, cookie, config);
|
|
2011
2382
|
if (rawData.data === "") {
|
|
2012
2383
|
return createErrorResponse(rawData.amagiError, "\u6296\u97F3\u6570\u636E\u83B7\u53D6\u5931\u8D25");
|
|
2013
2384
|
}
|
|
@@ -2017,7 +2388,7 @@ async function getDouyinData(methodType, optionsOrCookie, cookieOrOptions) {
|
|
|
2017
2388
|
throw new Error(`\u6296\u97F3\u6570\u636E\u83B7\u53D6\u5931\u8D25: ${errorMessage}`);
|
|
2018
2389
|
}
|
|
2019
2390
|
}
|
|
2020
|
-
async function getBilibiliData(methodType, optionsOrCookie, cookieOrOptions) {
|
|
2391
|
+
async function getBilibiliData(methodType, optionsOrCookie, cookieOrOptions, requestConfig) {
|
|
2021
2392
|
try {
|
|
2022
2393
|
let options;
|
|
2023
2394
|
let cookie;
|
|
@@ -2043,7 +2414,7 @@ async function getBilibiliData(methodType, optionsOrCookie, cookieOrOptions) {
|
|
|
2043
2414
|
throw new Error(`B\u7AD9\u6570\u636E\u83B7\u53D6\u5931\u8D25: ${errorMessage}`);
|
|
2044
2415
|
}
|
|
2045
2416
|
}
|
|
2046
|
-
async function getKuaishouData(methodType, optionsOrCookie, cookieOrOptions) {
|
|
2417
|
+
async function getKuaishouData(methodType, optionsOrCookie, cookieOrOptions, requestConfig) {
|
|
2047
2418
|
try {
|
|
2048
2419
|
let options;
|
|
2049
2420
|
let cookie;
|
|
@@ -2209,7 +2580,7 @@ var bilibili = {
|
|
|
2209
2580
|
*/
|
|
2210
2581
|
convertBvToAv: createBilibiliApiMethod("BV\u8F6CAV")
|
|
2211
2582
|
};
|
|
2212
|
-
var createBoundBilibiliApi = (cookie) => {
|
|
2583
|
+
var createBoundBilibiliApi = (cookie, requestConfig) => {
|
|
2213
2584
|
return {
|
|
2214
2585
|
/**
|
|
2215
2586
|
* 获取单个视频作品数据
|
|
@@ -2415,10 +2786,10 @@ var createValidationMiddleware = (validateFn, methodType) => {
|
|
|
2415
2786
|
var createDouyinValidationMiddleware = (methodType) => createValidationMiddleware(validateDouyinParams, methodType);
|
|
2416
2787
|
var createBilibiliValidationMiddleware = (methodType) => createValidationMiddleware(validateBilibiliParams, methodType);
|
|
2417
2788
|
var createKuaishouValidationMiddleware = (methodType) => createValidationMiddleware(validateKuaishouParams, methodType);
|
|
2418
|
-
var createBilibiliRouteHandler = (dataFetcher, methodType, cookie) => {
|
|
2789
|
+
var createBilibiliRouteHandler = (dataFetcher, methodType, cookie, requestConfig = getBilibiliDefaultConfig(cookie)) => {
|
|
2419
2790
|
return async (req, res) => {
|
|
2420
2791
|
try {
|
|
2421
|
-
const result = await dataFetcher(methodType, req.validatedParams, cookie);
|
|
2792
|
+
const result = await dataFetcher(methodType, req.validatedParams, cookie, requestConfig);
|
|
2422
2793
|
res.json({
|
|
2423
2794
|
...result,
|
|
2424
2795
|
requestPath: req.originalUrl
|
|
@@ -2432,97 +2803,97 @@ var createBilibiliRouteHandler = (dataFetcher, methodType, cookie) => {
|
|
|
2432
2803
|
}
|
|
2433
2804
|
};
|
|
2434
2805
|
};
|
|
2435
|
-
var createBilibiliRoutes = (cookie) => {
|
|
2806
|
+
var createBilibiliRoutes = (cookie, requestConfig = getBilibiliDefaultConfig(cookie)) => {
|
|
2436
2807
|
const router = Router();
|
|
2437
2808
|
router.get(
|
|
2438
2809
|
"/fetch_one_video",
|
|
2439
2810
|
createBilibiliValidationMiddleware("\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E"),
|
|
2440
|
-
createBilibiliRouteHandler(getBilibiliData, "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie)
|
|
2811
|
+
createBilibiliRouteHandler(getBilibiliData, "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
|
|
2441
2812
|
);
|
|
2442
2813
|
router.get(
|
|
2443
2814
|
"/fetch_video_playurl",
|
|
2444
2815
|
createBilibiliValidationMiddleware("\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E"),
|
|
2445
|
-
createBilibiliRouteHandler(getBilibiliData, "\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", cookie)
|
|
2816
|
+
createBilibiliRouteHandler(getBilibiliData, "\u5355\u4E2A\u89C6\u9891\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
|
|
2446
2817
|
);
|
|
2447
2818
|
router.get(
|
|
2448
2819
|
"/fetch_work_comments",
|
|
2449
2820
|
createBilibiliValidationMiddleware("\u8BC4\u8BBA\u6570\u636E"),
|
|
2450
|
-
createBilibiliRouteHandler(getBilibiliData, "\u8BC4\u8BBA\u6570\u636E", cookie)
|
|
2821
|
+
createBilibiliRouteHandler(getBilibiliData, "\u8BC4\u8BBA\u6570\u636E", cookie, requestConfig)
|
|
2451
2822
|
);
|
|
2452
2823
|
router.get(
|
|
2453
2824
|
"/fetch_user_profile",
|
|
2454
2825
|
createBilibiliValidationMiddleware("\u7528\u6237\u4E3B\u9875\u6570\u636E"),
|
|
2455
|
-
createBilibiliRouteHandler(getBilibiliData, "\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie)
|
|
2826
|
+
createBilibiliRouteHandler(getBilibiliData, "\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie, requestConfig)
|
|
2456
2827
|
);
|
|
2457
2828
|
router.get(
|
|
2458
2829
|
"/fetch_user_dynamic",
|
|
2459
2830
|
createBilibiliValidationMiddleware("\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E"),
|
|
2460
|
-
createBilibiliRouteHandler(getBilibiliData, "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E", cookie)
|
|
2831
|
+
createBilibiliRouteHandler(getBilibiliData, "\u7528\u6237\u4E3B\u9875\u52A8\u6001\u5217\u8868\u6570\u636E", cookie, requestConfig)
|
|
2461
2832
|
);
|
|
2462
2833
|
router.get(
|
|
2463
2834
|
"/fetch_emoji_list",
|
|
2464
2835
|
createBilibiliValidationMiddleware("Emoji\u6570\u636E"),
|
|
2465
|
-
createBilibiliRouteHandler(getBilibiliData, "Emoji\u6570\u636E", cookie)
|
|
2836
|
+
createBilibiliRouteHandler(getBilibiliData, "Emoji\u6570\u636E", cookie, requestConfig)
|
|
2466
2837
|
);
|
|
2467
2838
|
router.get(
|
|
2468
2839
|
"/fetch_bangumi_video_info",
|
|
2469
2840
|
createBilibiliValidationMiddleware("\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E"),
|
|
2470
|
-
createBilibiliRouteHandler(getBilibiliData, "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E", cookie)
|
|
2841
|
+
createBilibiliRouteHandler(getBilibiliData, "\u756A\u5267\u57FA\u672C\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
|
|
2471
2842
|
);
|
|
2472
2843
|
router.get(
|
|
2473
2844
|
"/fetch_bangumi_video_playurl",
|
|
2474
2845
|
createBilibiliValidationMiddleware("\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E"),
|
|
2475
|
-
createBilibiliRouteHandler(getBilibiliData, "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", cookie)
|
|
2846
|
+
createBilibiliRouteHandler(getBilibiliData, "\u756A\u5267\u4E0B\u8F7D\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
|
|
2476
2847
|
);
|
|
2477
2848
|
router.get(
|
|
2478
2849
|
"/fetch_dynamic_info",
|
|
2479
2850
|
createBilibiliValidationMiddleware("\u52A8\u6001\u8BE6\u60C5\u6570\u636E"),
|
|
2480
|
-
createBilibiliRouteHandler(getBilibiliData, "\u52A8\u6001\u8BE6\u60C5\u6570\u636E", cookie)
|
|
2851
|
+
createBilibiliRouteHandler(getBilibiliData, "\u52A8\u6001\u8BE6\u60C5\u6570\u636E", cookie, requestConfig)
|
|
2481
2852
|
);
|
|
2482
2853
|
router.get(
|
|
2483
2854
|
"/fetch_dynamic_card",
|
|
2484
2855
|
createBilibiliValidationMiddleware("\u52A8\u6001\u5361\u7247\u6570\u636E"),
|
|
2485
|
-
createBilibiliRouteHandler(getBilibiliData, "\u52A8\u6001\u5361\u7247\u6570\u636E", cookie)
|
|
2856
|
+
createBilibiliRouteHandler(getBilibiliData, "\u52A8\u6001\u5361\u7247\u6570\u636E", cookie, requestConfig)
|
|
2486
2857
|
);
|
|
2487
2858
|
router.get(
|
|
2488
2859
|
"/fetch_live_room_detail",
|
|
2489
2860
|
createBilibiliValidationMiddleware("\u76F4\u64AD\u95F4\u4FE1\u606F"),
|
|
2490
|
-
createBilibiliRouteHandler(getBilibiliData, "\u76F4\u64AD\u95F4\u4FE1\u606F", cookie)
|
|
2861
|
+
createBilibiliRouteHandler(getBilibiliData, "\u76F4\u64AD\u95F4\u4FE1\u606F", cookie, requestConfig)
|
|
2491
2862
|
);
|
|
2492
2863
|
router.get(
|
|
2493
2864
|
"/fetch_liveroom_def",
|
|
2494
2865
|
createBilibiliValidationMiddleware("\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F"),
|
|
2495
|
-
createBilibiliRouteHandler(getBilibiliData, "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F", cookie)
|
|
2866
|
+
createBilibiliRouteHandler(getBilibiliData, "\u76F4\u64AD\u95F4\u521D\u59CB\u5316\u4FE1\u606F", cookie, requestConfig)
|
|
2496
2867
|
);
|
|
2497
2868
|
router.get(
|
|
2498
2869
|
"/login_basic_info",
|
|
2499
2870
|
createBilibiliValidationMiddleware("\u767B\u5F55\u57FA\u672C\u4FE1\u606F"),
|
|
2500
|
-
createBilibiliRouteHandler(getBilibiliData, "\u767B\u5F55\u57FA\u672C\u4FE1\u606F", cookie)
|
|
2871
|
+
createBilibiliRouteHandler(getBilibiliData, "\u767B\u5F55\u57FA\u672C\u4FE1\u606F", cookie, requestConfig)
|
|
2501
2872
|
);
|
|
2502
2873
|
router.get(
|
|
2503
2874
|
"/new_login_qrcode",
|
|
2504
2875
|
createBilibiliValidationMiddleware("\u7533\u8BF7\u4E8C\u7EF4\u7801"),
|
|
2505
|
-
createBilibiliRouteHandler(getBilibiliData, "\u7533\u8BF7\u4E8C\u7EF4\u7801", cookie)
|
|
2876
|
+
createBilibiliRouteHandler(getBilibiliData, "\u7533\u8BF7\u4E8C\u7EF4\u7801", cookie, requestConfig)
|
|
2506
2877
|
);
|
|
2507
2878
|
router.get(
|
|
2508
2879
|
"/check_qrcode",
|
|
2509
2880
|
createBilibiliValidationMiddleware("\u4E8C\u7EF4\u7801\u72B6\u6001"),
|
|
2510
|
-
createBilibiliRouteHandler(getBilibiliData, "\u4E8C\u7EF4\u7801\u72B6\u6001", cookie)
|
|
2881
|
+
createBilibiliRouteHandler(getBilibiliData, "\u4E8C\u7EF4\u7801\u72B6\u6001", cookie, requestConfig)
|
|
2511
2882
|
);
|
|
2512
2883
|
router.get(
|
|
2513
2884
|
"/fetch_user_full_view",
|
|
2514
2885
|
createBilibiliValidationMiddleware("\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF"),
|
|
2515
|
-
createBilibiliRouteHandler(getBilibiliData, "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF", cookie)
|
|
2886
|
+
createBilibiliRouteHandler(getBilibiliData, "\u83B7\u53D6UP\u4E3B\u603B\u64AD\u653E\u91CF", cookie, requestConfig)
|
|
2516
2887
|
);
|
|
2517
2888
|
router.get(
|
|
2518
2889
|
"/av_to_bv",
|
|
2519
2890
|
createBilibiliValidationMiddleware("AV\u8F6CBV"),
|
|
2520
|
-
createBilibiliRouteHandler(getBilibiliData, "AV\u8F6CBV", cookie)
|
|
2891
|
+
createBilibiliRouteHandler(getBilibiliData, "AV\u8F6CBV", cookie, requestConfig)
|
|
2521
2892
|
);
|
|
2522
2893
|
router.get(
|
|
2523
2894
|
"/bv_to_av",
|
|
2524
2895
|
createBilibiliValidationMiddleware("BV\u8F6CAV"),
|
|
2525
|
-
createBilibiliRouteHandler(getBilibiliData, "BV\u8F6CAV", cookie)
|
|
2896
|
+
createBilibiliRouteHandler(getBilibiliData, "BV\u8F6CAV", cookie, requestConfig)
|
|
2526
2897
|
);
|
|
2527
2898
|
return router;
|
|
2528
2899
|
};
|
|
@@ -2540,13 +2911,13 @@ var bilibiliUtils = {
|
|
|
2540
2911
|
|
|
2541
2912
|
// src/platform/douyin/DouyinApi.ts
|
|
2542
2913
|
var createDouyinApiMethod = (methodType) => {
|
|
2543
|
-
return async (options, cookie) => {
|
|
2544
|
-
return await getDouyinData(methodType, options, cookie);
|
|
2914
|
+
return async (options, cookie, requestConfig) => {
|
|
2915
|
+
return await getDouyinData(methodType, options, cookie, requestConfig);
|
|
2545
2916
|
};
|
|
2546
2917
|
};
|
|
2547
|
-
var createBoundDouyinApiMethod = (methodType, cookie) => {
|
|
2918
|
+
var createBoundDouyinApiMethod = (methodType, cookie, requestConfig) => {
|
|
2548
2919
|
return async (options) => {
|
|
2549
|
-
return await getDouyinData(methodType, options, cookie);
|
|
2920
|
+
return await getDouyinData(methodType, options, cookie, requestConfig);
|
|
2550
2921
|
};
|
|
2551
2922
|
};
|
|
2552
2923
|
var douyin = {
|
|
@@ -2649,98 +3020,98 @@ var douyin = {
|
|
|
2649
3020
|
*/
|
|
2650
3021
|
getLiveRoomInfo: createDouyinApiMethod("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E")
|
|
2651
3022
|
};
|
|
2652
|
-
var createBoundDouyinApi = (cookie) => {
|
|
3023
|
+
var createBoundDouyinApi = (cookie, requestConfig) => {
|
|
2653
3024
|
return {
|
|
2654
3025
|
/**
|
|
2655
3026
|
* 聚合解析 (视频/图集/合辑)
|
|
2656
3027
|
* @param options 请求参数,包含 aweme_id 和可选的 typeMode
|
|
2657
3028
|
* @returns 统一格式的API响应,包含视频、图集或合辑数据
|
|
2658
3029
|
*/
|
|
2659
|
-
getWorkInfo: createBoundDouyinApiMethod("\u805A\u5408\u89E3\u6790", cookie),
|
|
3030
|
+
getWorkInfo: createBoundDouyinApiMethod("\u805A\u5408\u89E3\u6790", cookie, requestConfig),
|
|
2660
3031
|
/**
|
|
2661
3032
|
* 获取视频作品数据
|
|
2662
3033
|
* @param options 请求参数,包含 aweme_id 和可选的 typeMode
|
|
2663
3034
|
* @returns 统一格式的API响应,包含视频作品详细信息
|
|
2664
3035
|
*/
|
|
2665
|
-
getVideoWorkInfo: createBoundDouyinApiMethod("\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie),
|
|
3036
|
+
getVideoWorkInfo: createBoundDouyinApiMethod("\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie, requestConfig),
|
|
2666
3037
|
/**
|
|
2667
3038
|
* 获取图集作品数据
|
|
2668
3039
|
* @param options 请求参数,包含 aweme_id 和可选的 typeMode
|
|
2669
3040
|
* @returns 统一格式的API响应,包含图集作品详细信息
|
|
2670
3041
|
*/
|
|
2671
|
-
getImageAlbumWorkInfo: createBoundDouyinApiMethod("\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", cookie),
|
|
3042
|
+
getImageAlbumWorkInfo: createBoundDouyinApiMethod("\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", cookie, requestConfig),
|
|
2672
3043
|
/**
|
|
2673
3044
|
* 获取合辑作品数据
|
|
2674
3045
|
* @param options 请求参数,包含 aweme_id 和可选的 typeMode
|
|
2675
3046
|
* @returns 统一格式的API响应,包含合辑作品详细信息
|
|
2676
3047
|
*/
|
|
2677
|
-
getSlidesWorkInfo: createBoundDouyinApiMethod("\u5408\u8F91\u4F5C\u54C1\u6570\u636E", cookie),
|
|
3048
|
+
getSlidesWorkInfo: createBoundDouyinApiMethod("\u5408\u8F91\u4F5C\u54C1\u6570\u636E", cookie, requestConfig),
|
|
2678
3049
|
/**
|
|
2679
3050
|
* 获取评论数据
|
|
2680
3051
|
* @param options 请求参数,包含 aweme_id, 可选的 number, cursor 和 typeMode
|
|
2681
3052
|
* @returns 统一格式的API响应,包含评论列表数据
|
|
2682
3053
|
*/
|
|
2683
|
-
getComments: createBoundDouyinApiMethod("\u8BC4\u8BBA\u6570\u636E", cookie),
|
|
3054
|
+
getComments: createBoundDouyinApiMethod("\u8BC4\u8BBA\u6570\u636E", cookie, requestConfig),
|
|
2684
3055
|
/**
|
|
2685
3056
|
* 获取指定评论回复数据
|
|
2686
3057
|
* @param options 请求参数,包含 aweme_id, comment_id, 可选的 number, cursor 和 typeMode
|
|
2687
3058
|
* @returns 统一格式的API响应,包含评论回复数据
|
|
2688
3059
|
*/
|
|
2689
|
-
getCommentReplies: createBoundDouyinApiMethod("\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie),
|
|
3060
|
+
getCommentReplies: createBoundDouyinApiMethod("\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie, requestConfig),
|
|
2690
3061
|
/**
|
|
2691
3062
|
* 获取用户主页数据
|
|
2692
3063
|
* @param options 请求参数,包含 sec_uid 和可选的 typeMode
|
|
2693
3064
|
* @returns 统一格式的API响应,包含用户详细信息
|
|
2694
3065
|
*/
|
|
2695
|
-
getUserProfile: createBoundDouyinApiMethod("\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie),
|
|
3066
|
+
getUserProfile: createBoundDouyinApiMethod("\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie, requestConfig),
|
|
2696
3067
|
/**
|
|
2697
3068
|
* 获取 Emoji 数据
|
|
2698
3069
|
* @param options 可选的请求参数 (主要用于 typeMode)
|
|
2699
3070
|
* @returns 统一格式的API响应,包含Emoji列表数据
|
|
2700
3071
|
*/
|
|
2701
|
-
getEmojiList: createBoundDouyinApiMethod("Emoji\u6570\u636E", cookie),
|
|
3072
|
+
getEmojiList: createBoundDouyinApiMethod("Emoji\u6570\u636E", cookie, requestConfig),
|
|
2702
3073
|
/**
|
|
2703
3074
|
* 获取动态表情数据
|
|
2704
3075
|
* @param options 可选的请求参数 (主要用于 typeMode)
|
|
2705
3076
|
* @returns 统一格式的API响应,包含动态表情数据
|
|
2706
3077
|
*/
|
|
2707
|
-
getEmojiProList: createBoundDouyinApiMethod("\u52A8\u6001\u8868\u60C5\u6570\u636E", cookie),
|
|
3078
|
+
getEmojiProList: createBoundDouyinApiMethod("\u52A8\u6001\u8868\u60C5\u6570\u636E", cookie, requestConfig),
|
|
2708
3079
|
/**
|
|
2709
3080
|
* 获取用户主页视频列表数据
|
|
2710
3081
|
* @param options 请求参数,包含 sec_uid, 可选的 number, max_cursor 和 typeMode
|
|
2711
3082
|
* @returns 统一格式的API响应,包含用户发布的视频列表
|
|
2712
3083
|
*/
|
|
2713
|
-
getUserVideos: createBoundDouyinApiMethod("\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", cookie),
|
|
3084
|
+
getUserVideos: createBoundDouyinApiMethod("\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", cookie, requestConfig),
|
|
2714
3085
|
/**
|
|
2715
3086
|
* 获取音乐数据
|
|
2716
3087
|
* @param options 请求参数,包含 music_id 和可选的 typeMode
|
|
2717
3088
|
* @returns 统一格式的API响应,包含音乐详细信息
|
|
2718
3089
|
*/
|
|
2719
|
-
getMusicInfo: createBoundDouyinApiMethod("\u97F3\u4E50\u6570\u636E", cookie),
|
|
3090
|
+
getMusicInfo: createBoundDouyinApiMethod("\u97F3\u4E50\u6570\u636E", cookie, requestConfig),
|
|
2720
3091
|
/**
|
|
2721
3092
|
* 获取热点词数据
|
|
2722
3093
|
* @param options 请求参数,包含 query, 可选的 number 和 typeMode
|
|
2723
3094
|
* @returns 统一格式的API响应,包含热点搜索词列表
|
|
2724
3095
|
*/
|
|
2725
|
-
getSuggestWords: createBoundDouyinApiMethod("\u70ED\u70B9\u8BCD\u6570\u636E", cookie),
|
|
3096
|
+
getSuggestWords: createBoundDouyinApiMethod("\u70ED\u70B9\u8BCD\u6570\u636E", cookie, requestConfig),
|
|
2726
3097
|
/**
|
|
2727
3098
|
* 获取搜索数据
|
|
2728
3099
|
* @param options 请求参数,包含 query, 可选的 number, search_id, cursor 和 typeMode
|
|
2729
3100
|
* @returns 统一格式的API响应,包含搜索结果数据
|
|
2730
3101
|
*/
|
|
2731
|
-
search: createBoundDouyinApiMethod("\u641C\u7D22\u6570\u636E", cookie),
|
|
3102
|
+
search: createBoundDouyinApiMethod("\u641C\u7D22\u6570\u636E", cookie, requestConfig),
|
|
2732
3103
|
/**
|
|
2733
3104
|
* 获取直播间信息
|
|
2734
3105
|
* @param options 请求参数,包含 sec_uid 和可选的 typeMode
|
|
2735
3106
|
* @returns 统一格式的API响应,包含直播间详细信息
|
|
2736
3107
|
*/
|
|
2737
|
-
getLiveRoomInfo: createBoundDouyinApiMethod("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie)
|
|
3108
|
+
getLiveRoomInfo: createBoundDouyinApiMethod("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
|
|
2738
3109
|
};
|
|
2739
3110
|
};
|
|
2740
|
-
var createDouyinRouteHandler = (dataFetcher, methodType, cookie) => {
|
|
3111
|
+
var createDouyinRouteHandler = (dataFetcher, methodType, cookie, requestConfig = getDouyinDefaultConfig(cookie)) => {
|
|
2741
3112
|
return async (req, res) => {
|
|
2742
3113
|
try {
|
|
2743
|
-
const result = await dataFetcher(methodType, req.validatedParams, cookie);
|
|
3114
|
+
const result = await dataFetcher(methodType, req.validatedParams, cookie, requestConfig);
|
|
2744
3115
|
res.json({
|
|
2745
3116
|
...result,
|
|
2746
3117
|
requestPath: req.originalUrl
|
|
@@ -2754,77 +3125,77 @@ var createDouyinRouteHandler = (dataFetcher, methodType, cookie) => {
|
|
|
2754
3125
|
}
|
|
2755
3126
|
};
|
|
2756
3127
|
};
|
|
2757
|
-
var createDouyinRoutes = (cookie) => {
|
|
3128
|
+
var createDouyinRoutes = (cookie, requestConfig = getDouyinDefaultConfig(cookie)) => {
|
|
2758
3129
|
const router = Router();
|
|
2759
3130
|
router.get(
|
|
2760
3131
|
"/fetch_one_work",
|
|
2761
3132
|
createDouyinValidationMiddleware("\u805A\u5408\u89E3\u6790"),
|
|
2762
|
-
createDouyinRouteHandler(getDouyinData, "\u805A\u5408\u89E3\u6790", cookie)
|
|
3133
|
+
createDouyinRouteHandler(getDouyinData, "\u805A\u5408\u89E3\u6790", cookie, requestConfig)
|
|
2763
3134
|
);
|
|
2764
3135
|
router.get(
|
|
2765
3136
|
"/fetch_one_work",
|
|
2766
3137
|
createDouyinValidationMiddleware("\u89C6\u9891\u4F5C\u54C1\u6570\u636E"),
|
|
2767
|
-
createDouyinRouteHandler(getDouyinData, "\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie)
|
|
3138
|
+
createDouyinRouteHandler(getDouyinData, "\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
|
|
2768
3139
|
);
|
|
2769
3140
|
router.get(
|
|
2770
3141
|
"/fetch_one_work",
|
|
2771
3142
|
createDouyinValidationMiddleware("\u56FE\u96C6\u4F5C\u54C1\u6570\u636E"),
|
|
2772
|
-
createDouyinRouteHandler(getDouyinData, "\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", cookie)
|
|
3143
|
+
createDouyinRouteHandler(getDouyinData, "\u56FE\u96C6\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
|
|
2773
3144
|
);
|
|
2774
3145
|
router.get(
|
|
2775
3146
|
"/fetch_one_work",
|
|
2776
3147
|
createDouyinValidationMiddleware("\u5408\u8F91\u4F5C\u54C1\u6570\u636E"),
|
|
2777
|
-
createDouyinRouteHandler(getDouyinData, "\u5408\u8F91\u4F5C\u54C1\u6570\u636E", cookie)
|
|
3148
|
+
createDouyinRouteHandler(getDouyinData, "\u5408\u8F91\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
|
|
2778
3149
|
);
|
|
2779
3150
|
router.get(
|
|
2780
3151
|
"/fetch_work_comments",
|
|
2781
3152
|
createDouyinValidationMiddleware("\u8BC4\u8BBA\u6570\u636E"),
|
|
2782
|
-
createDouyinRouteHandler(getDouyinData, "\u8BC4\u8BBA\u6570\u636E", cookie)
|
|
3153
|
+
createDouyinRouteHandler(getDouyinData, "\u8BC4\u8BBA\u6570\u636E", cookie, requestConfig)
|
|
2783
3154
|
);
|
|
2784
3155
|
router.get(
|
|
2785
3156
|
"/fetch_user_info",
|
|
2786
3157
|
createDouyinValidationMiddleware("\u7528\u6237\u4E3B\u9875\u6570\u636E"),
|
|
2787
|
-
createDouyinRouteHandler(getDouyinData, "\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie)
|
|
3158
|
+
createDouyinRouteHandler(getDouyinData, "\u7528\u6237\u4E3B\u9875\u6570\u636E", cookie, requestConfig)
|
|
2788
3159
|
);
|
|
2789
3160
|
router.get(
|
|
2790
3161
|
"/fetch_user_post_videos",
|
|
2791
3162
|
createDouyinValidationMiddleware("\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E"),
|
|
2792
|
-
createDouyinRouteHandler(getDouyinData, "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", cookie)
|
|
3163
|
+
createDouyinRouteHandler(getDouyinData, "\u7528\u6237\u4E3B\u9875\u89C6\u9891\u5217\u8868\u6570\u636E", cookie, requestConfig)
|
|
2793
3164
|
);
|
|
2794
3165
|
router.get(
|
|
2795
3166
|
"/fetch_search_info",
|
|
2796
3167
|
createDouyinValidationMiddleware("\u641C\u7D22\u6570\u636E"),
|
|
2797
|
-
createDouyinRouteHandler(getDouyinData, "\u641C\u7D22\u6570\u636E", cookie)
|
|
3168
|
+
createDouyinRouteHandler(getDouyinData, "\u641C\u7D22\u6570\u636E", cookie, requestConfig)
|
|
2798
3169
|
);
|
|
2799
3170
|
router.get(
|
|
2800
3171
|
"/fetch_suggest_words",
|
|
2801
3172
|
createDouyinValidationMiddleware("\u70ED\u70B9\u8BCD\u6570\u636E"),
|
|
2802
|
-
createDouyinRouteHandler(getDouyinData, "\u70ED\u70B9\u8BCD\u6570\u636E", cookie)
|
|
3173
|
+
createDouyinRouteHandler(getDouyinData, "\u70ED\u70B9\u8BCD\u6570\u636E", cookie, requestConfig)
|
|
2803
3174
|
);
|
|
2804
3175
|
router.get(
|
|
2805
3176
|
"/fetch_music_work",
|
|
2806
3177
|
createDouyinValidationMiddleware("\u97F3\u4E50\u6570\u636E"),
|
|
2807
|
-
createDouyinRouteHandler(getDouyinData, "\u97F3\u4E50\u6570\u636E", cookie)
|
|
3178
|
+
createDouyinRouteHandler(getDouyinData, "\u97F3\u4E50\u6570\u636E", cookie, requestConfig)
|
|
2808
3179
|
);
|
|
2809
3180
|
router.get(
|
|
2810
3181
|
"/fetch_emoji_list",
|
|
2811
3182
|
createDouyinValidationMiddleware("Emoji\u6570\u636E"),
|
|
2812
|
-
createDouyinRouteHandler(getDouyinData, "Emoji\u6570\u636E", cookie)
|
|
3183
|
+
createDouyinRouteHandler(getDouyinData, "Emoji\u6570\u636E", cookie, requestConfig)
|
|
2813
3184
|
);
|
|
2814
3185
|
router.get(
|
|
2815
3186
|
"/fetch_emoji_pro_list",
|
|
2816
3187
|
createDouyinValidationMiddleware("\u52A8\u6001\u8868\u60C5\u6570\u636E"),
|
|
2817
|
-
createDouyinRouteHandler(getDouyinData, "\u52A8\u6001\u8868\u60C5\u6570\u636E", cookie)
|
|
3188
|
+
createDouyinRouteHandler(getDouyinData, "\u52A8\u6001\u8868\u60C5\u6570\u636E", cookie, requestConfig)
|
|
2818
3189
|
);
|
|
2819
3190
|
router.get(
|
|
2820
3191
|
"/fetch_user_live_videos",
|
|
2821
3192
|
createDouyinValidationMiddleware("\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E"),
|
|
2822
|
-
createDouyinRouteHandler(getDouyinData, "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie)
|
|
3193
|
+
createDouyinRouteHandler(getDouyinData, "\u76F4\u64AD\u95F4\u4FE1\u606F\u6570\u636E", cookie, requestConfig)
|
|
2823
3194
|
);
|
|
2824
3195
|
router.get(
|
|
2825
3196
|
"/fetch_video_comment_replies",
|
|
2826
3197
|
createDouyinValidationMiddleware("\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E"),
|
|
2827
|
-
createDouyinRouteHandler(getDouyinData, "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie)
|
|
3198
|
+
createDouyinRouteHandler(getDouyinData, "\u6307\u5B9A\u8BC4\u8BBA\u56DE\u590D\u6570\u636E", cookie, requestConfig)
|
|
2828
3199
|
);
|
|
2829
3200
|
return router;
|
|
2830
3201
|
};
|
|
@@ -2835,10 +3206,10 @@ var douyinUtils = {
|
|
|
2835
3206
|
douyinApiUrls,
|
|
2836
3207
|
api: douyin
|
|
2837
3208
|
};
|
|
2838
|
-
var createKuaishouRouteHandler = (dataFetcher, methodType, cookie) => {
|
|
3209
|
+
var createKuaishouRouteHandler = (dataFetcher, methodType, cookie, requestConfig = getKuaishouDefaultConfig(cookie)) => {
|
|
2839
3210
|
return async (req, res) => {
|
|
2840
3211
|
try {
|
|
2841
|
-
const result = await dataFetcher(methodType, req.validatedParams, cookie);
|
|
3212
|
+
const result = await dataFetcher(methodType, req.validatedParams, cookie, requestConfig);
|
|
2842
3213
|
res.json({
|
|
2843
3214
|
...result,
|
|
2844
3215
|
requestPath: req.originalUrl
|
|
@@ -2852,22 +3223,22 @@ var createKuaishouRouteHandler = (dataFetcher, methodType, cookie) => {
|
|
|
2852
3223
|
}
|
|
2853
3224
|
};
|
|
2854
3225
|
};
|
|
2855
|
-
var createKuaishouRoutes = (cookie) => {
|
|
3226
|
+
var createKuaishouRoutes = (cookie, requestConfig = getKuaishouDefaultConfig(cookie)) => {
|
|
2856
3227
|
const router = Router();
|
|
2857
3228
|
router.get(
|
|
2858
3229
|
"/fetch_one_work",
|
|
2859
3230
|
createKuaishouValidationMiddleware("\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E"),
|
|
2860
|
-
createKuaishouRouteHandler(getKuaishouData, "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie)
|
|
3231
|
+
createKuaishouRouteHandler(getKuaishouData, "\u5355\u4E2A\u89C6\u9891\u4F5C\u54C1\u6570\u636E", cookie, requestConfig)
|
|
2861
3232
|
);
|
|
2862
3233
|
router.get(
|
|
2863
3234
|
"/fetch_work_comments",
|
|
2864
3235
|
createKuaishouValidationMiddleware("\u8BC4\u8BBA\u6570\u636E"),
|
|
2865
|
-
createKuaishouRouteHandler(getKuaishouData, "\u8BC4\u8BBA\u6570\u636E", cookie)
|
|
3236
|
+
createKuaishouRouteHandler(getKuaishouData, "\u8BC4\u8BBA\u6570\u636E", cookie, requestConfig)
|
|
2866
3237
|
);
|
|
2867
3238
|
router.get(
|
|
2868
3239
|
"/fetch_emoji_list",
|
|
2869
3240
|
createKuaishouValidationMiddleware("Emoji\u6570\u636E"),
|
|
2870
|
-
createKuaishouRouteHandler(getKuaishouData, "Emoji\u6570\u636E", cookie)
|
|
3241
|
+
createKuaishouRouteHandler(getKuaishouData, "Emoji\u6570\u636E", cookie, requestConfig)
|
|
2871
3242
|
);
|
|
2872
3243
|
return router;
|
|
2873
3244
|
};
|
|
@@ -2906,7 +3277,7 @@ var kuaishou = {
|
|
|
2906
3277
|
*/
|
|
2907
3278
|
getEmojiList: createKuaishouApiMethod("Emoji\u6570\u636E")
|
|
2908
3279
|
};
|
|
2909
|
-
var createBoundKuaishouApi = (cookie) => {
|
|
3280
|
+
var createBoundKuaishouApi = (cookie, requestConfig) => {
|
|
2910
3281
|
return {
|
|
2911
3282
|
/**
|
|
2912
3283
|
* 获取单个视频作品数据
|
|
@@ -2934,161 +3305,83 @@ var kuaishouUtils = {
|
|
|
2934
3305
|
kuaishouApiUrls,
|
|
2935
3306
|
api: kuaishou
|
|
2936
3307
|
};
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
|
|
2943
|
-
|
|
2944
|
-
options = arg3;
|
|
2945
|
-
} else {
|
|
2946
|
-
options = arg2;
|
|
2947
|
-
cookie = arg3;
|
|
2948
|
-
}
|
|
2949
|
-
const data2 = await DouyinData({ ...options, methodType: type }, cookie);
|
|
2950
|
-
return data2;
|
|
2951
|
-
}
|
|
2952
|
-
async function getBilibiliData2(methodType, arg2, arg3) {
|
|
2953
|
-
let cookie;
|
|
2954
|
-
let options;
|
|
2955
|
-
if (typeof arg2 === "string") {
|
|
2956
|
-
cookie = arg2;
|
|
2957
|
-
options = arg3;
|
|
2958
|
-
} else {
|
|
2959
|
-
options = arg2;
|
|
2960
|
-
cookie = arg3;
|
|
2961
|
-
}
|
|
2962
|
-
const data2 = await fetchBilibili({ ...options, methodType }, cookie);
|
|
2963
|
-
return data2;
|
|
2964
|
-
}
|
|
2965
|
-
async function getKuaishouData2(methodType, arg2, arg3) {
|
|
2966
|
-
let cookie;
|
|
2967
|
-
let options;
|
|
2968
|
-
if (typeof arg2 === "string") {
|
|
2969
|
-
cookie = arg2;
|
|
2970
|
-
options = arg3;
|
|
2971
|
-
} else {
|
|
2972
|
-
options = arg2;
|
|
2973
|
-
cookie = arg3;
|
|
2974
|
-
}
|
|
2975
|
-
const data2 = await KuaishouData({ ...options, methodType }, cookie);
|
|
2976
|
-
return data2;
|
|
2977
|
-
}
|
|
2978
|
-
var fetchDouyinData = getDouyinData2;
|
|
2979
|
-
var fetchBilibiliData = getBilibiliData2;
|
|
2980
|
-
var fetchKuaishouData = getKuaishouData2;
|
|
2981
|
-
var v4CompatibilityMiddleware = (req, res, next) => {
|
|
2982
|
-
const originalJson = res.json;
|
|
2983
|
-
res.json = (data2) => {
|
|
2984
|
-
if (data2 && typeof data2 === "object" && "data" in data2 && "message" in data2 && "code" in data2) {
|
|
2985
|
-
const v4Response = {
|
|
2986
|
-
...data2.data,
|
|
2987
|
-
...data2.requestPath && { requestPath: data2.requestPath }
|
|
2988
|
-
};
|
|
2989
|
-
return originalJson.call(void 0, v4Response);
|
|
2990
|
-
}
|
|
2991
|
-
return originalJson.call(void 0, data2);
|
|
2992
|
-
};
|
|
2993
|
-
next();
|
|
2994
|
-
};
|
|
2995
|
-
var amagiClient = class {
|
|
2996
|
-
#douyin;
|
|
2997
|
-
#bilibili;
|
|
2998
|
-
#kuaishou;
|
|
2999
|
-
/**
|
|
3000
|
-
*
|
|
3001
|
-
* @param cookie - 包含抖音ck、B站ck、快手ck的对象
|
|
3002
|
-
*/
|
|
3003
|
-
constructor(options) {
|
|
3004
|
-
this.#douyin = (options == null ? void 0 : options.douyin) ?? "";
|
|
3005
|
-
this.#bilibili = (options == null ? void 0 : options.bilibili) ?? "";
|
|
3006
|
-
this.#kuaishou = (options == null ? void 0 : options.kuaishou) ?? "";
|
|
3007
|
-
}
|
|
3008
|
-
/**
|
|
3009
|
-
* 启动本地 HTTP 服务
|
|
3010
|
-
* @param port - 监听端口
|
|
3011
|
-
* @defaultValue `port` 4567
|
|
3012
|
-
* @returns Express 应用实例
|
|
3013
|
-
*/
|
|
3014
|
-
startClient = (port = 4567) => {
|
|
3308
|
+
var createAmagiClient = (options) => {
|
|
3309
|
+
var _a, _b, _c;
|
|
3310
|
+
const douyinCookie = ((_a = options == null ? void 0 : options.cookies) == null ? void 0 : _a.douyin) ?? "";
|
|
3311
|
+
const bilibiliCookie = ((_b = options == null ? void 0 : options.cookies) == null ? void 0 : _b.bilibili) ?? "";
|
|
3312
|
+
const kuaishouCookie = ((_c = options == null ? void 0 : options.cookies) == null ? void 0 : _c.kuaishou) ?? "";
|
|
3313
|
+
const requestConfig = (options == null ? void 0 : options.request) ?? {};
|
|
3314
|
+
const startServer = (port = 4567) => {
|
|
3015
3315
|
const app = express();
|
|
3316
|
+
app.use(express.json());
|
|
3317
|
+
app.use(express.urlencoded({ extended: true }));
|
|
3016
3318
|
app.get("/", (_req, res) => {
|
|
3017
3319
|
res.redirect(301, "https://amagi.apifox.cn");
|
|
3018
3320
|
});
|
|
3019
3321
|
app.get("/docs", (_req, res) => {
|
|
3020
3322
|
res.redirect(301, "https://amagi.apifox.cn");
|
|
3021
3323
|
});
|
|
3022
|
-
app.use(
|
|
3023
|
-
app.use("/api/
|
|
3024
|
-
app.use("/api/
|
|
3025
|
-
app.use("/api/kuaishou", v4CompatibilityMiddleware);
|
|
3026
|
-
app.use("/api/douyin", createDouyinRoutes(this.#douyin));
|
|
3027
|
-
app.use("/api/bilibili", createBilibiliRoutes(this.#bilibili));
|
|
3028
|
-
app.use("/api/kuaishou", createKuaishouRoutes(this.#kuaishou));
|
|
3324
|
+
app.use("/api/douyin", createDouyinRoutes(douyinCookie, requestConfig));
|
|
3325
|
+
app.use("/api/bilibili", createBilibiliRoutes(bilibiliCookie, requestConfig));
|
|
3326
|
+
app.use("/api/kuaishou", createKuaishouRoutes(kuaishouCookie, requestConfig));
|
|
3029
3327
|
app.listen(port, "::", () => {
|
|
3030
3328
|
logger.mark(`Amagi server listening on ${logger.green(`http://localhost:${port}`)} ${logger.yellow("API docs: https://amagi.apifox.cn ")}`);
|
|
3031
3329
|
});
|
|
3032
3330
|
return app;
|
|
3033
3331
|
};
|
|
3034
|
-
|
|
3035
|
-
|
|
3036
|
-
* @param type - 请求数据类型
|
|
3037
|
-
* @param options - 请求参数,是一个对象
|
|
3038
|
-
* @returns 返回接口的原始数据
|
|
3039
|
-
*/
|
|
3040
|
-
getDouyinData = async (methodType, options) => {
|
|
3041
|
-
const fullOptions = {
|
|
3042
|
-
methodType,
|
|
3043
|
-
...options
|
|
3044
|
-
};
|
|
3045
|
-
const result = await getDouyinData2(methodType, this.#douyin, fullOptions);
|
|
3046
|
-
return result && typeof result === "object" && "data" in result ? result.data : result;
|
|
3332
|
+
const startClient = (port = 4567) => {
|
|
3333
|
+
return startServer(port);
|
|
3047
3334
|
};
|
|
3048
|
-
|
|
3049
|
-
|
|
3050
|
-
* @param type - 请求数据类型
|
|
3051
|
-
* @param options - 请求参数,是一个对象
|
|
3052
|
-
* @returns 返回接口的原始数据
|
|
3053
|
-
*/
|
|
3054
|
-
getBilibiliData = async (methodType, options) => {
|
|
3055
|
-
const fullOptions = {
|
|
3056
|
-
methodType,
|
|
3057
|
-
...options
|
|
3058
|
-
};
|
|
3059
|
-
const result = await getBilibiliData2(methodType, this.#bilibili, fullOptions);
|
|
3060
|
-
return result && typeof result === "object" && "data" in result ? result.data : result;
|
|
3335
|
+
const getDouyinDataWithCookie = async (methodType, options2) => {
|
|
3336
|
+
return await getDouyinData(methodType, options2, douyinCookie, requestConfig);
|
|
3061
3337
|
};
|
|
3062
|
-
|
|
3063
|
-
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
|
|
3070
|
-
|
|
3071
|
-
|
|
3072
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
3338
|
+
const getBilibiliDataWithCookie = async (methodType, options2) => {
|
|
3339
|
+
return await getBilibiliData(methodType, options2, bilibiliCookie);
|
|
3340
|
+
};
|
|
3341
|
+
const getKuaishouDataWithCookie = async (methodType, options2) => {
|
|
3342
|
+
return await getKuaishouData(methodType, options2, kuaishouCookie);
|
|
3343
|
+
};
|
|
3344
|
+
return {
|
|
3345
|
+
/** 启动本地HTTP服务 */
|
|
3346
|
+
startServer,
|
|
3347
|
+
/** @deprecated 此方法已废弃,请使用 startServer 方法代替 */
|
|
3348
|
+
startClient,
|
|
3349
|
+
getDouyinData: getDouyinDataWithCookie,
|
|
3350
|
+
getBilibiliData: getBilibiliDataWithCookie,
|
|
3351
|
+
getKuaishouData: getKuaishouDataWithCookie,
|
|
3352
|
+
douyin: {
|
|
3353
|
+
...douyinUtils,
|
|
3354
|
+
/** 绑定了cookie和请求配置的抖音API对象,调用时不需要传递cookie */
|
|
3355
|
+
api: createBoundDouyinApi(douyinCookie, requestConfig)
|
|
3356
|
+
},
|
|
3357
|
+
bilibili: {
|
|
3358
|
+
...bilibiliUtils,
|
|
3359
|
+
/** 绑定了cookie和请求配置的B站API对象,调用时不需要传递cookie */
|
|
3360
|
+
api: createBoundBilibiliApi(bilibiliCookie)
|
|
3361
|
+
},
|
|
3362
|
+
kuaishou: {
|
|
3363
|
+
...kuaishouUtils,
|
|
3364
|
+
/** 绑定了cookie和请求配置的快手API对象,调用时不需要传递cookie */
|
|
3365
|
+
api: createBoundKuaishouApi(kuaishouCookie)
|
|
3366
|
+
}
|
|
3075
3367
|
};
|
|
3076
3368
|
};
|
|
3077
3369
|
|
|
3078
3370
|
// src/index.ts
|
|
3079
|
-
|
|
3080
|
-
|
|
3081
|
-
|
|
3371
|
+
var amagiClient = createAmagiClient;
|
|
3372
|
+
function CreateAmagiApp(options = {}) {
|
|
3373
|
+
if (!(this instanceof CreateAmagiApp)) {
|
|
3374
|
+
return createAmagiClient(options);
|
|
3082
3375
|
}
|
|
3083
|
-
return
|
|
3376
|
+
return createAmagiClient(options);
|
|
3084
3377
|
}
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
var CreateApp =
|
|
3378
|
+
CreateAmagiApp.douyin = douyinUtils;
|
|
3379
|
+
CreateAmagiApp.bilibili = bilibiliUtils;
|
|
3380
|
+
CreateAmagiApp.kuaishou = kuaishouUtils;
|
|
3381
|
+
CreateAmagiApp.getDouyinData = getDouyinData;
|
|
3382
|
+
CreateAmagiApp.getBilibiliData = getBilibiliData;
|
|
3383
|
+
CreateAmagiApp.getKuaishouData = getKuaishouData;
|
|
3384
|
+
var CreateApp = CreateAmagiApp;
|
|
3092
3385
|
var Client = CreateApp;
|
|
3093
3386
|
var amagi = Client;
|
|
3094
3387
|
/*!
|
|
@@ -3097,4 +3390,4 @@ var amagi = Client;
|
|
|
3097
3390
|
* GPL-3.0 Licensed
|
|
3098
3391
|
*/
|
|
3099
3392
|
|
|
3100
|
-
export { CreateApp,
|
|
3393
|
+
export { ApiError, BilibiliAv2BvParamsSchema, BilibiliBangumiInfoParamsSchema, BilibiliBangumiStreamParamsSchema, BilibiliBv2AvParamsSchema, BilibiliCommentParamsSchema, BilibiliDynamicParamsSchema, BilibiliEmojiParamsSchema, BilibiliLiveParamsSchema, BilibiliLoginParamsSchema, BilibiliQrcodeParamsSchema, BilibiliQrcodeStatusParamsSchema, BilibiliUserParamsSchema, BilibiliValidationSchemas2 as BilibiliValidationSchemas, BilibiliVideoDownloadParamsSchema, BilibiliVideoParamsSchema, CreateApp, DouyinCommentParamsSchema, DouyinCommentReplyParamsSchema, DouyinEmojiListParamsSchema, DouyinEmojiProParamsSchema, DouyinMusicParamsSchema, DouyinQrcodeParamsSchema, DouyinSearchParamsSchema, DouyinUserParamsSchema, DouyinValidationSchemas2 as DouyinValidationSchemas, DouyinWorkParamsSchema, KuaishouCommentParamsSchema, KuaishouEmojiParamsSchema, KuaishouValidationSchemas2 as KuaishouValidationSchemas, KuaishouVideoParamsSchema, ValidationError, amagi, amagiClient, av2bv, bilibili, bilibiliApiUrls, bilibiliErrorCodeMap, bilibiliUtils, bv2av, createAmagiClient, createBilibiliRoutes, createBoundBilibiliApi, createBoundDouyinApi, createBoundKuaishouApi, createDouyinRoutes, createErrorResponse, createKuaishouRoutes, createSuccessResponse, Client as default, douyin, douyinApiUrls, douyinSign, douyinUtils, fetchData, fetchResponse, getBilibiliData, getDouyinData, getHeadersAndData, getKuaishouData, handleError, httpLogger, kuaishou, kuaishouApiUrls, kuaishouUtils, logMiddleware, logger, qtparam, createBilibiliRoutes as registerBilibiliRoutes, createDouyinRoutes as registerDouyinRoutes, createKuaishouRoutes as registerKuaishouRoutes, validateBilibiliParams, validateDouyinParams, validateKuaishouParams, wbi_sign };
|