Aufgabe Nr. 10: Einen RSS-Feed anbieten

Update 2013-12-26: blog.bttr-software.de in www.robertriebisch.de geändert.


Bereits am 23. Juli hatte ich angefangen, mich mit diesem Thema zu beschäftigen. Noch einiger Recherche zu den Grundlagen und viel "Probiererei" in den letzten Tagen kann ich nun endlich ein Ergebnis präsentieren.

Dem KISS-Prinzip folgend, habe ich auf jeglichen Firlefanz verzichtet und den Quellcode sehr einfach aufgebaut.

Zunächst muss die Datenbanktabelle miniblog_config mittels phpMyAdmin um eine neue Zeile "miniblog-baseurl", "http://www.robertriebisch.de/", "Base URL to your blog, e.g., http://blog.yourdomain.tld/" ergänzt werden.
Da es sich um eine recht wichtige Einstellung handelt, möchte ich sie an dritter Stelle angezeigt bekommen. Ich korrigiere daher wieder die Reihenfolge mit dem SQL-Befehl ALTER TABLE miniblog_config ORDER BY FIELD(config_name, 'miniblog-title', 'miniblog-description', 'miniblog-baseurl', 'posts-per-page', 'date-format', 'password', 'miniblog-filename', 'use-modrewrite').

Im Wurzelverzeichnis erstelle ich eine neue Datei feed.php mit folgendem Inhalt:

<?php
define('IN_BLOG', TRUE);
define('PATH', '');
include('includes/config.php');
include('includes/functions.php');

$link = mb_connect($sqlconfig);
unset($sqlconfig);

if (!$link) {
die("Could not connect to MySQL database, check the settings in config.php");
}

$config = mb_config();

$baseurl = rtrim($config['miniblog-baseurl'], '/') . '/';

$output = "<?xml version="1.0" encoding="iso-8859-1"?>n";
$output .= "<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">n";
$output .= " <channel>n";
$output .= ' <description>' . $config['miniblog-description'] . "</description>n";
$output .= ' <link>' . $baseurl . "</link>n";
$output .= ' <title>' . $config['miniblog-title'] . "</title>n";

if ((int)$config['use-modrewrite'] === 0) {
$baseurl .= $config['miniblog-filename'] . '?post=';
}

$result = mysql_query('SELECT * FROM `miniblog` WHERE `published` = 1 ORDER BY `date` DESC LIMIT 20') or die ("Could not execute query");

while ($row = mysql_fetch_array($result)) {
extract($row);

$output .= " <item>n";
$output .= ' <title>' . htmlspecialchars(stripslashes($post_title)) . "</title>n";
$output .= ' <link>' . $baseurl . $post_slug . "</link>n";
$output .= ' <pubDate>' . gmdate("r", $date) . "</pubDate>n";
$output .= ' <content:encoded><![CDATA[' . stripslashes($post_content) . "]]></content:encoded>n";
$output .= " </item>n";
}

$output .= " </channel>n";
$output .= "</rss>n";

header("Content-Type: text/xml; charset=iso-8859-1");
echo $output;
?>

Damit kann der Feed über http://www.robertriebisch.de/feed.php bereits angezeigt werden. Was jetzt noch fehlt, ist, dass der Webbrowser beim Aufrufen der Seite http://www.robertriebisch.de/ dem Besucher über das Feed-Symbol optisch signalisiert, dass ein Feed angeboten wird.

Dazu füge ich in der Datei index.php unter der Zeile <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /> eine neue Zeile <link rel="alternate" type="application/rss+xml" title="<?=$config['miniblog-title']?>" href="feed.php" /> ein.

Das war's bereits!

Ich möchte allerdings darauf hinweisen, dass ihr den hier vorgestellten Quellcode auf eigene Gefahr benutzt. Verbesserungsvorschläge sind mir jederzeit herzlich willkommen.

Abschließend möchte ich noch ein paar Links zu Webseiten auflisten, die mir bei dieser Aufgabenstellung von großem Nutzen waren:

  1. RSS
  2. Create an RSS feed with PHP
  3. PHP and RSS: Getting it together
  4. Tutorial: RSS Feed erstellen
  5. Why RSS Content Module is Popular - Including HTML Contents - RSS
  6. RSS Best Practices Profile
  7. Feed Validator for Atom and RSS