Gästelisten von Facebook Events auslesen
Es gibt ja leider seit geraumer Zeit nicht mehr die Möglichkeit bei einem Event auf Facebook die Gästeliste sauber zu exportieren. Man kann sich die Liste der “Attendees” zwar anzeigen lassen, allerdings nur in einer kleinen Box die es praktisch unmöglich macht einen übersichtlichen Export zu erhalten. Vor allem wenn die Gästeliste aus hunderten von Personen besteht, es werden nämlich nur hundert angezeigt bis man auf “mehr anzeigen” klickt:
Markieren, kopieren und die Namen herausfiltern ist also mühsam, und auf die IDs der jeweiligen User kommt man damit sowieso nicht. Nicht dass man sie für eine Gästeliste benötigen würde, aber schön wärs schon
Nun gibt es natürlich die Möglichkeit eine Gästeliste per Greasemonkey-Script auszulesen, aber die weitaus weniger umständliche und feinere Art ist natürlich die Verwendung einer Facebook App. Wie man eine Facebook App grundsätzlich anlegt erspare ich euch an dieser Stelle, dafür gibt es bereits mehr als genug Tutorials im Internet.
Graph API – Attending
Um die Attendees/Gäste der Veranstaltung einer öffentlichen Facebook Seite zu erhalten muss ein User die App nicht authorisieren, für den Zugriff auf die vom User direkt erstellen Events gilt das natürlich nicht. Dafür gibt es die Permission “user_events” und der User muss die App natürlich mit dieser explizit authorisieren. Für eine umfangreichere App die auch Facebook Seiten anzeigt von denen der User ein Administrator ist (und um brauchbare Statistiken zur Benutzung der App zu erhalten) ist es natürlich notwendig den User doch zu authorisieren.
Mit dem Graph API ist das Auslesen der Attendees wie immer recht simpel:
$attending = $facebook->api('/[EVENT-ID]/attending');
$attending = $attending['data'];
foreach ($attending as $attendee)
{
echo 'ID: ' . $attendee['id'] . ' / ';
echo 'Name: ' . $attendee['name'] . "\n";
}
Ausser der ID und dem Namen bekommt man natürlich keine weiteren Daten der Gäste, die Daten können per PHP natürlich recht einfach zum Beispiel als CSV-Export bereit gestellt werden. Beispielhaft habe ich dazu eine Facebook App programmiert damit man sich vorstellen kann wie so etwas aussehen könnte: http://facebook.devils-heaven.com/apps/eventattendees
Designtechnisch natürlich nicht Oscar-reif, dafür aber garniert mit jQuery und AJAX-Technologie
Links

20. Januar 2011 

Klappt leider nur mit Events unter 1000 Teilnehmern.
Darüber hinaus gibts noch einen Bug bei fb
Hallo,
da es ja wohl ein Erfolgserlebnis vorhanden ist, möchte ich fragen, ob der vollständige php-code veröffentlicht werden kann.
Danke.
Klaus-Dieter Brinkmannn
Klappt leider bei mir – wie das Lesen der events – nicht
OAuthException: (#803) Some of the aliases you requested do not exist: [EVENT-ID]
Bitte vollständigen php-Code veröffentlichen-
Sorry, meine Beiträge sollen keine kopierbaren Programme sein, sondern Tips und Tricks wie man mit der Facebook API arbeitet, ich bitte um Verständnis
Ich gebe aber gerne Tips: Die Event-ID ist im Beispiel lediglich ein Platzhalter und muss mit einer korrekten ID befüllt werden.
OK.
In dieser Art ?
$facebook->api(“/100819660014471/attending”)
gibt aber auch kein Ergebnis.
Klaus-Dieter
Genau, im Prinzip beginnt jede Anfrage an die Graph API mit einer ID oder einer Vanity-URL. Diese muss natürlich gültig sein. Ich empfehle vor der Programmierung mit der API allerdings dringend sich näher mit der Graph API auseinander zu setzen (http://developers.facebook.com/docs/reference/api/), und mit der User-Authentifizierung. Ein einfaches Programmier-Beispiel zum Umgang mit dem Facebook PHP SDK liegt übrigens dem SDK selbst bei.
Hallo, ist es möglich die über eine Fanseite erstellten Veranstaltungen in einer Liste auszugeben, auf einer externen Seite, die als Tab in FB angezeigt werden soll.
Natürlich, hab ich sogar hier beschrieben: http://www.devils-heaven.com/facebook-api-auslesen-der-user-events/ (2. sourcecode)
In einem Tab ist das auch kein Problem, da ja der Tab-Inhalt ein normaler iframe ist. Was darin passiert bleibt dir überlassen.
Hi Andi,
danke für diesen Artikel. Bei meinem Problem ist es aber etwas spezieller. Und zwar, ist es möglich, nur die Anzahl der Zusagen ausgeben zu lassen? Ich möchte in meiner App die Zusagen von verschiedenen Veranstaltungen vergleichen.
Danke!
Gruss,
Stefan
hi! natürlich, das ist kein problem:
nach dieser zeile:
$attending = $attending['data'];
…kannst du gleich die anzahl ausgeben:
echo count($attending);
zumindest falls ich deine frage richtig verstanden habe
wenn du allerdings gleich mehrere veranstaltungen gleichzeitig abfragen willst dann solltest du einen batch-request verwenden. der dauert nämlich dann nur so lange wie der längste einzelrequest. zu den batch-request hab ich allerdings einen eigenen blogpost geplant, das kommt noch.