Feladat
Készítsen webes valutaváltó alkalmazást, mely az aktuális középárfolyamokkal dolgozik!
Az aktuális árfolyamokat egy
API
segítségével szerezheti be, melyet itt ér el:
A fenti URL az eredményt
JSON
(JavaScript Object Notation - JavaScript objektum jelölés) formátumban adja vissza, mely a
json_decode()
függvénnyel objektummá alakítva az alábbi tartalmat jelenti:
stdClass Object
(
[success] => 1
[timestamp] => 1728443475
[base] => EUR
[date] => 2024-10-09
[rates] => stdClass Object
(
[AED] => 4.028897
[AFN] => 74.557376
[ALL] => 98.719892
[AMD] => 424.3748
[ANG] => 1.978678
[AOA] => 996.5211
[ARS] => 1068.657652
[AUD] => 1.630151
[AWG] => 1.974398
[AZN] => 1.869162
[BAM] => 1.954789
[BBD] => 2.216803
[BDT] => 131.20217
[BGN] => 1.95562
[BHD] => 0.413418
[BIF] => 3185.749699
[BMD] => 1.096888
[BND] => 1.430669
[BOB] => 7.586974
[BRL] => 6.072596
[BSD] => 1.097907
[BTC] => 1.7626568E-5
[BTN] => 92.131049
[BWP] => 14.55188
[BYN] => 3.593159
[BYR] => 21499.003259
[BZD] => 2.213075
[CAD] => 1.498629
[CDF] => 3153.55267
[CHF] => 0.940565
[CLF] => 0.037116
[CLP] => 1024.153063
[CNY] => 7.748745
[CNH] => 7.752881
[COP] => 4641.020546
[CRC] => 569.066889
[CUC] => 1.096888
[CUP] => 29.06753
[CVE] => 110.206517
[CZK] => 25.324894
[DJF] => 195.514465
[DKK] => 7.457412
[DOP] => 66.041342
[DZD] => 145.919149
[EGP] => 53.312807
[ERN] => 16.453319
[ETB] => 133.288823
[EUR] => 1
[FJD] => 2.438107
[FKP] => 0.835345
[GBP] => 0.838297
[GEL] => 2.983592
[GGP] => 0.835345
[GHS] => 17.46873
[GIP] => 0.835345
[GMD] => 74.036899
[GNF] => 9475.453411
[GTQ] => 8.492764
[GYD] => 229.598161
[HKD] => 8.527859
[HNL] => 27.42181
[HRK] => 7.457753
[HTG] => 144.686625
[HUF] => 399.340679
[IDR] => 17111.451573
[ILS] => 4.130633
[IMP] => 0.835345
[INR] => 92.05067
[IQD] => 1436.923177
[IRR] => 46178.981512
[ISK] => 148.660902
[JEP] => 0.835345
[JMD] => 173.373255
[JOD] => 0.777365
[JPY] => 162.595533
[KES] => 141.65248
[KGS] => 93.302494
[KHR] => 4452.434297
[KMF] => 492.749519
[KPW] => 987.198507
[KRW] => 1472.144013
[KWD] => 0.336273
[KYD] => 0.915031
[KZT] => 535.13578
[LAK] => 24243.361359
[LBP] => 98322.516562
[LKR] => 321.689027
[LRD] => 211.910445
[LSL] => 19.173575
[LTL] => 3.238825
[LVL] => 0.663497
[LYD] => 5.251166
[MAD] => 10.757729
[MDL] => 19.324098
[MGA] => 5037.189179
[MKD] => 61.587879
[MMK] => 3562.649182
[MNT] => 3727.225108
[MOP] => 8.792414
[MRU] => 43.465557
[MUR] => 50.402532
[MVR] => 16.842699
[MWK] => 1903.820285
[MXN] => 21.241669
[MYR] => 4.697976
[MZN] => 70.036406
[NAD] => 19.173575
[NGN] => 1777.813901
[NIO] => 40.407268
[NOK] => 11.770178
[NPR] => 147.396719
[NZD] => 1.800967
[OMR] => 0.422304
[PAB] => 1.097927
[PEN] => 4.089911
[PGK] => 4.314533
[PHP] => 62.558264
[PKR] => 304.603438
[PLN] => 4.301329
[PYG] => 8559.379814
[QAR] => 3.993223
[RON] => 4.976469
[RSD] => 117.013811
[RUB] => 106.119554
[RWF] => 1498.663725
[SAR] => 4.118285
[SBD] => 9.103431
[SCR] => 14.931888
[SDG] => 659.786001
[SEK] => 11.337746
[SGD] => 1.429777
[SHP] => 0.835345
[SLE] => 25.06093
[SLL] => 23001.185627
[SOS] => 627.449874
[SRD] => 34.771852
[STD] => 22703.365365
[SVC] => 9.607077
[SYP] => 2755.963739
[SZL] => 19.166654
[THB] => 36.605321
[TJS] => 11.68226
[TMT] => 3.839108
[TND] => 3.367013
[TOP] => 2.569023
[TRY] => 37.593333
[TTD] => 7.443186
[TWD] => 35.281948
[TZS] => 2989.020179
[UAH] => 45.208961
[UGX] => 4034.858847
[USD] => 1.096888
[UYU] => 45.386536
[UZS] => 14040.164867
[VEF] => 3973534.119569
[VES] => 40.615307
[VND] => 27232.984868
[VUV] => 130.224738
[WST] => 3.068503
[XAF] => 655.585198
[XAG] => 0.035952
[XAU] => 0.000419
[XCD] => 2.964394
[XDR] => 0.816744
[XOF] => 655.603118
[XPF] => 119.331742
[YER] => 274.578444
[ZAR] => 19.312407
[ZMK] => 9873.307836
[ZMW] => 29.121086
[ZWL] => 353.197463
)
)
Ha az objektumot pl. egy
$adat nevű változóba írjuk, akkor ebből a forint aktuális árfolyama
a következők szerint adódik:
$adat->rates->HUF = 399.340679
Tekintsünk tehát egy rövid programot, mely csakugyan kiolvassa a forint aktuális árfolyamát:
<?
$f = "http://infojegyzet.hu/webszerkesztes/php/valuta/api/v1/arfolyam/" ;
$fp = fopen( $f , "r" ) ;
$json = fread( $fp , 8192 ) ;
fclose( $fp ) ;
$adat = json_decode( $json ) ;
print $adat->rates->HUF ;
?>
Értelemszerűen egyéb valuták forintban számolt árfolyamát matematikai műveletekkel
kaphatjuk meg. Pédául:
1 USA dollár = EUR/USD*HUF = 364.07 forint
Ezt felhasználva az Ön által készítendő valutaváltó alkalmazás az alábbi valuták között
tudjon átváltást végezni:
HUF, EUR, USD, CHF, GBP, CZK, HRK, PLN, JPY, BTC.
Tervezze meg, és készítse el a programhoz tartozó webes felületet, majd valósítsa meg a párbeszédes
felületet működtető programot! Ezen keresztül tegye lehetővé, hogy a felhasználó megadhasson egy
összeget tetszőleges devizában, és megjelölhesse, milyen devizára szeretne váltani.
Ingyenes, vagy fizetős?
Bár a különböző devizák árfolyamai napon belül is változnak, a fenti API-t kiszolgáltató
eredeti változat - az
api.exchangeratesapi.io
- értékei ehhez képest csak naponta egyszer frissülnek. Így az is előfordulhat,
hogy az aktuális árfolyamok helyett az előző munkanapi adatokat láthatjuk benne.
Ennek az az oka, hogy az API-k jelentős része előfizetés esetén érhető el korlátozás
nélkül. Az ingyenes változatú API-k pénzügyi területen jellemzően csak késleltetett
és korlátozott frissítésű adatokat kínálnak.
Gondolatok a megoldáshoz
A feladat megoldásához első lépésként nyilvánvalóan be kell olvasnunk az API eredményét,
mint szöveges fájlt egy PHP változóba. Ezt teszi a fent bemutatott kódrészlet. Ugyanakkor
a folytatás, vagyis a valutaváltás és eredménymegjelenítés már történhet szerveroldali, de
akár kliensoldali programmal is - már csak azért is, mert nemcsak a PHP, hanem a JavaScript
is jól támogatja a JSON adatok feldolgozását.
A PHP nyelv JSON feldolgozó (dekódoló) függvényének leírása az alábbi linken érhető el:
míg a JavaScripttel megvalósítható feldolgozásról a következő sorra kattintva
olvashatunk:
(Természetesen az API által visszaadott tartalom feldolgozható általános célú
szövegkezelő függvényekkel is, de mivel a JSON-t mindkét nyelv kiválóan támogatja,
a szövegfeldolgozásos módszer nemcsak kevéssé elegáns, hanem jóval munkásabb
megvalósítás is lenne.)
További feladatok
1.
Készítsen egy GIF képen grafikont, melyen egyben ábrázolja az euro és az amerikai dollár
előző 30 napi árfolyam-mozgását a forinttal szemben!
Ehhez használja ki a fentebb is tárgyalt API azon lehetségét, mely szerint az alábbi
példa mintájára korábbi adatok is lekérdezhetőek:
2.
Készítsen saját API-t, amely a kapott bemenő adatokból megoldja az átváltást, és eredeményül
az átváltott összeget szolgáltatja JSON-ben, például az alábbiak mintájára, ahol 1 bitcoint
váltunk forintra.
A lekérdezésként használt URL:
http://localhost/.../api/v1/change/?amount=1&from=BTC&to=HUF
Az eredményként olvasható válasz pedig:
{"date":"2024-10-09","amount":"1","from":"BTC","to":"HUF","result":22655611.63126}