批量取视频:队列、进度与全局停止门(R4b) #14

Open
opened 2026-09-03 10:44:59 +08:00 by ila · 0 comments
Owner

基本信息

  • 类型:需求 | 所属 Epic:#2 | 所属 MVP:#5 | 阶段:待实施
  • 前置工单:#13(已完成并经负责人真机验证)

要解决什么

前四个工单已把单商品全链路跑通并验证:#9 专属 Chrome 与登录、
#12 以图搜(签名算法确认有效)、#13 详情视频提取与下载。
本工单在其外面套一层队列,实现批量处理,是 MVP2 的最后一块。

真机验证证据(负责人 2026-09-03):videos 表 3 条全部 downloaded,
文件大小 2.1MB / 4.5MB / 1.6MB,均通过 ffprobe 校验;
另有 1 个商品搜完所有同款确认无视频,video_status=none 分支正常。

关键设计:图搜串行、下载并行

这一条做错会同时踩两个坑,因此在提示词中特别强调:

  1. 技术上:整个程序只有一个 CDP 连接与一个浏览器页面。多个协程
    同时 Navigate/Evaluate 会互相踩,拿到别人页面的结果。
  2. 风控上:并发打开淘宝详情页会明显抬高被拦概率,参考实现也是串行。

因此队列结构为:

串行阶段(一次一个商品,全程持有同一 CDP):
    登录深度检查 → 图搜 → 逐个同款开详情页提取视频地址
        ↓
并行阶段(按 Download.Concurrency,默认 2):
    纯 HTTP 下载 + ffprobe 校验,不碰 CDP

串行阶段处理完一个商品后按配置随机等待;下载阶段不等待。
明确禁止「给 CDP 加锁让多协程抢」——那只是把串行伪装成并行,更难排查。

全局停止门(AGENTS.md 红线)

  • 每个商品开始前都做登录深度检查,不能只在任务开始时查一次
  • 检查不通过:立即中断整批,已在下载的允许跑完,不再启动新商品;
    不自动重试、不自动重新登录;通过事件通知前端提示重新登录
  • 其它错误(单个商品图搜失败、单个视频下载失败)属于单商品失败,
    记入该商品 last_error 并继续,不中断整批

断点:不另建断点文件

商品的 download_status 本身就是断点:

  • 跳过 download_status == done
  • 跳过 video_status == none(已确认无同款视频,再搜多半仍无,
    浪费时间与风控额度)

中断后重新点「下载视频」自然从未完成处继续。这样断点是免费的,
不会出现断点文件与数据库不一致的问题。

硬性验收项

前三个工单连续出现用 window.go.main.App 绕过 Wails 生成绑定的写法
(#8 一处、#10 三处、#13 三处),每次都由审核者重新生成绑定并改回。
本工单已将「前端不得出现绕过绑定的写法」列为硬性验收项,需要新绑定
应在报告中列出方法名,由审核者生成。

做什么 / 不做什么

  • 做:internal/task 队列与状态机、进度事件、停止、任务条界面
  • 不做:不改动已验证的签名、图搜、详情提取、下载逻辑;
    不复制 FetchVideosForProduct,必须抽出复用;不做上传(R5 仍被 Q1/Q2 阻塞)

验收标准

  • 勾选多个商品点「下载视频」能依次处理
  • 任务条显示当前商品、已处理数、已下载数、失败数、用时、进度
  • 「停止任务」能中断,正在下载的允许跑完
  • 登录失效时整批立即中断并弹窗提示,已完成部分不重跑
  • 单个商品失败不影响后续商品
  • 重新启动任务会跳过已完成和已确认无视频的商品
  • 图搜与详情提取串行,下载按配置并发
  • 前端无绕过 Wails 绑定的写法

验证方式

go vet ./...
go test ./...
cd frontend; npx vite build

真机验证:负责人勾选若干商品运行批量任务,并测试中途停止与登录失效。

## 基本信息 - 类型:需求 | 所属 Epic:#2 | 所属 MVP:#5 | 阶段:待实施 - 前置工单:#13(已完成并经负责人真机验证) ## 要解决什么 前四个工单已把单商品全链路跑通并验证:#9 专属 Chrome 与登录、 #12 以图搜(签名算法确认有效)、#13 详情视频提取与下载。 本工单在其外面套一层队列,实现批量处理,是 MVP2 的最后一块。 真机验证证据(负责人 2026-09-03):`videos` 表 3 条全部 downloaded, 文件大小 2.1MB / 4.5MB / 1.6MB,均通过 ffprobe 校验; 另有 1 个商品搜完所有同款确认无视频,`video_status=none` 分支正常。 ## 关键设计:图搜串行、下载并行 这一条做错会同时踩两个坑,因此在提示词中特别强调: 1. **技术上**:整个程序只有一个 CDP 连接与一个浏览器页面。多个协程 同时 Navigate/Evaluate 会互相踩,拿到别人页面的结果。 2. **风控上**:并发打开淘宝详情页会明显抬高被拦概率,参考实现也是串行。 因此队列结构为: ``` 串行阶段(一次一个商品,全程持有同一 CDP): 登录深度检查 → 图搜 → 逐个同款开详情页提取视频地址 ↓ 并行阶段(按 Download.Concurrency,默认 2): 纯 HTTP 下载 + ffprobe 校验,不碰 CDP ``` 串行阶段处理完一个商品后按配置随机等待;下载阶段不等待。 明确禁止「给 CDP 加锁让多协程抢」——那只是把串行伪装成并行,更难排查。 ## 全局停止门(AGENTS.md 红线) - 每个商品开始前都做登录深度检查,不能只在任务开始时查一次 - 检查不通过:立即中断整批,已在下载的允许跑完,不再启动新商品; 不自动重试、不自动重新登录;通过事件通知前端提示重新登录 - 其它错误(单个商品图搜失败、单个视频下载失败)属于单商品失败, 记入该商品 `last_error` 并继续,不中断整批 ## 断点:不另建断点文件 商品的 `download_status` 本身就是断点: - 跳过 `download_status == done` - 跳过 `video_status == none`(已确认无同款视频,再搜多半仍无, 浪费时间与风控额度) 中断后重新点「下载视频」自然从未完成处继续。这样断点是免费的, 不会出现断点文件与数据库不一致的问题。 ## 硬性验收项 前三个工单连续出现用 `window.go.main.App` 绕过 Wails 生成绑定的写法 (#8 一处、#10 三处、#13 三处),每次都由审核者重新生成绑定并改回。 本工单已将「前端不得出现绕过绑定的写法」列为硬性验收项,需要新绑定 应在报告中列出方法名,由审核者生成。 ## 做什么 / 不做什么 - 做:`internal/task` 队列与状态机、进度事件、停止、任务条界面 - 不做:**不改动已验证的签名、图搜、详情提取、下载逻辑**; 不复制 `FetchVideosForProduct`,必须抽出复用;不做上传(R5 仍被 Q1/Q2 阻塞) ## 验收标准 - [ ] 勾选多个商品点「下载视频」能依次处理 - [ ] 任务条显示当前商品、已处理数、已下载数、失败数、用时、进度 - [ ] 「停止任务」能中断,正在下载的允许跑完 - [ ] 登录失效时整批立即中断并弹窗提示,已完成部分不重跑 - [ ] 单个商品失败不影响后续商品 - [ ] 重新启动任务会跳过已完成和已确认无视频的商品 - [ ] 图搜与详情提取串行,下载按配置并发 - [ ] 前端无绕过 Wails 绑定的写法 ## 验证方式 ```powershell go vet ./... go test ./... cd frontend; npx vite build ``` 真机验证:负责人勾选若干商品运行批量任务,并测试中途停止与登录失效。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmsp#14