Kaip gauti oficialius valiutų kursus tam tikrai datai PHP. PHP scenarijus, skirtas atsisiųsti valiutų kursus Php gauti valiutų kursus
Daugelis iš jūsų ne kartą matėte, kad kai kurios svetainės rodomos Valiutų kursai... Žinoma, patys šių svetainių administratoriai kasdien jų nekeičia (tikiuosi). Jie atsisiunčia juos iš centrinio banko svetainės. Ir šiame straipsnyje pateiksiu kodą PHP scenarijus, skirtas valiutų kursų atsisiuntimui iš centrinio banko svetainės ir parodyti juos puslapyje.
Iškart pacituoju scenarijaus kodą:
$ data = data ("d / m / Y"); // Šios dienos data reikiamu formatu
$ nuoroda = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date"; // Nuoroda į XML failą su valiutų kursais
$ turinys = file_get_contents ($ nuoroda); // Atsisiųskite puslapio turinį
$ dom = naujas domDocument ("1.0", "cp1251"); // Sukurti DOM
$ dom-> loadXML ($ turinys); // Įkelkite XML dokumentą į DOM
$ root = $ dom-> documentElement; // Paimkite šakninį elementą
$ vaikai = $ root-> childNodes; // Gaukite vaikų sąrašą
$ duomenys = masyvas (); // Duomenų rinkinys
už ($ i = 0; $ i< $childs->ilgis; $ i ++) (
$ vaikai_naujas = $ vaikai-> elementas ($ i) -> vaikasNodes; // Paimkite vaikų mazgus
už ($ j = 0; $ j< $childs_new->ilgis; $ j ++) (
/ * Ieškome mus dominančių valiutų * /
$ el = $ vaikai_naujas-> elementas ($ j);
$ kodas = $ el-> nodeValue;
if (($ kodas == "USD") || ($ kodas == "EUR")) $ duomenys = $ vaikai_nauji; // Į masyvą įtraukite reikiamas valiutas
}
}
/ * Pereikite per masyvą su duomenimis apie valiutas * /
už ($ i = 0; $ i< count($data); $i++) {
$ sąrašas = $ duomenys [$ i];
už ($ j = 0; $ j< $list->ilgis; $ j ++) (
$ el = $ sąrašas-> elementas ($ j);
/ * Rodymo valiutų kursai * /
if ($ el-> nodeName == "Vardas") echo $ el-> nodeValue. "-";
elseif ($ el-> nodeName == "Vertė") echo $ el-> nodeValue. "rublių
";
}
}
?>
Bandžiau nuodugniai pakomentuoti kodą, todėl neturėtų kilti problemų su jo supratimu. Be to, norint suprasti, kodėl yra tiek daug ir kodėl tokie ciklai, taip pat iš kur atsiranda tam tikros sąlygos, primygtinai rekomenduoju vadovautis nuoroda iš kodo (tiesiog pakeiskite datą). Tada pamatysi XML dokumentas, ir jums bus daug lengviau suprasti, kodėl buvo parašytas būtent šis kodas.
Internete yra daug scenarijų, rodančių valiutų kursus. Bet man reikėjo dolerio ir euro kurso iš centrinio banko. Nusprendžiau paieškoti scenarijų, kurie bus rodomi tam tikros datos oficialūs valiutų kursai... Aptikau įdomų jQuery straipsnį apie lentelių rūšiavimą. Ten scenarijuje " PHP valiutų kursų analizatorius"XML dokumentas apiplėšiamas naudojant reguliariąsias išraiškas. Įprastos išraiškos aktyviai naudojamos kodo apiplėšime. Scenarijus veikia puikiai, bet turi savo ypatumus. Jis pateikia lentelę HTML formatu su daugybe valiutų. Man reikia iš lentelės su valiutų kursais suformuokite JSON masyvą... Šis masyvas yra kaip dešra. Taip programuotojai vadina tokį masyvą. Yra labai didelių dešrelių dideliais kiekiais)))
/ * * getArr () * valiutų kursai iš centrinio banko * XML dokumento analizė * * / funkcija getArr () ($ url = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=". data ("d / m / Y", strtotime ("+ 0 day")); $ cbr_xml = str_replace (masyvas ("\ n", "\ r", "\ t"), "", getContentPage ($ url )); if (preg_match_all ("~ (. *?) ~ i", $ cbr_xml, $ Valute)) (foreach ($ Vertinkite kaip $ duomenis) (preg_match ("~ (. *?) ~ i", $ duomenys) , $ CharCode); preg_match ("~ (. *?) ~ I", $ data, $ NumCode); $ arr [$ CharCode] ["numerio_kodas"]. = $ NumCode; preg_match ("~ (. *?) ~ i ", $ duomenys, $ nominalus); $ arr [$ CharCode] [" nominalus "] = $ nominalus; preg_match (" ~ (. *?) ~ i ", $ duomenys, $ pavadinimas); $ arr [$ CharCode] ["pavadinimas"]. = ToUtf8 ($ pavadinimas); preg_match ("~ (. *?) ~ I", $ duomenys, $ reikšmė); $ arr [$ CharCode] ["vertė"]. = $ reikšmė ; $ i ++;) return $ arr;)) funkcija getContentPage ($ url) ($ c = curl_init ($ url); curl_setopt ($ c, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ c, CURLOPT_FOLLOWLOCATION, 1); $ text = curl_exec ($ c); curl_close ($ c); grąžinti $ tekstą;) // Utf8 funkcija koduoti į Utf8 ($ str) (grąžinti mb_convert_encoding ($ str, "utf-8", "windows-1251"); ) $ arr = getArr (); echo json_encode ($ arr); / * ("EUR" :( "num_code": "978", "nominal": "1", "name": "\ u0415 \ u0432 \ u0440 \ u043e", "value": "63,6090"), "USD" :( "numerio_kodas": "840", "nominalus": "1", "vardas": "\ u0414 \ u043e \ u043b \ u043b \ u0430 \ u0440 \ u0421 \ u0421 \ e 1:", u040" 1 "58.0374")) * /
Tu gali peržiūrėti ir šiandienos valiutos kursą, ir vakarykštį kursą... Funkcija strtotime ("+ 0 diena") leidžia keisti laiką. Žinoma, kiek nulių nėra plius visi vienodai, kintamojo reikšmė nepasikeis. Palikau šią kodo dalį, kad galėčiau bet kada pakeisti laiką. Teko šiek tiek perrašyti masyvą. Kaip masyvo raktą naudojau $ CharCode kintamąjį. Mano dideliame masyve yra daug kitų masyvų, o konkretų masyvą galite pasiekti tik raktu (EUR). Mano atveju $ CharCode kintamasis įgyja šias reikšmes:
- AUD => Australijos doleris
- AZN => Azerbaidžano manatas
- GBP => Didžiosios Britanijos svaras sterlingų
- AMD => armėnų dramos
- BYR => Baltarusijos rubliai
- BGN => Bulgarijos lev
- BRL => Brazilijos realas
- HUF => Vengrijos forintas
- DKK => Danijos kronos
- USD => JAV doleris
- EUR => eurai
- INR => Indijos rupijos
- KZT => Kazachstano tenge
- CAD => Kanados doleris
- KGS => Kirgizų Som
- CNY => Kinijos juanis
- MDL => Moldovos lėja
- NOK => Norvegijos kronos
- PLN => Lenkijos zlotas
- RON => Nauja Rumunijos lėja
- XDR => SDR (specialiosios skolinimosi teisės)
- SGD => Singapūro doleris
- TJS => Tadžikistano somoni
- BANDYTI => Turkijos lira
- TMT => Naujasis Turkmėnijos manatas
- UZS => Uzbekistano suma
- UAH => Ukrainos grivina
- CZK => Čekijos kronos
- SEK => Švedijos kronos
- CHF => Šveicarijos frankas
- ZAR => Pietų Afrikos randas
- KRW => Korėjos Respublika laimėjo
- JPY => Japonijos jena
Mane domina tik USD ir EUR. Neištryniau iš
Laba diena mieli draugai. Kaip žinia, neseniai (vasario 11 d.) Kazachstane įvyko dar viena devalvacija, daugeliui į kišenes smogė šis „juodasis antradienis“, kaip daugelis jį vadino internete. Daugiau neigiamo straipsnio šia tema nerašysiu. Manau, kad tai nereikalinga. Kas padaryta tas padaryta. Tačiau tą nelemtą dieną mane labai papiktino faktas, kad niekur internete nepavyko sužinoti tikslaus dolerio, euro ar kitos užsienio valiutos kurso. Visos žinomos ir nežinomos (labas google) svetainės man nebuvo prieinamos. Galbūt kai kurios svetainės nukrito iš Kazachstano vartotojų ir nebuvo pasiruošusios tokiam vartotojų krūviui. Tačiau faktas išlieka, svetainės neveikė.
O vakare, kai aistros dėl devalvacijos ėmė blėsti ir nervai ėmė ramėti, nusprendžiau, kad reikia parašyti sau mažą valiutų kursų informatorių už savo jaukų mažą švarką. Kaip jau sakiau aukščiau, nenorėjau naudotis kitų svetainių valdikliais, nes šios svetainės „melavo“, kai visas kaznetas norėjo sužinoti prakeiktą valiutos kursą. :) Žemiau yra informatoriaus scenarijus php, manau, scenarijui nereikia jokių komentarų:
$ suma = "1";
$ nuo = "USD";
$ nuo = "EUR";
$ nuo = "RUB";
$ iki = "KZT";
$ i = 0;
o ($ i<= 2){
$ i ++;
$ gauti = sprogti (" ", $ gauti);
$ gauti = sprogti ("", $ gauti);
";
}
?>
Scenarijus universalus, galima keisti kintamąjį $ ikiį kitą valiutą, į kurią norite konvertuoti, taip pat padidinti arba pakeisti masyvus $ nuo [?], pridėkite kitas valiutas, tik nepamirškite pakeisti ciklo sąlygos, jei padidinote rodomų valiutų skaičių. Valiutų identifikatorių (pavadinimus) galite paimti paspaudę nuorodą - https://www.google.com/finance/converter... Kaip tikriausiai supratote, scenarijus išanalizuoja šį „Google“ puslapį ir paima jam reikalingą informaciją.
Kaip įdiegti šį scenarijų savo svetainėje? Jei turite "WordPress" variklį, turėsite įdiegti papildinį " PHP kodo valdiklis"ir pasirinkite šį valdiklį ir pridėkite ten visą kodą. Tai yra lengviausias būdas. Jei kyla problemų, visada galite išjungti įskiepį ir viskas grįš kaip buvę. Aš nesiūlau sudėtingų scenarijaus diegimo variantų. Galite parašyti man el. laišką ir aš pasistengsiu jums padėti. Tikiuosi, kad šis straipsnis jums buvo naudingas. :)
P.S. Aš šiek tiek optimizavau scenarijų (pridėjau talpyklą) ir daviau cron užduotį "atnaujinti scenarijų kartą per valandą. Mano versija išsaugo * .html failą ir aš jį rodau valdikliuose per ajax.
// Pradėti išvesties buferį
ob_start ();$ suma = "1";
$ nuo = "USD";
$ nuo = "EUR";
$ nuo = "RUB";
$ iki = "KZT";
$ i = 0;
o ($ i<= 2){
$ i ++;
$ gauti = file_get_contents ("https://www.google.com/finance/converter?a=$amount&from=$nuo [$i ]&to=$to");
$ gauti = sprogti (" ", $ gauti);
$ gauti = sprogti ("", $ gauti);
$ converted_amount = preg_replace ("/ [^ 0-9 \.] /", null, $ get);
$ konvertuota_suma = apvalus ($ konvertuota_suma, 2);
echo $ suma. "". $ iš [$ i]. "=". $ konvertuota_suma. "". $ į. "
";
}// užfiksuotos išvesties įrašymas į .html failą
file_put_contents ("currency.html", ob_get_contents ());
// Pabaikite buferį ir puslapio rodymą
ob_end_flush ();
?>
Išsaugokite scenarijų * .php formatu, patartina jį išsaugoti atskirame aplanke (pavyzdžiui, aplanke "skriptai", kad neužkimštumėte svetainės. Po to reikia įdėti užduotį karūnoje, kartą n valandų, kad pasiektumėte scenarijų. Ir vieną kartą per naršyklę rankiniu būdu peržiūrėkite scenarijų, kad būtų sukurtas html failas, kurį naudosime ateityje. Tada galite rodyti scenarijų valdikliuose per iframe:
funkcija show_temp ()
{
$ .ajax ((
url: "http://yoursite/scripts/currency.html",
talpykla: klaidinga,
sėkmė: funkcija (html) (
$ („# valiuta“). html (html);
}
});
}
$ (dokumentas) .ready (funkcija () (
rodyti_temp. ();
});
Šis išvesties būdas leis pakeisti šrifto dydį, šrifto spalvą ar pridėti bet kokių kitų efektų naudojant CSS (pakopinio stiliaus lapą).
Optimizuota scenarijaus versija, neapkraus serverio ir nuolat kreipsis į google "y. Talpyklą galite įdiegti kitaip, ir patikrinti pagal datą, kad nenaudotų karūnų. Bet asmeniškai aš pasirinkau paprastą. Aš darau nemėgstu būti protingam. :)
Sugedo jūsų skalbimo mašina? 1v.kz padės! - Skalbimo mašinų remontas Almatoje:
Ekspertai iš visų miesto dalių
Kai kuriais atvejais dirbant su komercija atsiranda būtinybė gauti naujausią informaciją apie konkrečios valiutos kursą. Centrinis bankas yra geriausias tokių duomenų šaltinis ir, atsižvelgiant į tai, kad jis teikia atvirą ir savalaikę informaciją apie valiutų kursus XML formatu, nuodėmė ja nepasinaudoti.
Ši funkcija atrodo taip:
Funkcija get_currency ($ valiutos_kodas, $ formatas) ($ data = data ("d / m / Y"); // Dabartinė data $ cache_time_out = "3600"; // Talpyklos veikimo laikas sekundėmis $ file_currency_cache = __DIR __. "/ XML_daily .asp "; if (! is_file ($ file_currency_cache) || filemtime ($ file_currency_cache)< (time() - $cache_time_out)) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); $out = curl_exec($ch); curl_close($ch); file_put_contents($file_currency_cache, $out); } $content_currency = simplexml_load_file($file_currency_cache); return number_format(str_replace(",", ".", $content_currency->xpath ("Vertė") -> Reikšmė), $ formatas); )
Jame yra šios eilutės:
$ data = data ("d / m / Y"); // Dabartinė data $ cache_time_out = "3600"; // Talpyklos veikimo laikas sekundėmis
atsakingas atitinkamai už datą (mūsų atveju ji yra dabartinė) ir talpyklos veikimo laiką. Kadangi Centrinis bankas ne taip dažnai atnaujina duomenis apie valiutas, neturėtumėte jo taip varginti kiekvieną kartą, kai jas naudojate. Galite pakeisti šių eilučių reikšmes (jei norite) į savo.
Funkcijos naudojimas yra toks:
Echo get_currency ("USD", 3);
čia" USD"Ar simbolinis valiutos kodas (mūsų atveju tai yra JAV doleris) ir" 3 “ – eilė simbolių po kablelio.
Leidžiamas valiutų sąrašas, pateiktas Rusijos Federacijos centrinio banko (šio rašymo metu) kaip "simbolinis valiutos kodas - nominalas ir pavadinimas":
AUD – 1 Australijos doleris AZN – 1 Azerbaidžano manatas GBP – 1 JK svaras sterlingų AMD – 100 Armėnijos dramų BYN – 1 Baltarusijos rublis BGN – 1 Bulgarijos levas BRL – 1 Brazilijos realas HUF – 100 Vengrijos forintų HKD – 10 Honkongo dolerių DKK – 10 DKK Danijos krona USD - 1 JAV doleris EUR - 1 euras INR - 100 Indijos rupijų KZT - 100 Kazachstano tenge CAD - 1 Kanados doleris KGS - 100 Kirgizijos somų CNY - 10 Kinijos juanių MDL - 10 Moldovos lėjų NOK - 10 Norvegijos kronų 1 Lenkijos PLN zlotas RON - 1 Rumunijos lėja XDR - 1 SDR (specialiosios skolinimosi teisės) SGD - 1 Singapūro doleris TJS - 10 Tadžikijos somoni TRY - 1 Turkijos lira TMT - 1 naujas Turkmėnijos manatas UZS - 10 000 Uzbekistano sumos UAH - 10 CZK hr - 10 Ukrainos grivinų SEK – 10 SEK CHF – 1 Šveicarijos frankas ZAR – 10 Pietų Afrikos randų KRW – 1 000 vonų Korėjos Respublika
Tikimės, kad funkcija ras savo vietą jūsų projekte. Jei turite klausimų arba kažkas atrodė nesuprantama, būtinai parašykite apie tai komentaruose po šiuo straipsniu.
Kai kuriais atvejais dirbant su komercija atsiranda būtinybė gauti naujausią informaciją apie konkrečios valiutos kursą. Centrinis bankas yra geriausias tokių duomenų šaltinis ir, atsižvelgiant į tai, kad jis teikia atvirą ir savalaikę informaciją apie valiutų kursus XML formatu, nuodėmė ja nepasinaudoti.
Ši funkcija atrodo taip:
Funkcija get_currency ($ valiutos_kodas, $ formatas) ($ data = data ("d / m / Y"); // Dabartinė data $ cache_time_out = "3600"; // Talpyklos veikimo laikas sekundėmis $ file_currency_cache = __DIR __. "/ XML_daily .asp "; if (! is_file ($ file_currency_cache) || filemtime ($ file_currency_cache)< (time() - $cache_time_out)) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); $out = curl_exec($ch); curl_close($ch); file_put_contents($file_currency_cache, $out); } $content_currency = simplexml_load_file($file_currency_cache); return number_format(str_replace(",", ".", $content_currency->xpath ("Vertė") -> Reikšmė), $ formatas); )
Jame yra šios eilutės:
$ data = data ("d / m / Y"); // Dabartinė data $ cache_time_out = "3600"; // Talpyklos veikimo laikas sekundėmis
atsakingas atitinkamai už datą (mūsų atveju ji yra dabartinė) ir talpyklos veikimo laiką. Kadangi Centrinis bankas ne taip dažnai atnaujina duomenis apie valiutas, neturėtumėte jo taip varginti kiekvieną kartą, kai jas naudojate. Galite pakeisti šių eilučių reikšmes (jei norite) į savo.
Funkcijos naudojimas yra toks:
Echo get_currency ("USD", 3);
čia" USD"Ar simbolinis valiutos kodas (mūsų atveju tai yra JAV doleris) ir" 3 “ – eilė simbolių po kablelio.
Leidžiamas valiutų sąrašas, pateiktas Rusijos Federacijos centrinio banko (šio rašymo metu) kaip "simbolinis valiutos kodas - nominalas ir pavadinimas":
AUD – 1 Australijos doleris AZN – 1 Azerbaidžano manatas GBP – 1 JK svaras sterlingų AMD – 100 Armėnijos dramų BYN – 1 Baltarusijos rublis BGN – 1 Bulgarijos levas BRL – 1 Brazilijos realas HUF – 100 Vengrijos forintų HKD – 10 Honkongo dolerių DKK – 10 DKK Danijos krona USD - 1 JAV doleris EUR - 1 euras INR - 100 Indijos rupijų KZT - 100 Kazachstano tenge CAD - 1 Kanados doleris KGS - 100 Kirgizijos somų CNY - 10 Kinijos juanių MDL - 10 Moldovos lėjų NOK - 10 Norvegijos kronų 1 Lenkijos PLN zlotas RON - 1 Rumunijos lėja XDR - 1 SDR (specialiosios skolinimosi teisės) SGD - 1 Singapūro doleris TJS - 10 Tadžikijos somoni TRY - 1 Turkijos lira TMT - 1 naujas Turkmėnijos manatas UZS - 10 000 Uzbekistano sumos UAH - 10 CZK hr - 10 Ukrainos grivinų SEK – 10 SEK CHF – 1 Šveicarijos frankas ZAR – 10 Pietų Afrikos randų KRW – 1 000 vonų Korėjos Respublika
Tikimės, kad funkcija ras savo vietą jūsų projekte. Jei turite klausimų arba kažkas atrodė nesuprantama, būtinai parašykite apie tai komentaruose po šiuo straipsniu.