← back to Koroseal Goodrich Audit

enrich_map.py

24 lines

#!/usr/bin/env python3
# Build code -> {img, name, desc} from downloaded Goodrich Koroseal collection pages.
import os,re,json,glob,html
COLL=os.path.expanduser("~/Projects/koroseal-goodrich-audit/coll")
OUT=os.path.expanduser("~/Projects/koroseal-goodrich-audit/code_map.json")
CODE_RE=re.compile(r'^[A-Za-z0-9]{2,7}-[0-9A-Za-z]{1,4}$')
IMG_RE=re.compile(r'(https://www\.goodrichglobal\.com/singapore/wp-content/uploads/[0-9]{4}/[0-9]{2}/([A-Za-z0-9_-]+)\.jpg)',re.I)
OG_T=re.compile(r'property=["\']og:title["\']\s+content=["\'](.*?)["\']',re.I)
OG_D=re.compile(r'property=["\']og:description["\']\s+content=["\'](.*?)["\']',re.I)
def clean(s): return html.unescape(re.sub(r'\s+',' ',s or '')).strip()
m={}
for fp in glob.glob(os.path.join(COLL,'*.html')):
    h=open(fp,encoding='utf-8',errors='ignore').read()
    name=clean((OG_T.search(h) or [None,''])[1]).split('|')[0].strip() if OG_T.search(h) else ''
    desc=clean(OG_D.search(h).group(1)) if OG_D.search(h) else ''
    for full,base in IMG_RE.findall(h):
        b=re.sub(r'-(150x150|300x300|scaled|\d+x\d+)$','',base,flags=re.I)
        if CODE_RE.match(b):
            c=b.upper()
            # prefer a non-thumbnail full url; keep first seen
            if c not in m: m[c]={"img":full,"name":name,"desc":desc}
json.dump(m,open(OUT,'w'))
print("codes mapped:",len(m),"->",OUT)