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 4/2011.

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

Erfahren Sie, wie Sie per Authentifizierung mit OAuth auf die Webdienste von Twitter zugreifen können.

Techniken

VBA, OAuth

Voraussetzungen

Access 2000 und höher

Beispieldateien

TwitterOAuth.mdb

Shortlink

www.access-im-unternehmen.de/790

Authentifizieren mit OAuth am Beispiel von Twitter

André Minhorst, Duisburg

Mit dem Automatisieren des Webdienstes Twitter hat Access im Unternehmen sich bereits beschäftigt. Allerdings hat Twitter mittlerweile die Authentifizierungsmethode gewechselt - auf das sogenannte OAuth. Die Programmierung des Zugriffs ist nicht ganz trivial, vor allem wegen der Erzeugung des notwendigen HMAC-SHA1-Ausdrucks, der zur Authentifizierung der Anfrage dient. Wie dies gelöst wurde und wie der Zugriff auf Twitter nun funktioniert, erfahren Sie in diesem Beitrag.

Im Beitrag Twittern mit Access (www.access-im-unternehmen.de/715) haben wir uns erstmalig mit Twitter beschäftigt. Damals gelang der Zugriff auf den Twitter-Webdienst noch über das einfache Basic Auth.

Im Herbst 2010 hat Twitter dies jedoch auf OAuth umgestellt. Der Beitrag Twittern mit Access, Update (www.access-im-unternehmen.de/774) lieferte eine erste Möglichkeit, mit OAuth zu arbeiten und somit wieder per VBA am Twitter-Geschehen teilnehmen zu können.

Dies gelang über einen externen Anbieter, der die Authentifizierung auf Basis der übermittelten Daten vorgenommen hat. Die Performance leidet hier natürlich, außerdem weiß man nie, ob dieser (kostenlose) Anbieter nicht früher oder später seine Pforten schließt.

Also wirft der vorliegende Beitrag einen etwas genaueren Blick auf OAuth. Vollständig zu entschlüsseln brauchten wir dies nicht - im Internet fand sich der eine oder andere Codeschnipsel, der die Lösung erleichterte.

Grundlagen

Grundlegende Informationen zu Twitter finden Sie im Beitrag Twittern mit Access (www.access-im-unternehmen.de/715) und natürlich auf twitter.com selbst.

Voraussetzungen

Für den Zugriff auf die Twitter-Schnittstelle per OAuth-Authentifizierung benötigen Sie einige Informationen. Als Erstes müssen Sie einen Twitter-Account anlegen, was Sie unter twitter.com erledigen können (siehe Abb. 1). Im nächsten Schritt bestätigen Sie dann die Benutzungsrichtlinien und erstellen Ihr Konto. Sie können dann einige Benutzer auswählen, denen Sie folgen und deren Statusmeldungen Sie lesen möchten. Sie erhalten eine Bestätigungs-E-Mail von Twitter, die einen Link zum Abschließen des Registrierungsvorgangs enthält.

pic001.png

Abb. 1: Registrieren bei twitter.com

Anwendung erstellen

Wechseln Sie nach erfolgter Registrierung zu dev.twitter.com. Klicken Sie dort oben auf Your Apps. Es erscheint die Übersicht der Anwendungen des aktuellen Kontos. Wenn Sie noch keine Anwendung erstellt haben, erledigen Sie dies jetzt mit einem Klick auf den Link Register a new application (s. Abb. 2).

pic002.png

Abb. 2: Erstellen einer neuen Anwendung

Im folgenden Dialog tragen Sie nun die Eigenschaften der Anwendung ein (s. Abb. 3):

pic003.png

Abb. 3: Eingeben der Anwendungsdaten

  • Application Name: Name der Anwendung, darf nicht Twitter enthalten
  • Description: Beschreibung
  • Application Website: Webadresse, unter der Benutzer die Anwendung herunterladen können, darf nicht leer sein
  • Application Type: Anwendungstyp, hier Client auswählen
  • Default Access Type: Zugriffsart, hier Read, Write And Direct Messages auswählen

