Tutorials
[ Zurück ]


RSS - Newsfeed mit PHP erstellen


Eine kleines Vorwort: Dieses Tutorial erklärt, wie man mit einem PHP-Script eine Datenbank ausliest und den Inhalt als Newsfeed ausgibt. Hierbei werden gute Kenntnisse in PHP, MySQL/SQLite und Grundkenntnisse in XML vorausgesetzt. Letzteres ist gegeben, wenn dir folgender Code nicht vollkommen unverständlich erscheint.


1. Wie sieht ein RSS-Feed aus?

Ein RSS-Feed ist eine XML-Datei, in der Informationen strukturiert abgespeichert werden, sodass sie von sogenannten RSS-Reader (oder auch Browsern) weiterverwertet werden können. So könnte ein RSS aussehen:
<?xml version="1.0" encoding="windows-1252"?>
<rss version="0.91">
 <channel>
  <title>Mein Blog</title>
  <description>Der Blog der privaten Website von Oliver Schoppe</description>
  <language>de</language>
  <link>http://oliver-schoppe.de/oliver/</link>
  <item>
   <title>Titel des ersten Blogeintrags</title>
   <description>Inhalt des ersten Blogeintrags</description>
   <link>http://oliver-schoppe.de/oliver/blog/link_zum_ersten_eintrag.html</link>
   <pubDate>Sat, 21 Mar 2009 15:27:41 +0100</pubDate>
  </item>
 </channel>
</rss>

Dieser Newskanal ("channel") enthält also folgende Elemente:

  • title --> Der Titel des Newsfeed
  • description --> Eine Kurzbeschreibung des Newsfeed
  • language --> Die Sprache des Newsfeed
  • link --> Die URL der zugehörigen Website
  • item --> ein einzelner Newseintrag

Ein "Item" ist also ein einzelner Newseintrag - im fertigen Newsfeed werden also vermutlich mehrere "items" existieren. Die weiteren Items werden einfach nach dem Schlusstag (</item>) des vorherigen eingefügt. Ein Item besteht wieder aus mehreren Unterelementen:
  • title --> Der Titel des Newseintrags
  • description --> Der Inhalt des Newseintrags
  • link --> Der Link zum Newseintrag auf der Website
  • pubDate --> Das Datum der Veröffentlichung. Hierbei muss die Formatierung beachtet werden! Das "+0100" steht für die Zeitzone und könnte auch zB durch "GMT" ersetzt werden. Es sind auch andere Formatierungen möglich: googlet am besten mal, was alles valide ist. Es muss nicht zwingend in dieser Form erscheinen!

2. Wie kann ich das nun mit PHP generieren?

Im folgenden gehen wir davon aus, dass wir einen Blog betreiben, auf dem wir ab und zu etwas neues schreiben und die Einträge in einer Datenbank (hier: SQLite - mit MySQL ist es fast das selbe, nur die PHP-Befehle sqlite_open, sqlite_query und sqlite_fetch_array müssen angepasst werden) gespeichert sind.

Die Datenbank hat folgende Spalten:
  • titel --> Titel des Blogeintrags
  • text --> Text des Blogeintrags
  • datum --> Tag der letzten Bearbeitung
  • url --> "Dateiname" des Blogeintrags

Mit einem PHP-Skript wollen wir nun diese Daten für alle vorhandenen Einträge abfragen und schließlich in einer while-Schleife ausgeben:
<?php
$db = sqlite_open("blogeintraege.sqlite");
$result = sqlite_query($db, "SELECT * FROM artikel ORDER BY reihenfolge ASC");
while($line = sqlite_fetch_array($result))
{
  $titel = $line['titel']; // zB "Schönes Wetter"
  $text = $line['text'];  // ZB langer Text inklusive HTML und Bilder usw
  $datum = $line['datum'];    // zB "Sat, 21 Mar 2009 15:27:41"
  $url = $line['url'];     // zB "schoenes_wetter"
 
  $url = "http://oliver-schoppe.de/oliver/$url.html";
 
  print "<item>
<title>$titel</title>
<description><![CDATA[$text]]></description>
<link>$url</link>
<pubDate>$datum +0100</pubDate>
</item>
";
 } ?>

Jetzt müssen wir diesen Code-Schnipsel nur noch in das "RSS"-Gerüst einbauen. Das einzige, was dabei zu beachten ist, ist die Tatsache, dass wir mit PHP einen Header ausgeben, der anzeigt, dass es kein PHP-Dokument, sondern eben ein RSS-Feed ist. Der ganze Code schaut dann so aus:
 

<?php header("Content-Type: application/rss+xml"); ?>
<?xml version="1.0" encoding="windows-1252"?>
<rss version="0.91">
 <channel>
  <title>Blog von Oliver Schoppe</title>
  <description>Der Blog meiner privaten Website</description>
  <language>de</language>
  <link>http://oliver-schoppe.de/oliver/</link> 
  <?php
   $db = sqlite_open("blogeintraege.sqlite");
   $result = sqlite_query($db, "SELECT * FROM artikel ORDER BY reihenfolge ASC");
   while($line = sqlite_fetch_array($result))
   {
    $titel = $line['titel'];  // zB "Schönes Wetter"
    $text = $line['text'];   // ZB langer Text inklusive HTML und Bilder usw
    $datum = $line['datum'];   // zB "Sat, 21 Mar 2009 15:27:41"
    $url = $line['url'];     // zB "schoenes_wetter"
    $url = "http://oliver-schoppe.de/oliver/$url.html";
   
    print "<item>
   <title>$titel</title>
   <description><![CDATA[$text]]></description>
   <link>$url</link>
   <pubDate>$datum</pubDate>
  </item> 
  "; }
  ?>
 </channel> </rss>


Wenn man nun diesen Code zB unter newsfeed.php abspeichert, wird diese Datei den Newsfeed ausgeben. Wenn man den Feed dann noch in die eigene Homepage einbauen will, sodass der User in seinem Browser sieht, dass es einen Feed gibt, muss man im HEAD-Bereich der Website noch folgenden Tag einbauen:
<link rel="alternate" title="RSS Feed" href="http://oliver-schoppe.de/oliver/newsfeed.php" type="application/rss+xml">


Erstellt:22.03.09 21:36
Autor: ramses

Letzte Änderung: 22.03.09 21:49
Geändert von: ramses

Bewertungen:8
Bewertung: 4.1

Freigeschaltet: Ja
Views 6072

Klicke einfach auf einen Stern!
Wollen Sie wirklich das Tutorial löschen?
Wollen Sie wirklich dieses Tutorial zulassen?
Betreff: Report tutorial [id = 73] !
Absender:
Kommentar:
Wollen Sie wirklich dieses Tutorial zulassen?
Absender:
Kommentar:
Folgende User sind hier gerade aktiv:
-

ANZEIGE