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
|
# Scraper um die Unterseite zu laden
|
||||||
antwort = scraper.get(url, timeout=10)
|
antwort = scraper.get(url, timeout=10)
|
||||||
# Verwandle die Antwort in durchsuchbares HTML
|
# 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)
|
# Suche nach Hauptbereich (wie im Haptscript)
|
||||||
bereich = (
|
bereich = (
|
||||||
unter_soup.find("main") or unter_soup.find("article") or unter_soup.body
|
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
|
# Holt den alten Text dieser URL aus dem Gedächtnis
|
||||||
alter_eintrag = gedaechtnis.get(url, {})
|
alter_eintrag = gedaechtnis.get(url, {})
|
||||||
alter_text = alter_eintrag.get("inhalt", "")
|
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
|
# 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...")
|
print(f" [NEU] Änderung auf {url} gefunden. Ich frage die KI...")
|
||||||
# Zerlegt den Text in Zeilen
|
# Zerlegt den Text in Zeilen
|
||||||
alt_z = alter_text.splitlines()
|
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("+ ")]
|
diff = [z[2:] for z in difflib.ndiff(alt_z, neu_z) if z.startswith("+ ")]
|
||||||
text_fuer_ki = "\n".join(diff)
|
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
|
# Nur wenn auch wirklich neuer Text vorhanden ist
|
||||||
if text_fuer_ki.strip():
|
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
|
# Falls die KI die Änderung als politisch wichtig einstuft
|
||||||
if analyse.get("relevant") == True:
|
if analyse.get("relevant") == True:
|
||||||
print(f" [!] KI bestätigt Relevanz: {analyse.get('titel')}")
|
print(f" [!] KI bestätigt Relevanz: {analyse.get('titel')}")
|
||||||
# Nutzt den direkten Link der KI oder die Haupt-URL
|
# Nutzt den direkten Link der KI oder den Backup-Link
|
||||||
klick_url = analyse.get("direct_link", url)
|
klick_url = analyse.get("direct_link", backup_link)
|
||||||
sende_public(
|
sende_public(
|
||||||
titel=analyse.get("titel", "Polit-Update"),
|
titel=analyse.get("titel", "Polit-Update"),
|
||||||
nachricht=analyse.get("nachricht", "Neu auf der Seite"),
|
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
|
# Speichert den neuen Stand dieser Webseite im lokalen Gedächtnis
|
||||||
gedaechtnis[url] = {
|
gedaechtnis[url] = {
|
||||||
"inhalt": neuer_text,
|
"inhalt": neuer_text,
|
||||||
|
"links": aktuelle_links,
|
||||||
"zeit": str(datetime.now()),
|
"zeit": str(datetime.now()),
|
||||||
"status": status,
|
"status": status,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user