Du verwendest einen Internet Explorer in einer Version kleiner gleich 8. Dieser Browser wird nicht unterstützt. Bitte aktualisiere mindestens auf Version 9.
Patrick Saar - Artikel

Artikel

Patrick Saar

RSS Feeds dynamisch mit PHP und MySQL erstellen

RSS Feeds sind eine gute Möglichkeit die Benutzer einer Webseite über Neuigkeiten auf dem Laufenden zu halten. Im Folgenden möchte ich erklären, wie man einen RSS Feed manuell erstellt. Im Weiteren wird dieser Prozess mithilfe von PHP und MySQL automatisiert. Zum Abschluss zeige ich dann noch, was man beachten muss um den RSS Feed auf dem Server ablegen zu können und wie man ihn in das HTML-Dokument einbindet.

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.

Screenshot RSS Feed

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.

Referenzen

Diese Seite verwendet Cookies um die beste Nutzerfreundlichkeit zu bieten. Falls Du auf der Seite weitersurfst, stimmst Du der Cookie-Nutzung zu.
Details Ok