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
RépondreEffacersympa 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.
RépondreEffacerBonjour,
RépondreEffacerCette 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 ?
RépondreEffacerJ'ai vu ça dedans :
require_once 'Zend/Oauth/Consumer.php';
const OAUTH_BASE_URI = 'http://twitter.com/oauth';