server: 平台抽象层+bilibili、服务端加密凭据库、角色中间件;web: 精简页面/路由、macOS 客户端(Swift)与多份方案文档;移除误入库的编译产物
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
# 参考系统逻辑图
|
||||
|
||||
本文只描述两个参考仓库的实际代码路径,不把它们的缺陷当作 EveryPublish 设计。许可证:两个仓库均为 MIT;本文件和当前实现只借鉴领域逻辑,不复制无鉴权路由、明文 Cookie 或平台选择器。
|
||||
|
||||
## MediaPublishPlatform
|
||||
|
||||
```text
|
||||
Vue AccountManagement
|
||||
│ GET /login?type&id
|
||||
▼
|
||||
Flask sau_backend.py
|
||||
│ Queue + daemon thread
|
||||
▼
|
||||
login.py / unified_login_cookie_gen
|
||||
│ Playwright headed Chrome
|
||||
│ frame URL 离开 login 即判成功
|
||||
▼
|
||||
cookiesFile/<platform>_cookie_<id>.json
|
||||
│ DB user_info(status=1)
|
||||
└─ SSE: Cookie已保存 -> 登录成功 -> 前端关闭
|
||||
|
||||
Vue MaterialManagement ── POST /uploadSave ──> videoFile + file_records
|
||||
│
|
||||
└─ POST /postVideo
|
||||
│ task_id
|
||||
├─ 为 file × account 写 publish_task_records(发布中)
|
||||
├─ synchronous post_file
|
||||
│ └─ file → account → Playwright BaseFileUploader
|
||||
└─ 统一把整个 task_id 改成功/失败
|
||||
|
||||
Vue 多平台发布 ── POST /postVideosToMultiplePlatforms
|
||||
│
|
||||
└─ file × platform × account 串行尝试
|
||||
├─ 某账号成功后切换下一文件
|
||||
└─ 按 platform success>0 粗粒度更新整批记录
|
||||
```
|
||||
|
||||
关键原文位置:登录 `sau_backend.py:360-413`、`myUtils/login.py:31-160`;素材 `sau_backend.py:93-192`;单平台发布 `sau_backend.py:1155-1315`;批量发布 `sau_backend.py:1318-1504`;统一上传 `newFileUpload/baseFileUploader.py:145-280`、`multiFileUploader.py:7-74,154-239`;状态表 `db/createTable.py:37-51`。
|
||||
|
||||
## social-auto-upload-web-ui
|
||||
|
||||
```text
|
||||
Vue AccountManagement
|
||||
│ GET /login
|
||||
▼
|
||||
Flask app.sse_stream
|
||||
│ Queue + platform.login
|
||||
├─ QR/文本消息(不同平台格式不统一)
|
||||
├─ storage_state / Cookie 保存
|
||||
└─ 终态 200/500/error 后关闭 SSE
|
||||
|
||||
Vue AccountManagement ── POST /importAccount
|
||||
▼
|
||||
BasePlatform.import_cookie
|
||||
├─ step1 解析 Cookie
|
||||
├─ step2 写临时 Cookie 文件
|
||||
├─ step3 sync_profile / stats
|
||||
└─ step4 写 user_info(status=1) + done
|
||||
|
||||
Vue PublishCenter ── POST /postVideo
|
||||
│ 参数校验、素材 probe、平台配置合并
|
||||
▼
|
||||
publish_executor 单 worker
|
||||
├─ queued
|
||||
├─ running -> platform.publish
|
||||
└─ success/failed(内存 TTL 2h/200 条)
|
||||
│ GET /postVideo/status/<task_id>
|
||||
└─ SQLite publish_batches/publish_details 保存历史
|
||||
|
||||
Vue TaskCenter ── /api/v2/tasks
|
||||
▼
|
||||
TaskQueue(默认 2 workers)
|
||||
pending -> queued -> running -> success/failed/cancelled
|
||||
└─ /api/v2/tasks/stream SSE + heartbeat
|
||||
|
||||
Vue Material/Draft
|
||||
├─ /api/materials/upload(1MB 流式写盘 + 异步 probe)
|
||||
├─ /api/uploads/init -> chunk -> merge(可续传)
|
||||
└─ /api/v2/drafts/batch-publish(每 draft × account 入队)
|
||||
```
|
||||
|
||||
关键原文位置:SSE 登录 `backend/app.py:83-105,672-708`;Cookie 导入 `backend/app.py:719-847`、`backend/impl/base_platform.py:188-355`;视频异步队列 `backend/app.py:961-1154`、`backend/services/publish_executor.py:1-170`;v2 队列 `backend/ext_api/__init__.py:170-348`、`backend/ext_api/task_queue.py:28-55,161-330`;素材和分片 `backend/blueprints/materials_bp.py:155-497`、`backend/blueprints/uploads_bp.py:100-430`。
|
||||
|
||||
## 迁移到 EveryPublish
|
||||
|
||||
```text
|
||||
参考平台 Registry / BaseUploader
|
||||
-> Go platform.Adapter + Registry + 每平台 HTTP/Playwright 实现
|
||||
参考 Queue/SSE
|
||||
-> MySQL Task/TaskEvent + Browser WS + REST 刷新
|
||||
参考 Cookie storage_state
|
||||
-> workspace/account AES-256-GCM credentials.Store
|
||||
参考 file × account 明细
|
||||
-> Task accountIds + 逐 adapter 结果聚合,部分成功明确失败原因
|
||||
参考分片上传
|
||||
-> B站 adapter UPOS;素材源仍使用一次性签名直链
|
||||
```
|
||||
|
||||
保留的差异:EveryPublish 要求 JWT、workspace 隔离、角色权限、审计、取消 context 和持久化状态;真实扫码不能用 URL 变化或 mock URL 直接判定成功。
|
||||
Reference in New Issue
Block a user