Skrypt kursu wymiany. Jak uzyskać oficjalne kursy walut na dany dzień w PHP

W Internecie istnieje wiele skryptów pokazujących kursy walut. Ale potrzebowałem kursu wymiany dolara i euro Bank centralny. Postanowiłem poszukać skryptów, które to pokażą oficjalne kursy waluty na dany dzień. Natrafiłem na ciekawy artykuł dotyczący sortowania tabel jQuery. Tam, w skrypcie” Parser kursów walut PHP" Dokument XML zostaje okradziony przy użyciu wyrażeń regularnych. Wyrażenia regularne są aktywnie wykorzystywane do włamań do kodu. Skrypt działa świetnie, ale ma swoje specyficzne cechy. Wyświetla tabelę w formacie HTML z dużą liczbą walut. Potrzebuję wygeneruj 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 duże ilości)))

/* * getArr() * kursy wymiany z banku centralnego * analiza dokumentu 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 ":("num_code":"840", "nominal":"1", "name":"\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ń") pozwala na zmianę czasu. Oczywiście, niezależnie od tego, ile zer dodasz, wartość zmiennej nie ulegnie zmianie. Tę część kodu zostawiłem, aby w każdej chwili można było zmienić godzinę. Musiałem trochę przerobić tablicę. 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 brytyjski
  4. AMD => Ormiańskie dramaty
  5. BYR => ruble białoruskie
  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 => Rumuński Nowy Lej
  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 => som uzbecki
  27. UAH => hrywna ukraińska
  28. CZK => korony czeskie
  29. SEK => korona szwedzka
  30. CHF => frank szwajcarski
  31. ZAR => rand południowoafrykański
  32. KRW => Republika Korei wygrana
  33. JPY => Jen japoński

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

W niektórych przypadkach podczas pracy w handlu istnieje potrzeba uzyskania aktualnych informacji o kursie danej waluty. Najlepszym źródłem takich danych jest Bank Centralny, a biorąc pod uwagę, że udostępnia on otwarte i na bieżąco aktualizowane informacje o kursach walut w formacie XML, szkoda byłoby 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 aktualna) i czas życia pamięci podręcznej. Ponieważ Bank Centralny nie aktualizuje zbyt często danych o walutach, nie należy go po prostu męczyć za każdym razem, gdy z nich korzystasz. Możesz zmienić wartości w tych wierszach (w razie potrzeby) 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), oraz „ 3 " - liczba symboli po przecinku.

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

AUD – 1 dolar australijski AZN – 1 manat azerbejdżański GBP – 1 funt brytyjski AMD – 100 dram ormiański BYN – 1 rubel białoruski BGN – 1 lew bułgarski BRL – 1 real brazylijski HUF – 100 forintów węgierskich 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 kirgiski CNY – 10 juanów chińskich MDL – 10 lei mołdawskich 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życkich TRY – 1 lira turecka TMT – 1 nowy manat turkmeński UZS – 10 000 soum uzbeckich UAH – 10 hrywny ukraińskiej CZK – 10 koron czeskich SEK – 10 koron szwedzkich CHF – 1 frank szwajcarski ZAR – 10 randów południowoafrykańskich KRW – 1000 wonów koreańskich

Mam nadzieję, że ta funkcja znajdzie swoje miejsce w Twoim projekcie. Jeśli masz jakieś pytania lub coś wydaje Ci się niejasne, 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 Banku Centralnego i wyświetlanie ich na stronie.

Oto kod skryptu od razu:

$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; // Weź 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; // Weź węzły podrzędne
dla ($j = 0; $j< $childs_new->długość; $j++) (
/* Szukamy walut, które nas interesują */
$el = $childs_new->item($j);
$kod = $el->Wartość węzła;
if (($kod == "USD") || ($kod == "EUR")) $data = $childs_new; // Dodaj wymagane waluty do tablicy
}
}
/* Iteracja po tablicy zawierającej dane o walutach */
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.” rubli
";
}
}
?>

Kod starałem się dokładnie skomentować, więc nie powinno być problemów ze zrozumieniem. Ponadto, aby zrozumieć, dlaczego jest ich tak wiele i dlaczego dokładnie takie cykle, a także skąd biorą się określone warunki, gorąco polecam odwiedzić link z kodu (wystarczy wstawić datę). Wtedy zobaczysz Dokument XML i znacznie łatwiej będzie ci zrozumieć, dlaczego napisano ten konkretny kod.

