yubb.de-Logo
Tutorials
yubb@yubb
yubbService
Inside yubb

Nachrichtenbereitstellung mit RSS



1. Einleitung
2. Aufbau einer RSS-Datei
3. Anbieten von RSS
3.1. XML per hand
3.2. Skripte
3.3. TM::Feed
4. FeedReader
5. Schlußkapitel

1. Einleitung

RSS ist eine Abkürzung und hat - je nach Version - verschiedene Langformen. "Rich Site Summary" (für 0.91), "RDF Site Summary" (für 1.0) sowie "Really Simple Syndication" (für 2.0) sind die gängigsten. RSS ist ein Anwendungsfall für XML, es ist somit plattformunabhängig und die Möglichkeiten zum Verarbeiten sind dadurch relativ einfach. RSS ersetzt den Newsletter mit seinen Nachteilen vollständig.

Im Rahmen des Tutorials zeige ich euch, wie RSS aufgebaut ist, wie man RSS erstellt und wie man RSS lesen kann.

2. Aufbau einer RSS-Datei

Ich gehe hier speziell von der Version 2.0 aus:

Code:

<?xml version="1.0" encoding="iso-8859-1" ?>
<rss version="2.0">
<channel>
<title>titel</title>
...

<item>
<title>Special zu RSS</title>
...
</item>
<item>
...
</item>
...
</channel>
</rss>

Der grundsätzliche Aufbau ist wie folgt: zuerst gibt es einen Hinweis, daß es sich um eine XML-Datei handelt, und dann folgt auch schon das <rss>-Tag. In diesem steckt der <channel>-Tag. Theoretisch sind mehrere Channels in einer RSS möglich, allerdings ist dies vorerst nur theoretischer Natur. Innerhalb eines <channel>-Tags gibt es eine Menge Metainformationen zu Beginn, die die RSS-Datei an sich beschreibt. Dann gibt es eine Reihe von <item>-Tags, in dem die einzelnen Nachrichten zu finden sind.
Code:

<rss><channel>

<title>title</title>
<description>beschreibung</description>
<dc:creator>Autor</dc:creator>
<lastBuildDate>Datum</lastBuildDate>
<link>von wo stammt die RSS</link>

<item>...</item>
</channel></rss>

Die wichtigsten Informationen des Kopfbereiches sind die ersten 5. Dazu zählt der Titel, eine Kurzbeschreibung, der Autor bzw. der Verantwortliche, dem Datum der letzten Aktualisierung und die URL, von der die RSS stammt.
Code:

<image>
<url>Bild-URL</url>
<title>title</title>
<description>beschreibung</description>
</image>

Alternativ dazu besteht auch die Möglichkeit, ein Bild in Form eines kleinen Banners anzugeben. Dazu wird ein <image>-Tag eingefügt, welches dann auch <title> und <description> enthält. Mit <url> wird die zugehörige URL angegeben.
Code:

<item>
<pubDate>Fri, 23 Apr 2004 18:02:34 +0200</pubDate>
<title>Yeah!</title>
<link>
http://blasuelz.de?id=117
</link>
<description>
<h1>Super</h1><p>Alles Super, alles Gut</p>
</description>
<comments> //default = <link>
http://blasuelz.de/komm.php?id=117
</comments>
<slash:comments>5</slash:comments>
<guid>117</guid>
</item>

Ein einzelner Beitrag sieht wie folgt aus: Umrandet von dem <item>-Tag gibt es dann folgende Aussagen zur jeweiligen Nachricht: VÖ-Datum, Titel/Schlagzeile, Quellink, Beschreibung/Inhalt, einen Link zu den Kommentaren. Optional kann man weitere Angaben machen: die Anzahl der Kommentare sowie eine ID. Anstelle der ID kann auch der <link>-Tag übernommen werden, da dieser im Normalfall auch eindeutig ist.
Hervorheben möchte ich an der Stelle TLD - Title Link Description. Diese drei Elemente bilden die Hauptessenz von RSS und stellen den eigentlichen Beitrag dar.

