RSS-Newsfeeds mit Access erstellen

01.01.2007 von Helma  Spona
Mit RSS-Newsfeeds ist es möglich, etwa einen Newsletter anzubieten, der dann aber nicht per E-Mail versendet, sondern vom Leser über einen RSS-Reader abonniert wird. Es handelt sich bei den RSS-Dateien um XML-Dateien, also reine Textdateien, die sich folglich auch mit Access erstellen lassen. Wie das geht, zeigt diese zweiteilige Artikelfolge.

RSS-Dateien, auch RSS-Newsfeeds genannt, begegnen Ihnen im Internet mittlerweile fast überall. Entgegen ihrer ursprünglichen Bedeutung als Newsletter-Ersatz werden sie inzwischen aber für viele verschiedene Zwecke eingesetzt.

Der wichtigste für Access-Anwender dürfte der Export von Access-Daten sein, sei es für Sonderangebote, aktuelle Nachrichten oder Support-Informationen, die in einer Datenbank verwaltet werden. Bevor eine solche Lösung entwickelt werden kann, muss natürlich geklärt werden, was RSS-Newsfeeds genau sind.

Was sind RSS-Newsfeeds?

Newsfeeds sind eine Art Newsletter auf Web-Seiten, die zwar abonniert werden können, die dann aber nicht per E-Mail beim Abonnenten ankommen, sondern mit einem Newsfeed-Programm gelesen werden können. Das funktioniert ganz ähnlich wie das Abonnieren einer Newsgroup, nur dass Newsfeeds eben statische Inhalte enthalten.

Leser können also nicht darauf antworten oder eigene Inhalte hinzufügen. Newsfeeds werden in einem speziellen Format, dem RSS-Format gespeichert, das wieder XML zur Definition der Daten nutzt. Das RSS-Format fördert damit die strikte Trennung von Formatierung und Gliederung der Inhalte. Auf diese Weise ist eine RSS-Newsfeed-Datei problemlos maschinenlesbar und kann schnell, sicher und unproblematisch ausgewertet, dargestellt und auch erzeugt werden.

RSS ist die Abkürzung von „Rich Site Summary“ und besagt damit schon grob, um was es geht: die Zusammenfassung komplexer Seiten in der RSS-Datei. Auch wenn die allermeisten RSS-Newsfeeds tatsächlich Neuerungen der Webseite wie neue Artikel und Berichte zusammenfassen oder Sonderangebote und Aktionen von Shopsystemen beinhalten, um so dem Abonnenten zu ermöglichen, die Seite nur dann zu besuchen, wenn es interessante neue Inhalte gibt, müssen Sie diesen Beispielen nicht folgen.

Sie haben ebenso die Möglichkeit, RSS-Newsfeeds als Ersatz für den normalen Newsletter einzusetzen oder auch als Supportmöglichkeit, mit der Sie Anwender über neue Updates, neue FAQs oder auch neue Softwareversionen unterrichten können.

Vor- und Nachteile von RSS-Newsfeeds

Damit wären wir auch schon beim wichtigsten Vorteil von RSS-Newsfeeds: Um ein Abonnement abzuschließen, muss der Benutzer seine E-Mail-Adresse nicht hinterlassen. Spam ist daher ausgeschlossen. Stattdessen ist ein Programm ähnlich einem Newsreader erforderlich, mit dem die RSS-Newsfeeds gelesen und verwaltet werden können.

Da das RSS-Format und somit auch die notwendigen Programme derzeit aber noch recht unbekannt sind, schränkt dies auch die Zahl der Abonnenten erheblich ein. Mit Verbreitung des Internet Explorers 7, der einen RSS-Newsreader enthält, wird sich das Problem aber in Kürze erledigen, zumindest was die Windows-Benutzer angeht.

Ein weiterer großer Vorteil: Bei RSS-Newsfeeds entfällt das Formatierungsproblem, das Sie bei E-Mail-Newslettern hätten, da das RSS-Format auf XML basiert und einen einheitlichen Aufbau einer solchen XML-Datei vorschreibt. Formatierungen sind nicht vorgesehen, sondern beschränken sich auf eine Gliederung des Inhalts, der dann von RSS-Readern dargestellt wird.

