Retour en haut

Poster sur le mur d'une Fan Page via l'API Graph de Facebook

posté le mercredi 19 octobre 2011 à 17:01:11 par delphiki :: Web

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/<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 :

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. ;-)


Commentaires :

# Géraud, le lundi 24 octobre 2011 à 11:52:07

Bonjour,

Merci pour votre tuto très explicite et intéressant.
Votre méthode marche à merveille !

Mais je me pose tout de même une question :
Si j'ai bien compris, l'access token est unique pour chaque page, ce qui permet de poster sur la page Facebook même si l'utilisateur n'est pas connecté ?

Merci

 
# delphiki, le lundi 24 octobre 2011 à 15:05:01

Bonjour,

L'access token est valable pour toutes les pages dont vous êtes le créateur ou l'administrateur, même si l'utilisateur n'est pas connecté en effet.
Lors de la demande de permissions, les pages "autorisées" sont listées :
graph_api_app_allow.png

 
# Géraud, le lundi 24 octobre 2011 à 17:17:45

D'accord, du coup c'est l'id de la page que l'on renseigne qui va déterminer où le poste va être écrit :)
Merci pour cette réponse rapide et pour ce tuto.

Bonne continuation pour la suite

 
# FatalTerror, le vendredi 28 octobre 2011 à 18:00:35

Bonjour, je n'arrive pas a trouver l'id de la page...
Je sais pas comment faire pour la trouver.
J'ai crée mon appli et sa me donne sa:
https://www.facebook.com/apps/application.php?id=XXXIDAPLI
Mais pas l'id de la page o_O.

Et aussi, j'ai une erreur étrange..
Quand je vais sur get_token.php facebook me demande la permission puis quand j'accepte il me rédirige a get_token.php

Fatal error: Uncaught OAuthException: Invalid OAuth access token. thrown in /htdocs/public/www/MTA/base_facebook.php on line 1039

 
# delphiki, le vendredi 28 octobre 2011 à 21:18:52

Salut,

Ne confonds-tu pas l'application et la page ?

Il faut d'abord créer une page avant de créer l'application : https://www.facebook.com/pages/create.php

 
# Phive, le dimanche 30 octobre 2011 à 02:09:51

Bonjour,
Est-ce qu'il existe la même chose pour publier sur les pages des utilisateurs et non sur une page fan ?
si oui je suis preneur de votre aide car vos explications sont claires mais je n'arrive pas à l'adapter à utilisateur.
Merci pour votre aide
Philippe

 
# delphiki, le jeudi 3 novembre 2011 à 09:32:24

Phive, pour cela, je n'ai pas vraiment regardé en détails, mais j'imagine qu'il faut que l'utilisateur en question ait autorisé l'application pour poster sur son mur.

Dans tous les cas, juste avec ce tuto, il est impossible de poster autre part que sur votre propre profil, ou sur vos pages.

 
# Hardjan, le dimanche 6 novembre 2011 à 18:58:12

Cf : Je n'ai pas testé, cependant je pense que une adresse en http://localhost/ devrait fonctionner.

Je ne pense pas que cela puisse fonctionner :à)

 
# 2rock, le mardi 8 novembre 2011 à 00:48:55

Bonjour,

Le tuto est très explicite est à priori il fonctionne pour tout le monde, malheureusement j'ai un peu de mal.

Je recupére bien le token (c'est bien la variable code renvoyée en GET?) et lorsque je l'ajoute a la page post.php et que j'acutalise celle-ci j'ai une erreur :

Fatal error: Uncaught OAuthException: Error validating application. thrown in /sep/Twitter_On_Fan_Page/php-sdk/base_facebook.php on line 1039

 
# 2rock, le mardi 8 novembre 2011 à 02:26:39

Au temps pour moi j'avais zappé une étapes.

Par contre est-il possible de posté en son sur une application?

Par exemple mon compte FB n'est pas une personne il gère une page FB.

Or lorsque j'utilise cette technique c'est le compte FB qui poste sur le mur et pas la page.

Est-ce possible de faire poster la page?

 
# Manu, le mercredi 16 novembre 2011 à 17:17:38

Bonsoir et tout d'abord merci pour ce tuto.

J'ai réussi à mettre en place le système et ça fonctionne (presque) parfaitement.

Pour faire simple en gros j'ai un bouton "poster" qui m’exécute le script avec les infos que je souhaites envoyer sur la page facebook.

Quand je vais voir sur la page en question et connecté avec les identifiants de la page, le contenu envoyé est bien affiché. Par compte, si je me connecte avec un autre compte et que je me rend sur cette même page, le contenu n'apparaît pas...

Peut-être que c'est juste une config à modifier au niveau des paramètres facebook de la page mais là j'avoue tourner en rond depuis quelques jours.

Si quelqu'un a une idée, cela pourrai m'aider :)

