
La présentation est une des choses les plus dures à faire, et vu le nom de ce site, vous l'aurez compris, je vais faire court :
Moi, mes projets, mes idées, et ce que j'ai envie de dire.
Pourquoi ? Pourquoi pas.
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.
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.
On vous demandera de remplir un CAPTCHA, puis vous devriez atterrir sur une page semblable à celle-ci :
/* 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/<Titre de votre page>/<ID de votre page> */
$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 '<pre>';
print_r($accounts); /* on affiche les informations retournées */
}
catch (FacebookApiException $e){
error_log($e);
$user = null;
}
}
if($user){
$logoutUrl = $facebook->getLogoutUrl();
echo '<a href="'.$logoutUrl.'">Log Out</a>';
}
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 '<a href="'.$loginUrl.'">Login</a>';
}
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 :
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 :
Puis celle-ci, cliquez sur Autoriser :
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.
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. ;-)
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 :)
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
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 :
<?php
$_SESSION['foo'] = 'bar';
header('Location: mypage.php'.SID);
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
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 :
| Nom | Valeur(s) |
|---|---|
| key | d112dc5c716d443af02b13bf708f73985e7ee943 (cette valeur semble toujours fonctionner à l'heure où j'écris ces lignes) |
| method |
|
| code | Le code de suivi de colis |
Par exemple, avec l'URL extraite du dump TCP, on obtient le XML suivant :
<response>
<status>
<![CDATA[1]]>
</status>
<code>
<![CDATA[8L84527382672]]>
</code>
<client>
<![CDATA[Particulier]]>
</client>
<date>
<![CDATA[07/02/2011]]>
</date>
<message>
<![CDATA[Votre colis a été remis au gardien]]>
</message>
<gamme>
<![CDATA[4]]>
</gamme>
<base_label>
<![CDATA[Coliposte]]>
</base_label>
<link>
<![CDATA[http://www.coliposte.net/particulier/suivi_particulier.jsp?colispart=8L84527382672]]>
</link>
<error>
</error>
</response>
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 :
A vous désormais de vous servir de ces maigres informations comme bon vous semble. ;-)tr