import asyncio, asyncpg, urllib.request, json DB_URL = "postgresql://teeoff_admin:teeoff_secret_password@db:5432/teeoff" # Vi fjerner acf_format=standard da rå-feltnavnene er tryggere her WP_API_URL = "https://teeoff.no/wp-json/wp/v2/golfbaner?per_page=100" def decode_html(text): if not text: return "" return str(text).replace('&', '&').replace('&', '&').replace(' ', ' ').strip() async def run_greenfee_sync(): print("🎯 Starter GREENFEE-SYNC v1.2 (Basert på rå-API mapping)...") conn = await asyncpg.connect(DB_URL) page = 1 total_updated = 0 while True: try: req = urllib.request.Request(f"{WP_API_URL}&page={page}", headers={'User-Agent': 'TeeOff-Sync'}) with urllib.request.urlopen(req) as response: data = json.loads(response.read().decode()) except: break if not data: break for post in data: slug = post['slug'] acf = post.get('acf', {}) # Henter banenavn for å gruppere riktig bane_1_navn = acf.get('navn_pa_hovedbane') or "Hovedbanen" bane_2_navn = acf.get('navn_pa_sekundar_bane') or "Bane 2" final_greenfee = [] # --- MAPPER BANE 1 (Voksne + Junior) --- voksne_1 = acf.get('greenfee_-_voksne') or [] junior_1 = acf.get('greenfee_-_junior') or [] for i, item in enumerate(voksne_1): row = { "banenavn": bane_1_navn, "priskategori": item.get('priskategori'), "pris_voksne": item.get('pris_voksne') } # Legger til juniorpris hvis den finnes på samme index if i < len(junior_1): row["pris_junior"] = junior_1[i].get('pris_junior') final_greenfee.append(row) # --- MAPPER BANE 2 (Voksne + Junior) --- voksne_2 = acf.get('greenfee_-_voksne_bane_to') or [] junior_2 = acf.get('greenfee_-_junior_bane_to') or [] for i, item in enumerate(voksne_2): row = { "banenavn": bane_2_navn, "priskategori": item.get('priskategori_bane_to'), "pris_voksne": item.get('pris_voksne_bane_to') } if i < len(junior_2): row["pris_junior"] = junior_2[i].get('pris_junior_bane_to') final_greenfee.append(row) # Henter krav (Gjeste_krav) reqs = decode_html(acf.get('krav_til_gjestespillere')) if final_greenfee: await conn.execute(''' UPDATE facilities SET greenfee = $1::jsonb, guest_requirements = $2 WHERE slug = $3 ''', json.dumps(final_greenfee), reqs, slug) print(f"✅ {slug}: Importerte {len(final_greenfee)} prisrader for {bane_1_navn}/{bane_2_navn}") total_updated += 1 page += 1 await conn.close() print(f"\n✨ Ferdig! Oppdaterte priser for {total_updated} anlegg.") if __name__ == "__main__": asyncio.run(run_greenfee_sync())