Tutoriel: récupérer les derniers tweets et informations de comptes twitter via les flux RSS

4 janvier 2011 par Sybio | Catégorie: PHP, Réseaux Sociaux | 3 commentaires

Tout d’abord, bonne année 2011 à tout le monde \o/

Twitter et les flux RSSNous allons voir comment récupérer facilement les derniers tweets de comptes twitter (publiques), mais aussi les informations comme l’avatar, etc … et ce sans passer par l’API de twitter !
En effet, un moyen simple et efficace est de passer par les flux RSS des comptes !

C’est très pratique pour faire un module de veille twitter par exemple.

Pour cela, vous devez savoir certaines choses:

  • nous allons utiliser la fonction magique simplexml_load_file pour nous ballader dans les fichiers XML.
  • les flux RSS de twitter sont parfois (ou plutôt souvent) indisponibles pendant des cours laps de temps, donc il ne faut pas s’inquiéter si simplexml_load_file n’arrive pas à ouvrir quoique ce soit de temps en temps…
  • Les derniers tweets d’un compte sont accessibles à cette URL: http://twitter.com/statuses/user_timeline/PseudoOuID.rss
  • Les informations d’un compte sont accessibles à cette URL: http://twitter.com/users/PseudoOuID.xml

1) Ouverture des fichiers et récupération des balises

On ouvre le flux RSS avec simplexml_load_file, puis on parcourt les items (un item = un tweet) en récupérant les informations du tweet.

Un tweet est composé d’un titre (title), une description, une date de publication (pubDate)…

Regardez les balises XML de la source du flux pour tous les voir.

// Mon fichier php qui traite les informations d'un compte twitter
$flux = simplexml_load_file("http://twitter.com/statuses/user_timeline/Sybio01.rss");
foreach ($flux->channel->item as $item)
{
  $tweetTitle = $item->title;
  $tweetLink = $item->link;
  $tweetContent = $item->description;
}

Si vous êtes en train de faire un module de veille et que vous enregistrez les tweets, vous pouvez vérifier la date du dernier tweet enregistré et quitter le foreach lorsque la date est ultérieure, afin d’éviter de récupérer d’anciens tweets ^^

2) Formatage des tweets avec des fonctions faîtes maison

Ensuite, il va falloir transformer les liens, hashtags et pseudos du tweet en liens cliquables, et pour cela j’utilise quelques REGEX:

<?php
// fichier: system.class.php
class System
{
  /**
  * Ajouter des balises strong au login d'un tweet
  */
  public static function addStrongTagsToTwitterLogin($tweet)
  {
    return preg_replace('#^([A-Za-z0-9_]+:)#', '<strong>$1</strong>', $tweet);
  }

  /**
  * Transforme les liens d'un tweet en liens cliquables
  */
  public static function haveClickableLinksForATweet($tweet)
  {
    return preg_replace('#(http|https)(://[A-Za-z0-9-]+)(\.[a-z]{2,5})([A-Za-z0-9_/\+\?\.-]*)#s', '<a href="$1$2$3$4" onclick="window.open(this.href); return false;" rel="nofollow">$1$2$3$4</a>', $tweet);
  }

  /**
  * Transforme les @pseudo d'un tweet en lien cliquable vers le profil
  */
  public static function haveClickableLoginForATweet($tweet)
  {
    return preg_replace('# @([A-Za-z0-9_]+)#s', ' <a href="http://twitter.com/$1" onclick="window.open(this.href); return false;" rel="nofollow">@$1</a>', $tweet);
  }

  /**
  * Transforme les #tag d'un tweet en lien cliquable vers la recherche
  */
  public static function haveClickableTagsForATweet($tweet)
  {
    return preg_replace('/ #([A-Za-z0-9_]+)/s', ' <a href="http://twitter.com/search?q=%23$1" onclick="window.open(this.href); return false;" rel="nofollow">#$1</a>', $tweet);
  }

  /**
  * Transforme tous les liens et @pseudo d'un tweet en liens cliquables, ajoute du gras....
  */
  public static function transformStringToTweet($tweet)
  {
    $tweet = self::addStrongTagsToTwitterLogin($tweet);
    $tweet = self::haveClickableLinksForATweet($tweet);
    $tweet = self::haveClickableLoginForATweet($tweet);
    $tweet = self::haveClickableTagsForATweet($tweet);

  return $tweet;
  }
}

Modifions le code précédent pour remplacer les occurences des REGEX par des liens:

// Mon fichier php qui traite les informations d'un compte twitter
$flux = simplexml_load_file("http://twitter.com/statuses/user_timeline/Sybio01.rss");

foreach ($flux->channel->item as $item)
{
  $tweetTitle = $item->title;
  $tweetLink = $item->link;
  $tweetContent = System::transformStringToTweet($item->description);
}

3) Récupération de l’avatar

Enfin, une chose qui peut être intéressante serait de récupérer et mettre l’avatar du compte à côté des tweets lors de l’affichage. Pour cela, on va utiliser les informations du compte. De même, je vous invite à découvrir toutes les données qui constituent un compte. Nous, nous voulons seulement récupérer les informations sur l’avatar, qui sont comprises dans la balise profile_image_url:

$infos = simplexml_load_file("http://twitter.com/users/Sybio01.xml");
$avatar = $infos->profile_image_url;

4) Affichage des tweets d’un compte

// Mon fichier php qui traite les informations d'un compte twitter

// J'inclue le fichier de la classe System
include("system.class.php");
$infos = simplexml_load_file("http://twitter.com/users/Sybio01.xml");
$avatar = $infos->profile_image_url;

$flux = simplexml_load_file("http://twitter.com/statuses/user_timeline/Sybio01.rss");

foreach ($flux->channel->item as $item)
{
  $tweetTitle = $item->title;
  $tweetLink = $item->link;
  $tweetContent = System::transformStringToTweet($item->description);

  echo "<div style='width: 500px; margin: auto; overflow: hidden; padding-bottom: 20px;'>";
  echo "<div style='float: left; height: 100%; width: 48px; margin-left: 20px; margin-right: 20px;'>";
  echo "<img border='0' style='vertical-align: middle;' src='".$avatar."' alt='Sybio01' />";
  echo "</div>";
  echo $tweetContent."<br /><a href='".$tweetLink."' onclick='window.open(this.href); return false;'>Voir le tweet</a></div>";
}

Après, libre à vous de sauvegarder les tweets et de les réafficher ailleurs, etc…

Voila une démo basique de mon script.

Dernière chose, je me répète, mais les flux de Twitter sont capricieux, donc optez pour un try & catch à chaque appel de la fonction simplexml_load_file, sinon votre script risque de crasher souvent ^^

3 commentaires pour cet article:
  • Sites Internet Cambrai, le 8 mars 2011 à 05:03 #293

    Bonjour et merci pour ce script très utile en référencement !

  • Gate, le 16 mai 2011 à 10:05 #443

    Il y a des erreurs dans ton dernier code :
    4) Affichage des tweets d’un compte

    « ovrerflow: hidden; » -> « overflow: hidden; »

    et tu ferme un div de trop ! ^^

    Merci sinon, très pratique comme script !

  • Sybio, le 16 mai 2011 à 10:05 #446

    Bien vu Gate c’est corrigé merci ;)

Laissez votre commentaire: