Frage von Kathi959, 13

Einen öffentlichen RSS Feed filtern nach Einträgen mit Keywords und danach speichern in einen neuen RSS Feed?

Hallo, hat jemand einen Ansatz oder Lösung zu diesem Problem? Ich möchte einen bestehenden FEED ein wenig beschneiden, so dass unwichtige Details entfernt werden. Der gefilterte Feed soll dann in einen neuen Feed gespeichert werden, der wiederum abgerufen werden kann.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Graueumel, 5

Deine Aufgabe kann mit zwei ganz unterschiedlichen Ansätzen gelöst werden:

1.) "Single-User-Lösung"

Wenn es nur darum geht, RSS-Feeds zu filtern und das Ergebnis wo abzulegen, nimm einen RSS-Reader. Ich benutze hierfür Thunderbird, der mir mehrere RSS-Feeds abruft.
In Thunderbird kann man Filter definieren. Solche benutze ich dann um die abgerufenen Feed-Einträge in ein Imap-Konto zu überführen. Auf meinem Mail-Account habe ich dafür einen Ordner angelegt, dann sind sie auch gleich gut aufgeräumt.

2.) "Server-Lösung"

Wenn es darum geht, einen RSS-Feed gefiltert erneut als RSS-Feed zu veröffentlichen, sind mehrere Teilaufgaben erforderlich. Zum einen muss der Ausgangs-Feed abgerufen werden, dazu später. Dann muss er gefiltert werden. Und dann wieder durch einen Server veröffentlicht.

Filterung
Da RSS XML ist erfolgt die Filterung am sinnvollsten mit XSLT. Falls Du noch nicht damit gearbeitet hast, würde ich es sehr empfehlen. Zwar flucht man am Anfang furchtbar viel, weil einen die Denkweisen und Regeln, auf einem XML-Baum unterwegs zu sein als prozeduraler oder objektorientierter Programmierer nicht so leicht von der Hand gehen, doch irgendwann hat man das Gefühl was Nützliches gelernt und seinen Denkhorizont auch in Hinsicht auf andere Domänen erweitert zu haben.

Mit XSLT wird also das XML des Originaldokuments so gefiltert, dass nur noch die, bestimmten Kriterien entsprechenden Einträge ins Zieldokument übernommen werden.

Zum Testen würde ich vorschlagen, erstmal offline zu beginnen. Also RSS downloaden und auf der Kommandozeile mit Hilfe Deiner zu erstellenden XSLT-Transformation das Zieldokument erzeugen, bis es passt.

Veröffentlichen/Abrufen

Wenn Du Zugriff auf einen Webserver hast, wäre der Weg wohl der, mit einem CGI-Script oder mit PHP oder was auch immer, den Request, mit dem Du das gefilterte Dokument abrufen willst, in einem Prozess abzuarbeiten. In diesem Prozess rufst Du das Originaldokument ab (useragent bei Perl, urllib bei Python, ...), lässt es dem XSLT-Prozessor unter Anwendung Deiner oben erstellten Transformation verarbeiten und gibst es unter Angabe des passenden Content-Type (wichtig) aus. Fertig.

Falls Du über keinen Webserver verfügst, kannst Du diese Komponente auch mit Perl (HTTP::Server::Simple) oder Python (SimpleHTTPServer) oder was immer du benutzt, bereitstellen.

Zuletzt

Wenn Du Deinen gefilterten Feed "in-the-wild" veröffentlichst, sparst Du Dir Ärger wenn Du vorher urheberrechtliche Dinge klärst.

Antwort
von arachno1999, 4

Das kann lediglich durch das, was Du rausfiltern möchtest etwas komplizierter werden. Ansonsten URL des Feeds öffnen und einlesen. Zeilenweise ausfiltern und den Rest wieder ausgeben. Der neue RSS-Feed ist dann das Skript, das diese Arbeit erledigt.

In PHP z.B. geht das mit ein paar Zeilen Code. Ich  versuche mal, einfach runterzuschreiben ohne die Syntax gechecked zu haben (gehe davon aus, dass in jeder Zeile ein "item" des feeds steht):

<?php

if(! $handle=fopen("http://adresse_des_feeds.de/feed.rss","r")) {

die("konnte feed nicht öffnen");

}

header('Content-Type: application/rss+xml');

while(!feof($handle)) {

$line=fgets($handle,2048);

if(strpos($line,"suchstring") === false) {

print $line;

}

}

fclose($handle);

?>

Lieder klappt das hier nicht so gut mit den Einrückungen. Aber der Code ist ja übersichtlich.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten