L’API twitter est d’une très facile en prendre en main. Elle est basée sur REST, il suffit donc de faire une requête HTTP avec les bons paramètres pour obtenir les informations que l’on a besoin. Il existe une multitude de librairies pour tous les langages de programmation. Vous trouverez une liste officiel sur le wiki de twitter. Pour l’utilisation avec PHP, j’utilise twitterlibphp.
Couplé avec de l’object SimpleXMLElement et avec un appel à la méthode xpath il est très facile d’obtenir la timeline d’un utilisateur. Malheureusement, le texte est statique. Les hashtags, les utilisateurs et les URL n’ont pas de liens vers les pages.
Vous pouvez utiliser le code suivant pour créer une liste de twitt avec les liens vers les URL ou vers les pages twitter correspondantes.
<?php try{ require_once('twitter.lib.php'); $twitter = new Twitter('username', 'password'); $xml = new SimpleXMLElement($twitter->getUserTimeline(array("count"=>"5"))); $xmlNode = $xml->xpath('/statuses/status/text'); echo '<ul>'; foreach($xmlNode as $node){ $twitt = $node[0]->asXML(); if(preg_match_all("/((http(s?):\/\/|ftp:\/\/{1})([0-9a-zA-Z.\-]*\/?)*)/", $twitt,$val_url)){ foreach($val_url[0] as $url){ $twitt = str_replace($url, '<a href="'.$url.'" target="_blank">'.$url.'</a>',$twitt); } } if(preg_match_all("/#[a-zA-Z0-9_-]*/",$twitt,$val_hashtag)){ foreach($val_hashtag[0] as $hashtag){ $twitt = str_replace($hashtag, '<a href="http://search.twitter.com/search?q='.urlencode($hashtag). '" target="_blank">'.$hashtag.'</a>',$twitt); } } if(preg_match_all("/@[a-zA-Z0-9_-]*/",$twitt,$val_at)){ foreach($val_at[0] as $at){ $twitt = str_replace($at,'<a href="http://twitter.com/'.str_replace("@","",$at). '" target="_blank">'.$at.'</a>',$twitt); } } echo '<li>'.$twitt.'</li>'; } echo '</ul>'; }catch(Exception $e){ echo 'Twitter connection error'; } ?>
EDIT:
Merci @D3C4P5, Il semblerait que l’on peut optimiser ce code avec preg_replace :
<?php try{ require_once('twitter.lib.php'); $twitter = new Twitter('username', 'password'); $xml = new SimpleXMLElement($twitter->getUserTimeline(array("count"=>"5"))); $xmlNode = $xml->xpath('/statuses/status/text'); echo '<ul>'; foreach($xmlNode as $node){ $twitt = $node[0]->asXML(); $twitt = preg_replace('#((http(s?):\/\/|ftp:\/\/{1})([0-9a-zA-Z.\-]*\/?)*)#i', '<a href="$0" target="_blank">$0</a>', $twitt); $twitt = preg_replace('#@([a-zA-Z0-9_-]+)#i', '<a href="http://twitter.com/$1" target="_blank">@$1</a>', $twitt); $twitt = preg_replace('#\#([a-z0-9_-]+)#i', '<a href="http://search.twitter.com/search?q=%23$1" target="_blank">#$1</a>', $twitt); echo '<li>'.$twitt.'</li>'; } echo '</ul>'; }catch(Exception $e){ echo 'Twitter connection error'; } ?>
Articles similaires :
Mots-clefs : hashtag, preg_match, regex, twitter, url
follow me
Salut
Pourquoi ne pas simplement utiliser [^ ] comme masque de recherche pour les hashtags et urls ? il y a des caractères accentués aussi dans les hashtags et d’autres caractères (%?&;=, et même #!*+ pur ne citer qu’eux) dans les urls…
Utiliser [^ ] est bien plus exhaustif et bien plus performant.
Ah et j’oubliais : le flag i signifie « insensible à la casse » donc le masque #@([a-zA-Z0-9_-]+)#i devrait être écrit soit #@([a-zA-Z0-9_-]+)# (sans le i) soit #@([a-z0-9_-]+)#i (sans l’intervalle de caractères majuscules)
J’ai testé le script en local avec easyphp, mais rien ne s’affiche,… page blanche ! é_è
Le script ne marche sans doute plus car twitter a rendu obligatoire l’utitilisation de OAuth pour les requêtes authentifié vers son API. Tu peux te passer de twitterlib et faire direct un curl sur http://twitter.com/statuses/user_timeline/user_name.xml?count=10
merci pour cette info trés utile bugz:))
Exise t’il des sites web d’informattion en francais sur l’installation des api et spécialement apitwitter svp merci
En français, je ne sais pas… Mais la documentation de twitter qui je crois est seulement disponible en anglais est plutôt claire.
C’est une API REST, si c’est pour récupérer des status publiques, sans OAuth, il suffit de faire une requête vers la bonne URL.