Mettre les derniers Tweets sur son site internet
Nous proposons un script PHP stockant les tweets en cache dans un fichier, puis de mettre à jour ce fichier à intervalle de temps régulier, par exemple toute les heures. Cela limite les appels à l’API maximise les appels au fichier, beaucoup plus rapides. En modifiant quelques paramètres, choisissez facilement le nombre de tweets à afficher, ainsi que la fréquence d’interrogation de l’API du service pour la mise à jour du fichier. De plus, il faut traiter les données retournées par Twitter, pour afficher la date correctement, récupérer les éventuels liens et références (# et @) des tweets.
Changer le format de la date
Pour afficher la date des tweets, nous vous proposons une fonction simple provenant de Stackoverflow et transformant la date en : « Il y a 1 heure, Il y a 2 jours … ».
<?php
require_once(dirname(__FILE__)."/twitteroauth.php");
define("CONSUMER_KEY", "xxxxxx");
define("CONSUMER_SECRET", "xxxxxxxxxxxxxxxxxx");
define("TOKEN", "xxxxx-xxxxxxxxxxxxxx");
define("TOKEN_SECRET", "xxxxxxxxxxx");
//définition des constantes pour le relative time
define("SECOND", 1);
define("MINUTE", 60 * SECOND);
define("HOUR", 60 * MINUTE);
define("DAY", 24 * HOUR);
define("MONTH", 30 * DAY);
function relative_time($time){
$delta = strtotime('+1 minute') - $time;
if ($delta < 2 * MINUTE) {
return "Il y a moins d'une minute";
}
if ($delta < 45 * MINUTE) {
return "Il y a ".floor($delta / MINUTE) . " minutes";
}
if ($delta < 90 * MINUTE) {
return "Il y a une heure";
}
if ($delta < 24 * HOUR) {
return "Il y a ".floor($delta / HOUR) . " heures";
}
if ($delta < 48 * HOUR) {
return "hier";
}
if ($delta < 30 * DAY) {
return "Il y a ".floor($delta / DAY) . " jours";
}
if ($delta < 12 * MONTH) {
$months = floor($delta / DAY / 30);
return $months <= 1 ? "Il y a un mois" : "Il y a ".$months . " mois";
} else {
$years = floor($delta / DAY / 365);
return $years <= 1 ? "Il y a un an" : "Il y a ".$years . " ans";
}
}
Pour utiliser l’API de Twitter, il vous faudra 2 fichiers pour l’utilisation de OAuth. Vous trouverez les fichier sur GitHub. Seuls OAuth.php et twitteroauth.php sont nécessaires. Le second inclus le premier. C’est pour cela qu’en haut du script ci-dessus un seul fichier est inclus.
Vous avez besoin de vos identifiants API pour pouvoir utiliser ce service :
- CONSUMER_KEY
- CONSUMER_SECRET
- TOKEN
- TOKEN_SECRET
Vous trouverez ces informations sur la plateforme pour développeur de Twitter en accédant à votre compte.
Récupérer ses derniers tweets
La fonction pour la gestion des données en cache ou en interrogeant l’API est inspirée de cet article de blog : How to Get Your Most Recent Twitter Posts Using PHP with Caching. En plus de s’occuper de la gestion du fichier, le script utilise la fonction relative_time() décrite plus haut (indispensable donc à son fonctionnement). Elle stocke correctement la date pour traiter ensuite le contenu des tweets pour récupérer les données importantes.
<?php
/**
* @desc getTimeline return the last tweets and manage a file cache system.
* @param int $count number of tweets to display
* @param string $username tweeter username
* @param string $cache_file name of cache file
* @param int $interval expire time of cache
* @return array
*/
function getTimeline($count, $username,$cache_file,$interval) {
//dans ce cas le fichier doit être dans le même répertoire que le script.
$path = realpath(dirname(__FILE__))."/".$cache_file;
$last = filemtime($path);
$now = time();
if ( !$last || (( $now - $last ) > $interval) ) {
$connectionToken = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, TOKEN, TOKEN_SECRET);
$params = array("count"=>5);
$tweets = $connectionToken->get('statuses/user_timeline',$params);
$newTweets = array();
$i=0;
foreach($tweets as $tweet){
$time = strtotime($tweet["created_at"]);
//récupération du temps relatif
$create = relative_time($time);
//on traite le contenu pour récupérer liens et tags
$content = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@','<a href="$1" target="_blank">$1</a>',$tweet["text"]);
$content = preg_replace('#(@[_\-a-z0-9]+)#','<a href="http://twitter.com/$1" target="_blank">$1</a>',$content);
$content = preg_replace('#href="http://twitter.com/@([_\-a-z0-9]+)#','href="http://twitter.com/$1',$content);
$content = preg_replace('/(\B#\w*[a-zA-Z]+\w*)/','<a href="http://twitter.com/search?q=$1" target="_blank">$1</a>',$content);
$content = str_replace('href="http://twitter.com/search?q=#','href="http://twitter.com/search?q=%23',$content);
$newTweets[$i]["create"] = $create;
$newTweets[$i]["content"] = $content;
$i++;
}
$cache_static = fopen($path, 'wb');
fwrite($cache_static, serialize($newTweets));
fclose($cache_static);
$tweets = $newTweets;
}else{
$tweetsSr = file_get_contents($path);
$tweets = unserialize($tweetsSr);
}
return $tweets;
}
Voici un exemple d’utilisation de la méthode. Cela implique la création du fichier content.txt situé dans le même répertoire que le script ci-dessus avec les bons droits.
<?php
$tweets = getTimeline(3,"moncomptetwitter","content.txt",3600);