Aller au menu - Aller au contenu

Voici le blog de : delphiki

delphiki - Lack of Inpiration

delphiki website


Poster sur le mur d'une Fan Page via l'API Graph de Facebook @ Le 19/10/2011 à 17:01:11

MàJ du 7 décembre 2011 : modification de la partie sur la récupération de l'access_token, ce qui corrige le problème où seul l'administrateur de la page pouvait voir les messages postés. Les sources ont été mises à jour en conséquence. Note : Ce tutoriel est une mise à jour de celui que j'avais fait il y a bientôt un an, utilisant l'API REST de Facebook. Mon ancien tutoriel n'étant plus valable (on ne peut plus autoriser une application sur une page de la manière dont je l'ai décrite), je vous fait part aujourd'hui de la nouvelle façon de procéder pour arriver au même résultat : poster un message sur le mur d'une Fan Page en utilisant l'API ("Graph" cette fois) de Facebook. Je considère que vous avez déjà créé votre page ou que vous êtes administrateur de la page sur laquelle vous voulez poster.

Prérequis

Avant tout, vous devez télécharger le SDK PHP de Facebook qui permet de manipuler l'API Graph, directement sur GitHub. Vous pouvez télécharger le SDK soit via Git :

git clone https://github.com/facebook/php-sdk.git

Ou sous forme d'archive sur cette page. Les seuls fichiers dont nous avons besoin sont les fichiers du dossier src.

Création de l'application

Nous allons commencer par créer et configurer l'application qui vous servira d'intermédiaire entre vos scripts PHP et votre Fan Page. Dans un premier temps, allez sur cette page et cliquez sur Créer une application. Choisissez un nom et un namespace comme bon vous semble (le namespace est unique, si une autre application a le même, Facebook vous demandera d'un choisir un autre).

graph_api_create_app.png

On vous demandera de remplir un CAPTCHA, puis vous devriez atterrir sur une page semblable à celle-ci :

graph_api_app_summary.png

Récupération de l'« access token »

Si vous voulez que votre application puisse poster sur le mur de votre page, il faut que cette dernière y soit autorisée. Pour cela, il faut récupérer ce qu'on appelle un « access token ». Il s'agit d'une clé permettant d'authentifier l'application auprès de la page. Pour récupérer cette clé, voici la marche à suivre. Commencez par créer un fichier PHP (que j'ai appelé get_token.php) qui inclut les fichiers du SDK PHP de Facebook et qui contient quelques paramètres de configuration :

/* on inclut le fichier du SDK */
require_once('php-sdk/facebook.php');

/* l'id et la clé secrète de votre application sont disponibles sur la page de configuration de celle-ci */
$app_config = array(
  'appId' => 'APP_ID', 
  'secret' => 'APP_SECRET',
  'cookie' => true
);
/* Pour connaitre l'id de votre page, allez sur celle-ci et regardez son URL : https://www.facebook.com/pages//  */
$page_config = array(
  'page_id' => 'PAGE_ID'
);

Ajoutez ensuite ces quelques lignes (les explications sont dans les commentaires) :

$facebook = new Facebook($app_config);
/* on récupère les informations de l'utilisateur connecté à Facebook */
$user = $facebook->getUser();

/* si connecté */
if($user){
  try{
    $accounts = $facebook->api('/me/accounts');
    echo '
';
    print_r($accounts); /* on affiche les informations retournées */
  }
  catch (FacebookApiException $e){
    error_log($e);
    $user = null;
  }
}

if($user){
  $logoutUrl = $facebook->getLogoutUrl();
  echo 'Log Out';
}
else{
  $login_params = array(
    'scope' => 'manage_pages,publish_stream,offline_access' /* paramètres permettant de récupérer le token, offline_access permet d'utiliser le token même si vous n'êtes pas connecté directement (ex. : avec un cron) */
  );
  $loginUrl = $facebook->getLoginUrl($login_params);
  echo 'Login';
}

Avant de lancer ce script, il faut d'abord spécifier l'URL de votre script PHP dans les paramètres de votre application. Pour cela, retournez sur la page de configuration de votre application, et remplissez correctement le champ Site web, comme ceci :

graph_api_app_callback.png

Ceci indique sur quelle URL retourner après avoir autorisé l'application. Je n'ai pas testé, cependant je pense que une adresse en http://localhost/ devrait fonctionner. Il est maintenant temps de vous rendre sur votre page PHP. Si tout se passe bien, vous devriez avoir un lien Login, cliquez dessus. Vous devriez atterrir sur cette page, cliquez sur Connexion :

graph_api_app_connect.png

Puis celle-ci, cliquez sur Autoriser :

graph_api_app_allow.png

Une fois ces étapes effectuées, vous avez correctement autorisé la gestion de votre page, par votre application, et vous êtes redirigé vers votre script PHP, qui devrait vous afficher votre access token (une très longue chaine de caractères) !

Array
(
  [data] = Array
    (
      [0] = Array
        (
          [name] = Tuto Graph API page
          [access_token] = VotreAccessTokenQuiEstUneTresLongueChaineDeCaracteres
          [category] = Tv channel
          [id] = 304493389565701
        )
        /* ... */
    )
)

Et voilà, le tour est joué, vous avez désormais récupéré le token qui vous permettra de poster sur votre page. Voyons maintenant comment l'utiliser.

Poster un message sur la Fan Page

Rien de plus simple si vous avez déjà lu mon tuto précédent. Reprenez les paramètres de votre application et de votre page, sans oublier votre token :

require_once('php-sdk/facebook.php');

$app_config = array(
  'appId' => 'APP_ID',
  'secret' => 'APP_SECRET'
);
$page_config = array(
  'access_token' => 'ACCESS_TOKEN', /* n'oubliez pas cette entrée par rapport au tableau dans get_token.php */
  'page_id' => 'PAGE_ID'
);

$facebook = new Facebook($app_config);

Puis rajoutez ces quelques lignes, qui suffisent à poster le message :

$params = array(
  'access_token' => $page_config['access_token'],
  'message' => 'Message de test',
  'name' => 'Nom de test',
  'caption' => 'Légende de test',
  'link' => 'http://www.google.fr',
  'description' => 'Description de mon message !',
  'picture' => 'http://www.informanews.net/imagenews/panasonicTV_Google.jpg',
  'actions' => array(
    array('name' => "Nom de l'action", 'link' => 'http://www.google.fr/')
  )
);

$post_id = $facebook->api('/'.$page_config['page_id'].'/feed','post',$params);

Vous n'avez plus qu'à aller sur votre fan page pour admirer le résultat ! :) Les scripts que j'utilise dans ce tuto sont disponibles à cette adresse pour les fainéants. Si vous avez des questions, les commentaires sont là pour ça, ou bien @delphiki. Amusez-vous bien. ;-)

Du nouveau pour l'API Colissimo @ Le 13/10/2011 à 17:11:08

Il y a quelques mois, je vous avais rédigé un petit article sur l'API « cachée » de Colissimo. Or cette dernière s'est très vite retrouvée non fonctionnelle, La Poste ayant déclaré qu'une API « publique » était prévue. Sauf que constat 8 mois plus tard : toujours rien. J'avais un peu oublié cette histoire jusqu'à hier je flânais dans les commentaires de l'article en question. J'ai alors voulu revérifier les dump TCP de l'application de la poste pour m'apercevoir qu'ils n'avaient absolument pas changés, et pourtant, l'application marchait ! La seule différence entre les appels effectués par l'application mobile et mon script PHP était... l'User Agent ! Et en effet, la solution au problème était bien là. En forçant un User Agent de smartphone lors de l'appel PHP, on récupère le résultat escompté ! :) J'ai donc mis à jour la mini-lib pour manipuler l'API. Celle-ci est toujours disponible sur GitHub. Petit changement cela dit lorsque vous voulez récupérer les informations sous forme d'image, il faut désormais un dossier local pour stocker les images en question (voir le README dans les sources). PS : merci à @sp0z pour le code de test :)

Configurer son serveur pour la lecture audio / vidéo en HTML5 @ Le 29/09/2011 à 10:31:16

Si des vidéos hébergées sur votre serveur ne s'affichent pas quand vous utilisez la balise <video>, c'est sans doute que votre serveur est mal configuré ! En effet, si votre serveur web ne fournit pas le bon header Content-Type, le navigateur ne saura pas qu'il a à faire à un fichier lisible directement avec les balises HTML5. Pour être sûr que les MIME types sont bons, il suffit d'ajouter ces quelques lignes dans votre fichier .htaccess :

