Ferdig på Windows for dagen

This commit is contained in:
Erol 2026-03-05 17:44:18 +01:00
parent f25331c5f0
commit 5e94ce0755

View file

@ -26,8 +26,6 @@ DB_URL = os.getenv("DATABASE_URL", "postgresql://teeoff_admin:teeoff_secret_pass
client = genai.Client()
async def ask_llm_status(text, course_name, is_single_course, ai_instruction=None):
"""Sender teksten til Gemini og ber om ett enkelt status-ord tilbake."""
if is_single_course:
bane_instruks = "Finn den generelle banestatusen for dette golfanlegget. Se bort fra spesifikke banenavn, da anlegget kun har én bane."
else:
@ -72,7 +70,6 @@ async def ask_llm_status(text, course_name, is_single_course, ai_instruction=Non
print(f" 🧠 GEMINI RÅ-SVAR: '{svar}'")
# --- NYTT: SORTERT SIKKERHETSFILTER ---
# De lengste/mest spesifikke må stå først!
gyldige_svar = [
"aapen_med_vintergreener",
"aapner_snart",
@ -192,7 +189,7 @@ async def run_daily_scraping(facility_ids=None):
try:
print(f"🔍 Besøker {f['name']} (Metode: {method})...")
await page.goto(f['scrape_status_url'], timeout=60000, wait_until="domcontentloaded")
await asyncio.sleep(3)
await page.wait_for_timeout(3000)
full_text = ""
@ -223,8 +220,8 @@ async def run_daily_scraping(facility_ids=None):
warnings.append(f"{f['name']}: Fant ikke knappen å klikke på: '{btn_selector}'")
continue
await btn.click()
await asyncio.sleep(2)
await btn.click(force=True)
await page.wait_for_timeout(2000)
element = page.locator(text_selector).first
if await element.count() == 0:
@ -235,24 +232,37 @@ async def run_daily_scraping(facility_ids=None):
elif method == 'llm_parse':
print(" 🖱️ Leter etter knapper å klikke på for å avdekke skjult tekst...")
knapper = await page.get_by_text(re.compile(r"banestatus|dagens status|se status|baneinfo", re.IGNORECASE)).all()
knapper = await page.get_by_text(re.compile(r"banestatus|dagens status|se status|se dagens status|baneinfo|\bstatus\b", re.IGNORECASE)).all()
klikk_count = 0
for knapp in knapper:
try:
if await knapp.is_visible():
await knapp.click(timeout=3000)
print(" 🎯 Klikket på en status-knapp! Venter 2 sekunder...")
await asyncio.sleep(2)
break
await knapp.click(timeout=2000, force=True)
klikk_count += 1
await page.wait_for_timeout(2000)
except Exception:
pass
if klikk_count > 0:
print(f" 🎯 Tvangsklikket på {klikk_count} status-knapp(er)! Venter ekstra på at innholdet laster...")
await page.wait_for_timeout(2000)
else:
print(" ⚠️ Fant ingen knapper å klikke på.")
# --- NYTT: HENTER OGSÅ SKJULT TEKST (For Scangolf megamenyer) ---
element = page.locator("body").first
if await element.count() == 0:
warnings.append(f"{f['name']}: Klarte ikke å lese siden for AI-tolkning")
continue
råtekst = await element.inner_text()
synlig_tekst = await element.inner_text() or ""
skjult_tekst = await element.text_content() or ""
# Slår sammen all tekst slik at Gemini får med seg menyer som er gjemt med CSS
råtekst = synlig_tekst + " " + skjult_tekst
full_text = " ".join(råtekst.split())
# ----------------------------------------------------------------
else:
warnings.append(f"⚠️ {f['name']}: Ukjent skrapemetode i databasen: '{method}'")
@ -265,6 +275,7 @@ async def run_daily_scraping(facility_ids=None):
is_single_course = len(courses) == 1
for c in courses:
old_status = c['status'] or "ukjent"
if method == 'llm_parse':
print(f" 🤖 Spør Gemini om status for '{c['name']}' (Singelbane: {is_single_course})...")
@ -279,14 +290,19 @@ async def run_daily_scraping(facility_ids=None):
warnings.append(f"{f['name']} ({c['name']}): Fant ikke søkeordet '{c['scrape_keyword']}' i teksten.")
continue
old_status = c['status'] or "ukjent"
if new_status != old_status and new_status != "ukjent":
# --- OPPDATERT LOGIKK (Fikser logg-buggen) ---
if new_status == "ukjent":
# Sikkerhetsnettet slår inn: Vi beholder gammel status!
warnings.append(f"⚠️ {f['name']} ({c['name']}): Fant ikke status. Beholder '{old_status.upper()}'.")
print(f" 🟡 KONKLUSJON: Fant ikke status i teksten (Sikkerhetsnett). Beholder gammel status ({old_status.upper()}).")
elif new_status != old_status:
await conn.execute("UPDATE courses SET status = $1 WHERE id = $2", new_status, c['id'])
changes.append(f"🔹 {f['name']} ({c['name']}): {old_status.upper()}{new_status.upper()}")
print(f" 🟢 KONKLUSJON: Status endret fra {old_status.upper()} til {new_status.upper()}")
else:
successes.append(f"{f['name']} ({c['name']}): {new_status.upper()}")
print(f" ⚪ KONKLUSJON: Ingen endring. Banen er fortsatt {new_status.upper()}")
print(f" ⚪ KONKLUSJON: Ingen endring. Banen er fortsatt {old_status.upper()}")
# ---------------------------------------------
except Exception as e:
err_msg = str(e).split('\n')[0]