Poster un message sur une page facebook

Afin de créer une communauté autour de son site et ajouter des liens accessibles via une page facebook, nous pouvons automatiser la publication en utilisant PHP.

Modification importante le 30/06/2017, suite à différents changements dans la procédure, la nouvelle décrite ici est fonctionnelle

Nous avons vu dans un précédent article comment publier un message sur une page facebook en python, nous allons voir les différentes étapes pour poster un message sur une page facebook en utilisant php. Ce message sera posté au nom de la page facebook.

Les raisons sont multiples mais la principale pourrait de maintenir le réseaux social de nouveau articles présents sur votre site. Mais nous allons voir comment automatiser cette tâche pour ne pas avoir à le faire manuellement à chaque fois.

Plusieurs sites proposent des tutos pour le faire, mais face à plusieurs problèmes lors du suivi de ces articles, je reprends plusieurs de ces sites pour en faire un fonctionnel.

Création de la page fan

Commencer avant tout à créer une page de fan sur facebook, vous devez avoir un compte facebook (auquel vous êtes connectés). Rendez-vous sur la page de création. Nous allons dès maintenant récupérer l’identifiant de la page, nous en aurons besoin plus tard.

Sur votre page, rendez-vous dans A propos, le numéro d’identifiant y est indiqué.

Serveur Web et projet web

Ensuite, installer un serveur web (voir le tuto), dans mon cas sous linux, apache, mysql et php.

Récupérer le SDK de facebook

Pour interagir avec Facebook, vous aller avoir besoin d’un package à télécharger sur le git, dans un terminal, nous allons nous placer dans le dossier web du poste, puis télécharger le sdk dans un nouveau dossier de votre espace web nommé « facebook » :

cd /var/www/html
git clone https://github.com/facebook/php-graph-sdk.git facebook

Pour ceux qui n’ont pas lu la première version, ne pas tenir compte de cette note, simplement suivre les étapes. Première modification, on passe dorénavant par le graph facebook.

Ensuite nous allons télécharger deux fichiers contenu ici : fichier_facebook_page. Ce dossier contient deux fichiers envoyer.php et recupToken.php . Le premier sera utilisé à la fin pour publier, le second est important pour la configuration de la publication.

Placez ces deux fichiers dans le dossier src qui a été créé dans le dossier facebook.

Après avoir suivi ce tuto, vous devriez avoir dans le /var/www/html/facebook/src :

  • base_facebook.php
  • envoyer.php
  • facebook.php
  • fb_ca_chain_bundle.crt
  • recupToken.php

Nous reviendrons sur les actions à faire pour la configuration, mais nous allons avoir besoin de différentes informations :

  • l’identifiant de l’application facebook
  • la clé secrète de l’application facebook

Les informations qui suivent ne sont plus à récupérer

  • l’identifiant de la page (déjà récupérer plus haut)
  • le token
  • l’identifiant de l’utilisateur

Récupération de l’identifiant facebook de votre compte

Plusieurs méthodes existent, voici celle que j’ai utilisé, sur votre profil, faites voir le code source et recherchez : profile_id.

Votre identifiant se situe juste après.

Création de l’application pour Facebook

Alors nous n’allons pas créer une application comme on pourrait s’attendre, il s’agirait plus d’une passerelle par laquelle nous passerons pour autoriser et publier le message.

Commencer par vous rendre sur le site pour développeur facebook puis créer une nouvelle application (choisir un nom et une catégorie).

Puis rendez-vous sur la page de configuration de l’application nouvellement créer :

Configuration de l'application facebook
Configuration de l’application facebook

Vous pouvez dès maintenant récupérer l’identifiant de l’application et la clé secrète.

Dans l’onglet, Paramètres générales, ajouter une plateforme « site web » et y inscrire l’adresse de votre site.

Configuration de l'application facebook 2
Configuration de l’application facebook 2

Puis dans l’onglet de gauche, cliquer sur ajouter un produit et ajouter login facebook :

Configuration de l'application facebook
Configuration de l’application facebook

Activez la connexion OAuth cliente.

Récupération du Token

Sur cette partie, j’ai eu quelques difficultés, notamment parce que les tutos en ligne étaient un peu ancien et une des autorisations demandées n’étaient pas correctes.

RecupToken.php

Commencer par éditer le fichier recupToken.php :

<?php
session_start();
require_once($_SERVER['DOCUMENT_ROOT']."/facebook/src/Facebook/autoload.php");


$fb = new Facebook\Facebook([
'app_id' => "identifiant de votre app",
'app_secret' => "clé secrête de votre app",
'default_graph_version' => 'v2.9',
]);

$helper = $fb->getRedirectLoginHelper();

$permissions = ['email','publish_pages','manage_pages','user_friends','public_profile']; // Optional permissions
$loginUrl = $helper->getLoginUrl('http://votre_adresse/fb-callback.php', $permissions);

echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';

?>

fb-callback.php

Il s’agit du fichier qui sera appelé et affichera les informations.

<?php
session_start();
require_once($_SERVER['DOCUMENT_ROOT']."/facebook/src/Facebook/autoload.php");


$fb = new Facebook\Facebook([
  'app_id' => "votre identifiant d'app",
  'app_secret' => "clé secrête de votre app",
  'default_graph_version' => 'v2.9',
  ]);

$helper = $fb->getRedirectLoginHelper();

try {
  $accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
  // When Graph returns an error
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
  // When validation fails or other local issues
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}

