Php pobiera kurs wymiany. Jak uzyskać oficjalne kursy walut na dany dzień w PHP

W niektórych przypadkach podczas pracy w handlu konieczne staje się uzyskanie aktualnych informacji o kursie danej waluty. Najlepszym źródłem takich danych jest Bank Centralny, a biorąc pod uwagę, że udostępnia w sposób otwarty i aktualny informacje o kursach walut w formacie XML, grzechem jest z nich nie skorzystać.

Ta funkcja wygląda następująco:

Funkcja get_currency($currency_code, $format) ( $date = date("d/m/Y"); // Bieżąca data $cache_time_out = "3600"; // Czas życia pamięci podręcznej w sekundach $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("Wartość")->Wartość), $format); )

Zawiera linie:

$data = data("d/m/R"); // Bieżąca data $cache_time_out = "3600"; // Czas życia pamięci podręcznej w sekundach

odpowiadają odpowiednio za datę (w naszym przypadku jest to bieżąca) i czas życia pamięci podręcznej. Ponieważ Bank Centralny nie aktualizuje tak często danych walutowych, nie powinieneś mu tak zawracać głowy za każdym razem, gdy z nich korzystasz. Możesz zmienić wartości w tych wierszach (opcjonalnie) na własne.

Sposób użycia funkcji jest następujący:

echo get_currency("USD", 3);

Tutaj " USD” to symboliczny kod waluty (w naszym przypadku jest to dolar amerykański), a „ 3 " - liczba symboli po przecinku.

Akceptowalna lista walut podana przez Bank Centralny Federacji Rosyjskiej (w momencie pisania tego tekstu) w formie „znakowego kodu waluty - nominał i nazwa”:

AUD – 1 dolar australijski AZN – 1 manat azerbejdżański GBP – 1 funt brytyjski AMD – 100 dramów ormiańskich BYN – 1 rubel białoruski BGN – 1 lew bułgarski BRL – 1 real brazylijski HUF – 100 HUF HKD – 10 dolarów hongkońskich DKK – 10 duńskich korona USD - 1 dolar amerykański EUR - 1 euro INR - 100 rupii indyjskich KZT - 100 tenge kazachskie CAD - 1 dolar kanadyjski KGS - 100 somów kirgiskich CNY - 10 juanów chińskich MDL - 10 MDL NOK - 10 koron norweskich PLN - 1 złoty polski RON – 1 lej rumuński XDR – 1 SDR (Specjalne prawa ciągnienia) SGD – 1 dolar singapurski TJS – 10 somoni tadżyckie TRY – 1 lira turecka TMT – 1 nowy manat turkmeński UZS – 10 000 UZS UAH – 10 hrywna ukraińska CZK – 10 CZK SEK - 10 SEK CHF – 1 frank szwajcarski ZAR – 10 randów południowoafrykańskich KRW – 1000 wonów ROK

Mam nadzieję, że funkcja znajdzie swoje miejsce w Twoim projekcie. Jeśli masz jakieś pytania lub coś wydawało Ci się niezrozumiałe – koniecznie napisz o tym w komentarzach pod tym artykułem.

W niektórych przypadkach podczas pracy w handlu konieczne staje się uzyskanie aktualnych informacji o kursie danej waluty. Najlepszym źródłem takich danych jest Bank Centralny, a biorąc pod uwagę, że udostępnia w sposób otwarty i aktualny informacje o kursach walut w formacie XML, grzechem jest z nich nie skorzystać.

Ta funkcja wygląda następująco:

Funkcja get_currency($currency_code, $format) ( $date = date("d/m/Y"); // Bieżąca data $cache_time_out = "3600"; // Czas życia pamięci podręcznej w sekundach $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("Wartość")->Wartość), $format); )

Zawiera linie:

$data = data("d/m/R"); // Bieżąca data $cache_time_out = "3600"; // Czas życia pamięci podręcznej w sekundach

odpowiadają odpowiednio za datę (w naszym przypadku jest to bieżąca) i czas życia pamięci podręcznej. Ponieważ Bank Centralny nie aktualizuje tak często danych walutowych, nie powinieneś mu tak zawracać głowy za każdym razem, gdy z nich korzystasz. Możesz zmienić wartości w tych wierszach (opcjonalnie) na własne.

Sposób użycia funkcji jest następujący:

echo get_currency("USD", 3);

Tutaj " USD” to symboliczny kod waluty (w naszym przypadku jest to dolar amerykański), a „ 3 " - liczba symboli po przecinku.

Akceptowalna lista walut podana przez Bank Centralny Federacji Rosyjskiej (w momencie pisania tego tekstu) w formie „znakowego kodu waluty - nominał i nazwa”:

AUD – 1 dolar australijski AZN – 1 manat azerbejdżański GBP – 1 funt brytyjski AMD – 100 dramów ormiańskich BYN – 1 rubel białoruski BGN – 1 lew bułgarski BRL – 1 real brazylijski HUF – 100 HUF HKD – 10 dolarów hongkońskich DKK – 10 duńskich korona USD - 1 dolar amerykański EUR - 1 euro INR - 100 rupii indyjskich KZT - 100 tenge kazachskie CAD - 1 dolar kanadyjski KGS - 100 somów kirgiskich CNY - 10 juanów chińskich MDL - 10 MDL NOK - 10 koron norweskich PLN - 1 złoty polski RON – 1 lej rumuński XDR – 1 SDR (Specjalne prawa ciągnienia) SGD – 1 dolar singapurski TJS – 10 somoni tadżyckie TRY – 1 lira turecka TMT – 1 nowy manat turkmeński UZS – 10 000 UZS UAH – 10 hrywna ukraińska CZK – 10 CZK SEK - 10 SEK CHF – 1 frank szwajcarski ZAR – 10 randów południowoafrykańskich KRW – 1000 wonów ROK

Mam nadzieję, że funkcja znajdzie swoje miejsce w Twoim projekcie. Jeśli masz jakieś pytania lub coś wydawało Ci się niezrozumiałe – koniecznie napisz o tym w komentarzach pod tym artykułem.

Wielu z Was wielokrotnie widziało, że niektóre witryny wyświetlają się kurs wymiany. Oczywiście sami administratorzy tych stron nie zmieniają ich codziennie (mam nadzieję). Pobierają je ze strony internetowej Banku Centralnego. I w tym artykule podam kod Skrypt PHP do pobierania kursów walut ze strony internetowej Banku Centralnego i wyświetlić je na stronie.

Oto kod skryptu:

$data = data("d/m/R"); // Dzisiejsza data w wymaganym formacie
$link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$data"; // Link do pliku XML z kursami wymiany
$treść = plik_get_contents($link); // Pobierz zawartość strony
$dom = nowy domDocument("1.0", "cp1251"); // Utwórz DOM
$dom->loadXML($treść); // Załaduj dokument XML do DOM
$root = $dom->documentElement; // Pobierz element główny
$childs = $root->childNodes; // Uzyskaj listę elementów podrzędnych
$dane = tablica(); // Zbiór danych
dla ($i = 0; $i< $childs->długość; $i++) (
$childs_new = $childs->item($i)->childNodes; // Pobierz węzły podrzędne
dla ($j = 0; $j< $childs_new->długość; $j++) (
/* Szukamy interesujących nas walut */
$el = $childs_new->item($j);
$kod = $el->Wartość węzła;
if (($kod == "USD") || ($kod == "EUR")) $data = $childs_new; // Dodaj niezbędne waluty do tablicy
}
}
/* Przejdź przez tablicę z danymi walutowymi */
dla ($i = 0; $i< count($data); $i++) {
$lista = $dane[$i];
dla ($j = 0; $j< $list->długość; $j++) (
$el = $lista->element($j);
/* Wyświetl kursy wymiany */
if ($el->nodeName == "Nazwa") echo $el->nodeValue." - ";
elseif ($el->nazwa_węzła == „Wartość”) echo $el->Wartość węzła.”
";
}
}
?>

Kod starałem się dokładnie skomentować, aby nie było problemów z jego zrozumieniem. Ponadto, aby zrozumieć, dlaczego jest ich tak wiele i dlaczego takie cykle, a także skąd biorą się określone warunki, zdecydowanie polecam skorzystać z linku z kodu (wystarczy zastąpić datę). Wtedy zobaczysz Dokument XML i znacznie łatwiej będzie ci zrozumieć, dlaczego taki kod został napisany.

W Internecie istnieje wiele skryptów pokazujących kursy walut. Ale potrzebowałem dolara i euro Bank centralny. Postanowiłem poszukać skryptów, które to pokażą oficjalne stawki waluty w danym dniu. Natknąłem się na ciekawy artykuł jQuery dotyczący sortowania tabeli. Tam, w skrypcie Parser kursów walut PHP" Dokument XML został okradziony przy użyciu wyrażeń regularnych. Wyrażenia regularne są często używane podczas kradzieży kodu. Skrypt działa świetnie, ale ma swoje własne cechy. Wyświetla tabelę w formacie HTML z dużą liczbą walut. Potrzebuję utwórz tablicę JSON z tabeli z kursami wymiany. Ta tablica jest jak kiełbasa. Tak programiści nazywają taką tablicę. Są tam bardzo duże kiełbaski w dużych ilościach)))

/* * getArr() * kursy wymiany z banku centralnego * analizowany jest dokument xml * */ funkcja getArr() ( $url = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=". date("d/m/R",strtotime("+0 dzień")); $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",$data,$NumCode); $arr[$CharCode]["num_code"].= $NumCode; preg_match("~ (.*?) ~i",$data,$Nominal); $arr[$CharCode]["nominal"] = $Nominal ; preg_match("~ (.*?) ~i",$data,$Nazwa); $arr[$ CharCode]["nazwa"].= toUtf8($Nazwa); preg_match("~ (.*?) ~i",$data,$Value); $arr[$CharCode]["wartość"].= $Wartość ; $i++; ) zwrot $arr; ) ) funkcja 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); return $text; ) //kodowanie do funkcji Utf8 toUtf8($str) ( return mb_convert_encoding($str, "utf-8", "windows-1251"); ) $arr = getArr(); echo json_encode($arr); /* ( "EUR":("kod_liczby":"978", "nominal":"1", "nazwa":"\u0415\u0432\u0440\u043e", "wartość":"63,6090"), "USD":("kod_liczby":"840", "nominal":"1", "nazwa":"\u0414\u043e\u043b\u043b\u0430\u0440 \u0421\u0428\u0410", "wartość": „58.0374”) )*/

