Avec la nouvelle API graphique de Facebook, les choses sont devenues un peu plus simples mais beaucoup moins bien documentées. Voici ce que j'ai fait pour pouvoir charger les posts de mon mur en tant que moi à partir d'un côté serveur uniquement (ne faisant pas partie d'une session de navigateur) php script :
1) créer une application facebook, si vous n'en avez pas déjà une utilisable pour ce projet http://www.facebook.com/developers/apps.php#!/developers/createapp.php
-- et activez le mode sandbox/développeur ! @ Paramètres avancés > Mode Sandbox > Activer (Permet uniquement aux développeurs de votre application de la voir.) Vous aurez besoin de l'ID de l'application (APP_ID) et de la clé secrète (SECRET_KEY) qui figurent dans le récapitulatif de votre compte de développeur pour cette application, mais pas de l'ancienne clé API.
2) Chargez dans votre navigateur, déjà connecté à fb en tant que compte sous lequel vous voulez que votre application côté serveur se connecte, et cliquez sur "autoriser" pour les permissions demandées : https://graph.facebook.com/oauth/authorize?client_id=APP_ID&scope=offline_access,read_stream&redirect_uri=http://www.facebook.com/connect/login_success.html
3) copier le paramètre "code" de la chaîne de requête de l'url résultante, l'utiliser dans : https://graph.facebook.com/oauth/access_token?client_id=APP_ID&redirect_uri=http://www.facebook.com/connect/login_success.html&client_secret=APP_SECRET&code=CODE_FROM_2
Et copiez le côté droit de access_token= dans le texte de la page résultante, qui sera dans la structure de : APP_ID|HEXNUM-USER_ID|WEIRD_KEY
4) téléchargez maintenant soit à partir de l'api graphique, soit à partir de l'api classique de repos en utilisant le jeton d'accès de serment que vous venez d'obtenir (où SOURCE_ID est l'identifiant facebook de l'utilisateur/groupe/quelque chose que vous recherchez) :
<?php
$stream = json_decode(file_get_contents("https://api.facebook.com/method/stream.get?source_ids=SOURCE_ID&access_token=ACCESS_TOKEN&format=json"));
var_dump($stream);
// this one gives a 500 internal server error from the http get if any of the fields are invalid, but only in php, not when loaded in a browser... weird.
$feed = json_decode(file_get_contents("https://graph.facebook.com/SOURCE_ID/feed?fields=id,from,created_time,link,type&access_token=ACCESS_TOKEN"));
var_dump($feed);
?>
Noter que l'api graphique et l'api de repos ne renvoient pas seulement des structures différentes, mais aussi des informations différentes -- donc ici, je préfère les résultats de l'api de repos (la première) même si j'aime pouvoir restreindre les champs dans la nouvelle api graphique (la seconde).
Regardez http://developers.facebook.com/docs/authentication/ dans les sections "Demande de permissions étendues" et "Authentification des utilisateurs dans une application Web" pour les détails officiels (épars).
Si vous voulez faire cela de manière routinière, c'est-à-dire par programme, voici la version automatisée des étapes 2+3 :
Mettez ceci sur votre serveur web en tant que "facebook_access_token.php" :
<?php $token = explode('=', file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=APP_ID&redirect_uri=http://$_SERVER[SERVER_NAME]$_SERVER[PHP_SELF]&client_secret=APP_SECRET&code=" .
(get_magic_quotes_gpc() ? stripslashes($_GET['code']) : $_GET['code'])));
echo $token[1];
// store this, the access token, in the db for the user as logged in on your site -- and don't abuse their trust! ?>
Et diriger les utilisateurs dans leurs navigateurs vers : https://graph.facebook.com/oauth/authorize?client_id=APP_ID&scope=offline_access,read_stream&redirect_uri=http://www.example.com/facebook_access_token.php