︳⟫⭕ RSS-Feed Filter ⭕⟪︱ ❌ Das Script "pipe_system.php" Script läuft nur über Cronjob! Ein Aufruf über Browser funktioniert nicht und bring die Fehlermeldung: "...298 Fatal error: Uncaught TypeError: array_slice(): Argument #1 ($array) must be of type array, null given.." ❌ [𝗔] ╟---❱ Projektstruktur ❰---╣ ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ rss_filter_webapp/ │ ├── .htaccess # php_flag display_errors on ├── config.php # zentrale Konfiguration (Array mit Settings) ├── pipe_system.php # Hauptscript zum Filtern & Zusammenführen ├── rss_normalizer.php # konvertiert unformatierte Feeds ins Standartformat ├── merge_tv-feeds.php # führt gefilterte Feeds mit Tatort und Polizeiruf zusammen ├── merge_hoerspiele-feeds.php # führt gefilterte Feeds mit ARD Radio-Tatort zusammen ├── log_cleaner_multi.php # löscht alte Log Einträge /─┐ ├── admin/ # Admin-Oberfläche │ ├── index.php # Regelverwaltung | ├── logout.php │ ├── login.php # Login-Seite │ ├── dashboard.php # Haupt-Dashboard │ ├── regelverwaltung.php # Seite zur Regelpflege │ ├── save_rules.php # Speichert alle Regeln │ ├── _template.php # Layout-Header/Footer-Funktionen │ ├── filter_hits.php # Filtertreffer anzeigen │ └── .auth.json # Passwort-Hash für Admin-Zugang | ├── feed-converted │ ├── heise_mobiles_converted.xml │ ├── heise-tipps_converted.xml │ ├── radio-tatort_converted.xml │ ├── physik_converted.xml │ ├── scinexx_converted.xml | └── linuxmintusers_converted.xml | ├── feedsURLs/ # Feed-Quellen (id + url) │ ├── TVprogramm.json # Feeds TV Tipps | ├── opensource.json # Feeds Open Sours Quellen | ├── filter/ # Ordner, mir den Filtern │ ├── opensource-s.json # case-insensitive Filter | └── opensource-i.json # case-sensitive Filter | ├── filtered/ # hier landen alle gefilterten Feed-Dateien │ ├── opensource.xml # zusammengeführter Feed Open Source │ ├── TVprogramm.xml # zusammengeführter Feed TV Tipps │ └── merged.xml # zusammengeführter Feed │ ├── includes/ # Hilfsfunktionen & zentrale Dateien │ ├── auth.php # Loginprüfung, Passwort setzen │ └── rule_manager.php # Regeln laden/speichern (JSON), nur für Web Interface | ├── logs/ # Logs zur Nachverfolgung ├── filter.log # Logfile des Filter-Scripts pipe_system.php |── filter_hits-opensource.log # dokumentiert gefilterte Treffer von Open Source Pipe └── filter_hits-TVprogramm.log # dokumentiert gefilterte Treffer von TV Tipps Pipe Bei meinem Hoster sind die Funktionen shell_exec() und system() gesperrt. [𝗕]] ╟---❱ URLs ❰---╣ ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ > die Feed Adresse sind hinterlegt im Ordner "feedsURLs": https://luposcripts.helioho.st/rss_filter_webapp/feedsURLs/opensource.json - usw. > RSS-Reader Adressen: https://luposcripts.helioho.st/rss_filter_webapp/filtered/tagesschau.xml https://luposcripts.helioho.st/rss_filter_webapp/filtered/heise.xml https://luposcripts.helioho.st/rss_filter_webapp/filtered/opensource.xml https://luposcripts.helioho.st/rss_filter_webapp/filtered/golem.xml https://luposcripts.helioho.st/rss_filter_webapp/filtered/mobiles.xml https://luposcripts.helioho.st/rss_filter_webapp/filtered/physik.xml https://luposcripts.helioho.st/rss_filter_webapp/filtered/rolling-stone.xml https://luposcripts.helioho.st/rss_filter_webapp/filtered/scinexx.xml https://luposcripts.helioho.st/rss_filter_webapp/filtered/tv-tipps_plus.xml https://luposcripts.helioho.st/rss_filter_webapp/filtered/hoerspiele_plus.xml https://luposcripts.helioho.st/rss_filter_webapp/filtered/linuxmintusers.xml https://luposcripts.helioho.st/rss_filter_webapp/filtered/reisereporter.xml > Mit rss_normalizer.php convertierte Feeds: https://luposcripts.helioho.st/rss_filter_webapp/feed-converted/scinexx_converted.xml https://luposcripts.helioho.st/rss_filter_webapp/feed-converted/heise_mobiles_converted.xml https://luposcripts.helioho.st/rss_filter_webapp/feed-converted/heise-tipps_converted.xml https://luposcripts.helioho.st/rss_filter_webapp/feed-converted/radio-tatort_converted.xml https://luposcripts.helioho.st/rss_filter_webapp/feed-converted/physik_converted.xml https://luposcripts.helioho.st/rss_filter_webapp/feed-converted/linuxmintusers_converted.xml > Aufruf über Browser: https://luposcripts.helioho.st/rss_filter_webapp/admin/ https://luposcripts.helioho.st/rss_filter_webapp/logs/RSS_cron.log https://luposcripts.helioho.st/rss_filter_webapp/logs/filter.log https://luposcripts.helioho.st/rss_filter_webapp/rss_normalizer.php https://luposcripts.helioho.st/rss_filter_webapp/merge_tv-feeds.php https://luposcripts.helioho.st/rss_filter_webapp/merge_hoerspiele-feeds.php https://luposcripts.helioho.st/rss_filter_webapp/linuxmintusers-request.php > tv-tipps_plus: mit Tatort & Polizeiruf < + https://luposcripts.helioho.st/rss_filter_webapp/filtered/tv-tipps.xml + https://www.tvspielfilm.de/tv-programm/rss/heute2015.xml 🡆 https://luposcripts.helioho.st/rss_filter_webapp/filtered/tv-tipps_plus.xml > hoerspiele_plus: mit ARD Radio-Tatort < Der Bayerischer Rundfunk bietet einen ARD Radio-Tatort Feed unter der Adresse an (allerdings um 1 Monat verzögert und unformatiert): https://feeds.br.de/ard-radio-tatort/feed.xml Diese wird von rss_normalizer.php aufgerufen, formatiert und als radio-tatort_converted.xml ausgegeben. merge_hoerspiele-feeds.php führt diese beiden Feeds zusammen: + https://luposcripts.helioho.st/rss_filter_webapp/feed-converted/radio-tatort_converted.xml + https://luposcripts.helioho.st/rss_filter_webapp/filtered/hoerspiele.xml 🡆 https://luposcripts.helioho.st/rss_filter_webapp/filtered/hoerspiele_plus.xml [𝗖] ╟---❱ Dedupe config ❰---╣ ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ | Vorteil | Erklärung | | ---------------------------- | --------------------------------------------- | | Keine doppelten Artikel mehr | auch wenn 2 Feeds dieselben Posts enthalten | | Einfache Steuerung | basierend auf `link`, `title` oder `guid` | | Flexibel erweiterbar | du kannst z. B. `title + pubDate` kombinieren | $key = md5((string)$item->link); // oder: $item->title [𝗗] ╟---❱ Konfigurierbare Filterlogik ❰---╣ ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ Wir erlauben es, per Konfiguration auszuwählen, ob die Filterung auf title, description, author oder mehrere angewendet wird. ['title', 'description', 'author'], 'dedup_fields' => ['title', 'description'], 'log_file' => __DIR__ . '/logs/filter.log', 'auth_file' => __DIR__ . '/admin/.auth.json' ]; [𝗗] ╟---❱ Cronjob ❰---╣ ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ > Filter rss_normalizer.php > Hourly (at 26 min) pipe_system.php > Hourly (at 28 min) merge_tv-feeds.php > Hourly (at 31 min) merge_hoerspiele-feeds.php > Hourly (at 33 min) > FreshRSS actualize_script.php > Hourly (at 35 min) > log_cleaner log_cleaner_multi.php > Daily (01:00) [𝗘] ╟---❱ Log Cleaner ❰---╣ ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ läuft einmal nachts als Cronjob. Löscht Logeinträge älter als 1 Stunde (definiert in config.php) aus allen Logdateien, außer RSS_cron.log, die sich selbst überschreibt. Alternative: Falls Sie später mehrere Dateien ausschließen möchten, können Sie in der config.php eine Ausnahmeliste definieren: 'exclude_logs' => ['RSS_cron.log', 'important.log'] Aktuell reicht die einfache Lösung mit der direkten Prüfung aus. [𝗙] ╟---❱ Feed Normalizer ❰---╣ ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ wandelt Feeds in standardkonformes RSS-Format um und speichert sie im Ordner "feed-converted": • heise_mobiles_converted.xml • scinexx_converted.xml • heise-tipps_converted.xml • physik_converted.xml • radio-tatort_converted.xml • linuxmintusers_converted.xml ┌── scinexx_converted.xml | ├── physik_converted.xml | ├── rss_normalizer.php ──├── heise-tipps_converted.xml | ├── radio-tatort_converted.xml | ├── linuxmintusers_converted.xml | └── heise_mobiles_converted.xml [𝗚] ╟---❱ Filter ❰---╣ ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ > Blacklist-Filter < • Filter sind im Ordner "filter" im JSON Format gespeichert. Es handelt sich dabei um Blacklist-Filter • *-s.json | "case sensitive", unterscheidet zwischen Groß- und Kleinschreibung von Buchstaben • *-i.json | "case insensitive", ignoriert Groß- und Kleinschreibung > Whitelist-Filter < • merge_tv-feeds.php ist ein Merger mit Whitelist-Filter. Das Script lässt von https://www.tvspielfilm.de/tv-programm/rss/heute2015.xml nur 'Tatort' & 'Polizeiruf' durch und führt das mir tv-tipps.xml zusammen. Die Ausgabe landet um Ordner "filtert" als tv-tipps_plus.xml • merge_hoerspiele-feeds.php ist ein Merger mit Whitelist-Filter. Das Script lässt von https://www.gratis-hoerspiele.de/feed/ nur 'ARD Radio-Tatort' durch und führt das mir hoerspiele.xml zusammen. Die Ausgabe landet um Ordner "filtert" als hoerspiele_plus.xml > tv-tipps_plus mit Tatort & Polizeiruf ├── https://luposcripts.helioho.st/rss_filter_webapp/filtered/tv-tipps.xml ──┐ # filtert von tv-spielfilm und klack tv ├── merge_tv-feeds.php # führt beide Feeds zusammen ├── https://www.tvspielfilm.de/tv-programm/rss/heute2015.xml ──┘ # nur für Tatort & Polizeiruf > hoerspiele_plus mit ARD Radio-Tatort ├── https://luposcripts.helioho.st/rss_filter_webapp/feed-converted/radio-tatort_converted.xml ──┐ # nur für ARD Radio-Tatort ├── merge_hoerspiele-feeds.php # führt Feeds zusammen ├── https://luposcripts.helioho.st/rss_filter_webapp/filtered/hoerspiele.xml ──┘ # gefiltert von hoerspiele [𝗛] ╟---❱ Workflow ❰---╣ ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ > Verwendung von pipe_system.php < • einzelnes Profil aufrufen: php pipe_system.php opensource • mehrere Profile aufrufen: php pipe_system.php opensource scinexx hoerspiele • alle Profile: php pipe_system.php • das System erstellt automatisch alle benötigten Verzeichnisse und arbeitet vollständig profil-getrennt > Logische Abfolge •🠲 linuxmintusers-request.php 🠲 rss_normalizer.php 🠲 pipe_system.php 🠲 merge_tv-feeds.php 🠲 merge_hoerspiele-feeds.php 🠲 actualize_script.php [𝗜] ╟---❱ Feeds hinzufügen ❰---╣ ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ • im Ordner "feedsURLs" JSON-Datei (z.B. mobiles.json) erstellen, die die Feed-Adresse beinhaltet • in pipe_system.php ein Profil ersteellen, z.B. 'mobiles' => 'Mobiles & Android' • im Ordner "filter" "case sensitive" und "case insensitive" Filter erstellen, z.B. mobiles-s.json mobiles-i.json [𝗝] ╟---❱ Externe Dienste & Goodies ❰---╣ ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ • linuxmintusers.de bietet seine Feeds unter der Adresse an: https://linuxmintusers.de/index.php?action=.xml;type=rss2 Allerdings sind die Vorgaben zum Abrufen der URL so restrictiv, dass es über das pipe_system.php-Script nicht funktioniert. mit dem Dienst: https://morss.it/:proxy/https://linuxmintusers.de/index.php?action=.xml;type=rss2 funktioniert es, allerdings funktioniert die Adresse mit dem pipe_system.php-Script nicht. Das Script linuxmintusers-request.php kann dies aber. Es simuliert den Abruf über einen Browser. (Dadurch wird auch die Datei cookie.txt erzeugt.) Abruf der Feeds von: https://morss.it/:proxy/https://linuxmintusers.de/index.php?action=.xml;type=rss2 speichern als: https://luposcripts.helioho.st/rss_filter_webapp/feed-converted/linuxmintusers-rss.xml mit rss_normalizer.php Ausgabe als: https://luposcripts.helioho.st/rss_filter_webapp/feed-converted/linuxmintusers_converted.xml Alternative: Mit https://www.pipes.digital/editor/EOmWDB9L klappt es auch. Dafür muss der linuxmintusers-Feeds über die Adresse https://pipes.digital/feed/1N5nA1Og abgerufen. Ausblick: Falls die oben aufgeführten Methoden nicht ausfallsicher sind, eventuell den Feed-Reader SimplePie hosten und damit die Feeds von linuxmintusers.de abrufen und dann mit pipe_system.php weiter verarbeiten. > Originale URLs für opensource < https://www.tuxmachines.org/node/feed https://www.linuxhint.com/feed/ https://lxer.com/module/newswire/headlines.rss https://linuxtoday.com/backend/biglt.rss https://linux-bibel.at/index.php/feed https://osbn.de/feed.rss https://www.linux-magazin.de/rss/feed/news https://www.linux-community.de/Ticker/news.rdf https://www.michlfranken.de/feed/ [𝐊] ╟---❱ Webserver Schreibrechte ❰---╣ ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ chmod -R 755 logs/ filter/ filtered/ feed-converted/