Um die Formatierung brauchen Sie sich also keine Gedanken zu machen. Vielmehr ist es wichtig, dass Sie fehlerfreie RSS-Dateien erstellen. Andererseits haben Sie so natürlich auch keine Einflussmöglichkeiten auf die Formatierungen des RSS-Readers. Möchten Sie auf eine Formatierung der Beiträge im RSS-Newsfeed aber nicht verzichten, können Sie auch in der RSS-Datei lediglich die Titel und eine kurze Einleitung der Artikel definieren und auf eine html- oder PHP-Datei verlinken. Hier können Sie die einzelnen Artikel nach Belieben formatieren, da der RSS-Reader in aller Regel auch die Möglichkeit bietet, den Artikel im Browser und nicht in seinen eigenen Fenstern anzuzeigen.

Aufbau einer RSS-Datei

Jede RSS-Datei besteht aus den Abschnitten

Der Channel-Block ist durch eigene Tags gekennzeichnet. Da RSS-Dateien XML-Dateien sind, müssen sie mit einer gültigen XML-Deklaration beginnen. Sinnvoll ist es, die Datei im UTF-8-Format zu erstellen. Dann müssen Sie selbstverständlich diesen Zeichensatz auch in der XML-Deklaration angeben:

<?xml version ="1.0" encoding="UTF-8"?>

Danach folgt der Kopfbereich. Er muss alle verwendeten Namensräume der RSS-Datei enthalten. Wenn Sie nur eine einfache RSS-Datei erstellen möchten, genügt dazu die Angabe:

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns="http://purl.org/rss/1.0/">
...
</rdf:RDF>

Unterhalb des Kopfbereichs folgt der Channel-Bereich mit einem ganz spezifischen Aufbau. Er entspricht von seiner Bedeutung dem <head>-Element von HTML. Der Channel-Block ist durch das Element <channel> definiert und muss die untergeordneten Elemente <title>, <link>, <description> und <items> enthalten.

<channel rdf:about="http://www.meinedomain.de/Shop/angebote.css/>
<title>Demo-Shop-Sonderangebote</title>
<link>http://www.meinedomain.de/Shop</link>
<description>Aktuelle Angebote und Aktionen in unserem Shop</description>
<items>
<rdf:Seq>
<rdf:li resource="http://www.meinedomain.de/Shop/Produkt.php?ID=1" />
<rdf:li resource="http://www.meinedomain.de/Shop/Produkt.php?ID=100" />
...
</rdf:Seq>
</items>
</channel>

Struktur im Detail

<title> legt den Titel des RSS-Newsfeeds fest und <link> die Herkunftswebseite. Die hier angegebene Adresse wird als Basis für relative URLs innerhalb der RSS-Datei verwendet. Pfadangaben müssen dabei mit einem Backslash abschließen. Im Element <description> bringen Sie eine Beschreibung der RSS-Datei unter.

Am wichtigsten ist das Element <items>, das Links zu jedem Eintrag der RSS-Datei enthält. Sie können beliebig viele Einträge innerhalb des Items-Element definieren. Diese Verweise definieren Sie mit dem Element <rdf:li> und dem Attribut resource innerhalb des übergeordneten <rdf:Seq>-Elements. Die angegebenen URLs im Attribut resource müssen natürlich keine PHP-Seiten, sondern können auch HTML-Seiten oder ASP-Seiten sein. Sie müssen diese auch nicht als absoluten URL angeben, sondern können auch nur den Dateinamen angeben, wenn sich die Seiten im gleichen Verzeichnis wie die RSS-Datei befinden. Alternativ wären daher auch Definitionen wie die in Listing 2 denkbar und gültig.

<channel rdf:about="http://www.meinedomain.de/Shop/RSSLeer.rss">
<title>Demo-Shop-Sonderangebote</title>
<link>http://www.meinedomain.de/</link>
<description>Aktuelle Angebote und Aktionen in unserem Shop</description>
<items>
<rdf:Seq>
<rdf:li resource="Artikel1.html"/>
<rdf:li resource="Artikel2.html"/>
...
</rdf:Seq>
</items>
</channel>

Während der Channel-Block quasi nur die Inhaltsübersicht des RSS-Newsfeeds darstellt, legt der About-Block den eigentlichen Inhalt fest. Darin können Nachrichtenbeiträge oder Produktbeschreibungen stehen oder auch nur eine kürzere Beschreibung mit einem Link auf die Webseite. Dazu definieren Sie nach dem <channel>-Element für jedes <rdf:li>-Element des Channel-Blocks ein <item>-Element.

