Tutorial: Facebook API mit MS Access und VBA

In einem aktuellen Projekt ging es darum, ausgewählte Termine aus einer MS Access-Datenbank als Facebook-Events zu posten. Dafür muss man sich nicht unbedingt .net und C# bedienen (auch wenn das in der Regel der komfortablere Weg ist, siehe meine Tutorials dazu). Das folgende kurze Tutorial beschreibt, wie man auch direkt mittels VBA Veranstaltungen (oder ähnliches) in Facebook postet kann. Die Vorbereitungsarbeiten habe ich in einem älteren Artikel beschrieben (Punkt 1-6). Wichtig ist, beim Erstellen des Access Tokens die Berechtigung (Scope) “create_event” zu wählen.

1. Als Beispiel dient eine einfache Tabelle mit Titel, Datum und Beschreibung (hier in Access 2007, jedoch dürfte dies auch in neueren und älteren Versionen funktionieren):

2. Auf ein Eingabeformular wird eine Schaltfläche erstellt und mit einem VBA-Ereignis versehen:

3. So sieht der Code aus:

Private Sub BefehlFB_Click()
Dim GraphURL, Body, AccessToken As String

AccessToken = "???"

GraphURL = "https://graph.facebook.com/me/events"

Body = "name=" & Form_Tabelle1.Titel & _
    "&description=" & Form_Tabelle1.Beschreibung & _
    "&start_time=" & Form_Tabelle1.Datum & _
    "&privacy=OPEN" & _
    "&access_token=" & AccessToken

Dim objHttp As Object
Set objHttp = CreateObject("MSXML2.ServerXMLHTTP")
Call objHttp.Open("POST", GraphURL, False)
Call objHttp.setRequestHeader("Content-Type", _
    "application/x-www-form-urlencoded")
Call objHttp.Send(Body)

Call MsgBox("Antwort von Facebook: " & _
    objHttp.ResponseText)

End Sub

Ursprünglich dachte ich, es gibt Probleme mit Sonderzeichen und dem Datums-Format, aber bei meinen Tests lief dies problemlos – scheinbar ist hier keine Konvertierung notwendig.

Update am 25.3.2013: Wer dem Event gleich noch ein Bild hinzufügen möchte findet eine Anleitung hier.

P.S.

Probleme? Fragen? Anregungen? Ich helfe jederzeit und gerne  – einfach einen Kommentar oder Mail schreiben, die Antwort kommt schnellstmöglich. Unternehmen, die Unterstützung, Beratung oder Schulung bei der API- oder Webprogrammierung, der Social-Media-Entwicklung oder dem Social-Media-Management benötigen finden zudem entsprechende Angebote meiner Firma auf der Website www.Frank-IT-Beratung.de

Dieser Beitrag wurde unter API, Facebook, Graph API, Programmierung, Social Networks, VBA, Visual Basic abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

