Hvordan få offisielle valutakurser for en gitt dato i PHP. PHP-skript for å laste ned valutakurser Php hente valutakurser
Mange av dere har gjentatte ganger sett at noen nettsteder vises valutakurser. Selvfølgelig endrer ikke administratorene av disse sidene selv dem daglig (håper jeg). De laster dem ned fra sentralbankens nettsted. Og i denne artikkelen vil jeg gi koden PHP-skript for nedlasting av valutakurser fra sentralbankens nettsted og vise dem på siden.
Her er skriptkoden med en gang:
$dato = dato("d/m/Y"); // Dagens dato i ønsket format
$link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date"; // Link til XML-fil med valutakurser
$content = file_get_contents($link); // Last ned sideinnhold
$dom = new domDocument("1.0", "cp1251"); // Opprett DOM
$dom->loadXML($innhold); // Last inn et XML-dokument i DOM
$root = $dom->documentElement; // Ta rotelementet
$childs = $root->childNodes; // Få en liste over underordnede elementer
$data = array(); // Datasett
for ($i = 0; $i< $childs->lengde; $i++) (
$childs_new = $childs->item($i)->childNodes; // Ta barnenoder
for ($j = 0; $j< $childs_new->lengde; $j++) (
/* Vi ser etter valutaer som interesserer oss */
$el = $childs_new->item($j);
$code = $el->nodeValue;
if (($code == "USD") || ($code == "EUR")) $data = $childs_new; // Legg til de nødvendige valutaene til matrisen
}
}
/* Iterer gjennom en matrise med data om valutaer */
for ($i = 0; $i< count($data); $i++) {
$list = $data[$i];
for ($j = 0; $j< $list->lengde; $j++) (
$el = $list->item($j);
/* Vis valutakurser */
if ($el->nodeName == "Navn") echo $el->nodeValue." - ";
elseif ($el->nodeName == "Value") echo $el->nodeValue." rubler
";
}
}
?>
Jeg prøvde å kommentere koden grundig, så det burde ikke være noen problemer med å forstå den. For å forstå hvorfor det er så mange og hvorfor akkurat slike sykluser, samt hvor visse forhold kommer fra, anbefaler jeg på det sterkeste å besøke lenken fra koden (bare skriv inn datoen). Da vil du se XML-dokument, og det vil være mye lettere for deg å forstå hvorfor akkurat denne koden ble skrevet.
Det er mange skript på Internett som viser valutakurser. Men jeg trengte dollar og euro valutakurs fra sentralbank. Jeg bestemte meg for å se etter manus som vil vises offisielle kurs valutaer for en gitt dato. Jeg kom over en interessant artikkel om jQuery-tabellsortering. Der i manuset" PHP valutakurs parser" Et xml-dokument blir ranet ved bruk av regulære uttrykk. Regulære uttrykk brukes aktivt ved kodeinnbrudd. Skriptet fungerer utmerket, men har sine egne særegenheter. Det viser en tabell i HTML med et stort antall valutaer. Jeg trenger generere en JSON-matrise fra en tabell med valutakurser. Denne matrisen er som en pølse. Dette er hva programmerere kaller en slik array. Det er veldig store pølser i store mengder)))
/* * getArr() * valutakurser fra sentralbanken * analyserer xml-dokumentet * */ funksjonen getArr() ( $url = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=". date("d/m/Y",strtotime("+0 day")); $cbr_xml = str_replace(array("\n","\r","\t"),"",getContentPage($url )); if(preg_match_all("~ (.*?) ~i",$cbr_xml,$Valute)) ( foreach($Valute as $data) ( preg_match("~ (.*?) ~i",$data ,$CharCode); preg_match("~ (.*?) ~i",$NumCode); $arr[$CharCode]["num_code"].= $NumCode; ); $arr[$CharCode]["nominal"] = $Nominal; toUtf8($Name); preg_match("~ (.*?) ~i", $i++ ) return $arr; url); $str) ( return mb_convert_encoding($str, "utf-8", "windows-1251"); ) $arr = getArr(); echo json_encode($arr); /* ( "EUR":("num_code":"978", "nominal":"1", "navn":"\u0415\u0432\u0440\u043e", "value":"63.6090"), "USD ":("num_code":"840", "nominal":"1", "navn":"\u0414\u043e\u043b\u043b\u0430\u0440 \u0421\u0428\u0410", "value": "58.0374 ") )*/
Du kan se både dagens valutakurs og gårsdagens valutakurs. Funksjonen strtotime("+0 day") lar deg endre tiden. Selvfølgelig, uansett hvor mange nuller du legger til, vil verdien av variabelen ikke endres. Jeg forlot denne delen av koden slik at tiden kan endres når som helst. Jeg måtte gjøre om arrayet litt. Jeg brukte $CharCode-variabelen som nøkkelen for matrisen. I det store arrayet mitt er det mange andre arrays, og du kan bare få tilgang til en spesifikk array med nøkkel (EUR). I mitt tilfelle tar $CharCode-variabelen følgende verdier:
- AUD => australske dollar
- AZN => Aserbajdsjansk manat
- GBP => britiske pund
- AMD => Armenske dramaer
- BYR => Hviterussiske rubler
- BGN => Bulgarsk Lev
- BRL => brasiliansk real
- HUF => Ungarsk forint
- DKK => danske kroner
- USD => amerikanske dollar
- EUR => Euro
- INR => indiske rupier
- KZT => Kasakhstan tenge
- CAD => kanadiske dollar
- KGS => Kyrgyzstani som
- CNY => kinesisk yuan
- MDL => Moldovisk lei
- kr => norske kroner
- PLN => polske zloty
- RON => Ny rumensk leu
- XDR => SDR (Spesielle trekkrettigheter)
- SGD => Singapore dollar
- TJS => Tadsjikistan somoni
- PRØV => Tyrkisk lira
- TMT => Ny turkmensk manat
- UZS => usbekisk som
- UAH => ukrainsk hryvnia
- CZK => tsjekkiske kroner
- SEK => svenske kroner
- CHF => sveitsiske franc
- ZAR => Sørafrikansk rand
- KRW => Republikken Korea Won
- JPY => Japansk Yen
Jeg er kun interessert i USD og EUR. Jeg slettet den ikke fra
God ettermiddag kjære venner. Som du vet, nylig (11. februar) hadde vi en ny devaluering i Kasakhstan, denne "svarte tirsdagen", som mange på Internett kalte det, traff mange. Jeg vil ikke skrive en annen negativ artikkel om dette emnet. Jeg tror ikke dette er nødvendig. Det som er gjort er gjort. Men på den skjebnesvangre dagen ble jeg veldig opprørt over det faktum at ingen steder på Internett var det mulig å finne ut den nøyaktige valutakursen for dollar, euro eller andre utenlandsk valuta. Alle kjente og ukjente (hei Google) nettsteder var ikke tilgjengelige for meg. Kanskje noen nettsteder falt i unåde hos kasakhstanske brukere og var ikke klare for en slik mengde brukere. Men faktum gjenstår at sidene ikke fungerte.
Og på kvelden, da lidenskapene mine for devaluering begynte å avta og nervene mine begynte å vende tilbake til sin rolige tilstand, bestemte jeg meg for at jeg måtte skrive meg en liten valutakursinformator til den koselige lille bloggen min. Som jeg sa ovenfor, ønsket jeg ikke å bruke widgetene til andre nettsteder, siden disse nettstedene "løy" da hele regjeringen ønsket å vite denne jævla valutakursen. :) Nedenfor er informer scriptet i PHP, jeg tror scriptet ikke trenger kommentarer:
$amount = "1";
$from = "USD";
$from = "EUR";
$from = "RUB";
$to= "KZT";
$i=0;
mens($i<= 2){
$i++;
$get = eksplodere(" ",$get);
$get = eksplodere("",$get);
";
}
?>
Skriptet er universelt, du kan endre variabelen $to til en annen valuta du vil konvertere til, samt øke eller endre arrays $fra[?], legg til andre valutaer, bare husk å endre løkkebetingelsen hvis du har økt antall valutaer som sendes ut. Du kan få identifikatoren (navnet) til valutaer ved å bruke lenken - https://www.google.com/finance/converter. Som du sikkert forstår, analyserer skriptet denne Google-siden i en løkke og tar informasjonen den trenger.
Hvordan installerer jeg dette skriptet på nettstedet ditt? Hvis du har en wordpress-motor, må du installere plugin-en" PHP-kode-widget" og velg denne widgeten og legg til all koden der. Dette er den enkleste måten. Hvis det oppstår et problem, kan du alltid deaktivere plugin-en og alt vil gå tilbake som det var. Jeg tilbyr ikke komplekse alternativer for å installere skriptet. Du kan skrive til meg på e-post, og jeg vil prøve å hjelpe deg. Jeg håper denne artikkelen var nyttig for deg:)
P.S: For meg selv optimaliserte jeg skriptet litt (la til caching) og ga cron-oppgaven å oppdatere scriptet en gang i timen. Min versjon lagrer en *.html-fil og jeg viser den i widgets via ajax.
// Start utgangsbuffring
ob_start();$amount = "1";
$from = "USD";
$from = "EUR";
$from = "RUB";
$to= "KZT";
$i=0;
mens($i<= 2){
$i++;
$get = file_get_contents("https://www.google.com/finance/converter?a=$amount&from=$from[$i]&to=$to");
$get = eksplodere(" ",$get);
$get = eksplodere("",$get);
$converted_amount = preg_replace("/[^0-9\.]/", null, $get);
$konvertert_beløp = runde($konvertert_beløp,2);
echo $amount." ".$from[$i]." = ".$converted_amount." ".$to."
";
}// lagrer fanget utdata til .html-fil
file_put_contents("currency.html", ob_get_contents());
// avslutte bufring og visning av side
ob_end_flush();
?>
Lagre skriptet i *.php-format, det anbefales å lagre det i en egen mappe (for eksempel i "scripts"-mappen, for ikke å rote til siden. Etter det må du legge til en oppgave i krone, få tilgang til skriptet en gang i nettleseren manuelt, slik at det oppretter en html-fil, som vi senere får tilgang til. Deretter kan du vise skriptet i widgets.
funksjon show_temp()
{
$.ajax((
url: "http://dinside/scripts/currency.html",
cache: falsk,
suksess: funksjon(html)(
$("#valuta").html(html);
}
});
}
$(document).ready(function())(
vis_temp();
});
Denne utdatametoden lar deg endre skriftstørrelse, skriftfarge eller legge til andre effekter via CSS (Cascading Style Sheet).
En optimalisert versjon av skriptet vil ikke laste serveren og stadig kontakte Google Du kan implementere caching på en annen måte, for ikke å bruke cron hår. :)
Er vaskemaskinen din ødelagt? 1v.kz vil hjelpe! - Reparasjon av vaskemaskiner i Almaty:
Spesialister fra alle deler av byen
I noen tilfeller, når du jobber med handel, er det behov for å få oppdatert informasjon om valutakursen til en bestemt valuta. Sentralbanken er den beste kilden til slike data, og gitt at den gir åpen og tidsriktig oppdatert informasjon om valutakurser i XML-format, ville det være synd å ikke bruke det.
Denne funksjonen ser slik ut:
Funksjon get_currency($currency_code, $format) ( $date = date("d/m/Y"); // Gjeldende dato $cache_time_out = "3600"; // Cache-levetid i sekunder $file_currency_cache = __DIR__."/XML_daily . asp"; if(!is_fil($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("Verdi")->Verdi), $format); )
Den inneholder linjene:
$dato = dato("d/m/Y"); // Nåværende dato $cache_time_out = "3600"; // Cache-levetid i sekunder
er ansvarlige for henholdsvis datoen (i vårt tilfelle er den aktuell) og cachens levetid. Siden sentralbanken ikke oppdaterer data om valutaer så ofte, bør du ikke bare plage dem hver gang du bruker dem. Du kan endre verdiene i disse linjene (om ønskelig) til dine egne.
Bruken av funksjonen er som følger:
Echo get_currency("USD", 3);
her" USD" er den symbolske koden til valutaen (i vårt tilfelle er det amerikanske dollar), og " 3 » – antall desimaler.
Akseptabel liste over valutaer levert av sentralbanken i Den russiske føderasjonen (i skrivende stund) i form av "valutasymbolkode - pålydende og navn":
AUD – 1 australske dollar AZN – 1 aserbajdsjansk manat GBP – 1 britisk pund AMD – 100 armenske dram BYN – 1 hviterussisk rubel BGN – 1 bulgarsk lev BRL – 1 brasiliansk real HUF – 100 ungarske forint HKD – 10 Hong Kong-dollar danske DKK – 10 kroner USD – 1 amerikanske dollar EUR – 1 euro INR – 100 indiske rupees KZT – 100 kasakhstanske tenge CAD – 1 kanadisk dollar KGS – 100 kirgisiske som CNY – 10 kinesiske yuan MDL – 10 moldoviske lei NOK – 10 norske kroner PLN – 1 polsk zloty RON – 1 rumensk leu XDR – 1 SDR (spesielle trekkrettigheter) SGD – 1 Singapore-dollar TJS – 10 tadsjikiske somoni TRY – 1 tyrkiske lira TMT – 1 ny turkmensk manat UZS – 10 000 usbekiske soums UAH – 10 ukrainske hryvnia CZK – c10 ukrainske hryvnia CZK SEK - 10 svenske kroner CHF - 1 sveitsiske franc ZAR - 10 sørafrikanske rands KRW - 1000 koreanske won
Jeg håper funksjonen finner sin plass i prosjektet ditt. Hvis du har spørsmål eller noe virker uklart, husk å skrive om det i kommentarene under denne artikkelen.
I noen tilfeller, når du jobber med handel, er det behov for å få oppdatert informasjon om valutakursen til en bestemt valuta. Sentralbanken er den beste kilden til slike data, og gitt at den gir åpen og tidsriktig oppdatert informasjon om valutakurser i XML-format, ville det være synd å ikke bruke det.
Denne funksjonen ser slik ut:
Funksjon get_currency($currency_code, $format) ( $date = date("d/m/Y"); // Gjeldende dato $cache_time_out = "3600"; // Cache-levetid i sekunder $file_currency_cache = __DIR__."/XML_daily . asp"; if(!is_fil($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("Verdi")->Verdi), $format); )
Den inneholder linjene:
$dato = dato("d/m/Y"); // Nåværende dato $cache_time_out = "3600"; // Cache-levetid i sekunder
er ansvarlige for henholdsvis datoen (i vårt tilfelle er den aktuell) og cachens levetid. Siden sentralbanken ikke oppdaterer data om valutaer så ofte, bør du ikke bare plage dem hver gang du bruker dem. Du kan endre verdiene i disse linjene (om ønskelig) til dine egne.
Bruken av funksjonen er som følger:
Echo get_currency("USD", 3);
her" USD" er den symbolske koden til valutaen (i vårt tilfelle er det amerikanske dollar), og " 3 » – antall desimaler.
Akseptabel liste over valutaer levert av sentralbanken i Den russiske føderasjonen (i skrivende stund) i form av "valutasymbolkode - pålydende og navn":
AUD – 1 australske dollar AZN – 1 aserbajdsjansk manat GBP – 1 britisk pund AMD – 100 armenske dram BYN – 1 hviterussisk rubel BGN – 1 bulgarsk lev BRL – 1 brasiliansk real HUF – 100 ungarske forint HKD – 10 Hong Kong-dollar danske DKK – 10 kroner USD – 1 amerikanske dollar EUR – 1 euro INR – 100 indiske rupees KZT – 100 kasakhstanske tenge CAD – 1 kanadisk dollar KGS – 100 kirgisiske som CNY – 10 kinesiske yuan MDL – 10 moldoviske lei NOK – 10 norske kroner PLN – 1 polsk zloty RON – 1 rumensk leu XDR – 1 SDR (spesielle trekkrettigheter) SGD – 1 Singapore-dollar TJS – 10 tadsjikiske somoni TRY – 1 tyrkiske lira TMT – 1 ny turkmensk manat UZS – 10 000 usbekiske soums UAH – 10 ukrainske hryvnia CZK – c10 ukrainske hryvnia CZK SEK - 10 svenske kroner CHF - 1 sveitsiske franc ZAR - 10 sørafrikanske rands KRW - 1000 koreanske won
Jeg håper funksjonen finner sin plass i prosjektet ditt. Hvis du har spørsmål eller noe virker uklart, husk å skrive om det i kommentarene under denne artikkelen.