RSS Feed für die WebSite

Mit einem FeedReader können Sie alle Inhalte der Domäne abonnieren, damit sehen Sie sofort, wenn es etwas Neues auf der Site gibt, die Liste ist nach der letzten Änderung der Dateien sortiert. Die Adresse für den Feed ist wie folgt:

http://rolfrost.de/sitemap.rss

Kopieren Sie diese Adresse in einen FeadReader und schon haben Sie alle HeadLines dieser Seite im direkten Zugriff zum Anschauen, mit [Enter] oder einem Doppelklick auf die HeadLine können Sie die Seite mit dem FeedReader genauso betrachten, wie mit jedem Browser.

Webseite im Feedreader

Eine Feed erstellen

Der Vollständigkeit halber hier auch das Script und ein paar Worte dazu. Zum Bereitstellen eines Feeds wird eine Datenquelle gebraucht, das kann eine Datenbank sein, eine Textdatei oder ein Verzeichnis im Dateisystem. In meinem Fall ist es eine Datenbank.

Für den Feed wird von allen zu publizierenden Dokumenten der Locator (URL) und der Titel bereitgestellt, was eine entsprechende Abfrage auf die Datenbank erledigt. Nach der Ausgabe des entsprechenden Headers und der Deklaration des Feeds als RSS/XML werden URL, Title und das Datum in XML verpackt und mit print() ausgegeben, das ist Alles.

#!/usr/bin/perl

# Tabelle auslesen und als RSS Feed darstellen
# Rolf Rost, 11.10.2005, update: 5.5.2009
###########################################################################
use strict;
use DBI;
use Basic;

my $dbh = connMySQL() or redir $fallback; # Modul Basic

# Aktuelle Zeit ermitteln
my $time = time; # der Einfachheit halber wird hier die Zeit vom Server genommen

# Den entsprechenden Header ausgeben
print "Content-type: application/rss+xml\n\n";

# Hier folgt XML
print <<"EOT";
<?xml version="1.0" encoding="ISO-8859-1" ?> 
<rss version="2.0">

  <channel>

  <title>Website von Rolf Rost</title>
  <description>WebSite von Rolf Rost - Kochen und Programmieren</description>
  <link>http://rolfrost.de</link>
EOT


# hier nun die Items
my $sth = $dbh->prepare("SELECT url, title FROM contentbase");
$sth->execute;
while(my $ref = $sth->fetchrow_hashref){
  printf(
    qq(
      <item>
      <title>%s</title>
      <link>%s</link>
      <guid isPermaLink="true">%s</guid>
      <pubDate>%s</pubDate>
      </item>
    ), 
      $ref->{'title'}, 
      "http://rolfrost.de".$ref->{'url'}, 
      "http://rolfrost.de".$ref->{'url'}, 
      strftime("%a, %d %b %Y %H:%M:%S GMT", gmtime($time))
  );
}
$sth->finish;

# footer
print qq(
  </channel>
  </rss>
);


exit;
###########################################################################

Im Scriptbeispiel wird das Datum für den Tag pubDate mit strftime() (POSIX) erzeugt. Damit die Abkürzungen in Englisch sind, ist das Modul wie folgt einzubinden und LC (Locale) zu setzen:

use POSIX qw(strftime setlocale LC_TIME);
setlocale(LC_TIME, 'en');

Ein solcher Zeitstring kann vorteilhaft auch anderweitig erzeugt werden:

use HTTP::Date;
my $tstr = time2str(time); # Formatiert den Date-String RFC-gerecht
# like: Thu, 13 Aug 2009 20:29:03 GMT

Last-Modified: Tue, 22 Jun 2010 19:50:13 GMT