Możesz przeglądaj zarówno dzisiejszy, jak i wczorajszy kurs wymiany. Funkcja strtotime("+0 dzień") umożliwia zmianę czasu. Oczywiście ile zer i tak nie dodamy, wartość zmiennej nie ulegnie zmianie. Tę część kodu zostawiłem tak, aby w każdej chwili można było zmienić godzinę. Musiałem trochę przeorganizować układ. Użyłem zmiennej $CharCode jako klucza tablicy. W mojej dużej tablicy znajduje się wiele innych tablic, a dostęp do określonej tablicy można uzyskać tylko za pomocą klucza (EUR). W moim przypadku zmienna $CharCode przyjmuje następujące wartości:

  1. AUD => dolar australijski
  2. AZN => manat azerbejdżański
  3. GBP => Funt szterling brytyjski
  4. AMD => Ormiańskie dramaty
  5. BYR => rubel białoruski
  6. BGN => lew bułgarski
  7. BRL => real brazylijski
  8. HUF => forint węgierski
  9. DKK => korona duńska
  10. USD => dolar amerykański
  11. EUR => Euro
  12. INR => rupie indyjskie
  13. KZT => tenge Kazachstanu
  14. CAD => dolar kanadyjski
  15. KGS => kirgiski som
  16. CNY => chiński juan
  17. MDL => lei mołdawskie
  18. NOK => korona norweska
  19. zł => złoty polski
  20. RON => nowy lej rumuński
  21. XDR => SDR (Specjalne prawa ciągnienia)
  22. SGD => dolar singapurski
  23. TJS => somoni tadżyckie
  24. WYPRÓBUJ => Lira turecka
  25. TMT => nowy manat turkmeński
  26. UZS => suma uzbecka
  27. UAH => hrywna ukraińska
  28. CZK => korona czeska
  29. SEK => korona szwedzka
  30. CHF => frank szwajcarski
  31. ZAR => Rand południowoafrykański
  32. KRW => won koreański
  33. JPY => jen japoński

