Files
EveryPublish/docs/multi-platform-publish-plan.md
T

3.1 KiB
Raw Blame History

EveryPublish 多平台发布策略(Web-only V1)

2026-08-21。当前优先网页本机执行;客户端/托管 Agent 方案归档,不能作为 V1 完成条件。

1. 现实边界

不同平台的登录、上传和风控页面会持续变化。我们可以把账号、素材、任务、审核、挑战和执行器统一到一个 Web 控制台,但不能在没有用户扫码和真实账号的情况下声称“所有平台已发布成功”。

网页控制台 → Go API/任务状态机 → 本机 PlatformAdapter → 目标平台
                         │
                         └→ mock executor(无真实账号时自动化验收)

2. V1 平台优先级

优先级 平台 V1 目标 证据门槛
P0 B站 登录挑战、视频上传、任务结果 HTTP stub + 用户扫码 + 平台页面核对 + 回执
P1 抖音、快手、小红书 登录挑战、视频/图文适配 独立 adapter 测试 + 用户扫码;当前未启用
P2 视频号、百家号、微博、国际平台 先保留接口/研究,不标记已支持 官方能力或人工验收后再开启

3. 统一 PlatformAdapter 契约

每个平台必须实现以下能力,不允许 API handler 直接写选择器:

metadata()       平台名称、内容类型、限制
login(challenge) 生成 QR/等待登录/保存本机 profile
check(profile)   检查登录态并返回 active/expired
publish(task)    上传素材、填充内容、定时/立即、返回 URL/receipt
cancel(task)     尝试取消或返回不可取消原因

平台 adapter 的错误必须分类为:auth_required、challenge_required、validation、rate_limited、network、platform_changed、unknown。原始响应写脱敏日志,验证码/cookie 不写日志。

4. 参考代码借鉴

  • dreammis/social-auto-upload(MIT):借鉴 uploader/base_video 的扩展名/定时校验、QR 工具和各平台上传参数。其当前主线是 CLI,README 明确 Web 非主线。
  • DevilJie/social-auto-upload-web-ui(MIT):借鉴 Flask Registry、BasePlatform、SSE 登录、串行 worker、素材中心和批量发布的业务拆分。
  • 参考仓库放在 references/ 只读保存;具体文件、版本、许可证和风险见 docs/reference-repositories-analysis.md。

5. 风控和合规边界

  • 只支持用户自己授权的账号和官方登录/扫码流程。
  • 不做刷量、绕过验证码、批量注册、矩阵养号、私信轰炸或规避平台风控。
  • 账号 cookie/profile 只保存在运行服务器的本机受保护目录;浏览器页面不回传明文凭据。
  • 真实平台 selector、限流和风控由用户验收;mock 结果只使用 mock://,不能伪装成平台 URL。

6. 交付顺序

统一 Web 业务和 mock 闭环
  → B站 adapter(当前唯一真实实现)
  → 快手/小红书 adapter
  → 用户真实扫码验收
  → 再评估视频号/国际官方 API

任何平台 adapter 未通过独立登录、上传、失败、重试和回执测试,都只能显示“实验性/未启用”。