Archive for Informatique

PHP, Conversion d’un montant d’une devise à un autre

// août 13th, 2010 // No Comments » // Informatique

Pour un projet en interne, un site “portail” malgache, Vectoris a dû trouver un moyen de convertir un montant donné d’une devise à un autre (plus précisément vers l’Ariary noté MGA). Cela paraissait simple au départ et parce-que je me suis dit qu’il devait exister des centaines de WebServices qui pourrait fournir les informations. L’implémentation était en lui même simple mais au moment où il fallait trouver le WebService, je me suis rendu compte que j’étais bien loin du compte.

Pour ce genre de fonctionnalité, le standard semble être WebserviceX, c’est d’ailleurs ce que j’ai mis dans mon Cahier de charges technique. Toutefois, il s’est avéré que le service ne proposait que la devise MGF (que Madagascar a quitté depuis des années pour le MGA), voir la liste des devises supportées, ici. Déjà, ça laisse entrevoir beaucoup de doutes sur la fiabilité du système. De plus, après utilisation, on a remarqué que la valeur retournée est toujours 0 …

Ensuite, on est pasé sur un service de Yahoo, APT, toujours en SOAP. Mais on a remarqué, que le WebService imposait trop de formalités et est trop gros (vraiment orienté finance) pour une aussi petite utilisation. Ça ne convenait pas.

Un peu égaré, j’ai découvert pas mal d’utilisateurs, sur internet, confrontés au même problème et étudiant des solutions disons “beuh” qui consistent a parser les pages web proposant le service:

Pas du tout séduisant. Et puis, tant qu’a “parser”, le faire sur le site de la banque centrale de Madagascar me semblait plus fiable ( du fait que ce site change très rarement, :) ). J’ai réservé cette solution comme dernière alternative.

Je suis ensuite tombé sur un autre petit service de Yahoo, toujours. Celui là permet d’effectuer des conversions qui balance des fichiers CSV et prends en paramètre une chaine de 2 symboles de devises concaténés. L’appel se fait de cette manière : http://quote.yahoo.com/d/quotes.csv?s=EURMGA=X&f=l1&e=.csv

C’est petit, rapide, pile poil ce qu’il fallait, par contre, impossible de changer la valeur (qui n’a d’ailleurs pas de paramètre) et de fichier de sortie. Mais ce n’est pas un problème, juste un file_get_contents et une petite multiplication et c’est parti :

function convertCurrency( $sCurSource, $sCurDest, $fAmount ){
 
	/*
	* Covert $fAmount from $sCurSource to $sCurDest with Yahoo finance
	*/
	$sURLToYahoo = 'http://quote.yahoo.com/d/quotes.csv?s='.$sCurSource.$sCurDest.'=X&f=l1&e=.csv';
	$sResult = file_get_contents( $sURLToYahoo );
 
	return (float)$sResult*$fAmount;
}
 
echo convertCurrency( "EUR", "MGA", 3 );

Si vous copiez-collez, je ne vous ai fait gagner que 3 secondes, le temps nécessaire pour écrire cette fonction. D’ailleurs, il faudra gérer un minimum d’exceptions, dedans. Par contre, remerciez Yahoo.
La question a se poser ensuite concerne la fiabilité des informations reçues et la licence du service … Mais Yahoo n’en parle nulle part …

Plugin Wordpress WP-Syntax, problème htmlspecialchars

// août 10th, 2010 // No Comments » // Informatique

Certains articles de mon blog souffrent depuis le début d’un problème sur les syntaxes de codes. Les caractères spéciaux sont remplacés par leur équivalent htmlentities. D’ailleurs, on n’a pas omis de me le faire remarquer dans les commentaires.

Faute de temps, je n’ai pu me pencher sur le problème qu’un an après la publication, je promets d’être plus actif sur ce blog à partir de maintenant. Pour vous prouver encore ma bonne foi, je vous apporte la correction au problème anodin (si anodin que je n’en ai aucun mérite, en fait …).

WP-Syntax est un plugin Wordpress qui permet d’afficher du code source de manière super lisible, c’est à dire correctement colorés comme sur les éditeurs, grâce à GeSHi, une librairie qui formate le style des codes et qui supporte, aujourd’hui, une centaine de langages. Super projet, soit-dit en passant!

Si vous avez un blog Wordpress et vous utilisez WP-Syntax (j’ai la version 0.9.6 qui intègre GeSHi 1.0.8.4 ), vous aurez probablement affaire a des caractères spéciaux qui s’affichent mal sur la sortie de votre article. Dans ce genre :

if(this["container"]._width > 1){

Et qui s’affiche :

if(this["container"]._width &lgt; 1){

Je suis d’abord allé voir comment WP-Syntax fonctionne, a voir dans le fichier wp-content/plugins/wp-syntax/wp-syntax.php, plus précisément dans la fonction wp_syntax_highlight :

if ($escaped == "true") $code = htmlspecialchars_decode($code);
$geshi = new GeSHi($code, $language);

Il suffit donc d’ajouter l’attribut escaped et de le définir à “true” pour corriger le problème. D’ailleurs, ça marche aussi en lisant de README.txt :

**Example 4: If your code already has html entities escaped, use `escaped="true"` as an option**

Mais étant donné que le WYSIWYG, dans l’admin de Wordpress se charge lui même de convertir (certains) caractères spéciaux en htmlentities (si vous éditez votre post en mode visuel). C’est une option dont vous aurez toujours besoin. De plus, ça vous évite d’avoir a modifier tous vos articles (dans mon cas, j’en ai pas tant que ça, je sais, je suis fainéant).

if ($escaped == "true") $code = htmlspecialchars_decode($code);
$geshi = new GeSHi($code, $language);

En :

$code = htmlspecialchars_decode($code);
$geshi = new GeSHi($code, $language);

L’option est bon à connaitre mais a mon avis, c’est plus simple de le mettre par défaut. De plus, quand vous ajoutez cette option sur le mode HTML, le WYSIWYG l’enlève si vous basculez sur le mode Visuel …