TB

Entwicklung von Facebook-Anwendungen mit PHP # Teil 3

Geschrieben am Dienstag, 9. November 2010

Hinweis: Seit der Veröffentlichung dieses Tutorials gab es sehr viele Änderungen an der Facebook-API, weshalb möglicherweiße ein Vielzahl der Beispiele und Schritte nicht mehr wie gewünscht funktionieren bzw. nachvollziehbar sind. Da ich mich mit den vorgenommenen Änderungen an der Facebook-API nicht weiter beschäftigt habe, kann ich zu den dadurch auftretenden Problemen leider keine Hilfe geben!

Nachdem sich die ersten beiden Teile dieser Tutorial-Reihe mit der Erstellung einer ersten Facebook-Anwendung und den Zugriffsrechten beschäftigt, wird dieser dritte Teil zeigen, wie sich schnell und einfach Benutzerdaten auslesen und ausgeben lassen.

Anwendungen in sozialen Netzwerken leben von den Daten seiner Benutzer, weshalb wir uns im zweiten Teil dieses Tutorials die erforderlichen Rechte geholt haben. Nun wollen wir allerdings mit den uns zur Verfügung stehenden Daten auch arbeiten. In diesem Beispiel werden wir den Anwender nach dem Aufruf der Anwendung mit dem vollen Namen begrüßen, seine eindeutige Facebook-Benutzerkennung sowie alle anderen uns zur Verfügung stehenden Daten inklusive E-Mail-Adresse und Profilbild anzeigen lassen.

Auslesen der eindeutigen Facebook-Nutzerkennung

Als erstes möchten wir unsere eindeutige Facebook-Nutzerkennung auslesen. Diese Kennung ist deshalb so interessant, da sie pro Benutzer einmalig vergeben wird und uns somit eindeutig identifiziert. Wir könnten diese Kennung zum Beispiel dafür verwenden, unseren Benutzer in einer internen Datenbank zu erfassen und ihm persönliche Einstellungsmöglichkeiten zur Verfügung zu stellen. Auslesen lässt sich die Benutzerkennung mit der im Facebook PHP-SDK bereitgestellten Funktion getUser():

$uid = $facebook->getUser();
echo $uid;

Auslesen der aktuellen Benutzerdaten

Im nächsten Schritt werden wir die Daten des Anwendungs-Benutzers auslesen. Ermöglicht wird uns dies über der im Facebook PHP-SDK bereitgestellten Funktion api(‚parameter‘). Dieser Funktion müssen wir allerdings eine Benuterkennung übergeben. Um die Daten des aktuellen Benutzers auszulesen, stehen uns zwei Möglichkeiten zur Verfügung:

Beide Methoden führen zum selben Ergebnis und liefern alle Daten, auf die wir Zugriff haben, als Array zurück. Unser Code inklusive einer Ausgabe des Array-Inhalts würde demnach folgendermaßen aussehen:

// Möglichkeit 1 mit Verwendung der UID:
$udata = $facebook->api($uid);

// Möglichkeit 2 mit Verwendung des Parameters /me:
$udata = $facebook->api('/me');

print_r($udata);

Ausgeben der Benutzerdaten

Da die Funktion api(‚parameter‘) des Facebook PHP-SDK seine Daten als Array zurückliefert, können wir ganz einfach mit den entsprechenden index-Namen, welche uns bei der Ausgabe des Arrays mittels der PHP-Funktion print_r() angezeigt werden, auf das entsprechende Element zugreifen und dieses ausgeben lassen.

Möchten wir beispielsweiße den Benutzer der Anwendung mit seinem vollen Namen begrüßen sowie seine E-Mail-Adresse und alle anderen Daten anzeigen lassen, würde unser Code dafür folgendermaßen aussehen:

echo 'Hallo <b>'.$udata['name'].'!</b><br /><br />';
echo 'Deine E-Mail-Adresse lautet: <b>'.$udata['email'].'</b><br /><br />';
echo 'Dies sind alle Daten, auf welche diese Anwendung Zugriff hat:<br />';
print_r($udata);

Anzeigen des Profilbildes

Das Profilbild des Benutzers lässt sich auf sehr einfachem Wege aufrufen: Mittels einem ganz normalen Image-Tags sowie der zuvor ausgelesenen eindeutigen Benutzerkennung können wir uns das Profilbild des Benutzers anzeigenlassen:

