Aufbau des RSS Feeds
Ein RSS Feed ist eine XML-Datei. Also legen wir mal eine XML-Datei an.
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<!-- Head mit allgemeinen Infos zum Feed -->
<item>
<!-- Hier kommt ein Feed Eintrag rein -->
</item>
</channel>
</rss>
Der Feed besteht aus einem "Head" und den Feed Einträgen. Im "Head" stehen allgemeine Informationen zum Feed, wie z.B. Titel oder letztes Erstellungsdatum. Die Codierung in meinem Beispiel ist UTF-8.
Nun füllen wir den "Head" mit ein paar Infos zu unserem Feed.
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Mein erster RSS Feed</title>
<description>Alle Neuigkeiten von Max Mustermann</description>
<language>de</language>
<link>http://www.meine-domain.de</link>
<lastBuildDate>Sat, 2 Mar 2013 16:10:21 GMT</lastBuildDate>
<item>
<!-- Hier kommt ein Feed Eintrag rein -->
</item>
</channel>
</rss>
Nachdem wir den RSS Feed mit allgemeinen Informationen wie Titel, Beschreibung, Sprache, Link zur Webseite und Datum der letzten Erstellung gefüttert haben, werden wir jetzt einen Feed Eintrag manuell anlegen.
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Mein erster RSS Feed</title>
<description>Alle Neuigkeiten von Max Mustermann</description>
<language>de</language>
<link>http://www.meine-domain.de</link>
<lastBuildDate>Sat, 2 Mar 2013 16:10:21 GMT</lastBuildDate>
<item>
<title>Jetzt gibt es auch einen RSS Feed auf meiner Webseite</title>
<description>Um Euch über die Neuigkeiten auf meiner Webseite auf dem Laufenden zu halten, gibt es seit heute einen RSS Feed.</description>
<link>http://www.meine-domain.de/articles/rss-feed-article.php</link>
<pubDate>Sat, 2 Mar 2013 16:13:44 GMT</pubDate>
<guid>http://www.meine-domain.de/articles/rss-feed-article.php</guid>
</item>
</channel>
</rss>
Im Feed Eintrag haben wir wieder einen Titel, eine Beschreibung der Neuigkeit, den Link zur entsprechenden Webseite mit weiteren Informationen und das Datum des Eintrags. Achtung: Die Zeitangabe bezieht sich auf die Zeit in Greenwich - also auf die Weltzeit. Legt man einen Feed Eintrag also beispielsweise um 16 Uhr Mitteleuropäischer Zeit an, so muss im XML-Dokument 15 Uhr stehen.
MySQL Tabelle für den dynamischen RSS Feed vorbereiten
Für folgende Automatisierung der RSS Feed Erstellung sollte man Grundkenntnisse in PHP und MySQL haben. Falls nicht, bitte unter http://reeg.junetz.de/DSP/node1.html weiterlesen. Des Weiteren funktioniert der Prozess nur auf Servern mit installiertem PHP5. Die PHP-Version des Servers kann man meist über den Kundenzugang des Providers einsehen und evtl. einstellen, oder über Ablage einer PHP-Datei auf dem Server. In dieser PHP-Datei wird die Methode phpinfo() aufgerufen. So kann man auf dieser Seite alle Infos über die Einstellungen des Servers erfahren.
Alle Bedingungen von oben sind erfüllt? Gut, dann können wir weitermachen. Wie in der Überschrift dieser Abschnitts schon steht, muss für den Automatisierungsprozess erst eine MySQL-Tabelle (oder wie es korrekt heißt Relation), welche alle Daten zum Feed enthält, erstellt werden. Die Tabelle nennen wir beispielsweise rss. Folgende vier Attribute sind dafür notwendig:
+-----------+-------+---------+------+
| timestamp | title | article | link |
+-----------+-------+---------+------+
Die Tabelle (Relation) können wir nun mit den Daten zu unserem RSS Feed füllen.
+------------+-----------------+------------------------------+--------------------------------+
| timestamp | title | article | link |
+------------+-----------------+------------------------------+--------------------------------+
| 1362240621 | Jetzt gibt es | Um Euch über die Neuigkeiten | http://www.meine-domain.de |
| | auch einen RSS | auf meiner Webseite auf dem | /articles/rss-feed-article.php |
| | Feed auf meiner | Laufenden zu halten, gibt es | |
| | Webseite | seit heute einen RSS Feed. | |
+------------+-----------------+------------------------------+--------------------------------+
Als Timestamp tragen wir gleich die Weltzeit von Greenwich ein, dann brauchen wir später mit PHP nichts mehr umrechnen. Damit ist der MySQL-Teil schon abgehakt und es geht weiter zur Verarbeitung der Daten per PHP.
Den RSS Feed mit PHP erstellen
Um auf die Daten aus der MySQL-Tabelle zugreifen zu können, muss zur Datenbank natürlich als Erstes verbunden werden. Das geht wie folgt.
<?php
$host = DeinHost; // meist ist das localhost
$user = DeinUserName;
$pw = DeinPasswort;
$db = DeineDatenbank;
$connection = mysql_connect($host, $user, $pw) or die ("Datenbankfehler.\n\n");
$db_selected = mysql_select_db($db, $connection);
if (!$db_selected) {
echo 'Datenbankfehler';
}
?>
Diese Zeilen speichern wir in einer PHP-Datei mit dem Namen mysql-connect.php ab. Um die Datenbankverbindung wieder zu schließen erstellen wir eine zweite Datei namens mysql-close.php mit diesem Inhalt:
<?php
mysql_close($connection);
?>
Jetzt geht's an das Erstellen des PHP-Skripts zur Automatisierung.
<?php
// XML-Datei automatisch erstellen
$xml = new DOMDocument('1.0', 'utf-8');
$xml->formatOutput = true;
$rss = $xml->createElement('rss');
$rss->setAttribute('version', '2.0');
$xml->appendChild($rss);
$channel = $xml->createElement('channel');
$rss->appendChild($channel);
// Head des Feeds
$head = $xml->createElement('title', 'Mein erster RSS Feed');
$channel->appendChild($head);
$head = $xml->createElement('description', 'Alle Neuigkeiten von Max Mustermann');
$channel->appendChild($head);
$head = $xml->createElement('language', 'de');
$channel->appendChild($head);
$head = $xml->createElement('link', 'http://www.meine-domain.de');
$channel->appendChild($head);
// Aktuelle Zeit, falls time() in MESZ ist, muss 1 Stunde abgezogen werden
$head = $xml->createElement('lastBuildDate', date("D, j M Y H:i:s ", time() - 3600).' GMT');
$channel->appendChild($head);
// Feed Einträge
include('mysql-connect.php');
$result = mysql_query('SELECT timestamp, title, article, link FROM rss ORDER BY timestamp DESC', $connection);
while ($rssdata = mysql_fetch_array($result))
{
$item = $xml->createElement('item');
$channel->appendChild($item);
$data = $xml->createElement('title', utf8_encode($rssdata["title"]));
$item->appendChild($data);
$data = $xml->createElement('description', utf8_encode($rssdata["article"]));
$item->appendChild($data);
$data = $xml->createElement('link', $rssdata["link"]);
$item->appendChild($data);
$data = $xml->createElement('pubDate', date("D, j M Y H:i:s ", $rssdata["timestamp"]).' GMT');
$item->appendChild($data);
$data = $xml->createElement('guid', $rssdata["link"]);
$item->appendChild($data);
}
include('mysql-close.php');
// Speichere XML Datei
$xml->save('rss/rss_feed.xml');
// Rufe die XML Datei auf
Header('Location: http://www.meine-domain.de/rss/rss_feed.xml');
?>
Die XML-Datei wird mithilfe der von PHP bereitgestellten Klasse DOMDocument erzeugt. Die Dokumentation zu dieser Klasse ist in den Referenzen verlinkt. Dieses PHP-Skript speichern wir nun in der Datei generate-feed.php
Den RSS Feed auf dem Server ablegen
Wie einen die Methode save() im obigen Code schon vermuten lässt, wird der RSS Feed in einem Ordner namens rss auf dem Server gespeichert. Damit der Speichervorgang funktioniert, muss die Berechtigungen für diesen Ordner auf 777 gesetzt werden.
Den RSS Feed in das HTML-Dokument einbinden
Zu guter letzt muss der RSS Feed noch mit der Webseite verknüpft werden. Dazu werden folgende Zeilen in das HTML-Dokument geschrieben. Zuerst vermerken wir das Vorhandensein des RSS Feed im Head-Bereich der Webseite.
...
<head>
...
<link rel="alternate" type="application/rss+xml" href="/generate-feed.php">
...
</head>
...
Weiter verlinken wir den Feed noch im Body-Bereich der Webseite.
...
<body>
...
<a href="/generate-feed.php" title="Website Feed" rel="nofollow, noindex" target="_blank">Mein RSS Feed</a>
...
</body>
...
Da der Feed ja in der Regel redundanten Inhalt der Webseite enthält, muss/sollte der Feed nicht von Suchmaschinen gecrawlt werden. Dazu setzen wir das Attribut rel im a-Tag auf nofollow, noindex. Es sollte aufgefallen sein, dass nicht die XML Datei verlinkt ist, sondern das PHP-Skript, das die Datei erzeugt. Das Skript leitet nach der Erstellung zum frisch generierten RSS Feed weiter.