Utiliser l’API PHP de Facebook

Logo Facebook Facebook a effectué quelques changements dernièrement au niveau de l’interaction avec son site. La plus intéressante est la possibilité d’accéder aux informations à travers l’API graph.

Selon cette approche, chaque objet est representé par un identifiant unique et on peut accéder aux propriétés d’un objet en invoquant l’URL https://graph.facebook.com/ID qui renvoit des informations sous format JSON. Il est également possible d’accéder aux personnes et pages par leur nom d’utilisateur.

Tous les objets sont connectés via des relations et peuvent être consulté à travers l’URL https://graph.facebook.com/ID/CONNECTION_TYPE en fournissant un jeton d’accès valable.

Voici donc une explication de comment accéder à ces informations.

Premièrement, il est nécessaire de télécharger la SDK PHP disponible ici. Vous y trouverez une page example.php avec laquelle pour pourriez effectuer des tests. Pour l’inclure la SDK il suffit d’ajouter un require en haut de votre page PHP:

require 'facebook/facebook.php';

Ensuite vous devez créer une id application et le code secret de la partie développement du site. Ceci est nécessaire pour des accès OAuth. Ceux-ci vous permettrons de lancer une instance qui va se connecter à Facebook.

$facebook = new Facebook(array(
  'appId'  => '12345...',
  'secret' => 'abcdef...',
));

Une fois l’instance créé, vous pouvez déjà récupérer un utilisateur Facebook si une connexion a été ouverte sur le navigateur utilisé.

$fbUser = $facebook->getUser();

Dès que vous avez l’utilisateur vous pouvez déjà initier des requêtes graph. J’ai ajouté une ligne pour récuperer le liste des amis pour montrer à quel point il est simple de les utiliser. Cette page montre ce qui est possible de récupérer comme autres informations.

if ($fbUser) {
  try {
    $fbUserProfile = $facebook->api('/me'); // Récuperer l'utilisateur
    $friends = $facebook->api('/me/friends'); // Récuperer ses amis
     
  } catch (FacebookApiException $e) {
    error_log($e);
    $fbUser = null;
  }
}

En passant, pour l’authentification à travers Facebook (le fameux « facebook connect ») il est possible de spécifier des adresses callback qui sont déclenché lorsqu’une connection est effectuée (ici j’ai ajouté un paramètre ‘next’ pour spécifier vers quelle page rediriger après que l’opération a été complétée).

if ($fbUser) {
  //$logoutUrl = $facebook->getLogoutUrl();
  $logoutUrl = $facebook->getLogoutUrl(array( 'next' => ('http://www.domain.com/index.php') ));
} else {
  $loginUrl = $facebook->getLoginUrl(array( 'next' => ('http://www.domain.com/connected.php?id=' . $id ) ));
}

Il suffit ensuite de la ligne ci-dessous pour présenter un lien pour qu’un utilisateur se déconnecte. Toutefois, une bonne pratique est de laisser l’utilisateur connecté sur son compte Facebook et de le déconnecter uniquement de votre site.

<?php if ($user): ?>
      <a href="<?php echo $logoutUrl; ?>">Logout</a>
<?>

De même, pour la connexion un lien login peut être présenté comme suit ou substitué avec un bouton:

Login using OAuth 2.0 handled by the PHP SDK:
<a href="<?php echo $loginUrl; ?>">

Ce petit détour était nécessaire car sans lui aucune information ne s’afficherais sur notre page PHP. Voici quelques exemples:

Afficher un miniature de l’image de profil d’un utilisateur

<img src="https://graph.facebook.com/<?php echo $fbUser; ?>/picture">

Afficher l’id

<pre><?php print_r($fbUser); ?></pre>

Afficher l’objet utilisateur (la sortie JSON a été transposé en array)

<pre><?php print_r($fbUserProfile); ?></pre>
Résultat

Array
(
    [id] => 123456...
    [name] => James
    [first_name] => James
    [last_name] => ...
    [link] => http://www.facebook.com/...
    [username] => ...
    [gender] => male
    [timezone] => ...
    [locale] => en_US
    [verified] => 1
    [updated_time] => ...
)

Affichage des amis

<pre><?php print_r($friends); ?></pre>

Résultat