Interesują mnie tylko USD i EUR. nie usunąłem z

Dzień dobry drodzy przyjaciele. Jak wiecie, niedawno (11 lutego) w Kazachstanie miała miejsce kolejna dewaluacja, ten „Czarny Wtorek”, jak go wielu nazywało w Internecie, uderzył wielu w kieszenie. Nie będę pisać kolejnego negatywnego artykułu na ten temat. Nie sądzę, że jest to konieczne. Co jest zrobione jest zrobione. Ale tego nieszczęsnego dnia byłem bardzo oburzony faktem, że nigdzie w Internecie nie można było dowiedzieć się dokładnego kursu wymiany dolara, euro lub innego wymiana zagraniczna. Wszystkie znane i nieznane (witaj Google) strony nie były dla mnie dostępne. Być może niektóre witryny wypadły z łask użytkowników z Kazachstanu i nie były gotowe na przyjęcie takiej liczby użytkowników. Ale faktem jest, że strony nie działały.

A wieczorem, kiedy moja pasja do dewaluacji zaczęła słabnąć, a nerwy zaczęły się uspokajać, zdecydowałem, że muszę sobie napisać małego informatora kursowego na moim przytulnym blogu. Jak pisałem wyżej nie chciałem korzystać z widgetów innych stron, bo te strony "kłamały" gdy cały kaznet chciał poznać ten cholerny kurs wymiany. :) Poniżej znajduje się skrypt informatora php, myślę, że skrypt nie wymaga komentarzy:

