Files
yaoyaoai/scripts/nodejs/video_publish.js
fengchuanhn@gmail.com 7f57dfa9ed 11
2026-05-21 00:19:11 +08:00

85 lines
2.7 KiB
JavaScript

"use strict";
/**
* 多平台视频发布(工作流步骤 07 / 一键自动)
*/
const { publishToPlatform, PLATFORM_LABELS } = require("./publish_platform.js");
globalThis.__nodejsMain = async function main(params) {
const p = params || {};
const platforms = Array.isArray(p.platforms) ? p.platforms : [];
const videoPath = String(p.videoPath || "").trim();
const coverPath = String(p.coverPath || "").trim();
const title = String(p.title || "").trim();
const description = String(p.description || title || "").trim();
const tags = Array.isArray(p.tags) ? p.tags : [];
const autoPublish = Boolean(p.autoPublish);
if (!platforms.length) {
return { success: false, error: "请至少选择一个发布平台" };
}
if (!videoPath) return { success: false, error: "缺少视频路径" };
if (!coverPath) return { success: false, error: "缺少封面路径,请先在步骤 06 生成封面" };
if (!title) return { success: false, error: "缺少标题,请先在步骤 04 生成标题" };
const results = [];
for (let i = 0; i < platforms.length; i++) {
const item = platforms[i];
const platform = item.platform;
const accountId = item.accountId;
const cookies = item.cookies || [];
const label = PLATFORM_LABELS[platform] || platform;
globalThis.__native?.emitProgress?.(
`正在发布到${label}… (${i + 1}/${platforms.length})`,
);
try {
const r = await publishToPlatform(platform, accountId, cookies, {
videoPath,
coverPath,
title,
description,
tags,
autoPublish,
});
results.push({
platform: label,
platformKey: platform,
success: Boolean(r.success),
pending:
r.status === "manual_pending" || r.status === "verification_required",
status: r.status || (r.success ? "success" : "failed"),
message: r.message || "",
videoUrl: r.videoUrl || "",
});
} catch (e) {
results.push({
platform: label,
platformKey: platform,
success: false,
pending: false,
status: "failed",
message: e.message || String(e),
});
}
if (i < platforms.length - 1) {
await new Promise((r) => setTimeout(r, 2000));
}
}
const ok = results.filter((r) => r.success).length;
const pending = results.filter((r) => r.pending).length;
const failed = results.length - ok - pending;
return {
success: ok > 0 || pending > 0,
results,
summary: { ok, pending, failed, total: results.length },
message:
ok === results.length
? "全部发布成功"
: pending > 0
? `成功 ${ok},待确认 ${pending},失败 ${failed}`
: `成功 ${ok},失败 ${failed}`,
};
};