01
Nov
2010
admin

Daten abfragen mit der Facebook Graph API

Im Tutorial Erste Schritte mit der Graph-API habe ich bereits den grundlegenden Umgang mit der Graph API beschrieben. In diesem Tutorial möchte ich etwas genauer auf die Datenabfragen mit der Graph API eingehen.

Generell kann man auf alle Objekte des Sozialen Graphen auf die selbe Art und Weise zugreifen. Dazu benötigen wir lediglich die ID des Objektes. Eine Abfrage folgt immer dem folgenden Schema:

https://graph.facebook.com/ID

Um die Daten der Coca-Cola Seite abzurufen, können wir auf folgende URL zugreifen:

https://graph.facebook.com/40796308305

Alternativ wäre auch folgendes möglich:

https://graph.facebook.com/coca-cola

Die ID kann also auch gegen den eindeutigen Seitennamen getauscht werden. Dieses Schema lässt sich nicht nur auf Facebook Seiten, sondern auf alle Objekte des Sozialen Graphen Anwenden, wie z.B. Benutzer, Fotos, Profil Bilder, Videos, Status Nachrichten und alle anderen Objekte. Alles was wir dafür brauchen, ist die ID des Objektes. Hier ein paar Beispiele (Auszug aus der Graph API Dokumentation):

Hinweis
Bitte beachte, dass für einige Abfragen ein gültiger Access Token notwendig ist, um die Daten abzufragen, bzw. um erweiterte Informationen zu erhalten.

Wie man anhand der Abfrage des Profil Bildes sehen kann, können die eigenen Daten, bzw. die Daten des Benutzers, der diesen Link aufruft, immer mit dem Schlüsselwort me abgerufen werden. Möchte man also beispielsweise eine Grußformel in seiner Anwendung nutzen (z.B. Hallo BENUTZERNAME), kann man es sich so sparen, erst die Nutzer ID auszulesen, um dann den Namen zu ermitteln. Man nutzt hier einfach me und bekommt automatisch die Daten des Nutzers, der die Anwendung gerade aufruft.

Weiterhin ist es möglich, direkt Objekte abzurufen, die mit einer Person, bzw. einem anderen Objekt verbunden sind. Hier ein paar Beispiele (Auszug aus der Graph API Dokumentation):

Hinweis
Bitte beachte, dass für einige Abfragen ein gültiger Access Token notwendig ist, um die Daten abzufragen, bzw. um erweiterte Informationen zu erhalten.

Jede Anfrage an die Graph API gibt ein JSON Objekt zurück. Die Anfrage https://graph.facebook.com/btaylor liefert uns folgende Antwort:

Nutzen wir die Facebook PHP SDK, um auf diese Daten zuzugreifen, werden uns die Daten bequemer Weise als Array geliefert und wir können diese Daten dann in unserer Anwendung weiterverarbeiten:

<?php

require 'library/facebook.php';

$facebook = new Facebook(array(
  'appId'  => '145178132195106', // Anwendungs ID
  'secret' => '14816c7bf9ceb4231d95242d51ccd693', // Anwendungs-Geheimcode
  'cookie' => true, // enable optional cookie support
));

if ($session = $facebook->getSession()) { // Session vorhanden?
  try {
    $data = $facebook->api('/btaylor'); // Daten üder API abfragen.
    print '<pre>' . print_r($data, true) . '</pre>'; // Ausgabe der Daten.
  } catch (FacebookApiException $e) {
    print $e;
  }
} else { // Keine Session vorhanden.
  $params = array(
    'fbconnect' => 0,
    'canvas' => 1,
  );

  $loginUrl = $facebook->getLoginUrl($params); // URL zum Autorisierungsdialog erstellen.
  print '<script>top.location.href = "' . $loginUrl . '"</script>'; // Weiterleitung zum Anfordern der Autorisierung.
}
?>

Dieser Code erzeugt folgende Ausgabe:

Selektionen
Manchmal wollen wir nur auf bestimmte Daten zugreifen und nicht alle verfügbaren Daten abrufen. Dafür bietet uns die Graph API die Möglichkeit der Datenselektion. Wollen wir z.B. nur die ID, den Namen und den Link zum Profil haben, ist nur eine kleine Änderung notwendig:

$data = $facebook->api('/btaylor?fields=id,name,link'); // Daten üder API abfragen.

Wir erhalten folgendes Array geliefert:

Eine Weitere Form der Selektion ist das Abrufen multipler Objekte:

$data = $facebook->api('?ids=btaylor,zuck'); // Daten üder API abfragen.

So können wir mehrere Objekte gleichzeitig anfragen. Geliefert wird dieses Array:

Da man, wie gesagt, jedes Objekt des Sozialen Graphen Abfragen kann, kann man natürlich als ID auch eine Webseiten URL nehmen, sofern sie Teil des Graphen ist:

$data = $facebook->api('?ids=http://www.levis.com'); // Daten üder API abfragen.

Es folgt die Ausgabe:

Bilder
Um ein Bild eines Benutzers (oder einer Seite oder eines Events etc.) aufzurufen, können wir wie folgt vorgehen:

<img src="http://graph.facebook.com/4/picture?type=square" />
<img src="http://graph.facebook.com/4/picture?type=small" />
<img src="http://graph.facebook.com/4/picture?type=large" />

Es gibt drei verschiedene Größen, die wir abfragen können:

  • square (50x50 Pixel. Dies ist die Standardgröße, falls kein Parameter angegeben wird.)
  • small (50 Pixel breit, variable Höhe)
  • large (200 Pixel breit, variable Höhe)