$kwota = "1";
$od = "USD";
$od = "EUR";
$od = "RUB";
$do="KZT";
$i=0;
podczas ($tj<= 2){
$i++;
$get = eksploduj(" ",$get);
$get = eksploduj("
",$get);


";
}
?>

Skrypt jest uniwersalny, istnieje możliwość zmiany zmiennej $do na inną walutę, na którą chcesz przeliczyć, a także zwiększyć lub zmienić tablice $od [?], dodaj inne waluty, nie zapomnij tylko zmienić warunku pętli, jeśli zwiększyłeś liczbę wypłacanych walut. Identyfikator (nazwę) walut można uzyskać z linku - https://www.google.com/finance/converter. Jak zapewne zrozumiałeś, skrypt analizuje tę stronę Google w pętli i pobiera potrzebne informacje.

Jak zainstalować ten skrypt na swojej stronie? Jeśli masz silnik WordPress, będziesz musiał zainstalować wtyczkę „ Widżet kodu PHP"i wybierz ten widget i dodaj tam cały kod. To najłatwiejszy sposób. Jeśli będzie problem, zawsze możesz wyłączyć wtyczkę i wszystko wróci tak jak było. Nie oferuję skomplikowanych opcji instalacji skryptu. Możesz wysłać mi e-mail, a postaram się Ci pomóc. Mam nadzieję, że ten artykuł był dla Ciebie pomocny. :)

P.S: Dla siebie nieco zoptymalizowałem skrypt (dodałem buforowanie) i zleciłem cronowi zadanie aktualizacji skryptu raz na godzinę.Moja wersja zapisuje plik *.html i wyświetlam go w widżetach, poprzez ajax.

// Rozpocznij buforowanie danych wyjściowych
ob_start();

$kwota = "1";
$od = "USD";
$od = "EUR";
$od = "RUB";
$do="KZT";
$i=0;
podczas ($tj<= 2){
$i++;
$get = file_get_contents("https://www.google.com/finance/converter?a=$amount&from=$from[$i]&to=$to");
$get = eksploduj(" ",$get);
$get = eksploduj("
",$get);
$converted_amount = preg_replace("/[^0-9\.]/", null, $get);
$przeliczona_kwota = okrągła($przeliczona_kwota,2);
echo $kwota." ".$od[$i]." = ".$przeliczona_kwota." ".$na."
";
}

// zapisz przechwycone dane wyjściowe do pliku .html
file_put_contents("waluta.html", ob_get_contents());
// zakończ buforowanie i wyświetl stronę
ob_end_flush();
?>

Zapisz skrypt w formacie *.php, wskazane jest zapisanie go w osobnym folderze (np. w folderze „skrypty”, aby nie zapychać witryny. Następnie konieczne będzie dodanie zadania w cron, uzyskaj dostęp do skryptu co n godzin. Po przejściu przez przeglądarkę ręcznie uzyskaj dostęp do skryptu, aby utworzył plik HTML, do którego będziemy się odnosić w przyszłości. Następnie możesz wyświetlić skrypt w widżetach poprzez ramkę iframe:


funkcja show_temp()
{
$.ajax((
adres URL: "http://twojastrona/skrypty/currency.html",
pamięć podręczna: fałsz
sukces: funkcja(html)(
$("#waluta").html(html);
}
});
}
$(dokument).gotowy(funkcja()(
pokaż_temp();
});

Tego rodzaju dane wyjściowe pozwolą Ci zmienić rozmiar i kolor czcionki lub dodać inne efekty za pomocą CSS (kaskadowy arkusz stylów).

Zoptymalizowana wersja skryptu nie będzie ładować serwera i stale uzyskiwać dostępu do Google.Możesz zaimplementować buforowanie w inny sposób i sprawdzać według daty, aby nie używać cron.Ale osobiście zacząłem od prostego.Nie lubię być mądry :)

Pralka zepsuta? 1v.kz pomoże! - Naprawa pralek w Ałmaty:

Profesjonaliści z każdej części miasta

Udział