Array
(
    [data] => Array
        (
            [0] => Array
                (
                    [name] => Jean Dupont
                    [id] => 123456
                )
 
            [1] => Array
                (
                    [name] => Michel Tartempion
                    [id] => 654321
                )
                ...

Une requête sur la page publique de Coca-Cola

<?php
$cocacola = $facebook->api('/cocacola');
?>
<pre><?php print_r($cocacola); ?></pre>

Comme aucune authentification est nécessaire pour les informations publiques, vous pouvez consulter la sortie JSON en allant tout simplement sur ce lien:

https://graph.facebook.com/cocacola

Résultat

Array
(
    [id] => 40796308305
    [name] => Coca-Cola
    [picture] => http://profile.ak.fbcdn.net/hprofile-ak-snc4/203509_40796308305_256509_s.jpg
    [link] => http://www.facebook.com/coca-cola
    [likes] => 32044890
    [category] => Food/beverages
    [website] => http://www.coca-cola.com
    [username] => coca-cola
    [founded] => 1886
    [products] => Coca-Cola is the most popular and biggest-selling soft drink in history, as well as the best-known product in the world.
 
Created in Atlanta, Georgia, by Dr. John S. Pemberton, Coca-Cola was first offered as a fountain beverage by mixing Coca-Cola syrup with carbonated water. Coca-Cola was introduced in 1886, patented in 1887, registered as a trademark in 1893 and by 1895 it was being sold in every state and territory in the United States. In 1899, The Coca-Cola Company began franchised bottling operations in the United States.
 
Coca-Cola might owe its origins to the United States, but its popularity has made it truly universal. Today, you can find Coca-Cola in virtually every part of the world.
)

L’API graph permet également de modifier des informations comme changer le statut d’un utilisateur:

try {
      $statusUpdate = $facebook->api('/me/feed', 'post', array('message'=> 'Hello world!', 'cb' => ''));
} catch (FacebookApiException $e) {
      d($e);
}

Je terminerais par mentionner le FQL qui ne fait pas partie du graph API mais qui peut toujours se réveler utile. En voici un exemple:

$fql    =   "select name, hometown_location, sex, pic_square from user where uid=xxxxxxxxxxxxxxx";
$param  =   array(
       'method'     => 'fql.query',
        'query'     => $fql,
      'callback'    => ''
);
$fqlResult   =   $facebook->api($param);

Voila, j’espère que ce petit article aura servi à démystifier l’utilisation de l’API. Si certains y verront une utilité limité d’autres aurons compris les possibilités qu’il offre avec notamment l’intégration mais aussi la possibilité de rediriger un nombre potentiellement élevé d’utilisateurs vers des applications, voire un site.

– James Poulson.

12 réflexions au sujet de « Utiliser l’API PHP de Facebook »

  1. Bonjour,
    Merci pour cet article!

    Par contre comment récupérer la valeur de ‘En couple avec’

    En effet je souhaiterais avec l’ID de compte Facebook mais aussi l’ID du conjoint.

    Merci de votre aide.
    Cédric

  2. Bonjour Dr.Revolte,

    Je te remercie beaucoup pour ce petit article :)
    Je suis débutant en php, et je veux réaliser une application FB, je trouve pas beaucoup d’article & tutoriel très intéressants pour apprendre à utiliser leur API.

    Un merci à toi et aux autres pour le retour. C’est vrai qu’il manque un peu de tutoriels à jour. J’espére que cet article a pu vous avancer :)

  3. Bonjour randriano,

    Je me demande en fait pour la liste des friends, est-ce que l’on ne peut avoir que l’id et le name? Il n’est donc pas possible de voir le mur d’un ami?

    D’après la documentation, les informations se limitent à des informations publiques. Pour avoir plus d’informations sur un utilisateur on doit normalement obtenir son autorisation sous forme de token.

  4. Bonjour latristef,

    Je rebondis sur votre phrase « une bonne pratique est de laisser l’utilisateur connecté sur son compte Facebook et de le déconnecter uniquement de votre site. »

    L’explication que j’ai donné à trait à l’authentification que se fait par bouton ou lien et qui nécessite donc qu’un utilisateur enclenche un lien. De mémoire, le getLogoutUrl est utilisé ici pour setter l’adresse de renvoi. Pour visualiser cela le script passe la main à Facebook lors de l’authentification, l’addresse par défaut étant certainement celle du script appellant. Il doit y avoir un diagramme de séquence qui explique cela sur la partie développeur. Pour le reste, il faudra que je fasse quelques tests mais je dirais qu’il ne devrait pas être nécessaire de toucher à la session.

  5. Bon, j’ai compris le principe en lisant en plus le lien de Facebook:
    developers.facebook.com/docs/reference/api/

    Thanks again!

  6. Bonjour James,

    Merci pour cet article!
    Je me demande en fait pour la liste des friends, est-ce que l’on ne peut avoir que l’id et le name? Il n’est donc pas possible de voir le mur d’un ami?

  7. Bien le bonjour @jpoulson

    Je te remercie beaucoup pour ce petit article :)
    Je suis débutant en php, et je veux réaliser une application FB, je trouve pas beaucoup d’article & tutoriel très intéressants pour apprendre à utiliser leur API.

    Encore merci

    Bonne journée.

  8. Bonjour,
    Merci pour cet article fort utile.
    Je rebondis sur votre phrase « une bonne pratique est de laisser l’utilisateur connecté sur son compte Facebook et de le déconnecter uniquement de votre site. »
    En effet, que fait getLogoutUrl ??? Déconnexion de facebook ou seulement de l’application facebook du site concerné ??
    En effet, lorsque je fais getLogoutUrl, le programme réagit comme si l’utilisateur était seulement déconnecté de l’application mais pas de facebook. Si je recharge ma page, l’utilisateur est déconnecté de facebook…idem pour l’identification, dans certains cas, j’ai besoin de recharger la page pour que mon utilisateur soit connecté à mon application même s’il l’a déjà accepté auparavant.
    Y a t-il une manipulation à faire (remettre les sessions à null ?) pour que tout cela fonctionne avec cohénrence.

    Merci par avance pour votre aide.

  9. Bonsoir clarybelle. Si vous êtes tombé sur l’article à travers un moteur de recherche il se peut que celui-ci a été référencé que depuis peu en raison de sa récente publication. J’espère qu’il vous a été utile :)

Les commentaires sont fermés.