navmini/weapp/scripts/sync_data.py
eric 518410edd0 feat: 游民导航 H5、微信小程序与小红书小工具
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-27 12:15:00 -05:00

66 lines
1.8 KiB
Python

#!/usr/bin/env python3
"""Sync H5 links.json + icons into weapp/ for WeChat DevTools."""
from __future__ import annotations
import json
import shutil
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1] # weapp/
PROJ = ROOT.parent # navmini/
SRC_JSON = PROJ / "src" / "data" / "links.json"
SRC_ICONS = PROJ / "public" / "icons"
OUT_JSON = ROOT / "data" / "links.json"
OUT_ICONS = ROOT / "icons"
def main() -> int:
if not SRC_JSON.is_file():
print(f"missing {SRC_JSON}", file=sys.stderr)
return 1
data = json.loads(SRC_JSON.read_text(encoding="utf-8"))
OUT_ICONS.mkdir(parents=True, exist_ok=True)
OUT_JSON.parent.mkdir(parents=True, exist_ok=True)
for old in OUT_ICONS.glob("*"):
if old.is_file():
old.unlink()
needed: list[str] = ["_brand"]
for cat in data.get("categories", []):
for group in cat.get("groups", []):
for link in group.get("links", []):
lid = link["id"]
needed.append(lid)
# 小程序本地路径(相对小程序根目录)
link["icon"] = f"/icons/{lid}.webp"
missing = []
for lid in needed:
src = SRC_ICONS / f"{lid}.webp"
dst = OUT_ICONS / f"{lid}.webp"
if not src.is_file():
missing.append(lid)
continue
shutil.copy2(src, dst)
if missing:
print("warn missing icons:", ", ".join(missing), file=sys.stderr)
data["brandIcon"] = "/icons/_brand.webp"
OUT_JSON.write_text(
json.dumps(data, ensure_ascii=False, indent=2) + "\n",
encoding="utf-8",
)
icon_count = len(list(OUT_ICONS.glob("*.webp")))
print(f"synced data/links.json + {icon_count} icons -> {ROOT}")
return 0
if __name__ == "__main__":
raise SystemExit(main())