AddType audio/webm weba
AddType video/webm webm
AddType video/ogg ogm
AddType video/ogg ogv
AddType video/ogg ogg

[PHP] Utiliser les sessions juste avant un appel à header('Location: ...') @ Le 07/04/2011 à 16:48:44

Si vous avez déjà eu à faire à ce cas de figure, où vous devez définir une variable de session juste avant un appel à la fonction header() pour changer de page (header('Location: ...');), alors vous avez sans doute remarqué qu'une fois arrivé sur la page, vous n'avez plus aucune trace de votre variable de session ! Pour palier à ce petit problème, il suffit de rajouter à votre URL l'id de la session grâce à la constante SID, comme suit :

L'API « cachée » de Colissimo @ Le 22/02/2011 à 16:23:13

Mise à jour du 13 octobre 2011 : le script est de nouveau fonctionnel ! C'est par ici que ça se passe : Du nouveau pour l'API Colissimo
Mise à jour du 25 février 2011 : la Poste m'a contacté sur Twitter (ici et ) pour m'indiquer que l'API était réservé à la Poste et ses partenaires, et aussi pour me dire que celle-ci fonctionnait toujours, mais que mon IP avait dû être bloquée pour activité anormale. ;-) Vous pouvez donc toujours l'utiliser, mais sans en abuser, et à bon escient. P.S.: Je me décharge totalement de l'utilisation que vous en ferez.
Mise à jour du 24 février 2011 : La Poste n'aura pas mis longtemps à réagir, l'accès à l'API vient d'être coupé, on obtient désormais un joli The requested page has been removed. On peut sans doute s'attendre à une mise à jour prochaine de leur application mobile, vu que du coup, ils l'ont fait planter comme il faut :

application_laposte.png


Mise à jour du 23 février 2011 : J'ai créé une petite lib PHP pour se servir de l'API plus simplement. Celle-ci est disponible sur GitHub.
Un ami est venu me voir récemment pour me poser une question par rapport à l'API Twitter. Il cherchait aussi un moyen de récupérer les résultat d'une recherche de suivi Colissimo, mais ne trouvant pas d'API et les résultats étant sous forme d'images et non de textes (la poste ne doit pas connaître la notion d'accessibilité), il voulait se diriger vers un système OCR, ce qui aurait été un peu casse-tête et pas garanti à 100%. Cependant, il existe une application Android faite par la poste remplissant le même rôle que le site web. Ni une, ni deux, un petit TCP dump en utilisant l'application nous dévoile des choses intéressantes ! En effet, on peut notamment observer ce genre de choses :

GET /outilsuivi/web/suiviInterMetiers.php?key=d112dc5c716d443af02b13bf708f73985e7ee943&method=xml&code=8L12345678912 HTTP/1.1
User-Agent: Dalvik/1.4.0 (Linux; U; Android 2.3.2; Desire HD Build/FRG83D)
Host: www.laposte.fr

Après quelques tests, on peut donc se rendre compte des possibilités offertes par cette découverte. URL à appeler : http://www.laposte.fr/outilsuivi/web/suiviInterMetiers.php Paramètres GET :

NomValeur(s)
keyd112dc5c716d443af02b13bf708f73985e7ee943
(cette valeur semble toujours fonctionner à l'heure où j'écris ces lignes)
method
  • aucune (le résultat sera une image)
  • xml
  • json
codeLe code de suivi de colis

Par exemple, avec l'URL extraite du dump TCP, on obtient le XML suivant :


  
    
  
  
    
  
  
    
  
  
    
  
  
    
  
  
    
  
  
    
  
  
  
  

Version JSON :

{
  "status":true,
  "code":"8L84527382672",
  "client":"Particulier",
  "date":"07\\/02\\/2011",
  "message":"Votre colis a \\u00e9t\\u00e9 remis au gardien",
  "gamme":"4",
  "base_label":"Coliposte",
  "link":"http:\\/\\/www.coliposte.net\\/particulier\\/suivi_particulier.jsp?colispart=8L84527382672",
  "error":null
}

Ou sous forme d'image :

http://www.laposte.fr/outilsuivi/web/suiviInterMetiers.php?key=d112dc5c716d443af02b13bf708f73985e7ee943&code=8L84527382672

A vous désormais de vous servir de ces maigres informations comme bon vous semble. ;-)tr