Le coefficient de Dice est une mesure de similarité (Article wikipedia: Dice's coefficient). Ce coefficient est utilisé en statistique pour déterminer la similarité entre deux échantillons. J'avais besoin d'utiliser ce coefficient pour l'un de mes projets, mais n'étant pas disponible de bases avec PHP, j'ai du créer une fonction que je vous livre ici.

Code PHPPrésentation du coefficient de Dice

Le coefficient est toujours compris entre 0 et 1. Il se définit comme le double de l'intersection de deux lots (échantillons de valeurs) divisé par l'union de ces deux lots. La formule ci-dessous résume la méthode de calcul:

Équation coefficient de Dice

Équation coefficient de Dice

Dans cette formule, X et Y sont des lots. Pour calculer le coefficient de Dice de deux chaines, il est possible de définir X et Y comme l'ensemble des bigrammes de chacune des chaines respectives. Un bigramme étant la réunion de deux lettres dans un mot.

Exemple d'utilisation

Prenons l'exemple de deux chaines "hello" et "allo", auquel ont souhaiterais déterminer le coefficient de Dice. Les bigrammes respectifs sont {he,el,ll,lo} (soit 4 bigrammes) et {al,ll,lo} (soit 3 bigrammes). L'intersection des deux lots sont les valeurs {ll,lo}. Ainsi, l'équation devient:

s = 2*2 /(4+3) = 4/7 = 0,57

Grâce à cette valeur de 0,57 il est possible de déterminer que ces deux mots sont à peu près semblables. Plus la valeur est proche de 1 et plus les chaines sont similaires. Si le résultat est égal à 1, cela signifie que les deux chaines sont identiques.

Code PHP du coefficient de Dice

Le code ci-dessous présente la fonction qui permet de calculer le coefficient de Dice avec PHP.

<?php
// Calcul du coefficient de Dice
// Inspiration: http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Dice%27s_coefficient
// Licence: Libre de droit

function dice($str1='', $str2='')
{
    $str1_length = strlen($str1);
    $str2_length = strlen($str2);
   
    // Length of the string must not be equal to zero
    if ( ($str1_length==0) OR ($str2_length==0) )
        return 0;
   
    $ar1 = array();
    $ar2 = array();
    $intersection = 0;
   
    // find the pair of characters
    for ($i=0 ; $i<($str1_length-1) ; $i++)
        $ar1[] = substr($str1, $i, 2);
   
    for ($i=0 ; $i<($str2_length-1) ; $i++)
        $ar2[] = substr($str2, $i, 2);
   
    // find the intersection between the two sets
    foreach ($ar1 as $pair1) {
        foreach ($ar2 as $pair2) {
            if ($pair1 == $pair2)
                $intersection++;
        }
    }
   
    $count_set = count($ar1) + count($ar2);
    $dice = (2 * $intersection) / $count_set;
    return $dice;
}

echo dice('', 'cdefghi').'<br />'; // test with a null string
echo dice('abcdefg', '').'<br />'; // test with a null string
echo dice('abcdefg', 'cdefghi').'<br />';
echo dice('night', 'nacht').'<br />';
?>

La fin du script présente des exemples pour utiliser cette fonction. Avant de terminer, je tiens à préciser que je me suis inspiré d'un code en C++ provenant d'un wiki anglais: "Implementation of Dice's algorithm". Ce wiki présente l'implémentation du coefficient de Dice en C++, Java, Python et Ruby (mais pas en PHP, d'où l'intérêt du code que je viens de vous présenter). Faites-en bon usage.

Le coefficient de Dice est une mesure de similarité (Article wikipedia: Dice's coefficient). Ce coefficient est utilisé en statistique pour déterminer la similarité entre deux échantillons. J'avais besoin d'utiliser ce coefficient pour l'un de mes projets, mais n'étant pas disponible de bases avec PHP, j'ai du créer une fonction que je vous livre ici.

Présentation du coefficient de Dice

Le coefficient est toujours compris entre 0 et 1. Il se définit comme le double de l'intersection de deux lots (échantillons de valeurs) divisé par l'union de ces deux lots. La formule ci-dessous résume la méthode de calcul:

Équation coefficient de Dice

Équation coefficient de Dice

Dans cette formule, X et Y sont des lots. Pour calculer le coefficient de Dice de deux chaines, il est possible de définir X et Y comme l'ensemble des bigrammes de chacune des chaines respectives. Un bigramme étant la réunion de deux lettres dans un mot.

Exemple d'utilisation

Prenons l'exemple de deux chaines "hello" et "allo", auquel ont souhaiterais déterminer le coefficient de Dice. Les bigrammes respectifs sont {he,el,ll,lo} (soit 4 bigrammes) et {al,ll,lo} (soit 3 bigrammes). L'intersection des deux lots sont les valeurs {ll,lo}. Ainsi, l'équation deviens:

s = 2*2 /(4+3) = 4/7 = 0,57

Grâce à cette valeur de 0,57 il est possible de déterminer que ces deux mots sont à peu près semblable. Plus la valeur est proche de 1 et plus les chaines sont similaire. Si le résultat est égal à 1, cela signifie que les deux chaines sont identiques.

Code PHP du coefficient de Dice

dg

01.<span style="color: #ff0000;"><?php</span>
02.<span style="color: #008000;">// Calcul du coefficient de Dice
04.// Licence: Libre de droit</span>
05.
06.<span style="color: #0000ff;">function</span> dice(<span style="color: #000080;">$str1</span>='', <span style="color: #000080;">$str2</span>='')
07.{
08.<span style="color: #000080;">$str1_length</span> = strlen(<span style="color: #000080;">$str1</span>);
09.<span style="color: #000080;">$str2_length</span> = strlen(<span style="color: #000080;">$str2</span>);
10.
11.<span style="color: #008000;">// Length of the string must not be equal to zero</span>
12.<span style="color: #0000ff;">if</span> ( (<span style="color: #000080;">$str1_length</span>==0) <span style="color: #0000ff;">OR</span> (<span style="color: #000080;">$str2_length</span>==0) )
13.<span style="color: #0000ff;">return</span> 0;
14.
15.<span style="color: #000080;">$ar1</span> = <span style="color: #0000ff;">array</span>();
16.<span style="color: #000080;">$ar2</span> = <span style="color: #0000ff;">array</span>();
17.<span style="color: #000080;">$intersection</span> = 0;
18.
19.<span style="color: #008000;">// find the pair of characters</span>
20.<span style="color: #0000ff;">for</span> (<span style="color: #000080;">$i</span>=0 ; <span style="color: #000080;">$i</span><(<span style="color: #000080;">$str1_length</span>-1) ; <span style="color: #000080;">$i</span>++)
21.<span style="color: #000080;">$ar1</span>[] = substr($str1, $i, 2);
22.
23.<span style="color: #0000ff;">for</span> (<span style="color: #000080;">$i</span>=0 ; <span style="color: #000080;">$i</span><(<span style="color: #000080;">$str2_length</span>-1) ; <span style="color: #000080;">$i</span>++)
24.<span style="color: #000080;">$ar2</span>[] = substr($str2, $i, 2);
25.
26.<span style="color: #008000;">// find the intersection between the two sets</span>
27.<span style="color: #0000ff;">foreach </span>(<span style="color: #000080;">$ar1</span> as <span style="color: #000080;">$pair1</span>) {
28.<span style="color: #0000ff;">foreach </span>(<span style="color: #000080;">$ar2</span> as <span style="color: #000080;">$pair2</span>) {
29.<span style="color: #0000ff;">if </span>(<span style="color: #000080;">$pair1</span> == <span style="color: #000080;">$pair2</span>)
30.$intersection++;
31.}
32.}
33.
34.$count_set = count($ar1) + count($ar2);
35.$dice = (2 * $intersection) / $count_set;
36.<span style="color: #0000ff;">return </span>$dice;
37.}
38.
39.<span style="color: #0000ff;">echo </span>dice('', 'cdefghi').'<br />'; <span style="color: #008000;">// test avec une chaîne nulle</span>
40.<span style="color: #0000ff;">echo </span>dice('abcdefg', '').'<br />'; <span style="color: #008000;">// test avec une chaîne nulle</span>
41.<span style="color: #0000ff;">echo </span>dice('abcdefg', 'cdefghi').'<br />';
42.<span style="color: #0000ff;">echo </span>dice('night', 'nacht').'<br />';
43.<span style="color: #ff0000;">?></span>

Inspiration:

http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Dice%27s_coefficient

Les crawlers de fichiers ont un intérêt pour lister rapidement toutes les pages ou images d'un site web. Cela permet d'automatiser la tache qui peut être longue et pénible s'il fallait le faire manuellement. Cet article présente un crawler qui liste tous type de fichier présent sur votre espace d'hébergement.

Présentation

Le script fournit sur cet article est à installer à la racine d'un site web, puis il suffit de l'ouvrir avec un navigateur web pour voir s'afficher la liste de tous les fichiers présent.

Sur le web il existe une multitude de crawler qui fouille sur une page web distante, mais il y a moins de projet (à ma connaissance) qui s'installe directement sur le serveur d'un site et qui liste les fichiers en interne du site. Cela possède l'avantage de pouvoir lister les pages et fichiers orphelins (qui ne sont pas utilisée ou liée au site web).

Type d'utilisation envisageable:

  • Chercher un dossier ou fichier
  • Générer automatiquement le sitemap du site ou le plan du site. Pas besoin de mettre à jour ce plan du site puisqu'il est généré automatiquement à chaque fois.
    Si ce script est adapté, il peut tout aussi bien générer un sitemap de pages web ou un sitemap d'images
  • En adaptant le script, il est possible d'ouvrir toutes les pages PHP d'un coup. Cela peut être utile pour faire des recherches ou modifications sur toutes les pages d'un site en même temps.
    Par exemple, ce script peut être utilisé si vous avez 500 pages, que vous modifier l'URL d'une de ces pages et que vous souhaitez mettre à jour toutes les pages web sur lesquels est présent l'ancienne URL

Télécharger

Le lien ci-dessous permet de télécharger le script. Une fois téléchargé, il suffit de le dézipper et de le placer à la racine de votre site.

(Fichier compressé. 2,01Ko)

J'ai l'intention dans les prochains jours de donner des exemples d'utilisation et des modifications possible de ce script.

Cet article propose une traduction française de la base de données IP-to-Country, permettant de relier une adresse IP à un pays. Cet article est la suite logique du précédent article publié sur ce blog, intitulé "Connaître le pays d’une adresse IP".

Présentation

Le souci majeur de la base de données de IP-to-Country, c'est qu'elle est exclusivement en anglais et que les noms de pays sont tous en majuscules (ce qui réduit la lisibilité et diminue le professionnalisme). Pour remédier à ces soucis j'ai créé une seconde base de données de traduction, permettant de réellement pouvoir utiliser IP-to-Country sur des sites web francophones.

Intérêt

Cette seconde base de données SQL est plus simple que la base de données de IP-to-Country pour la simple raison qu'elle recense les pays et non les adresses IP.

Sachant que IP-to-Country met à jours sa base de données assez régulièrement, ce serait une énorme perte de temps de traduire chaque nouvelles versions. Cette traduction à alors l'avantage d'être de bonne qualité à travers le temps. Pour mettre à jour les données, il faudra juste mettre à jour la base de données de IP-to-Country.

(Base de données SQL de 7,99Ko)

Exemple d'utilisation

Grâce à cette traduction, il est possible de créer un code PHP qui indique le pays d'origine d'un visiteur. Le tout étant bien évidemment en français. Le code ci-dessous utilise PHP 5 pour réaliser une telle application.

<?php
/*
Message de copyright obligatoire:
"This 'work' uses the IP-to-Country Database
 provided by WebHosting.Info (http://www.webhosting.info),
 available from http://ip-to-country.webhosting.info."
*/
// Connexion à la base de donnée (à adapter)
$link = mysqli_connect("localhost", "my_user", "my_password", "my_db");

// Fonction permettant de convertir l'adresse IP en un format numérique
function ipAdressNumber($dotted){
 $dotted = preg_split( "/[.]+/", $dotted);
 $ip = (double) ($dotted[0]*16777216)+($dotted[1]*65536)+($dotted[2]*256)+($dotted[3]);
 // IP Number = A x (256*256*256) + B x (256*256) + C x 256 + D
 return $ip;
}

$ip = $_SERVER['REMOTE_ADDR']; // Adresse IP du visiteur
echo 'Adresse IP: '.$ip.'<br />';
$ip = ipAdressNumber($ip); // Utilisation de la fonction pour convertir l'adresse IP

// Sélection des données dans la base de données. Si l'IP est comprise entre IP_FROM et IP_TO
$result = mysqli_query($link, "SELECT * FROM ip_to_country WHERE $ip BETWEEN IP_FROM AND IP_TO ") or die (mysqli_error($link));
$data = mysqli_fetch_array($result); // $data['COUNTRY_NAME'] contient le nom du pays en Anglais

// Utilisation de la seconde base de données pour traduire le nom du pays
$result2 = mysqli_query($link, "SELECT COUNTRY_NAME_FR FROM ip_pays_fr WHERE COUNTRY_NAME='".addslashes($data['COUNTRY_NAME'])."' ") or die (mysqli_error($link));
$data2 = mysqli_fetch_array($result2);
echo 'Pays: <strong>'.$data2['COUNTRY_NAME_FR'].'</strong>'; // Affichage du pays du visiteur (en français)

mysqli_close($link);
?>

Mot de la fin

Pour voir un exemple concret de l'application de cette base de données, je vous recommande de consulter la page "Mon adresse IP" du site InfoWebMaster. Cette dernière indique l'adresse IP de l'utilisateur ainsi que quelques petites informations supplémentaires.

Il est parfois utile de pouvoir localiser géographiquement une adresse IP. Cela peu par exemple être utile pour localiser un visiteur ou pour localiser des serveurs. Cet article présente deux tutoriaux PHP qui exploite une base de donnée pour associer une adresse IP à son pays.

Intérêt de localiser une adresse IP

Il y a plusieurs raisons qui motivent l'utilisation de la localisation de l'adresse IP. La liste ci-jointe n'est pas exhaustive mais inclue des exemples d'utilisations très probables:

  • Localiser le visiteur d'un site web. Avec cette information il est possible de personnaliser le contenu pour cet internaute (utiliser l'unité monétaire de son pays, suggérer une version du site dans la langue officielle de son pays ...).
  • Cibler l'audience d'une annonce en ligne.
  • Détection automatique d'un champ de formulaire (exemple: choix du pays pré-remplis).
  • Connaitre l'emplacement géographique du serveur d'un site web (exemple: peut être utile pour le référencement).
  • Filtrer les visiteurs selon leur localité.
  • Réduire le spam / Réduire les fraudes bancaires.

Base de données

Pour associer une adresse IP à un pays, il faut se baser sur une base de données qui répertorie des plages d'adresses IP à un pays. La base de données de IP-to-Country (anciennement ip-to-country.com) est relativement précise, complète et mise à jour régulièrement.

Pour réaliser les tutoriaux présents dans la suite de cet article, il est indispensable de télécharger la base de données suivante et de la mettre en place sur son espace d'hébergement.

(Base de données SQL de 5,23Mo)

Pays d'origine d'un visiteur

L'utilisation la plus populaire de cette base de données consiste à localiser le pays d'origine d'un visiteur. Le code PHP suivant fonctionne avec PHP 5.

<?php
/*
Message de copyright obligatoire:
"This 'work' uses the IP-to-Country Database
 provided by WebHosting.Info (http://www.webhosting.info),
 available from http://ip-to-country.webhosting.info."
*/
// Connexion à la base de donnée (à adapter)
$link = mysqli_connect("localhost", "my_user", "my_password", "my_db");

// Fonction permettant de convertir l'adresse IP en un format numérique
function ipAdressNumber($dotted){
 $dotted = preg_split( "/[.]+/", $dotted);
 $ip = (double) ($dotted[0]*16777216)+($dotted[1]*65536)+($dotted[2]*256)+($dotted[3]);
 // IP Number = A x (256*256*256) + B x (256*256) + C x 256 + D
 return $ip;
}

$ip = $_SERVER['REMOTE_ADDR']; // Adresse IP du visiteur
echo 'Adresse IP: '.$ip.'<br />';
$ip = ipAdressNumber($ip); // Utilisation de la fonction pour convertir l'adresse IP

// Sélection des données dans la base de données. Si l'IP est comprise entre IP_FROM et IP_TO
$result = mysqli_query($link, "SELECT * FROM ip_to_country WHERE $ip BETWEEN IP_FROM AND IP_TO ") or die (mysqli_error($link));
$data = mysqli_fetch_array($result);
echo 'Pays: <strong>'.$data['COUNTRY_NAME'].'</strong>'; // Affichage du pays du visiteur

mysqli_close($link);
?>

Localisation d'un serveur

Pour une application ou pour le référencement, il peut se révéler utile de savoir dans quel pays se situe le serveur d'un site web. En connaissant le nom de domaine d'un site, le code suivant retourne l'adresse IP du serveur. Cette adresse IP peut alors permettre de localiser le serveur grâce à la base de données.

<?php
/*
Message de copyright obligatoire:
"This 'work' uses the IP-to-Country Database
 provided by WebHosting.Info (http://www.webhosting.info),
 available from http://ip-to-country.webhosting.info."
*/
// Connexion à la base de donnée (à adapter)
$link = mysqli_connect("localhost", "my_user", "my_password", "my_db");

// Fonction permettant de convertir l'adresse IP en un format numérique
function ipAdressNumber($dotted){
 $dotted = preg_split( "/[.]+/", $dotted);
 $ip = (double) ($dotted[0]*16777216)+($dotted[1]*65536)+($dotted[2]*256)+($dotted[3]);
 // IP Number = A x (256*256*256) + B x (256*256) + C x 256 + D
 return $ip;
}

$ip = gethostbyname('www.infowebmaster.fr'); // Adresse IP du serveur du site www.infowebmaster.fr
echo 'Adresse IP: '.$ip.'<br />';
$ip = ipAdressNumber($ip); // Utilisation de la fonction pour convertir l'adresse IP

// Sélection des données dans la base de données. Si l'IP est comprise entre IP_FROM et IP_TO
$result = mysqli_query($link, "SELECT * FROM ip_to_country WHERE $ip BETWEEN IP_FROM AND IP_TO ") or die (mysqli_error($link));
$data = mysqli_fetch_array($result);
echo 'Pays: <strong>'.$data['COUNTRY_NAME'].'</strong>'; // Affichage du pays du serveur

mysqli_close($link);
?>

Il est possible de constater que ce code diffère très peu du code précédent qui consistait à déterminer le pays d'origine d'un visiteur.

Continuation

Cette base de données est très intéressante mais possède l'inconvénient d'être exclusivement en anglais. De plus, les pays sont écrits en majuscules, ce qui n'est pas très esthétiques et facile à lire. Il est possible d'améliorer ce travail en créant une base de données permettant de traduire le nom des pays.

Mise à jour 21 février 2010: Pour traduire le nom des pays en français, j'ai créé une base de données de traduction de IP-to-Country. Cela est idéal pour afficher convenablement le nom des pays aux visiteurs.

jan 31

API de Untiny

Untiny est un service gratuit permettant de connaitre l'adresse original d'une URL raccourci. Il est possible d'utiliser le service manuellement, cependant l'API de Untiny mise à la disposition des développeurs peut se révéler utile pour automatiser le processus (exemple: pour un client Twitter). Cet article didactique va expliquer comment utiliser l'API à travers une application AJAX.

Présentation

Logo de Untiny

Logo de Untiny

Cet article va présenter uniquement le code PHP pour utiliser l'API de Untiny. Le reste du code AJAX peut être trouvé sur un précédent article publié sur ce blog, intitulé "Dé-raccourcisseur d’url".

Les intérêts de ce nouveau code, par rapport à l'ancien article, sont multiples:

  • Le service Untiny est complet et performant. Ce service supporte de nombreux raccourcisseur d'URL.
  • Réduit la charge serveur. En utilisant un service externe, le script du serveur demande moins de ressources.
  • Certains hébergeurs désactivent l'option cURL. De ce fait, l'ancien code ne pouvait pas être utilisé par tous.

Prérequis

Pour comprendre le code PHP qui va suivre il faut avoir des connaissances en PHP. De plus, pour réaliser l'application AJAX il faut utiliser le reste du code qui a été présenté sur l'article "Dé-raccourcisseur d’url".

Code PHP

Le code PHP récupère dans un premier temps l'URL qu'il faut dé-raccourcir (exemple: http://tiny.pl/htk). La fonction api_untiny() s'occupe d'extraire l'URL présente dans le fichier XML de l'API.

<?php
$url=trim(strip_tags($_GET['url']));

function api_untiny($url)
{
 $urlAPI = 'http://untiny.me/api/1.0/extract/?url='.$url;

 if ($XML = @simplexml_load_file( $urlAPI )){
 return $XML->org_url; // Retourne l'URL entière
 }
}

$url_retour = api_untiny($url);
echo '<a href="'.$url_retour.'">'.$url_retour.'</a>'; // Affiche l'URL
?>

Télécharger l'application

Toute l'application AJAX peut être téléchargée grâce au lien ci-dessous. Mais il est également possible de ce servir uniquement d'une code PHP pour toute utilisation qui vous semble appropriée.

Pour utiliser l'application AJAX il faut télécharger le fichier zippé, le décompresser et l'envoyer sur un espace d'hébergement web.

Les flux RSS sont utiles pour suivre l'actualité d'un site web. Sachant qu'ils contiennent les informations liés aux articles d'un site, il peut se révéler pratique d'extraire le contenu d'un flux RSS pour en afficher une liste des articles avec un lien vers ceux-ci. L'objectif de cet article consiste à créer un simple code PHP qui sert d'agrégateur RSS.

ElePHPant

ElePHPant

Prérequis

Il faut avoir quelques notions avec le langage de programmation PHP et avoir un hébergement qui prend en compte PHP 5.

Code PHP

Le code PHP, qui ne fait que 8 lignes, est visible ci-dessous.

<?php
$url = "http://tonyarchambeau.com/blog/feed/"; /* insérer ici l'adresse du flux RSS de votre choix */
$rss = simplexml_load_file($url);
echo '<ul>';
foreach ($rss->channel->item as $item){
 $datetime = date_create($item->pubDate);
 $date = date_format($datetime, 'd M Y, H\hi');
 echo '<li><a href="'.$item->link.'">'.utf8_decode($item->title).'</a> ('.$date.')</li>';
}
echo '</ul>';
?>

Démonstration

Dans un premier temps ce code extrait les informations du flux RSS et convertit le document XML en un objet. Puis la boucle foreach permet d'exploiter les informations présentent dans les balises <item> (dans un flux RSS chaque article est inclus dans une balise <item>).

A l'intérieur de la boucle foreach, il y a il ne reste plus qu'à afficher les informations souhaités. Dans l'exemple ci-présent trois informations sont extraites: le lien vers l'article, le titre de l'article et la date de publication.

Personnaliser

Il est possible d'utiliser plus d'informations si celles-ci sont disponibles dans le flux RSS. Le tableau ci-dessous présente les métadonnées qui sont souvent inclussent dans un fil RSS avec une description.

Métadonnée Nécessité Description Exemple
<title> Obligatoire Titre de l'article [Twitter] Extraire les tweets en AJAX
<link> Recommandé Adresse internet lié à l'article. http://tonyarchambeau.com/blog/ajax/twitter-extraire-les-tweets-en-ajax-94/
<pubDate> Facultatif Date de publication de l'article. Tue, 12 Jan 2010 16:24:11 +0000
<description> Obligatoire Cette balise peut tout aussi bien contenir une brève description de l'actualité ou bien l'article en entier. Certains sites préfère dévoiler un extrait tandis que d'autres mettent l'intégralité des articles dans le flux RSS. Le choix peut se révéler très stratégique. <![CDATA[Le service Twitter est très pratique pour publier des courts messages. Il est entre autres utile pour la veille technologique. Parfois il se révèle intéressant de consulter les derniers messages d'un compte Twitter. Cet article présente un tutorial pour réaliser une petite application AJAX qui affiche les derniers messages d'un compte Twitter de votre choix. [...]]]>
<guid> Facultatif Définit un identifiant unique pour l'objet. http://tonyarchambeau.com/blog/?p=94
<author> Facultatif Contient l'adresse email de l'auteur. auteur@example.com
<category> Facultatif Définit la catégorie de l'article. <![CDATA[PHP]]>
<comments> Facultatif Définit l'adresse d'une page web sur laquelle se trouve les commentaires liés à l'article. http://tonyarchambeau.com/blog/ajax/twitter-extraire-les-tweets-en-ajax-94/#comments

Pour utiliser l'une ou l'autre des métadonnées dans le code présenté sur cette page web, il suffit de reprendre le nom de l'objet. Par exemple, pour inclure la description il suffit d'utiliser la variable "$item->description" à l'intérieur de la boucle foreach du code présent sur cette page.

Amélioration supplémentaire

Il est possible d'améliorer le code présenté sur cet article. Pour commencer il est possible de personnaliser l'aspect en modifiant le xHTML/CSS, puis le format de la date. Enfin, certaines fonctionnalité supplémentaires peuvent être ajoutées, tel que l'ajout d'autres métadonnées présenté dans le tableau.

L'outil de micro-blogging Twitter devient de plus en plus populaire. Grâce à l'API de ce dernier, il est possible de récupérer les derniers messages postés sur un compte Twitter. Une fois extrait, les messages (aussi appelé "tweets") peuvent être affiché sur un site web. Cet article détail la méthode pour le faire grâce à un script PHP.

Logo de Twitter

Logo de Twitter

Prérequis

Avant toutes choses, il faut savoir que le script fonctionne uniquement avec les versions de PHP supérieur à PHP 5.

Pour comprendre comment obtenir les messages d'un compte Twitter, il suffit de consulter la documentation de l'API Google et plus particulièrement la page "statuses user_timeline". Cette révèle qu'un document XML contient les informations des messages postés sur Twitter. A titre d'exemple, voici l'adresse du document XML de mon compte Twitter:

Il est possible de limiter le nombre de tweets inclus sur ce document XML. De ce fait, il est possible de limiter le nombre de message à afficher sur son site web. Pour cela, l'adresse devient:

La variable représente le nombre de messages qui seront extrait.

Présentation du script

Le script présent ci-dessous peut être personnalisé facilement:

<?php
function parse($text)
{
 $text = preg_replace('#http://[a-z0-9._/-]+#i', '<a href="$0">$0</a>', $text);
 $text = preg_replace('#@([a-z0-9_]+)#i', '@<a href="http://twitter.com/$1">$1</a>', $text);
 $text = preg_replace('# \#([a-z0-9_-]+)#i', ' #<a href="http://search.twitter.com/search?q=%23$1">$1</a>', $text);
 return $text;
}

$user = "TonyArchambeau"; /* Nom d'utilisateur sur Twitter */
$count = 8; /* Nombre de message à afficher */
$date_format = 'd M Y, H:i:s'; /* Format de la date à afficher */
$url = 'http://twitter.com/statuses/user_timeline/'.$user.'.xml?count='.$count;
$oXML = simplexml_load_file( $url );

echo '<ul>';
foreach( $oXML->status as $oStatus )
{
 $datetime = date_create($oStatus->created_at);
 $date = date_format($datetime, $date_format)."\n";
 echo '<li>'.parse(utf8_decode($oStatus->text));
 echo ' (<a href="http://twitter.com/'.$user.'/status/'.$oStatus->id.'">'.$date.'</a>)</li>';
}
echo '</ul>';
?>

Démonstration

Ce script affiche non seulement le message, mais également la date à laquelle le message à été posté et un lien vers le message.

Il est important de créer et d'utiliser la fonction "parse()" car par défaut Twitter utilise du texte brut. Aucun code HTML n'est présent. De ce fait, les liens ne sont pas cliquables.

Personnaliser

L'API Twitter possède plus d'information qui peuvent être utilisée, voici la liste des informations disponibles:

Variable Utilité Exemple
created_at Indique la date et l'heure de création du message. Tue Jan 05 13:43:11 +0000 2010
id Numéro d'identifiant du Tweet. Utile pour faire un lien vers le tweet (exemple: http://twitter.com/TonyArchambeau/status/7195965162). 7195965162
text Texte du message. [Note de Lecture] BrowseRank: Letting Web Users Vote for Page Importance: http://bit.ly/5BP3Uq
source Indique la source du message. Cela peut être un lien vers le service qui a généré le message (exemple: Twitterfeed, TweetDeck, Tweetie ...). web
truncated Indique si le message a été tronqué. La valeur est soit true ou false. false
in_reply_to_status_id Si le message est une réponse à un tweet, cette balise contient l'identifiant du tweet concerné. 7403141723
in_reply_to_user_id Si le message est une réponse à un tweet, cette balise contient l'identifiant de l'utilisateur qui a posté le premier tweet. 1940621
favorited Indique si le tweet est dans les favoris de l'utilisateur. La valeur est soit true ou false. false
in_reply_to_screen_name Si le message est une réponse à un tweet, cette balise contient le nom de l'utilisateur qui a posté le premier tweet. Matze_Jimdo
geo Localisation de l'utilisateur lorsqu'il a posté le tweet. La localisation est déterminée grâce à Georss. <georss:point>37.78029 -122.39697</georss:point>

Pour utiliser l'une ou l'autre des variables présente dans le tableau ci-dessus il suffit d'utiliser le code de cette façon: $oStatus->id (id peut être remplacé par n'importe quelle autre variable).

Démonstration

Une démonstration de ce script est disponible sur la page "Réseaux sociaux" de mon CV en ligne. Bien entendu, il est possible de personnaliser le script en modifiant le xHTML et le CSS. Cela permettant d'améliorer l'esthétique et d'intégrer plus facilement cet élément dans le design d'un site.