Workshop: Headlinefeeds mit RSS

20.11.2003 von Dieter Mayer
Wie lockt man User auf seine Site? Entweder mit interessanten News und Inhalten oder mit Links von anderen Websites. Für beide Einsatzzwecke ist RDF/RSS eine beachtenswerte Variante, dieser Artikel zeigt, wie es geht.

Ziel jedes Site-Betreibers ist es, dass User auf seine Webpräsenz aufmerksam werden und sie ansteuern. Um das zu erreichen, sind zum einen interessante Inhalte und zum anderen eine große Verbreitung erforderlich. Letzteres erreichen Print-Medien beispielsweise dadurch, dass sie an möglichst vielen Kiosken ausliegen und sich so einer möglichst breiten Laufkundschaft präsentieren. Ein Website-Betreiber kann auf dieses Mittel nicht zurückgreifen, aber auf ein ähnlich gelagertes Phänomen hoffen: darauf, dass andere Webseiten auf seine Site verlinken. Dazu muss allerdings der andere Betreiber regelmäßig überprüfen, ob neue interessante Berichte online stehen, und diese dann händisch verlinken. Also insgesamt eher ein Zufallsprodukt.

Hilfreich wäre da ein Automatismus, der dem anderen Webmaster die Arbeit vereinfacht oder am besten komplett abnimmt. Mittels RDF ("Resource Description Framework") und RSS ("RDF Site Summary" oft auch "Really Simple Syndication") ist das nun möglich. Man stellt quasi eine Beschreibungsdatei seiner Inhalte im XML-Format online und andere Webseiten können diese dann einbinden.

Insgesamt handelt es sich dabei um eine klassische Win-Win-Situation. Der Inhalte-Anbieter lockt neue Laufkundschaft auf seine Site und der Inhalte-Abnehmer wertet seine Site auf, indem er (meist themenspezifische) Inhalte verlinkt.

RSS/RDF: Was ist das?

RSS - ursprünglich von Netscape erfunden - ist ein spezialisiertes XML-Format, das per Definition dem Verlinken beispielsweise von News, Artikeln, Jobangeboten oder auch Terminen dient. Dabei werden in der Regel Überschriften, kurze Anrisstexte und URLs vermittelt (syndiziert). Diese Textpakete beziehungsweise RSS-Dateien lassen sich mit nur wenig Programmieraufwand in andere Webseiten integrieren.

Aber auch der Webnutzer kann mittels spezieller RSS-Newsreader direkt auf diese Daten zugreifen und sie lokal anzeigen. Ein solcher Reader ist beispielsweise die Freeware Feedreader 2.5. Wer die komplette Meldung lesen möchte, klickt auf den entsprechenden Link und landet direkt auf der Site des Verfassers.

Im Internet finden sich Tausende unterschiedlicher Quellen (Channels), aus denen sich ein Site-Betreiber oder Webnutzer die interessantesten herauspicken kann. Diese Channels sind dabei im Wesentlichen "nur" einzelne RSS-Dateien, die von den jeweiligen Channel-Betreibern erzeugt und auf einem Webserver zum Download bereitgestellt werden.

Bekanntmachung

Die einzige Voraussetzung, um der Allgemeinheit einen Channel zugänglich machen zu können, ist das Vorhandensein einer Website, von der aus die betreffende RSS-Datei geladen werden kann. Wenn Sie Ihren Channel nicht oft ändern oder Ihre Website keine dynamische Seitengenerierung erlaubt, können Sie die Datei auch zu Hause mit einem Editor erstellen und danach per FTP auf den Webserver transferieren.

Komfortabler und professioneller ist die automatische Generierung mit einer Script-Sprache wie PHP , CFML, ASP, PERL oder einem Content-Management-System mit entsprechender Funktion sowie die Einbindung einer Datenbank. Hauptsache, die erzeugte Datei hält sich an die RSS-Spezifikationen, die wir im Folgenden genauer beschreiben.

