单商品全链路:提取详情视频并下载到本地(R4a) #13

Open
opened 2026-09-03 09:52:20 +08:00 by ila · 0 comments
Owner

基本信息

  • 类型:需求 | 所属 Epic:#2 | 所属 MVP:#5 | 阶段:待实施

依赖与并行

  • 前置工单:#12(已完成,负责人真机验证以图搜可用,签名算法确认有效)
  • 允许并行:否

要解决什么

#12 已能搜到淘宝同款。本工单接上后半段:从同款商品详情页提取介绍视频地址,
下载到本地并校验完整性。完成后磁盘上会出现第一个真实视频文件,
这是本项目第一次产出实际价值。

为什么仍然只做单个商品

与 #12 同理:详情页视频提取也是逆向的——靠正则从页面 HTML 里抓
cloud.video.taobao.com 的 mp4 链接。淘宝改版就抓不到,而且失败形态
很像「这个同款本来就没视频」,不易区分。

先用单个商品确认这一步可行,再做批量队列(下一个工单)。

Q3 已关闭:同款选择策略

负责人 2026-09-03 决定:

  • 图搜结果准确度可接受
  • 批量时全自动,不做人工确认:按图搜返回顺序依次尝试,
    第一个能提取到视频的同款即采用
  • 但必须把实际采用的淘宝同款商品 ID 记入 videos.source_item,
    以便事后抽查与回溯

理由:几百个商品逐个人工确认不现实;记录来源即可满足回溯需要。
已写入 Wiki 需求总览的「已确认的界面决定」。

不需要新迁移

videos 表在 #4 建骨架时就已建好,字段齐全(product_id、source_item、
source_url、local_path、file_size、remote_url、status、last_error、created_at),
source_item 正是用于记录采用了哪个淘宝同款。本工单只新增仓储代码。

关键实现约束

  • 视频地址只保留含 cloud.video.taobao.com 或 cloudvideocdn 的,
    其余 mp4 多为广告或播放器素材
  • 页面里的地址常以 JSON 转义形式出现,必须还原 / 和 \/
  • 去重按(主机、路径、查询串)三元组,忽略 http/https 协议差异
  • 下载先写 .part,ffprobe 校验通过后才改名为正式文件;
    中途失败不得留下半截 mp4 冒充成功
  • ffprobe 找不到时报明确错误,不得静默跳过校验——跳过等于允许
    损坏文件流入后续上传环节
  • 请求头必须带 Referer(同款商品页地址),否则淘宝 CDN 可能拒绝
  • 打开详情页之间按配置随机等待,降低风控概率
  • 登录失效立即停止,不继续尝试下一个同款

做什么 / 不做什么

  • 做:详情页视频提取、下载与 ffprobe 校验、视频仓储、单商品「取视频」按钮、
    「目录」链接解除禁用
  • 不做:不写批量、队列、并发;不做上传(R5 仍被 Q1/Q2 阻塞)

验收标准

  • 对单个缺少视频的商品点「取视频」,能下载到本地视频文件
  • 视频文件能正常播放(ffprobe 校验通过)
  • videos 表记录了采用的同款商品 ID
  • 表格该行下载状态更新为已下载
  • 「目录」链接可点击并打开视频所在文件夹
  • 一个同款都没视频时状态为「无同款视频」,不报错
  • 登录失效时立即停止并提示重新登录

验证方式

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

真机验证:负责人对单个商品点「取视频」,检查磁盘上的视频文件能否播放。

## 基本信息 - 类型:需求 | 所属 Epic:#2 | 所属 MVP:#5 | 阶段:待实施 ## 依赖与并行 - 前置工单:#12(已完成,负责人真机验证以图搜可用,签名算法确认有效) - 允许并行:否 ## 要解决什么 #12 已能搜到淘宝同款。本工单接上后半段:从同款商品详情页提取介绍视频地址, 下载到本地并校验完整性。完成后磁盘上会出现第一个真实视频文件, 这是本项目第一次产出实际价值。 ## 为什么仍然只做单个商品 与 #12 同理:**详情页视频提取也是逆向的**——靠正则从页面 HTML 里抓 `cloud.video.taobao.com` 的 mp4 链接。淘宝改版就抓不到,而且失败形态 很像「这个同款本来就没视频」,不易区分。 先用单个商品确认这一步可行,再做批量队列(下一个工单)。 ## Q3 已关闭:同款选择策略 负责人 2026-09-03 决定: - 图搜结果准确度可接受 - **批量时全自动,不做人工确认**:按图搜返回顺序依次尝试, 第一个能提取到视频的同款即采用 - **但必须把实际采用的淘宝同款商品 ID 记入 `videos.source_item`**, 以便事后抽查与回溯 理由:几百个商品逐个人工确认不现实;记录来源即可满足回溯需要。 已写入 Wiki 需求总览的「已确认的界面决定」。 ## 不需要新迁移 `videos` 表在 #4 建骨架时就已建好,字段齐全(product_id、source_item、 source_url、local_path、file_size、remote_url、status、last_error、created_at), `source_item` 正是用于记录采用了哪个淘宝同款。本工单只新增仓储代码。 ## 关键实现约束 - 视频地址只保留含 `cloud.video.taobao.com` 或 `cloudvideocdn` 的, 其余 mp4 多为广告或播放器素材 - 页面里的地址常以 JSON 转义形式出现,必须还原 `/` 和 `\/` - 去重按(主机、路径、查询串)三元组,**忽略 http/https 协议差异** - 下载先写 `.part`,**ffprobe 校验通过后才改名**为正式文件; 中途失败不得留下半截 mp4 冒充成功 - **ffprobe 找不到时报明确错误,不得静默跳过校验**——跳过等于允许 损坏文件流入后续上传环节 - 请求头必须带 Referer(同款商品页地址),否则淘宝 CDN 可能拒绝 - 打开详情页之间按配置随机等待,降低风控概率 - 登录失效立即停止,不继续尝试下一个同款 ## 做什么 / 不做什么 - 做:详情页视频提取、下载与 ffprobe 校验、视频仓储、单商品「取视频」按钮、 「目录」链接解除禁用 - 不做:**不写批量、队列、并发**;不做上传(R5 仍被 Q1/Q2 阻塞) ## 验收标准 - [ ] 对单个缺少视频的商品点「取视频」,能下载到本地视频文件 - [ ] 视频文件能正常播放(ffprobe 校验通过) - [ ] `videos` 表记录了采用的同款商品 ID - [ ] 表格该行下载状态更新为已下载 - [ ] 「目录」链接可点击并打开视频所在文件夹 - [ ] 一个同款都没视频时状态为「无同款视频」,不报错 - [ ] 登录失效时立即停止并提示重新登录 ## 验证方式 ```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#13