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/2013.

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

Facebook mit VBA programmieren

Facebook hat zum Zeitpunkt der Erstellung dieses Beitrags bereits mehr als 25 Millionen aktive Nutzer allein in Deutschland. Gute Chancen also, dass Sie unter den Nutzern sind – und Zeit, sich einmal mit der Programmierschnittstelle von Facebook zu beschäftigen. Was viele nämlich nicht wissen: Es gibt durchaus Alternativen zum Browser für den Zugriff auf Facebook. Was auch hier und da nötig ist – nicht überall bietet die Benutzeroberfläche die Möglichkeiten, die sich die Benutzer erhoffen.

Einsatzmöglichkeiten

Facebook bietet schon eine umfangreiche Benutzeroberfläche, aber hier und da wünscht man sich vielleicht doch noch die eine oder andere Optimierung. Da die Facebook-API Zugriff auf nahezu alle Daten bietet, auf die Sie auch als Facebook-Benutzer Zugriff haben, lassen sich bestimmt interessante Ideen entwickeln. Fürs Erste wollen wir einmal zeigen, wie Sie eine Statusmeldung auf Facebook anlegen, diese wieder löschen und wie Sie auf Ihre eigenen Statusmeldungen zugreifen.

Dies lässt sich sicher nutzbringend in eine Anwendung integrieren – vielleicht möchte beispielsweise ein Unternehmen regelmäßig Produkte auf seiner Facebook-Seite vorstellen und kann diese Aufgabe dann von einer Access-Anwendung aus erledigen – natürlich, indem man die anzuzeigenden Inhalte wie Produktbeschreibungen oder Werbetexte aus einer Tabelle der Datenbank bezieht.

Sollten Sie etwas Ähnliches im Sinn haben, könnten Sie dann auch gleich die Kommentare der Benutzer auf diese Statusmeldungen einlesen und diese gegebenenfalls verschiedenen Mitarbeitern zur Beantwortung zuweisen. Sie sehen: Es gibt ausreichend Gründe für die Facebook-Integration.

Voraussetzungen

Wenn Sie die Beispiele der folgenden Lösung durchspielen möchten, benötigen Sie zunächst einen Facebook-Account. Außerdem müssen Sie sich als Entwickler registrieren. Dazu klicken Sie nach der Anmeldung bei Facebook ganz unten rechts auf den Menüeintrag Mehr|Entwickler (der Eintrag ist recht klein) und registrieren sich dann auf der folgenden Seite.

Anwendung registrieren

Für den Zugriff auf Facebook müssen Sie zunächst eine Anwendung bei Facebook registrieren, in deren Kontext Sie auf die Facebook-API zugreifen. Dies erledigen Sie über den Menüpunkt App erstellen oben rechts im Menü (s. Bild 1). Voraussetzung hierfür ist, dass Sie selbst über einen Benutzeraccount bei Facebook verfügen. Anderenfalls legen Sie zuvor einen entsprechenden Zugang an.

Registrieren einer neuen Anwendung

Bild 1: Registrieren einer neuen Anwendung

Im folgenden Dialog klicken Sie dann auf die Schaltfläche Neue Anwendung erstellen. Einen Dialog weiter geben Sie bereits den Anwendungsnamen ein. Dieser darf verschiedene Elemente nicht enthalten, wie zum Beispiel Facebook oder Book (s. Bild 2). Also legen wir die neue Anwendung unter dem Namen aiuBaceFook an. Hier meckert Facebook nicht. Einen Dialog weiter fordert Facebook weitere Informationen an. Hier müssen Sie vor allem eine Integrationsart wählen. Am einfachsten geschieht dies mit der ersten Option Webseite mit Facebook-Anmeldung und der Angabe einer URL inklusive http: (s. Bild 3). Den Sandbox-Modus können Sie vorerst beibehalten – nach ersten Tests werden die Statusmeldungen auch in diesem Modus ganz normal veröffentlicht. Warum das Ganze? Damit Sie die oben ersichtlichen Daten App ID und App Secret entnehmen können.

