75 lines
4.7 KiB
Markdown
75 lines
4.7 KiB
Markdown
# V2.1 采集方案(扩展并入主仓 + 上报开关)
|
||
|
||
> 状态:已实施(Phase C 完成)
|
||
> 参考项目:`/Users/joey-xd/sites/seller-store/image-suite-studio`(下称 ISS)
|
||
> 架构(方案三,D2 决策修订):**ISS 扩展整体并入主仓 `extensions/collector/`**,成为唯一采集工具
|
||
> (extension-v2 原地冻结、不再维护);扩展新增「上报商品」功能,采集后一键入库主仓后台并自动打开商品试算页。
|
||
> 「ISS 独立产品化」远期通过构建/配置裁剪实现(扩展天然独立分发;server 的 suite API 模块不依赖 products),
|
||
> 不在代码层分叉——这是「单仓维护」与「独立产品可能」的折中。
|
||
|
||
---
|
||
|
||
## 1. 目录与形态
|
||
|
||
```
|
||
ozon-seller-kit/
|
||
├── extensions/ # Chrome 插件集合(复数,容纳未来多个插件)
|
||
│ └── collector/ ← ISS 扩展并入版(三平台采集 + 套图生图面板 + 商品上报)
|
||
├── extension-v1/ # 冻结(旧 1688/淘宝)
|
||
├── extension-v2/ # 冻结(旧 Ozon 采集,被 collector 取代)
|
||
├── server/ # 唯一后端(8800)
|
||
└── studio/ # 前端(试算页等)
|
||
```
|
||
|
||
- 构建:`pnpm -C extensions/collector build` → `.output/chrome-mv3`(Chrome 开发者模式加载 unpacked)
|
||
- 扩展包名:`ozon-collector-extension`;manifest 名保留「电商套图工作台」
|
||
- host_permissions 已加 `127.0.0.1:8800`(上报)与 `8900`(试算页)
|
||
|
||
## 2. 采集引擎(与 ISS 完全一致,见下表)
|
||
|
||
| 平台 | 主路径 | 兜底/补充 |
|
||
|---|---|---|
|
||
| **Ozon** | ① SSR `data-state` widget 白名单 | ② JSON-LD ③ 站内 `entrypoint-api.bx`(两 URL 合并)④ DOM + 模拟滚动 |
|
||
| **淘宝/天猫** | ① MAIN world 桥读 `__ICE_APP_CONTEXT__`(不调 mtop 防风控) | ② DOM(前缀匹配类名、详情图排除评价区;desc 故意不采) |
|
||
| **1688** | ① MAIN world 桥读 `window.context`(deepFind;skuProps 全维展开 + skuMapOriginal + 尺寸重量参数) | ② DOM(`#productAttributes` cells、`#detail`) |
|
||
|
||
采集数据结构 ScanResult:`{ platform, itemId, url, texts[], images[], breadcrumbs?, stats, warnings, source }`(texts: kind/content/pairs;images: groupKey/groupName/variantName/url/index/type)。
|
||
|
||
## 3. 商品上报(v2.1 新增)
|
||
|
||
```
|
||
快速采集(页内悬浮面板 / Side Panel)
|
||
│ scanCurrentPage() → ScanResult(面板内可编辑标题/尺寸/重量/描述)
|
||
▼
|
||
「上报商品」按钮(01 商品信息区块下方;设置里可开关)
|
||
│ POST {reportBaseUrl}/api/materials
|
||
│ payload = { source: {platform, itemId, url, collectedAt},
|
||
│ texts: editedTexts(), // 编辑后文本
|
||
│ images: 全量采集图(groupKey/groupName/variantName/url/index/type),
|
||
│ refererOrigin: 源页 origin } // 服务端下载源图带 Referer
|
||
▼
|
||
响应 { product_id } → chrome.tabs.create 打开 {studioBaseUrl}/trial/{product_id}
|
||
```
|
||
|
||
要点:
|
||
- **契约**:主仓 `MaterialsRequest`(camelCase:`source.itemId`、`groupKey`、`variantName`)与 ISS ImageMaterial 字段同名,直接映射;响应 `product_id` 用于打开试算页
|
||
- **重复上报**:服务端按 `platform + itemId` 复用商品(返回同一 product_id)→ 打开同一试算页
|
||
- **鉴权**:本地阶段主仓为宽松模式(未带 token 放行匿名),扩展直接裸调;远期收紧时在扩展 settings 加 token 即可
|
||
- **设置项**(面板「服务端设置」弹窗内新增):启用商品上报开关 / OSK 后台地址(默认 `http://127.0.0.1:8800`)/ 试算页地址(默认 `http://localhost:8900`)
|
||
- 手动上传图(ISS 的 upload 组合)本期不上报;试算页内可用「上传图片」补(`/api/materials/bytes`)
|
||
|
||
## 4. 面板能力(保持 ISS 原样)
|
||
|
||
快速采集、商品信息编辑、图片勾选/上传/下载、AI 智能规划、风格/生图要求/模型选择、一键生图、生成结果导出——全部保留,仍连 ISS 生图 server(`baseUrl`,默认 3300)。
|
||
后续 Phase B 把生图服务端平移进主仓后,`baseUrl` 与 `reportBaseUrl` 可统一指向主仓。
|
||
|
||
## 5. 与 ISS 的差异总表
|
||
|
||
| 维度 | ISS(独立项目) | 本仓 extensions/collector |
|
||
|---|---|---|
|
||
| 采集引擎 | 三平台完整版 | 相同(整体并入) |
|
||
| 生图面板 | 连 ISS server(3300) | 同左(Phase B 后可切主仓) |
|
||
| 商品入库 | 无 | 「上报商品」→ 主仓 /api/materials + 自动打开试算页 |
|
||
| 鉴权 | 无 | 本地宽松模式(远期收紧) |
|
||
| 独立产品化 | 本体 | 远期:构建/配置裁剪出 collector + suite API 即可独立 |
|