Pour moi, en dépit de la popularité du service de micro-blogging Twitter, c'est encore resté au stade de curiosité. Peut-être parce que j'ai le verbe facile et que j'ai de la difficulté à être contraint à 140 caractères! Non, sans blague, on est habitué à ce genre de fonctionnalité, que ce soit dans le statut MSN (Share a quick message), dans celui de Facebook ou dans les SMS (160 caractères), donc je comprends l'engouement des gens à vouloir résumer leur pensée en une courte phrase.
Alors que la demande est grandissante, les utilisateurs veulent pouvoir intégrer le contenu à partir d'une interface unique. Qu'en est-il si on veut faire en sorte de poster un message vers Twitter à partir de notre propre application ?
En utilisant cUrl (à supposer qu'il est installé), on sait qu'on peut appeler la commande par le shell pour s'authentifier et poster le statut:
curl http://twitter.com/statuses/update.xml -u username:password -d status="message"
Sachant cela, rien ne nous empêcherait de lancer la commande PHP shell_exec(), mais pour des raisons de sécurité, les administrateurs réseaux ne sont jamais très friand à débloquer ce type d'appel. Souvent, le mieux qu'ils puissent faire est d'autoriser l'exécution de certains programmes, en les spécifiants comme sudoers.
$result = shell_exec('curl http://twitter.com/statuses/update.xml -u username:password -d status="message"');
Donc il est préférable d'utiliser la librairie cUrl et d'instancier l'appel à l'API REST directement par PHP:
// url qui pointe vers l'action update, en xml ou jsonUne fois l'envoi terminé, on récupère l'information retournée dans une variable et on peut regarder le statut par le code HTTP reçu:
$api_url = 'http://twitter.com/statuses/update.xml';
// l'information de votre compte
$username = 'usr';
$password = 'pwd';
// le message
$args = array( 'status' => 'Mon premier statut par curl');
// initialiser une session cUrl
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api_url);
curl_setopt($ch, CURLOPT_HEADER, True);
curl_setopt($ch, CURLOPT_NOBODY, False);
curl_setopt($ch, CURLOPT_POST, True);
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
// information de login
curl_setopt($ch, CURLOPT_USERPWD, $username.':'.$password );
// en secondes
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// pour éviter l'erreur HTTP 417 - Expectation Failed
$headers = array('Expect:', 'X-Twitter-Client: ', 'X-Twitter-Client-Version: ', 'X-Twitter-Client-URL: ');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// envoyer le message
$response = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if( intval( $info['http_code'] ) == 200 )Notez que si vous faites des tests et que vous avez du mal à vous authentifier, votre compte sera bloqué temporairement et provoquera une erreur 401. Vous devrez patienter un certain temps pour qu'il soit dévérrouillé.
echo 'Message envoyé';
else
echo 'Erreur HTTP ' . $info['http_code'];
Bonjour
sympa ce script pour poster sur twitter. je cherche à faire la même chose pour facebook tu aurai des pistes?
Malheureusement je n'ai jamais essayé de faire ça. Je jeterai un oeil pour voir comment ça fonctionne.
Bonjour,
Cette méthode ne fonctionne plus depuis le 1er septembre 2010, car Twitter a désactivé l'authentification basique (ce que fait Curl).
Il faut maintenant utiliser OAuth, Il y a un tuto ici pour expliquer une méthode :
http://yanncochard.com/tuto/envoyer-un-tweet-en-php-avec-oauth-sur-twitter
Tu as raison, ça utilise maintenant l'authentification oAuth. As-tu essayé Zend_Service_Twitter ? Est-ce que je me trompe où depuis la version 1.10 du framework, le composant de Zend le supporte aussi ?
J'ai vu ça dedans :
require_once 'Zend/Oauth/Consumer.php';
const OAUTH_BASE_URI = 'http://twitter.com/oauth';