Facebook Event Post auf Fanpage

Also, eigentlich ist die Sache ein Kinderspiel. Eigentlich. Für mich war es ein Albtraum: Die TYPO3-Extension cal sollte die Events automatisch auch bei Facebook aktualisieren. Die Extension-Programmierung war nicht das Problem (Bei Interesse am Code einfach anschreiben, letztlich nur ein Hook für processDatamapClass). Mein Problem war es  im Namen der Seite auf einer Facebook-Seite zu posten.

Vor lauter Dokumentation und Foren-Beiträgen, weiß ich gar nicht auf wie vielen falschen Fährten ich unterwegs war. Letztlich steht das folgende an jeder Ecke im Netz… aber irgendwie wollte ich es nicht begreifen. Auf das es mir kein zweites Mal passiert und es euch vielleicht erspart bleibt, ohne aber auf jedes Detail einzugehen, mein Vorgehen:

App Access Token generieren

Das Ziel ist genauer ein Page Access Token. Zuerst wird dafür eine gewöhnliche Facebook App angelegt, ohne irgendwelche Einstellungen. Damit hat hat man eine App-ID/API-Schlüssel und den geheimen Schlüssel (App Secret).

Die beiden im Gepäck ruft man den Facebook Graph API Explorer auf und wählt die eben angelegte Extension aus.

Nun muss man einen neuen Zugriffsschlüssel generieren und die Rechte manage_pages. Zusätzlich habe ich mir noch die Rechte create_event und publish_stream gegönnt, ohne final sagen zu können ob sie wirklich nötig gewesen wären.

Mit dem generierten Schlüssel führt man im Explorer nun folgende Anfrage aus:

/me/accounts

Dort erscheinen nun alle Seiten, für die man Rechte besitzt. Man sucht die gewünschte Page aus und kopiert sich den Token unter „access_token“. Damit ist man im Besitz eines Page Access Tokens. Dieser läuft allerdings nach 1 bis 2 Stunden ab (short-lived), was man heraus bekommt, in dem man ihn im Access Token Debugger einfügt.

App Accesst Token von kurz- nach langlebig

Wie man nun aus dem short-lived ein long-lived Token macht, steht unter hier dokumentiert. Kurz, folgendes im Browser aufrufen:

https://graph.facebook.com/oauth/access_token
?client_id=$ACCESS_TOKEN
&client_secret=$APPLICATION_SECRET
&grant_type=fb_exchange_token
&fb_exchange_token=$SHORT_LIVED_ACCESS_TOKEN

Prinzipiell, simpel. Aber auch hierzu gibt es diverse Lösungsansätze im Netz, bis hin zu der Meinung das sei gar nicht mehr möglich. Mit dieser Lösung kommt man in jedem Fall an ein Token welches für 60 Tage gültig ist und mit jeder Nutzung erneuert wird. Mir persönlich reicht das.

Event auf Page posten

Auch hier waren es unterschiedlichste Anleitungen, die mich ins arg Schlingern gebracht haben. Konnte ich mit folgendem Code in meinem Namen posten:

$ret_obj = $facebook->api('/'.$PAGE_ID.'/events?access_token='.$PAGE_ACCESS_TOKEN, 'POST', array(
  'name' => $event_name,
  'start_time' => $event_start,
  'privacy_type' => $event_privacy,
  'location_id' => $LOCATION_ID,
));

Musste ich für das Posten auf der Fanpage den access_token direkt in das event_array aufnehmen, wollte ich nicht eine PHP Exception den Kopf geknallt bekommen:

Uncaught Exception: You must be an admin of the specified page to perform the requested action.

Hier lag der Knackpunkt. Um dahinter zu kommen, habe ich zig Tage der Verzweiflung durchleben müssen.

Hat man nun aber den Page Access Token, ist es mit folgendem Test-Script auch möglich einen Event im Namen der Seite zu posten:

require 'src/facebook.php';
 
$APP_ID = 'xxx';
$APP_SECRET = 'xxx';
$PAGE_ACCESS_TOKEN = 'xxx';
$PAGE_ID = 'xxx';
$LOCATION_ID = 'xxx';
 
$facebook = new Facebook(array(
  'appId' => $APP_ID,
  'secret' => $APP_SECRET,
  'cookie' => false,
  'fileUpload' => true
));
 
$file = realpath('/path/to/image/image.jpg');
 
$ret_obj = $facebook->api('/'.$PAGE_ID.'/events', 'POST',
array(
  'access_token' => $PAGE_ACCESS_TOKEN,
  'name' => 'New Event API Test Event',
  'start_time' => '2013-12-04',
  'privacy_type' => 'OPEN',
  'location_id' => $LOCATION_ID,
  basename($file) => '@'.$file,
));
 
if(isset($ret_obj['id'])) {
  echo 'Event with added. ID: ' . $ret_obj['id'];
} else {
  echo 'Couldn\'t create event';
}

Nicht der Weisheit letzter Schluss

Jetzt habe ich die Lösung hier genau so halbgar dokumentiert, wie vieler Orts und führe damit eventuell wieder andere in die Irre. Bei Fragen stehe ich aber gerne zur Verfügung. Das größte Problem ist vermutlich die sich ändernde Facebook-API. Dazu ein Buch zu schreiben, scheint mir vergeudete Zeit und für Blogposts gilt vermutlich das Gleiche. Dabei dachte ich immer, es sei ein Unding APIs nach Veröffentlichung immer wieder zu ändern…

Update 23.01.2015

Mit API-Version 2.2 hat Facebook die Möglichkeit Events auf Facebook zu posten eingestellt: https://developers.facebook.com/docs/apps/changelog

Ein Gedanke zu „Facebook Event Post auf Fanpage“

Kommentare sind geschlossen.