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: