Php et Curl pour poster son status twitter sur n’importe quel site

Twitter est de plus en plus utilisé (même moi qui au début y trouvait un attrait relatif) et il est assez simple de publier son statut sur la plupart des grandes plate-formes communautaires.

Que se passe-t-il si on a envie d’afficher son statut si un site qui ne permet pas d’afficher son statut mais qui permet de modifier sa description ou sa signature ?
Même si la plupart des sites communautaire permet d’afficher son dernier twit, c’est un bon cas pratique pour découvrir cURL et son utilisation avec php.

Nous allons voir dans cette article comment faire avec PHP et cURL pour pouvoir le faire de maniére automatisé.

Pré-requis

Il faut avoir PHP compilé avec le support cURL sinon impossible de faire ses manipulations.

cURL, c’est une technique de curling ?

cURL est un utilitaire qui existe en ligne de commande et qui permet à l’instar de wget d’aller récupérer des pages, images, etc.. sur Internet.
Il sait gérer les formulaires, les cookies, etc…
cURL se comporte comme un navigateur web sans interface graphique.

PHP supporte cURL et permet son utilisation de maniére totalement transparente et simplifié.

Dans le cadre de notre projet, nous avons besoin de :
- pouvoir nous identifier auprès du site
- pouvoir poster un formulaire de données
- pouvoir récupérer le contenu d’une page donnée

Créeons notre objet

Avant de commencer à jouer avec cURL, il faut d’abord prendre en compte un paramétre important.
PHP s’execute avec un temps d’attente maximum de 30 secondes. Nous allons surcharger ce paramétre afin d’éviter que notre script s’arrête en plein milieu d’un envoi d’information.

En effet, selon le temps de réponse du site, il peut arriver que cela prenne rapidement plus de 30 secondes.
Pour cela, nous allons utiliser la ligne de code suivante afin d’éviter de rencontrer ce problème :


/* suppression du temps limite */
set_time_limit(0);

cURL s’utilise de la manière suivante :
- on initialise la librairie et on récupéré une instance
- on définit les options
- on exécute l’action (récupération de page, envoie de données, etc…)
- on récupère le retour (contenu ou code http)
- on libère l’instance

Pour initialiser l’instance, rien de bien compliqué :


$monInstance = curl_init();

Voyons maintenant quelles options peuvent nous interresser. Si on fait un petit détour par le manuel de php, on constate qu’il y a des lignes et des lignes d’options pas souvent facile à comprendre.

J’en ai sélectionné quelques unes qui sont indispensables pour les actions que nous allons effectué.

Nom Type Description Exemple
CURLOPT_RETURNTRANSFER boolean par défaut, cURL affiche directement le contenu de la page ou de la ressource souhaité, pour éviter de s’encombrer d’affichage surperflu, le contenu de la page sera retourné lors de l’exécution de l’action. true
CURLOPT_HEADER boolean Evite d’avoir les headers HTTP dans le contenu de la page ou de la ressource false
CURLOPT_USERAGENT chaîne de caractères Permet de faire passer cURL pour tel ou tel navigateur Mozilla/5.0 (Macintosh; U; Intel Mac OS X; fr; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9
CURLOPT_TIMEOUT temps en secondes le temps de réponse maximal avant de stopper le processus. 60
CURLOPT_FOLLOWLOCATION boolean spécifie si on suit les redirections http ou non. true
CURLOPT_MAXREDIRS entier le nombres de redirections maximum avant de considérer qu’il y a un problème. 10
CURLOPT_COOKIESESSION boolean true
CURLOPT_COOKIEJAR fichier un fichier pouvant être modifié par l’utilisateur qui lance apache et qui va contenir les variables des cookies des sites visités ./cookie.txt
CURLOPT_URL url l’url que l’on souhaite utiliser http://www.despe974.org/
CURLOPT_POST boolean permet de dire que les valeurs transmises sont en POST true
CURLOPT_POSTFIELDS chaine de caractères spécifie les valeurs des différents champs d’un formulaire (ne pas oublier de spécifier toutes les valeurs du formulaire même les hidden et les submit) login=tarte&password=bidule

Pour définir une option, il suffit d’utiliser curl_setopt comme ci-dessous :


curl_setopt($monInstance, NOMDELOPTION, VALEUR);

Une fois l’instance configuré comme nous le souhaitons, il ne reste plus qu’à lancer notre action (envoi de formulaire, récupération de contenu, etc…)


$contenu = curl_exec($monInstance);

La variable contenu va contenir le code HTML de la page ou le contenu binaire du fichier que vous avez souhaité récupérer.

Pour obtenir plus d’informations sur comment la requête HTTP s’est passé, il est possible de récupérer un tableau contenant ces paramètres.


$info = curl_getinfo($monInstance);

Enfin, si on ne souhaite plus utiliser notre instance, il faut la libérer avec curl_close. Si vous souhaitez récupérer une autre page, etc… il est possible d’utiliser la même instance en changeant l’option CURLOPT_POST et éventuellement celle qui vous sont nécessaire.


curl_close($monInstance);

Voici un exemple par exemple pour se logguer sur le site City974


$monInstance = curl_init();
curl_setopt($monInstance, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($monInstance, CURLOPT_HEADER, false);
curl_setopt($monInstance, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; fr; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9');
curl_setopt($monInstance, CURLOPT_TIMEOUT, 60);
curl_setopt($monInstance, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($monInstance, CURLOPT_MAXREDIRS, 10);
curl_setopt($monInstance, CURLOPT_COOKIESESSION, true);
curl_setopt($monInstance, CURLOPT_COOKIEJAR, './cookie.txt');
curl_setopt($monInstance, CURLOPT_URL, 'http://www.city974.com/ident/identification.php');
curl_setopt($monInstance, CURLOPT_POST, 1);
//remplacer les paramètres par vos informations
curl_setopt($monInstance, CURLOPT_POSTFIELDS, 'pseudo=ahahahaha&mdp=ouioui&retenir=1&Submit=Ok');
$contenu = curl_exec($monInstance);
$info = curl_getinfo($monInstance);
//affiche le contenu pour voir qu'on est loggué
echo $contenu;
curl_close($monInstance);

Récupérer son dernier Twitt

Twitter comme tout bon site web 2.0 propose une API assez simple à utiliser.
Il suffit d’utiliser un cURL avec l’url adéquate pour récupérer ce qui nous intéresse.

L’url pour récupérer nos tweets sont de la forme http://www.twitter.com/statuses/user_timeline/username.format?count=10 où username est votre nom d’utilisateur et format le format dans lesquels vous souhaitez récupérer ces informations (xml et json principalement).

Voici comment faire avec cURL pour récupérer ce flux.


$monInstance = curl_init();
curl_setopt($monInstance, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($monInstance, CURLOPT_HEADER, false);
curl_setopt($monInstance, CURLOPT_TIMEOUT, 60);
curl_setopt($monInstance, CURLOPT_MAXREDIRS, 10);
curl_setopt($monInstance, CURLOPT_URL, 'http://www.twitter.com/statuses/user_timeline/despekiroule.xml?count=10');
$contenu = curl_exec($monInstance);
$info = curl_getinfo($monInstance);
$xml = $curl->getContent('');
$twitts = new SimpleXMLElement($contenu);
$lastTwitt = $twitts->status[0]->text;

Conclusion

Nous avons vu de manière succincte comment utiliser cURL pour récupérer et poster des informations dans le cadre précis de pouvoir poster son statut Twitter un peu n’importe où.
Un exemple plus complet est disponible ici.

You can leave a response, or trackback from your own site.

Leave a Reply

Flux RSS

Twitter

http://snurl.com/295dk arghhhhhh