3. Anbieten von RSS

3.1. XML per hand

Man benötigt lediglich einen Editor, bzw. einen besseren mit XML-Unterstützung (Syntax Highlighting, automatisches Einrücken), und schreibt per Hand. Dies ist in der Praxis nicht wirklich anwendbar, denn Aufwand und Nutzen stehen in keinem Verhältnis, insbesondere wenn täglich mehrere Nachrichten erstellt werden.

3.2. Skripte

Solche Skripte können z.B. in PHP geschrieben sein, heruntergebrochen ist es nichts anderes als eine Reihe von echo-Befehlen.
Code:

$query = "SELECT...
ORDER BY date DESC LIMIT 0,10";
...
echo "<?xml version=\"1.0\" ...?><rss><channel>";
...
echo "<title>$titlerss</title>"; ...
for (....)
{
echo "<item>";
echo "<title>$title[$i]</title>"; ...
echo "</item>";
}
echo "</channel></rss>";

Besonderen Augenmerk möchte ich auf die SELECT-Klausel weisen: diese sollte stets einen ORDER-BY-Abschnitt enthalten, der abwärts nach einem Datum sortiert. Damit ist sichergestellt, daß die aktuellste Schlagzeile oben stehen bleibt. Theoretisch könnte man auch nach dem Primärschlüssel gehen, wenn er automatisch vergeben wird.
Da RSS nicht beliebig groß sein kann und sollte (Traffic beachten!), muß man die Anzahl der Treffer beschränken. Entweder macht man dies mit einer zahlenmäßigen Beschränkung wie im Beispiel (hier 10), oder man schränkt es übers Datum ein (z.B. alle Beiträge aus der letzten Woche (WHERE datum + INTERVAL 1 WEEK > now() )).

3.3. TM::Feed

Es gibt eine Reihe von Klassen, die sich mit der Vereinfachung von RSS beschäftigen. Ich stelle hier die Klasse von Thiemo Mättig für PHP vor. Sie unterstützt alle gängigen RSS-Formate, die Version wird lediglich als Parameter bei der Ausgabe mit angegeben. Bei der Anwendung der Klasse muß man sich um die Spezifikation von RSS keine Sorgen machen, man muß lediglich alle Schrauben richtig setzen. Einige Parameter sind derzeit unbelegt und können für weitere Erweiterungen später eingebunden werden. Die Benutzung solcher Parameter hat derzeit keinen Einfluß.
Code:

$r = new RSS( //Konstruktor
"iso-8859-1", // encoding=
"http://www.stura.htw-dresden.de/",
//Standardlink -> wichtig, wenn anderer Server
"Studentenrat der HTW", //<title>
"Wir sind die Vertretung der HTW-Studis", //<description>
"$SERVER_NAME/logo.png", //<image><url>
);

Zuerst legt man ein Objekt der Klasse RSS an, dies machen wir, in dem wir den Konstruktor aufrufen. Als Parameter sind hier der dritte, vierte und evtl. der fünfte wichtig. Der iso-8859-1 gilt als default-Wert, ebenso wird die aktuelle Homepage automatisch ermittelt.

Code:

$r->addItem (
$id, //<guid>
$title[$id], //<title>
"$SERVER_NAME/?i=$id", //<link>
$text[$id], //<description>
"", $datum[$id], //<pubDate>
"",
"$SERVER_NAME/?i=$id", //<comments>
$anzahl, //<slash:comments>
"$SERVER_NAME/rss2.php?i=$id"
//<wfw:commentRSS>
);


Mit der dritten Funktion fügen wir die einzelnen Beiträge zu, üblicherweise in einer Schleife. <guid>, <title>, <link>, <description> und das <pubDate> sollten selbsterklärend sein, bei <comments> kommt die URL zum Hinzufügen von Kommentaren dazu, welche Standardgemäß dem <link>-Wert entspricht. Die Anzahl der Kommentare kann man mit der folgenden Zahl angeben, sowie ein Verweis für eine RSS-Datei, in der die Kommentare stehen.