<item rdf:about="Artikel1.html">
<link>Artikel1.html</link>
<title>ABC-Software</title>
<description>Das absolute Schnäppchen vom Marktführer. Lernsoftware für Kinder von 5 bis 10 Jahre ...</description>
</item>
<item rdf:about="Artikel2.html">
<link>Artikel2.html</link>
<title>Action ohne Ende</title>
<description>bietet die neue Version des des Spieleklassikers XYZ-Racer für Konsole und PC ...</description>
</item>

Item-Elemente

Jedes <item>-Element muss dabei über die untergeordneten Elemente <title> und <link> verfügen, die den Titel und die URL zu einer Webseite mit weitergehenden Informationen definieren. Das Element <description> ist optional und erlaubt die Angabe einer Beschreibung. Es kann verwendet werden, um beispielsweise den kompletten Nachrichtentext des Eintrags oder eine komplette Produktbeschreibung aufzunehmen. Achtung, die Reihenfolge der Einträge im About-Block muss nicht mit der im Channel-Block übereinstimmen. Die Reihenfolge, in der die Einträge angezeigt werden, richtet sich dann nach der Reihenfolge im Channel-Block. Die Zuordnung erfolgt dabei über den angegebenen URL.

Bild 1: Definition der RSS-Datei und Anzeige im RSS-Reader.

Der URL im rdf:about-Attribut innerhalb des About-Blocks muss daher mit dem Wert des resource-Attributs im Channel-Block übereinstimmen. Eine einfache RSS-Datei ist daher nicht sonderlich aufwendig, obwohl vorstehend natürlich nur die grundlegenden und notwendigen Elemente beschrieben wurden. Es ist ebenso möglich, auch Grafiken zu referenzieren und weitere Informationen unterzubringen. Bild 1 zeigt, wie die hier vorgestellte RSS-Datei in einem RSS-Reader (hier „Sage“ innerhalb von Mozilla) dargestellt wird. Die Pfeile zeigen, welche Informationen zu welcher Ausgabe führen.

Eine RSS-Datei mit VBA schreiben

Wenn Sie eine RSS-Datei mit VBA schreiben möchten, gibt es dazu im Prinzip drei Möglichkeiten.

Die VBA-Funktionen haben den Nachteil, dass Sie nicht festlegen können, mit welchem Zeichensatz die Dateien erstellt werden sollen. Die XML-Klassen von Microsoft sind leider nicht auf jedem System automatisch verfügbar. Die sicherste Methode ist daher der Einsatz des FileSystemObject-Objekts, das ab Office 2000, Internet Explorer 4.01 oder Windows 98 SE automatisch zur Verfügung steht.

Es wird daher nachfolgend auch eingesetzt. Am einfachsten erstellen Sie zum Erzeugen einer RSS-Datei eine Funktion, der Sie den Inhalt der Datei, den URL, den Namen, Pfad, Titel und die Beschreibung als Parameter übergeben und die dann die Datei erstellt.

Notwendige Verweise

Damit Sie das FileSystemObject-Objekt mit früher Bindung nutzen können, ist es erforderlich, in der Entwicklungsumgebung über Extras/Verweise einen Verweis auf die Bibliothek MicrosoftScripting Runtime zu erstellen (Bild 2).

Bild 2: Setzen des Verweises.

Das FileSystemObject

Der Inhalt der Funktion ist dann im Prinzip ganz einfach. Zunächst deklarieren Sie die erforderlichen Variablen und erzeugen das FileSystemObject-Objekt mit dem Schlüsselwort New.

Anschließend rufen Sie die BuildPath-Methode auf, um aus dem Namen und dem Pfad der Datei eine gültige Pfadangabe zu erstellen. Danach erzeugen Sie mit der CreateTextFile-Methode eine neue Textdatei. Als ersten Parameter übergeben Sie den Namen der Datei, mit dem zweiten bestimmen Sie, ob eine vorhandene Datei überschrieben werden soll, und der dritte gibt an, ob eine UniCode-Datei erstellt werden soll. Damit das passiert, geben Sie true an.

