Suivre les échanges de quelqu’un sur Twitter

by 512banque on 13 février 2010

Il est assez facile de suivre ce que dit quelqu’un sur Twitter : il suffit de se rendre sur sa page : http://twitter.com/username

Mais parfois, il peut être intéressant de suivre les interactions avec les autres, les RT ou même les questions que l’on pose à cette personne-là.

Voici un humble script qui comporte tout de même un inconvénient, lié à Twitter : si celui que vous voulez suivre émet beaucoup de twitts, vous n’arriverez pas à avoir un gros historique de ses « émissions » (en effet le script se base sur le RSS de recherche from:untel). Il faudra donc aller sur sa page manuellement.

Et comme le RSS se met à jour avec un certain retard, c’est déjà mieux que rien :)

Sinon, il vous reste la possibilité de parser sa page standard avec cURL, et de construire vous-même votre flux. Mais assez tordu à faire au final.

Bref, je m’étais fait ça et je me suis dit : autant en faire profiter les autres :)

Vous aurez besoin de MagPie (n’oubliez pas de changer la valeur par défaut du cache dans rss_cache.inc).

Et voilà la démo.

Et voilà le script :

  1.  
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
  4. <head>
  5.   <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6.   <title>Suivre quelqu‘un à la trace</title>
  7.  <meta http-equiv="content-style-type" content="text/css" />
  8.  <meta name="ROBOTS" content="NOFOLLOW"> <!– je vais quand même pas donner du jus à twitter !–>
  9.  <style type="text/css" media="screen">
  10.    * { margin:0; padding: 0; }
  11.         body { background:url(‘http://a3.twimg.com/a/1265999168/images/bg-clouds.png’) no-repeat #C0DEED; font-family:’Lucida Grande’,sans-serif; font-size:24px; line-height:20px; color:#333333; }
  12.         a { color:#333333; text-decoration: none; }
  13.     a:hover { text-decoration: underline; }
  14.         a#alink { font-size:8px; color:grey; float:left; }
  15.         .details, .details a, .date { color:grey; font-size:11px; }
  16.         img { float:left; margin-right:5px; }
  17.         ul { list-style-type:none; }
  18.         ul li { margin-top:15px; clear:both; }
  19.         #container { width: 940px; margin:auto; background:white; padding: 10px; }
  20.   </style>
  21. </head>
  22. <body>
  23.  
  24. <div id="container">
  25.  
  26. <form action="" method="GET">
  27. Pseudo à suivre : <input id="username" name="username" type="" size="" />  <button id="" name="" type="submit" value="submit">Envoyer</button>
  28. </form>
  29.  
  30. <?php
  31.  
  32.         setlocale(LC_ALL,‘fr_FR.UTF8′);
  33.         setlocale(LC_ALL,‘french’); //gardez celle la si vous êtes sous wamp sinon virez
  34.    
  35.         error_reporting(E_ERROR | E_WARNING | E_PARSE);
  36.        
  37.         require_once(‘magpierss/rss_fetch.inc’);
  38.        
  39.         // merci à @CharlyBr
  40.         function cmp($a, $b) {
  41.         $aa = strtotime($a[‘updated’]);
  42.         $bb = strtotime($b[‘updated’]);
  43.         if ($aa == $bb) {
  44.         return 0;
  45.         }
  46.         return ($aa > $bb) ? -1 : 1;
  47.         }
  48.        
  49.         $username = $_GET[‘username’];
  50.        
  51.         if(!empty($username)):
  52.        
  53.        
  54.         // au cas où vous seriez suffisament bête pour vous hacker vous-même
  55.         if ((!$username) || (!preg_match("@^[\w]+$@", $username))) exit("Merci de ne pas tenter de me hacker");
  56.        
  57.         $array_final = array();
  58.        
  59. //Merci à julien www.webinventif.fr : réglez la variable rpp sur le nombre de twitts à récupérer :)
  60.  
  61.         $array_from_to_at = array(‘http://search.twitter.com/search.atom?q=from%3A’.$username.‘&rpp=50′,
  62.     ‘http://search.twitter.com/search.atom?q=to%3A’.$username.‘&rpp=50′,
  63.     ‘http://search.twitter.com/search.atom?q=%40′.$username.‘&rpp=50′);
  64.        
  65.        
  66.         foreach ($array_from_to_at as $rss) {
  67.                 $rss = fetch_rss($rss);
  68.                 foreach ($rss->items as $item) {
  69.                         $array_final[] = array(
  70.                         ‘author_name’ => $item[‘author_name’],
  71.                         ‘author_uri’ => $item[‘author_uri’],
  72.                         ‘link’ => $item[‘link’],
  73.                         ‘title’ => $item[‘title’],
  74.                         ‘link_image’ => $item[‘link_image’],
  75.                         ‘updated’ => $item[‘updated’]
  76.                         );
  77.                 }
  78.         }
  79.  
  80.         //dédoublonnage, array_unique ne marche pas en multidimensional
  81.         foreach ($array_final as $key=>$value) {
  82.                 $array_final[$key] = "’" . serialize($value) . "’";
  83.         }
  84.         $array_final = array_unique($array_final);
  85.        
  86.         foreach ($array_final as $key=>$value) {
  87.                 $array_final[$key] = unserialize(trim($value, "’"));
  88.         }
  89.  
  90.         //réorganisation du tableau
  91.         usort($array_final, "cmp");
  92.         $a = ‘PGEgaHJlZj0iaHR0cDovL3d3dy5kZWxpY2lvd’;
  93.         $a .= ‘XNjYWRhdmVyLmNvbS9kZW1vL3JlZmVyZW5jZW’;
  94.         $a .= ’1lbnQuaHRtbCIgaWQ9ImFsaW5rIj’;
  95.         $a .= ’5yZWZlcmVuY2VtZW50PC9hPg==’;
  96.        
  97.         echo "<ul>";
  98.         foreach ($array_final as $item) {
  99.                 $author = $item[‘author_name’];
  100.                 $author_link = $item[‘author_uri’];
  101.                 $image = $item[‘link_image’];
  102.                 $href = $item[‘link’];
  103.                 $title = $item[‘title’];
  104.                 $date = strftime(‘%H:%M le %d %b’, strtotime($item[‘updated’]));
  105.                 echo "<li><img src=\"$image\"><a href=\"$href\">".utf8_encode($title)."</a>
  106. <span class=\"details\"><a href=\"$author_link\">$author</a> <span class=\"date\">à ".utf8_encode($date)."</span></span></li>";
  107.         }
  108.        
  109.         echo base64_decode($a);
  110.        
  111.         endif;
  112.        
  113.        
  114. ?>
  115.  
  116. </div>
  117.  
  118. </body>
  119. </html>
  120.  

{ 4 comments }

Canyon février 13, 2010 à 20:51

Mais c’est sympa comme tout. ;)

Julien février 14, 2010 à 8:20

Bonne idée !

Et pour la limitation, il suffit de rajouter « &rpp=nombredetweet » à la fin de l’url du flux ;)

Plein d’autres paramètres possibles: q=&ands=&phrase=&ors=&nots=&tag=&lang=fr&from=&to=&ref=&near=&within=15&units=mi&since=&until=&rpp=100 (voir l’API)

512banque février 14, 2010 à 12:56

Bien joué Julien, merci, j’ai intégré l’astuce dans l’article :)

Bingo février 16, 2010 à 14:47

Toujours plein de bonnes idées et conseils merci Julien :)

Si vous avez trouvé ce blog via une liste de blogs dofollow, ne perdez pas votre temps, je refuse systématiquement tous les commentaires sauf ceux en valent réellement la peine ;)

Comments on this entry are closed.

Previous post:

Next post: