Logo WURFLWURFL, pour Wireless Universal Resource File, est un fichier de configuration XML contenant les caractéristiques de nombreux appareils mobiles. Il a été mis au point par un développeur italien nommé Luc Passini. WURFL est une énorme bibliothèque qui touche un nombre important d’appareils, de l’ancestral Nokia 3310 au Samsung Galaxy S. La liste de toutes les marques est disponible à cette adresse.
Le but ultime de ce projet Open Source est de collecter le maximum d’information sur l’ensemble des mobiles existants ou qui sont supposés exister. Bien sûr WURFL n’est pas là que pour détecter les mobiles, car ceci n’importe quel navigateur web ou presque sait le faire.

Il suffirait alors après détection, comme en PHP, de faire un test sur le type d’agent détecter par le navigateur avec la variable $_SERVER[‘HTTP_USER_AGENT’].

1 2 3 4 5 6 7 8 9 10 11 
<?php    if (stristr($_SERVER['HTTP_USER_AGENT'], "Android")    || strpos($_SERVER['HTTP_USER_AGENT'], "iPod")    || strpos($_SERVER['HTTP_USER_AGENT'], "iPhone") )    {       // Mettre ici du code php optimisé pour les mobiles    }    else {      // Et ici du code php classique...Pas forcement optimisé :)    } ?>

Mais WURFL lui va encore plus loin, plus qu’il permet aussi d’avoir des caractéristiques propres à l’appareil en question, comme le modèle, le système d’exploitation ou même le nom marketing. On peut ainsi, au prix de quelques heures de coding en plus, customiser son site à l’extrême ou même recueillir des données statistiques très précises sur des mobinautes.

De nombreux projets utilisent déjà cet outil. Le composant Mobile Joomla! par exemple s’en sert pour détecter les mobiles. Tout comme son confrère DeviceAtlas, WURFL un outil qui a fait ses preuves, et qui se manipulent assez facilement. Il existe une librairie pour la plupart des langages de programmation connus comme PHP, Java, Python, Ruby ou Perl. Tera-WURFL est une librairie écrite en PHP et qui utilise une base de données de type MySQL/MSSQL/MongoDB. C’est donc dans ce langage de programmation que se font les interactions avec les classes proposées. Voyons donc comment ça marche.

Installation de Tera-WURFL

Installer un système LAMP (Linux Apache MySQL PHP)

Comme nous l’avons déjà dit, WURFL est écrit en PHP (Objet), et il faut donc disposer d’un serveur web équipé de PHP 5, disponible sur à peu près tous les hébergeurs qui proposent souvent un système LAMP (Linux Apache MySQL PHP). Pour cet tutoriel nous allons utiliser un serveur local basé sur le logiciel gratuit XAMPP qui s’installe et se configure très facilement depuis le panneau de configuration. Il vous suffit ensuite de démarrer le serveur Apache et le serveur MySQL, puis d’aller à la page http://localhost pour vérifier que tout s’est bien passé.

XAMPP Panneau de configuration

Les dossiers web se trouvent dans le répertoire htdocs, qui sauf cas spécifique se trouve à l’adresse C:\xampp\htdocs. Dans ce dossier htdocs il suffit de créer un répertoire que vous appellerez terawurfl par exemple. On a donc le répertoire C:\xampp\htdocs\terawurfl (Je sais c’est un peu verbeux, et n’hésitez pas à passer à la suite si tout cela vous est beaucoup trop familier, je comprendrai :).

Une fois le serveur web mis en place, il vous faut télécharger la librairie, et la décompresser dans votre répertoire terawurfl (La version 2.1.4, toute dernière pendant la rédaction de l’article, et que je m’apprête à utiliser est disponible à cette adresse).

Arborescence du projet Tera-WURFL

Éditer le fichier de configuration de Tera-WURFL

C’est l’étape qui suit, mais avant il faut créer un nouvelle base de données, toujours grâce à XAMPP dans notre cas, mais il peut s’agir d’une base en production chez votre hébergeur. Sous XAMPP vous devez simplement vous rendre dans PHPMyAdmin, à cette adresse http://localhost/phpmyadmin/ et créer un nouvel utilisateur, nommons-le wurf, dont le mot passe est wurfl-demo et dont on associe une table nommée wurfl.

Renommez le fichier TeraWurflConfig.php.example en TeraWurflConfig.php puis éditez ce dernier avec un super éditeur comme Notepad++ sous Windows, ou gedit sous Linux, bref éditez-le et remplacer les lignes suivantes (J’ai juste remplacer les valeurs par défaut par celles que nous venons de créer, histoire de garder de bons réflexes).

Fichier de configuration de Tera-WURFL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
public static $DB_HOST = "localhost"; /**  * Database User  * For MongoDB, this may be blank if authentication is not used  * @var String  */ public static $DB_USER = "wurfl"; /**  * Database Password  * For MongoDB, this may be blank if authentication is not used  * @var String  */ public static $DB_PASS = 'wurfl-demo'; /**  * Database Name / Schema Name  * @var String  */ public static $DB_SCHEMA = "wurfl"; /**  * Database Connector (MySQL4, MySQL5, MSSQL2005, MongoDB)  * @var String  */ public static $DB_CONNECTOR = "MySQL5"; /**  * Prefix used for all database tables  * @var String  */ public static $TABLE_PREFIX = "TeraWurfl";

C’est tout ce qu’il faut pour la configuration. Nous pouvons donc passer à l’installation.Il faut d’abord vérifier la configuration du serveur en allant à cette adresse http://localhost/terawurfl/admin/install.php, et si tout est OK, remontez d’un cran dans le dossier admin http://localhost/terawurfl/admin et à partir de là on a le choix entre une installation à partir du fichier local ou alors depuis le repository. Le plus souvent on choisira le fichier local, mais pour être à jour le mieux sera souvent de choisir le fichier distant. Installation de Tera-WURFL depuis l'adminstration

Cliquer sur « Update database from local file ». Ceci lancera l’installation et si tout s’est bien passé, vous devriez voir une page qui ressemble à ça :

Mise à jour réussie de la base de données

Vous venez donc d’installer Tera-WURFL. Passons à son utilisation.

Utilisation de la librairie Tera-WURFL

La première chose à faire est de créer une nouvelle instance de la classe Tera-WURFL. Une fois cette instance créée, on peut l’utiliser pour détecter la présence d’un appareil mobile :

Utilisation basique
1 2 3 4 5 6 7 8 9 10 11 
<?php require_once './TeraWurfl.php'; $wurflObj = new TeraWurfl(); $wurflObj->getDeviceCapabilitiesFromAgent();   // On verifie qu'on a affaire à un mobile et on fait la bonne redirection if($wurflObj->getDeviceCapability("is_wireless_device")){     header("Location: http://monsite_mobile.mobi/"); } else {  
       header("Location: http://monsite_normal.com/");

} ?>

On peut encore aller plus loin, en assignant une image à l’appareil détectée. Il faut pour cela utiliser la classe

TeraWurflDeviceImage. Vous devez tout d’abord télécharger le dossier d’images sur le site de la librairie et mettez-le dans le repertoire terawurfl par exemple. Il suffit alors de faire ça :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
<?php require_once 'TeraWurfl.php'; require_once 'TeraWurflUtils/TeraWurflDeviceImage.php'; $wurflObj = new TeraWurfl(); $wurflObj->getDeviceCapabilitiesFromAgent(); $image = new TeraWurflDeviceImage($wurflObj); /**  * Le répertoire d’accès des images depuis internet  * Ex. http://mondomaine.com/terawurfl/device_pix/   */ $image->setBaseURL('/terawurfl/device_pix/'); /**  * Localisation (physique) du dossier dans le serveur  */ $image->setImagesDirectory('/terawurfl/device_pix/'); /**  * URL de l'image (ex. '/terawurfl/device_pix/blackberry8310_ver1.gif')  */ $image_src = $image->getImage(); if($image_src){     // Si une image existe pour l'appareil     $image_html = sprintf('<img src="%s" border="0"/>'</span><span style="color: #339933;">,</span><span style="color: #000088;">$image_src</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></span> <span style="vertical-align: top;">    <a href="http://www.php.net/echo"><span style="color: #990000;">echo</span> <span style="color: #000088;">$image_html</span><span style="color: #339933;">;</span></span> <span style="vertical-align: top;"><span style="color: #009900;">}</span><span style="color: #b1b100;">else</span><span style="color: #009900;" _mce_style="color: #009900;">{</span></span> <span style="vertical-align: top;" _mce_style="vertical-align: top;">    <span style="color: #666666; font-style: italic;" _mce_style="color: #666666; font-style: italic;">// S'il n y a aucune</span></span> <span style="vertical-align: top;" _mce_style="vertical-align: top;">    echo "Aucune image disponible"; } ?>

Bon on aura rarement l’occasion de faire ça, mais ça montre en tout cas la richesse de Tera-WURFL.

Tera-WURFL Detection d'imageVoir plus de résultats à cette adresse

Principe de fonctionnement

Lorsqu’un navigateur (mobile ou normal) visite une page web, il renvoie ce que l’on appelle un User-Agent, qui identifie le type d’appareil embarquant le navigateur. Cependant, comme on l’a dit un peu plus haut, ces informations sont très limitées, et c’est là qu’intervient WURFL, qui en plus des données de base renvoyées par le navigateur, vous permet de connaitre des caractéristiques spécifiques à l’appareil. On ainsi des détails comme la prise en charge de streaming vidéo ou encore le support de la technologie Java ME. Bref tout ce qui existe ou presque sur l’appareil.

Le User-agent est évalué par Tera-WURFL à partir d’un filtre utilisant ce que l’on nomme la distance de Levenshtein, qui mesure la similarité entre deux chaines de caractères, un peu comme la distance de Hamming utilisée dans les codes correcteurs en Télécommunications ou en traitement du signal. A chaque matching de caractère sur un groupe d’appareils, on incrémente jusqu’à trouver dans la base de données l’appareil le plus identique au User-Agent. Ainsi, si l’on a affaire à un iPhone 3GS, l’algorithme de détection continuera même après avoir trouvé les caractéristiques du simple iPhone 3G, car il considère que l’iPhone 3GS possède plus de caractéristiques. Une fois le matching complet, un tableau de caractéristiques est construit, et les caractéristiques de l’appareil sont mises en cache, afin de permettre une détection plus rapide lors d’une visite ultérieure.

Tera-WURFL est une bibliothèque vraiment intéressante. Cependant sa prise en charge en production requiert pas mal d’espace en base de données. Un 10 Mo de BDD chez OVH ne suffira pas par exemple, puisqu’il fait actuellement 27,4 Mo, et il faudrait donc souscrire à une offre proposant au moins 50 Mo. Mais ce n’est pas un si gros problème car il est plus ou moins facile de trouver une base de données suffisamment large à très bon prix. Il suffit ensuite de l’installer sur un serveur applicatif distant, et l’utiliser dans plusieurs projets différents sans avoir à l’installer à chaque fois.

/terawurfl

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.