echo '<img src="https://graph.facebook.com/'.$uid.'/picture">';

Der komplette Code

Mit diesen wenigen Schritten ermöglicht uns die Anwendung bereits das Auslesen der anfangs aufgelisteten Benutzerdaten. Um einen Überblick über den aktuellen Stand nach den ersten drei Teilen dieses Tutorials zu behalten, findet sich im Folgenden der komplette Quellcode unserer index.php-Datei:

<?php

require_once 'facebook.php';

$facebook = new Facebook(array(
	'appId'		=> '129981167055450',
	'secret'	=> 'aa79e8b8b28da04fbece121c9c8d0a86',
	'cookie'	=> true
));

$session = $facebook->getSession();

if (is_array($session)){
	$uid = $facebook->getUser();
	echo 'Die eindeutige Benutzerkennung lautet: <b>'.$uid.'</b><br /><br />';

	// Auslesen der Benutzerdaten: Möglichkeit 1 mit Verwendung der UID:
	$udata = $facebook->api($uid);

	// Auslesen der Benutzerdaten: Möglichkeit 2 mit Verwendung des Parameters /me:
	$udata = $facebook->api('/me');

	echo 'Hallo <b>'.$udata['name'].'!</b><br /><br />';
	echo 'Deine E-Mail-Adresse lautet: <b>'.$udata['email'].'</b><br /><br />';
	echo 'Dies sind alle Daten, auf welche diese Anwendung Zugriff hat:<br />';
	print_r($udata);

	echo '<br /><br />Dein Profilbild:<br />';
	echo '<img src="https://graph.facebook.com/'.$uid.'/picture">';
}
else
{
	$loginUrl = $facebook->getLoginUrl(array(
		'canvas'		=> 1,
		'fbconnect'		=> 0,
		'req_perms'		=> 'email, publish_stream',
		'next'			=> 'http://apps.facebook.com/facebookthomastest/index.php',
		'cancel_url'	=> 'http://apps.facebook.com/facebookthomastest/fehler.php'
	));

	echo '<script>top.location.href = "'.$loginUrl.'"</script>';
}

?>

Auslesen fremder Benutzerdaten

Mit der im Facebook PHP-SDK bereitgestellten Funktion api(‚parameter‘) lassen sich übrigens auch Benutzerdaten von anderen Personen auslesen – allerdings nur die öffentlich zugänglichen Daten. Dies funktioniert genauso wie wenn wir unsere eigenen Daten auslesen möchten – allerdings muss uns die eindeutige Facebook-Kennung oder der Benutzername der jeweiligen Person bekannt sein:

// Möglichkeit 1 mit Verwendung der UID:
$udata = $facebook->api('100000181151862');

// Möglichkeit 2 mit Verwendung des Parameters /me:
$udata = $facebook->api('/thomasbelser');

print_r($udata);

Dies war dritte Teil bezüglich dem Thema “Entwicklung von Facebook-Anwendungen mit PHP”. Der vierte Teil beschäftigt sich mit dem Veröffentlichen von Neuigkeiten auf der Pinnwand des Benutzers.

Kommentare (21):

K.schütz 14. November 2010

Gute Tutorial, DAnke!
Gibt es weitereführende Infos wie ich nun den Facebook „Gefällt mir“ Button mit dem PHP -SDK einbauen kann. Ziel wäre es auf jeder Bilderseite den Button mit optionalen Text einzubauen. Bei FB komme ich mit der Dokumentation leider nicht klar.
LG Klaus

Thomas Belser 14. November 2010

Hi,

die nächsten Tage werde ich mich erst einmal mit der Veröffentlichung von Neuigkeiten auf der Pinnwand beschäftigen. Gerne füge ich dann noch einen Abschnitt hinzu der zeigt, wie man einen „Gefällt mir“-Button hinzufügt. :-)

Viele Grüße,
Thomas

Thomas Belser 14. November 2010

Eine kleine Anleitung bezüglich der Einbindung eines „Gefällt mir“-Buttons findest du auf dieser Website:

http://www.sophiadesigns.net/presse/blog/2010/04/how-to-gefallt-mir-button-code-in-die-webseite-einbinden

NoName 26. November 2010

Schönes Tutorial, gefällt mir sehr gut!
Hoffe es kommt noch einiges zum Thema FB-API.

Grüße!!

