Login
blog > developpement > [Tuto] Envoyer des messages sur Twitter depuis PHP

[Tuto] Envoyer des messages sur Twitter depuis PHP

Posté par : Seb - Le Vendredi 19 Février 2010 à 09:40


Difficile aujourd'hui de passer à côté de Facebook ou Twitter. Ces deux outils de communication sont aujourd'hui de formidables vecteurs de communication pour tous ceux qui cherchent à promouvoir leurs articles ou même leur vie privée. Pour faciliter la vie des Kookyoonautes et le mien j'ai cherché comment intégrer grâce à l'API Twitter un post automatique pour annoncer les nouvelles publications.


Deux solutions existent en PHP, la première repose sur l'API non authentifiée et c'est celle que nous verrons pour sa simplicité d'utilisation. La seconde a l'avantage de vous épargner les limites de volume de données, elle permet également l'affichage de la source du message "from web / from API". Dans la FAQ officielle de l'API Twitter j'ai trouvé ces deux sites qui se complètent très bien pour notre objectif : tehuber.com et woork.blogspot.com .


Pour poster un nouveau statut sur Twitter il vous faut générer une requête HTTP comprenant le nouveau message, le login et le mot de passe de l'utilisateur.

  • Le message est transmis par variable dans l'url : "&status=message"
  • Les identifiants sont transmis dans la requête HTTP : "CURLOPT_USERPWD"

 

Le code de la fonction est le suivant :

function postToTwitter($username,$password,$message){

    $host = "http://twitter.com/statuses/update.xml?status=".urlencode(stripslashes(urldecode($message)));

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $host);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));

    $result = curl_exec($ch);
    // Look at the returned header
    $resultArray = curl_getinfo($ch);

    curl_close($ch);

    if($resultArray['http_code'] == "200") {
          $twitter_status='Message envoyé ! <a href="http://twitter.com/'.$username.'">Voir sur le profil</a>'; }
    else $twitter_status = "Erreur, requete refusée (".$resultArray['http_code'].").";

    return $twitter_status;
}

Simple et fonctionnel, ce code utilise Curl pour générer une requête HTTP adéquate.


Quelques améliorations

Voyons maintenant comment optimiser ce système. En effet plusieurs soucis peuvent encore survenir :

Longueur du message
Un tweet par définition fait 140 caractères, pas plus. La FAQ de l'API précise que les messages de plus de 140 symboles sont ignorés sans message d'erreur mais que ceci sera réglé dans une prochaine version. Dans le doute ne prenez pas de risque : testez la longueur du message, générez des url courtes, tronquez si nécessaire :


//Si la chaîne est plus longue que 140 symboles on la coupe
if(strlen($chaine) > 140) {
       $chaine = substr($chaine,0,137);
       if (strrpos($chaine," ")) {$chaine = substr($chaine,0,strrpos($chaine," "));}
       $chaine = $chaine."...";
    }

 

Les url
Généralement les url sur twitter sont remplacées par des tinyurl ou bit.ly. Il est possible de les générer à la volée pour gagner en place :

 

  • Avec TinyUrl :

 $tinyUrl = @file('http://tinyurl.com/api-create.php?url='.urlencode($yourUrl));
 // $tinyUrl[0] contiens la nouvelle url

 

  • Avec bit.ly (il faut créer un compte sur leur site avant pour obtenir une API Key gratuite) :

$newUrl = @file('http://api.bit.ly/shorten?version=2.0.1&longUrl='.urlencode($url).'&login=kookyoo&apiKey=VOTREAPIKEY');
//Ajouter "&format=xml" pour obtenir les résultat au format xml
if(eregi("<shortUrl>(.*)</shortUrl>",$newUrl[0],$newUrl))
//$newUrl[0] contient la nouvelle url
 


Le champ "source"
La dernière optimisation à faire serait de vous inscrire (c'est gratuit) sur le site de Twitter en temps que développeur d'applications. Votre clé d'authentification remplacement alors automatiquement le champ "from" sur le site de Twitter en le remplaçant par l'adresse de votre site !


Voilà, vous avez désormais tout en main pour une intégration rapide et efficace de Twitter dans votre site en PHP. Si vous avez des questions ou suggestions les commentaires sont ouverts !



Article précédant :
Media Player Classic : pixel shaders pour les dbutants!






Commentaires 4 commentaires

Marie-Micheline le 16 Mars 2010 à 0:30

Merci pour votre aide

farwarx le 11 Avril 2010 à 19:22

Nikel Chrome, euh Firefox ;)
Merci Seb!

invité le 25 Juin 2010 à 11:50

Bonjour et merci pour le code
je fais la même chose pour facebook mais je bloque un peu quelqu'un aurai des pistes ??

Yann le 03 Septembre 2010 à 14:48

Bonjour,
La méthode avec Curl ne fonctionne plus depuis le 1er septembre 2010 car Twitter a désactivé l'authentification basique.
Il faut maintenant utiliser une méthode plus complexe : OAuth.
Voici un tuto simple expliquant une manière de faire :
http://yanncochard.com/tuto/envoyer-un-tweet-en-php-avec-oauth-sur-twitter



.laisser un commentaire




Codes html interdits. Les liens sont convertis automatiquement.

Réalisation

Code & Design : Sébastien Cardona

Page générée en : 0.051412s