Erstellen der neuen Anwendung - hier fehlgeschlagen, da der Anwendungsname den Namen Facebook enthält

Bild 2: Erstellen der neuen Anwendung - hier fehlgeschlagen, da der Anwendungsname den Namen Facebook enthält

Eintragen der Detaildaten zur neuen Anwendung

Bild 3: Eintragen der Detaildaten zur neuen Anwendung

Token ermitteln

Die Ermittlung des für den Zugriff auf die Facebook-API notwendigen Token ist etwas hakelig. Geben Sie die folgende URL in den Browser ein:

https://www.facebook.com/dialog/
oauth?client_id=<client_id>
&scope=<scope>&response_type=token&
redirect_uri=<redirect_uri>

Dabei ersetzen Sie die Platzhalter wie folgt:

  • : die soeben ermittelte App-ID
  • : Eine komma-separierte Liste mit einem oder mehreren der Werte read_stream, read_friendlists und publish_stream.
  • : Angabe einer beliebigen URL, die nach der Ermittlung des Tokens aufgerufen werden soll

Die drei Werte für definieren verschiedene Zugriffsrechte und haben folgende Bedeutung – zum Beispiel die folgenden:

  • read_stream: Zugriff auf die Timeline des Benutzers
  • read_friendlists: Zugriff auf die Freundesliste
  • publish_stream: Erlaubnis, Beiträge im Namen des Benutzers zu veröffentlichen

Eine Liste der Berechtigungen für verschiedene Bereiche finden Sie unter https://developers.facebook.com/docs/reference/login/#permissions.

Facebook ruft dann die als angegebene Webseite auf und hängt einen Code an die URL an. Dies sieht dann beispielsweise so aus (den Code haben wir an dieser Stelle gekürzt):

http://www.access-basics.de/
code=AQDR9eNN3DRzme9ubqUwAk5J6HmLeRu
ESJXcTS1XAlydVjnF

Diesen Code müssen Sie auslesen und damit einen erneuten Aufruf starten. Dieser sieht dann wie folgt aus:

https://graph.facebook.com/oauth/access_token?client_id=
147265685342185&redirect_uri=
http://www.access-im-unternehmen.de/
&client_secret=7eed5c5ef46c69c90c0ec511
edd73734&code=AdDR9eNN3DRzme9ubqUwAk5J6H
mLeRuESJXcTS1XAlyLVjnF

Darauf antwortet Facebook dann, indem es zu einer URL weiterleitet, die wieder aus der angegebenen Redirect-URL und dem Token besteht:

http://www.access-im-unternehmen.de/
#access_token=CAAGxIOTNxqMBACV5AkFqWK
l9TWZBrZB9ucXd0dTC1CfyXaL6pCmfz1OfvT
XP67YXymi5AsffjaIROOWcfu5Cfe50HNro3kI
vDahulaYONVNmzDdMgjKc3vnTMuGDVUmOQD
GBe9Hg50GDrt5yinuvUtaeRYEWjO9OVlQ9gPx
AZDZD&expires_in=5894

Mit diesem Token können Sie nun alle Aktionen durchführen, welche die angegebenen Zugriffsrechte erlauben. Wenn Sie also etwa publish_stream angegeben haben, können Sie unter Angabe des Tokens Beiträge im Namen des mit der Anwendung verbundenen Benutzers posten.

Noch einmal zusammengefasst: Sie starten die Anfrage an Facebook, Facebook zeigt einen Dialog an, mit dem Sie die Anfrage bestätigen müssen, und ruft dann die Redirect-URL mit einem Code als Parameter auf.

Diesen Code fügen Sie in einen weiteren Aufruf von Facebook ein und Facebook ruft erneut die Redirect-URL auf – diesmal allerdings mit dem gewünschten Token als Parameter. Normalerweise würde die unter Redirect-URL angegebene Webseite die Parameter auswerten und die weiteren Aufrufe starten. Allerdings wollen wir ja keine Webseite betreiben, um auf Facebook zuzugreifen, sondern dies von Access aus erledigen. Der Ablauf sieht prinzipiell allerdings ähnlich aus.

