Tutorial: Eine Event bei Facebook mit PHP erstellen

Aufgrund einer Anfrage gibt es heute ein Tutorial, wie man mit PHP Bordmitteln ein Event (Veranstaltung) bei Facebook mittels API erstellt. 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.

Der Code sieht folgendermaßen aus. Die ausführliche Doku zum Event ist hier zu finden.

#!/usr/local/bin/php5

<?php

// Tutorial: Facebook API mit PHP Bordmitteln
// ein EVENT erstellen

echo "Tutorial: Facebook API mit PHP Bordmitteln - EVENT";
echo "\n\n";

// OAuth Tokens
$accesstoken = "???";

// ein neues Event erstellen
$APIurl = "https://graph.facebook.com/me/events";

$eventname="Testveranstaltung";
$description="Eine Testveranstaltung für Tester.";
$start_time="2012-08-31T16:00+0100";
$end_time="2012-08-31T17:00+0100";
// Details zu der Zeitangabe siehe Kommentare von
// Guillermo vom 31.10.2012 - nochmals Danke für
// den Tipp, dass es seit einiger Zeit nicht mehr
// ohne der Angabe der Zeitzohne (+0100) geht!
$privacy="OPEN"; // oder CLOSED oder SECRET
$location="";
/* Alternative auf "venue" möglich, siehe
http://developers.facebook.com/docs/reference/api/event/
*/

//Request aufbauen
$params="name=".rawurlencode($eventname);
$params.="&description=".rawurlencode($description);
$params.="&start_time=".rawurlencode($start_time);
$params.="&end_time=".rawurlencode($end_time);
$params.="&privacy=$privacy";
$params.="&access_token=".$accesstoken;

echo "nParameter: $params\n\n";

// POST vorbereiten & ausführen
$opts = array('http' =>
 array(
    'method'  => 'POST',
    'header'  => 'Content-type: application/x-www-form-urlencoded',
    'content' => $params
  )
);
$result = file_get_contents($APIurl, false,
  stream_context_create($opts));

// Falls gewünscht das Ergebnis ausgeben
echo "\nResult:\n" . $result;

// und ggf. json umwandeln
$daten=json_decode($result);

//um z. B. die ID auszugeben:
echo "ID des neues Posts: " . $daten->id;

echo "\n\n... das war's!\n";

?>

Update am 29.9.2012: Wer noch ein Bild hinzufügen möchte: hier habe ich eine kurze Anleitung dazu geschrieben.

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, PHP abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