Da Sie auch beim FileSystemObject nicht festlegen können, dass UTF-8 für die Codierung verwendet werden soll, sondern nur einfache UniCode-Dateien erzeugen können, entfällt in der RSS-Datei das encoding-Attribut der XML-Deklaration. In diesem Fall wird automatisch UniCode als Zeichensatz angenommen.

Nachdem Sie die Textdatei erstellt haben, ist sie bereits zum Schreiben geöffnet. Sie können also direkt für jede zu schreibende Zeile die WriteLine-Methode aufrufen und ersetzen einfach die variablen Inhalte der RSS-Datei durch die Parameter der Funktion. Der eigentliche Inhalt der Datei, der Channel- und der About-Block wird durch den Parameter strInhalt bestimmt. Er muss aus dem Datenbankinhalt erzeugt werden. Wie das geht, zeigt der nächste Teil dieser Artikelfolge.

Die Prozedur testen dient dazu, den Aufruf der Prozedur RSSDateischreiben zu testen. Als Pfad übergibt die Prozedur den Pfad der aktuellen Datenbank, sodass die RSS-Datei im Datenbankverzeichnis erzeugt wird. Um das zu ermitteln, rufen Sie die Funktion getDBPfad auf.

Erzeugen einer leeren RSS-Datei mit VBA

Option Compare Database
Option Explicit
Sub RSSDateiSchreiben(strName As String, strPfad As String, _strTitel As String, strBasisURL As String, _strBeschreibung As String, strInhalt As String)
Dim objFSO As New FileSystemObject
Dim objTS As TextStream
Dim strDateiname As String

strDateiname = objFSO.BuildPath(strPfad, strName)
Set objTS = objFSO.CreateTextFile(strDateiname, True, True)
objTS.WriteLine "<?xml version=""1.0"" ?>"
objTS.WriteLine "<rdf:RDF xmlns:rdf=""http://www.w3.org/1999/02/22-rdf-syntax-ns#"" xmlns=""http://purl.org/rss/1.0/"">"
objTS.WriteLine "<channel rdf:about=""" & strBasisURL & "/" & strName & """>"
objTS.WriteLine "<title>" & strTitel & "</title>"
objTS.WriteLine "<link>" & strBasisURL & "</link>"
objTS.WriteLine "<description>" & strBeschreibung & "</description>"
objTS.WriteLine strInhaltobjTS.WriteLine "</rdf:RDF>"
objTS.Close

Set objFSO = Nothing
End Sub

Sub testen()
Dim strPfad As String

strPfad = getDBPfad()
RSSDateiSchreiben "Auto.rss", strPfad, "Meine Überschrift", "http://www.meineurl.de", "Beschreibung", ""
MsgBox "Fertig!"
End Sub

Function getDBPfad() As String
getDBPfad = Left(CurrentDb.Name, _Len(CurrentDb.Name) - Len(Dir(CurrentDb.Name)))
End Function

Bild 3: Die erzeugte, noch unvollständige RSS-Datei.

Wie geht es weiter?

Nachdem Sie nun wissen, wie eine RSS-Datei aufgebaut ist und wie Sie die leere RSS-Grundstruktur erstellen, zeigt der nächste Teil, wie Sie die Inhalte einfügen und welche Möglichkeiten Sie haben, die Referenzen auf Webseiten mit weiteren Informationen zu erzeugen und zu verlinken. (hs/mha)

Helma Spona <hs> studierte Wirtschaftswissenschaft mit Schwerpunkt Betriebsinformatik und eröffnete nach Abschluss ihres Studiums 1996 eine EDV-Beratung in Kerken, die sich auf Datenbankentwicklung und Webdesign spezialisiert hat. Außerdem schreibt sie regelmäßig Beiträge für verschiedene Zeitschriften sowie Bücher zu Programmier- und Datenbankthemen. Sie können sie über ihre Website www.helma-spona.de erreichen.

Mehr Informationen zum RSS-Standard

RSS 1.0 stellt einen Teilbereich des Ressource Description Framework (RDF) dar, der vom W3C entwickelt und im Dezember2000 vom W3C als offizieller Standard verabschiedet wurde. Mehr zum RSS-Standard erfahren Sie auf der W3C-Website zum Thema RDS: http://www.w3.org/RDF/. RSS 1.0 ist nicht kompatibel zu RSS 0.9x und RSS 2.0. Nachfolgend wird RSS 1.0 beschrieben, da dieser Standard von allen RSS-Readern unterstützt wird.