Nye-TeeOff/backend/scrape_golfamore1.3.py
2026-02-26 09:20:51 +01:00

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())