Php - Utiliser Oauth pour poster automatiquement sur Twitter

ARCHIVE
Dans un précédent article ( poster sur twitter via php et bit.ly ) comment poster sur twitter via PHP (en raccourciçant les liens avec bit.ly). Cette méthode fonctionne toujours. Cependant, je trouvais peu esthétique de voir "via API" sous chacun de mes twitts posté avec cette méthode. Aussi, j'ai mis en place un système utilisant Oauth ( en partant de sources que j'ai adaptées pour cet usage ) afin que "API" soit remplacer par "Gpenverne.fr" . Bien entendu, libre à vous de personnaliser cette expression: elle correspond, en fait, au nom de votre Application twitter. 1) Créer une application twitter. Pour vous guider dans la création de votre application twitter, je vous conseille ce guide, sur "la ferme du web" ( un très bon site, de surcoî) : Création de l'application sur le site de Twitter Pour ce tutorial, partons du principe que vous avez déjà créé votre application twitter (via le tutorial de la ferme du web, en utilisant l'outil de création d'applications de twitter) Une fois votre application créée, vous obtenez 2 clés:
  • Consumer key
  • Consumer secret
Vous en aurez besoin à chaque utilisation de votre application via votre site. 2) Télécharger les classes nécessaires (TwitterOauth) Pour poursuivre, nous allons utiliser la classe TwitterOauth, créée par Abraham William, téléchargeable ici. Je vous ai joins le fichier en question dans l'archive liée à cet article. Cette classe est à inclure dans tous les scripts ci-dessous !
<?php include "twitteroauth.php"; ?>
3) Récupérer les "token" de connexion Pour vous connecter à votre compte twitter via votre application, nous allons devoir récupérer des "tokens" de connexion. Ceux-ci permettront à votre application twitter de se poster sur votre timeline. Il va s'agir, en réalité, de mettre en place un système provisoire de connexion via twitter, à partir duquel nous pourrons générer et récupérer (et stocker) les tockens nécessaires. Appelons ce fichier : connexion.php
<?php session_start(); include "twitteroauth.php"; define('CONSUMER_KEY','votre consumer key citée plus haut'); define('CONSUMER_SECRET' ,'votre consumer_secret cité plus haut'); define("OAUTH_CALLBACK", "http://votresite.tld/callback.php"); /* Créer une connexion twitter avec les accès de l'application */ $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); /* On détermine quelle sera l'URL de callback, en utiliasant la constante OAUTH_CALLBACK créée ci-dessus */ $urlRedi = OAUTH_CALLBACK; /* On demande les tokens à Twitter, et on passe l'URL de callback */ $request_token = $connection->getRequestToken($urlRedi); /* On sauvegarde le tout en session */ $_SESSION['oauth_token'] = $token = $request_token['oauth_token']; $_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret']; /* On test le code de retour HTTP pour voir si la requête précédente a correctement fonctionné */ switch ($connection->http_code) { case 200: /* On construit l'URL de callback avec les tokens en params GET */ $url = $connection->getAuthorizeURL($token); header('Location: ' .$urlRedi); break; default: $contenu= '<div class="error">Impossible de se connecter à twitter ... Merci de renouveler votre demande plus tard.</div>'; break; } ?>
Cette page permet de se connecter à notre application twitter, et vous demander d'autoriser l'application à intéragir avec vous. Bien entendu, il faut "accepter" (était-ce utile de le préciser ? :) )   Une fois l'autorisation effectuée, twitter nous redirige vers la page callback.php (car c'est ainsi que nous l'avons spécifier ci-dessus) Voici le code source de callback.php :
<?php session_start(); include "twitteroauth.php"; define('CONSUMER_KEY','votre consumer key citée plus haut'); define('CONSUMER_SECRET' ,'votre consumer_secret cité plus haut'); define("OAUTH_CALLBACK", "http://votresite.tld/callback.php");   $isLoggedOnTwitter = false; if (!empty($_SESSION['access_token']) && !empty($_SESSION['access_token']['oauth_token']) && !empty($_SESSION['access_token']['oauth_token_secret'])) { // On a les tokens d'accès, l'authentification est OK. $access_token = $_SESSION['access_token']; /* On créé la connexion avec twitter en donnant les tokens d'accès en paramètres.*/ $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']); /* On récupère les informations sur le compte twitter du visiteur */ $twitterInfos = $connection->get('account/verify_credentials'); $isLoggedOnTwitter = true; } elseif(isset($_REQUEST['oauth_token']) && $_SESSION['oauth_token'] === $_REQUEST['oauth_token']) { // Les tokens d'accès ne sont pas encore stockés, il faut vérifier l'authentification /* On créé la connexion avec twitter en donnant les tokens d'accès en paramètres.*/ $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); /* On vérifie les tokens et récupère le token d'accès */ $access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']); /* On stocke en session les token d'accès et on supprime ceux qui ne sont plus utiles. */ $_SESSION['access_token'] = $access_token; unset($_SESSION['oauth_token']); unset($_SESSION['oauth_token_secret']); if (200 == $connection->http_code) { $twitterInfos = $connection->get('account/verify_credentials'); $isLoggedOnTwitter = true; } else { $isLoggedOnTwitter = false; } } else { $isLoggedOnTwitter = false; } ?>
Si tout se passe bien, grâce à cette page, vous avez récupéré vos tocken d'accès, qui sont, respectivement, $access_token['oauth_token'] et $access_token['oauth_token_secret']   Il vous faut les stocker ! Pour cela, soit vous les stocker dans un fichier, soit en BDD, ou alors vous les indiquerez dans votre future fonction de post (que nous allons voir juste après ^)   Pour les afficher, rajoutez, en fin de script (callback.php) :
<?php echo 'token : '.$access_token['oauth_token'].'<br />'; echo 'token_secret : '.$access_token['oauth_token_secret'].'<br />'; ?>
  4) Création d'une fonction permettant de poster
<?php function postToMyTwitter($message){ include "twitteroauth.php"; $token = ( la variable récupérée dans callback.php : $access_token['oauth_token']); $token_secret  = ( la variable récupérée dans callback.php : $access_token['oauth_token_secret']); $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $token, $token_secret); $twitterInfos = $connection->get('account/verify_credentials'); if (200 == $connection->http_code) { $parameters = array('status' => $message); $status = $connection->post('statuses/update', $parameters); } } ?>
Utilisation de la fonction :
<?php postToMyTwitter('Hello World ! '); ?>
Affichera donc "Hello World" dans votre timeline !   Je vous ai joins les fichiers nécessaires dans l'archive zip, téléchargeable [ ici ]. J'ai juste inséré un fichier config.php qui doit être modifié avec vos consumer_key et consumer_secret ainsi que l'url de callback (qui doit être, par exemple : http://votresite.ext/callback.php)   En joy ^    
Une question? Une remarque? Un avis? Twittons-en!

When you click on links to various merchants on this site and make a purchase, this can result in this site earning a commission.
Affiliate programs and affiliations include, but are not limited to, the eBay Partner Network and Amazon.