From 4e9d9f92f1e4a5700be6478484080fb9cbbad0e8 Mon Sep 17 00:00:00 2001 From: UserIsMH Date: Fri, 22 May 2026 01:18:50 +0200 Subject: [PATCH] fix(rss): echten Publisher aus Google-News -Tag uebernehmen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Google-News-Feeds (Site-Search wie auch der neue Volltext-Suchfeed) buendeln Artikel vieler echter Publisher unter einer Feed-URL. Bisher bekamen alle Artikel den generischen Feed-Namen als 'source' — der Faktencheck zaehlte damit 25 Artikel verschiedener Zeitungen als EINE Quelle, und die Quellenuebersicht war unbrauchbar. Fix: Bei news.google.com-Feeds wird der echte Publisher aus dem -Tag des Feed-Items uebernommen (feedparser: entry.source.title). Fallback: der Publisher-Teil hinter dem letzten ' - ' im Google-News-Titel. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/feeds/rss_parser.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/feeds/rss_parser.py b/src/feeds/rss_parser.py index 1d0b671..8af9199 100644 --- a/src/feeds/rss_parser.py +++ b/src/feeds/rss_parser.py @@ -176,6 +176,11 @@ class RSSParser: name = feed_config["name"] url = feed_config["url"] articles = [] + # Google-News-Feeds (Site-Search ODER Volltext-Suche) buendeln Artikel + # vieler echter Publisher. Pro Item steht der echte Publisher im + # -Tag — den nutzen wir als source-Name, sonst zaehlt der + # Faktencheck 25 Artikel als "eine Quelle". + _is_google_news = "news.google.com" in (url or "") try: async with httpx.AsyncClient(timeout=15.0, follow_redirects=True) as client: @@ -222,10 +227,26 @@ class RSSParser: # Relevanz-Score: Anteil der gematchten Suchworte (0.0-1.0) relevance_score = match_count / len(search_words) if search_words else 0.0 + # Bei Google-News-Feeds: echten Publisher aus -Tag holen + article_source = name + if _is_google_news: + src_obj = entry.get("source") + src_title = "" + if isinstance(src_obj, dict): + src_title = (src_obj.get("title") or "").strip() + elif src_obj: + src_title = str(getattr(src_obj, "title", "") or "").strip() + if src_title: + article_source = src_title + else: + # Google-News-Titel enden oft mit " - Publishername" + if " - " in title: + article_source = title.rsplit(" - ", 1)[-1].strip() or name + articles.append({ "headline": title, "headline_de": title if self._is_german(title) else None, - "source": name, + "source": article_source, "source_url": entry.get("link", ""), # Die Quell-Domain aus der DB (z.B. "mod.go.jp"), nicht aus # der URL — relevant für Google-News-RSS-Quellen, deren URLs