Liomans Blog - RSShttps://lioman.de/42 ist die Antwort – aber wie lautet die Frage?Mon, 05 Aug 2024 17:00:00 +0200Filter Nextcloud Newshttps://lioman.de/2024/08/filter-nextcloud-news/<p><img _="," alt="Nextcloud News Filter Logo" class="alignleft" src="https://lioman.de/images/nextcloud_news_filter_logo.svg" style="width: 8vw"> Vor einiger Zeit habe ich <a href="https://newsblur.com">Newsblur</a> als <span class="caps">RSS</span>-Feedreader genutzt. Auch wenn ich nicht viel an dem Dienst auszusetzen hatte, habe ich alle Abonnements auf eine Nextcloud-Instanz umgezogen. Das einzige Feature, das ich wirklich vermisst habe, ist die Möglichkeit die vielen <span class="caps">RSS</span>-Feeds zu filtern. Hat man viele Feeds abonniert, wird es schnell unübersichtlich. Beispiele für Dinge, die ich nicht mehr sehen möchte, sind ältere Artikel von online Zeitungen, Werbung oder einfach bestimmte Themen. <a href="https://nextcloud.github.io/news/">Nextcloud News</a> bietet diese Möglichkeit einfach nicht und so habe ich ein kleines Tool entwickelt, um genau das zu&nbsp;tun.</p> <h2>Was&nbsp;macht <code>nextcloud_news_filter</code>?</h2> <p><code>nextcloud_news_filter</code> verbindet sich mit der konfigurierten Nextcloud-Instanz und holt sich alle ungelesenen Artikel. Dann geht es durch alle Artikel durch und schaut, ob es zu einem Filter passt. Konfigurieren kann man reguläre Ausdrücke für den Titel und den Text, außerdem kann man schauen, ob ein Artikel älter als eine bestimmte Zeit ist. Jeden Filter kann man zudem auf einen definierten Feed&nbsp;begrenzen.</p> <p>Danach werden alle zu Filter passenden Artikel einfach als gelesen markiert und tauchen so erstmal nicht mehr in den entsprechenden Clients&nbsp;auf.</p> <h2>Anleitung</h2> <p>Zum Zeitpunkt des Erscheinens diese Artikels,&nbsp;ist <code>nextcloud_news_filter</code> in der Version <a href="https://gitlab.com/lioman/nextcloud_news_filter/-/releases/v0.2.0">0.2.0</a> verfügbar. Die folgende Anleitung ist daran angepasst und mag für zukünftige Versionen nicht mehr gültig sein. Eine aktuelle Beschreibung auf Englisch befindet sich <a href="https://gitlab.com/lioman/nextcloud_news_filter/-/blob/main/README.md">hier</a>.</p> <h3>Installation und&nbsp;Benutzung</h3> <p>Es gibt zwei mögliche Modi, um das Filterprogramm zu nutzen. Installiert man das Programm&nbsp;mit <code>pipx install nextcloud_news_filter[cli]</code> oder <code>pip install nextcloud_news_filter[cli]</code> kann man neben der händischen Nutzung einen Cronjob erstellen. Das geht gut, wenn man Nextcloud auf einem eigenen Server installiert hat oder eh einen Raspberry Pi oder ähnliches&nbsp;läuft.</p> <p>Ich benutze Variante zwei und installiere die aktuellste Version als &#8220;<em>Serverless-Function</em>&#8221; auf <a href="https://www.scaleway.com/en/serverless-functions/">Scaleway</a>. Hauptsächlich, um mit damit zu experimentieren. Zudem ist es vergleichsweise günstig, denn Scaleway bietet ein kostenloses Budget an Ressourcen an. Diese überschreite ich derzeit mit einem Aufruf alle 30 min nicht (oder nur&nbsp;selten).</p> <h3>Konfiguration</h3> <p>Die Verbindung zu Nextcloud muss über Umgebungsvariablen gesteuert werden. Dazu setzt&nbsp;man</p> <ul> <li><code>NEXTCLOUD_URL</code> - Die <span class="caps">URL</span> der&nbsp;Nextcloud-Instanz</li> <li><code>NEXTCLOUD_USER</code> - Der&nbsp;Nutzername</li> <li><code>NEXTCLOUD_PASS</code> - Das&nbsp;Passwort</li> </ul> <p>Dann muss man noch die Filter im <span class="caps">JSON</span>-Format konfigurieren.&nbsp;In <code>skipFeeds</code> kann man IDs von Feeds konfigurieren, die man von allen Filtern ausschließen möchte.&nbsp;Unter <code>filter</code> konfiguriert man dann die eigentlichen Filter. Diese bestehen&nbsp;aus:</p> <ul> <li><code>name</code>: Name des Filters. <em>Obligatorisch</em></li> <li><code>feedId</code>: Id des Feeds auf den dieser Filter beschränkt werden soll. <em>Optional</em></li> <li><code>bodyRegex</code>: Regex die den Text des Artikels durchsucht. <em>Optional</em></li> <li><code>titleRegex</code>: Regex die nur den Titel betrachtet. <em>Optional</em></li> <li><code>hoursAge</code>: maximales alter des Artikels in Stunden. <em>Optional</em></li> </ul> <div class="highlight"><pre><span></span><code><span class="p">{</span> <span class="w"> </span><span class="nt">&quot;skipFeeds&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="w"> </span><span class="mi">1678</span><span class="p">,</span><span class="w"> </span><span class="mi">1683</span><span class="p">,</span><span class="w"> </span><span class="mi">1681</span><span class="p">,</span><span class="w"> </span><span class="mi">1682</span><span class="p">,</span><span class="w"> </span><span class="mi">1684</span><span class="p">,</span><span class="w"> </span><span class="mi">1680</span><span class="p">,</span><span class="w"> </span><span class="mi">1659</span><span class="p">,</span><span class="w"> </span><span class="mi">1654</span><span class="p">,</span><span class="w"> </span><span class="mi">1658</span><span class="p">,</span><span class="w"> </span><span class="mi">1657</span><span class="p">,</span><span class="w"> </span><span class="mi">1656</span><span class="p">,</span><span class="w"> </span><span class="mi">1660</span><span class="p">,</span><span class="w"> </span><span class="mi">1655</span> <span class="w"> </span><span class="p">],</span> <span class="w"> </span><span class="nt">&quot;filter&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;heise+&quot;</span><span class="p">,</span> <span class="w"> </span><span class="nt">&quot;feedId&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1592</span><span class="p">,</span> <span class="w"> </span><span class="nt">&quot;titleRegex&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;heise\\+|heise\\-Angebot|TechStage&quot;</span> <span class="w"> </span><span class="p">},</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;All with Advertisement in Body&quot;</span><span class="p">,</span> <span class="w"> </span><span class="nt">&quot;feedId&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1594</span><span class="p">,</span> <span class="w"> </span><span class="nt">&quot;bodyRegex&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;^Advertisement: &quot;</span> <span class="w"> </span><span class="p">},</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Feed older than one day, for feed 1595&quot;</span><span class="p">,</span> <span class="w"> </span><span class="nt">&quot;feedId&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1595</span><span class="p">,</span> <span class="w"> </span><span class="nt">&quot;hoursAge&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">24</span> <span class="w"> </span><span class="p">},</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;all &gt; 20 Days all feeds (except for skipped ones)&quot;</span><span class="p">,</span> <span class="w"> </span><span class="nt">&quot;hoursAge&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">480</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="p">]</span> <span class="p">}</span> </code></pre></div> <h3>Links</h3> <p>Wer sich die Quelle bzw. Dokumentation anschauen möchte oder eventuell sogar etwas beitragen kann, findet das <a href="https://gitlab.com/lioman/nextcloud_news_filter/">Repository</a> auf&nbsp;Gitlab.</p> <p>Fehler oder Wünsche können <a href="https://gitlab.com/lioman/nextcloud_news_filter/-/issues">hier</a> erstellt&nbsp;werden.</p> <p>Installation erfolgt am besten über <a href="https://pypi.org/project/nextcloud_news_filter/">PyPi</a> oder man kann sich das Scaleway Bundle der aktuellen Version <a href="https://gitlab.com/lioman/nextcloud_news_filter/-/jobs/7463888405/artifacts/download">0.2.0</a>&nbsp;holen.</p>LiomanMon, 05 Aug 2024 17:00:00 +0200tag:lioman.de,2024-08-05:/2024/08/filter-nextcloud-news/DigitalnextcloudFOSSprojectRSSNewsPythonnextcloud_news_filteropen-source52 Bücher: Feedsammlunghttps://lioman.de/2011/11/52-buecher-feedsammlung/<p>Wie schon beschrieben mache ich bei Fellmonsterchens <a class="reference external" href="http://monstermeute.wordpress.com/projekt-52-bucher/">52 Bücherprojekt</a> mit und dabei machen viele interessante Blogs mit. Einige hätte ich niemals entdeckt und es gibt unter den Buchvorschlägen wirklich ein paar interessante&nbsp;Tipps.</p> <p>Da es bisher noch keine zentrale Anlaufstelle für alle Artikel gibt. habe ich mit dem Greader ein kleines Set&nbsp;zusammengestellt.</p> <p>Noch sind nicht alle sinnvollen Sharingfeatures eingestampft und über ein Set kann man alle Einträge entweder auf einer extra Seite/einem Sammel-Feed <a class="reference external" href="http://www.google.de/reader/bundle/user%2F11853287845676461518%2Fbundle%2F52%20B%C3%BCcher">zusammenfassen.</a>&nbsp;Dieses Feed können andere wiederum abonnieren oder einfach so mitlesen. Zu dem Feed gibt es auch eine<a class="reference external" href="http://www.google.de/reader/public/subscriptions/user%2F11853287845676461518%2Fbundle%2F52%20B%C3%BCcher"><span class="caps">OPML</span>-Datei</a>, die auch den einfachen Import in andere <span class="caps">RSS</span>-Reader&nbsp;ermöglicht.</p> <p>Leider sind nicht alle Teilnehmer in dem Feed enthalten. Statt der ursprünglich 48 habe ich nur 12 Feeds. Das hat verschiedenste Gründe. Manche haben noch gar nichts zu dem Thema veröffentlicht, andere verschlagworten leider nicht eindeutig und von denen die eine Kategorie/Schlagwort oder ähnliches benutzen kann ich leider auch nicht alle benutzen. Die gewählten Blogsysteme geben z.T. kein eigenes Feed für Labels (bei *.blogspot.com-Domains) aus bzw. sind mangelhaft an Feedburner weitergeleitet. Da ich aber explizit nur die Bücherartikel sammeln wollte und nicht die Gesamtfeeds bleiben nur zwölf&nbsp;übrig.</p> LiomanTue, 22 Nov 2011 13:00:00 +0100tag:lioman.de,2011-11-22:/2011/11/52-buecher-feedsammlung/Kunst und Kultur52 BücherFeedOBMLRSSSetDeutscher Linux-Kanalhttps://lioman.de/2009/10/deutscher-linux-kanal/<p><strong>*Ich habe `hier &lt;/spamfreie-blogsuche-newsaggregator-feedaufbereiter-kommentarverknupfer-trafficgenerator&gt;`__ schon den Dienst Twingly beschrieben und angepriesen. Bisher haben einfach noch Kanäle gefehlt, damit Twingly wirklich nutzbar ist.Nun gibt es einen deutschen Linux&nbsp;Kanal.*</strong></p> <p>Twingly hat nun Nutzer gebeten Kanäle vorzuschlagen und einzurichten. Dem bin ich nachgekommen und nun ist ein deutscher Kanal zum Thema Linux erreichbar unter <a class="reference external" href="http://web.archive.org/web/20110617005550/http://www.twingly.com:80/linux-de">http://www.twingly.com/linux-de</a> . Ich habe <strong>20</strong> Einladungen für Testwillige. Wer eine Einladung möchte schreibt das am Besten als Kommentar zu diesem Artikel. Mit dem zugeschickten Code könnt ihr dann alle vorhandenen Kanäle testen. Willkommen sind auch Vorschläge zu weitere Quellen (Rss-Feeds) für den&nbsp;Kanal.</p> LiomanThu, 15 Oct 2009 13:03:00 +0200tag:lioman.de,2009-10-15:/2009/10/deutscher-linux-kanal/DigitalInternetLinuxRSStwingly