Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 3/2006.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Lesen und verwalten Sie Ihre Lieblingsnachrichten mit einer Access-Datenbank.

Techniken

VBA, XML, RSS

Voraussetzungen

Access 2000 und höher

Beispieldatei

RSSNewsReader.mdb

RSS-Feed mit Access

Dirk Bauer, Düsseldorf

RSS ist in kurzer Zeit zum Synonym für aktuelle Meldungen aus dem Internet geworden. Falls Sie mehr über die zugrunde liegende Technik erfahren möchten oder beliebige, öffentliche RSS-Feeds in Ihre eigene Access-Anwendung integrieren wollen, bietet Ihnen dieser Artikel die notwendigen Hintergründe und Lösungsansätze. Zusätzlich können Sie die hier beschriebene Lösung direkt einsetzen und Informationen aus den gewünschten Nachrichtenkanälen in eine Access-Datenbank einlesen.

RSS im Überblick

RSS ist die Abkürzung für Really Simple Syndication und kann mit "echt einfache Verbreitung" übersetzt werden. Der Anwender ist mit Hilfe eines RSS-Readers in der Lage, ganze Webseiten oder Teile davon zu "abonnieren" und regelmäßig Updates der Inhalte zu beziehen.

RSS wird in so genannten RSS-Feeds oder Nachrichten versendet. RSS-Feeds sind textbasierte Informationen, die in jeweils verschiedenen RSS-Versionen standardisiert worden sind. Dabei ist ein RSS-Feed technisch gesehen nichts anderes als eine XML-Datei mit einem definierten Schema.

Eine Nachricht besteht in der Regel aus einem Titel, einem kurzen Text sowie einem Link, der weiterführende Informationen zu der Nachricht enthält.

Einsatzgebiete für RSS-Feeds

Seit einigen Jahren ist es immer populärer geworden, auf Webseiten so genannte RSS-Feeds anzubieten. Mit Sicherheit werden Sie schon einmal Verweise zu RSS-Feeds auf einer Webseite gesehen haben.

RSS wird allgemein als eine der ersten Anwendungen bewertet, die für ein so genanntes semantisches Web stehen. In einem semantischen Web sollen Inhalte automatisiert von Maschinen eingelesen und weiterverarbeitet werden können.

Wie findet man einen RSS-Feed?

Wie so oft, ist auch bei dieser Fragestellung Ihre präferierte Suchmaschine im Internet die erste Anlaufstelle. Google findet alleine mit den Suchbegriffen ms access rss ca. 145.000.000 Einträge. Wenn Sie nach der Suche auf den Link zu einer Webseite klicken, werden Sie in den meisten Fällen zu einer - für Menschen lesbaren - Seite mit Zusatzinformationen geleitet. Auf dieser Seite sollten Sie dann nach einer der folgenden Kennzeichnungen Ausschau halten:

Kennzeichnungen für RSS-Feeds

Um dem Anwender einen möglichst einfachen und schnellen Zugang zu einem RSS-Feed zu ermöglichen, haben sich die Logos auf Webseiten aus Tab. 1 durchgesetzt.

Logo

Beschreibung

RSS-Feed-Logo

XML-Feed-Logo

Neues RSS-Logo

Tab. 1: Logos zur Kennzeichnung von RSS-Feeds

Das neue RSS Logo wurde ursprünglich von den Entwicklern des Webbrowsers Firefox entwickelt. Mittlerweile haben sowohl die Unternehmen Opera als auch Microsoft das Logo übernommen und werden es auch in die neuesten Generationen der Webbrowser integrieren.

Aufbau einer RSS-Datei

Seit dem Start der ersten RSS-Feeds im Juni 2000 gibt es bis heute mehrere Versionen des RSS-Formats.

Abb. 1: Beispiel einer RSS-Feed-Datei

Jede neue Version wurde so überarbeitet, dass sowohl neue Pflicht- als auch optionale Elemente Einzug in die Spezifikation erhielten. Die gängigen Versionen, die Sie bei näherer Beschäftigung mit dem Thema RSS im Internet finden werden, sind die RSS-Versionen 0.9x, 1.0 und 2.0.

Abb. 1 zeigt einen Auszug aus einem Feed des Haufe Verlags. Dieser stellt exemplarisch die mögliche Struktur eines RSS-Feeds Version 0.91 dar.

Jede RSS-Datei ist eine gültige XML-Datei gemäß der XML-Spezifikation 1.0. Die in der Datei enthaltenen Zeichen werden in der Regel mit dem Code UTF-8 codiert.

Die RSS-Datei beginnt mit dem Root-Knoten <rss>. Dieser Knoten muss mit einem Attribut Version ergänzt werden, der die verwendete RSS-Spezifikation beschreibt.

Als nächster Knoten folgt ein <channel>-Knoten, der die "Kopfdaten" des Feeds beinhaltet. In Abhängigkeit der RSS-Spezifikation folgen nun einige Knoten mit Informationen wie etwa <titel>, <link> und einer kurzen Beschreibung des Feeds im Knoten <description>. Details zur RSS-Spezifikation können Sie unter anderem dem Link am Ende dieses Beitrags entnehmen.

Der Image-Knoten verweist auf ein Icon oder Logo zum Feed und ist optional. Im Rahmen der Implementierung des Access-Feed-Readers werden Sie eine Methode kennen lernen, mit der Sie die optionalen Attribute sicher abfragen und verwenden können.

Nun folgt eine immer wiederkehrende Liste von Knoten des Typs Item. Jedes Item innerhalb einer Feed-Datei ist identisch aufgebaut.

Hinweis

Bitte beachten Sie, dass es für die Items ebenfalls eine Vielzahl optionaler Attribute gibt, die von Feed zu Feed sehr unterschiedlich definiert sein können. (

Ein Item besteht im Wesentlichen aus den Knoten <title>, <link> und <description>.

Einige Anbieter von RSS-Feeds beschränken sich bei den Items auf die Angabe eines kurzen Titels und eines Links zur eigenen Homepage. Dieses Verfahren ist häufig bei Presseagenturen oder TV-Sendern zu beobachten, die damit den Anwender zum Abruf des kompletten Nachrichtentextes auf die Webseite des Feed-Anbieters weiterleiten können. Wenn der Anwender den Link in seinem RSS-Feed-Reader anklickt, wird er im Normalfall direkt zum relevanten und vollständigen Text des Items weitergeleitet.

Alternativen

In der noch jungen Geschichte des RSS-Formats hat es hinter den Kulissen schon seit der ersten Version eine rege Diskussion um die notwendigen Attribute und Knoten zur Aufbereitung der Informationen gegeben.

Einige Stimmen sprechen sich dafür aus, RSS möglichst schlank und einfach zu halten. Andere Parteien möchten die sprichwörtliche eierlegende Wollmilchsau erstellen und definieren ein universelles und riesiges Set von zulässigen Attributen.

Ein sehr umfangreiches Format ist das Format Atom, welches maßgeblich in der Version 1.0 eingesetzt wird. Atom ist ebenso wie RSS ein Internetstandard und versucht, die Vorteile der einzelnen RSS-Standards in einem neuen Format zu vereinen. Atom fordert beispielsweise eine inhaltliche Kennzeichnung von Einträgen, die bei RSS oft schmerzlich vermisst wird.

So kann etwa in RSS der reine Text einer Nachricht oder auch formatiertes HTML-Markup in einem Knoten gespeichert werden. Die verarbeitende Anwendung bekommt keinen Hinweis auf den Inhalt und muss sich selber um eine Interpretation der Daten kümmern. Atom ermöglicht in diesem Fall eine Kennzeichnung als type = text oder type = html.

Praxis-Tipp

Obwohl im folgenden Quellcode zu diesem Beitrag nur das RSS-Format eingelesen wird, können Sie die Lösung jederzeit selber um das Atom-Format erweitern. (

Access wird zum RSS-Reader

Microsoft wird mit dem kommenden Internet Explorer 7 das erste Mal direkte Unterstützung von RSS in der Oberfläche einer Anwendung anbieten und auch ein API zur Verwendung von RSS in eigenen Applikationen mitliefern. Damit Sie nicht bis zur Freigabe des neuen IE7 warten müssen, zeigt Ihnen dieser Artikel einen relativ einfachen Weg, um Ihre Anwendung mit RSS-Feeds anzureichern.

Die nachfolgend beschriebene Musterlösung ermöglicht die Eingabe einer URL, von der ein RSS-Feed geladen werden soll. Access baut nach der Eingabe eine Verbindung über das http-Protokoll (Port 80) mit dem in der URL angegebenen Webserver auf und liest die RSS-Daten ein.

Nachdem die Daten lokal auf dem Client vorliegen, werden relevante Angaben zum Channel extrahiert und der neue Channel in der Tabelle Channels angelegt.

Im letzten Schritt werden in dieser Musterlösung alle bereits definierten Channels durchlaufen und auf neue Beiträge hin überprüft. Diese Beiträge werden in der Tabelle Items abgelegt.

Das Datenmodell

Das Datenmodell für die Anwendung besteht nur aus den beiden Tabellen Channels und Items.

Tabelle Channels

Legen Sie in Access eine neue Tabelle Channels mit Feldern aus Tab. 2 an.

Feldname

Datentyp

ChannelID

AutoWert, PK

Version

Text [10]

Title

Text [255]

Link

Hyperlink

Description

Memo

Language

Text [10]

Tab. 2: Struktur der Tabelle Channels

Tabelle Items

Die zweite relevante Tabelle benennen Sie mit dem Namen Items und definieren die Felder aus Tab. 3. Die beiden Tabellen werden über eine 1:n-Beziehung verbunden, sodass ein Channel n Items enthalten kann (s. Abb. 2).

Die Oberfläche

Die Oberfläche der Musterlösung besteht aus einem Hauptformular, in das ein Unterformular eingebettet wird (s. Abb. 3).

Feldname

Datentyp

ItemID

AutoWert, PK

ChannelID

Zahl [LongInteger]

Title

Text [255]

Description

Memo

Link

Hyperlink

PubDate

Text [50]

Tab. 3: Struktur der Tabelle Items

Abb. 2: Beziehung zwischen Channels und Items

Abb. 3: Access Feed-Reader in Aktion

Anzeige der Items

Die Items werden in einem Unterformular angezeigt. Um das Formular zu erstellen, gehen Sie wie folgt vor:

  • Legen Sie ein neues Formular auf Basis der Tabelle Items an.
  • Ziehen Sie die Felder Title, PubDate, Description und Link auf das Formular und ordnen Sie die Steuerelemente wie in Abb. 4 an.
  • Ändern Sie einige Eigenschaften des Formulars wie in Tab. 4.
  • Speichern Sie das Formular unter dem Namen SubItems und schließen Sie es. (
  • Abb. 4: Layout des Formulars SubItems

    Eigenschaft

    Wert

    Standardansicht

    Endlosformular

    Breite

    11,5 cm

    Höhe

    2,6 cm

    Hintergrundfarbe

    Weiß

    Tab. 4: Eigenschaften des Unterformulars SubItems

    Das Hauptformular

    Das Hauptformular basiert auf der Tabelle Channels und nimmt neben einigen weiteren Steuerelementen auch das soeben erstellte Unterformular SubItems auf.

    Hinweis

    Die folgende Beschreibung des Formularaufbaus beschränkt sich auf die technisch relevanten Funktionen. Zusätzliche Steuerelemente, die das optische Erscheinungsbild der Anwendung verbessern, können Sie der beigefügten Lösung auf der CD entnehmen. (

    Abb. 5: Das Hauptformular im Entwurf

  • Legen Sie ein neues Formular auf Basis der Tabelle Channels an.
  • Positionieren Sie in der rechten, oberen Ecke eine Schaltfläche mit dem Namen cmdUpdate und der Beschriftung Aktualisieren.
  • Erstellen Sie ein ungebundenes Textfeld mit dem Namen txtURL.
  • Erstellen Sie neben dem Textfeld txtURL eine weitere Schaltfläche mit dem Namen cmdNewChannel und der Beschriftung Anlegen.
  • Ziehen Sie aus der Feldliste die Felder Title, Description, Language, Version und Link auf das Formular und ordnen Sie sie gemäß Abb. 5 an.
  • Stellen Sie sicher, dass in der Toolbox der Zauberstab für den Steuerelement-Assistenten aktiviert ist.
  • Selektieren Sie nun in der Toolbox das Werkzeug Unterformular-/Bericht und ziehen Sie einen Bereich unterhalb der bisher angeordneten Steuerelemente auf. Der Unterformular-Assistent sollte nun starten.
  • Wählen Sie die Option Vorhandenes Formular verwenden und selektieren Sie das bereits erstellte Formular SubItems.
  • Das Unterformular soll ebenfalls den Namen SubItems erhalten.
  • Stellen Sie den Assistenten fertig und öffnen die Eigenschaften des Unterformulars. Stellen Sie sicher, dass die beiden Eigenschaften Verknüpfen von und Verknüpfen nach mit dem Wert ChannelID gefüllt sind.
  • Speichern Sie das Formular unter dem Namen FeedReader. (
  • Funktionen der Lösung

    Die wesentlichen Funktionen der Anwendung werden in einem eigenen VBA-Modul abgelegt. Aus diesem Grund erstellen Sie nun ein neues Modul und speichern es unter dem Namen modRssReader ab.

    Access lernt XML

    Wie bereits erwähnt, sind RSS-Feeds nichts anderes als XML-Dateien, die über das Internet geladen werden. Um diese Dateien mit Access verarbeiten zu können, binden Sie nun zunächst einen Verweis auf die Microsoft-XML-Bibliothek ein. Öffnen Sie das soeben erstellte Modul und wählen Sie im Access-Menü den Eintrag Extras/Verweise aus. Suchen Sie nach einem Eintrag namens "Microsoft XML". Falls Sie Office 2003 einsetzen, sollten Sie den Verweis auf die Version 5.0 auf Ihrem System vorfinden (s. Abb. 6).

    Hinweis

    Falls Sie mehrere Versionen der XML-Bibliothek auf Ihrem System vorfinden, wählen Sie die höchste Version aus. Sie benötigen allerdings mindestens die Version 2.6. Sollte wider Erwarten keine Version auf Ihrem System vorhanden sein, können Sie die XML-Bibliothek bei Microsoft im Downloadbereich finden. (

    Abb. 6: Verweis auf Microsoft XML

    Anlegen eines neuen Channels

    Als erste Funktion implementieren Sie den Abruf eines Channels aus dem Internet (s. Quellcode 1).

    Öffnen Sie das Modul modRssReader und legen Sie die Funktion AddChannel an. Diese Funktion erhält die abzurufende URL als Parameter und liefert das Ergebnis des Abrufs als boolschen Wert zurück.

    Die Variable success dient als Indikator, um festzustellen, ob die Routine fehlerfrei durchgelaufen ist.

    Zugriff auf das Internet

    Mit dem Objekt XMLHTTP der Klasse MSXML2 erfolgt der Zugriff auf das Internet aus Access heraus. Die Open-Funktion der XMLHTTP-Klasse bekommt mit der Methode Get mitgeteilt, dass Daten geladen werden sollen [1].

    Die URL - also die Quelle der Daten - wird der Funktion beim Aufruf als Parameter mitgegeben. Der Parameter False am Ende des Aufrufs bestimmt darüber, ob Access auf die Daten warten soll (synchroner Abruf) oder ob eine andere Funktion die Daten entgegennimmt (asynchroner Abruf). Mit doc.Load XMLHTTP.responseXML wird das XML-Dokument doc mit der Ausgabe des Datenabrufs versorgt. In diesem Schritt werden also die Daten aus dem RSS-Feed in ein lokales XML-Dokument geladen [2].

    Verarbeiten der Channel-Daten

    Die Bedingung [3] prüft, ob die Daten überhaupt korrekt geladen werden konnten und gibt gegebenenfalls eine Fehlermeldung aus. Diese Prüfung ist zwingend notwendig, da sonst im weiteren Verlauf keine Daten extrahiert werden können. Wenn das Dokument beim Laden keinen Fehler verursacht hat, können nun die ersten Daten berücksichtig werden.

    Hinweis

    Es ist zum besseren Verständnis des Quellcodes sehr hilfreich, wenn Sie sich die XML-Struktur des RSS-Feeds parallel zur Erläuterung des Codes ansehen. Sie können dafür die exemplarische Struktur aus Abbildung 1 verwenden. (

    Die Routine prüft zunächst, ob das XML-Dokument in der Basis überhaupt Attribute besitzt.

    Falls das der Fall ist, wird das Attribut mit dem Namen version ausgelesen und in der Variablen Version zwischengespeichert. Ein Zugriff auf das Attribut ohne vorherige Prüfung könnte zu einem Fehler führen und den kompletten Vorgang abbrechen [4].

    Als Nächstes selektiert die Routine das channel-Element und weist es dem XML-Knoten channelNode zu [5]. Falls das geklappt hat, wird ein temporärer XML-Knoten verwendet, um die einzelnen Daten des Channels jeweils mit einer Sicherheitsprüfung abzufragen. Sobald der Titel des Channels bekannt ist, kann die Tabelle Channels auf die Existenz dieses Channels geprüft werden.

    Eine Besonderheit ist die Speicherung des Links in der Datenbank [6]. Es wird in der Tabelle ein Feld vom Typ Hyperlink verwendet.

    Quellcode 1: Anlegen eines Channels

    Public Function AddChannel(url As String) As Boolean

        On Error GoTo errHandler

        Dim success As Boolean

        Dim XMLHTTP As New MSXML2.XMLHTTP

        Dim doc As New MSXML2.DOMDocument

        Dim workingNode As MSXML2.IXMLDOMNode

        Dim nodeList As MSXML2.IXMLDOMNodeList

        Dim channelNode As MSXML2.IXMLDOMNode

        Dim node As MSXML2.IXMLDOMNode

        Dim channelTitle As String

        Dim Version As String

        Dim db As DAO.Database

        Dim rs As DAO.Recordset

        success = True

        XMLHTTP.Open "GET", url, False                                                         '[1]

        XMLHTTP.send

        doc.Load XMLHTTP.responseXML                                                           '[2]

        Set XMLHTTP = Nothing

        If doc.parseError <> 0 Then                                                            '[3]

            MsgBox doc.parseError.reason, vbCritical, "Fehler beim Laden der Feed-Daten"

            success = False

        Else

            If doc.documentElement.Attributes.length > 0 Then                                  '[4]

                Version = doc.documentElement.Attributes.getNamedItem("version").Text

            Else

                Version = "?"   ' RSS-Version kann nicht ermittelt werden

            End If

            Set db = CurrentDb()

            Set channelNode = doc.documentElement.selectSingleNode("channel")                  '[5]

            If Not channelNode Is Nothing Then

                Set workingNode = channelNode.selectSingleNode("title")

                If Not workingNode Is Nothing Then

                    channelTitle = channelNode.selectSingleNode("title").Text

                End If

                Set rs = db.OpenRecordset _                                                    '[6]

                    ("SELECT * FROM Channels WHERE Title = '" + channelTitle + "'")

                If rs.RecordCount = 0 Then

                    rs.AddNew

                    rs.Fields("Title") = channelTitle

                    rs.Fields("Version") = Version

                    rs.Fields("Link") = url & "#" & url & "#"                                  '[7]

                    Set workingNode = channelNode.selectSingleNode("description")              '[8]

                    If Not workingNode Is Nothing Then                                         

                        rs.Fields("Description") = channelNode.selectSingleNode("description").Text

                    End If

                    Set workingNode = channelNode.selectSingleNode("language")                 '[9]

                    If Not workingNode Is Nothing Then

                        rs.Fields("Language") = channelNode.selectSingleNode("language").Text

                    End If

                    rs.Update

                End If

            End If

            '...Ressourcen freigeben

            MsgBox "Der Channel '" & channelTitle & "' wurde aufgenommen", _

                vbInformation, "Erfolgreich!"

        End If  

        '...Fehlerbehandlung

    End Function

    Damit der Anwender später in der Oberfläche einen hier gespeicherten Link auch im Webbrowser öffnen kann, muss der Link in den Eigenschaften Anzeigename und Link gespeichert werden.

    Die beiden Felder haben in diesem Beispiel den identischen Inhalt. Der Wert für den Link wird im Format Anzeigename#Link# abgespeichert [7].

    Die Ermittlung der weiteren Werte erfolgt nun immer nach dem gleichen Verfahren [8]. Zunächst wird versucht, den temporären XML-Knoten workingNode mit der Abfrage der gewünschten Information zu füllen.

    In diesem Beispiel wird versucht, die description auszulesen. Falls der XML-Knoten gefüllt werden konnte, wird der Wert des Knotens aus der Texteigenschaft ausgelesen und in der Tabelle im korrespondierenden Feld gespeichert.

    Das Verfahren wird noch einmal für die Sprache des Channels wiederholt [9].

    Zum Abschluss speichert die Routine das Recordset und gibt die verwendeten Ressourcen wieder frei.

    Quellcode 2: Abruf der Items eines Channels

    Public Function GetAllItems() As Boolean

        On Error GoTo errHandler

        Dim db As DAO.Database

        Dim rsChannels As DAO.Recordset

        Dim counter As Integer

        Dim errMessage As String

        Dim success As Boolean

        success = True

        Set db = CurrentDb

        Set rsChannels = db.OpenRecordset("SELECT ChannelID, Version, Title, Link FROM Channels")

        Do Until rsChannels.EOF

            counter = counter + 1

            Forms!FeedReader.Caption = "Aktualisieren von News-Feed '" _
                + rsChannels.Fields("Title") + "'"

            If Not GetSingleItem(rsChannels.Fields("ChannelID"), _                              '[10]
                HyperlinkPart(rsChannels.Fields("Link"), acDisplayText)) Then

                errMessage = errMessage + "Fehler beim Aktualisieren von News-Feed '" _
                    + rsChannels.Fields("Title") + "'" & vbCrLf

                success = False

            End If

            rsChannels.MoveNext

        Loop

        Forms!FeedReader.Caption = "Access Feed-Reader"

        If success = False Then

            MsgBox errMessage, vbCritical, "Es sind Fehler aufgetreten..."

        End If

        '...Fehlerbehandlung

    End Function

    Abrufen von Items

    Der Abruf der Items erfolgt in einer Schleife je Channel und wird in Quellcode 1 dargestellt.

    Innerhalb der Schleife wird die Funktion
    GetSingleItem aufgerufen, die als Parameter die aktuelle ChannelID und die URL für den Datenabruf benötigt [10].

    Abruf der Items pro Channel

    Die Funktion GetSingleItem arbeitet nach einem vergleichbaren Verfahren wie die in Quellcode 2 beschriebene Funktion zum Anlegen eines Channels.

    Sie finden den gut dokumentierten Quellcode dieser Routine im Modul modRssReader der Beispieldatenbank.

    Formatierung der Item-Werte

    Bei der Anlage eines neuen Items in Quellcode 3 wird bei den Feldern Title und Description die Funktion FormatData aufgerufen. Diese Funktion ersetzt in den Feldern enthaltene Sonderzeichen und HTML-Codierungen, die laut RSS-Spezifikation innerhalb des Contents zulässig sind.

    Ohne weitere Konvertierung kann es passieren, dass HTML-formatierte Inhalte in der Datenbank gespeichert werden. Die Speicherung ist zwar kein technisches Problem, aber die Anzeige der Daten in der Formularoberfläche erfolgt in diesem Fall in reinem HTML-Quellcode.

    Quellcode 3: Die Funktion FormatDate konvertiert HTML-Codes in lesbare Zeichen

    Function FormatData(strIn As String) As String

        strIn = Replace(strIn, "'", "´")

        strIn = Replace(strIn, " ", " ")

        strIn = Replace(strIn, "Ä", "Ä")

        strIn = Replace(strIn, "Ö", "Ö")

        strIn = Replace(strIn, "Ü", "Ü")

        strIn = Replace(strIn, "ä", "ä")

        strIn = Replace(strIn, "ö", "ö")

        strIn = Replace(strIn, "ü", "ü")

        strIn = Replace(strIn, "ß", "ß")

        FormatData = strIn

    End Function

    Quellcode 4: Aktualisieren aller Items

    Private Sub cmdUpdate_Click()

        If GetAllItems() Then

            Me.Requery

            MsgBox "Die Daten wurden aktualisiert", vbInformation, "Erfolgreich"

        End If

    End Sub

    Quellcode 5: Anlegen eines neuen Channels

    Private Sub cmdNewChannel_Click()

        If Len("" & Me.txtURL) = 0 Then

            MsgBox "Unvollständige Angaben", vbCritical, "Bitte geben Sie eine URL ein!"

        Else

            If AddChannel(Me.txtURL) Then

                If GetAllItems() Then

                    Me.Requery

                    DoCmd.GoToRecord , , acLast

                    Me.txtURL = ""

                End If

            End If

        End If

    End Sub

    Die für die Webausgabe formatierten Inhalte sind ohne Weiteres nicht für die Access-Oberfläche geeignet.

    Die Funktion ist nur rudimentär aufgebaut und kann problemlos um beliebige weitere Ersetzungen ergänzt werden.

    Aktivierung der Schaltflächen im Hauptformular

    Nachdem nun der komplette Quellcode zur Verarbeitung der Feeds erstellt wurde, werden noch die beiden Schaltflächen in der Oberfläche des Formulars FeedReader mit Quellcode versehen.

    Schaltfläche "Aktualisieren"

    Öffnen Sie das Formular FeedReader in der Entwurfsansicht und legen Sie dann eine neue Ereignisprozedur für das Click-Ereignis der Schaltfläche cmdUpdate an (s. Quellcode 4).

    In der Ereignisprozedur wird die bereits angelegte Funktion GetAllItems aufgerufen. Nach einer erfolgreichen Aktualisierung wird die Datenquelle des Formulars FeedReader aktualisiert und eine Meldung ausgegeben.

    Anlegen-Schaltfläche

    Die Schaltfläche Anlegen ruft zunächst die Funktion AddChannel auf (s. Quellcode 5). Dabei wird die URL übergeben, die der Anwender in der Oberfläche erfasst hat. Nachdem der neue Channel erfolgreich angelegt wurde, werden mit dem Aufruf von GetAllItems alle neuen Items (also auch die für den neuen Channel) eingelesen. Nach der Aktualisierung der Datenquelle des Formulars wird der Datensatzzeiger auf den letzten, neuen Datensatz positioniert. Sie können somit direkt mit der Ansicht der neuen Items beginnen.

    Möglichkeiten zur Erweiterung

    Das hier vorgestellte System ist im Vergleich zu den spezialisierten RSS-Readern durchaus als rudimentär zu bezeichnen. Die folgende Liste soll Sie inspirieren, das vorhandene Basismodul noch zu erweitern.

    Images

    Der im RSS-Feed eingebettete Bereich Image des Channels bietet die Möglichkeit, ein Logo des abonnierten Channels herunterzuladen und in die Datenbank einzubinden. Den Download des Images können Sie ebenfalls mit dem XMLHTTP-Objekt vornehmen.

    Validierungen

    Die durchgeführten Validierungen der Musterlösung reichen zwar für den Anfang aus, aber Sie sollten nicht vergessen, dass Sie fremde Daten aus dem Internet herunterladen und in Ihrer Datenbank speichern. Eine Erweiterung der Validierungen könnte beispielsweise verhindern, dass Daten im HTML-Format in der Datenbank gespeichert werden.

    Auslesen und Speichern von (optionalen)
    Attributen

    Da RSS ein offenes Format ist, existiert eine Vielzahl Feeds mit Attributen, die über die hier besprochenen Kernattribute hinausgehen. Wäre es nicht gut, wenn diese Attribute auch behandelt werden könnten?

    Suchfunktion (Channel und Item)

    Je mehr Daten Sie speichern, desto eher benötigen Sie eine Suchfunktion. Hier kann Access als Datenbanksystem natürlich sehr guten Support geben.

    Druckfunktion

    Erstellen Sie einen Bericht, der die aktuellen Nachrichten übersichtlich für den Druck aufbereitet. So können Sie Ihre neuesten Nachrichten auch offline ohne PC lesen.

    Automatisierung der neuen Abrufe

    Sie können die Abrufe von neuen Daten mit einem Timer automatisieren und somit ohne direkte Interaktion des Anwenders regelmäßig neue Daten einlesen.

    Alternative Formate

    Neben dem RSS-Format werden immer mehr Feeds auch mit dem Format Atom veröffentlicht. Erstellen Sie doch einfach ein Modul, welches die relevanten Prüfungen für das Atom-Format beherrscht. Sie können damit die "Reichweite" Ihres Newsreaders wesentlich erhöhen, da Ihnen nun neue Feeds zur Verfügung stehen.

    Zusammenfassung

    Dieser Artikel hat Ihnen gezeigt, wie Sie auch mit Hilfe von Access in die Welt der RSS-Feeds eintauchen können. Aufgrund der flexiblen Struktur der Feed-Daten und der schier unendlichen Anzahl Feeds im Internet haben Sie die Möglichkeit, einen echten Mehrwert in vorhandene Anwendungen zu implementieren.

    Weiterführende Links

  • RSS 2.0 Spezifikation: http://blogs.law.har
    vard.edu/tech/rss
  • Atom-Spezifikation: http://www.validome
    .org/blog/news/Item-3
  • Haufe RSS-Feed: http://www.haufe.de/rss
    News
  • Kompletten Artikel lesen?

    Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

    E-Mail:

    Download

    Download

    Die .zip-Datei enthält folgende Dateien:

    RSSNewsReader.mdb

    Beispieldateien downloaden

    © 2003-2015 André Minhorst Alle Rechte vorbehalten.