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:
- http://www.xe.com/ucc/
- http://www.x-rates.com/calculator.html
- http://www.oanda.com/currency/converter/
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 …