Nach der Eingabe des Captcha-Codes registriert Twitter Ihre Anwendung. Auf der folgenden Seite erhalten Sie dann wichtige Informationen, die Sie später etwa zum Authentifizieren vor dem Zugriff auf twitter.com via VBA benötigen (s. Abb. 4).

pic005.png

Abb. 4: Informationen zur Authentifizierung

Wo Sie gerade einmal hier sind: In der Beispieldatenbank zu diesem Beitrag finden Sie eine Tabelle namens tblApplications (s. Abb. 5). Dort werden Sie von der gleich im Anschluss vorgestellten Lösung aus zugreifen. Die Tabelle speichert alle notwendigen Informationen der Anwendung. Die Seite aus Abb. 4 liefert beispielsweise die Werte für die Felder ConsumerKey und ConsumerSecret. Für ApplicationName können Sie den Namen der Anwendung eintragen (dieses Feld dient lediglich der Identifizierung der zugeordneten Anwendung und hat keine Bedeutung für die Anwendung). SignatureMethod erhält den Wert HMAC-SHA1, für die Version legen Sie den Wert 1.0 fest.

pic004.png

Abb. 5: Tabelle zum Speichern der Zugriffsdaten

Die beiden übrigen Werte Token und TokenSecret erhalten Sie, wenn Sie rechts auf den Link My Access Token klicken. Tragen Sie die beiden Werte aus der nun erscheinenden Übersicht (s. Abb. 6) in die Tabelle tblApplications ein.

pic006.png

Abb. 6: Ermitteln von Access Token und Secret

Damit sind die Arbeiten auf twitter.com abgeschlossen - später werden Sie hier allerdings nachschauen, ob die von Access aus gesendeten Statusmeldungen auch dort angekommen sind.

Basisausstattung

Um das Rad nicht neu zu erfinden, bauen wir die Lösung dieses Beitrags auf der aus Twittern mit Access (www.access-im-unternehmen.de/715) auf. Dort hatten wir bereits ein Formular programmiert, das vorhandene Statusmeldungen anzeigte und das Absenden neuer Statusmeldungen ermöglichte. Außerdem konnten Sie dort vorhandene Statusmeldungen löschen (s. Abb. 7).

pic007.png

Abb. 7: Die Benutzeroberfläche des Beispielformulars

Ein wichtiger Unterschied zur damaligen Lösung besteht darin, dass das Kombinationsfeld nicht mehr zur Auswahl eines Benutzers dient, sondern zur Ermittlung der zu verwendenden Anwendungsdaten. Wenn Sie mehrere Applications unter Ihrem Account anlegen möchten, können Sie die damit zusammenhängenden Daten in verschiedenen Datensätzen der Tabelle tblApplications speichern.

Grundsätzlich ist die Beispiellösung als Single-User-Lösung zu betrachten. Sie können damit zwar verschiedene Daten von Twitter lesen (wie Benutzerdaten, Tweets, Follower et cetera), aber nur Statusmeldungen für den Benutzer erstellen oder löschen, in dessen Kontext Sie die Application bei Twitter erstellt haben.

Grundsätzlich ist es möglich, mit einer Anwendung auch die Daten anderer Benutzer zu ändern - das wäre interessant, wenn Sie die Beispiellösung nicht nur für sich selbst verwenden wollen, sondern diese an andere Benutzer weitergeben möchten.

Diese melden sich dann mit ihren eigenen Daten an und können selbst Statusmeldungen erstellen und löschen, Direktnachrichten versenden und so weiter. Der dazu nötige Workflow ist allerdings noch ein wenig aufwendiger als der nachfolgend vorgestellte. Gegebenenfalls gehen wir in einem weiteren Beitrag auf diese Erweiterung ein.

Formular der Beispiellösung

