Jusqu'à présent, j'ai toujours peiné pour générer simplement et rapidement des graphiques en PHP. Il m'a toujours semblé que les API était horriblement compliquée pour faire au final bien peu de choses. Heureusement, Google arrive, encore une fois, à la rescousse et nous fournit GoogleCharts.
Présentation
Ce service, lancé en fin 2007, permet de construire toutes sortes de graphiques (histogramme, camembert...) en passant simplement un certain nombre de paramètres dans l'URL. On obtient en retour une image au format PNG.
Pour ma part, je suis très satisfait du résultat obtenu. Je dirais que ce service s'adresse tout particulièrement aux personnes cherchant à faire des graphes de tendance n'ayant pas des milliers de données à exploiter. Le résultat est rapide, relativement précis et plus complet qu'il n'y parait (vu la simplicité de l'API). Pas de publicité visible (si ce n'est l'URL de l'image) ni de bridage embêtant des fonctionnalités à l'exception d'une limite journalière d'utilisation fixée à 50,000 requêtes par jour. Attention, n'oubliez pas non plus qu'une URL possède de facto une taille limite. Vous ne pourrez donc pas transmettre des mégas de données.
Utilisation
Parmi les paramètres, on trouvera entre autres les éléments suivants:
- le type de graphique, cht, ayant pour valeur lc pour un graphique avec des lignes
- la taille du graphique, chs, exprimée en pixel (ex. 200x125)
- les données chd. A noter que les données peuvent être codées de trois facon différentes: les valeurs normalisées de 0 à 100 ainsi que deux techniques sommaires d'encodage (voir dernière partie).
- mais aussi, les couleurs, les légendes, les labels des axes ...
En rassemblant tous les morceaux présentés ci dessus, on obtient une URL ressemblant à:
http://chart.apis.google.com/chart?chxt=x,y,x&chxl=0:|Jan|July|Jan|July|Jan|2:|2005|2006|2007&cht=lc&chd=s:cEAELFJHHHKUju9uuXUc&chco=76A4FB&chs=200x125
Et voici, le graphique associé:
Classe PHP d'encodage des données
Sur le site de Google, vous trouverez l'implémentation javascript de la seconde méthode d'encodage. Je me permets de vous proposer un équivalent PHP sous forme de classe. Elle vous fera peut être gagner quelques minutes.
class GoogleChart {
public static $baseUrl = "http://chart.apis.google.com/chart";
public static $simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
public static function simpleEncode($values,$maxValue) {
$enc = self :: $simpleEncoding;
$encLen = strlen($enc) - 1;
$chartData = array();
$size = count($values);
for ($i = 0; $i < $size; $i++) {
$currentValue = $values[$i];
if (is_numeric( $currentValue ) && $currentValue >= 0) {
array_push( $chartData, $enc [ round( ($currentValue / $maxValue) * $encLen) ] );
} else {
array_push( $chartData, '_' );
}
}
return implode('',$chartData);
}// simpleEncode
}// GoogleChart
?>
Articles similaires
- PHP 6 & co.
- Livre blanc : industrialisation de PHP
- Installer Magento en français sur WAMP
- CakePHP : validation Ajax
- Commentez vos fichiers source automatiquement grâce aux keywords Subversion
- Lancez vos sites sur orbite avec Fredistrano 1.0
- CakePHP : sauts de ligne et maux de tête
- PHP, DOM et charset
- CakePHP 1.2 RC1
- Projets en cours, le point.



