124 lines
5.4 KiB
Python
124 lines
5.4 KiB
Python
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())
|