import asyncio import asyncpg import json import re DB_URL = "postgresql://teeoff_admin:teeoff_secret_password@db:5432/teeoff" # Data hentet direkte fra bildet du sendte GOLFAMORE_DATA = { "borre": "Kortet er gyldig hverdager (ikke helligdager), ikke uke 14, 19, 20, 21", "nesfjellet": "Kortet er gyldig hverdager (ikke helligdager), ikke uke 27, 28, 29, 30", "vradal": "Kortet er gyldig alle dager, ikke uke 28, 29, 30, 31", "alta": "Kortet er gyldig alle dager", "elverum": "Kortet er gyldig hverdager (ikke helligdager)", "gronmo": "Kortet er gyldig alle dager", "notteroy": "Kortet er gyldig hverdager (ikke helligdager), ikke uke 27, 28, 29, 30", "roros": "Kortet er gyldig alle dager", "stiklestad": "Kortet er gyldig alle dager", "arendalomegn": "Kortet er gyldig alle dager, ikke uke 27, 28, 29, 30", "northcape": "Kortet er gyldig alle dager", "trysil": "Kortet er gyldig hverdager (ikke helligdager), ikke uke 28, 29, 30, 31", "mork": "Kortet er gyldig hverdager (ikke helligdager)", "norsjo": "Kortet er gyldig alle dager", "ringerike": "Kortet er gyldig alle dager", "stord": "Kortet er gyldig alle dager", "sunnmore": "Kortet er gyldig alle dager", "bodogolfparksalten": "Kortet er gyldig alle dager", "drammen": "Kortet er gyldig alle dager", "gjoviktoten": "Kortet er gyldig alle dager", "grenlandomegn": "Kortet er gyldig hverdager (ikke helligdager), ikke uke 27, 28, 29, 30", "nes09": "Kortet er gyldig alle dager, ikke uke 15, 16, 17, 18", "romerike": "Kortet er gyldig alle dager", "bamble": "Kortet er gyldig alle dager", "bleik": "Kortet er gyldig alle dager", "krokhol": "Kortet er gyldig alle dager", "skjeberg": "Kortet er gyldig hverdager (ikke helligdager)", "utsikten": "Kortet er gyldig hverdager (ikke helligdager), ikke uke 27, 28, 29, 30", "eiker": "Kortet er gyldig alle dager", "hafjell": "Kortet er gyldig alle dager", "mandal": "Kortet er gyldig alle dager, ikke uke 27, 28, 29, 30", "mjosen": "Kortet er gyldig alle dager", "randsfjorden": "Kortet er gyldig alle dager", "ski": "Kortet er gyldig alle dager", "bjornefjorden": "Kortet er gyldig alle dager", "sande": "Kortet er gyldig alle dager", "haugesund": "Kortet er gyldig alle dager", "midttroms": "Kortet er gyldig alle dager", "skei": "Kortet er gyldig hverdager (ikke helligdager)", "sorknes": "Kortet er gyldig alle dager", "gjerdrum": "Kortet er gyldig alle dager", "herdla": "Kortet er gyldig alle dager", "hovden": "Kortet er gyldig alle dager", "oppdal": "Kortet er gyldig alle dager", "gjersjoen": "Kortet er gyldig alle dager", "ogna": "Kortet er gyldig alle dager", "tonsberg": "Kortet er gyldig alle dager", "ullensaker": "Kortet er gyldig alle dager", "hof": "Kortet er gyldig hverdager (ikke helligdager)", "klabu": "Kortet er gyldig alle dager", "hemsedal": "Kortet er gyldig alle dager", "narvik": "Kortet er gyldig alle dager", "norefjell": "Kortet er gyldig hverdager (ikke helligdager)", "austratt": "Kortet er gyldig alle dager", "hammerfest": "Kortet er gyldig alle dager", "helgeland": "Kortet er gyldig alle dager", "jaren": "Kortet er gyldig alle dager", "namdal": "Kortet er gyldig alle dager", "namsos": "Kortet er gyldig alle dager", "nordfjord": "Kortet er gyldig alle dager", "polarsirkelen": "Kortet er gyldig alle dager", "sandnesbarheim": "Kortet er gyldig alle dager", "steinkjer": "Kortet er gyldig alle dager", "varanger": "Kortet er gyldig alle dager" } def clean(text): if not text: return "" # Fjerner alt som ikke er bokstaver/tall for matching s = text.lower().replace("golfklubb", "").replace("gk", "").replace(" og ", "").replace("&", "").strip() return re.sub(r'[^a-z0-9]', '', s) async def update_golfamore(): print("\n🚀 OPPDATERER GOLFAMORE FRA BILDE-DATA...") conn = await asyncpg.connect(DB_URL) facilities = await conn.fetch("SELECT id, name FROM facilities") # Lag et vasket map av bilde-dataen image_data_clean = {clean(name): val for name, val in GOLFAMORE_DATA.items()} matches = 0 for fac in facilities: fac_id = fac['id'] fac_name = fac['name'] fac_clean = clean(fac_name) validity = None # Prøv eksakt match først if fac_clean in image_data_clean: validity = image_data_clean[fac_clean] else: # Prøv delvis match (f.eks "Arendal" i "Arendal & Omegn") for key, val in image_data_clean.items(): if len(fac_clean) > 4 and (fac_clean in key or key in fac_clean): validity = val break if validity: print(f"✅ Match funnet: {fac_name}") ga_data = {"validity": validity} await conn.execute(""" UPDATE facilities SET golfamore = true, golfamore_data = $1 WHERE id = $2 """, json.dumps(ga_data), fac_id) matches += 1 else: # Hvis den ikke er i listen fra bildet, sett til false await conn.execute("UPDATE facilities SET golfamore = false, golfamore_data = '{}' WHERE id = $1", fac_id) await conn.close() print(f"\n🎉 Ferdig! {matches} baner ble oppdatert med Golfamore-info.") if __name__ == "__main__": asyncio.run(update_golfamore())