if (! isset($accessToken)) {
  if ($helper->getError()) {
    header('HTTP/1.0 401 Unauthorized');
    echo "Error: " . $helper->getError() . "\n";
    echo "Error Code: " . $helper->getErrorCode() . "\n";
    echo "Error Reason: " . $helper->getErrorReason() . "\n";
    echo "Error Description: " . $helper->getErrorDescription() . "\n";
  } else {
    header('HTTP/1.0 400 Bad Request');
    echo 'Bad request';
  }
  exit;
}

// Logged in
echo '<h3>Access Token</h3>';
var_dump($accessToken->getValue());

// The OAuth 2.0 client handler helps us manage access tokens
$oAuth2Client = $fb->getOAuth2Client();

// Get the access token metadata from /debug_token
$tokenMetadata = $oAuth2Client->debugToken($accessToken);
echo '<h3>Metadata</h3>';
var_dump($tokenMetadata);

// Validation (these will throw FacebookSDKException's when they fail)
$tokenMetadata->validateAppId($config['app_id']);
// If you know the user ID this access token belongs to, you can validate it here
//$tokenMetadata->validateUserId('123');
$tokenMetadata->validateExpiration();

if (! $accessToken->isLongLived()) {
  // Exchanges a short-lived access token for a long-lived one
  try {
    $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);
  } catch (Facebook\Exceptions\FacebookSDKException $e) {
    echo "<p>Error getting long-lived access token: " . $e->getMessage() . "</p>\n\n";
    exit;
  }

  echo '<h3>Long-lived</h3>';
  var_dump($accessToken->getValue());
}

$_SESSION['fb_access_token'] = (string) $accessToken;

// User is logged in with a long-lived access token.
// You can redirect them to a members-only page.
//header('Location: https://example.com/members.php');

?>

Une fois les modification faites, ouvrez votre fichier via le navigateur : http://adresse_de_votre_site/facebook/src/recupToken.php , puis login vous devriez voir apparaître votre jeton d’accès.

Le token a récupéré est en face d‘access_token, notez-le.

Vous pouvez supprimer le fichier recupToken.php, il ne vous sera plus utile.

Publication d’un message en tant que page sur facebook.

Maintenant que nous avons absolument tout les identifiant, clés, accès, nous allons remplir le fichier envoyer.php :

<?php
include('facebook.php');

$app_id='';
$app_secret='';
$facebook = new Facebook(array(
  'appId' => $app_id,
  'secret' => $app_secret
));
$pageID='';
$token='';

$attachment = array(
	'access_token' => $token,
	'message' => 'Premier message auto',
	'name' => 'Première publication sur facebook',
	'caption' => 'Legend sous le tire',
	'link' => 'https://www.la-programmation.surleweb-france.fr',
	'description' => 'Description du lien',
	'picture' => 'https://www.google.fr/images/srpr/logo11w.png'
);
$deb = $facebook->api('/'.$pageID.'/feed/', 'post', $attachment);

?>

Saisir les différents id, clé et token entre les guillemets correspondants.

Puis dans la console, pour executer le fichier envoyer.php, saisir :

php /var/www/html/facebook/src/envoyer.php

Allez vérifier sur votre pfan page, vous devriez y voir un nouveau message.

 

Si vous avez aimé, n’hésitez pas à laisser un commentaires ou à partager.

6 Replies to “Poster un message sur une page facebook”

  1. Bonjour,
    merci pour le tuto , il est simple à suivre 😉

    J’ai juste un souci, pour récupérer le token, je reste sur le bouton connect je n’arrive pas à afficher le tableau, je n’ai pas d’erreur en retour et je suis bien connecter sur Facebook, une idée?

    • Bonsoir, là pas trop, je suis en train de faire un site qui nécessitera cette étape et j’ai eu le même soucis mais je n’ai pas eu le temps d’apporter les corrections. Je regarde ça et je redis

      Mais si rien ne s’affiche, il faut commencer par verifier la syntaxe.< \p>

        • Voilà, j’ai mis à jour, grand changement par rapport à la première version
          – la source git a changé.
          – le fichier RecupToken.php aussi
          – apparaition du fichier callback-fb.php

          Il est important de s’assurer que les chemins soient correctes.
          Si tu as encore des soucis, il se peut que j’ai oublié des détails, dis le moi.

  2. J’ai étais récupérer le SDK 5.5
    Ensuite avec les tuto FB j’ai réussit à afficher mon token 🙂
    Enfin j’ai repris les fichiers :
    base_facebook.php
    facebook.php
    Quand je lance le fichier envoyer.php, il me retourne une erreure :
    Uncaught OAuthException: (#200) The user hasn’t authorized the application to perform this action thrown in base_facebook.php on line 1325

    Je présume avoir omis quelques chose dans la partie Paramètres de Facebook Login, mais je ne vois pas quoi…

    • Donc là il s’agit plus d’un problème d’autorisation, lorsque j’avais fait le premier tuto, j’avais spécifier dans le scope manage_pages et publish_pages, maintenant ces scopes sont soumis à une validations par l’équipe de facebook, dans la configuration de l’app facebook, sur la page Exams des app, il faut ajouter des éléments et les envoyer pour approbation, j’ai fait une demande à facebook (sans réponses à l’heure actuelle) pour avoir les bonnes pratiques lors de la demande de validation de ces éléments.
      Malheureusement, je n’ai pas de réponse plus précises à donner pour l’instant.

Laisser un commentaire