Relevanz Erkennung verfeineret, Handlungsbedarf (Socialmedia-Posts) hinzugefügt und Tags (Emojis) werden jetzt automatisch, Themenvasiert erstellt + kleinere Verfeinerungen

This commit is contained in:
2026-04-01 15:21:13 +02:00
parent b71b0f26c3
commit 856c16ec52

View File

@@ -19,9 +19,10 @@ ADMIN_PW = os.getenv("ADMIN_PW")
NTFY_BASE = os.getenv("NTFY_BASE") NTFY_BASE = os.getenv("NTFY_BASE")
DEBUG_LOG = os.getenv("DEBUG_LOG", "false").lower() == "true" DEBUG_LOG = os.getenv("DEBUG_LOG", "false").lower() == "true"
MIN_RELEVANZ_SCORE = int(os.getenv("MIN_RELEVANZ_SCORE", "30")) MIN_RELEVANZ_SCORE = int(os.getenv("MIN_RELEVANZ_SCORE", "30"))
GEMINI_MODEL = "flash" GEMINI_MODEL = "gemini-2.5-flash-lite"
GEMINI_SESSION = "1" GEMINI_SESSION = "1"
NTFY = "true"
SIGNAL = "true"
TOPIC_PUBLIC = "polit-scraper-public" TOPIC_PUBLIC = "polit-scraper-public"
TOPIC_ADMIN = "polit-scraper-admin" TOPIC_ADMIN = "polit-scraper-admin"
@@ -88,38 +89,30 @@ def analysiere_mit_gemini(text):
} }
def sende_public(titel, nachricht, klick_url, category="info", priority=3): def sende_public(titel, nachricht, klick_url, tags, priority=3):
"""Sendet Push-Nachricht an ntfy.""" """Sendet Push-Nachricht an ntfy."""
if not NTFY_BASE: if NTFY == "true":
return if not NTFY_BASE:
url = f"{NTFY_BASE}/{TOPIC_PUBLIC}" return
emoji_mapping = { url = f"{NTFY_BASE}/{TOPIC_PUBLIC}"
"demo": "rotating_light,loudspeaker", headers = {
"socialmedia": "detective,no_entry", "Title": titel.encode("utf-8"),
"polizei": "police_car,warning", "Tags": tags.encode("utf-8"),
"stadt": "cityscape,newspaper", "Click": klick_url,
"solidaritaet": "fist,heart", "Priority": str(priority),
"info": "newspaper", }
} try:
tags = emoji_mapping.get(category.lower(), "newspaper") import requests
headers = {
"Title": titel.encode("utf-8"),
"Tags": tags,
"Click": klick_url,
"Priority": str(priority),
}
try:
import requests
requests.post( requests.post(
url, url,
data=nachricht.encode("utf-8"), data=nachricht.encode("utf-8"),
headers=headers, headers=headers,
auth=(ADMIN_USER, ADMIN_PW), auth=(ADMIN_USER, ADMIN_PW),
timeout=10, timeout=10,
) )
except Exception as e: except Exception as e:
print(f" [!] Fehler Public-Versand: {e}") print(f" [!] Fehler Public-Versand: {e}")
def sende_admin(titel, nachricht): def sende_admin(titel, nachricht):
@@ -229,15 +222,17 @@ def verarbeite_website(url):
"begruendung_score", "Keine Begründung vorhanden" "begruendung_score", "Keine Begründung vorhanden"
) )
if analyse.get("relevant") and score >= MIN_RELEVANZ_SCORE: if score >= MIN_RELEVANZ_SCORE:
print(f" [!] RELEVANT (Score: {score}): {analyse.get('titel')}") if DEBUG_LOG:
debug(f"Begründung: {begruendung}") debug(
f"KI-Analyse-Ergebnis (JSON): {json.dumps(analyse, indent=2, ensure_ascii=False)}"
)
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"),
klick_url=link, klick_url=link,
category=analyse.get("category", "info"),
priority=analyse.get("priority", 3), priority=analyse.get("priority", 3),
tags=analyse.get("tags", "panda_face"),
) )
else: else:
debug( debug(
@@ -280,16 +275,18 @@ def verarbeite_website(url):
"begruendung_score", "Keine Begründung vorhanden" "begruendung_score", "Keine Begründung vorhanden"
) )
if analyse.get("relevant") and score >= MIN_RELEVANZ_SCORE: if score >= MIN_RELEVANZ_SCORE:
print( print(
f" [!] RELEVANT (Score: {score}): {analyse.get('titel')}" f" [!] RELEVANT (Score: {score}): {analyse.get('titel')}"
) )
if DEBUG_LOG:
debug(f"KI-Analyse-Ergebnis (JSON): {json.dumps(analyse, indent=2, ensure_ascii=False)}")
debug(f"Begründung: {begruendung}") debug(f"Begründung: {begruendung}")
sende_public( sende_public(
analyse.get("titel"), analyse.get("titel"),
analyse.get("nachricht"), analyse.get("nachricht"),
target_url, target_url,
analyse.get("category"), analyse.get("tags"),
analyse.get("priority"), analyse.get("priority"),
) )
else: else:
@@ -321,8 +318,13 @@ with open("./urls.txt", "r", encoding="utf-8") as datei:
adresse = zeile.strip() adresse = zeile.strip()
if not adresse or adresse.startswith("#"): if not adresse or adresse.startswith("#"):
continue continue
print(" ")
print(
"----------------------------------------------------------------------------------------------------"
)
print(" ")
print(f"Ich prüfe: {adresse}") print(f"Ich prüfe: {adresse}")
verarbeite_website(adresse) verarbeite_website(adresse)
conn.close() conn.close()
print("\nFertig. Gute Nacht!") print("\nBleibt wachsam und solidarisch! Bis zum nächsten Lauf.")