Damit Ihr Content überhaupt gefunden werden kann, ist zudem die Eintragung Ihres Channels bei einem entsprechenden Channel-Verzeichnis (vergleichbar mit einer Suchmaschine, einem Webkatalog oder einfach nur einer Link-Liste) erforderlich. In diesen Verzeichnissen suchen interessierte User nach relevanten Informationskanälen und abonnieren diese bei Bedarf. In regelmäßigen, vom User festgelegten Zeitperioden werden die Angebote dann vom Client-Programm abgefragt und aktualisiert.

Viele Websites bieten auch direkt einen Link zur RSS-Datei an. Erkennbar ist dies meist an einem kleinen orange-farbenen Grafiksymbol, das den direkten Einstieg erlaubt.

Formatdefinition RSS 2.0

Ob Sie nun selbst RSS-Dateien erstellen und verteilen oder fertige Informationskanäle konsumieren möchten, auf jeden Fall ist die Kenntnis des zu Grunde liegenden Formats hilfreich.

Seit seinem Start in der Version 0.9 wurde die RSS-Definition in zwei getrennten Linien von unabhängigen Teams weiterentwickelt, wobei unglücklicherweise beide Spezifikationen unter dem Titel RSS fungieren. So ist die letzte Version 1.0 von der "RSS-DEV Working Group" leider nicht vollständig kompatibel zur hier besprochenen, von UserLand definierten aktuellen Version 2.0. Letztere hat sich mittlerweile zum Quasi-Standard gemausert und sollte als Basis verwendet werden. Eine RSS-2.0-Datei ist, wie das Listing zeigt, relativ simpel aufgebaut.

<?xml version="1.0" ?>
<rss version="2.0">
<channel>
<title>Demosite-Titel</TITLE>


<link>http://www.demosite.de</a>
<description>Interessante News direkt vom Demochannel</description>

<image>
<title>Demosite-Bildbeschreibung</TITLE>


<url>http://www.demosite.de/logo.gif</url>
<link>http://www.demosite.de</a>
</image>

<item>
<title>Kurzmeldung 01</TITLE>


<link>http://www.demosite.de/pub/artikel01.html</a>
<description>Hier steht der <b>Anrisstext</b>, um <i>Appetit</i> auf den 1. Artikel zu machen...</description>
</item>

<item>
<title>Kurzmeldung 02</TITLE>


<link>http://www.demosite.de/pub/artikel02.html</a>
<description><img src="http://www.demosite.de/images/intro.gif" width="45" height="53" border="0" align="right" hspace="2" vspace="2" alt="Ein Bild, genannt Intro.gif">Hier steht der <b>Anrisstext</b> mit Grafik, um <i>Appetit</i> auf den 2. Artikel zu machen...</description>
</item>
</channel>
</rss>

RSS-Elemente

Eine RSS-Datei ist im Wesentlichen ein Container, der eine fast beliebige Zahl von Dateneinheiten transportiert. Aus Gründen der Rückwärtskompatibilität sollten Sie allerdings bestimmte Vorgaben bezüglich der Länge oder der Anzahl von Informationen einhalten.

Wie Sie dem Listing entnehmen können, besteht ein Channel aus dem XML-Header (<?xml...>), dem Root-Element (<rss...>) und dem eigentlichen Inhaltsbereich (<channel...>).

Dieser wiederum untergliedert sich in einen Bildbereich (<image...>) und die einzelnen Informationshäppchen (<item...>), die die eigentlichen Artikelinformationen transportieren. Manche dieser Bereiche und Einträge sind optional, andere hingegen unverzichtbar.

Wichtig! XML ist im Gegensatz zu HTML außerordentlich pingelig. Sie müssen deshalb eine vollständige Syntax einhalten. Zu jedem öffnenden Element muss zwingend auch ein schließendes existieren. Wer Zweifel hat, ob seine RSS-Datei dem Standard entspricht, findet hier einen Syntax-Checker.

<?xml version="1.0" ?>
<rss version="2.0">

