Stephan Romhart über Technik, Kultur und Philosophie

Schwer zu sagen · Technik

Facebook-Feed – Ganz einfach über Facebook-Graph-API mit PHP einbinden

Stephan 0

Mal ganz abgesehen davon, dass ich persönlich nichts mit Facebook anfangen kann, zeige ich in diesem Artikel die mir bekannte einfachste Art, den Feed eines Facebook-Accounts mit Php auszulesen.

Schritt 1: Facebook-App-Id und zugehöriges Secret

Das Anlegen einer App-Id wird auf den Developer-Seiten von Facebook gut beschrieben: https://developers.facebook.com/docs/apps/register. Jedoch bin ich bei der konkreten Anwendung der Graph-API mit der Facebook-Dokumentation und diversen Google-Suchen nicht weiter gekommen.

Schritt 2: Facebook-Feed-Konfiguration

Ich lege für solche Bereiche immer eine kleine Konfigurationsvariable an. Ist einfach sauberer. "app_id" und "secret" bekommt man von Facebook, die "page_id" ist ein Segment in der Facebook-Url. Z.B. ist die Page-Id von SUSE bei folgender Url "https://www.facebook.com/SUSEWorldwide" eben "SUSEWorldwide".

# Facebook-Config
$facebook_config = array(
  'app_id' => '123....4567',
  'secret' => '123....4567',
  'page_id' => 'facebook-id'
);

Der Facebook-Access-Token ist nichts anderes, als die App-Id und das Secret verbunden mit einer Pipe ("|"). Der Array "fields" enthält die Felder des Feeds, die man ausgegeben haben will. Üblicherweise wäre das "message","link","created_time" usw. Im Facebook-Developer-Bereich gibt es eine Liste, was da alles geht.

$facebook_config['access_token']  = $facebook_config['app_id'].'|';
$facebook_config['access_token'] .= $facebook_config['secret'];

$facebook_config['fields'] = array(
  'message',
  'link',
  'created_time',
  'full_picture'
);

Schritt 3: Url-Parameter für Graph-API erstellen

Hier baue ich die Url für die Graph-API zusammen. Mit den Parametern gelingt dann der Zugriff.

$facebook_graph_url  = 'https://graph.facebook.com/';
$facebook_graph_url .= $facebook_config['page_id'];
$facebook_graph_url .= '/posts?fields=';
$facebook_graph_url .= implode(',',$facebook_config['fields']);
$facebook_graph_url .= '&access_token='.$facebook_config['access_token'];
$facebook_graph_url .= '&date_format=U';

Der optionale Parameter "date_format=U" gibt das Feld "created_time" als UNIX-Zeitstempel zurück. Finde ich zum Weiterverarbeiten besser als das reguläre vorformatierte Zeitformat.

Schritt 4: Verarbeiten des JSON-Strings

Jetzt lese ich die von Facebook angefragte Datei mit "file_get_contents" als String aus und wandle die JSON-Zeichenkette in ein Objekt. Das @-Zeichen vor "file_get_contents" ist optional. Es unterdrückt die Ausgabe einer Fehlermeldung des PHP-Interpreters. Danach folgt eine Test-Ausgabe der erhaltenen Daten. Jetzt kann man mit einer Schleife alle Feed-Elemente durchlaufen z.B. als Liste ausgeben lassen.

# JSON-String
$facebook_json_string = @file_get_contents($facebook_graph_url);

# Feed-Daten als Objekt
$facebook_feed = json_decode($facebook_json_string);

# Test-Ausgabe
echo '<pre>';
print_r($facebook_feed);
echo '</pre>';

Das gesamte Skript am Stück

Schreibt mir doch, ob es noch eine einfachere Herangehensweise gibt, oder ob sich ein Fehler eingeschlichen hat. Bisher bin ich mit dieser Methode eigentlich immer gut gefahren. Alles soweit performant und übersichtlich.

# Facebook-Config
$facebook_config = array(
  'app_id' => '123....4567',
  'secret' => '123....4567',
  'page_id' => 'facebook-id'
);
$facebook_config['access_token']  = $facebook_config['app_id'].'|';
$facebook_config['access_token'] .= $facebook_config['secret'];
$facebook_config['fields'] = array(
  'message','link','created_time','full_picture'
);

# Facebook-Graph-Url
$facebook_graph_url  = 'https://graph.facebook.com/';
$facebook_graph_url .= $facebook_config['page_id'];
$facebook_graph_url .= '/posts?fields=';
$facebook_graph_url .= implode(',',$facebook_config['fields']);
$facebook_graph_url .= '&access_token='.$facebook_config['access_token'];
$facebook_graph_url .= '&date_format=U';

# JSON-String
$facebook_json_string = @file_get_contents($facebook_graph_url);

# Feed-Daten
$facebook_feed = json_decode($facebook_json_string);

# Test-Ausgabe
echo '<pre>';
print_r($facebook_feed);
echo '</pre>';

Weiterführende Links