# EveryPublish 多平台发布策略(Web-only V1) > 2026-08-21。当前优先网页本机执行;客户端/托管 Agent 方案归档,不能作为 V1 完成条件。 ## 1. 现实边界 不同平台的登录、上传和风控页面会持续变化。我们可以把账号、素材、任务、审核、挑战和执行器统一到一个 Web 控制台,但不能在没有用户扫码和真实账号的情况下声称“所有平台已发布成功”。 ```text 网页控制台 → Go API/任务状态机 → 本机 PlatformAdapter → 目标平台 │ └→ mock executor(无真实账号时自动化验收) ``` ## 2. V1 平台优先级 | 优先级 | 平台 | V1 目标 | 证据门槛 | |---|---|---|---| | P0 | B站 | 登录挑战、视频上传、任务结果 | HTTP stub + 用户扫码 + 平台页面核对 + 回执 | | P1 | 抖音、快手、小红书 | 登录挑战、视频/图文适配 | 独立 adapter 测试 + 用户扫码;当前未启用 | | P2 | 视频号、百家号、微博、国际平台 | 先保留接口/研究,不标记已支持 | 官方能力或人工验收后再开启 | ## 3. 统一 PlatformAdapter 契约 每个平台必须实现以下能力,不允许 API handler 直接写选择器: ```text 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. 交付顺序 ```text 统一 Web 业务和 mock 闭环 → B站 adapter(当前唯一真实实现) → 快手/小红书 adapter → 用户真实扫码验收 → 再评估视频号/国际官方 API ``` 任何平台 adapter 未通过独立登录、上传、失败、重试和回执测试,都只能显示“实验性/未启用”。