32 Kommentare zu Tutorial: Facebook API mit MS Access und VBA

  1. Sandy Jones sagt:

    Hi Frank,

    These are great tutorials for VBA Programmer.

    I will be very thankful if you can provide VBA code for uploading, updating, managing, etc for Facebook Custom Audiences.

    Thank in advance,

    Regards,
    Sandy

  2. Ralf Hachmann sagt:

    Herzlichen Dank für Deine Mühe

  3. Ralf Hachmann sagt:

    Nein, leider nicht. Dafür bin ich einfach zu überfordert, kann mich nur so gerade in Deine Codes einarbeiten. Kann man ggf. Deine in C, oder VB oder PHP geschriebenen Codes mit Access starten, wenn man z.B. den Code mit Access generiert und auf dem Server als Datei abspeichert und wann ja, wie könnte das aussehen?

    • Simon A. Frank sagt:

      Inzwischen habe ich die Lösung für VBA gefunden … in Kürze wird das Tutrial online gehen (wahrscheinlich am Montag).

  4. Ralf Hachmann sagt:

    Hallo Simon, wollte mich erkundigen, ob wir noch mit einer Lösung rechnen können.

    • Simon A. Frank sagt:

      Hallo Ralf, sorry, ich habe derzeit so viel um die Ohren, dass ich es noch nicht geschafft habe, alle Infos zusammenzuschreiben. Aber die nächsten Tage werde ich ein Tutorial veröffentlichen, der den Datei-Upload mit VBA erklärt – ich glaube, das müsste dann alle Deine Fragen beantworten!

    • Simon A. Frank sagt:

      Hallo Ralf, ein Upload mit VBA ist komplizierter, als ich gedacht habe – meine ersten Experimente sind gescheitert. Bist Du weiter gekommen?

  5. Ralf Hachmann sagt:

    Hallo,

    es ist immer wieder erfrischend, wie wenig hilfreich die Dokumentation für Anfänger ist. Man kommt hier wirklich nur mit der Methode „Try and error“ weiter. Nun habe ich den Code wie folgend ergänzt:

    vsource = “d:\Test.jpg”

    Body = “name=” & vname & _
    “&source=” & vsource & _
    “&access_token=” & AccessToken

    Dim objHttp As Object
    Set objHttp = CreateObject(“MSXML2.ServerXMLHTTP”)
    Call objHttp.Open(“POST”, GraphURL, False)
    Call objHttp.setRequestHeader(“Content-Type”, _
    “application/x-www-form-urlencoded”)
    Call objHttp.Send(Body+vsource)

    Call MsgBox(“Antwort von Facebook: ” & _
    objHttp.ResponseText)

    einzige Änderung also:

    Call objHttp.Send(Body+vsource)

    so kommt die nächste Fehlermeldung:

    „message“:“Expected 1″ ‚.‘ in the input between the postcard and the payload“,“type“:“OAuthExecption“,“code“:1

    Wieviel Trys and errors einen da wohk noch erwarten.

    • P. Müller sagt:

      Hallo, finde ich auch, wenn man keine Profis wie Simon hätte, wären wir ganz schön verloren. Bin gespannt auf die Lösung von Simon.

    • Simon A. Frank sagt:

      Hallo P. Müller, vielen Dank für das Lob 🙂 da die Sache etwas komplizierter ist werde ich gleich ein neues Tutorial schreiben – das müsste die nächsten Tage fertig werden!

  6. Ralf Hachmann sagt:

    Hallo,

    welchen Sinn macht es nur den Dateinamen ohne LAden des Bildes zu senden? Gilt ja dann auch ggf. für PICTURE und ICON. Es wäre schön alsbald eine Lösung zu haben.

    • Simon A. Frank sagt:

      natürlich keinen …. ich bin gerade dabei, ein Tutrial zu schreiben, wie ein Upload in VBA geht!

  7. Simon A. Frank sagt:

    Hallo Ralf,

    natürlich helfe ich gerne: Du kannst für Deinen „Bild-Uploader“ als Basis meine Code nehmen. Statt auf /event postets Du die Daten an

    GraphURL = „https://graph.facebook.com/ALBUM_ID/photos“

    Die Paramter für Bilder (in „Body“) sind hier nachzulesen:

    https://developers.facebook.com/docs/reference/api/photo/

    Einfacher ist es, das Album manuell anzulegen; aber auch das geht auch automatisch:

    GraphURL = „https://graph.facebook.com/me/albums“

    die möglichen Parameter („Body“) sind hier nachzulesen:

    https://developers.facebook.com/docs/reference/api/album/

    Soweit erste Tipps – ich hoffe, das ist eine erste Hilfestellung für Deine VBA-Anwendung!

    • Ralf Hachmann sagt:

      Hallo Simon,

      danke für Deine Hilfe. Das Erzeugen der Alben hat geklappt. Beim Bilder-Hochladen habe ich folgende Fehlermeldung:

      fehlercode 324 – requires upload file

      Mein bisheriger Code

      vsource = „d:\Test.jpg“

      Body = „name=“ & vname & _
      „&source=“ & vsource & _
      „&access_token=“ & AccessToken

      Dim objHttp As Object
      Set objHttp = CreateObject(„MSXML2.ServerXMLHTTP“)
      Call objHttp.Open(„POST“, GraphURL, False)
      Call objHttp.setRequestHeader(„Content-Type“, _
      „application/x-www-form-urlencoded“)
      Call objHttp.Send(Body)

      Call MsgBox(„Antwort von Facebook: “ & _
      objHttp.ResponseText)

      Was muss ich noch ergänzen.

      Gruss Ralf

    • Simon A. Frank sagt:

      Hallo Ralf,

      ja, so geht das leider nicht, Du sendest damit nur den Dateinamen „D:\Test.jpg“ und nicht die Datei selbst. Leider habe ich in meinem Code-Archiv nichts passendes gefunden, ich muss das mal bei Gelegenheit selbst ausprobieren, wie das in VBA geht. Ich melde mich dann nochmals!

      Btw. Wie das in Visual Basic habe ich vor Kurzem hier beschrieben:

      http://frank-it-beratung.com/blog/2013/02/21/tutorial-mit-visual-basic-ein-facebook-event-mit-foto-erstellen-teil-1/

  8. Ralf Hachmann sagt:

    Hallo,

    finde in Google immer nur Programmierhinweise für Facebook mit VBA-Code aus MS Access in diesem Tutorial. Hänge daher hier meine Frage ran.

    Ich habe in Access ein Bildarchiv eingerichtet, habe dort Bildbeschreibungen und Verzeichnisse / Datenbezeichnungen der einzelnen Bilder abgespeichert und würde nun gerne die Bilder einzelnd auf Knopfdruck auf meine neue Fanpage laden. Wie würde hierfür der VBA-Code aussehen? Muss ich erst die Alben erzeugen und dann die einzelnen Bilder laden.

    Wäre für jede Hilfe dankbar.

  9. Simon A. Frank sagt:

    Wer statt mit VB statt mit VBA arbeitet – hier habe ich ähnliches für Visual Basic beschrieben:

    http://frank-it-beratung.com/blog/2013/02/21/tutorial-mit-visual-basic-ein-facebook-event-mit-foto-erstellen-teil-1/

  10. Simon A. Frank sagt:

    Hallo P. Müller, leider kann ich den Fehler nicht repoduzieren. Bei mir wird es immer richtig auf dern Fan-Page gepostet, egal ob mit oder ohne „link“. Wenn Du willst kannst Du mir Dein Code per Mail senden, vielleicht sehe ich da noch was! Oder geht es inzwischen?

    • Peter Müller sagt:

      Hi,

      ich habe nochmals eine neue APP und einen neuen AccessToken generiert. Jetzt funktioniert alles einwandfrei. Danke für Ihre Mühe. Vielleicht noch eine Zusatzfrage. Kann ich mit dem gleichen Code auch auf andere, öffentliche Fanpages (z.B. Fußball-Verein) posten? Habt ihr hierfür ein eigenes Tutorial?

    • Simon A. Frank sagt:

      Na dann, wunderbar! Ja, mit solch einer App kann man (noch) auf „öffentliche“ Fanpages posten, von denen man nicht Admin ist sondern nur „Fan“. Natürlich muss dazu der Admin der Fanpage Posts von Fans zulassen. Dann kannst Du einfach Nachrichten an

      GraphURL = „https://graph.facebook.com/VereinXY/feed“

      senden! Ich schreibe „noch“, da Facebook u.U. diese Funktion deaktivieren möchte – für Freunde auf jeden Fall, für Fanpages möglicherweise auch:

      http://frank-it-beratung.com/blog/2012/11/07/facebook-api-posts-auf-pinnwand-von-freunde-bald-nicht-mehr-moglich/

  11. Simon A. Frank sagt:

    Nein, ich glaube nicht, dass „from“ etwas bringt. Ich muss es selbst mal testen und melde mich dann umgehend!

  12. P. Müller sagt:

    Hi,

    muss ich vielleicht den Wert „from“ einfügen und damit ID und NAME der Fanpage eingeben und wenn ja, wie trennt man die beiden Felder?

    „object containing id and name fields“

  13. P. Müller sagt:

    Hi,

    nein, immer mit dem gleichen Access-Token ( fest im Code eingegeben). Füge ich „link“ im Code ein, erscheint der Feed fehlerfrei unter Aktivitäten und meinem USER-Namen und streiche ich „link“ wieder, erscheint der Feed fehlerfrei unter Pinnwand und dem Fanpage-Namen.

  14. Simon A. Frank sagt:

    Hallo, oh, das ist ja wirklich merkwürdig. Hast Du wirklich nicht die Access-Tokens verwechselt? In dem ersten Kommentar auf der folgenden Seite habe ich das genau erklärt, welches man nehmen muss – da dürfte eigentlich unterschiedliche Parameter nichts dran ändern!

    http://frank-it-beratung.com/blog/access-token-manager/

  15. P. Müller sagt:

    Hi,

    danke für Deine Hinweise . Trotzdem ergibt sich ein Problem bei der Anwendung:

    Ergänze ich nun z.B. das Argument „picture“, so wird der feed unverändert korrekt auf der Pinnwandseite angezeigt:

    Body = „message=“ & mMESSAGE & _
    „&picture=“ & mPICTURE & _
    „&access_token=“ & AccessToken

    Ergänze ich um ein das weitere Argument „link“, so wird der feed nicht auf der Pinnwand als Beitrag der Fanpage eingertagen, sondern unter Aktivitäten als Beitrag von mir als USER.

    Body = “message=” & mMESSAGE & _
    “&picture=” & mPICTURE & _
    “&link=” & mLINK & _
    “&access_token=” & AccessToken

    Das soll nun einer verstehen. Was muss ich tun, damit der feed auch mit Link auf der Pinnwandseite der Fanpage erscheint.

  16. Simon A. Frank sagt:

    Gerne. Ein Bild (picture) und ein Link geht so:

    Body = “message=” & mMESSAGE & _
    „&picture=“ & mPICTURE & _
    „&link=“ & mLINK & _
    “&access_token=” & AccessToken

    Die komplette Liste der möglichen Parameter ist hier zu finden:

    https://developers.facebook.com/docs/reference/api/post/

  17. P. Müller sagt:

    Hi,

    könntest Du mir vielleicht auch noch sagen, wie man mit der message auch noch ein Bild (z.B. image=?) oder ein Link (z.B. link=?) posten kannt :

    Body = „message=“ & mMESSAGE & _
    „&access_token=“ & AccessToken

  18. P. Müller sagt:

    Hi,

    danke, es funktioniert, wenn auch etwas kompliziert (nicht ohne Deine Unterstützung und den FBAccessTokenManager einrichtbar).

  19. Simon A. Frank sagt:

    Hallo, das Problem mit den Access-Token für User/Fanpage habe ich hier etwas ausführlicher beschrieben (1. Kommentar):

    http://frank-it-beratung.com/blog/access-token-manager/

    In diesem Fall würde ich erst prüfen, ob der User auf dem normalen Wege auf der Fanpage posten darf – vielleicht ist diese so eingestellt, dass nur Admins oder Fans posten dürfen?

  20. P. Müller sagt:

    Hi,

    ich habe unter meiner USER-ID mehrere Fanpages als Admin eingetragen, sowie mehrere App-IDs.

    Die (Test-)message wird einwandfrei auf meiner USER-Seite gepostet, wenn ich

    GraphURL = https://graph.facebook.com/me/feed

    eintrage. Ich möchte aber gezielt auf einer meiner Fanpages posten. Trage ich dort die User-ID (nur die Nummer) der Fanpage ein, die in der URL der Fanseite steht:

    GraphURL = https://graph.facebook.com/123456789/feed (Beispiel)

    erhalte ich die Fehlermeldung:

    „#200 The user has not granted the application the permission to automatically publish feed stories”,”type”:”OAuthException”,”code”:200

    Muss ich in der App, die ich im FBAccessTokenManager eingetragen habe, noch einen Eintrag machen, der eine App einer Fanpage zuordnet und wenn ja wo, damit meine message gezielt auf der richtigen Fanpage gepostet wird.

    Danke für Eure Hilfe

Kommentar verfassen