Christian Scholz-Flöter 30. November 2010

Es ist unglaublich, dass ich diesen Tag noch erlebe, wo ich einem der Gazillionen Tutorials online folge und tatsächlich alles klappt!
Ich weiß nicht, wie viele verschiedene Herangehensweisen ich bereits ausprobiert habe (PHP-SDK in offizieller und inoffizieller Fassung; JavaScript-SDK; FMBL; IFrame;…), aber eins ist sicher: Ich hatte mich eigentlich schon damit abgefunden, das Handtuch zu werfen und mich damit zufrieden zu geben, lediglich die FB-Userid in meine Flashapplikation übernehmen zu können. Ich war bis eben davon überzeugt, dass all die anderen Features & Goodies, die FB angeblich ja bereithält, mir verschlossen bleiben müssten. Immer traten irgend welche Fehler auf; mal war’s cURL, das mir in die Suppe spuckte, mal kamen lapidare FB-Fehlermeldungen, mal passierte einfach gar nichts…

Ich habe das Gefühl, dass du mir mit deiner exzellent geschriebenen („logischerweise“ schreibt sich nicht mit „ß“ — siehe Teil 1 *g*) Artikelserie die Tür ganz weit aufgestoßen hast. Vielen, herzlichen Dank dafür!

Christian Scholz-Flöter 30. November 2010

Bums, zu früh gefreut. Kaum lade ich die Seite mit meiner Applikation (die dem Zustand vom Ende von Teil#3 entspricht) neu, erhalte ich die bekannte Fehlermeldung:
„Fatal error: Uncaught CurlException: 28: connect() timed out! thrown in /var/www/web167/html/wtftestapp/facebook.php on line 614“

Dafür hast du nicht zufällig auch ein Gegenmittel, oder? ;)

Thomas Belser 30. November 2010

Hi,

inwiefern ist das ein „bekannter“ Fehler? Ist dieser an einer Stelle zuvor schonmal aufgetreten? Kann das ganze nämlich nicht ganz nachvollziehen. Hast du eventuell etwas an den Parametern der api()-Funktionsaufrufe geändert? Möglicherweise stimmt auch eine der URLs nicht. Eventuell zickt aber auch Facebook mal wieder nur ein bisschen rum – ich wurde eben nämlich auch wieder mit einer leeren Neuigkeiten-Seite begrüßt. :-)

Prüfe bitte nochmal alles nach und falls der Fehler wieder kommt dann sag mal bitte die genauen Schritte zum reproduzieren.

Gruß,
Thomas

Christian Scholz-Flöter 30. November 2010

Ich nehme normalerweise Abstand davon, die Kommentarsektion als Supportforum zu missbrauchen. Da du aber netterweise nachfragst (und du ja die Kommentare später auch wieder löschen kannst), antworte ich gern:

Ich habe genau die Dateien benutzt, die du für die Artikel zum Download bereitstellst, und die Codes aus deinen Artikeln verwendet. Ich habe keine Konfigurationen, Dateien oder sonstwas verändert.

Durch frühere Recherche war ich zu dem Schluss gekommen, dass cURL auf Shared Hosting-Servern nicht allzu weit verbreitet ist oder, wenn es verfügbar ist, es dann nicht stabil läuft. Denn immerhin gab es hier und dort schon Anleitungen, bestimmte cURL relevante Bereiche der facebook.php auszukommentieren bzw. umzuschreiben. Maßnahmen in dieser Richtung haben bei mir leider bisher keinen großen Erfolg gehabt. Außerdem wäre es natürlich auch einfach netter, nicht bei jedem Projekt alles noch maßschneidern zu müssen.

Christian Scholz-Flöter 1. Dezember 2010

Darf ich fragen, wo die Herren, bei denen es fehlerfrei läuft, hosten lassen?

Ich habe zwei Domains bei DomainBox laufen und beide zeigen sie dieselben Fehler. Vielleicht ist es irgendeine dusselige Servereinstellung, die mir in puncto Facebook das Leben schwer macht…

Thomas Belser 1. Dezember 2010