W niektórych przypadkach podczas pracy w handlu istnieje potrzeba uzyskania aktualnych informacji o kursie danej waluty. Najlepszym źródłem takich danych jest Bank Centralny, a biorąc pod uwagę, że udostępnia on otwarte i na bieżąco aktualizowane informacje o kursach walut w formacie XML, szkoda byłoby 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 aktualna) i czas życia pamięci podręcznej. Ponieważ Bank Centralny nie aktualizuje zbyt często danych o walutach, nie należy go po prostu męczyć za każdym razem, gdy z nich korzystasz. Możesz zmienić wartości w tych wierszach (w razie potrzeby) 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), oraz „ 3 " - liczba symboli po przecinku.

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

AUD – 1 dolar australijski AZN – 1 manat azerbejdżański GBP – 1 funt brytyjski AMD – 100 dram ormiański BYN – 1 rubel białoruski BGN – 1 lew bułgarski BRL – 1 real brazylijski HUF – 100 forintów węgierskich 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 kirgiski CNY – 10 juanów chińskich MDL – 10 lei mołdawskich 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życkich TRY – 1 lira turecka TMT – 1 nowy manat turkmeński UZS – 10 000 soum uzbeckich UAH – 10 hrywny ukraińskiej CZK – 10 koron czeskich SEK – 10 koron szwedzkich CHF – 1 frank szwajcarski ZAR – 10 randów południowoafrykańskich KRW – 1000 wonów koreańskich

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

Dzień dobry drodzy przyjaciele. Jak wiecie, niedawno (11 lutego) mieliśmy w Kazachstanie kolejną dewaluację, ten „Czarny Wtorek”, jak to nazywało wielu 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 obca waluta. 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 związana z dewaluacją zaczęła słabnąć, a nerwy zaczęły wracać do spokojnego stanu, zdecydowałem, że muszę napisać sobie mały informator kursowy na mojego przytulnego bloga. Jak wspomniałem powyżej, nie chciałem korzystać z widżetów innych stron, bo te strony „kłamały”, gdy cały rząd chciał poznać ten cholerny kurs wymiany. :) Poniżej skrypt informera w PHP, myślę, że skrypt nie wymaga komentarza:

$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, pamiętaj tylko o zmianie warunku pętli, jeśli zwiększyłeś liczbę wyprowadzanych walut. Identyfikator (nazwę) walut można uzyskać korzystając z linku - https://www.google.com/finance/converter. Jak zapewne rozumiesz, 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 pojawi się problem, zawsze możesz wyłączyć wtyczkę i wszystko wróci tak jak było. Nie oferuję skomplikowanych opcji instalacji skryptu. Ty możesz napisać do mnie na e-mail, a postaram się Ci pomóc. Mam nadzieję, że ten artykuł był dla Ciebie przydatny. :)

P.S: Dla siebie trochę 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 przez 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."
";
}

// zapisywanie przechwyconych danych wyjściowych do pliku .html
file_put_contents("waluta.html", ob_get_contents());
// zakończ buforowanie i wyświetlanie strony
ob_end_flush();
?>

Zapisz skrypt w formacie *.php, wskazane jest zapisanie go w osobnym folderze (na przykład w folderze „skrypty”, aby nie zaśmiecać witryny. Następnie konieczne będzie dodanie zadania w korona, uzyskaj dostęp do skryptu raz na n godzin. Po przejściu przez przeglądarkę ręcznie uzyskaj dostęp do skryptu, aby utworzył plik HTML, do którego odniesiemy się później. 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();
});

Ta metoda wyjściowa pozwoli Ci zmienić rozmiar i kolor czcionki lub dodać inne efekty za pomocą CSS (kaskadowy arkusz stylów).

Zoptymalizowana wersja skryptu nie będzie ładowała serwera i stale kontaktowała się z Google. Możesz zaimplementować buforowanie w inny sposób i sprawdzać według daty, aby nie używać cron. Ale osobiście wyszedłem od prostego. Nie lubię dzielić włosy. :)

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

Specjaliści ze wszystkich rejonów miasta

Udział