Facebook : Lister les pages que vous administrez

Je ne vais pas revenir sur le BA-BA de la création d'une application pour facebook, mais partir du principe qu'elle a déjà été réalisée. Pour travailler avec vos pages, facebook, il faut bien sûr que votre application ait l'autorisation nécessaire de le faire. Si ce n'est pas le cas, il vous suffit d'ajouter l'autorisation. Il faut donc ajouter manage_pagesdans le champ Extended Permissions de  votre application. POur que la nouvelle autorisation soit prise en compte, il faudra vous déconnecter, puis vous reconnecter à facebook.

 

Commencez par configurer les accès à l'api de Facebook via le PHP SDK (à récupérer sur GitHub) :

 $config = array( 
 'appId' => APP_ID, 
 'secret' => APP_SECRET, 
 'scope' => 'manage_pages' 
 );

On appelle la class, récupère notre user_id ainsi que l'indispensable access_token :

$facebook = new Facebook($config); 
$user_id = $facebook->getUser(); 
$access_token=$facebook->getaccessToken();

Si on a un user_id, on considère que l'utilisateur est bien connecté à FB, et on enchaîne :

if($user_id) { 
	try {
$pages = $facebook->api(array(
'access_token'=>$access_token,
'method' => 'fql.query',
'query' => 'SELECT page_id FROM page_admin WHERE uid = me() AND type!="APPLICATION"'
)); 
	if($pages){ 
			foreach($pages as $k=>$v) { 		
			$fbPageData=$facebook->api('/'.$v['page_id'].'?fields=name'); 
			$fbPageName=$fbPageData['name'];
echo ''.$fbPageName.''; 
			} 
		} 
	}

Quelques explications :  FQL, alias Facebook Query Language, est un language permettant de faire des requêtes sur les données utilisateur de Facebook comme on ferait des requêtes sur une base de données SQL. Les données retournées sont au format json. Cela permet de se passer de l'API Graph de Facebook. Dans l'exemple ci-dessus, j'ai juste récupérer les ID des pages FB que j'administre, en excluant les applications, puis avec l'ID des pages ($v['page_id']), je récupère les nom de chacune des pages. Cette boucle affiche donc le nom des pages, mais on peut simplement placer les ID et nom de pages dans un formulaire par exemple.

} 
catch(FacebookApiException $e) {
			$login_url = $facebook->getLoginUrl(array('scope'=>'manage_pages'));
			echo 'Please <a href="' . $login_url . '">login To FB.</a>';
			error_log($e->getType());
			error_log($e->getMessage());

		}
	} else {

      // No user, print a link for the user to login
      $login_url = $facebook->getLoginUrl(array('scope'=>'manage_pages'));
      echo 'Please <a href="' . $login_url . '">login.</a>';

    }

Cette dernière partie n'a probablement pas besoin d'explication. gestion des exceptions, log des erreurs, display d'un lien de login/logout, etc ...

Pour clarifier tout cela, voici le code final (à n'utiliser qu'en environment local, pas en production ^^)

$config = array( 
 'appId' => YOUR_APP_ID, 
 'secret' => YOUR_APP_SECRET, 
 'scope' => 'manage_pages' 
 );
$facebook = new Facebook($config); 
$user_id = $facebook->getUser(); 
$access_token=$facebook->getaccessToken();
if($user_id) { 
	try {
		$pages = $facebook->api(array(
		'access_token'=>$access_token,
		'method' => 'fql.query',
		'query' => 'SELECT page_id FROM page_admin WHERE uid = me() AND type!="APPLICATION"'
		)); 
		if($pages){ 
			foreach($pages as $k=>$v) { 		
			$fbPageData=$facebook->api('/'.$v['page_id'].'?fields=name'); 
			$fbPageName=$fbPageData['name'];
			echo ''.$fbPageName.''; 
				} 
			}
	}catch(FacebookApiException $e) {
			$login_url = $facebook->getLoginUrl(array('scope'=>'manage_pages'));
			echo 'Please <a href="' . $login_url . '">login To FB.</a>';
			error_log($e->getType());
			error_log($e->getMessage());

	}
} else {

      // No user, print a link for the user to login
      $login_url = $facebook->getLoginUrl(array('scope'=>'manage_pages'));
      echo 'Please <a href="' . $login_url . '">login.</a>';

}

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.