54 Kommentare zu Tutorial: Eine Event bei Facebook mit PHP erstellen

  1. Hallo, Funktioniert dieser sope noch. Ich errinere mich da was gelesen zu haben dass man jetzt nur events abfragen kann aber keine erstellen kann. Oder bezog sich das nur auf das Antworten bezihungsweise regaieren auf Veranstaltungen??

    LG, J Herbrich

    • Simon A. Frank sagt:

      Hallo, das müsste ich auch mal testen – ich habe aktuell kein Script laufen, dass diesen Scope nutzt. Ich melde mich nochmals!

  2. Mathias sagt:

    Hallo,
    habe ich bereits versucht.
    Ich glaube eher, dass das Problem hier liegt:
    https://developers.facebook.com/docs/graph-api/reference/v2.2/user/events?locale=de_DE

    You cannot create events via the Graph API.

    Gruss

  3. Mathias sagt:

    Meine Parameter sehen wie folgt aus:

    name=Testveranstaltung&description=Eine%20Testveranstaltung%20fr%20Tester.&start_time=2015-01-10T16%3A00%3A00%2B0100&end_time=2015-01-10T17%3A00%3A00%2B0100&privacy=OPEN&access_token=Cxxxxxxxx

    • Mathias sagt:

      allow_url_fopen is auf On gesetzt

    • Simon A. Frank sagt:

      Hallo Mathias, oft ist es ein Problem mit der richtigen Codierung von Sonderzeichen – um zu sehen, ob es bei Dir daran liegt (obwohl Dein Beispiel gut aussieht) gestalte mal die „Testveranstaltung“ so, dass keine Leerzeichen und Sonderzeichen in der description sind – hilft das?

  4. Mathias sagt:

    Hallo,

    ich bekomme leider immer wieder die Fehlermeldung:
    Warning: file_get_contents(https://graph.facebook.com/me/events): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /var/www/testscript.php on line 57 Result:

    Wo liegt hier der Fehler?
    Gruss und danke
    Mathias

  5. Glan sagt:

    danke erstmal für das gute tutorial,
    mit etwas ausprobieren und location_id schaffe ich es jetzt den event im namen meiner seite und mit dem korrekten ort zu erstellen. mein einziges problem: ich bekomme das mit dem app token nicht so richtig hin. mit dem user access token geht das aber der läuft ja immer wieder aus wenn ich stattdessen einen app token nehme kommt in meiner webapplikation ein
    HTTP/1.0 500 Internal Server Error

    wenn ich den selben app token im Graph API Explorer teste sagt dieser:
    {
    „error“: {
    „type“: „Exception“,
    „message“: „You must be an admin of the specified page to perform the requested action.“,
    „code“: 1373019
    }
    }

    ich bin selbstverständlich admin der seite.

    ich habe jeweils user token und app token im graph explorer erzeugt (developers.facebook.com/tools/explorer) weil ich bei eingabe der in diesem tutorial genannten url kein app token als ergebniss sehen konnte

    kann mir jmd einen tip geben ?

  6. basti sagt:

    Super. Danke.

    Die Privacy Settings der API sind laut doku veraltet.
    https://developers.facebook.com/docs/reference/api/event/

    Kennst du eine alternative diese zu setzen?

    • basti sagt:

      ich habe mir jetzt eine neu FB Seite angelegt, die nicht veröffentlich ist und die ich zum Testen verwenden kann.

    • Simon A. Frank sagt:

      Hallo Basti, gerne. Zun den Privacy Setiings kann ich leider nichts sagen, die habe ich bei meinen Projekten nie verwenden müssen! Wenn Du auf Deiner Testseite etwas rausbekommst kannst Du es gerne hier posten!

  7. Simon A. Frank sagt:

    Hallo Michael, das ist ganz einfach: Auch für die Änderung von Event-Daten muss Du wie in diesem Tutorial beschrieben einfach die gewünschten Fields statt an https://graph.facebook.com/me/events an https://graph.facebook.com/EventID posten – eine Liste der Fields findest Du hier:

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

    Ich hoffe, das hilft Dir weiter, ansonsten kannst Du Dich gerne nochmals melden!

  8. Ich nutze die Funktion zum Übertragen unserer Pfadfindertermine auf unsere Facebookseite. Nun suche ich eine Möglichkeit, wie ich bereits erstellte Termine wieder ändern kann. Die Facebook-Event-ID habe ich dazu schon beim Event in unserer lokalen Datenbank hinterlegt. Ich werde nur aus der API nicht schlau, wo ich die einfügen muss, um das Event zu ändern.
    Vielen Dank

    • Simon A. Frank sagt:

      Hallo Michael, wie von Dir gewünscht habe ich Deine letzten zwei Kommentare gelöscht – hat sich ja selbst geklärt! Wenn noch Fragen sind: gerne!

  9. Dieter Andersch sagt:

    Hallo zusammen,
    dank des Tutorial kann ich aus einer eigenen VB.NET Anwendung Veranstaltungen beliebig in FB anlegen. Bis Januar hat das auch wunderbar mit den Bildern dazu funktioniert. Seit Januar geht es aber plötzlich nicht mehr. Nach langem probieren und recherchieren bin ich leider immer noch nicht fündig geworden. Weiß jemand, ob sich am Grap API ertwas geändert hat und was muss man tun, damit es wieder geht?

    • Simon A. Frank sagt:

      Hallo Dieter, Soweit ich das sehe geht das immer noch mit Bildern. Hier habe ich das mal für PHP beschrieben:

      http://frank-it-beratung.com/blog/2012/09/29/tutorial-eine-event-mit-bild-bei-facebook-mit-php-bordmitteln-erstellen/

      Wichtig ist, dass die Bilder mindestens 200×200 Pixel groß sind und maximal 4 MB groß sind – könnte es vielleicht daran liegen, dass es bei Dir nicht geht?

    • Dieter Andersch sagt:

      An der Größe der Bilder kann es eigentlich nicht liegen, da es sich immer um die selben handelt. Kurze Erklärung dazu. Unser Sportverein hat eine Seite bei FB und dort stellen wir alle Heimspiele bestimmter Mannschaften mit Mannschaftsbildern hinein. Die Daten dazu werden mit meinem Programm aus einem Informationssystem gezogen und nach FB übertragen. Die Mannschaftsbilder haben sich nicht geändert und das ganze hat am Anfang ja auch wunderbar funktioniert, bis im Januar nach dem Übertragungsbefehl für Bilder folgender Fehler angezeigt wird:
      Der Remoteserver hat einen Fehler zurückgegeben: (404) Nicht gefunden.
      Daraufhin hab ich natürlich alle lokalen Zugriffsrechte und den exakten Pfad überprüft, aber alles korrekt und es hat sich bei mir ja auch nichts geändert. Könnte es sein, dass der Übertragungsversuch des Bildes zu schnell nach dem Anlegen der Veranstaltung kommt und FB vielleicht noch gar nicht „weiss“, dass es die Veranstaltung gibt, obwohl schon eine Event_ID zurückgegeben wird? Ich denke ich werde mal eine Verzögerung einbauen und probieren.

    • Simon A. Frank sagt:

      Hallo Dieter, ich habe es kurz ebenfalls getestet und dazu gleich ein kurzes Tutorial geschrieben:

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

      Bei mir läuft das einwandfrei – aber die Idee mit der Verzögerung könnte durchaus das Problem sein!

    • Dieter Andersch sagt:

      Die Verzögerung war nicht die Lösung des Problems. Ich habe meinen Programmtext mit deinem Text im VB Tutorial verglichen und konnte keine wesentlichen Unterschiede entdecken. Habe dann einfach meinen Programmcode gelöscht, den aus deinem Tutorial kopiert, angepasst und nun funktioniert es wieder,was wieder zeigt, wie hilfreich deine Lösungen sind!! Da muss sich also irgendetwas in meinem Programmcode eingeschlichen haben, was ich einfach nicht erkannt habe. Auf jeden Fall vielen Dank für deine prompte Hilfe.

    • Simon A. Frank sagt:

      kein Problem, gerne!

  10. Simon A. Frank sagt:

    Hallo Reini, vielen Dank, gerne, ich komme auf Dich zurück!

  11. Reini sagt:

    danke, habs jetzt mit -0800 versucht klappt auch, ist aber komisch da es gegen das Prinzip verstoßt. aber naja vielen Dank und nur weiter so, solltest du weitere Tutorials planen kann ich dir vielleicht unterstützen habe gerade ein Projekt am laufen, darunter befinden sich die erstellung von Umfragen, Foto Alben und Events für eine Page (auf die zumindest Admin Rechte bestehen)

  12. Dieter Andersch sagt:

    Eventuell hilft es auch die Zeitzone mit anzugeben.

    timezone=Europe/Berlin

    dann erspart sich man sich die rechnerei.

  13. Simon A. Frank sagt:

    Hallo Reini, Danke für das Lob. Was das Problem ist weiß ich nicht, ich kenne aber die Lösung – wenn ich Dich richtig verstanden habe?

    statt

    $start_time=“2012-08-31T16:00+0100″;

    musst Du

    $start_time=“2012-08-31T07:00+0100″;

    schreiben!

  14. Reini sagt:

    Tolles Tutorial, sehr sehr Hilfreich, aber ich hab das Problem dass mein Event um 07:00 anfängt und nicht wie angegeben um 16:00. Was ist das Problem???

  15. Simon A. Frank sagt:

    Na dann, wunderbar. Gute Idee – vielleicht werde ich mal wieder was für VB.NET (und C#) machen!

  16. Dieter Andersch sagt:

    Habe es jetzt auch hinbekommen, Events in Gruppen einzutragen, ohne manage_group und mit der „normalen“ UploadData-Methode. Simons Tutorial sind dabei eine große Hilfe und vielleicht will er noch ein Tutorial für VB.NET daraus machen. 😉

  17. Simon A. Frank sagt:

    Mit Gruppen habe ich bisher noch keine Erfahrung gesammelt, da kann ich keine Tipps geben. Aber wenn es bei Dir funktioniert dann ist ja wunderbar!

  18. Simon A. Frank sagt:

    Hallo David, ja, genau so ist es. Entweder die ID der Seite oder die Vanity-URL!

  19. Ich habe es jetzt schon, statt „me“ muss in die URL die Seiten-ID.

  20. Wir haben für unseren Sportverein eine eigene Seite, auf der ich gern die Spiele veröffentlichen würde. Wie kann ich angeben, dass das Event nicht auf der privaten, sondern auf der Vereinsseite veröffentlicht wird?
    Mit &owner bekomme ich es bislang nicht hin…

    • Dieter sagt:

      Zusätzlich muss aber mit scope die Berechtigung manage_page bei einer Facebook-Seite gesetzt werden. Bei Gruppen eigentlich manage_group, da hat sich aber wohl ein Bug eingeschlichen und die Facebook-Leute scheinen an dessen Behebung zu arbeiten. Obwohl gelegentlich ist es mir jetzt auch gelungen ein Event aus einer VB.NET Anwendung zu erzeugen. Weiß nur leider nicht warum. Bei der eigenen und der Vereinsseite ist es kein Problem.

  21. Dieter Andersch sagt:

    Super, das hat schon mal gewirkt. Wenn du mal in Wuppertal bist geb ich einen aus. Jetzt muss ich das noch in eine Gruppe bekommen, in der die Termine veröffentlicht werden sollen. Ich denke, dass das aber eine Sache der Rechtevergabe ist. Erst mal vielen Dank.

  22. Simon A. Frank sagt:

    Hallo Dieter,

    kein Problem, gerne. Das müsste mit UploadData auch gehen, ist aber wieder ein anderes Problem. Spontan habe ich noch folgende Idee (aber gerade keine VB-Installation, um die zu testen): Ändere mal das + in %2B

    “&start_time=2012-11-15T16:00:00%2B0100″

  23. Dieter Andersch sagt:

    Hallo Simon,

    vielen Dank für die schnelle Antwort. Mit UploadData geht es gar nicht, da lassen sich keine Events enlegen. Da kommt dan die Meldung „Der Remoteserver hat einen Fehler zurückgegeben: (400) Ungültige Anforderung.“ Bei UploadDataAsync muss man halt auf eine sichere Rückmeldung verzichten. Es funktioniert ja auch soweit, Nur wenn ich die Uhrzeit (z.B. T16:00:00+0100) an start_time hänge, dann geht einfach Nichts mehr. Im Übrigen haben micht deine Tutorial überhaupt erst so weit gebracht.

  24. Simon A. Frank sagt:

    Hallo Dieter, natürlich helfe ich gerne, wobei ich mir nicht ganz sicher bin, ob das das Problem ist. Deine Verwendung von UploadDataAsync ist sehr ungewöhnlich, ohne einen Callback festzulegen kann ich mir das gar nicht vorstellen, wie das dann läuft – aber ich habe das noch nie in VB programmiert sondern nur in C# (als Beispiel: http://frank-it-beratung.com/blog/2011/11/14/tutorial-mit-c-oder-visual-basic-ein-foto-uploaden-facebook-api-tutorial-teil-4/)

    Hast Du es schon mal ohne Async nur mit UploadData probiert? So wie etwa hier beschrieben: http://frank-it-beratung.com/blog/2010/12/10/tutorial-ein-facebook-pinnwandeintrag-mit-visual-basic-oder-c-teil-1/

  25. Dieter Andersch sagt:

    Hallo zusammen,

    ich habe das ganze in VB.net 2010 übetragen um ein Event mit einer VB.NET-Anwendung zu erzeugen. Klapt so weit ganz gut, bis auf den Schönheitsfehler, dass wenn ich eine Uhrzeit (start_time) hinzufüge, landet das ganze im Nirvana. Im Übrigen will ich Sporttermin aus einer Anwendung in eine Facebook-Gruppe als Event posten.

    Dim Nachricht As Byte() = Encoding.UTF8.GetBytes(„name=Testtitel aus SIS_Handball_NET“ & _
    „&start_time=2012-11-15T16:00:00+0100“ & _
    „&description=Testbeschreibung“ & _
    „&timezone=Europe/Berlin“ & _
    „&location=Testort“ & _
    „&privacy=SECRET“ & _
    „&access_token=“ & AccessToken)
    Try
    Dim newUri As New Uri(GraphURL)
    myWebClient.UploadDataAsync(newUri, Nachricht)
    MsgBox(„Erfogreich gepostet!“)
    myWebClient.CancelAsync()
    Catch ex As Exception
    MsgBox(ex.Message)
    End Try

    Hat jemand vielleicht eine Idee, wo mein Denkfehler ist?

  26. Simon A. Frank sagt:

    Hallo Guillermo, vielen Dank für den Hinweis, habe das gerade auch ausprobiert – tasächlich geht das nicht mehr ohne Angabe der Zeitzohne! Ich werde das gleich oben ändern – nochmals vielen Dank für den Hinweis 🙂

  27. Simon A. Frank sagt:

    Ja, das kann manchmal (und bei mancher PHP/Apache-Installation bzw. Version) Ärger machen. Gib doch mal in der Zeile vor 45 mit echo $params aus, vielleicht ist da mit rawurlencode() oder Deinen Datumsangaben irgendwas nicht in Ordnung? Da darf tatsächlich kein Leerzeichen sein sondern „%20“. Lass auch mal alle Leerzeichen für einen ersten Test weg, z. B. in der Description.

    • Guillermo sagt:

      hallo simon,

      die leerzeichen waren’s doch nicht – ich hatte am falschen ort gesucht.
      es hat eine weile gedauert bis der groschen gefallen aber der grund für die meldung „bad request“ ist hier zu finden :

      https://developers.facebook.com/docs/reference/api/user/#events

      „Date-only (e.g., ‚2012-07-04‘): events that have a date but no specific time yet.

      Precise-time (e.g., ‚2012-07-04T19:00:00-0700‘): events that start at a particular point in time, in a specific offset from UTC. This is the way new Facebook events keep track of time, and allows users to view events in different timezones.

      Event times with a date and time but no offset from UTC are no longer accepted.“

      d. h. alle zeitangaben müssen lauten :

      „2012-08-31“
      oder
      „2012-08-31T16:00:00+0100“ (für DE)

      die formatierung „$start_time=“2012-08-31T16:00″;“ aus dem beispiel wird nicht mehr angenommen.

      grüsse, guillermo

  28. Guillermo sagt:

    hallo simon, na klar, danke dir natürlich. vielen dank auch für deine nachricht.
    die schritte 1-6 waren kein problem, der accesstoken scheint richtig zu sein und ist im code eingesetzt. beim ausprobieren bekomme ich aber die meldung „Warning: file_get_contents(https://graph.facebook.com/me/events): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in ../eventtest.php on line 45″. zeile 45 ist : „stream_context_create($opts));“. eine recherche hatte mich darauf gebracht, dass ein überflüssiges leerzeichen im code schuld an der fehlermeldung sein könnte. tatsächlich suche ich den fehler aber noch.

  29. Simon A. Frank sagt:

    Hallo Guillermo, vielen Dank für Dein Feedback. Ich verstehe nicht ganz – Welches Leerzeichen meinst Du? Btw. Die Tutorials sind nicht von Hans sondern von mir….

  30. Guillermo sagt:

    hallo hans, danke für deine tollen tutorials! ein problem stellt sich hier leider noch : „failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request“. könnte das mit einem leerzeichen zusammenhängen?

  31. Simon A. Frank sagt:

    Hallo Hans, jetzt habe ich den Fehler gefunden – der war nicht in meinem Script sondern ich habe beim Testen ein zu kleines Bild hochgeladen. FB meldet dann zwar Erfolg, zeigt aber das Bild nicht an. In einem neune Post habe ich beschrieben wie es geht: http://frank-it-beratung.com/blog/2012/09/29/tutorial-eine-event-mit-bild-bei-facebook-mit-php-bordmitteln-erstellen/

  32. Simon A. Frank sagt:

    Hallo Hans, man kann zwar beim Erstellen des Events kein Bild mitschicken, aber in einem zweiten Schritt an /EVENT_ID/picture das Bild senden. Meine eigene Lösung ist in C# aber Ich hatte da auch mal ein PHP-Script und wollte das hier schnell posten, musste aber feststellen, dass das nicht mehr funktioniert. Ich seh mir das bei Gelegenheit mal an und melde mich nochmals.

  33. Hans Klausen sagt:

    Gib es auch die Möglichkeit ein Bild/Flyer zum Event gleich mithochzuladen, oder wie macht Ihr das?

  34. Simon A. Frank sagt:

    Hallo Markus, vielen Dank für das Lob 🙂 Mir ist auch schon aufgefallen, dass Events ein wenig brauchen, bis sie in Facebook „auftauchen“ (bis zu fünf Minuten). Schau Dir deshalb immer den $response an – wenn da eine ID zurückgeliefert wird ist es erfolgreich. Oder ist es ein andres Problem? Dann müsstest Du ein paar Details zu der (Fehler)Meldung posten, die in $result zu finden ist – vielleicht habe ich dann noch eine Idee, woran es liegen könnte.

  35. Markus Miederer sagt:

    Hallo Simon,
    super Tutorial – das erleichtert den Einstieg sehr. Ich habe mit Erfolg dein Feed-Post Tutorial umgesetzt. Leider funktioniert das Event Posten nicht. Scope wurde richtig definiert und die Erstellung liefert „Success“. Wenn ich das Script aufrufe wird jedoch kein Event gepostet, hast du vielleicht eine Idee wo das Problem liegen könnte?

    Vielen Dank schon mal.

    Markus

  36. Steffen sagt:

    Hallo Simon,

    ich dank dir recht herzlich, funktioniert einwandfrei 🙂

    Mach weiter so 🙂

    Gruß
    Steffen

  37. Simon A. Frank sagt:

    Hallo Steffen, vielen Dank für Dein Feedback. Events kannst Du ungefähr so löschen:

    $APIurl = „https://graph.facebook.com/EVENT_ID“;
    //…
    $params=“method=delete&access_token=“.$accesstoken;
    //…

    Wenn Du noch Fragen hast: Jederzeit und gerne!

  38. Steffen sagt:

    Hi,
    vielen dank für das Tutorial, es läuft einwandfrei 🙂

    Ich habe eine Frage, wie müsste der code aussehen, wenn ich das Event über die Webseite löschen möchte? Ich weiß nur nicht wie ich den DELETE Befehl unterkriegen solle.

    Vielen Dank im voraus, weiter so.
    Gruß
    Steffen

  39. Simon A. Frank sagt:

    Hallo Hoschie,

    Danke für’s Lob (und sorry für die späte Antwort, ich war ein paar Tage im Urlaub). Ja, das müsste gehen, ich werde die nächsten Tage dazu ein Tutorial schreiben!

    Schöne Grüße,

    Simon

  40. Hoschie sagt:

    Hi, erstmal super Tutorial. Bei mir hat es direkt beim ersten mal funtkioniert. Nachdem ich leider schon etliche andere Tutorial hinter mir hatte ^^

    Ist es möglich das Script so anzupassen das Freunde direkt eingeladen werden?

    Mfg
    Hoschie

Kommentar verfassen