Dieser Artikel beschreibt, wie man seinen eigenen RSS-feed mittels PHP-Script aus MySQL-Daten generiert.
Du benötigst eine MySQL-Datenbank-Tabelle mit Feldern für
- Titel der Nachrichten
- Inhalt der Nachricht
- URL zur Nachricht
- TIMESTAMP
PHP-Script
Erstelle die Datei rss.php mit dem Inhalt:
<nowiki>
<?php
header("Content-Type: text/xml");
// --------------------- DB-Daten --------------------------
$dbname = ""; // ersetze mit deinen Daten (Datenbank)
$dbuser = ""; // ersetze mit deinen Daten (User)
$dbpass = ""; // ersetze mit deinen Daten (Passwort)
$dbhost = "localhost"; // sollte/kann so belassen werden.
$db = @mysql_connect($dbhost, $dbuser, $dbpass) or
die(mysql_error());
if ($db)
mysql_select_db($dbname, $db);
//------------------- -------------------------------------
// --- eine Funktion um XMLtags zu generieren -----------
function tag($name, $content) {
return "<$name><![CDATA[$content]]></$name>\r\n";
}
// --------------------------------------------------
echo '<?xml version="1.0" encoding="ISO-8859-1" ?>' . "\r\n";
echo "<rss version=\"0.91\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\r\n";
echo "<channel>\r\n";
echo "<title></title>\r\n"; // ergänze mit dem Namen Deines FEEDs
echo "<link></link>\r\n"; // ergänze mit der URL auf Deine Homepage
echo "<description></description>\r\n"; // ergänze mit einer kurzen Inhaltsbeschreibung des FEEDs
echo "<language>de-de</language>\r\n";
echo "<image></image>\r\n\r\n";
$spruch = "SELECT * FROM tablename"; // <- ersetze "tablename" mit deinen Daten
$spruch .= " ORDER BY timestamp DESC LIMIT 15";
$result = mysql_query( $spruch, $db ) or die("<b>GetAktuelles failed</b> : " . mysql_error() . "
" . $spruch);
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$titel = $row['NACHRICHTEN_TITEL']; # erstze mit MySQL-Tabellenfeld für Titel der Nachricht
$text = $row['NACHRICHTEN_TEXT']; # erstze mit MySQL-Tabellenfeld für Inhalt der Nachricht
$link = $row['link']; # erstze mit MySQL-Tabellenfeld für Link auf die Nachricht
$t2 = $row['timestamp'];
//-------------------------------- datum und uhrzeit ------------------------------------------
// hier wird der SQL-Timestamp in UNIX-Zeit umgerechnet....
$stunde = $t2[8] . $t2[9];
$minute = $t2[10] . $t2[11];
$sekunde = $t2[12] . $t2[13];
$jahr = $t2[0] . $t2[1] . $t2[2] . $t2[3];
$monat = $t2[4] . $t2[5];
$tage = $t2[6] . $t2[7];
$timestamp = mktime($stunde, $minute, $sekunde, $monat, $tage, $jahr);
// oder UNIX_TIMESTAMP Funktion (http://dev.mysql.com/doc/refman/4.0/de/datetime.html) verwenden
// (bzw http://dev.mysql.com/doc/refman/4.0/de/date-and-time-functions.html) Sogar auf Deutsch ;)
//
// ..... um hier den UNIX-timestamp ins pubDate-Format umzuschreiben
// $pubtime = strftime("d Y M:%S GMT+01:00", $timestamp); # sollte so aussehen: Fri, 17 Mar 2005 10:16:55 GMT+01:00
$pubtime = date("r", $timestamp); # sollte so aussehen: Fri, 17 Mar 2005 10:16:55 +01:00
// mit 'date' geht man sicher, dass es in das benötigen RFC 2822 Datum formatiert wird ohne von der Sprache (setlocale LC_TIME usw.) beeinfußt zu werden
// -------------------------------------------------------------------------------------------
echo "<item>\r\n";
echo tag("title", $titel);
echo tag("link", $link);
echo tag("description", $text);
echo "<pubDate>";
echo $pubtime; # sollte so aussehen: Fri, 17 Mar 2005 10:16:55 +01:00
echo "</pubDate>\r\n";
echo "</item>\r\n\r\n";
}
echo "</channel>\r\n";
echo "</rss>\r\n";
</nowiki>
verlinken
Damit z. B. Firefox unten rechts schon auf das Vorhandensein eines RSS-Feeds hinweisen kann, sollte man folgenden Code in den Head jeder Seite (bzw. Template) einfügen:
<link rel="alternate" type="application/rss+xml" title="Meine Firma - News" href="http://www.meinedomain.com/pfad/rss.php" />