Add precision gear product cards
This commit is contained in:
70
scripts/import_precision_gears.py
Normal file
70
scripts/import_precision_gears.py
Normal file
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Generate the compact precision-gear catalog from the ecommerce product export."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
DEFAULT_SOURCE = Path(
|
||||
"/Users/jacky/Desktop/美好智玩/02_客户项目/高徳乐/商城产品资料_20260806/data/parsed_products.json"
|
||||
)
|
||||
DEFAULT_OUTPUT = Path("app/precision-gear-data.ts")
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--source", type=Path, default=DEFAULT_SOURCE)
|
||||
parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT)
|
||||
args = parser.parse_args()
|
||||
|
||||
source = json.loads(args.source.read_text(encoding="utf-8"))
|
||||
items = [item for item in source.values() if item.get("top_cat") == "精密齿轮配件"]
|
||||
items.sort(key=lambda item: (item.get("sub_cat", ""), int(item.get("id", 0))))
|
||||
|
||||
products = []
|
||||
subcategory_counts: dict[str, int] = {}
|
||||
for item in items:
|
||||
subcategory = item.get("sub_cat", "未分类")
|
||||
subcategory_counts[subcategory] = subcategory_counts.get(subcategory, 0) + 1
|
||||
specs = {
|
||||
str(label): str(value)
|
||||
for label, value in item.get("specs", {}).items()
|
||||
if str(value).strip()
|
||||
}
|
||||
products.append(
|
||||
{
|
||||
"id": f"gear-{item['id']}",
|
||||
"category": "精密齿轮配件",
|
||||
"subCategory": subcategory,
|
||||
"name": item.get("name", ""),
|
||||
"code": item.get("code", ""),
|
||||
"image": f"/catalog-products/precision-gears/{item['id']}.jpg",
|
||||
"page": 0,
|
||||
"specs": specs,
|
||||
"torqueValue": None,
|
||||
"ratedVoltage": None,
|
||||
}
|
||||
)
|
||||
|
||||
output = [
|
||||
"// Generated from 商城产品资料_20260806/data/parsed_products.json.",
|
||||
"// Run scripts/import_precision_gears.py after the source export changes.",
|
||||
'import type { CatalogProduct } from "./catalog-data";',
|
||||
"",
|
||||
"export type PrecisionGearProduct = CatalogProduct & { subCategory: string };",
|
||||
"",
|
||||
f"export const PRECISION_GEAR_PRODUCTS: PrecisionGearProduct[] = {json.dumps(products, ensure_ascii=False, indent=2)};",
|
||||
"",
|
||||
f"export const PRECISION_GEAR_SUBCATEGORIES = {json.dumps([[name, count] for name, count in subcategory_counts.items()], ensure_ascii=False, indent=2)} as const;",
|
||||
"",
|
||||
]
|
||||
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||
args.output.write_text("\n".join(output), encoding="utf-8")
|
||||
print(f"generated {len(products)} products and {len(subcategory_counts)} subcategories -> {args.output}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user