Par avance merci

 
# Manu, le mercredi 16 novembre 2011 à 19:04:14

Pour compléter le précédent message :

ça marche mais c'est visible seulement par l'administrateur de la page. Je cherche a ce que la publication soit visible par tout le monde.

 
# Manu, le vendredi 18 novembre 2011 à 10:46:38

Salut, toujours pas d'idée pour mon soucis de permission ?

 
# Manu, le vendredi 18 novembre 2011 à 14:37:39

Salut, toujours pas d'idée pour mon soucis de permission ?

 
# Coco, le samedi 19 novembre 2011 à 10:46:11

Même souci que Manu. Le contenu publié ne s'affiche que pour l'administrateur de la page et pas pour les likeurs. Je cherche une solution...

 
# Coco, le samedi 19 novembre 2011 à 10:52:59

Même souci que Manu. Le contenu publié ne s'affiche que pour l'administrateur de la page et pas pour les likeurs. Je cherche une solution...

 
# ban, le lundi 28 novembre 2011 à 18:07:20

Bonjour,

merci pour ce tuto :).

Cependant j'obtiens l'erreur suivante "Exception: Unknown fields: access_token" lors de la premiere étape.

Pourriez-vous m'éclairer ?

Merci d'avance !

 
# Gablain, le mercredi 30 novembre 2011 à 12:35:28

Bonjour,

merci tout d'abord pour ce tuto, j'ai néanmoins un souci assez rapidement :

quand je lance le script get_token.php pour la première fois, j'ai cette erreur :
Parse error: syntax error, unexpected '{' in /***********/get_token.php on line 21

Cela correspond à l'accolade après le try{ du fichier get_token.php

Je n'ai pas réussi à la corriger, y'a une solution ?

Merci d'avance !

 
# Gablain, le mercredi 30 novembre 2011 à 17:34:06

Bon j'ai trouvé, php4 ne gère pas les try/catch et par défaut mon site chez ovh était toujours en php4...
Pour passer en php5 [url=]http://guides.ovh.net/Php5ChezOvh[/url]

Voilà et merci encore pour le tuto !

 
# delphiki, le mercredi 7 décembre 2011 à 12:01:04

Bonjour,

Je me suis penché sur le problème où seul l'administrateur de la page pouvait voir les messages postés, et j'ai modifié le tuto en conséquences.

Le problème venait du fait qu'il faut en fait récupérer un autre access_token, unique à la page.

Il suffit donc de reprendre la partie sur la récupération de l'access_token pour prendre en compte ce changement.

 
# Manu, le mercredi 7 décembre 2011 à 15:51:27

Salut,

Après testé la nouvelle solution, j'obtiens plusieurs infos différentes :

Array
(
[data] => Array
(
[0] => Array
(
[name] => manuel
[access_token] => AAAB2sDOzc9oBABl1CcHd9ZB[...]TdHq9ejZBOO5S0ozVq2v6oPXIXNO4ZCvLqOCQLxcNAlL3gZDZD
[category] => Entertainer
[id] => 264998[...]1447
)

[1] => Array
(
[name] => SendPhpPost
[access_token] => AAAB2sDOzc9oBAM6i[...]oX8M8EmgOzu4PeCZA0r58RZCQRu0TNqe8eCr0Dyx39oq29WLZBtPKuzNUL9ChOrQGAZDZD
[category] => Application
[id] => 1[...]20282
)

)

[paging] => Array
(
[next] => https://graph.facebook.com/me/accounts?method=GET&access_token=AAAB2sDOzc9oBAGn7wDP3uYLqbJVvhxdY8D2DBuKJ8pfKD5fgLlbcy0cQhYvE6UV3a62yat2uTLDP8[...]limit=5000&offset=5000&__after_id=130499[...]82
)

)

Dans mon utilisation :