Der Vorteil, Bilder auf diese Art einzubinden, liegt darin, dass automatisch immer das aktuelle Benutzerbild geladen wird.

Paging
Mit dem Paging können wir die Menge der zurückgelieferten Daten limitieren, bzw. auf mehrere Seiten verteilen.

$data = $facebook->api('/me/likes?limit=2'); // Daten üder API abfragen.

Wie man an folgendem Screenshot sieht, werden nur zwei Ergebnisse angezeigt (limit=2). Zusätzlich erhalten wir einen Link, um die beiden nächsten Ergebnisse anzuzeigen. Dort wird dann zusätzlich noch der Link für die vorigen zwei Ergebnisse angezeigt. So ergibt sich ein schönes Paging für unsere Abfragen.

Suche
Mit der Graph API können wir über alle öffentlichen Objekte des Sozialen Graphen suchen. Grundsätzlich gilt dabei folgendes Format:

https://graph.facebook.com/search?q=QUERY&type=OBJECT_TYPE

QUERY ist dabei der Suchstring und OBJECT_TYPE der Objekt Typ, nach dem gesucht werden soll. Nach folgende Objekt Typen kann dabei gesucht werden:

  • post - Alle öffentlichen Posts (Status Nachrichten, Links etc.)
  • user - Benutzer
  • page - Seiten
  • event - Events
  • group - Gruppen
  • checkin - Check-ins

Es ist außerdem möglich, den News Feed des aktuellen Benutzers zu durchsuchen.

  • https://graph.facebook.com/me/home?q=QUERY

Um nun z.B. alle öffentlichen Posts nach dem Schlüsselwort Obama zu durchsuchen und in die Ausgabe gleich ein Paging mit einzubauen, ist folgende Änderung an unserem Script notwendig:

$data = $facebook->api('/search?q=obama&type=post&limit=5'); // Daten üder API abfragen.
Hinweis
Du kannst alle Codebeispiele von AboutTheWeb über ein SVN Repository auschecken. Dieses Beispiel findest du unter folgender Adresse:
http://svn.abouttheweb.de/atwtutorials/trunk/graphapiget/

Alternativ kannst Du alle Codebeispiele über das AboutTheWeb github Repository auschecken.

Trackback-URL für diesen Beitrag

http://www.abouttheweb.de/trackback/596

Ähnliche Artikel

Bild des Benutzers rassloff
rassloff
Mo, 11/15/2010 - 17:05

abfragen der daten schön und gut, aber wie kann ich z.b. von extern etwas bei facebook einfügen ??!!!

Bild des Benutzers admin
admin
Mo, 11/15/2010 - 17:24

Für das Veröffentlichen von Daten kann ich dich zurzeit leider nur auf die offizielle Dokumentation von Facebook verweisen (http://developers.facebook.com/docs/api), da das Tutorial dazu noch nicht fertig ist (kommt als nächstes).

Bild des Benutzers Tobias
Tobias
Sa, 12/18/2010 - 14:36

Hallo!
Leider erhalte ich bei folgendem Aufruf einer Notiz:
https://graph.facebook.com/126802404050496?access_token="..."

nur

false

als Ausgabe. Die Notiz gibt es aber...
http://www.facebook.com/note.php?note_id=126802404050496

Was mache ich falsch?

Bild des Benutzers admin
admin
Sa, 12/18/2010 - 16:45

Wenn ich diese ID Abfrage, erhalte ich die Notiz. Vielleicht stimmt dein Access Token nicht (bzw. dein Access Token ist ungültig). Hast du die URL inkl. des Access Tokens mal direkt im Browser eingegeben? Dann kann man schon mal eingrenzen, ob es am Code oder der URL, inkl. der Bestandteile, liegt.

Bild des Benutzers Martin
Martin
Mi, 08/24/2011 - 12:51

Hallo
Ich spiele gerade mit der Graph herum und versuche die Wall öffentlich auf meine Website zu bringen.
Über https://graph.facebook.com/ID/feed klappt das auch ganz gut, nur fällt mir auf, dass hier die eigenen Einträge fehlen, zumindest der Inhalt. Man sieht, dass ich was geschrieben habe, da das Bild, der Name und Zeit auftaucht, nur der Inhalt kommt nicht.

Zu sehen unter http://da.m-b.me. Vielleicht kann mir hier jemand weiterhelfen.

Danke.

Bild des Benutzers Nitro
Nitro
Do, 09/08/2011 - 14:51

Hey,
würdest du mir mal den Code zukommen lassen wie du deine Wall implementiert hast auf deiner Seite?
ich versuche das verzweifelt bei mir aber ich komme nicht zurande.

Wäre super wenn du mir einfach ne mail schicken könntest.

Lg

Bild des Benutzers Nitro
Nitro
Do, 09/08/2011 - 14:52

Hey,
würdest du mir mal den Code zukommen lassen wie du deine Wall implementiert hast auf deiner Seite?
ich versuche das verzweifelt bei mir aber ich komme nicht zurande.

Wäre super wenn du mir einfach ne mail schicken könntest.

Lg

Bild des Benutzers Nadine
Nadine
Mi, 12/21/2011 - 17:46

Hallo zusammen.

Ich habe da eine Frage und hoffe, dass mir jemand da weiterhelfen kann: Wie kann ich mir alle Veranstaltungen (events) in einem bestimmten Ort ausgeben lassen und diese auf meine Homepage veröffentlichen. Ihr könnt mir auch direkt eine Email schreiben: nadine_von_malek@hotmail.de.

X
Laden