Code:

$r->outputRSS("2.0");
//Ausgabeformat: default: 2.0
//2.0, 0.91, 0.92, 0.93, Atom, 3.0, ESF
//Tip: als Parameter anbieten


Die letzte Funktion ist die Ausgabefunktion. Diese besitzt einen Parameter, in der die RSS-Version angegeben werden kann. Da verschiedene Formate möglich sind, empfielt es sich, dies als Parameter durchzuschleifen, so kann man jedem User den Feed anbieten, den sein Newsprogramm lesen kann, und an der Stelle wird sicher auch der Nutzen dieser Klasse deutlich: sie abstrahiert von den einzelnen Versionen.

Die Klasse ist von Thiemo Mättig und kann von maettig.com/code/php/Feed.zip heruntergeladen. Für die private Nutzung ist das Skript frei, bei kommerzieller muß es mit dem Autor abgestimmt werden.

4. FeedReader

Es gibt bereits einige Programme, die Feeds darstellen können, eins davon ist FeedReader. Es ist ein Programm für Windows in englischer Sprache, was unter der GPL-Lizenz steht.
Im Großen und Ganzen ähneln sich die Programme: sie sind mit drei Fenstern ausgestattet. Im ersten sieht man die abonnierten Feeds, klickt man auf einen, so erscheint im zweiten eine Liste der Überschriften, und wählt man daraus wieder eine aus, so gibt es im dritten dann den Inhalt zu sehen.

Bild, URL: http://www.yubb.de/demos/special_5.jpg
// Feedreader in Aktion

Seine Vorteile sind eine einfache Handhabung, eine Suchfunktion, eine Browserintegration sowie ein integrierter HTTP-Server für die Darstellung der Inhalte. Des weiteren kann er ungelesene Beiträge hervorheben. Aber dieses Leseprogramm hat auch gewisse Schwachstellen: er liest das <pubDate> nicht aus, sondern stellt die Systemzeit beim Abruf dar. Hat ein Autor einen Bericht korrigiert (weil z.B. Rechtschreibfehler noch enthalten waren), so wird dieser nicht aktualisiert, sondern als neuer dargestellt. Offiziell kann er mit der Version 2.0 noch nichts anfangen, hat aber in der Regel auch keine Probleme damit. Des weiteren sind einzelne Beiträge nicht löschbar (alle oder keiner) und in Bezug auf den integrierten Browser fehlen mir Navigationstasten.

Zu den wichtigsten Einstellmöglichkeiten gehört der Aktualisierungsintervall, d.h. man gibt die Zeit an, wie oft er eine Anfrage auf den Server startet.

Insgesamt aber ein guter einfacher Reader für den Einstieg, und vor allen kostenlos. Zu finden unter feedreader.com


5. Schlußkapitel

RSS hat sich bereits auf vielen großen Seiten (heise, spiegel, tagesschau, ...) durchgesetzt und täglich kommen weitere Seiten dazu. Die meisten größeren Verlage nutzen RSS, um Überschriften und Kurzbeschreibungen zu versenden, damit der Leser einen Überblick erhält, was lesenswert ist, damit man danach auf die Seite geht und den vollständigen Beitrag dazu lesen kann. Ebenso gibt es viele private Seiten (wie z.B. die von yubb.de oder auch meine eigene), die RSS anbieten.

Der Aufwand ist relativ gering im Vergleich zum Nutzen. Denn man muß einmalig ein Skript schreiben - entweder direkt oder mit einer Klasse - und dann braucht man sich um das RSS nicht weiter mehr kümmern.

Der Beitrag ist von René Pönitz.


Geschrieben von René am 18.06.2004 (15619x gelesen)
weiterempfehlen weiterempfehlen   Druckversion Druckversion   kommentieren kommentieren

sehr schöner und vor allen dingen lesenswerter Artikel!
Geschrieben von darealplaya