ASP Classic

RSS-Feed direkt mit ASP erzeugen

Dynamische Ausgabe von XML

News-Feeds im RSS-Format (XML) sind eine sehr praktische Sache, um auf dem Laufenden zu bleiben. RSS steht für Really Simple Syndication und bedeutet frei übersetzt "wirklich einfache Zusammenfassung". RSS-Feeds sind Zusammenfassungen bedeutsamer Meldungen einer Web-Seite in einem speziellen XML-Format. So bieten inzwischen fast alle großen Tageszeitungen, Magazine und andere Massenpublikationen solche XML-Feeds an, die der geneigte Benutzer in speziellen RSS-Readern lesen kann.

Die Grundstruktur einer solchen RSS-Datei ist recht simpel. Neben den Feed-Informationen wie Titel, Sprache, Autor, etc., sind optimalerweise 15 Nachrichteneinträge mit Titel, Link zur Meldung im Internet (URL) und einer Kurzbeschreibung der Meldung definiert. Es gibt z.Zt. drei verschiedene RSS-Spezifikationen (Version 0.91, 0.92 und 2.0), wobei Version 2.0 wohl inzwischen die gebräuchlichste ist. Eine recht gute Beschreibung der RSS 2.0-Spezifikation gibt es unter RSS at Harvard Law.

Wer nun ein Web sein Eigen nennt, dessen aktuelle Meldungen es wert wären in einem RSS-News-Feed anderen Personen zu Verfügung gestellt zu werden, muss sich überlegen, wie er die Meldungen in eine XML-Datei packt. Die einfachste Herangehensweise ist sicherlich die XML-Datei manuell zu pflegen und nach jedem Update zu veröffentlichen. Eine Automatisierung des Vorgangs ist möglich, wenn man Aktuelles in einer Datenbank pflegt und per ASP oder PHP auf die Web-Seiten bringt.

Als ich mir überlegt habe für dieses Web einen RSS-Feed anzubieten, kreisten die Gedanken eine Zeit lang darum, wie ich es anstelle, aus den in der Datenbank abgelegten Meldungen und Artikeln, eine XML-Datei zu generieren, wobei die Betonung auf dem Wort DATEI liegt. Mir wurde jedoch bald klar, dass XML nichts anderes ist als ein Ausgabeformat, d.h. ob ich nun den Internet-Server per ASP HTML-Code ausliefern lasse oder XML-Code spielt keine Rolle. Wie man nun einen solchen XML-Feed on the fly erzeugt, ist Gegenstand dieses Artikels.

Sehen wir uns zunächst das Grundgerüst einer RSS-XML-Datei an. Die erste Ebene stellt das rss-Tag dar, in dem per version-Attribut definiert wird, um welche RSS-Version es sich in dem folgenden Dokument handelt. Die zweite Ebene bildet immer das Tag channel, das alle weiteren Informationen beinhaltet. In der dritten Ebene stehen die Feed-Information und die einzelnen Meldungsblöcke. Die Auswahl der hier dargestellten Tags ist nicht abschließend, d.h. es existieren in der Spezifikation weit mehr Tags, die zum Einsatz kommen können. Ich verwende hier lediglich die wichtigsten. Alle Pflicht-Tags sind dabei fett dargestellt.

<rss version="2.0">

   <channel>

      /* Feed-Informationen */
      <title>Titel des News-Feeds</title>
      <link>URL des Webs</link>
      <description>Beschreibung des News-Feeds</description>
      <language>Sprache des News-Feeds</language>
      <lastBuildDate>Datum der Erstellung des News-Feeds</lastBuildDate>
      <generator>ASP</generator>
      <docs>Dokumentation der eingesetzten Spezifikation</docs>
      <managingEditor>eMail des RSS-Autors</managingEditor>
      <webMaster>eMail des Webmasters</webMaster>
      <image>
         <url>URL zum Logo des RSS-Feeds/Webs (GIF, JPG oder PNG)</url>
         <title>Titel des Logos</title>
         <link>Seite auf die mit dem Logo verlinkt wird</link>
      </image>

      /* Meldungen */
      <item>
         <title>Titel der Meldung</title>
         <link>URL zur Meldung</link>
         <description>
               Kurzbeschreibung der Meldung (auch HTML-Code)
         </description>
         <pubDate>Datum der Veröffentlichung der Meldung</pubDate>
      </item>

      <item>
      ... Meldung 2 ..
      </item>
       ...
  </channel>
</rss>

Anzumerken ist bei der Definition eines item, dass es entweder einen Titel (title) oder eine Beschreibung (description) haben muss, um gültig zu sein.

Sehen wir uns einzelne Tags genauer an:

language Hier kommen Sprach-Codes zum Einsatz. Eine deutscher News-Feed sollte die Kennung de-de tragen, wenn er aus Deutschland kommt. Ein Feed aus Österreich de-at und einer aus der Schweiz de-ch. Amerikanische Feeds tragen die Kennung en-us.
lastbuilddate
 pubdate
Alle Datumsfelder in einem Feed müssen nach dem RFC 822-Standard (GMT) formatiert sein, also z.B. Fri, 27 May 2005 14:21:21 +0200
generator Hier sollte eingetragen werden mit welchem Hilfsmittel der Feed erstellt wurde. In unserem Beispiel ASP
docs Der zerbit-News-Feed verweist z.B. auf die URL der o.g. Harvard Law-Spezifikation

Wenn nun die Meldungen in einer Datenbank vorliegen, ist es ein Leichtes diese Informationen über ein ADO-Recordset in RSS-Items zu transformieren. Die Kopfinformationen werden schlicht hard-coded.

Da es in ASP keine Funktion gibt, die das Formatieren eines Datums nach RFC-822 erlaubt, verwenden wir dafür eine kleine selbst geschriebene Funktion:

Public Function GetRFCDate(strDate, strTime)

  '*** Datum nach RFC #822: Tue, 04 Jan 2005 04:00:00 GMT

  'Wochentag in Kurzform ermitteln
  strWeekDayName = WeekDayName(WeekDay(strDate),true)

  'Tageszahl ermitteln und auf zwei Ziffern auffüllen
  strDay = Day(strDate)
  if len(strDay) = 1 then strDay = "0" & strDay

  'Monat und Jahr ermitteln
  strMonthName = MonthName(Month(strDate),true)
  strYear = Year(strDate)

  'Vorläufigen Rückgabewert festlegen
  GetRFCDate = strWeekDayName & ", " & strDay & " " & strMonthName & " " & strYear

  '---Wenn ein Zeit-String übergeben wurde...
  'Stunden, Minuten und Sekunden ermitteln
  if len(strTime) > 0 then

     strHour = Hour(strTime)
     if len(strHour) = 1 then strHour = "0" & strHour

     strMinute = Minute(strTime)
     if len(strMinute) = 1 then strMinute = "0" & strMinute

     strSecond = Second(strTime)
     if len(strSecond) = 1 then strSecond = "0" & strSecond

     GetRFCDate = GetRFCDate & " " & strHour & ":" & strMinute & ":" & strSecond
  else
     GetRFCDate = GetRFCDate & " " & "00:00:00"
  end if

  'Plus 2 Stunden für deutsche Zeit
  GetRFCDate = GetRFCDate & " +0200"

End Function

Wichtig ist bei der Generierung eines Datums nach RFC 822, dass das Format des Wochentags englisch ist, d.h. dass die Kurzform z.B. des Tages Freitag "FRI" lautet. Setzt man aber einen deutschen Internet Information Server ein, so ergibt die Funktionen WeekDayName die deutsche Kurzform des Wochentags und nicht die englische. Nun könnte man dieses Problem mit einem select-Statement abhandeln, aber sinnvoller ist, den VBScript-Code im amerikanischem Gebietsschema ablaufen zu lassen. Hierzu muss man lediglich den Language-Descriptor in der ersten Zeile der ASP-Seite um das LCID-Attribut ergänzen und mit dem amerikanischen Ländercode 1033 versehen (deutsch=1031):

<% @ Language="VBScript" LCID=1033 %>

Da wir hier, wie oben erwähnt ja keinen HTML-Stream, sondern XML ausgeben, ist es wichtig, das über den ContentType des Dokuments auch festzulegen. Dies geschieht in der zweiten Zeile über:

<% Response.ContentType="text/xml" %>

In der dritten Zeile wird festgelegt, dass das Dokument ein XML 1.0 Dokument ist und die enthaltenen Informationen in deutscher Sprache (encoding) vorliegen, damit das Dokument trotz Umlaute gültig ist:

<?xml version="1.0" encoding="iso-8859-1"?>

Da die fertige ASP-Seite gültiges XML im RSS-Format liefert, kann ein Benutzer die URL der Seite direkt in seinen RSS-Reader einbinden, um den RSS-Feed zu lesen.

Hinweis

Benutzern des Browsers Firefox können Sie über die Einbindung eines speziellen link-Tags mitteilen, dass Ihr Web über einen RSS-Feed verfügt. In der Statuszeile blendet der Gecko-Browser dann ein kleines RSS-Icon ein, über das Sie den RSS-Feed abonnieren können. Das Tag sieht für den zerbit.de-Feed wie folgt aus:

<link rel="alternate" type="application/xml+rss"
	title=""zerbit.de - RSS-Feed"
	href="http://www.zerbit.de/extras/rssfeed.asp">
kick it on dotnet-kicks.de AddThis 0 wikio-Stimme(n) Trackback-Url...

3 Kommentare bislang...

  • Kommt man an das RFC-822 Datum nicht einfach mittels datum.ToString("R") ?!

    LG Tim
    3
    Tim : Donnerstag, 25. Juni 2009 15:14
  • Tut mir leid fürs Vollspammen...

    type="application/xml+rss"
    muss lauten:
    type="application/rss+xml"

    MfG, Viktor
    2
    Viktor Borgert : Freitag, 3. November 2006 10:39
  • Danke!
    Das ist genau, was ich gesucht habe! :)

    Nur hat sich ein kleiner Tippfehler eingeschlichen:

    <link rel="alternate" type="application/xml+rss"
    title=""zerbit.de - RSS-Feed" href="http://www.zerbit.de/extras/rssfeed.asp">

    muss lauten:

    <link rel="alternate" type="application/rss+xml"
    title=""zerbit.de - RSS-Feed" href="http://www.zerbit.de/extras/rssfeed.asp">

    MfG, Viktor
    1
    Viktor Borgert : Freitag, 3. November 2006 10:34

Dein Kommentar hierzu...


Kommentar-Feed für diesen Beitrag
Gravatare werden unterstützt .:. eMail-Adressen werden nicht veröffentlicht
 

RSS-Feed

Die URL des Standard-Newsfeed von zerbit.de lautet:

http://www.zerbit.de/rssfeed.aspx

Login


 

 

Statistik



kürzlich kommentiert

Artikel 35

  • Datum: 28.05.2005
    Kategorie: ASP Classic
    Zugriffe: 19.410
    Kommentare: 3
    Trackbacks: 0

Letzte Beiträge

Kategorien

Buttons & More

Blog-Roll

Banner Piraten-Partei