Poster automatiquement sur Facebook avec PHP – 1/2

Lors de la gestion de page, on aimerait souvent que nos posts soient fait automatiquement dès que notre site est à jour. Une fois que l’on a rédigé un article ou autre, on a souvent la flemme de le poster en plus sur les réseaux…

Nous allons donc voir comment réaliser cela, vérifier les nouveautés du site et les poster automatiquement sur facebook avec le sdk v4.4 !

L’API facebook (v4.4)

Tou d’abord, il nous faut récupérer l’api php de facebook et créer une app facebook afin d’obtenir une clé et un ID d’application pour le SDK.

Pour cela, rendez-vous sur le dashboard des applications et lui donner les autorisations souhaitées.

Capture

Note: on peut vérifier si l’application est bien autorisée a effectuer les actions souhaitées (ici publier), en se rendant sur : https://www.facebook.com/settings/?tab=applications et en ouvrant les détails (Section « CETTE APPLICATION PEUT »).

Initialisation

Soit vous utilisez composer, soit on télécharge le ZIP du SDK et on le dézippe dans notre dossier de projet, qui contient donc fbv4 avec le SDK et un fichier index.php qe nous créons avant de réaliser ces simples tâches :

  1. Chargement du fichier autoload.php et les clés d’identification de notre application.
  2. Initialisation du SDK
  3. Récupération de la session valide si existe
  4. Demande d’infos du profile utilisateur si la session est valide
  5. Demande de login si pas de session valide
<?php
    session_start();
    // facebook autoload and keys (1)
    define( 'ROOT', dirname( __FILE__ ) . '/' );
    require_once( ROOT . 'fbv4/autoload.php' );
    $app_id       = '*************';
    $app_secret   = '********************************';
    $redirect_uri = 'http://monsite.com/login_fb/index.php';

    use Facebook\FacebookSession;
    use Facebook\FacebookRequest;
    use Facebook\FacebookRedirectLoginHelper;
    use Facebook\GraphUser;
    use Facebook\GraphObject;
    use Facebook\FacebookRequestException;

    // Initialize the Facebook SDK (2)
    FacebookSession::setDefaultApplication( $app_id, $app_secret );
    $helper = new FacebookRedirectLoginHelper( $redirect_uri );
    
    // Récupération de la session (3)
    if(isset($_SESSION) && isset($_SESSION['fb_token'])){
        $session = new FacebookSession($_SESSION['fb_token']);
    }
    else{
        $session = $helper->getSessionFromRedirect();
    }

    // session valid (4)
    if($session){
        var_dump($session);
        $_SESSION['fb_token'] = $session->getToken();
        //ask for user profile infos (4)
        $request = new FacebookRequest($session, 'GET', '/me');
        $profile = $request->execute()->getGraphObject('Facebook\GraphUser');
        var_dump($profile);
    }
    // session not valid (5)
    else{
        //ask for login user (5)
        echo ('<a href="'.$helper->getLoginUrl().'">Login</a>');
    }
?>

Note: il faudra préciser dans le fichier .htaccess que la version de PHP que l’on souhaite utiliser est la 5.4

Tout ça c’est bien, mais si l’on veut que nos news se publient automatiquement il faut que notre access_token ai une validité plus longue que les 1 à 2 heures comme obtenu jusqu’à présent. Nous allons donc demander une validité de 60 jours et automatiser la reconnexion à l’API avant de publier sur notre mur dans l’épisode 2/2 de cet article !

Liens utiles

https://developers.facebook.com/docs/php/gettingstarted/

Infos sur la nouvelle version du FB login (anglais)