Das Formular stellt also zunächst ein Kombinationsfeld zur Auswahl der zu verwendenden Anwendungsdaten zur Verfügung, das mit den ersten beiden Feldern der Tabelle tblApplications als Datensatzherkunft gefüllt ist.

Beim Öffnen des Formulars stellt die folgende, durch das Ereignis Beim Laden ausgelöste Prozedur zunächst das Kombinationsfeld auf den ersten Eintrag ein.

Außerdem ruft sie die Prozedur TweetsLaden auf, die für das Füllen des Listenfeldes mit Ihren letzten Statusmeldungen verantwortlich ist:

Private Sub Form_Load()

    Me!cboApplication = _

    Me!cboApplication.ItemData(0)

    Call TweetsLaden

    End Sub

Die Prozedur TweetsLaden ruft wiederum eine Funktion namens GetTweets_Listbox auf, die eine Zeichenkette mit den im Listenfeld anzuzeigenden Daten zurückliefert. Das Ergebnis landet umgehend in der Eigenschaft RowSource des Listenfelds und sieht beispielsweise so aus:

"85580978990493696";"28.06.2011 05:31:10";"Beispielstatusmeldung";"83562060692209664";"22.06.2011 15:48:42";"Noch eine Beispielstatusmeldung";...

Danach markiert die Prozedur den ersten Eintrag des Listenfeldes und ruft die Routine TweetAnzeigen auf:

Private Sub TweetsLaden()

    Me!lstTweets.RowSource = GetTweets_Listbox(Me!cboApplication)

    Me!lstTweets = Me!lstTweets.ItemData(0)

    Call TweetAnzeigen

    End Sub

TweetAnzeigen hat nichts weiter zu tun, als das Datum der aktuell markierten Statusmeldung und ihren Text aus der Datensatzherkunft des Listenfeldes auszulesen und in die beiden Textfelder txtDatum und txtTweet einzutragen:

Private Sub TweetAnzeigen()

    Me!txtDatum = Me!lstTweets.Column(1)

    Me!txtTweet = Me!lstTweets.Column(2)

    End Sub

Ein Klick auf einen der übrigen Einträge im Listenfeld löst die folgende Ereignisprozedur aus, die ebenfalls die Prozedur zum Anzeigen der Details der Statusmeldung aufruft:

Private Sub lstTweets_AfterUpdate()

    TweetAnzeigen

    End Sub

Das Aktualisieren des Listenfeldes erreicht der Benutzer durch einen Klick auf die Schaltfläche cmdTweetsLaden:

Private Sub cmdTweetsLaden_Click()

    Call TweetsLaden

    End Sub

Neue Statusmeldungen schreibt der Benutzer in das Textfeld txtNeuerTweet. Damit der Benutzer immer weiß, wie viele Zeichen noch verbleiben, löst das Eingeben eines Zeichens jeweils das Ereignis Bei Änderung aus. Die entsprechende Ereignisprozedur sieht wie folgt aus:

Private Sub txtNeuerTweet_Change()

    Dim intZeichenUebrig As Integer

    Dim intPos As Integer

    intZeichenUebrig = _

    140 - Len(Me!txtNeuerTweet.Text)

    If intZeichenUebrig < 0 Then

        intPos = Me!txtNeuerTweet.SelStart

        Me!txtNeuerTweet = strTweet

        Me!txtNeuerTweet.SelStart = intPos - 1

    Else

        Me!txtZeichenUebrig = intZeichenUebrig

        strTweet = Me!txtNeuerTweet.Text

    End If

    End Sub

Sie ermittelt aus der aktuellen Textlänge die verbleibenden Zeichen. Ist die Anzahl der Zeichen größer oder gleich 0, wird der aktuelle Text in der Variablen strTweet gespeichert. Sollte diese Anzahl kleiner als 0 werden, stellt die Prozedur den Text vor der Eingabe dieses Zeichens aus der Variablen strTweet wieder her. Zum Absenden der Statusmeldung klickt der Benutzer auf die Schaltfläche cmdTweetSenden. Diese ruft die Funktion NeuerStatus auf, die nach dem erfolgreichen Versenden die ID der neuen Statusmeldung zurückliefert. Ist dies der Fall, sorgt ein erneuter Aufruf der Prozedur TweetsLaden dafür, dass das Listenfeld der zuletzt erstellten Statusmeldungen aktualisiert wird:

