@iflyrpa/actions 4.0.4-beta.2 → 4.0.4-beta.4
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/bundle.js +466 -409
- package/dist/bundle.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +464 -407
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +463 -408
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="83bb856e-4161-51e9-bcc6-bc0ff84cc5f0")}catch(e){}}();
|
|
3
3
|
import * as __WEBPACK_EXTERNAL_MODULE_crypto__ from "crypto";
|
|
4
4
|
import * as __WEBPACK_EXTERNAL_MODULE_fs__ from "fs";
|
|
5
5
|
import * as __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_package_json_58ae5f06__ from "@iflyrpa/share/package.json";
|
|
@@ -4352,7 +4352,7 @@ function __webpack_require__(moduleId) {
|
|
|
4352
4352
|
return module;
|
|
4353
4353
|
};
|
|
4354
4354
|
})();
|
|
4355
|
-
var package_namespaceObject = JSON.parse('{"i8":"4.0.4-beta.
|
|
4355
|
+
var package_namespaceObject = JSON.parse('{"i8":"4.0.4-beta.4"}');
|
|
4356
4356
|
const PROXY_CREDENTIALS = [
|
|
4357
4357
|
{
|
|
4358
4358
|
ip: "47.110.131.129",
|
|
@@ -13368,400 +13368,421 @@ function generateRandomString(length) {
|
|
|
13368
13368
|
}
|
|
13369
13369
|
return randomString;
|
|
13370
13370
|
}
|
|
13371
|
+
function safeSerialize(obj) {
|
|
13372
|
+
if (!obj || "object" != typeof obj) return obj;
|
|
13373
|
+
try {
|
|
13374
|
+
return JSON.parse(JSON.stringify(obj));
|
|
13375
|
+
} catch (error) {
|
|
13376
|
+
return {};
|
|
13377
|
+
}
|
|
13378
|
+
}
|
|
13371
13379
|
const mock_mockAction = async (task, params)=>{
|
|
13372
13380
|
const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || "");
|
|
13373
13381
|
if (!params.extraParam || !params.extraParam["security-sdk/s_sdk_pri_key"] || !params.extraParam["security-sdk/s_sdk_pub_key"] || !params.extraParam["security-sdk/s_sdk_sign_data_key/web_protect"] || !params.extraParam["security-sdk/s_sdk_server_cert_key"] || !params.extraParam["security-sdk/s_sdk_crypt_sdk"]) return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "extraParam 参数缺失或不完整", "");
|
|
13374
|
-
|
|
13375
|
-
|
|
13376
|
-
|
|
13377
|
-
|
|
13378
|
-
|
|
13379
|
-
|
|
13380
|
-
|
|
13381
|
-
|
|
13382
|
-
|
|
13383
|
-
|
|
13384
|
-
|
|
13385
|
-
|
|
13386
|
-
|
|
13387
|
-
|
|
13388
|
-
|
|
13389
|
-
|
|
13390
|
-
|
|
13391
|
-
|
|
13392
|
-
|
|
13393
|
-
|
|
13394
|
-
|
|
13395
|
-
|
|
13396
|
-
|
|
13397
|
-
|
|
13398
|
-
|
|
13399
|
-
|
|
13400
|
-
|
|
13401
|
-
|
|
13402
|
-
|
|
13403
|
-
|
|
13404
|
-
|
|
13405
|
-
|
|
13406
|
-
|
|
13407
|
-
|
|
13408
|
-
|
|
13409
|
-
|
|
13410
|
-
|
|
13411
|
-
|
|
13412
|
-
|
|
13413
|
-
|
|
13414
|
-
|
|
13415
|
-
|
|
13416
|
-
|
|
13417
|
-
|
|
13418
|
-
|
|
13419
|
-
|
|
13420
|
-
|
|
13421
|
-
|
|
13422
|
-
|
|
13423
|
-
|
|
13424
|
-
|
|
13425
|
-
|
|
13426
|
-
|
|
13427
|
-
|
|
13428
|
-
|
|
13429
|
-
|
|
13430
|
-
|
|
13431
|
-
|
|
13432
|
-
|
|
13433
|
-
|
|
13434
|
-
|
|
13435
|
-
|
|
13436
|
-
|
|
13437
|
-
|
|
13438
|
-
|
|
13382
|
+
let currentStep = "初始化";
|
|
13383
|
+
try {
|
|
13384
|
+
currentStep = "验证账号信息";
|
|
13385
|
+
const userAgent = params.userAgent || "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.38";
|
|
13386
|
+
const sessionidCookie = params.cookies.find((it)=>"msToken" === it.name)?.value;
|
|
13387
|
+
if (!sessionidCookie) return {
|
|
13388
|
+
code: 414,
|
|
13389
|
+
message: "账号数据异常,请重新绑定账号后重试。",
|
|
13390
|
+
data: ""
|
|
13391
|
+
};
|
|
13392
|
+
currentStep = "准备请求参数";
|
|
13393
|
+
const headers = {
|
|
13394
|
+
cookie: params.cookies.map((it)=>`${it.name}=${it.value}`).join(";"),
|
|
13395
|
+
origin: "https://creator.douyin.com",
|
|
13396
|
+
referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
|
|
13397
|
+
Accept: "application/json, text/plain, */*",
|
|
13398
|
+
"Accept-Encoding": "gzip, deflate, br, zstd",
|
|
13399
|
+
"Content-Type": "application/json",
|
|
13400
|
+
pragma: "no-cache",
|
|
13401
|
+
"cache-control": "no-cache",
|
|
13402
|
+
"sec-ch-ua-platform": params.extraParam?.browserInfo?.["sec-ch-ua-platform"] || "",
|
|
13403
|
+
"sec-ch-ua": params.extraParam?.browserInfo?.["sec-ch-ua"] || "",
|
|
13404
|
+
"bd-ticket-guard-web-version": "2",
|
|
13405
|
+
"sec-ch-ua-mobile": "?0",
|
|
13406
|
+
"user-agent": userAgent,
|
|
13407
|
+
"sec-fetch-site": "same-origin",
|
|
13408
|
+
"sec-fetch-mode": "cors",
|
|
13409
|
+
"sec-fetch-dest": "empty",
|
|
13410
|
+
"accept-language": "zh-CN,zh;q=0.9",
|
|
13411
|
+
priority: "u=1, i"
|
|
13412
|
+
};
|
|
13413
|
+
const publishParams = {
|
|
13414
|
+
read_aid: "2906",
|
|
13415
|
+
aid: "1128",
|
|
13416
|
+
cookie_enabled: "true",
|
|
13417
|
+
screen_width: params.extraParam?.browserInfo.screen_width || "1920",
|
|
13418
|
+
screen_height: params.extraParam?.browserInfo.screen_height || "1080",
|
|
13419
|
+
browser_language: params.extraParam?.browserInfo.browser_language || "zh-CN",
|
|
13420
|
+
browser_platform: params.extraParam?.browserInfo.browser_platform || "Win32",
|
|
13421
|
+
browser_name: params.extraParam?.browserInfo.browser_name || "Mozilla",
|
|
13422
|
+
browser_version: userAgent,
|
|
13423
|
+
browser_online: "true",
|
|
13424
|
+
timezone_name: "Asia/Shanghai",
|
|
13425
|
+
support_h265: "1",
|
|
13426
|
+
msToken: params.cookies.find((e)=>"msToken" === e.name)?.value || "",
|
|
13427
|
+
a_bogus: ""
|
|
13428
|
+
};
|
|
13429
|
+
task.logger.info(`[douyinPublish] publishParams ${JSON.stringify(publishParams)}`);
|
|
13430
|
+
const publishData = {
|
|
13431
|
+
item: {
|
|
13432
|
+
common: {
|
|
13433
|
+
text: params.content,
|
|
13434
|
+
text_extra: params.textExtra,
|
|
13435
|
+
activity: "[]",
|
|
13436
|
+
challenges: params.challengeIds || "[]",
|
|
13437
|
+
hashtag_source: "",
|
|
13438
|
+
mentions: "[]",
|
|
13439
|
+
music_id: params.musicId || "",
|
|
13440
|
+
music_end_time: 1000 * (params.musicDuration || 0),
|
|
13441
|
+
hot_sentence: params.hotSentence || "",
|
|
13442
|
+
visibility_type: Number(params.visibleRange) || 0,
|
|
13443
|
+
download: params.allowSave ? 1 : 0,
|
|
13444
|
+
timing: params.isImmediatelyPublish ? -1 : params.scheduledPublish,
|
|
13445
|
+
media_type: Number(params.publishType) || 2,
|
|
13446
|
+
images: [],
|
|
13447
|
+
creation_id: ""
|
|
13448
|
+
},
|
|
13449
|
+
cover: {
|
|
13450
|
+
poster: ""
|
|
13451
|
+
},
|
|
13452
|
+
mix: params.mix ? {
|
|
13453
|
+
mix_id: params.mix.mix_id,
|
|
13454
|
+
mix_order: params.mix.mix_order || 0
|
|
13455
|
+
} : {},
|
|
13456
|
+
anchor: {},
|
|
13457
|
+
declare: {
|
|
13458
|
+
user_declare_info: "{}"
|
|
13459
|
+
}
|
|
13460
|
+
}
|
|
13461
|
+
};
|
|
13462
|
+
const args = [
|
|
13463
|
+
{
|
|
13464
|
+
headers
|
|
13439
13465
|
},
|
|
13440
|
-
|
|
13441
|
-
|
|
13442
|
-
|
|
13443
|
-
|
|
13444
|
-
|
|
13445
|
-
|
|
13446
|
-
|
|
13466
|
+
task.logger,
|
|
13467
|
+
"",
|
|
13468
|
+
"",
|
|
13469
|
+
params.accountId,
|
|
13470
|
+
"douyin"
|
|
13471
|
+
];
|
|
13472
|
+
const http = new Http({
|
|
13473
|
+
headers
|
|
13474
|
+
});
|
|
13475
|
+
const proxyHttp = new Http(...args);
|
|
13476
|
+
const uploadedImgList = params.uploadedImgList ? JSON.parse(params.uploadedImgList) : [];
|
|
13477
|
+
if (uploadedImgList.length > 0) publishData.item.common.images = uploadedImgList;
|
|
13478
|
+
else {
|
|
13479
|
+
const tmpCachePath = task.getTmpPath();
|
|
13480
|
+
const uploader = new DouyinImageUploader(proxyHttp, headers, publishParams, tmpCachePath);
|
|
13481
|
+
if (params.coverImage) {
|
|
13482
|
+
const cover = await uploader.uploadCover(params.coverImage);
|
|
13483
|
+
if (cover) {
|
|
13484
|
+
publishData.item.common.images.push({
|
|
13485
|
+
uri: cover.uri,
|
|
13486
|
+
width: cover.width,
|
|
13487
|
+
height: cover.height
|
|
13488
|
+
});
|
|
13489
|
+
publishData.item.cover = {
|
|
13490
|
+
poster: cover.uri
|
|
13491
|
+
};
|
|
13492
|
+
}
|
|
13493
|
+
}
|
|
13494
|
+
if (params.banners && params.banners.length > 0) {
|
|
13495
|
+
const banners = params.banners.filter((i)=>i !== params.coverImage);
|
|
13496
|
+
const uploadResults = await uploader.uploadImages(banners);
|
|
13497
|
+
publishData.item.common.images = publishData.item.common.images.concat(uploadResults.map((result)=>({
|
|
13498
|
+
uri: result.uri,
|
|
13499
|
+
width: result.width,
|
|
13500
|
+
height: result.height
|
|
13501
|
+
})));
|
|
13447
13502
|
}
|
|
13448
13503
|
}
|
|
13449
|
-
|
|
13450
|
-
|
|
13451
|
-
{
|
|
13452
|
-
headers
|
|
13453
|
-
|
|
13454
|
-
|
|
13455
|
-
|
|
13456
|
-
|
|
13457
|
-
|
|
13458
|
-
|
|
13459
|
-
|
|
13460
|
-
|
|
13461
|
-
|
|
13462
|
-
|
|
13463
|
-
|
|
13464
|
-
|
|
13465
|
-
|
|
13466
|
-
|
|
13467
|
-
|
|
13468
|
-
const uploader = new DouyinImageUploader(proxyHttp, headers, publishParams, tmpCachePath);
|
|
13469
|
-
if (params.coverImage) {
|
|
13470
|
-
const cover = await uploader.uploadCover(params.coverImage);
|
|
13471
|
-
if (cover) {
|
|
13472
|
-
publishData.item.common.images.push({
|
|
13473
|
-
uri: cover.uri,
|
|
13474
|
-
width: cover.width,
|
|
13475
|
-
height: cover.height
|
|
13476
|
-
});
|
|
13477
|
-
publishData.item.cover = {
|
|
13478
|
-
poster: cover.uri
|
|
13504
|
+
publishData.item.common.creation_id = generateRandomString(8) + Date.now();
|
|
13505
|
+
let decision = null;
|
|
13506
|
+
proxyHttp.addResponseInterceptor((response)=>{
|
|
13507
|
+
task.logger.info(`[douyinPublish] 拦截器收到响应response.headers: ${JSON.stringify(response.headers)} `);
|
|
13508
|
+
task.logger.info(`[douyinPublish] 拦截器收到响应response.data: ${JSON.stringify(response.data)} `);
|
|
13509
|
+
decision = parseVerifyPassportDecision(response.headers["x-tt-verify-passport-decision"]);
|
|
13510
|
+
if (needsVerification(decision)) {
|
|
13511
|
+
task.logger.info(`[douyinPublish] 检测到需要验证: ${JSON.stringify(decision)}`);
|
|
13512
|
+
return;
|
|
13513
|
+
}
|
|
13514
|
+
if (!response || !response.data) return;
|
|
13515
|
+
const responseData = response.data;
|
|
13516
|
+
if (response && responseData?.status_code && 0 !== responseData.status_code) {
|
|
13517
|
+
const errorCode = 4 === responseData.status_code ? 500 : responseData.status_code;
|
|
13518
|
+
if (4 === responseData.status_code) task.logger.warn(`[douyinPublish] 抖音服务器错误 status_code: 4,映射为 500 触发重试。原始响应: ${JSON.stringify(responseData)}`);
|
|
13519
|
+
return {
|
|
13520
|
+
code: errorCode,
|
|
13521
|
+
message: responseData.status_msg || "文章发布异常,请稍后重试。",
|
|
13522
|
+
data: responseData
|
|
13479
13523
|
};
|
|
13480
13524
|
}
|
|
13525
|
+
});
|
|
13526
|
+
task._timerRecord.PrePublish = Date.now();
|
|
13527
|
+
if (MockPublish) {
|
|
13528
|
+
const data = "123456789";
|
|
13529
|
+
const message = `图文模拟发布成功 ${http.proxyInfo}`;
|
|
13530
|
+
await updateTaskState?.({
|
|
13531
|
+
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.SUCCESS,
|
|
13532
|
+
result: {
|
|
13533
|
+
response: data
|
|
13534
|
+
}
|
|
13535
|
+
});
|
|
13536
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(0, message, data);
|
|
13481
13537
|
}
|
|
13482
|
-
|
|
13483
|
-
|
|
13484
|
-
|
|
13485
|
-
|
|
13486
|
-
|
|
13487
|
-
|
|
13488
|
-
|
|
13489
|
-
|
|
13490
|
-
|
|
13491
|
-
|
|
13492
|
-
|
|
13493
|
-
|
|
13494
|
-
|
|
13495
|
-
|
|
13496
|
-
|
|
13497
|
-
|
|
13498
|
-
|
|
13499
|
-
|
|
13500
|
-
|
|
13538
|
+
let webProtectData;
|
|
13539
|
+
try {
|
|
13540
|
+
webProtectData = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_sign_data_key/web_protect"] || "{}").data || "{}");
|
|
13541
|
+
if (!webProtectData.ticket || !webProtectData.ts_sign || !webProtectData.client_cert) {
|
|
13542
|
+
task.logger.error(`webProtectData 关键字段缺失: ${JSON.stringify(webProtectData)}`);
|
|
13543
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 webProtectData 不完整,请重新获取后重试", "");
|
|
13544
|
+
}
|
|
13545
|
+
} catch (error) {
|
|
13546
|
+
task.logger.error(`解析 webProtectData 失败: ${error}`);
|
|
13547
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 webProtectData 解析失败,请重新获取后重试", "");
|
|
13548
|
+
}
|
|
13549
|
+
let ticket = webProtectData.ticket;
|
|
13550
|
+
let ts_sign = webProtectData.ts_sign;
|
|
13551
|
+
const serverDataCookie = params.cookies.find((it)=>"bd_ticket_guard_server_data" === it.name)?.value;
|
|
13552
|
+
if (serverDataCookie) try {
|
|
13553
|
+
const decoded = JSON.parse(Buffer.from(decodeURIComponent(serverDataCookie), "base64").toString("utf8"));
|
|
13554
|
+
if (decoded.ticket && decoded.ts_sign) {
|
|
13555
|
+
if (decoded.ticket !== ticket) task.logger.info("[douyinPublish] 使用 cookie 中的最新 ticket(web_protect 已过期)");
|
|
13556
|
+
ticket = decoded.ticket;
|
|
13557
|
+
ts_sign = decoded.ts_sign;
|
|
13558
|
+
}
|
|
13559
|
+
} catch (error) {
|
|
13560
|
+
task.logger.info(`[douyinPublish] 解析 bd_ticket_guard_server_data 失败,回退到 web_protect: ${error}`);
|
|
13501
13561
|
}
|
|
13502
|
-
|
|
13503
|
-
|
|
13504
|
-
|
|
13505
|
-
|
|
13506
|
-
|
|
13507
|
-
|
|
13508
|
-
|
|
13509
|
-
|
|
13510
|
-
|
|
13511
|
-
|
|
13562
|
+
let ec_privateKey;
|
|
13563
|
+
try {
|
|
13564
|
+
ec_privateKey = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_crypt_sdk"] || "{}").data || "{}").ec_privateKey;
|
|
13565
|
+
if (!ec_privateKey) {
|
|
13566
|
+
task.logger.error("[douyinPublish] ec_privateKey 为空");
|
|
13567
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 ec_privateKey 缺失,请重新获取后重试", "");
|
|
13568
|
+
}
|
|
13569
|
+
} catch (error) {
|
|
13570
|
+
task.logger.error(`[douyinPublish] 解析 ec_privateKey 失败: ${error}`);
|
|
13571
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 ec_privateKey 解析失败,请重新获取后重试", "");
|
|
13512
13572
|
}
|
|
13513
|
-
|
|
13514
|
-
|
|
13515
|
-
|
|
13516
|
-
|
|
13517
|
-
|
|
13518
|
-
|
|
13519
|
-
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.SUCCESS,
|
|
13520
|
-
result: {
|
|
13521
|
-
response: data
|
|
13573
|
+
let certificate;
|
|
13574
|
+
try {
|
|
13575
|
+
certificate = JSON.parse(params.extraParam["security-sdk/s_sdk_server_cert_key"] || "{}").cert;
|
|
13576
|
+
if (!certificate) {
|
|
13577
|
+
task.logger.error("[douyinPublish] certificate 为空");
|
|
13578
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 certificate 缺失,请重新获取后重试", "");
|
|
13522
13579
|
}
|
|
13523
|
-
})
|
|
13524
|
-
|
|
13525
|
-
|
|
13526
|
-
let webProtectData;
|
|
13527
|
-
try {
|
|
13528
|
-
webProtectData = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_sign_data_key/web_protect"] || "{}").data || "{}");
|
|
13529
|
-
if (!webProtectData.ticket || !webProtectData.ts_sign || !webProtectData.client_cert) {
|
|
13530
|
-
task.logger.error(`webProtectData 关键字段缺失: ${JSON.stringify(webProtectData)}`);
|
|
13531
|
-
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 webProtectData 不完整,请重新获取后重试", "");
|
|
13580
|
+
} catch (error) {
|
|
13581
|
+
task.logger.error(`[douyinPublish] 解析 certificate 失败: ${error}`);
|
|
13582
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 certificate 解析失败,请重新获取后重试", "");
|
|
13532
13583
|
}
|
|
13533
|
-
|
|
13534
|
-
|
|
13535
|
-
|
|
13536
|
-
|
|
13537
|
-
|
|
13538
|
-
|
|
13539
|
-
|
|
13540
|
-
|
|
13541
|
-
|
|
13542
|
-
|
|
13543
|
-
if (
|
|
13544
|
-
|
|
13545
|
-
|
|
13584
|
+
const ree_public_key = webProtectData.client_cert.replace("pub.", "");
|
|
13585
|
+
let bdTicketGuardClientData;
|
|
13586
|
+
try {
|
|
13587
|
+
bdTicketGuardClientData = getBdV2({
|
|
13588
|
+
ticket,
|
|
13589
|
+
ts_sign: ts_sign,
|
|
13590
|
+
ec_privateKey: ec_privateKey,
|
|
13591
|
+
certificate: certificate,
|
|
13592
|
+
bd_ticket_guard_ree_public_key: ree_public_key
|
|
13593
|
+
});
|
|
13594
|
+
if (!bdTicketGuardClientData || !bdTicketGuardClientData["headers_bd_ticket_guard_client_data"]) {
|
|
13595
|
+
task.logger.error(`[douyinPublish] bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`);
|
|
13596
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 bdTicketGuardClientData 生成失败,请重新获取后重试", "");
|
|
13597
|
+
}
|
|
13598
|
+
} catch (error) {
|
|
13599
|
+
task.logger.error(`[douyinPublish] 生成 bdTicketGuardClientData 失败: ${error}`);
|
|
13600
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 bdTicketGuardClientData 生成异常,请重新获取后重试", "");
|
|
13546
13601
|
}
|
|
13547
|
-
|
|
13548
|
-
|
|
13549
|
-
|
|
13550
|
-
|
|
13551
|
-
|
|
13552
|
-
|
|
13553
|
-
|
|
13554
|
-
|
|
13555
|
-
|
|
13602
|
+
task.logger.info("[douyinPublish] bdTicketGuardClientData 生成成功");
|
|
13603
|
+
const publishQuery = {
|
|
13604
|
+
...publishParams,
|
|
13605
|
+
a_bogus: ""
|
|
13606
|
+
};
|
|
13607
|
+
const queryString = new URLSearchParams(publishQuery).toString();
|
|
13608
|
+
let aBogus;
|
|
13609
|
+
try {
|
|
13610
|
+
aBogus = mock_getABogus(`https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`, publishData, userAgent);
|
|
13611
|
+
if (!aBogus || aBogus.length < 10) {
|
|
13612
|
+
task.logger.error(`[douyinPublish] a_bogus 生成异常,长度过短: ${aBogus}`);
|
|
13613
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 a_bogus 生成失败,请重试", "");
|
|
13614
|
+
}
|
|
13615
|
+
} catch (error) {
|
|
13616
|
+
task.logger.error(`[douyinPublish] 生成 a_bogus 失败: ${error}`);
|
|
13617
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 a_bogus 生成异常,请重试", "");
|
|
13556
13618
|
}
|
|
13557
|
-
|
|
13558
|
-
|
|
13559
|
-
|
|
13560
|
-
|
|
13561
|
-
|
|
13562
|
-
|
|
13563
|
-
|
|
13564
|
-
|
|
13565
|
-
|
|
13566
|
-
|
|
13619
|
+
publishQuery.a_bogus = aBogus;
|
|
13620
|
+
const publishQueryParams = new URLSearchParams(publishQuery).toString();
|
|
13621
|
+
let csrfToken;
|
|
13622
|
+
try {
|
|
13623
|
+
csrfToken = mock_generateCsrfTokenAdvanced({
|
|
13624
|
+
cookies: params.cookies,
|
|
13625
|
+
url: "https://creator.douyin.com/web/api/media/aweme/create_v2/",
|
|
13626
|
+
method: "POST",
|
|
13627
|
+
userAgent
|
|
13628
|
+
});
|
|
13629
|
+
if (!csrfToken || csrfToken.length < 10) {
|
|
13630
|
+
task.logger.error(`[douyinPublish] csrfToken 生成异常,长度过短: ${csrfToken}`);
|
|
13631
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 csrfToken 生成失败,请重试", "");
|
|
13632
|
+
}
|
|
13633
|
+
task.logger.info(`[douyinPublish] csrfToken 生成成功: ${csrfToken.substring(0, 20)}...`);
|
|
13634
|
+
} catch (error) {
|
|
13635
|
+
task.logger.error(`[douyinPublish] 生成 csrfToken 失败: ${error}`);
|
|
13636
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 csrfToken 生成异常,请重试", "");
|
|
13567
13637
|
}
|
|
13568
|
-
|
|
13569
|
-
|
|
13570
|
-
|
|
13571
|
-
|
|
13572
|
-
|
|
13573
|
-
|
|
13574
|
-
|
|
13575
|
-
bdTicketGuardClientData = getBdV2({
|
|
13576
|
-
ticket,
|
|
13577
|
-
ts_sign: ts_sign,
|
|
13578
|
-
ec_privateKey: ec_privateKey,
|
|
13579
|
-
certificate: certificate,
|
|
13580
|
-
bd_ticket_guard_ree_public_key: ree_public_key
|
|
13581
|
-
});
|
|
13582
|
-
if (!bdTicketGuardClientData || !bdTicketGuardClientData["headers_bd_ticket_guard_client_data"]) {
|
|
13583
|
-
task.logger.error(`[douyinPublish] bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`);
|
|
13584
|
-
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 bdTicketGuardClientData 生成失败,请重新获取后重试", "");
|
|
13638
|
+
let sessionDtrait;
|
|
13639
|
+
try {
|
|
13640
|
+
sessionDtrait = mock_generateDtrait("/web/api/media/aweme/create_v2/");
|
|
13641
|
+
task.logger.info(`[douyinPublish] sessionDtrait 生成成功: ${sessionDtrait || "(空)"}`);
|
|
13642
|
+
} catch (error) {
|
|
13643
|
+
task.logger.error(`[douyinPublish] 生成 sessionDtrait 失败: ${error}`);
|
|
13644
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 sessionDtrait 生成异常,请重试", "");
|
|
13585
13645
|
}
|
|
13586
|
-
|
|
13587
|
-
|
|
13588
|
-
|
|
13589
|
-
|
|
13590
|
-
|
|
13591
|
-
|
|
13592
|
-
|
|
13593
|
-
|
|
13594
|
-
|
|
13595
|
-
|
|
13596
|
-
|
|
13597
|
-
|
|
13598
|
-
|
|
13599
|
-
|
|
13600
|
-
|
|
13601
|
-
|
|
13646
|
+
task.logger.info(`[douyinPublish] headers: ${JSON.stringify({
|
|
13647
|
+
...headers,
|
|
13648
|
+
Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
|
|
13649
|
+
"Content-Type": "application/json",
|
|
13650
|
+
Accept: "application/json, text/plain, */*",
|
|
13651
|
+
"bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
|
|
13652
|
+
"bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
|
|
13653
|
+
"bd-ticket-guard-version": "2",
|
|
13654
|
+
"bd-ticket-guard-web-sign-type": "1",
|
|
13655
|
+
"bd-ticket-guard-web-version": "2",
|
|
13656
|
+
"x-secsdk-csrf-token": csrfToken,
|
|
13657
|
+
"x-tt-session-dtrait": sessionDtrait || ""
|
|
13658
|
+
})}`);
|
|
13659
|
+
task.logger.info(`[douyinPublish] url: https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`);
|
|
13660
|
+
let publishResult;
|
|
13661
|
+
try {
|
|
13662
|
+
publishResult = await proxyHttp.api({
|
|
13663
|
+
method: "post",
|
|
13664
|
+
url: `https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`,
|
|
13665
|
+
data: publishData,
|
|
13666
|
+
defaultErrorMsg: "发布异常,请稍后重试。",
|
|
13667
|
+
headers: {
|
|
13668
|
+
...headers,
|
|
13669
|
+
Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
|
|
13670
|
+
"Content-Type": "application/json",
|
|
13671
|
+
Accept: "application/json, text/plain, */*",
|
|
13672
|
+
"bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
|
|
13673
|
+
"bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
|
|
13674
|
+
"bd-ticket-guard-version": "2",
|
|
13675
|
+
"bd-ticket-guard-web-sign-type": "1",
|
|
13676
|
+
"bd-ticket-guard-web-version": "2",
|
|
13677
|
+
"x-secsdk-csrf-token": csrfToken,
|
|
13678
|
+
"x-tt-session-dtrait": sessionDtrait || ""
|
|
13679
|
+
}
|
|
13680
|
+
}, {
|
|
13681
|
+
timeout: 60000,
|
|
13682
|
+
retries: 3,
|
|
13683
|
+
retryDelay: 2000
|
|
13684
|
+
});
|
|
13685
|
+
} catch (error) {
|
|
13686
|
+
const handledError = Http.handleApiError(error);
|
|
13687
|
+
const isProxyOrNetworkError = [
|
|
13688
|
+
599,
|
|
13689
|
+
500,
|
|
13690
|
+
502,
|
|
13691
|
+
503,
|
|
13692
|
+
504
|
|
13693
|
+
].includes(handledError.code);
|
|
13694
|
+
if (isProxyOrNetworkError) {
|
|
13695
|
+
const isProxyRequest = handledError.extra?.isProxyRequest === true;
|
|
13696
|
+
const errorType = 599 === handledError.code || isProxyRequest ? "代理错误" : "网络错误";
|
|
13697
|
+
const message = `图文发布失败,${errorType}:${handledError.message}${task.debug ? ` ${http.proxyInfo}` : ""}`;
|
|
13698
|
+
task.logger.error(`[douyinPublish] ${errorType},直接返回: ${message}`, stringifyError(handledError));
|
|
13699
|
+
await updateTaskState?.({
|
|
13700
|
+
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
|
|
13701
|
+
error: message
|
|
13702
|
+
});
|
|
13703
|
+
return {
|
|
13704
|
+
code: 414,
|
|
13705
|
+
data: "",
|
|
13706
|
+
message
|
|
13707
|
+
};
|
|
13708
|
+
}
|
|
13709
|
+
throw error;
|
|
13602
13710
|
}
|
|
13603
|
-
|
|
13604
|
-
|
|
13605
|
-
|
|
13606
|
-
|
|
13607
|
-
|
|
13608
|
-
|
|
13609
|
-
|
|
13610
|
-
|
|
13611
|
-
|
|
13612
|
-
|
|
13613
|
-
|
|
13614
|
-
|
|
13615
|
-
|
|
13616
|
-
|
|
13617
|
-
|
|
13618
|
-
|
|
13619
|
-
|
|
13711
|
+
task.logger.info(`[douyinPublish] decision值: ${JSON.stringify(decision)}, needsVerification(decision): ${needsVerification(decision)}`);
|
|
13712
|
+
if (needsVerification(decision)) {
|
|
13713
|
+
const details = [
|
|
13714
|
+
publishResult.status_msg,
|
|
13715
|
+
decision?.verify_title,
|
|
13716
|
+
decision?.verify_desc
|
|
13717
|
+
].filter(Boolean).join(" ");
|
|
13718
|
+
const message = `图文发布失败,原因:${details}${task.debug ? ` ${http.proxyInfo}` : ""}`;
|
|
13719
|
+
const safeDecision = safeSerialize(decision) ?? {};
|
|
13720
|
+
const mockData = {
|
|
13721
|
+
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
|
|
13722
|
+
error: message,
|
|
13723
|
+
result: {
|
|
13724
|
+
...safeDecision,
|
|
13725
|
+
data: decision,
|
|
13726
|
+
uploadedImgList: JSON.stringify(publishData.item.common.images)
|
|
13727
|
+
}
|
|
13728
|
+
};
|
|
13729
|
+
await updateTaskState?.(mockData);
|
|
13730
|
+
return {
|
|
13731
|
+
code: 0,
|
|
13732
|
+
data: mockData,
|
|
13733
|
+
message: "操作成功"
|
|
13734
|
+
};
|
|
13620
13735
|
}
|
|
13621
|
-
|
|
13622
|
-
|
|
13623
|
-
|
|
13624
|
-
|
|
13625
|
-
|
|
13626
|
-
|
|
13627
|
-
|
|
13628
|
-
|
|
13629
|
-
|
|
13630
|
-
|
|
13631
|
-
task.logger.error(`[douyinPublish] 生成 sessionDtrait 失败: ${error}`);
|
|
13632
|
-
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(414, "安全参数 sessionDtrait 生成异常,请重试", "");
|
|
13633
|
-
}
|
|
13634
|
-
task.logger.info(`[douyinPublish] headers: ${JSON.stringify({
|
|
13635
|
-
...headers,
|
|
13636
|
-
Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
|
|
13637
|
-
"Content-Type": "application/json",
|
|
13638
|
-
Accept: "application/json, text/plain, */*",
|
|
13639
|
-
"bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
|
|
13640
|
-
"bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
|
|
13641
|
-
"bd-ticket-guard-version": "2",
|
|
13642
|
-
"bd-ticket-guard-web-sign-type": "1",
|
|
13643
|
-
"bd-ticket-guard-web-version": "2",
|
|
13644
|
-
"x-secsdk-csrf-token": csrfToken,
|
|
13645
|
-
"x-tt-session-dtrait": sessionDtrait || ""
|
|
13646
|
-
})}`);
|
|
13647
|
-
task.logger.info(`[douyinPublish] url: https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`);
|
|
13648
|
-
let publishResult;
|
|
13649
|
-
try {
|
|
13650
|
-
publishResult = await proxyHttp.api({
|
|
13651
|
-
method: "post",
|
|
13652
|
-
url: `https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`,
|
|
13653
|
-
data: publishData,
|
|
13654
|
-
defaultErrorMsg: "发布异常,请稍后重试。",
|
|
13655
|
-
headers: {
|
|
13656
|
-
...headers,
|
|
13657
|
-
Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
|
|
13658
|
-
"Content-Type": "application/json",
|
|
13659
|
-
Accept: "application/json, text/plain, */*",
|
|
13660
|
-
"bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
|
|
13661
|
-
"bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
|
|
13662
|
-
"bd-ticket-guard-version": "2",
|
|
13663
|
-
"bd-ticket-guard-web-sign-type": "1",
|
|
13664
|
-
"bd-ticket-guard-web-version": "2",
|
|
13665
|
-
"x-secsdk-csrf-token": csrfToken,
|
|
13666
|
-
"x-tt-session-dtrait": sessionDtrait || ""
|
|
13667
|
-
}
|
|
13668
|
-
}, {
|
|
13669
|
-
timeout: 60000,
|
|
13670
|
-
retries: 3,
|
|
13671
|
-
retryDelay: 2000
|
|
13736
|
+
reportLogger({
|
|
13737
|
+
token: params.huiwenToken || "",
|
|
13738
|
+
enverionment: task.enverionment || "development",
|
|
13739
|
+
postId: params.articleId,
|
|
13740
|
+
eip: proxyHttp.proxyInfo,
|
|
13741
|
+
proxyIp: params.localIP,
|
|
13742
|
+
accountId: params.accountId,
|
|
13743
|
+
uid: params.uid,
|
|
13744
|
+
platform: "douyin",
|
|
13745
|
+
publishParams: publishData
|
|
13672
13746
|
});
|
|
13673
|
-
|
|
13674
|
-
const
|
|
13675
|
-
const
|
|
13676
|
-
|
|
13677
|
-
|
|
13678
|
-
|
|
13679
|
-
503,
|
|
13680
|
-
504
|
|
13681
|
-
].includes(handledError.code);
|
|
13682
|
-
if (isProxyOrNetworkError) {
|
|
13683
|
-
const isProxyRequest = handledError.extra?.isProxyRequest === true;
|
|
13684
|
-
const errorType = 599 === handledError.code || isProxyRequest ? "代理错误" : "网络错误";
|
|
13685
|
-
const message = `图文发布失败,${errorType}:${handledError.message}${task.debug ? ` ${http.proxyInfo}` : ""}`;
|
|
13686
|
-
task.logger.error(`[douyinPublish] ${errorType},直接返回: ${message}`, stringifyError(handledError));
|
|
13747
|
+
task.logger.info(`[douyinPublish] 发布结果 ${JSON.stringify(publishResult)}`);
|
|
13748
|
+
const isSuccess = 0 === publishResult.status_code;
|
|
13749
|
+
const message = `图文发布${isSuccess ? "成功" : `失败,原因:${publishResult.status_msg} ${decision?.verify_title} ${decision?.verify_desc}`}${task.debug ? ` ${http.proxyInfo}` : ""}`;
|
|
13750
|
+
const data = isSuccess ? publishResult.item_id || "" : "";
|
|
13751
|
+
if (!isSuccess) {
|
|
13752
|
+
const safeDecision = safeSerialize(decision) ?? {};
|
|
13687
13753
|
await updateTaskState?.({
|
|
13688
13754
|
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
|
|
13689
|
-
error: message
|
|
13755
|
+
error: message,
|
|
13756
|
+
result: {
|
|
13757
|
+
...safeDecision,
|
|
13758
|
+
data: safeDecision,
|
|
13759
|
+
uploadedImgList: JSON.stringify(publishData.item.common.images)
|
|
13760
|
+
}
|
|
13690
13761
|
});
|
|
13691
13762
|
return {
|
|
13692
13763
|
code: 414,
|
|
13693
|
-
data:
|
|
13764
|
+
data: safeDecision,
|
|
13694
13765
|
message
|
|
13695
13766
|
};
|
|
13696
13767
|
}
|
|
13697
|
-
|
|
13698
|
-
|
|
13699
|
-
task.logger.info(`[douyinPublish] decision值: ${JSON.stringify(decision)}, needsVerification(decision): ${needsVerification(decision)}`);
|
|
13700
|
-
if (needsVerification(decision)) {
|
|
13701
|
-
const details = [
|
|
13702
|
-
publishResult.status_msg,
|
|
13703
|
-
decision?.verify_title,
|
|
13704
|
-
decision?.verify_desc
|
|
13705
|
-
].filter(Boolean).join(" ");
|
|
13706
|
-
const message = `图文发布失败,原因:${details}${task.debug ? ` ${http.proxyInfo}` : ""}`;
|
|
13707
|
-
let decisionObj = {};
|
|
13708
|
-
if (decision) decisionObj = decision;
|
|
13709
|
-
const mockData = {
|
|
13710
|
-
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
|
|
13711
|
-
error: message,
|
|
13768
|
+
await updateTaskState?.({
|
|
13769
|
+
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.SUCCESS,
|
|
13712
13770
|
result: {
|
|
13713
|
-
|
|
13714
|
-
data: decision,
|
|
13715
|
-
uploadedImgList: JSON.stringify(publishData.item.common.images)
|
|
13771
|
+
response: data
|
|
13716
13772
|
}
|
|
13717
|
-
};
|
|
13718
|
-
|
|
13719
|
-
|
|
13720
|
-
|
|
13721
|
-
|
|
13722
|
-
|
|
13723
|
-
};
|
|
13724
|
-
}
|
|
13725
|
-
reportLogger({
|
|
13726
|
-
token: params.huiwenToken || "",
|
|
13727
|
-
enverionment: task.enverionment || "development",
|
|
13728
|
-
postId: params.articleId,
|
|
13729
|
-
eip: proxyHttp.proxyInfo,
|
|
13730
|
-
proxyIp: params.localIP,
|
|
13731
|
-
accountId: params.accountId,
|
|
13732
|
-
uid: params.uid,
|
|
13733
|
-
platform: "douyin",
|
|
13734
|
-
publishParams: publishData
|
|
13735
|
-
});
|
|
13736
|
-
task.logger.info(`[douyinPublish] 发布结果 ${JSON.stringify(publishResult)}`);
|
|
13737
|
-
const isSuccess = 0 === publishResult.status_code;
|
|
13738
|
-
const message = `图文发布${isSuccess ? "成功" : `失败,原因:${publishResult.status_msg} ${decision?.verify_title} ${decision?.verify_desc}`}${task.debug ? ` ${http.proxyInfo}` : ""}`;
|
|
13739
|
-
const data = isSuccess ? publishResult.item_id || "" : "";
|
|
13740
|
-
if (!isSuccess) {
|
|
13741
|
-
let decisionObj = {};
|
|
13742
|
-
if (decision) decisionObj = decision;
|
|
13773
|
+
});
|
|
13774
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(isSuccess ? 0 : 414, message, data);
|
|
13775
|
+
} catch (error) {
|
|
13776
|
+
const handledError = Http.handleApiError(error);
|
|
13777
|
+
const errorMsg = handledError.message || "发布失败";
|
|
13778
|
+
const errorCode = handledError.code || 500;
|
|
13779
|
+
task.logger.error(`[douyinPublish] 发布流程异常 (步骤: ${currentStep}): ${errorMsg}`, stringifyError(error), handledError.extra);
|
|
13743
13780
|
await updateTaskState?.({
|
|
13744
13781
|
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
|
|
13745
|
-
error:
|
|
13746
|
-
result: {
|
|
13747
|
-
...decisionObj,
|
|
13748
|
-
data: decision,
|
|
13749
|
-
uploadedImgList: JSON.stringify(publishData.item.common.images)
|
|
13750
|
-
}
|
|
13782
|
+
error: `${currentStep}失败: ${errorMsg}`
|
|
13751
13783
|
});
|
|
13752
|
-
return
|
|
13753
|
-
code: 414,
|
|
13754
|
-
data,
|
|
13755
|
-
message
|
|
13756
|
-
};
|
|
13784
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(errorCode, errorMsg, "");
|
|
13757
13785
|
}
|
|
13758
|
-
await updateTaskState?.({
|
|
13759
|
-
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.SUCCESS,
|
|
13760
|
-
result: {
|
|
13761
|
-
response: data
|
|
13762
|
-
}
|
|
13763
|
-
});
|
|
13764
|
-
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(isSuccess ? 0 : 414, message, data);
|
|
13765
13786
|
};
|
|
13766
13787
|
const douyinPublish_rpa_rpaAction = async (task, params)=>{
|
|
13767
13788
|
const commonCookies = {
|
|
@@ -15374,12 +15395,12 @@ async function getDouyinData(_task, params) {
|
|
|
15374
15395
|
const douyinData = {
|
|
15375
15396
|
fansNum,
|
|
15376
15397
|
favedNum,
|
|
15377
|
-
fansNumLastWeek: toNum(ov?.
|
|
15378
|
-
watchNumLastWeek: toNum(ov?.
|
|
15379
|
-
likeNumLastWeek: toNum(ov?.
|
|
15380
|
-
commentNumLastWeek: toNum(ov?.
|
|
15381
|
-
shareNumLastWeek: toNum(ov?.
|
|
15382
|
-
visitNumLastWeek: toNum(ov?.
|
|
15398
|
+
fansNumLastWeek: toNum(ov?.new_fans?.last_period_incr),
|
|
15399
|
+
watchNumLastWeek: toNum(ov?.play?.last_period_incr),
|
|
15400
|
+
likeNumLastWeek: toNum(ov?.digg?.last_period_incr),
|
|
15401
|
+
commentNumLastWeek: toNum(ov?.comment?.last_period_incr),
|
|
15402
|
+
shareNumLastWeek: toNum(ov?.share?.last_period_incr),
|
|
15403
|
+
visitNumLastWeek: toNum(ov?.profile?.last_period_incr)
|
|
15383
15404
|
};
|
|
15384
15405
|
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.success)(douyinData, "抖音平台数据获取成功!");
|
|
15385
15406
|
} catch (error) {
|
|
@@ -16016,7 +16037,7 @@ async function handleDouyinData(_task, params) {
|
|
|
16016
16037
|
}
|
|
16017
16038
|
async function handleShipinhaoData(_task, params) {
|
|
16018
16039
|
try {
|
|
16019
|
-
const { cookies, postType = "all", pageNum = 1, pageSize =
|
|
16040
|
+
const { cookies, postType = "all", pageNum = 1, pageSize = 10, showOriginalData = false } = params;
|
|
16020
16041
|
const aidCookie = cookies.find((it)=>"_aid" === it.name)?.value;
|
|
16021
16042
|
const aid = aidCookie || "9d3e0e9f-b842-498d-a273-4285d58df264";
|
|
16022
16043
|
const uinCookie = cookies.find((it)=>"uin" === it.name || "wxuin" === it.name)?.value || "0000000000";
|
|
@@ -16042,7 +16063,7 @@ async function handleShipinhaoData(_task, params) {
|
|
|
16042
16063
|
];
|
|
16043
16064
|
const http = new Http(...args);
|
|
16044
16065
|
const finderIdCookie = cookies.find((it)=>"_log_finder_id" === it.name || "finder_id" === it.name)?.value || "";
|
|
16045
|
-
async function fetchPosts(currentPage, userpageType, pageUrl) {
|
|
16066
|
+
async function fetchPosts(currentPage, userpageType, pageUrl, rawKeyBuff = "") {
|
|
16046
16067
|
return await http.api({
|
|
16047
16068
|
method: "post",
|
|
16048
16069
|
url: "https://channels.weixin.qq.com/micro/content/cgi-bin/mmfinderassistant-bin/post/post_list",
|
|
@@ -16059,7 +16080,7 @@ async function handleShipinhaoData(_task, params) {
|
|
|
16059
16080
|
timestamp: Date.now().toString(),
|
|
16060
16081
|
_log_finder_uin: "",
|
|
16061
16082
|
_log_finder_id: finderIdCookie,
|
|
16062
|
-
rawKeyBuff
|
|
16083
|
+
rawKeyBuff,
|
|
16063
16084
|
pluginSessionId: null,
|
|
16064
16085
|
scene: 7,
|
|
16065
16086
|
reqScene: 7
|
|
@@ -16070,6 +16091,37 @@ async function handleShipinhaoData(_task, params) {
|
|
|
16070
16091
|
timeout: 5000
|
|
16071
16092
|
});
|
|
16072
16093
|
}
|
|
16094
|
+
async function fetchAllPosts(userpageType, pageUrl) {
|
|
16095
|
+
const allPosts = [];
|
|
16096
|
+
let currentPage = 1;
|
|
16097
|
+
let rawKeyBuff = "";
|
|
16098
|
+
let continueFlag = true;
|
|
16099
|
+
let totalCount = 0;
|
|
16100
|
+
while(continueFlag){
|
|
16101
|
+
const response = await fetchPosts(currentPage, userpageType, pageUrl, rawKeyBuff);
|
|
16102
|
+
if (response.errCode && AUTH_ERROR_CODES.includes(response.errCode)) throw new Error(`AUTH_ERROR:${response.errMsg || "登录已失效"}`);
|
|
16103
|
+
if (response.errCode) {
|
|
16104
|
+
_task.logger.warn(`视频号API错误:${response.errMsg} (${response.errCode})`);
|
|
16105
|
+
throw new Error(`视频号API错误:${response.errMsg} (${response.errCode})`);
|
|
16106
|
+
}
|
|
16107
|
+
if (1 === currentPage) totalCount = response.data?.totalCount ?? 0;
|
|
16108
|
+
const posts = response.data?.list || response.posts || response.post_list || [];
|
|
16109
|
+
allPosts.push(...posts);
|
|
16110
|
+
continueFlag = response.data?.continueFlag ?? false;
|
|
16111
|
+
rawKeyBuff = response.data?.lastBuff || "";
|
|
16112
|
+
_task.logger.info(`获取${11 === userpageType ? "视频" : "图文"}第${currentPage}页,本页${posts.length}条,累计${allPosts.length}条,continueFlag=${continueFlag}`);
|
|
16113
|
+
currentPage++;
|
|
16114
|
+
if (currentPage > 100) {
|
|
16115
|
+
_task.logger.warn("分页超过100页,停止请求");
|
|
16116
|
+
break;
|
|
16117
|
+
}
|
|
16118
|
+
}
|
|
16119
|
+
if (totalCount > 0 && allPosts.length !== totalCount) _task.logger.warn(`视频号分页可能不完整:期望${totalCount}条,实际${allPosts.length}条`);
|
|
16120
|
+
return {
|
|
16121
|
+
posts: allPosts,
|
|
16122
|
+
totalCount
|
|
16123
|
+
};
|
|
16124
|
+
}
|
|
16073
16125
|
const mapPost = (item, forcePostType)=>{
|
|
16074
16126
|
let imageUrl = "";
|
|
16075
16127
|
if (item.desc?.media?.[0]?.thumbUrl) imageUrl = item.desc.media[0].thumbUrl;
|
|
@@ -16105,21 +16157,14 @@ async function handleShipinhaoData(_task, params) {
|
|
|
16105
16157
|
300331,
|
|
16106
16158
|
300332
|
|
16107
16159
|
];
|
|
16160
|
+
let combinedTotal = 0;
|
|
16108
16161
|
if (needVideo) try {
|
|
16109
16162
|
const videoPageUrl = "https://channels.weixin.qq.com/micro/content/post/list";
|
|
16110
|
-
const
|
|
16111
|
-
_task.logger.info(
|
|
16112
|
-
|
|
16113
|
-
|
|
16114
|
-
|
|
16115
|
-
throw new Error(`视频号API错误:${videoResponse.errMsg} (${videoResponse.errCode})`);
|
|
16116
|
-
}
|
|
16117
|
-
{
|
|
16118
|
-
const posts = videoResponse.data?.list || videoResponse.posts || videoResponse.post_list || [];
|
|
16119
|
-
const videoArticles = posts.filter((item)=>item.createTime || item.create_time).map((item)=>mapPost(item, "video"));
|
|
16120
|
-
allArticles.push(...videoArticles);
|
|
16121
|
-
_task.logger.info(`视频号视频获取成功,共${videoArticles.length}条`);
|
|
16122
|
-
}
|
|
16163
|
+
const { posts, totalCount } = await fetchAllPosts(11, videoPageUrl);
|
|
16164
|
+
_task.logger.info(`视频号视频获取响应:共${posts.length}条,totalCount=${totalCount}`);
|
|
16165
|
+
const videoArticles = posts.filter((item)=>item.createTime || item.create_time).map((item)=>mapPost(item, "video"));
|
|
16166
|
+
allArticles.push(...videoArticles);
|
|
16167
|
+
combinedTotal += totalCount || videoArticles.length;
|
|
16123
16168
|
} catch (error) {
|
|
16124
16169
|
const errMsg = error instanceof Error ? error.message : String(error);
|
|
16125
16170
|
if (errMsg.startsWith("AUTH_ERROR:")) throw error;
|
|
@@ -16127,30 +16172,26 @@ async function handleShipinhaoData(_task, params) {
|
|
|
16127
16172
|
}
|
|
16128
16173
|
if (needArticle) try {
|
|
16129
16174
|
const articlePageUrl = "https://channels.weixin.qq.com/micro/content/post/finderNewLifePostList";
|
|
16130
|
-
const
|
|
16131
|
-
|
|
16132
|
-
|
|
16133
|
-
|
|
16134
|
-
|
|
16135
|
-
}
|
|
16136
|
-
{
|
|
16137
|
-
const posts = articleResponse.data?.list || articleResponse.posts || articleResponse.post_list || [];
|
|
16138
|
-
const articleArticles = posts.filter((item)=>item.createTime || item.create_time).map((item)=>mapPost(item, "article"));
|
|
16139
|
-
allArticles.push(...articleArticles);
|
|
16140
|
-
_task.logger.info(`视频号图文获取成功,共${articleArticles.length}条`);
|
|
16141
|
-
}
|
|
16175
|
+
const { posts, totalCount } = await fetchAllPosts(10, articlePageUrl);
|
|
16176
|
+
_task.logger.info(`视频号图文获取响应:共${posts.length}条,totalCount=${totalCount}`);
|
|
16177
|
+
const articleArticles = posts.filter((item)=>item.createTime || item.create_time).map((item)=>mapPost(item, "article"));
|
|
16178
|
+
allArticles.push(...articleArticles);
|
|
16179
|
+
combinedTotal += totalCount || articleArticles.length;
|
|
16142
16180
|
} catch (error) {
|
|
16143
16181
|
const errMsg = error instanceof Error ? error.message : String(error);
|
|
16144
16182
|
if (errMsg.startsWith("AUTH_ERROR:")) throw error;
|
|
16145
16183
|
_task.logger.warn(`获取视频号图文失败:${errMsg}`);
|
|
16146
16184
|
}
|
|
16147
16185
|
allArticles.sort((a, b)=>b.createTime - a.createTime);
|
|
16148
|
-
|
|
16186
|
+
const total = allArticles.length;
|
|
16187
|
+
const start = (pageNum - 1) * pageSize;
|
|
16188
|
+
const pageItems = allArticles.slice(start, start + pageSize);
|
|
16189
|
+
_task.logger.info(`视频号数据获取成功,合计${total}条,第${pageNum}页返回${pageItems.length}条`);
|
|
16149
16190
|
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.success)({
|
|
16150
|
-
articleCell:
|
|
16191
|
+
articleCell: pageItems,
|
|
16151
16192
|
pagination: {
|
|
16152
|
-
total
|
|
16153
|
-
nextPage:
|
|
16193
|
+
total,
|
|
16194
|
+
nextPage: start + pageSize < total,
|
|
16154
16195
|
pageNum,
|
|
16155
16196
|
pageSize
|
|
16156
16197
|
}
|
|
@@ -18533,7 +18574,9 @@ const shipinhaoPublish_mock_mockAction = async (task, params)=>{
|
|
|
18533
18574
|
task.logger.info("[shipinhaoPublish] 开始执行视频号发布 - Mock API 方式");
|
|
18534
18575
|
const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || "");
|
|
18535
18576
|
if (!params.extraParam.fingerPrintDeviceId || !params.extraParam.aId) return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(400, "fingerPrintDeviceId和aId 不能为空", "");
|
|
18577
|
+
let currentStep = "初始化";
|
|
18536
18578
|
try {
|
|
18579
|
+
currentStep = "解析认证信息";
|
|
18537
18580
|
const cookieString = params.cookies.map((c)=>`${c.name}=${c.value}`).join("; ");
|
|
18538
18581
|
const fingerPrintDeviceId = params.extraParam.fingerPrintDeviceId;
|
|
18539
18582
|
const aId = params.extraParam.aId;
|
|
@@ -18554,8 +18597,10 @@ const shipinhaoPublish_mock_mockAction = async (task, params)=>{
|
|
|
18554
18597
|
headers
|
|
18555
18598
|
});
|
|
18556
18599
|
const proxyHttp = new Http(...args);
|
|
18600
|
+
currentStep = "验证发布参数";
|
|
18557
18601
|
if (!params.banners || 0 === params.banners.length) return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(400, "至少需要一张图片", "");
|
|
18558
18602
|
const images = params.banners.slice(0, 18).filter((img)=>"string" == typeof img);
|
|
18603
|
+
currentStep = "获取用户信息";
|
|
18559
18604
|
task.logger.info("[shipinhaoPublish] 获取用户信息...");
|
|
18560
18605
|
console.log("cookieString", cookieString);
|
|
18561
18606
|
const userInfo = await mock_getUserInfo(cookieString, http);
|
|
@@ -18566,6 +18611,7 @@ const shipinhaoPublish_mock_mockAction = async (task, params)=>{
|
|
|
18566
18611
|
}
|
|
18567
18612
|
const finderUsername = userInfo.data.finderUser.finderUsername;
|
|
18568
18613
|
console.log(finderUsername);
|
|
18614
|
+
currentStep = "获取上传认证密钥";
|
|
18569
18615
|
task.logger.info("[shipinhaoPublish] 获取上传认证密钥...");
|
|
18570
18616
|
const authKeyResponse = await getUploadAuthKey(cookieString, finderUsername, http);
|
|
18571
18617
|
if (0 !== authKeyResponse.errCode || !authKeyResponse.data?.authKey) return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(authKeyResponse.errCode || 500, `获取上传认证参数失败: ${authKeyResponse.errMsg}`, "");
|
|
@@ -18573,10 +18619,12 @@ const shipinhaoPublish_mock_mockAction = async (task, params)=>{
|
|
|
18573
18619
|
const uin = authKeyResponse.data.uin;
|
|
18574
18620
|
if (!uin) return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(500, "获取用户 uin 失败", "");
|
|
18575
18621
|
const taskId = String(generateUUID());
|
|
18622
|
+
currentStep = "上传图片";
|
|
18576
18623
|
task.logger.info(`[shipinhaoPublish] 开始上传 ${images.length} 张图片...`);
|
|
18577
18624
|
const uploadedImages = [];
|
|
18578
18625
|
for(let i = 0; i < images.length; i++){
|
|
18579
|
-
|
|
18626
|
+
currentStep = `上传图片 ${i + 1}/${images.length}`;
|
|
18627
|
+
task.logger.info(`[shipinhaoPublish] ${currentStep}...`);
|
|
18580
18628
|
const uploadResult = await uploadImageComplete(images[i], taskId, finderUsername, uin, authKey, http);
|
|
18581
18629
|
console.log(JSON.stringify(uploadResult));
|
|
18582
18630
|
if (!uploadResult.DownloadURL) return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(500, `图片上传失败: ${uploadResult.errMsg}`, "");
|
|
@@ -18593,6 +18641,7 @@ const shipinhaoPublish_mock_mockAction = async (task, params)=>{
|
|
|
18593
18641
|
urlCdnTaskId: ""
|
|
18594
18642
|
});
|
|
18595
18643
|
}
|
|
18644
|
+
currentStep = "发布图文内容";
|
|
18596
18645
|
task.logger.info("[shipinhaoPublish] 正在发布...");
|
|
18597
18646
|
const topicNames = params.topic || void 0;
|
|
18598
18647
|
const addressInfo = params.address ? {
|
|
@@ -18679,9 +18728,15 @@ const shipinhaoPublish_mock_mockAction = async (task, params)=>{
|
|
|
18679
18728
|
});
|
|
18680
18729
|
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(resultCode || 500, errorMessage, "");
|
|
18681
18730
|
} catch (error) {
|
|
18682
|
-
const
|
|
18683
|
-
|
|
18684
|
-
|
|
18731
|
+
const handledError = Http.handleApiError(error);
|
|
18732
|
+
const errorMsg = handledError.message || "发布失败,请稍后重试";
|
|
18733
|
+
const errorCode = handledError.code || 500;
|
|
18734
|
+
task.logger.error(`[shipinhaoPublish] 发布流程异常: ${errorMsg}`, stringifyError(error), handledError.extra);
|
|
18735
|
+
await updateTaskState?.({
|
|
18736
|
+
state: __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.TaskState.FAILED,
|
|
18737
|
+
error: errorMsg
|
|
18738
|
+
});
|
|
18739
|
+
return (0, __WEBPACK_EXTERNAL_MODULE__iflyrpa_share_f7afdc8c__.response)(errorCode, errorMsg, "");
|
|
18685
18740
|
}
|
|
18686
18741
|
};
|
|
18687
18742
|
const shipinhaoPublish_rpa_rpaAction = async (task, params)=>{
|
|
@@ -25187,7 +25242,7 @@ const bjhConfigDataSchema = schemas_object({
|
|
|
25187
25242
|
likeNumYesterday: schemas_number().nullable(),
|
|
25188
25243
|
commentNumYesterday: schemas_number().nullable()
|
|
25189
25244
|
});
|
|
25190
|
-
schemas_object({
|
|
25245
|
+
const douyinConfigDataSchema = schemas_object({
|
|
25191
25246
|
fansNum: schemas_number(),
|
|
25192
25247
|
favedNum: schemas_number(),
|
|
25193
25248
|
fansNumLastWeek: schemas_number(),
|
|
@@ -25197,7 +25252,7 @@ schemas_object({
|
|
|
25197
25252
|
shareNumLastWeek: schemas_number(),
|
|
25198
25253
|
visitNumLastWeek: schemas_number()
|
|
25199
25254
|
});
|
|
25200
|
-
schemas_object({
|
|
25255
|
+
const shipinhaoConfigDataSchema = schemas_object({
|
|
25201
25256
|
fansNum: schemas_number(),
|
|
25202
25257
|
feedsCount: schemas_number(),
|
|
25203
25258
|
fansNumYesterday: schemas_number().nullable(),
|
|
@@ -25487,7 +25542,7 @@ class Action {
|
|
|
25487
25542
|
}
|
|
25488
25543
|
}
|
|
25489
25544
|
var __webpack_exports__version = package_namespaceObject.i8;
|
|
25490
|
-
export { Action, ActionCommonParamsSchema, BaijiahaoPublishParamsSchema, BetaFlag, CollectionDetailSchema, ConfigDataSchema, DouyinCheckVerifyQrCodeParamsSchema, DouyinCreateCommentReplyParamsSchema, DouyinGetCollectionParamsSchema, DouyinGetCommentListParamsSchema, DouyinGetCommentReplyListParamsSchema, DouyinGetHotParamsSchema, DouyinGetLocationParamsSchema, DouyinGetMusicByCategoryParamsSchema, DouyinGetMusicCategoryParamsSchema, DouyinGetMusicParamsSchema, DouyinGetTopicsParamsSchema, DouyinGetVerifyQrCodeParamsSchema, DouyinGetWorkListParamsSchema, DouyinPublishParamsSchema, FetchArticlesDataSchema, FetchArticlesParamsSchema, Http, ProxyAgent, SearchAccountInfoParamsSchema, SessionCheckResultSchema, ShipinhaoCheckLinkValidateParamsSchema, ShipinhaoGetLocationParamsSchema, ShipinhaoGetMsgParamsSchema, ShipinhaoPublishParamsSchema, ShipinhaoSendMsgParamsSchema, ToutiaoPublishParamsSchema, UnreadCountSchema, WeixinPublishParamsSchema, WxBjhSessionParamsSchema, XhsWebSearchParamsSchema, XiaohongshuPublishParamsSchema, bjhConfigDataSchema, getFileState, reportLogger, rpaAction_Server_Mock, ttConfigDataSchema, wxConfigDataSchema, xhsConfigDataSchema, __webpack_exports__version as version };
|
|
25545
|
+
export { Action, ActionCommonParamsSchema, BaijiahaoPublishParamsSchema, BetaFlag, CollectionDetailSchema, ConfigDataSchema, DouyinCheckVerifyQrCodeParamsSchema, DouyinCreateCommentReplyParamsSchema, DouyinGetCollectionParamsSchema, DouyinGetCommentListParamsSchema, DouyinGetCommentReplyListParamsSchema, DouyinGetHotParamsSchema, DouyinGetLocationParamsSchema, DouyinGetMusicByCategoryParamsSchema, DouyinGetMusicCategoryParamsSchema, DouyinGetMusicParamsSchema, DouyinGetTopicsParamsSchema, DouyinGetVerifyQrCodeParamsSchema, DouyinGetWorkListParamsSchema, DouyinPublishParamsSchema, FetchArticlesDataSchema, FetchArticlesParamsSchema, Http, ProxyAgent, SearchAccountInfoParamsSchema, SessionCheckResultSchema, ShipinhaoCheckLinkValidateParamsSchema, ShipinhaoGetLocationParamsSchema, ShipinhaoGetMsgParamsSchema, ShipinhaoPublishParamsSchema, ShipinhaoSendMsgParamsSchema, ToutiaoPublishParamsSchema, UnreadCountSchema, WeixinPublishParamsSchema, WxBjhSessionParamsSchema, XhsWebSearchParamsSchema, XiaohongshuPublishParamsSchema, bjhConfigDataSchema, douyinConfigDataSchema, getFileState, reportLogger, rpaAction_Server_Mock, shipinhaoConfigDataSchema, ttConfigDataSchema, wxConfigDataSchema, xhsConfigDataSchema, __webpack_exports__version as version };
|
|
25491
25546
|
|
|
25492
25547
|
//# sourceMappingURL=index.mjs.map
|
|
25493
|
-
//# debugId=
|
|
25548
|
+
//# debugId=83bb856e-4161-51e9-bcc6-bc0ff84cc5f0
|