Pour un projet professionnel, j’ai du ajouter une fonctionnalité pour proposer de convertir une devise vers une autre. Je vous livre ici le résultat de mes cogitations…
Les objectifs étaient :
- récupérer le taux actualisé à travers un service financier
- Permettre de convertir de n’importe quelle devise vers une autre
- l’internaute indiquera le montant à convertir
1) Pour récupérer le taux du jour, je me suis orienté vers « Yahoo! Finance Currency Conversion ».
En interrogeant l’url Yahoo! Finance currency conversion, vous recevrez en retour le taux de change qui vous intéresse. La donnée est renvoyée dans un format CSV. Prenons un exemple simple : pour obtenir le taux de change EUR vers VND (vietnam Dong), nous devrons formater l’url comme suit : http://quote.yahoo.com/d/quotes.csv?s=EURVND=X&f=l1&e=.csv
Notre premier script PHP (nommé yahoo_rate_exchange.php) se chargera de récupérer ce taux et retournera le montant dans la devise d’arrivé :
<?php function currency_conversion_amount ($amount_from, $currency_from, $currency_to) { $url = "http://quote.yahoo.com/d/quotes.csv?s=" . $currency_from . $currency_to . "=X" . "&f=l1&e=.csv"; $handle = fopen($url, "r"); $exchange_rate = fread($handle, 2000); fclose($handle ); $amount_to = $amount_from * $exchange_rate; echo $amount_to; } ?>
2) Ensuite, on passe en paramètre les 3 valeurs attendues par notre fonction et nous obtiendrons le montant du change dans la devise d’arrivé. Nommez le fichier amount_currency.php par exemple.
<?php include ("yahoo_rate_exchange.php"); $currency_from=$_REQUEST['currency_from']; $currency_to=$_REQUEST['currency_to']; $amount_from=$_REQUEST['amount_from']; currency_conversion_amount ($amount_from, $currency_from, $currency_to); ?>
Un petit test s’impose ! C’est très simple, dans votre navigateur, saisissez une URL de type http://(mon domaine)/yahoo_currency.php?amount_from=100¤cy_from=EUR¤cy_to=VND
En principe, vous devez voir s’afficher le montant converti dans la devise d’arrivé.
3) Reste à ajouter un petit formulaire pour demander à l’internaute les 3 informations suivantes : montant à convertir, devise de départ et devise d’arrive. Et pour ne pas être en reste, on « ajaxisera » le tout pour éviter de partir sur une page tierce et / ou de recharger la page web pour obtenir le résultat.
<script type = "text/javascript"> var XMLHttp; /* Creation de l'objet XML Http en fonction du navigateur */ if (navigator.appName == "Microsoft Internet Explorer") { XMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else { XMLHttp = new XMLHttpRequest(); } function get_currency() { /* variables - initialisation avec les valeurs saisies dans "currency_form" */ var currency_from = ""; var currency_to = ""; var value_amount = 1; /* montant à convertir */ var form_value_amount = document.getElementById('amount'); value_amount = form_value_amount.value; /* on recupere la devise de départ */ var sel_currency_from = document.getElementById('list_currency_from'); currency_from = sel_currency_from.value; /* on recupere la devise d'arrivé */ var sel_currency_to = document.getElementById('list_currency_to'); currency_to = sel_currency_to.value; /* Aucune devise de choisi, arrêter */ if ( currency_from != "" || currency_to != "") { /* On envoie la requete au serveur */ var url = "amount_currency.php?" + "amount_from=" + value_amount + "¤cy_from=" + currency_from + "¤cy_to=" + currency_to; XMLHttp.open("GET", url, true); XMLHttp.onreadystatechange = function() { if (XMLHttp.readyState == 4) { /* Quande le serveur a fini son travail, afficher le résultat */ var response = value_amount + " " + currency_from + " = " + XMLHttp.responseText + " " + currency_to; document.getElementById( 'result_area' ).innerHTML = response; } XMLHttp.send(null); } } else { alert ("Please select a currency") } } </script> <form name=currency_form> <table> <tr> <td> Montant : <INPUT TYPE="text" NAME="amount" id="amount" VALUE="1" SIZE=10> </td> </tr> <tr> <td> <p>Convertir de la devise :</p> <select name="list_currency_from" id="list_currency_from"> <OPTION VALUE="EUR" SELECTED>Euro EUR</OPTION> <OPTION VALUE="USD">United States Dollars USD</OPTION> <OPTION VALUE="GBP">United Kingdom Pounds GBP</OPTION> <OPTION VALUE="CAD">Canada Dollars CAD</OPTION> <OPTION VALUE="AUD">Australia Dollars AUD</OPTION> <OPTION VALUE="JPY">Japan Yen JPY</OPTION> <OPTION VALUE="INR">India Rupees INR</OPTION> <OPTION VALUE="NZD">New Zealand Dollars NZD</OPTION> <OPTION VALUE="CHF">Switzerland Francs CHF</OPTION> <OPTION VALUE="ZAR">South Africa Rand ZAR</OPTION> <OPTION VALUE="EUR">-- Top 85 Currencies: --</OPTION> <OPTION VALUE="AFA">Afghanistan Afghanis AFA</option> <OPTION VALUE="ALL">Albania Leke ALL</option> <OPTION VALUE="DZD">Algeria Dinars DZD</OPTION> <OPTION VALUE="USD">America (United States) Dollars USD</OPTION> <OPTION VALUE="ARS">Argentina Pesos ARS</OPTION> <OPTION VALUE="AUD">Australia Dollars AUD</OPTION> <OPTION VALUE="ATS">Austria Schillings ATS*</OPTION> <OPTION VALUE="BSD">Bahamas Dollars BSD</OPTION> <OPTION VALUE="BHD">Bahrain Dinars BHD</OPTION> <OPTION VALUE="BDT">Bangladesh Taka BDT</OPTION> <OPTION VALUE="BBD">Barbados Dollars BBD</OPTION> <OPTION VALUE="BEF">Belgium Francs BEF*</OPTION> <OPTION VALUE="BMD">Bermuda Dollars BMD</OPTION> <OPTION VALUE="BRL">Brazil Reais BRL</OPTION> <OPTION VALUE="BGN">Bulgaria Leva BGN</OPTION> <OPTION VALUE="CAD">Canada Dollars CAD</OPTION> <OPTION VALUE="XOF">CFA BCEAO Francs XOF</OPTION> <OPTION VALUE="XAF">CFA BEAC Francs XAF</OPTION> <OPTION VALUE="CLP">Chile Pesos CLP</OPTION> <OPTION VALUE="CNY">China Yuan Renminbi CNY</OPTION> <OPTION VALUE="COP">Colombia Pesos COP</OPTION> <OPTION VALUE="XPF">Comptoirs Français du Pacifique Francs</OPTION> <OPTION VALUE="CRC">Costa Rica Colones CRC</OPTION> <OPTION VALUE="HRK">Croatia Kuna HRK</OPTION> <OPTION VALUE="CYP">Cyprus Pounds CYP</OPTION> <OPTION VALUE="CZK">Czech Republic Koruny CZK</OPTION> <OPTION VALUE="DKK">Denmark Kroner DKK</OPTION> <OPTION VALUE="DEM">Deutsche (Germany) Marks DEM*</OPTION> <OPTION VALUE="DOP">Dominican Republic Pesos DOP</OPTION> <OPTION VALUE="NLG">Dutch (Netherlands) Guilders NLG*</OPTION> <OPTION VALUE="XCD">Eastern Caribbean Dollars XCD</OPTION> <OPTION VALUE="EGP">Egypt Pounds EGP</OPTION> <OPTION VALUE="EEK">Estonia Krooni EEK</OPTION> <OPTION VALUE="EUR">Euro EUR</OPTION> <OPTION VALUE="FJD">Fiji Dollars FJD</OPTION> <OPTION VALUE="FIM">Finland Markkaa FIM*</OPTION> <OPTION VALUE="FRF">France Francs FRF*</OPTION> <OPTION VALUE="DEM">Germany Deutsche Marks DEM*</OPTION> <OPTION VALUE="XAU">Gold Ounces XAU</OPTION> <OPTION VALUE="GRD">Greece Drachmae GRD*</OPTION> <OPTION VALUE="NLG">Holland (Netherlands) Guilders NLG*</OPTION> <OPTION VALUE="HKD">Hong Kong Dollars HKD</OPTION> <OPTION VALUE="HUF">Hungary Forint HUF</OPTION> <OPTION VALUE="ISK">Iceland Kronur ISK</OPTION> <OPTION VALUE="XDR">IMF Special Drawing Right XDR</OPTION> <OPTION VALUE="INR">India Rupees INR</OPTION> <OPTION VALUE="IDR">Indonesia Rupiahs IDR</OPTION> <OPTION VALUE="IRR">Iran Rials IRR</OPTION> <OPTION VALUE="IQD">Iraq Dinars IQD</OPTION> <OPTION VALUE="IEP">Ireland Pounds IEP*</OPTION> <OPTION VALUE="ILS">Israel New Shekels ILS</OPTION> <OPTION VALUE="ITL">Italy Lire ITL*</OPTION> <OPTION VALUE="JMD">Jamaica Dollars JMD</OPTION> <OPTION VALUE="JPY">Japan Yen JPY</OPTION> <OPTION VALUE="JOD">Jordan Dinars JOD</OPTION> <OPTION VALUE="KES">Kenya Shillings KES</OPTION> <OPTION VALUE="KRW">Korea (South) Won KRW</OPTION> <OPTION VALUE="KWD">Kuwait Dinars KWD</OPTION> <OPTION VALUE="LBP">Lebanon Pounds LBP</OPTION> <OPTION VALUE="LUF">Luxembourg Francs LUF*</OPTION> <OPTION VALUE="MYR">Malaysia Ringgits MYR</OPTION> <OPTION VALUE="MTL">Malta Liri MTL</OPTION> <OPTION VALUE="MUR">Mauritius Rupees MUR</OPTION> <OPTION VALUE="MXN">Mexico Pesos MXN</OPTION> <OPTION VALUE="MAD">Morocco Dirhams MAD</OPTION> <OPTION VALUE="NLG">Netherlands Guilders NLG*</OPTION> <OPTION VALUE="NZD">New Zealand Dollars NZD</OPTION> <OPTION VALUE="NOK">Norway Kroner NOK</OPTION> <OPTION VALUE="OMR">Oman Rials OMR</OPTION> <OPTION VALUE="PKR">Pakistan Rupees PKR</OPTION> <OPTION VALUE="XPD">Palladium Ounces XPD</OPTION> <OPTION VALUE="PEN">Peru Nuevos Soles PEN</OPTION> <OPTION VALUE="PHP">Philippines Pesos PHP</OPTION> <OPTION VALUE="XPT">Platinum Ounces XPT</OPTION> <OPTION VALUE="PLN">Poland Zlotych PLN</OPTION> <OPTION VALUE="PTE">Portugal Escudos PTE*</OPTION> <OPTION VALUE="QAR">Qatar Riyals QAR</OPTION> <OPTION VALUE="ROL">Romania Lei ROL</OPTION> <OPTION VALUE="RUB">Russia Rubles RUB</OPTION> <OPTION VALUE="SAR">Saudi Arabia Riyals SAR</OPTION> <OPTION VALUE="XAG">Silver Ounces XAG</OPTION> <OPTION VALUE="SGD">Singapore Dollars SGD</OPTION> <OPTION VALUE="SKK">Slovakia Koruny SKK</OPTION> <OPTION VALUE="SIT">Slovenia Tolars SIT</OPTION> <OPTION VALUE="ZAR">South Africa Rand ZAR</OPTION> <OPTION VALUE="KRW">South Korea Won KRW</OPTION> <OPTION VALUE="ESP">Spain Pesetas ESP*</OPTION> <OPTION VALUE="XDR">Special Drawing Rights (IMF) XDR</OPTION> <OPTION VALUE="LKR">Sri Lanka Rupees LKR</OPTION> <OPTION VALUE="SDD">Sudan Dinars SDD</OPTION> <OPTION VALUE="SEK">Sweden Kronor SEK</OPTION> <OPTION VALUE="CHF">Switzerland Francs CHF</OPTION> <OPTION VALUE="TWD">Taiwan New Dollars TWD</OPTION> <OPTION VALUE="THB">Thailand Baht THB</OPTION> <OPTION VALUE="TTD">Trinidad and Tobago Dollars TTD</OPTION> <OPTION VALUE="TND">Tunisia Dinars TND</OPTION> <OPTION VALUE="TRY">Turkey New Lira TRY</OPTION> <OPTION VALUE="TRL">Turkey Lira TRL*</OPTION> <OPTION VALUE="AED">United Arab Emirates Dirhams AED</OPTION> <OPTION VALUE="GBP">United Kingdom Pounds GBP</OPTION> <OPTION VALUE="USD">United States Dollars USD</OPTION> <OPTION VALUE="VEB">Venezuela Bolivares VEB</OPTION> <OPTION VALUE="VND">Vietnam Dong VND</OPTION> <OPTION VALUE="ZMK">Zambia Kwacha ZMK</OPTION> <OPTION VALUE="EUR">-- Special Units: --</OPTION> <OPTION VALUE="XAF">CFA BEAC Francs XAF</OPTION> <OPTION VALUE="XOF">CFA BCEAO Francs XOF</OPTION> <OPTION VALUE="XPF">Comptoirs Français du Pacifique Francs</OPTION> <OPTION VALUE="XCD">Eastern Caribbean Dollars XCD</OPTION> <OPTION VALUE="EUR">Euro EUR</OPTION> <OPTION VALUE="XDR">IMF Special Drawing Rights XDR</OPTION> <OPTION VALUE="XAU">-- Precious Metals: --</OPTION> <OPTION VALUE="XAG">Silver Ounces XDR</OPTION> <OPTION VALUE="XAU">Gold Ounces XAU</OPTION> <OPTION VALUE="XPT">Platinum Ounces XPT</OPTION> <OPTION VALUE="XPD">Palladium Ounces XPD</OPTION> </select> </td> </tr> <tr> <td> <p>Vers la devise</p> <select name="list_currency_to" id="list_currency_to"> <OPTION VALUE="USD">United States Dollars USD</OPTION> <OPTION VALUE="EUR">Euro EUR</OPTION> <OPTION VALUE="GBP">United Kingdom Pounds GBP</OPTION> <OPTION VALUE="CAD">Canada Dollars CAD</OPTION> <OPTION VALUE="AUD">Australia Dollars AUD</OPTION> <OPTION VALUE="JPY">Japan Yen JPY</OPTION> <OPTION VALUE="INR">India Rupees INR</OPTION> <OPTION VALUE="NZD">New Zealand Dollars NZD</OPTION> <OPTION VALUE="CHF">Switzerland Francs CHF</OPTION> <OPTION VALUE="ZAR">South Africa Rand ZAR</OPTION> <OPTION VALUE="USD">-- Top 85 Currencies: --</OPTION> <OPTION VALUE="AFA">Afghanistan Afghanis AFA</option> <OPTION VALUE="ALL">Albania Leke ALL</option> <OPTION VALUE="DZD">Algeria Dinars DZD</OPTION> <OPTION VALUE="USD">America (United States) Dollars USD</OPTION> <OPTION VALUE="ARS">Argentina Pesos ARS</OPTION> <OPTION VALUE="AUD">Australia Dollars AUD</OPTION> <OPTION VALUE="ATS">Austria Schillings ATS*</OPTION> <OPTION VALUE="BSD">Bahamas Dollars BSD</OPTION> <OPTION VALUE="BHD">Bahrain Dinars BHD</OPTION> <OPTION VALUE="BDT">Bangladesh Taka BDT</OPTION> <OPTION VALUE="BBD">Barbados Dollars BBD</OPTION> <OPTION VALUE="BEF">Belgium Francs BEF*</OPTION> <OPTION VALUE="BMD">Bermuda Dollars BMD</OPTION> <OPTION VALUE="BRL">Brazil Reais BRL</OPTION> <OPTION VALUE="BGN">Bulgaria Leva BGN</OPTION> <OPTION VALUE="CAD">Canada Dollars CAD</OPTION> <OPTION VALUE="XOF">CFA BCEAO Francs XOF</OPTION> <OPTION VALUE="XAF">CFA BEAC Francs XAF</OPTION> <OPTION VALUE="CLP">Chile Pesos CLP</OPTION> <OPTION VALUE="CNY">China Yuan Renminbi CNY</OPTION> <OPTION VALUE="COP">Colombia Pesos COP</OPTION> <OPTION VALUE="XPF">Comptoirs Français du Pacifique Francs</OPTION> <OPTION VALUE="CRC">Costa Rica Colones CRC</OPTION> <OPTION VALUE="HRK">Croatia Kuna HRK</OPTION> <OPTION VALUE="CYP">Cyprus Pounds CYP</OPTION> <OPTION VALUE="CZK">Czech Republic Koruny CZK</OPTION> <OPTION VALUE="DKK">Denmark Kroner DKK</OPTION> <OPTION VALUE="DEM">Deutsche (Germany) Marks DEM*</OPTION> <OPTION VALUE="DOP">Dominican Republic Pesos DOP</OPTION> <OPTION VALUE="NLG">Dutch (Netherlands) Guilders NLG*</OPTION> <OPTION VALUE="XCD">Eastern Caribbean Dollars XCD</OPTION> <OPTION VALUE="EGP">Egypt Pounds EGP</OPTION> <OPTION VALUE="EEK">Estonia Krooni EEK</OPTION> <OPTION VALUE="EUR">Euro EUR</OPTION> <OPTION VALUE="FJD">Fiji Dollars FJD</OPTION> <OPTION VALUE="FIM">Finland Markkaa FIM*</OPTION> <OPTION VALUE="FRF">France Francs FRF*</OPTION> <OPTION VALUE="DEM">Germany Deutsche Marks DEM*</OPTION> <OPTION VALUE="XAU">Gold Ounces XAU</OPTION> <OPTION VALUE="GRD">Greece Drachmae GRD*</OPTION> <OPTION VALUE="NLG">Holland (Netherlands) Guilders NLG*</OPTION> <OPTION VALUE="HKD">Hong Kong Dollars HKD</OPTION> <OPTION VALUE="HUF">Hungary Forint HUF</OPTION> <OPTION VALUE="ISK">Iceland Kronur ISK</OPTION> <OPTION VALUE="XDR">IMF Special Drawing Right XDR</OPTION> <OPTION VALUE="INR">India Rupees INR</OPTION> <OPTION VALUE="IDR">Indonesia Rupiahs IDR</OPTION> <OPTION VALUE="IRR">Iran Rials IRR</OPTION> <OPTION VALUE="IQD">Iraq Dinars IQD</OPTION> <OPTION VALUE="IEP">Ireland Pounds IEP*</OPTION> <OPTION VALUE="ILS">Israel New Shekels ILS</OPTION> <OPTION VALUE="ITL">Italy Lire ITL*</OPTION> <OPTION VALUE="JMD">Jamaica Dollars JMD</OPTION> <OPTION VALUE="JPY">Japan Yen JPY</OPTION> <OPTION VALUE="JOD">Jordan Dinars JOD</OPTION> <OPTION VALUE="KES">Kenya Shillings KES</OPTION> <OPTION VALUE="KRW">Korea (South) Won KRW</OPTION> <OPTION VALUE="KWD">Kuwait Dinars KWD</OPTION> <OPTION VALUE="LBP">Lebanon Pounds LBP</OPTION> <OPTION VALUE="LUF">Luxembourg Francs LUF*</OPTION> <OPTION VALUE="MYR">Malaysia Ringgits MYR</OPTION> <OPTION VALUE="MTL">Malta Liri MTL</OPTION> <OPTION VALUE="MUR">Mauritius Rupees MUR</OPTION> <OPTION VALUE="MXN">Mexico Pesos MXN</OPTION> <OPTION VALUE="MAD">Morocco Dirhams MAD</OPTION> <OPTION VALUE="NLG">Netherlands Guilders NLG*</OPTION> <OPTION VALUE="NZD">New Zealand Dollars NZD</OPTION> <OPTION VALUE="NOK">Norway Kroner NOK</OPTION> <OPTION VALUE="OMR">Oman Rials OMR</OPTION> <OPTION VALUE="PKR">Pakistan Rupees PKR</OPTION> <OPTION VALUE="XPD">Palladium Ounces XPD</OPTION> <OPTION VALUE="PEN">Peru Nuevos Soles PEN</OPTION> <OPTION VALUE="PHP">Philippines Pesos PHP</OPTION> <OPTION VALUE="XPT">Platinum Ounces XPT</OPTION> <OPTION VALUE="PLN">Poland Zlotych PLN</OPTION> <OPTION VALUE="PTE">Portugal Escudos PTE*</OPTION> <OPTION VALUE="QAR">Qatar Riyals QAR</OPTION> <OPTION VALUE="ROL">Romania Lei ROL</OPTION> <OPTION VALUE="RUB">Russia Rubles RUB</OPTION> <OPTION VALUE="SAR">Saudi Arabia Riyals SAR</OPTION> <OPTION VALUE="XAG">Silver Ounces XAG</OPTION> <OPTION VALUE="SGD">Singapore Dollars SGD</OPTION> <OPTION VALUE="SKK">Slovakia Koruny SKK</OPTION> <OPTION VALUE="SIT">Slovenia Tolars SIT</OPTION> <OPTION VALUE="ZAR">South Africa Rand ZAR</OPTION> <OPTION VALUE="KRW">South Korea Won KRW</OPTION> <OPTION VALUE="ESP">Spain Pesetas ESP*</OPTION> <OPTION VALUE="XDR">Special Drawing Rights (IMF) XDR</OPTION> <OPTION VALUE="LKR">Sri Lanka Rupees LKR</OPTION> <OPTION VALUE="SDD">Sudan Dinars SDD</OPTION> <OPTION VALUE="SEK">Sweden Kronor SEK</OPTION> <OPTION VALUE="CHF">Switzerland Francs CHF</OPTION> <OPTION VALUE="TWD">Taiwan New Dollars TWD</OPTION> <OPTION VALUE="THB">Thailand Baht THB</OPTION> <OPTION VALUE="TTD">Trinidad and Tobago Dollars TTD</OPTION> <OPTION VALUE="TND">Tunisia Dinars TND</OPTION> <OPTION VALUE="TRY">Turkey New Lira TRY</OPTION> <OPTION VALUE="TRL">Turkey Lira TRL*</OPTION> <OPTION VALUE="AED">United Arab Emirates Dirhams AED</OPTION> <OPTION VALUE="GBP">United Kingdom Pounds GBP</OPTION> <OPTION VALUE="USD">United States Dollars USD</OPTION> <OPTION VALUE="VEB">Venezuela Bolivares VEB</OPTION> <OPTION VALUE="VND" SELECTED>Vietnam Dong VND</OPTION> <OPTION VALUE="ZMK">Zambia Kwacha ZMK</OPTION> <OPTION VALUE="EUR">-- Special Units: --</OPTION> <OPTION VALUE="XAF">CFA BEAC Francs XAF</OPTION> <OPTION VALUE="XOF">CFA BCEAO Francs XOF</OPTION> <OPTION VALUE="XPF">Comptoirs Français du Pacifique Francs</OPTION> <OPTION VALUE="XCD">Eastern Caribbean Dollars XCD</OPTION> <OPTION VALUE="EUR">Euro EUR</OPTION> <OPTION VALUE="XDR">IMF Special Drawing Rights XDR</OPTION> <OPTION VALUE="XAU">-- Precious Metals: --</OPTION> <OPTION VALUE="XAG">Silver Ounces XDR</OPTION> <OPTION VALUE="XAU">Gold Ounces XAU</OPTION> <OPTION VALUE="XPT">Platinum Ounces XPT</OPTION> <OPTION VALUE="XPD">Palladium Ounces XPD</OPTION> </select> </td> </tr> <tr> <td> <input type=button value="Convertir" onclick = "javascript:get_currency();"> </td> </tr> <tr> <td> <p>Résultat de la conversion : </p> <div id=result_area></div> </td> </tr> </table> </form>
Et voila… mais tout n’est pas parfait… il reste un dysfonctionnement pour lequel je n’ai pas trouvé de solution : il faut cliquer deux fois sur le bouton « Convertir » pour obtenir le résultat… si quelqu’un a une idée, je suis preneur…
Dans le cadre des améliorations, une petite icone animée pour faire patienter l’internaute serait du plus bel effet… franciser les devises… arrondir les décimales à deux chiffres après la virgule… un petit plugin wordpress… bref, les bases sont posées… à vous de jouer maintenant…
Site Internet : Free Tools
Licence : Gratuit