61 lines
3.1 KiB
Markdown
61 lines
3.1 KiB
Markdown
# 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 未通过独立登录、上传、失败、重试和回执测试,都只能显示“实验性/未启用”。
|