web_check.py: Implementierung von Cloudscraper-Bypass, Deep-Analysis (Link-verfolgung), UTF-8 Fixes für ntfy und ntfy-Prioritäten
This commit is contained in:
30
web_check.py
30
web_check.py
@@ -172,7 +172,7 @@ def hole_artikel_text(url):
|
||||
# Scraper um die Unterseite zu laden
|
||||
antwort = scraper.get(url, timeout=10)
|
||||
# Verwandle die Antwort in durchsuchbares HTML
|
||||
unter_soup = BeautifulSoup(antwort.text, "htpm.parser")
|
||||
unter_soup = BeautifulSoup(antwort.text, "html.parser")
|
||||
# Suche nach Hauptbereich (wie im Haptscript)
|
||||
bereich = (
|
||||
unter_soup.find("main") or unter_soup.find("article") or unter_soup.body
|
||||
@@ -208,9 +208,13 @@ def verarbeite_website(url, gedaechtnis):
|
||||
# Holt den alten Text dieser URL aus dem Gedächtnis
|
||||
alter_eintrag = gedaechtnis.get(url, {})
|
||||
alter_text = alter_eintrag.get("inhalt", "")
|
||||
bekannte_links = alter_eintrag.get("links", [])
|
||||
|
||||
# Sammelt alle Links aus dem Bereich für die KI
|
||||
aktuelle_links = extrahiere_links(hauptbereich, url)
|
||||
|
||||
# Prüft, ob sich der Text seit dem letzten Lauf verändert hat
|
||||
if alter_text != neuer_text:
|
||||
if alter_text != neuer_text or aktuelle_links != bekannte_links:
|
||||
print(f" [NEU] Änderung auf {url} gefunden. Ich frage die KI...")
|
||||
# Zerlegt den Text in Zeilen
|
||||
alt_z = alter_text.splitlines()
|
||||
@@ -219,17 +223,26 @@ def verarbeite_website(url, gedaechtnis):
|
||||
diff = [z[2:] for z in difflib.ndiff(alt_z, neu_z) if z.startswith("+ ")]
|
||||
text_fuer_ki = "\n".join(diff)
|
||||
|
||||
# Sammelt alle Links aus dem Bereich für die KI
|
||||
alle_links = extrahiere_links(hauptbereich, url)
|
||||
|
||||
# Nur wenn auch wirklich neuer Text vorhanden ist
|
||||
if text_fuer_ki.strip():
|
||||
analyse = analysiere_mit_gemini(text_fuer_ki, alle_links)
|
||||
# --- NEU: Neue Links verfolgen und Artikeltexte abrufen ---
|
||||
neue_links = [l for l in aktuelle_links if l not in bekannte_links]
|
||||
# Fallback, falls Gemini den direct_link vergisst: Nimm den ersten neuen Link oder die Haupt-URL
|
||||
backup_link = neue_links[0] if neue_links else url
|
||||
|
||||
# Wir begrenzen das auf max. 3 neue Links, um Zeit und Tokens zu sparen
|
||||
for link in neue_links[:3]:
|
||||
print(f" [..] Lade Artikelinhalt von: {link}")
|
||||
artikel_inhalt = hole_artikel_text(link)
|
||||
# Wir hängen den Inhalt direkt an den Text für die KI an
|
||||
text_fuer_ki += f"\n\n--- ZUSÄTZLICHER ARTIKELKONTEXT ({link}) ---\n{artikel_inhalt}"
|
||||
|
||||
analyse = analysiere_mit_gemini(text_fuer_ki, aktuelle_links)
|
||||
# Falls die KI die Änderung als politisch wichtig einstuft
|
||||
if analyse.get("relevant") == True:
|
||||
print(f" [!] KI bestätigt Relevanz: {analyse.get('titel')}")
|
||||
# Nutzt den direkten Link der KI oder die Haupt-URL
|
||||
klick_url = analyse.get("direct_link", url)
|
||||
# Nutzt den direkten Link der KI oder den Backup-Link
|
||||
klick_url = analyse.get("direct_link", backup_link)
|
||||
sende_public(
|
||||
titel=analyse.get("titel", "Polit-Update"),
|
||||
nachricht=analyse.get("nachricht", "Neu auf der Seite"),
|
||||
@@ -241,6 +254,7 @@ def verarbeite_website(url, gedaechtnis):
|
||||
# Speichert den neuen Stand dieser Webseite im lokalen Gedächtnis
|
||||
gedaechtnis[url] = {
|
||||
"inhalt": neuer_text,
|
||||
"links": aktuelle_links,
|
||||
"zeit": str(datetime.now()),
|
||||
"status": status,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user