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.
Leave a Reply