Ich bin seit Jahren bei All-Inkl (http://all-inkl.com/) und bei mir läuft dort standardmäßig alles ohne Probleme (mit aktiviertem PHP5 und MySQL5). Ohne Werbung machen zu wollen kann ich diesen Hoster generell sehr empfehlen, da nicht nur der Preis stimmt sondern auch der Kunden-Support top ist. Auf Support-Anfragen bezüglich einiger spezieller Konfigurations-Änderungen wurde mir zu den unmöglichsten Zeiten immer innerhalb weniger Minuten geholfen und auch bei allgemeinen Problemen zeigt sich der Support sehr kompetent und hilfsbereit.

Lukasvb 6. August 2011

Ich habe alles so gemacht, wie es hier im Tutorial beschrieben ist, allerdings kommt folgender Fehler:
Fatal error: Uncaught OAuthException: (#5) Unauthorized source IP address thrown in/usr/export/www/vhosts/funnetwork/hosting/***/Test/facebook.php on line 543 

Was kann ich dagegen tun?
Ich würde mich sehr über eine Antwort freuen.

Lukasvb

P.S.: Das Tutorial auf dieser Seite gefällt mir sehr gut ;) 

Lukasvb 6. August 2011

Die eindeutige Benutzerkennung wird aber korrekt ausgegeben, nur das Rest halt gar nicht, da kommt dann der oben genannte Fehler

Lukasvb 19. August 2011

Problem hat sich geklärt!
Es lag am Webhoster, haber vorher funpic.de genommen, und jetzt 000webhost.com und damit geht es =)
Danke für das Tutorial =) 

Tim 28. August 2011

Bekomme folgenden Fehler: Fatal error: Call to undefined method Facebook::getSession() in /var/www/vhosts/…
Kann mir einer sagen woran das liegt?

Emrah 12. Januar 2012

Bekomme wie Tim folgenden Fehler: Fatal error: Call to undefined method Facebook::getSession() in /var/www/… on line 11
Und was jetzt??

Thomas Belser 12. Januar 2012

Ich nehme mal an, dass ihr mittlerweile eine andere Version des PHP-SDKs verwendet als ich in meinem Tutorial benutzt habe?

Da sich seit dem Schreiben des Artikels sehr viel geändert hat, nehme ich an, dass mein Tutorial hoffnungslos veraltet ist und mit der jetzigen Facebook-API nicht mehr funktioniert. 

Angela 3. Oktober 2012

Bei mit wird Fehlercode: 1 (FBAPIErrorDomain) angezeigt komm nicht mehr auf mein Profil woran liegt das?

Alex 10. Oktober 2012

Habe schon erfolgreich ein iFrame erstellt und eingebunden aber ich bekomme nicht die UserID heraus. 
Bei deinem Beispielcode wird mir folgender Fehler angezeigt: „Fatal error: Call to undefined method Facebook::getSession() in /www/htdocs/w00fafa0/user.php on line 16″ 

Ich hoffe jemand kann mir weiterhelfen :( 

Thomas Belser 10. Oktober 2012

Der Guide ist mittlerweile leider veraltet, weshalb ein Großteil der Beispiele nicht mehr funktionieren.

Ich hatte probiert, diesen Guide zu aktualisieren – aber es wurde leider soviel Grundlegendes verändert, so dass man sich komplett neu einarbeiten müsste.

Alex 10. Oktober 2012

Dank dir für die schnelle Antwort, aber nach langer Recherche habe ich es nun endlich geschafft :) 

Falls jemand Interesse an dem Code hat:

// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  ‚appId‘ => ‚XXXXXXXXXXXX‘,
  ’secret‘ => ‚XXXXXXXXXXXXXXXXXXXXX‘,
));
 
// Get User ID
$user = $facebook->getUser();
 
// We may or may not have this data based on whether the user is logged in.
//
// If we have a $user id here, it means we know the user is logged into
// Facebook, but we don’t know if the access token is valid. An access
// token is invalid if the user logged out of Facebook.
if ($user) {
  try {
// Get the user profile data you have permission to view
$_SESSION[‚facebook_user‘] = $user;
$user_profile = $facebook->api(‚/me‘);
  } catch (FacebookApiException $e) {
$user = null;
  }
} else {
  die(‚<script>top.location.href=“‚.$facebook->getLoginUrl().'“;</script>‘);
}
 
// Login or logout url will be needed depending on current user state.
if ($user) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
  $loginUrl = $facebook->getLoginUrl();

Talip Göksu 3. September 2013

Beim mir kommt die ganze  Notice: Undefined index: friends_videos in … 
 

Kommentar schreiben:


Kommentar: