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

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

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:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 6/2002.

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

Google per Web-Service abfragen

Christoph Spielmann, Düsseldorf

Die Kommunikation zwischen Anwendungen spielt bei modernen Datenbanken eine wesentliche Rolle. Häufig ist es beispielsweise notwendig, dass eine Anwendung auf eine Datenbank zugreifen soll, hierbei jedoch keinen direkten Zugriff auf die Tabellen haben darf. Zudem kann der Fall eintreten, dass die Datenbank nicht auf dem lokalen PC oder im lokalen Netzwerk, sondern irgendwo im Internet untergebracht ist. Um hier eine Kommunikation zu ermöglichen, bietet sich der Einsatz von Web-Services an. Dieser Artikel zeigt Ihnen, wie Sie mit Access auf den Web-Service der Suchmaschine "Google" zugreifen und die abgefragten Suchergebnisse in einer Datenbank speichern.

SOAP und XML

Bei Web-Services handelt es sich um Anwendungen, die ihre Dienste über ein standardisiertes Protokoll zur Verfügung stellen. Hinter diesem Protokoll verbirgt sich nichts anderes als eine Textdatei im XML-Format.

Der Hintergrund ist, dass XML-Dateien von modernen Browsern wie herkömmlicher HTML-Code interpretiert werden können. Dementsprechend gelangen XML-Dateien z. B. problemlos durch Firewalls, sofern diese für den normalen Transfer von Web-Seiten freigeschaltet sind. Die Kommunikation findet über den Port 80 statt, der für Web-Server reserviert ist.

Nun genügt es nicht zu definieren, dass die Daten per XML übertragen werden. Wichtig ist außerdem noch, dass eine spezielle XML-Struktur zum Einsatz kommt. Diese Strukturdefinition trägt den Namen SOAP (Simple Object Access Protocol). Bei der Entwicklung von SOAP war das Ziel, die Kommunikation für den Benutzer möglichst einfach zu gestalten. Zudem sollte SOAP alle möglichen Programmier-Werkzeuge und Plattformen (z. B. Windows, Linux oder Macintosh) unterstützen.

Herausgekommen ist ein standardisiertes Protokoll zum Abruf von Objektmethoden über das Internet. Sie kennen dies bereits von VBA und Access: Wenn Sie ein Klassenmodul namens clsDienst in Ihrer Anwendung haben, können Sie die darin enthaltene Methode Start über die folgende Syntax aufrufen:

Dim MeinDienst as new clsDienst

MeinDienst.Start

Ähnlich einfach ist der Aufruf mit Hilfe von SOAP, wenn sich die Klasse Dienst auf einem Rechner im Internet befindet.

Installieren des Web-Service-
Toolkits

Da Web-Services eine relativ neue Technologie sind, stellt Access noch keine eingebauten Funktionen zum Aufruf von Web-Services zur Verfügung. Sie benötigen dafür ein spezielles Toolkit namens Microsoft Office XP Web Services Toolkit 2.0. Um die hier vorgestellte Lösung nachvollziehen zu können, müssen Sie dieses Toolkit unter der folgenden Adresse herunterladen:

Abb. 1: Registrierung bei Google

http://download.microsoft.com/download/OfficeXPDev/Install/2.0/W982KMeXP/DE/setup.exe

Achten Sie darauf, dass Sie nicht versehentlich die Version 1.0 herunterladen, auf die Microsoft noch von den Office-Startseiten verlinkt.

Hinweis

Von dem Zusatz XP sollten Sie sich übrigens nicht verwirren lassen: Das Toolkit funktioniert sowohl mit Access 2000 als auch mit Access XP. Ältere Versionen wie z. B. Access 97 werden allerdings nicht unterstützt. (

Nach dem Download starten Sie die EXE-Datei und installieren das Toolkit.

Registrierung bei Google

Wie bereits erwähnt, greift das hier vorgestellte Beispiel auf die Suchmaschine Google zu. Die Google-Betreiber möchten hierbei sicherstellen, dass der Zugriff nicht missbraucht wird.

Schließlich wäre es denkbar, eine eigene Suchmaschine im Internet zu veröffentlichen, die in Wirklichkeit per Web-Service auf Google zugreift. Aus diesem Grund ist eine vorhergehende Registrierung bei Google erforderlich, bei der Sie einen Schlüssel erhalten. Dieser Schlüssel berechtigt Sie, täglich maximal 1000 Suchergebnisse abzufragen, was in der Praxis mehr als genug sein dürfte.

Zur Durchführung der Registrierung gehen Sie wie folgt vor:

  • Rufen Sie den Internet-Explorer auf und wechseln Sie zu der Seite http://www.google.de/apis/.
  • Klicken Sie auf create a google account.
  • Geben Sie Ihre E-Mail-Adresse und ein beliebiges Passwort ein.
  • Erzeugen Sie Ihr Konto über die entsprechende Schaltfläche.
  • Warten Sie auf die Bestätigungs-E-Mail, die Google automatisch an die angegebene Adresse sendet.
  • Klicken Sie den in der Bestätigungs-E-Mail enthaltenen Link an. Hierdurch teilen Sie Google mit, dass Sie eine korrekte E-Mail-Adresse angegeben haben.
  • Wechseln Sie wieder zu der Seite http://www.google.de/apis/ und klicken Sie erneut auf create a google account.
  • Klicken Sie anschließend auf Sign in here und geben Sie Ihre E-Mail-Adresse und das Passwort an. Bestätigen Sie mit Sign in (s. Abb. 1). (
  • Nach dem letzten Schritt erhalten Sie von Google eine erneute E-Mail, die Ihren Schlüssel zum Zugriff auf den Web-Service enthält. Bewahren Sie diesen gut auf.

    Abb. 2: Der Startbildschirm des Web-Service-Toolkits

    Abb. 3: Die Suche nach Web-Services zum Thema Wetter.

    Test eines Web-Services

    Um nun eine Verbindung zu Google herzustellen, legen Sie zunächst eine neue Access-Datenbank an. Klicken Sie anschließend auf Module und danach auf Neu, um ein neues Modul anzulegen. Dieser Schritt ist erforderlich, da die Funktionen des Web-Service-Toolkits nur vom VBA-Editor aus zur Verfügung stehen.

    Nachdem Sie nun den VBA-Editor auf dem Bildschirm haben, wählen Sie den Menüpunkt Extras/Webdienstverweise aus. Dieser Menüpunkt startet das Toolkit (s. Abb. 2).

    Auf der linken Seite des Startfensters haben Sie die Möglichkeit, nach Web-Services zu suchen. Hierbei kommen spezielle Suchmaschinen zum Einsatz. Wenn Sie beispielsweise unter Schlüsselwörter den Text weather eingeben und anschließend auf Suchen klicken, erscheint einige Zeit später eine Liste aller Web-Services zum Thema Wetter (s. Abb. 3). Voraussetzung für die erfolgreiche Suche ist natürlich, dass Sie mit dem Internet verbunden sind.

    Anhand der Liste können Sie bereits die Struktur der einzelnen Dienste erkennen. Der Dienst WeatherRetriever unterstützt beispielsweise zwei Methoden namens GetTemperature und GetWeather. Um den Web-Service auszuprobieren, markieren Sie diesen in der Liste und klicken auf Testen.

    Das Toolkit öffnet nun den Internet-Explorer und ruft eine spezielle Seite auf, die der Anbieter zum Test des Web-Services zur Verfügung stellt. Auf dieser Seite werden auch die beiden Methoden GetTemperature und GetWeather aufgeführt (s. Abb. 4).

    Hinweis

    Dieser Web-Service wurde mit Hilfe der Microsoft .NET-Technologie entwickelt. Wenn Sie einen mit einem anderen Werkzeug entwickelten Web-Service aufrufen, hat die Testseite einen anderen Aufbau. (

    Abb. 4: Die Hauptseite zum Test eines Web-Service

    Abb. 5: Auswahl des Ortes zur Ermittlung der Temperatur

    Abb. 6: Das Ergebnis der Temperatur-Abfrage

    Abb. 7: Die URL des Google Web-Service

    Klicken Sie auf der Testseite auf GetTemperature. Sie gelangen hierdurch auf eine zweite Seite, in der Sie den US-ZIP-Code des Ortes eingeben können, von dem Sie die aktuelle Temperatur wissen möchten. Geben Sie hier 20000 ein und bestätigen Sie mit Invoke (s. Abb. 5).

    Es erscheint eine weitere Web-Seite, die das Ergebnis in Form einer XML-Datei anzeigt (s. Abb. 6).

    Das Ergebnis wird in Fahrenheit ausgegeben.

    Verbindungsauf-
    nahme mit Google

    Nachdem Sie nun den ersten Test mit einem Web-Service durchgeführt haben, soll nun eine Verbindung zu Google hergestellt werden. Zu diesem Zweck klicken Sie in dem Startbildschirm des Web-Service-Toolkits auf Webdienst-URL und geben folgende URL ein (s. Abb. 7). Beachten Sie dabei Groß- und Kleinschreibung:

    http://api.google.com/GoogleSearch.wsdl

    Dieser Link zeigt auf eine WSDL-Datei (Web Service Definition Language), die den Aufbau und die Struktur des Web-Services beschreibt. Hier ist beispielsweise hinterlegt, welche Parameter zur Suche in Google erforderlich sind und wie das Suchergebnis strukturiert ist.

    Klicken Sie nach der Eingabe auf Suchen und warten Sie, bis der Web-Service in der rechten oberen Liste erscheint. Hier kreuzen Sie den Web-Service an und klicken anschließend auf Hinzufügen (s. Abb. 8).

    Access liest nun die WSDL-Datei ein und erstellt daraus automatisch eine Reihe von Klassen-modulen in Ihrer Datenbank, welche die Kommunikation mit dem Web-Service übernehmen. Diese Klassen werden auch als Proxies bezeichnet. Sie erzeugen unter Access das Objektmodell, das dem des Web-Service von Google entspricht und ermöglichen so eine einfache Nutzung von Access aus.

    Abb. 8: Auswahl des Google Web-Service

    Hinweis

    Nach der Anlage sollten Sie alle Proxy-Klassen speichern. Übernehmen Sie hierbei die von dem Web-Service-Toolkit vorgegebenen Namen. (

    Um nun sicherzustellen, dass der Web-Service korrekt aufgerufen werden kann, legen Sie in dem neuen Modul die folgende Testprozedur an:

    Sub Test()

        Const c_Key = "GOOGLEKEY"

        Dim GoogleService As New _
            clsws_GoogleSearchService

        GoogleService.wsm_doGoogleSearch _
            c_Key, "Access", 1, 10, False, _
            "", True, "", "", ""

    End Sub

    Beachten Sie hierbei, dass Sie anstelle von GOOGLEKEY den Schlüssel angeben, den Sie von Google erhalten haben. Danach starten Sie die Prozedur, indem Sie beispielsweise im Direktfenster den Ausdruck Test eingeben.

    Direkt nach dem Start legt die Prozedur eine neue Instanz des Objekts clsws_GoogleSearchService an. Hierbei handelt es sich um das Haupt-Objekt des Web-Services, das vom Web-Service-Toolkit automatisch angelegt wurde. Anschließend erfolgt der Start des Suchvorgangs. In diesem Beispiel wird nach dem Stichwort Access gesucht. Die Bedeutungen der einzelnen Parameter entnehmen Sie der Tabelle 1. Eine vollständige Beschreibung der Parameter finden Sie in der Referenz des Google SDKs, das Sie ebenfalls auf der Google-Seite herunterladen können.

    Parameter

    Funktion

    Key

    Ihr Schlüssel

    Q

    Der Suchbegriff. Hierbei können Sie die von Google her bekannten Suchausdrücke mit AND, OR, "+" und "-" verwenden.

    Start

    Index des ersten Ergebnisses

    maxResults

    Maximale Anzahl der Ergebnisse. Diese ist auf 10 begrenzt. Indem der Service jedoch mehrmals hintereinander mit anderen Start-Indizes aufgerufen wird, können jedoch bis maximal 1000 Suchergebnisse pro Tag abgerufen werden.

    Filter

    Er bestimmt, ob ähnliche Seiten des gleichen Hosts ausgeblendet werden sollen.

    Restrict

    Hiermit kann das Suchergebnis beispielsweise auf bestimmte Länder eingeschränkt werden.

    safeSearch

    Filtert Inhalte für Erwachsene aus dem Suchergebnis.

    Lr

    Limitiert das Suchergebnis auf eine bestimmte Sprache.

    Ie

    Dieser Parameter ist für spätere Zwecke reserviert. Er hat momentan noch keine Funktion.

    oe

    Dieser Parameter ist ebenfalls reserviert.

    Tab. 1: Suchparameter

    Tritt während der Abarbeitung der Prozedur kein Fehler auf, war der Aufruf des Web-Service erfolgreich.

    Datenstruktur der
    Beispieldatenbank

    Zur Anzeige des Suchergebnisses bietet es sich natürlich an, dieses vorher in eine Access-Tabelle einzulesen und dann innerhalb eines Formulars anzuzeigen. Die Beispieldatenbank zu diesem Artikel enthält zu diesem Zweck zwei Tabellen.

    Die Tabelle tblQueries

    Die Tabelle tblQueries speichert komplette Suchanfragen. Die Tabelle enthält dafür eine QueryID sowie den gewünschten Suchausdruck. Zusätzlich wird die maximale Anzahl der Suchergebnisse gespeichert. Es können also mehrere Suchanfragen vorbereitend in der Tabelle hinterlegt werden, die dann beispielsweise in der Mittagspause als Batch abgearbeitet werden.

    Nach Abschluss einer einzelnen Suchanfrage werden pro Datensatz das Ausführungsdatum, die Anzahl der gefundenen Sucheinträge sowie die Anzahl der verfügbaren Sucheinträge ergänzt. Letzteres ist beispielsweise bei der Suche nach Access sinnvoll, bei der Google ca. 58.400.000 Web-Seiten findet, aber von Access eventuell nur die ersten 100 Ergebnisse abgerufen wurden.

    Eine vollständige Beschreibung der Felder finden Sie in Tabelle 2.

    Feld

    Beschreibung

    QueryID

    Primärschlüssel

    QueryString

    Suchtext

    ExecutedOn

    Zeitpunkt der Suche

    MaxResults

    maximal gewünschte Anzahl der Suchergebnisse

    Found

    Anzahl der tatsächlich zurückgelieferten Suchergebnisse

    Stimated

    Von Google geschätzte Anzahl aller Seiten mit dem angegebenen Suchwort

    Tab. 2: Aufbau der Tabelle tblQueries

    Die Tabelle tblQueryResults

    Die Tabelle tblQueryResults nimmt die einzelnen Suchergebnisse auf. Pro Suchergebnis werden hierbei ein Titel, eine Zusammenfassung sowie eine URL gespeichert.

    Über das Feld QueryID steht diese Tabelle in einer 1:n-Beziehung mit der Tabelle tblQueries, sodass pro Suchanfrage mehrere Ergebnisse gespeichert werden können.

    Abb. 9 zeigt die beiden Tabellen im Beziehungen-Fenster. Den Aufbau der Tabelle entnehmen Sie Tabelle 3.

    Abb. 9: Das Datenmodell der Beispieldatenbank

    Feld

    Beschreibung

    QueryResultID

    Primärschlüssel

    QueryID

    Fremdschlüssel auf die Tabelle tblQueries

    Title

    Titel der gefundenen Seite

    Summary

    Zusammenfassung der Teststelle, an der der Suchbegriff aufgetaucht ist

    URL

    URL der gefundenen Seite

    Tab. 3: Aufbau der Tabelle tblQueries

    Suchergebnis in die Datenbank
    einlesen

    Das Einlesen des Suchergebnisses in die Tabellen wird von dem Klassenmodul clsQuery bewerkstelligt. Diese Klasse enthält die Methode PerformAllOpenQueries (s. Quellcode 1).

    Public Sub PerformAllOpenQueries()

        Dim QueryData As New ADODB.Recordset

        With QueryData

            Set .ActiveConnection = _
                CurrentProject.Connection

            .LockType = adLockOptimistic

            .CursorLocation = adUseClient

            .CursorType = adOpenDynamic

            .Source = "SELECT * FROM tblQueries " _
                 & "WHERE ExecutedOn IS NULL"

            .Open

            While Not .EOF

                Me.PerformQuery .Fields("QueryID")

                .MoveNext

            Wend

        End With

    End Sub

    Quellcode 1

    Public Sub PerformQuery(QueryID As Long)

        Dim QueryData As New ADODB.Recordset

        With QueryData

            Set .ActiveConnection = _
                CurrentProject.Connection

            .LockType = adLockOptimistic

            .CursorLocation = adUseClient

            .CursorType = adOpenDynamic

            .Source = "SELECT * FROM tblQueries " _
                 & "WHERE QueryID=" & QueryID

            .Open

        End With

        Dim ResultData As New ADODB.Recordset

        With ResultData

            Set .ActiveConnection = _
                CurrentProject.Connection

            .LockType = adLockOptimistic

            .CursorLocation = adUseClient

            .CursorType = adOpenDynamic

            .MaxRecords = 1

            .Source = "SELECT * FROM tblQueryResults " _
                 & "WHERE False"

            .Open

        End With

    Quellcode 2 (erster Teil)

    Durchführen einer einzelnen Suche

    Die Methode macht nichts anderes, als alle noch nicht durchgeführten Suchvorgänge abzufragen und diese zu starten.

    Der Start der Suche erfolgt durch Aufruf der Methode PerformQuery, wobei hierbei die ID des Suchvorgangs übergeben werden muss. Den Aufbau der Methode PerformQuery finden Sie in Quellcode 2.

    Zunächst einmal öffnet die Prozedur die betreffende Suchanfrage aus der Tabelle tblQueries , um auf die Suchparameter - also z. B. den Suchausdruck - zugreifen zu können. Hinterlegt werden die Daten in dem Recordset QueryData.

    Danach wird auf der Basis der Tabelle tblQueryResults ein leeres Recordset namens ResultData geöffnet. Hier wird später das Suchergebnis abgelegt.

    Nach der Definition der beiden Recordsets ist eine Schleife positioniert, die den Web-Service unter Umständen pro Suchanfrage mehrmals ausführt.

    Dies ist erforderlich, da Google pro Anfrage maximal 10 Suchergebnisse zurückliefert. Wenn Sie dagegen beispielsweise 100 Einträge als Ergebnis zurückgeliefert haben möchten, müssen Sie den Service zehnmal starten und bei jedem Aufruf den Startindex um 10 erhöhen. Der erste Start würde also mit dem Startindex 0 erfolgen und die Ergebnisse 0 bis 9 zurückliefern. Der zweite Start erfolgt dann mit dem Startindex 10 und liefert die Ergebnisse 10 bis 19 zurück. Auf diese Weise können Sie beliebig große Ergebnismengen abrufen, solange Sie sich an die Beschränkung von 1000 Abrufen pro Tag halten.

        Dim Index As Long

        Dim FoundCount As Long

        Dim GoogleService As New clsws_GoogleSearchService

        Dim Result As struct_GoogleSearchResult

        Dim ResultElement As struct_ResultElement

        Dim ResultIndex As Long

        For Index = 0 To QueryData.Fields("MaxResults") \ 10 - 1

            RaiseEvent OnStatusChange("Suche nach '" & QueryData.Fields("QueryString") _
                & "' (" & CStr(FoundCount) & " von " & QueryData.Fields("MaxResults") _
                & ")")

            Set Result = GoogleService.wsm_doGoogleSearch(c_Key, _
                QueryData.Fields("QueryString"), _

                Index * 10, 10, False, "", True, "", "", "")

            ResultIndex = 0

            For ResultIndex = 0 To Result.endIndex - Result.StartIndex

                Set ResultElement = Result.resultElements(ResultIndex)

                With ResultElement

                    ResultData.AddNew

                        ResultData.Fields("QueryID") = QueryID

                        ResultData.Fields("Title") = StripHTML(.title)

                        ResultData.Fields("Summary") = StripHTML(.summary)

                        ResultData.Fields("URL") = .URL

                    ResultData.Update

                    FoundCount = FoundCount + 1

                End With

            Next

            If Result.endIndex - Result.StartIndex < 9 Then Exit For

        Next Index

        QueryData.Fields("ExecutedOn") = Now

        QueryData.Fields("Found") = FoundCount

        QueryData.Fields("Estimated") = Result.estimatedTotalResultsCount

        QueryData.Update

    End Sub

    Quellcode 2 (Fortsetzung)

    Innerhalb der Schleife erfolgt dann der eigentliche Suchaufruf mit der bereits vorgestellten Methode wsm_doGoogleSearch. Das Ergebnis wird in die Variante Result eingelesen, die mit dem Datentyp struct_GoogleSearchResult deklariert ist. Diese wurde ebenfalls in Form einer Klasse vom Web-Service-Toolkit erstellt.

    Abb. 10: Das Suchergebnis im Formular

    Die wichtigste Eigenschaft dieser Klasse lautet resultElements. In diesem Variant-Array sind die einzelnen Suchergebnisse in Form von Objekten des Typs struct_ResultElement hinterlegt.

    Auch diese Klasse wurde vom Web-Service-Toolkit erzeugt. Die Ergebnisse dieses Arrays werden wieder mit Hilfe einer Schleife ausgelesen und in die entsprechenden Felder der Tabelle geschrieben.

    Private Function StripHTML(Text As _
        String) As String

        Dim res As String

        res = Text

        res = Replace(res, "</b>", "")

        res = Replace(res, "<b>", "")

        res = Replace(res, "<b>...</b>", "")

        StripHTML = Trim(res)

    End Function

    Quellcode 3

    Da das Suchergebnis primär zur Anzeige innerhalb eines Web-Browsers vorgesehen ist, enthält der Text teilweise HTML-Formatierungs-Tags. Das Tag <b> stellt einen Text beispielsweise fett dar. Diese Tags werden von der Funktion StripHTML entfernt (s. Quellcode 3).

    Nach Abschluss der Suche werden noch die fehlenden Angaben der Tabellen tblQueries ergänzt.

    Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

    Sind Sie Abonnent?Jetzt einloggen ...
     

    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:

    Verwandte Beiträge:

    eBay-Artikel einstellen mit Access

    Amazon Webservices per VBA nutzen

    Google Earth ferngesteuert, Teil II

    © 2003-2015 André Minhorst Alle Rechte vorbehalten.