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
Hallo Frank, danke für deine Tutorials… ich schreibe Anzeigen über die Marketing API… dabe habe ich das Problem, dass Sonderzeichen und Umlaute vermurksen… du schreibst oben etwas von einem nicht vorhandenen Encodingproblem, aber ich habs leider… hast du da nie Probleme gehabt ? Hast du vielleicht eine Lösung ?
Hallo, vielen Dank für das Feedback, in den letzten Jahren habe ich nicht mehr viel mit VBA gemacht und der Artikel ist doch schon acht Jahre alt, spontan habe ich keine Idee, Du kannst mir aber gerne einen Codeausschnitt per Mail senden, dann sehe ich mir das gerne an!
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
Herzlichen Dank für Deine Mühe
gerne – jetzt ist das Tutorial „Aus MS Access mit VBA Fotos nach Facebook uploaden“ fertig:
http://frank-it-beratung.com/blog/2013/03/25/tutorial-aus-ms-access-mit-vba-fotos-nach-facebook-uploaden/
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?
Inzwischen habe ich die Lösung für VBA gefunden … in Kürze wird das Tutrial online gehen (wahrscheinlich am Montag).
Hallo Simon, wollte mich erkundigen, ob wir noch mit einer Lösung rechnen können.
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!
Hallo Ralf, ein Upload mit VBA ist komplizierter, als ich gedacht habe – meine ersten Experimente sind gescheitert. Bist Du weiter gekommen?
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.
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.
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!
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.
natürlich keinen …. ich bin gerade dabei, ein Tutrial zu schreiben, wie ein Upload in VBA geht!
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!
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
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/
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.
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/
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?
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?
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/
Nein, ich glaube nicht, dass „from“ etwas bringt. Ich muss es selbst mal testen und melde mich dann umgehend!
Danke für die Unterstützung.
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“
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.
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/
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.
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/
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
Hi,
danke, es funktioniert, wenn auch etwas kompliziert (nicht ohne Deine Unterstützung und den FBAccessTokenManager einrichtbar).
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?
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