- Si je prends l'access token de "manuel", j'ai le même problème que précédemment (seul l'admin peux voir).
- Si je prends l'access token de "SendPhpPost", j'ai l'erreur ci-dessous lorsque je lance le script :

Fatal error: Uncaught OAuthException: (#200) Posts where the actor is a page cannot also include a target_id thrown in [...]/include/plugins/p_actualite/src/base_facebook.php on line 1039

En cherchant un peu sur le net je suis tomber sur ce lien mais je n'y comprend pas grand chose...
http://jorgealbaladejo.com/2011/06/13/publish-to-facebook-page-or-applications-wall-with-php/

Quelqu'un a également rencontré ce problème ?

 
# Sticky, le samedi 10 décembre 2011 à 23:12:04

Bonjour et tout d'abord merci beaucoup car votre tuto doit être le seul du web en français actuellement :D
Voilà mon problème :
j'ai fais le tuto de A à Z et même plusieurs fois. Mon post.php est en ligne avec le dossier php-sdk tout bien rangé et quand je vais sur ma page post.php ça m'affiche une page blanche et rien n'est affiché sur le mur de ma page :[

Voilà le code de ma page post.php qui pourtant est bien le même que le votre ...

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

$app_config = array(
'appId' => 'l'id de mon api',
'secret' => 'le App secret de mon api'
);
$page_config = array(
'access_token' => 'l'access token de ma page(j'ai essayé avec celui de l'app mais toujours pareil)', /* n'oubliez pas cette entrée par rapport au tableau dans get_token.php */
'page_id' => 'url de ma page fb'
);

$facebook = new Facebook($app_config);

$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);
?>

Merci

 
# nadia, le mercredi 14 décembre 2011 à 18:10:11

tout d'abord merci pour ce tuto,
Cependant j'obtiens l'erreur suivante:
Fatal error: Uncaught OAuthException: (#200) Posts where the actor is a page cannot also include a target_id thrown in ..../www/test/facebook/php-sdk/base_facebook.php on line 1039

Pourriez-vous m'aider ?
Merci d'avance.

 
# val2r, le samedi 24 décembre 2011 à 14:03:21

Bonjour,
Merci pour ce tuto,
J'obtiens également l'erreur suivante :
Fatal error: Uncaught OAuthException: (#200) Posts where the actor is a page cannot also include a target_id thrown in /home/.../facebook/base_facebook.php on line 1039

Pourriez-vous m'aider ?
Merci beaucoup

 
# val2r, le samedi 24 décembre 2011 à 14:08:55

Bonjour,
Merci pour ce tuto,
J'obtiens également l'erreur suivante :
Fatal error: Uncaught OAuthException: (#200) Posts where the actor is a page cannot also include a target_id thrown in /home/.../facebook/base_facebook.php on line 1039

Pourriez-vous m'aider ?
Merci beaucoup

 
# val2r, le samedi 24 décembre 2011 à 14:15:23

Bonjour,
Merci pour ce tuto,
J'obtiens également l'erreur suivante :
Fatal error: Uncaught OAuthException: (#200) Posts where the actor is a page cannot also include a target_id thrown in /home/.../facebook/base_facebook.php on line 1039

Pourriez-vous m'aider ?
Merci beaucoup

 
# edinos, le mardi 10 janvier 2012 à 12:31:40

Bonjour, tout à la fin j'obtiens aussi l'erreur suivante quand j'essaye de poster le message via post.php:

Fatal error: Uncaught OAuthException: (#200) Posts where the actor is a page cannot also include a target_id thrown in /home/.../www/facebook/php-sdk/base_facebook.php on line 1050

 
# edinos, le mardi 10 janvier 2012 à 16:15:47

Salut c'est encore moi! Maintenant ça fonctionne, je n'ai plus l'erreur d'OAuthException. En fait j'essayais d'afficher les news de mon site sur un groupe Facebook dont moi seul avait accès. En fait ça ne marche pas sur les groupes, il faut créer une page!

Voilà comment créer une page fan:

[url=]http://fredericbarry.com/tutoriel-comment-creer-page-facebook/[/url]

Normalement ça devrait fonctionner pour vous, chez moi ça marche :)

 
# Ludo, le dimanche 15 janvier 2012 à 21:35:35

Bonjour,
j'ai testé le tuto mais j'ai un souci, à la fin... je récupère bien le token, je créé le post.php qui va mais il ne se passe rien sur la page en question...
je dois rater un truc mais quoi ?
configuration de ma page fan ?
... ?

 
Ajouter un commentaire