API Open Graph Facebook

Graph API

L'API

Illustration symbolique du Social Graph

Avant de voir concrètement comment fonctionnement l'API proposé par Facebook, commençons par définir plus précisèment le Social Graph. Facebook par du principe qu'il est possible de tout représenter sous formes d'objets et de connexions. Un exemple de la vision du Social Graph :

L'API nous permettra d'accéder à ces différents objets pour ensuite utiliser les connexions et avoir accès à d'autres objets. Pour cela, Facebook propose un Web Service. Les requêtes se feront à l'aide d'une url et les réponses seront retournées, au choix, au format JSON ou XML.

Par soucis de simplicité, Facebook ne propose qu'un seul point d'entrée :

http://graph.facebook.com

Le parcours du Social Graph est ensuite tout aussi simple. Cela se fera pas identifiant d'objet et par définition de connexion :

http://graph.facebook.com/identifiant/connexion

L'identifiant

L'identifiant permet de définir de façon unique un objet dans l'API Facebook. C'est une valeur numérique incrémentée à chaque création d'un nouvel objet qu'il s'agisse d'un profil, d'une page, d'une application, etc.

Par exemple, l'utilisation de l'url ci-dessous permet d'accéder aux informations publiques que Mark Zuckerberg :

http://graph.facebook.com/68310606562

Voici le résultat obtenu au format JSON :

{
   "id": "68310606562",
   "name": "Mark Zuckerberg",
   "picture": "http://profile.ak.fbcdn.net/hprofile-ak-snc4/50270_68310606562_2720435_s.jpg",
   "link": "http://www.facebook.com/markzuckerberg",
   "category": "Public figure",
   "likes": 3711466,
   "website": "www.facebook.com",
   "username": "markzuckerberg",
   "personal_interests": "openness, making things that help people connect and share what's important to them, revolutions, information flow, minimalism\n\n\n"
}

Les membres de Facebook peuvent également choisir une chaîne de caractère permettant de créer un alias identifiable par l'homme. Mark Zuckerberg a tout simplement choisi son nom :

http://graph.facebook.com/markzuckerberg

Nous pouvons voir que cette requête retourne bien la même réponse :

{
   "id": "68310606562",
   "name": "Mark Zuckerberg",
   "picture": "http://profile.ak.fbcdn.net/hprofile-ak-snc4/50270_68310606562_2720435_s.jpg",
   "link": "http://www.facebook.com/markzuckerberg",
   "category": "Public figure",
   "likes": 3711466,
   "website": "www.facebook.com",
   "username": "markzuckerberg",
   "personal_interests": "openness, making things that help people connect and share what's important to them, revolutions, information flow, minimalism\n\n\n"
}

Si nous lisons la réponse, nous remarquons que l'identifiant personnalisé choisi par les membres de Facebook est enregistré comme "username".

La connexion

Nous pouvons ensuite partir de cet identifiant et de l'objet qu'il désigne pour accéder aux autres objets par l'intermédiaire des connexions.
Voici quelques exemples :

Pour accéder à la liste des amis d'une personnes...

http://graph.facebook.com/markzuckerberg/friends

Pour accéder à la liste de qu'une personne aime...

http://graph.facebook.com/markzuckerberg/likes

Pour accéder à la liste des vidéos postées par une personne...

http://graph.facebook.com/markzuckerberg/videos

Biensûr, la précision des informations retournées par l'API dépendent des permissions que nous avons sur l'objet initial. Dans mon cas, je ne suis pas amis avec Mark Zuckerberg, les requêtes précédentes ne me retournerons rien d'autres que :

{
   "error": {
      "type": "OAuthException",
      "message": "An access token is required to request this resource."
   }
}

Outils Complémentaires

Real Time

En utilisant le Graph API et les permissions que vous avez sur les différents objets du Social Graph, vous pouvez avoir une copie partielle du Graph de Facebook. Les utilisateurs s'inscrivent sur votre site avec leur compte Facebook. Vous pouvez ainsi récupérer les informations de ce membre comme son nom, prénom, sa photo de profil.
Mais quoi faire lorsque le membre mais à jour sa photo de profil par exemple? Jusqu'ici, les développeurs avaient pour habitude de requêter régulièrement les données de Facebook pour mettre à jour leurs bases de données en cas de changement. Beaucoup de ces requêtes sont inutiles puisque la plupart du temps, aucune donnée n'est modifiée.
Pour remédier à ce problème, Facebook a mis en place le Real Time. Ce n'est plus à vous de demander à Facebook si une donnée à changée mais c'est Facebook qui vous informera de chaque modification en temps réel. Il est ainsi plus facile d'avoir une copie locale up-to-date d'une partie de Facebook.

Ce n'est pas seulement un outil pour les développeurs mais c'est également un outil pour les utilisateurs. En effet, si je fais une mise à jour de mon profil Facebook, j'aimerais que tous les sites, sur lesquels j'utilise mon compte Facebook pour me connecter, soient également mis à jour. J'ai ainsi une centralisation de mon identité numérique et une modification sur mon compte Facebook se répercutera automatiquement sur les autres sites.

Oauth 2.0

logo Oauth 2.0

Facebook utilise maintenant une technologie connue pour la gestion de l'authentification : Oauth 2.0. Ils ont choisi cette technologie pour deux raisons :

Cette technologie est également utilisée par Yahoo, Twitter, Google...