Zu einer XML-Datei gehört zwar nicht zwingend eine XML-Definition, diese sollte aber der Vollständigkeit halber als erste Zeile der Datei enthalten sein. Wichtig ist hingegen die Kennung der zu Grunde liegenden RSS-Version, in diesem Fall 2.0.

Channel-Tag

<channel>
<title>Demosite-Titel</TITLE>


<link>http://www.demosite.de</a>
<description>Interessante News direkt vom Demochannel</description>

Der Channel, also der Container, verfügt über Informationen, die ihn selbst betreffen: Name, Quelle und Beschreibung. Leseprogramme werten diese Daten in der Regel aus und ordnen einzelne Meldungen damit einer Quelle zu.

Image-Tag

<image>
<title>Demosite-Bildbeschreibung</TITLE>


<url>http://www.demosite.de/logo.gif</url>
<link>http://www.demosite.de</a>
</image>

Der Image-Bereich ist optional: Falls er genutzt wird, finden sich dort Daten, mit denen sich beim Empfänger ein den Channel beschreibendes Bild einbinden lässt. Der <title>-Text dient dabei als Quelle für das <ALT>-Tag des Bildes.

Item-Tag

<item>
<title>Kurzmeldung 02</TITLE>


<link>http://www.demosite.de/pub/artikel02.html</a>
<description><img src="http://www.demosite.de/images/intro.gif" width="45" height="53" border="0" align="right" hspace="2" vspace="2" alt="Ein Bild, genannt Intro.gif">Hier steht der <b>Anrisstext</b> mit Grafik, um <i>Appetit</i> auf den 2. Artikel zu machen...</description>
</item>

Der <item>-Bereich transportiert den eigentlichen Content. Zwar erlaubt RSS-Version 2.0 beliebig viele Item-Elemente pro Channel, um aber die Rückwärtskompatibilität zu gewährleisten, sollten Sie nicht mehr als 15 Bereiche dieses Typs verwenden.

Ähnlich verhält es sich mit den einzelnen Einträgen eines Items: Obwohl RSS 2.0 die Länge der Inhalte nicht (mehr) näher spezifiziert, gelten doch bestimmte Grenzen, die man - sofern nicht anders erforderlich - aus Kompatibilitätsaspekten zur immer noch genutzten Version 0.91 einhalten sollte.

Sofern Sie keinen Wert auf eine Abwärtskompatibilität legen, sind Sie nicht auf die Einhaltung der Längen fixiert - in diesem Fall dürfen Sie auch HTML-Code in <title> oder <description> verwenden. Die Nutzung von HTML wird jedoch kontrovers diskutiert, da es durchaus Anwendungen gibt, bei denen sich HTML störend auswirken würde (beispielsweise Applikationen, die Channel-Dateien indexieren).

Offenherzig

Neben den grundlegenden Tags und Einträgen, die für eine korrekte Funktion erforderlich sind, lässt RSS 2.0 noch eine Reihe weiterer Angaben zu, die hauptsächlich beschreibender Natur sind. Betrachten Sie dazu die folgenden Listings, die um viele Elemente bereichert wurden:

<channel>
<title>Demosite-Titel</TITLE>


<link>http://www.demosite.de</a>
<description>Interessante News direkt vom Demochannel</description>

<language>de-de</language>
<copyright>Copyright 2003 Demosite.de</copyright>
<managingEditor>redaktion@demosite.de</managingEditor>
<webMaster>webmaster@demosite.de</webMaster>
<pubDate>Fri, 20 Jun 2003 11:56:02 GMT</pubDate>
<LastBuildDate>Fri, 20 Jun 2003 11:56:02 GMT</LastBuildDate>
<category>MCSE</category>
<generator>BetaContent 0.9</generator>
<docs>http://backend.userland.com/rss</docs>
<ttl>120</ttl>

Da Sie nicht wissen, welche Sprachen der Leser der RSS-Datei verarbeiten kann, empfiehlt es sich immer, die verwendete Sprachkodierung anzugeben (<language>), in diesem Fall "deutsch". Im Zweifelsfall kann der Ziel-Client daraufhin entscheiden, ob er die Informationen überhaupt darstellen kann (etwa, wenn der Interessent im asiatischen Sprachraum sitzt).

Die Copyright-Information, die E-Mail-Adresse des Bearbeiters sowie die E-Mail des Webmasters der Herkunftssite sind eher schmückendes Beiwerk, während das erstmalige Erstellungsdatum (<PubDate>) und die Zeit der letzten Änderung (<LastBuildDate>) durchaus sehr nützliche Informationen für ein Anzeigeprogramm sein können.

Zur Unterstützung des Empfängers lässt sich zusätzlich eine Channel-Kategorie angeben. Die dortigen Einträge sind jedoch nicht standardisiert, der Nutzen dieses Tags ist also fraglich. Wenn die RSS-Datei mit einem kommerziellen Generatorprogramm erstellt wurde, ist meist unter <generator> ein entsprechender Vermerk zu finden, der jedoch für Reader nicht relevant ist.

Der eigentlich unnötige Bereich <docs> enthält einen Link auf die Beschreibung des verwendeten Formats, falls sich der User über diese Spezifikation informieren möchte. Interessant hingegen ist <ttl>: Der dort definierte Wert bestimmt die Zeit in Minuten, nach der ein Leseprogramm einen Refresh durchführen sollte. Allerdings verwenden nur wenige Reader diese Information, die meisten laden die RSS-Dateien nach einer vom Benutzer einstellbaren Zeit, die für alle abonnierten Channels gilt.

Erweiterungen zu Image

<image>
<title>Demosite-Bildbeschreibung</TITLE>


<url>http://www.demosite.de/logo.gif</url>
<link>http://www.demosite.de</a>

<width>88</width>
<height>31</height>
</image>

Die maximale Bildgröße einer RSS-Grafik beträgt 144 x 400 Pixel. Standardmäßig sollte ein Bild jedoch in den Maßen 88 x 31 Bildpunkten vorliegen. Damit sich das Client-Programm rechtzeitig auf die Größe einstellen kann, können die Maße übermittelt werden.

Eingabefelder

<textinput>
<title>Suche in Demosite.de</TITLE>


<description>Suche in unserem Katalog...</description>
<name>suchwort</name>
<link>http://www.demosite.de/suche.php</a>
</textinput>

Ein besonderes, wenn auch nur selten verwendetes Feature ist <textinput>. Dahinter steht der Grundgedanke, dass ein entsprechend ausgelegter Client ein Texteingabefeld mit dem erläuternden Text <title> präsentiert und die Suchanfrage als Variable <name> per GET an die in <link> definierte Website weiterreicht. Für das obige Beispiel würde demnach folgende Such-URL übermittelt: "http://www.demosite.de/suche.php?suchwort=...".

Multimedia

<item>
<title>Kurzmeldung 01</TITLE>


<link>http://www.demosite.de/pub/artikel01.html</a>
<description>Hier steht der <b>Anrisstext</b>, um <i>Appetit</i> auf den 1. Artikel zu machen...</description>

<author>sebastian@demosite.de</author>
<category>Politik</category>
<enclosure url="http://www.demosite.de/mp3/kanzlerrede.mp3" length="234536" type="audio/mpeg" />
<pubDate>Sat, 21 Jun 2003 00:00:01 GMT</pubDate>
</item>

Jedes einzelne <item>-Element darf mit einer Kategorisierung, einer Information zum Urheber und einem Zeitstempel versehen werden. Eine Besonderheit ist <enclosure>, das nur selten genutzt wird und auch nicht intuitiv verständlich ist.

Hierbei handelt es sich um einen Bereich, der aus insgesamt drei Teilen besteht: Zuerst findet sich ein URL auf eine beliebige Datei, gefolgt von der Dateigröße in Byte. Das dritte Teilstück gibt den MIME-Typ der verlinkten Datei an, im obigen Beispiel eine Audio-Datei.

Doch wie lässt sich so ein <enclosure> nutzen? Abhängig vom Client-Programm wäre es beispielsweise denkbar, dass nach dem Laden der Channel-Datei und deren Auswertung ein Hintergrundprozess startet, der die im Link beschriebene Datei - vielleicht ein Musikstück, eine größere Textdatei oder auch ein Video - im Hintergrund lädt und diese entweder gleich lokal abspielt oder sie abhängig vom Typ in definierte Verzeichnisse einsortiert.

Webintegration

Die Inhalte von RSS-Dateien lassen sich natürlich auch in eigene Webseiten einbauen. Erforderlich ist dazu lediglich eine geeignete Script-Sprache, die auf dem Webserver läuft und das Parsen von XML-Dateien gestattet. Ob PHP, Perl, ColdFusion, ASP, Python oder andere - zu fast allen Script-Sprachen finden sich im Internet entsprechende Codebeispiele und Anleitungen, wie dieses Unterfangen umgesetzt werden kann.

Im Grunde geht es dabei nur darum, eine XML-Datei mit bekannter Struktur in ihre Bestandteile zu zerlegen und entweder gleich in die Webseite einzubinden oder die Daten in Arrays oder Datenbanken abzulegen, von wo aus sie dann bei Bedarf publiziert werden. Gerade für die sehr weit verbreitete Web-Script-Sprache PHP existieren viele entsprechende Anleitungen und Codebeispiele. Ein paar davon finden Sie unter den Links am Artikelende.

Ausblick

RSS 2.0 hat laut ihren Entwicklern seinen Höhepunkt erreicht. Von kleineren, noch angekündigten Nachbesserungen abgesehen wird es keine zusätzlichen Erweiterungen mehr geben - dies ist auch gar nicht nötig, da sich RSS durch die Verwendung von XML-Namespaces jederzeit an spezielle Anforderungen anpassen lässt.

Somit sind RSS-2.0-Anwender in der glücklichen Lage, mit einem etablierten und ausgereiften XML-Standard Inhalte zu syndizieren oder einzubinden, um das Web um neue Themen zu bereichern oder die eigene Site zu einem interessanten Anlaufpunkt zu machen. Mit entsprechenden intelligenten Agenten, die sich von verschiedenen Websites RSS-Feeds zusammensuchen, wird es möglich sein, sich seine individuelle Tageszeitung komplett zusammenzustellen - eingeteilt in Kategorien wie Sport, Politik oder Vermischtes.

Auch wir bieten unsere News und Secunia-Reports als RSS-Feed an und werden dieses Angebot auch noch weiter ausbauen, damit Sie sich ganz flexibel Ihren eigenen tecCHANNEL zusammenstellen können. (mha)

Links zu RSS

RSS-Reader:

FeedReader 2.5 für Windows

Liste mit weiteren Readern für Mac, Linux und Windows

Einige RSS-Quellen:

tecChannel.de: Alle News des Tages

tecChannel.de: News aus dem Bereich Hardware

tecChannel.de: News aus dem Bereich Software

tecChannel.de: News aus dem Bereich Internet

tecChannel.de: News aus dem Bereich Betriebssysteme

tecChannel.de: News aus dem Bereich Wissenschaft & Technik

tecChannel.de: News aus dem Bereich Netzwerke

tecChannel.de: News aus dem Bereich Branchen-Meldungen

tecChannel.de: News aus dem Bereich Mobile

tecChannel.de: Aktuelle Meldungen über Sicherheits-Lücken

Gizmodo: News über Technik-Gadgets (englisch)

Heise online: News-Kanal der c't.

Slashdot: News for Nerds (englisch)

Informationen zur RSS-Programmierung:

RSS-Parser in PHP: Onyx RSS

XML-Parser in ColdFusion: CFX_XMLParser

Diverse Scripts zum Parsen von RSS: HotScripts