Agent skills
Prettier eslint shopify
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Download real product imagery from Mozimo's Shopify CDN + tempering video + Fraunces font."""
|
||||
import json, os, re, subprocess, sys
|
||||
|
||||
ROOT = "/home/tanshu/programming/mozimo/mozimo-chatgpt"
|
||||
PUB = os.path.join(ROOT, "public")
|
||||
os.makedirs(f"{PUB}/products", exist_ok=True)
|
||||
os.makedirs(f"{PUB}/videos", exist_ok=True)
|
||||
|
||||
UA = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0 Safari/537.36"
|
||||
|
||||
def fetch(url, out, extra_headers=None):
|
||||
if os.path.exists(out) and os.path.getsize(out) > 1000:
|
||||
return True
|
||||
cmd = ["curl", "-sL", "--max-time", "60", "-A", UA, "-o", out, url]
|
||||
r = subprocess.run(cmd, capture_output=True)
|
||||
ok = r.returncode == 0 and os.path.exists(out) and os.path.getsize(out) > 1000
|
||||
if not ok:
|
||||
print(f" !! FAILED {url[:90]} -> {out}")
|
||||
if os.path.exists(out): os.remove(out)
|
||||
return ok
|
||||
|
||||
# ---------- 1. Products ----------
|
||||
print("== products ==")
|
||||
r = subprocess.run(["curl", "-sL", "--max-time", "60", "-A", UA,
|
||||
"https://shop.mozimo.in/products.json?limit=250"], capture_output=True)
|
||||
d = json.loads(r.stdout)
|
||||
products = d.get("products", [])
|
||||
manifest = []
|
||||
seen_files = set()
|
||||
for p in products:
|
||||
imgs = p.get("images") or []
|
||||
if not imgs:
|
||||
continue
|
||||
src = imgs[0]["src"]
|
||||
base = src.split("?")[0].split("/")[-1]
|
||||
slug = re.sub(r"[^a-z0-9]+", "-", base.lower()).strip("-")
|
||||
slug = re.sub(r"-jpg$", "", slug)
|
||||
ext = ".jpg" if base.lower().endswith((".jpg", ".jpeg")) else ".png"
|
||||
fname = f"{slug}{ext}"
|
||||
if fname in seen_files:
|
||||
# dedupe identical basenames (same photo reused)
|
||||
manifest.append({"handle": p["handle"], "title": p["title"], "file": fname})
|
||||
continue
|
||||
seen_files.add(fname)
|
||||
url = src + ("&" if "?" in src else "?") + "width=1100&quality=82"
|
||||
if fetch(url, f"{PUB}/products/{fname}"):
|
||||
manifest.append({"handle": p["handle"], "title": p["title"], "file": fname, "price": (p.get("variants") or [{}])[0].get("price")})
|
||||
print(f" ok {fname}")
|
||||
json.dump(manifest, open(f"{ROOT}/scripts/products-manifest.json", "w"), indent=1)
|
||||
print(f"total products with images: {len(manifest)}")
|
||||
|
||||
# ---------- 2. Video ----------
|
||||
print("== video ==")
|
||||
fetch("https://qa-dugout.s3.ap-south-1.amazonaws.com/testing/v1.mp4", f"{PUB}/videos/tempering.mp4")
|
||||
print("video size:", os.path.getsize(f"{PUB}/videos/tempering.mp4") if os.path.exists(f"{PUB}/videos/tempering.mp4") else "MISSING")
|
||||
|
||||
# ---------- 3. Fraunces (variable, latin) ----------
|
||||
print("== fonts ==")
|
||||
css_url = "https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..700;1,9..144,300..700&display=swap"
|
||||
r = subprocess.run(["curl", "-sL", "-A", UA, css_url], capture_output=True, text=True)
|
||||
css = r.stdout
|
||||
blocks = re.findall(r"/\* latin \*/\s*@font-face\s*\{([^}]+)\}", css)
|
||||
for block in blocks:
|
||||
style = re.search(r"font-style:\s*(\w+)", block).group(1)
|
||||
url = re.search(r"src:\s*url\((https://[^)]+)\)", block).group(1)
|
||||
name = f"fraunces-latin-{'italic' if style == 'italic' else 'normal'}.woff2"
|
||||
if fetch(url, f"{PUB}/fonts/{name}"):
|
||||
print(f" ok {name} ({os.path.getsize(f'{PUB}/fonts/{name}')} bytes)")
|
||||
|
||||
print("DONE")
|
||||
Reference in New Issue
Block a user