RSS mit SimpleXML

Wie generiere ich einen RSS Feed? Mit PHP5 und dem SimpleXML Objekt wird dies kinderleicht. Hier zunächst ein kurz zusammen gefasster Codeschnipsel:

header('Content-Type: text/xml');
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-type: text/xml; charset=UTF-8', true);
 
$xmlObject = simplexml_load_string("
	<rss version=\"2.0\">
		<channel>
			<title>Beispiel für einen Newsfeed</title>
			<link>http://www.mm-newmedia.de</link>
			<description>MM Newmedia - Die Agentur für neue Medien</description>
		</channel>
	</rss>
");
 
$itemAry = array(
	'Headline'	=> 'Deine Überschrift',
	'UnixDate'	=> 'Unix Timestamp',
	'Link'		=> 'Link zu Deinem Artikel',
	'Content'	=> 'Dein Text',
	'CatName'	=> 'Ein Kategoriename'
);
foreach ($itemAry as $item) {
	$child = $xmlObject->channel->addChild('item');
	$child->addChild('title', $item['Headline']);
	$child->addChild('pubDate', date(DATE_RFC822, $item['UnixDate']));
	$child->addChild('link', $item['Link']);
	$child->addChild('description', trim($item['Content']));
	$child->addChild('category', $item['CatName']);
}
echo $xmlObject->asXML();

Was macht dieser Code? Das ist ziemlich einfach erklärt. Zunächst werden wichtige Anfangsinformationen per header() gesendet. So wird festgelegt, dass es sich bei den folgenden Daten um eine XML Struktur handelt und diese im UTF-8 Zeichensatz erfolgt.

Direkt danach wird ein Objekt $xmlObject mittels simplexml_load_string() erzeugt. Dieses Objekt enthält bereits alle Elemente, die der Funktion simplexml_load_string() als String übergeben wurden. Man kann die übergebenen Elemente nur innerhalb des Objekts gesondert ansprechen und erweitern.

In unserem Array $itemAry haben wir nun unseren News-Artikel festgehalten. Hier werden Überschrift, Datum, ein direkter Link zum Artikel, der eigentliche Text des Artikels und eine eventuell dazugehörige Kategorie, unter der man den Newsartikel zuordnen kann, festgelegt. Alternativ kann man dieses Array natürlich auch gegen eine Datenbankabfrage ersetzen.

$sql = "
	SELECT
		Headline,
		UNIX_TIMESTAMP(Date) AS UnixDate,
		Link,
		Content,
		CatName
	FROM
		MyNewsTable
";
foreach ($dbo->query($sql) as $row) {
	$child = $xmlObject->channel->addChild('item');
	$child->addChild('title', $row['Headline']);
	$child->addChild('pubDate', date(DATE_RFC822, $row['UnixDate']));
	$child->addChild('link', $row['Link']);
	$child->addChild('description', trim($row['Content']));
	$child->addChild('category', $row['CatName']);
}

Hier wird mittels PHP Data Objects (PDO) die Tabelle MyNewsTable ausgelesen und in einer foreach() Schleife werden die Werte dann wie bereits im ersten Beispiel verarbeitet. Mehr zu PHP Data Objects wird es in einer zukünftig folgenden Reihe geben.

Am Ende unseres ersten Beispiels geben wir dann den wohl formatierten XML String mittels echo und der SimpleXML Methode asXML() aus.

Einfach, oder?

Dieses Beispiel lässt sich so gut wie in jedes System, vorausgesetzt es ist PHP5 installiert und das SimpleXML Objekt ist aktiv, integrieren. Mit SimpleXML lässt sich ein RSS Feed also auf eine recht einfache und auch schnelle Art und Weise realisieren.

Ihnen fehlt noch ein RSS Feed auf Ihrer Seite? Treten Sie in Kontakt mit uns. Wir beraten Sie gern!

About Author: Marcel
Ich bin Senior PHP Developer bei MM Newmedia. Seit 2005 bin ich begeisterter Webentwickler und arbeite als Freelancer für namenhafte Firmen und entwickle jede Menge abgefahrenes Zeug und berichte darüber in meinem Blog.

One thought on “RSS mit SimpleXML

Kommentar verfassen