# 项目长期记忆:Inkreach POD 数据库同步 ## PG 库连接 - host=localhost, port=5432, user=postgres, password=inkreach, dbname=inkreach - Python 驱动 psycopg2 装在隔离 venv:`C:/Users/Admin/.workbuddy/binaries/python/envs/default/Scripts/python.exe` ## 国家货盘映射(plates 表 id → 国家) - 美国 2/3/4/5、墨西哥 6、日本 7、韩国 8、沙特 9、巴西 10、英国 11、加拿大 12、波兰 13、西班牙 14、德国 15、澳洲 16、意大利 17 ## SPU/SKU 表结构(SQLite spu_sku.db,字段不可改) - SPU(25+ 业务字段 + country + mark):code/material/component_1~3/比例/pattern/details/collar_style/style/care_Instructions/fabric/target_audience/season/is_transparent/layout/weaving_method/printing_type/fabric_texture_1/fabric_weight_1/fabric_weight_unit_1/lining_texture/country/mark - SPU 固定模板值(不随 PG 变):pattern=印花、details=无、collar_style=圆领、style=休闲、care_Instructions=数码印花类可机洗且不可干洗、fabric=微弹、target_audience=成人、season=四季、is_transparent=否、layout=常规、weaving_method=针织(含钩织、毛织面料)、printing_type=定位印花、fabric_texture_1=光面、fabric_weight_unit_1=g/㎡、lining_texture=无里料/无内衬、mark=1 - SKU(19 字段):spu_id/code/price/color/size/size_group/size_type/shoulder_width/bust/clothing_length/sleeve_length/longest_side/secondary_long_side/shortest_side/package_weight/img_url_2~5 ## 同步脚本 sync_from_pg.py 规律 - SPU = categories(按 code 去重);SKU = colors × product_size/ size_chart 尺码(颜色×尺码粒度) - 业务模板固定值写入 SPU,PG 仅提供 material、component、fabric_weight(从 name 提取克重)、country - SKU code = colors.code(脏数据兜底为 品类code-颜色名);color = 清洗后颜色名;price = 该品类 prices 首条;包装尺寸/重量 = product_extra.packaging_spec JSON;尺码表 = product_extra.product_size JSON(缺则回退 size_chart) - 切换国家:改顶部 `PLATE_IDS` 与 `COUNTRY` 后重跑(会 DELETE 两表再插入) - 脏颜色 code 处理:clean_color_name() 去尺码前缀;is_clean_code() 判断规范,不规范则 品类code-颜色名 兜底(源库无拉丁编码时 code 含中文属必然) ## 已知数据坑 - 部分品类 colors.code 为脏数据(如 'METB001-S-3XL黑色'、'5000B-黑色'、'SFB-黑色')→ 兜底补全 - 部分品类无 product_extra(如 SFB/5000B)→ 尺码走 size_chart 回退,包装/重量留空 - 家居类尺码格式不一致('30*40/76.2*101.6' vs '30*40')、均码叫法不同(Onesize vs 均码)→ 已加归一化兜底 ## Inkreach 商城公开 API(供 crawl_style_codes.py 复用) - 域名:`https://mapi.sdspod.com`(**坑:前端 JS 里写的 `api.sdspod.com` 在本机 DNS 解析不到,不可用**) - 端点(无需鉴权,带 Referer: https://www.inkreach.cn/ 即可): - `/products/pageOptionGroup` → shipmentCountryList:14 国(US/PL/GB/JP/MX/SA/CA/ES/AU/DE/KR/BR/IT/CN,含各国商品数) - `/products/page` → 商品分页,参数 `shipmentArea=overseas|CN`、`page`、`size`(size 可到 100) - `/categories` → 品类树,26 个顶层(含「美国/欧洲/日本…本地直发」这类国家维度) - **大坑**:`overseasArea`(国家)与 `id`(品类)筛选参数实测**不生效**(各国 totalCount 恒等)→ 只能全量分页拉取后本地聚合。 - 商品结构:`categories` 标签顺序固定 = `[国家/工厂标签, 品类, "款号 品名"]`,例:`美国工厂直发 | 男士T恤 | DG505 180g男士纯棉长袖`——国家/品类/款号最可靠的来源。 - 款号提取:优先 categories 的「款号 品名」标签(能覆盖纯字母款号如 `SFB`),其次 name 的 `-` 分段;必须用 `SIZE_WORDS` 排除尺码串(S/M/XL/2XL/3XL 会被误判)。 - 国家别名:中东→SA(沙特,站点文案非「沙特阿拉伯」)、国内工厂→CN;CN 商品 name 无国家前缀,用 `shipmentArea` 兜底。 - 规模参考:在架商品 540(海外 536 + 国内 4)→ 13 国、**149 个去重款号**(CN 4 条本身无款号)。 - **三套分类体系(大坑,已查证)**: 1. `/categories` 品类树:625 个节点,含「长袖T恤」等 14 个长袖节点,但**没有任何商品挂在上面**(商品 category_id 全都不在这棵树里)。 2. 商品 `category_id`:取值在 8186~8741 区间,**不属于** `/categories` 树(树节点 id 是 1295~8659 另一套),无法互相映射。 3. 商品 `categories` 标签(脚本用的就是它):`[国家/工厂, 人群款式, "款号 品名"]`,按国家+人群款式组织。 - **「长袖/短袖」不是分类,只写在商品 name 里**:全站 name 含"长袖"的商品 30 条 → 9 个款号(DG502/DG503/DG505/GBTK012/GBTM011/JPTM006/KRTM004/PLHF029/PLTF026),它们被并入 男士T恤/女士T恤/童装T恤/女士卫衣 品类。要按长袖筛选只能从 name 判断。