Private Sub cmdTweetSenden_Click()

    Dim strID As String

    strID = NeuerStatus(Me!cboApplication, _

    Me!txtNeuerTweet)

    If Len(strID) > 0 Then

        Call TweetsLaden

    End If

    End Sub

Fehlt nur noch das Löschen der aktuell markierten Statusmeldung. Dies wird durch einen Klick auf die Schaltfläche cmdTweetLoeschen erreicht.

Die folgende Prozedur ruft dann die Funktion StatusLoeschen auf, die nach erfolgter Löschung den Wert True zurückliefert. Dies wird durch das Aktualisieren des Listenfeldes quittiert:

Private Sub cmdTweetLoeschen_Click()

    If StatusLoeschen(Me!cboApplication, _

    Me!lstTweets) = True Then

    Call TweetsLaden

End If

End Sub

Dies zur Funktionsweise des Formulars - in den folgenden Abschnitten schauen wir uns an, was unter der Haube passiert, sprich: Wie der Zugriff auf die Twitter-API vonstatten geht.

Grundlegender Zugriff auf Twitter

Um es vorwegzunehmen: Der Zugriff auf die Twitter-API mit der Authentifizierung per OAuth ist sehr aufwendig im Vergleich mit der zuvor möglichen Anmeldung per Basic Auth.

Für den Zugriff benötigen Sie zunächst einmal eine Reihe Parameter, die zum größten Teil aus der Tabelle tblApplications bezogen werden können. Zusätzlich benötigen Sie den Link für den Zugriff auf die gewünschte API-Funktion und die Zugriffsart (POST/GET).

Den Link für den Zugriff entnehmen Sie der Dokumentation, für das Versenden einer neuen Statusmeldung etwa unter http://dev.twitter.com/doc/post/statuses/update. Auf dieser Seite finden Sie am rechten Rand Links zu allen möglichen Aktionen, die Sie mit der Twitter-API ausführen können.

Für das Aktualisieren des Status rufen Sie beispielsweise die folgende Adresse auf:

http://api.twitter.com/[version]/statuses/update.[format]

Die Platzhalter [version] und [format] ersetzen wir in der Beispiellösung durch 1 und xml. In der Dokumentation erfahren Sie auch, dass das Aktualisieren des Status eine POST-Anfrage nötig macht und dass eine Authentifizierung nötig ist.

Die API-Funktion erwartet außerdem einen Parameter namens status, der den Text der neuen Statusmeldung enthält. Der nackte Aufruf zum Ändern des aktuellen Status sieht also etwa so aus:

http://api.twitter.com/1/statuses/update.xml?status=Dies%20ist%20ein%20neuer%20Status

Leer- und Sonderzeichen in der als Parameter übergebenen Statusmeldung werden durch URL-encodierte Zeichen ersetzt, beim Leerzeichen etwa durch %20. Dies entspricht dem ASCII-Code des Leerzeichens (32) in hexadezimaler Schreibweise (20) plus einem vorangestellten Prozentzeichen, damit die API-Funktion die encodierten Zeichen erkennen und entsprechend zurückverwandeln kann.

Nun wäre es leicht, diesen API-Aufruf abzusetzen.Dies ginge beispielsweise so:

Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")

With objXMLHTTP

.Open "POST", " http://api.twitter.com/1/

statuses/update.xml?status=

Dies%20ist%20ein%20neuer%20Status", False

.Send

Debug.Print .responseText

End With

Das Problem ist nur, dass die Twitter-API Sie ohne vorherige Authentifizierung per OAuth mit einem lapidaren Could not authenticate you wieder nach Hause schickt.

Authentifizieren mit OAuth

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:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.