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

61 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 未通过独立登录、上传、失败、重试和回执测试,都只能显示“实验性/未启用”。