Token automatisch holen

Wir haben ein Formular entwickelt, das den Token automatisch bezieht beziehungsweise erneuert. Dieses basiert auf einer kleinen Tabelle, welche die Anwendungsdaten speichert und die auch den Token aufnehmen soll. Die Tabelle ist wie in Bild 4 aufgebaut und heißt tblOptionen. Tragen Sie dort die über die Facebook-Anwendungsseite ermittelten Werte in die Felder AppID und AppSecret ein.

Tabelle zum Speichern der Anwendungsdaten für den Zugriff auf Facebook

Bild 4: Tabelle zum Speichern der Anwendungsdaten für den Zugriff auf Facebook

Für Scope tragen Sie eine kommaseparierte Liste der Zugriffsrechte ein, also beispielsweise read_stream,publish_actions,publish_stream. Redirect nimmt die URL der Seite auf, zu der Facebook nach dem Erstellen des Token weiterleiten soll.

Welche Sie verwenden, spielt keine Rolle – Sie benötigen diese nur, weil Facebook an diese nach dem Weiterleiten den Token anhängt. Aber es muss die gleiche URL sein, die Sie weiter oben bei der Registrierung der Anwendung angegeben haben, sonst tritt beim Abruf des Tokens ein Fehler auf. Nach dem Füllen und dem Einlesen des Tokens sieht der einzige Datensatz dieser Tabelle etwa wie in Bild 5 aus.

Tabelle mit Anwendungsdaten und Token

Bild 5: Tabelle mit Anwendungsdaten und Token

Token-Formular

Nun kümmern wir uns um das Formular, welches das Einlesen des Tokens für uns übernimmt. Das Formular heißt frmToken und enthält lediglich ein Webbrowser-Steuerelement namens ctlWebbrowser. Im Klassenmodul des Formulars legen Sie die folgende Zeile an, um eine Objektvariable zum Speichern des Webbrowser-Steuerelements zu deklarieren:

Dim WithEvents objWebbrowser As WebBrowser

Das Schlüsselwort WithEvents ist wichtig, weil wir später ein Ereignis des Webbrowser-Steuerelements nutzen möchten. Dieses wird beim Beenden des Ladevorgangs einer Internetseite ausgelöst.

Danach hinterlegen Sie die Prozedur aus Listing 1, die durch das Ereignis Beim Laden des Formulars ausgelöst werden soll. Diese Prozedur füllt die Variable obj­Webbrowser mit einem Verweis auf das Webbrowser-Steuerelement und liest die Werte der drei Felder AppID, Scope und Redirect in entsprechende Variablen ein. Die Funktion AddSlash untersucht die Redirect-URL dahingehend, ob diese mit einem Slash-Zeichen endet, und ergänzt dieses gegebenenfalls (s. Listing 2).

Private Sub Form_Load()
     Dim strClientID As String
     Dim strScope As String
     Dim strURL As String
     Dim strRedirect As String
     Set objWebbrowser = Me!ctlWebbrowser.Object
     strClientID = DLookup("AppID", "tblOptionen")
     strScope = DLookup("Scope", "tblOptionen")
     strRedirect = DLookup("Redirect", "tblOptionen")
     strRedirect = AddSlash(strRedirect)
     strURL = "https://graph.facebook.com/oauth/authorize?client_id=" _
         & strClientID & "&scope=" & strScope & "&redirect_uri=" & strRedirect
     objWebbrowser.Navigate strURL
End Sub

Listing 1: Beim Öffnen ruft das Formular die Webseite zum Freischalten des Tokens auf.

Das Webbrowser-Steuerelement zeigt daraufhin den Dialog aus Bild 6 an. Hier bestätigen Sie, dass die Facebook-Anwendung die von Ihnen angeforderten Berechtigungen freigeben darf. Wenn Sie hier auf OK klicken, dürfen Sie auf das öffentliche Profil und die Freundesliste zugreifen sowie Neuigkeiten posten.

Manuelle Freigabe des Zugriffs

Bild 6: Manuelle Freigabe des Zugriffs

Sobald dieses Dokument erscheint, wird die Ereignisprozedur aus Listing 3 erstmals ausgelöst. Dieses Dokument wollen wir jedoch nicht per Code untersuchen – an dieser Stelle ist lediglich der Klick auf die OK-Schaltfläche gefragt. Daher prüfen wir die mit dem Parameter URL gelieferte Internetadresse auf das Auftreten der Zeichenkette Code, die aber erst in der nachfolgend aufgerufenen Seite enthalten ist.

Private Sub objWebbrowser_DocumentComplete(ByVal pDisp As Object, URL As Variant)
     Dim strToken As String
     Dim strClient As String
     Dim strAppSecret As String
     Dim strCode As String
     Dim strURL As String
     Dim strRedirect As String
     Dim strResponse As String
     If InStr(1, URL, "code=") > 0 Then
         strCode = URL
         strCode = Mid(strCode, InStr(1, strCode, "code=") + 5)
         strClient = DLookup("AppID", "tblOptionen")
         strAppSecret = DLookup("AppSecret", "tblOptionen")
         strRedirect = DLookup("Redirect", "tblOptionen")
         strRedirect = AddSlash(strRedirect)
         strURL = "https://graph.facebook.com/oauth/access_token?client_id=" _
             & strClient & "&redirect_uri=" & strRedirect & "&client_secret=" _
             & strAppSecret & "&code=" & strCode
         If HTTPRequest(strURL, strResponse) = True Then
             strToken = Replace(strResponse, "access_token=", "")
             CurrentDb.Execute "UPDATE tblOptionen SET Token = '" & strToken _
                 & "'", dbFailOnError
         Else
             Debug.Print strResponse
         End If
         DoCmd.Close acForm, Me.Name
     End If
End Sub

Listing 3: Nach dem Laden des Dokuments wird eine weitere URL aufgerufen.

Der Klick auf die OK-Schaltfläche führt jedoch dazu, dass Facebook die Redirect-URL mit dem Code aufruft. Im Webbrowser-Steuerelement wird nun die von Ihnen mit Redirect-URL angegebene Internetseite geöffnet.

Wenn die Seite fertig geladen ist, löst dies wiederum das Ereignis objWebbrowser_DocumentComplete aus. Diesmal enthält die mit dem Parameter URL gesendete Internetadresse den Parameter Code.

Diesen wertet die Prozedur nun aus, indem sie den Code zunächst in der Variablen strCode speichert. Mit dieser Information und einigen weiteren, die wiederum aus der Tabelle tblOptionen ausgelesen werden, rufen wir erneut eine URL bei Facebook auf – diesmal allerdings nicht über das Webbrowser-Steuerelement, sondern mit dem HTTPRequest-Objekt. Um dieses zu nutzen, müssen Sie zuvor einen Verweis auf die Bibliothek Microsoft XML, v6.0 hinzufügen.

Dies erlaubt es, einfach auf gelieferte Ergebnisse zu reagieren. Die URL wird mit der Variablen strURL an die Funktion HTTPRequest übergeben, welche den Request durchführt und im Erfolgsfall das Ergebnis, den sogenannten Response, an die aufrufende Prozedur zurückliefert – und zwar mit dem Rückgabeparameter strResponse.

Der eigentliche Funktionswert ist einer Boolean-Variable vorbehalten, die über den Erfolg des Requests Auskunft gibt (s. Listing 4).

Public Function HTTPRequest(strURL As String, strResponse As String, _
         Optional strMethod As String = "POST") As Boolean
     Dim objHTTP As ServerXMLHTTP
     Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
     With objHTTP
         .Open strMethod, strURL, False
         .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
         .Send
         strResponse = objHTTP.responseText
         If .status = 200 Then

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.