Kontakty

Skript pro získání směnného kurzu. Jak získat oficiální směnné kurzy pro dané datum v PHP

V některých případech je při práci s obchodem nutné získat aktuální informace o směnném kurzu konkrétní měny. Centrální banka je nejlepším zdrojem takových dat a vzhledem k tomu, že poskytuje otevřené a včasné informace o směnném kurzu ve formátu XML, je hřích je nevyužít.

Tato funkce vypadá takto:

Funkce get_currency($currency_code, $format) ( $date = date("d/m/Y"); // Aktuální datum $cache_time_out = "3600"; // Životnost mezipaměti v sekundách $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("Value")->Hodnota), $formát); )

Obsahuje řádky:

$datum = datum("d/m/Y"); // Aktuální datum $cache_time_out = "3600"; // Životnost mezipaměti v sekundách

jsou zodpovědné za datum (v našem případě je to aktuální) a životnost cache, resp. Vzhledem k tomu, že centrální banka neaktualizuje měnová data tak často, neměli byste ho jen tak obtěžovat při každém jejich použití. Hodnoty v těchto řádcích můžete změnit (volitelně) na své vlastní.

Použití funkce je následující:

echo get_currency("USD", 3);

Tady " americký dolar“ je symbolický kód měny (v našem případě je to americký dolar) a „ 3 “ – řada symbolů za čárkou.

Přijatelný seznam měn poskytnutý Centrální bankou Ruské federace (v době psaní tohoto článku) ve formě „kódu měny – nominální hodnota a název“:

AUD - 1 australský dolar AZN - 1 ázerbájdžánský manat GBP - 1 britská libra šterlinků AMD - 100 arménských dramů BYN - 1 běloruský rubl BGN - 1 bulharský lev BRL - 1 brazilský real HUF - 100 HUF HKD - 10 hongkongských dolarů 10 dánských DKK - koruna USD - 1 americký dolar EUR - 1 euro INR - 100 indických rupií KZT - 100 kazašských tenge CAD - 1 kanadský dolar KGS - 100 kyrgyzských somů CNY - 10 čínských juanů MDL - 10 MDL NOK - 10 norských korun PLN - 1 RON polský złoty – 1 rumunský leu XDR – 1 SDR (zvláštní práva čerpání) SGD – 1 singapurský dolar TJS – 10 tádžických somoni TRY – 1 turecká lira TMT – 1 nový turkmenský manat UZS – 10 000 UZS UAH – 10 ukrajinských hřiven Kč – 10 Kč SEK - 10 SEK CHF – 1 švýcarský frank ZAR – 10 jihoafrických randů KRW – 1 000 ROK výher

Doufám, že funkce najde své místo ve vašem projektu. Pokud máte nějaké dotazy nebo se vám něco zdálo nepochopitelné - určitě o tom napište do komentářů pod tento článek.

Na internetu je mnoho skriptů, které ukazují směnné kurzy. Ale potřeboval jsem dolar a euro centrální banka. Rozhodl jsem se hledat skripty, které ukážou oficiální sazby měn k danému datu. Narazil jsem na zajímavý článek jQuery třídící tabulku. Tam ve scénáři PHP parser směnných kurzů" XML dokument je okraden pomocí regulárních výrazů. Regulární výrazy se aktivně používají při loupeži kódu. Skript funguje skvěle, ale má své vlastní vlastnosti. Výstupem tabulky v HTML s velké množství měn. potřebuji vytvořte pole JSON z tabulky se směnnými kurzy. Toto pole je jako klobása. To je to, co programátoři nazývají takové pole. Existují velmi velké klobásy ve velkém množství)))

/* * getArr() * směnné kurzy z centrální banky * xml dokument je analyzován * */ funkce getArr() ( $url = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=". date("d/m/Y",strtotime("+0 den")); $cbr_xml = str_replace(array("\n","\r","\t"),"",getContentPage($url )); if(preg_match_all("~ (.*?) ~i",$cbr_xml,$Valute)) ( foreach($Valute jako $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,$Name); $arr[$ CharCode]["name"].= toUtf8($Name); preg_match("~ (.*?) ~i",$data,$Value); $arr[$CharCode]["value"].= $Value ; $i++; ) return $arr; ) ) funkce 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; ) //zakódování do funkce Utf8 toUtf8($str) ( return mb_convert_encoding($str, "utf-8", "windows-1251"); ) $arr = getArr(); echo json_encode($arr); /* ( "EUR":("číslo_kód":"978", "nominální":"1", "jméno":"\u0415\u0432\u0440\u043e", "hodnota":"63,6090"), "USD":("číslo_kód":"840", "nominální":"1", "název":"\u0414\u043e\u043b\u043b\u0430\u0440 \u0421\u0428\u0410", "hodnota": "58,0374") )*/

Můžeš zobrazit dnešní i včerejší směnný kurz. Funkce strtotime("+0 den") umožňuje změnit čas. Samozřejmě, kolik nul se stejně nepřidá, hodnota proměnné se nezmění. Ponechal jsem tuto část kódu, abyste mohli kdykoli změnit čas. Musel jsem pole trochu přeskupit. Použil jsem proměnnou $CharCode jako klíč pro pole. V mém velkém poli je mnoho dalších polí a k určitému poli můžete přistupovat pouze pomocí klíče (EUR). V mém případě má proměnná $CharCode následující hodnoty:

  1. AUD => australský dolar
  2. AZN => Ázerbájdžánský manat
  3. GBP => Britská libra šterlinků
  4. AMD => arménská dramata
  5. BYR => běloruský rubl
  6. BGN => bulharský lev
  7. BRL => Brazilský real
  8. HUF => maďarský forint
  9. DKK => dánská koruna
  10. USD => americký dolar
  11. EUR => Euro
  12. INR => indické rupie
  13. KZT => Kazachstán tenge
  14. CAD => kanadský dolar
  15. KGS => Kyrgyzstán som
  16. CNY => čínský jüan
  17. MDL => moldavský lei
  18. NOK => norská koruna
  19. PLN => Polský zlotý
  20. RON => rumunský nový leu
  21. XDR => SDR (zvláštní práva čerpání)
  22. SGD => Singapurský dolar
  23. TJS => Tádžikistánský somoni
  24. VYZKOUŠEJTE => turecká lira
  25. TMT => turkmenský nový manat
  26. UZS => uzbecká suma
  27. UAH => ukrajinská hřivna
  28. Kč => česká koruna
  29. SEK => švédská koruna
  30. CHF => švýcarský frank
  31. ZAR => Jihoafrický rand
  32. KRW => korejský won
  33. JPY => japonský jen

Zajímají mě pouze USD a EUR. Neodstranil jsem z

Mnozí z vás opakovaně viděli, že se některé stránky zobrazují Směnné kurzy. Samotní správci těchto stránek je samozřejmě denně nemění (doufám). Stahují je z webu centrální banky. A v tomto článku uvedu kód PHP skript pro stahování směnných kurzů z webu centrální banky a zobrazit je na stránce.

Zde je kód pro skript:

$datum = datum("d/m/Y"); // Dnešní datum v požadovaném formátu
$link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date"; // Odkaz na soubor XML se směnnými kurzy
$obsah = file_get_contents($link); // Stáhnout obsah stránky
$dom = new domDocument("1.0", "cp1251"); // Vytvořit DOM
$dom->loadXML($obsah); // Načtení dokumentu XML do DOM
$kořen = $dom->documentElement; // Získání kořenového prvku
$childs = $root->childNodes; // Získání seznamu podřízených prvků
$data = pole(); // Sada dat
pro ($i = 0; $i< $childs->délka; $i++) (
$childs_new = $childs->item($i)->childNodes; // Získejte podřízené uzly
pro ($j = 0; $j< $childs_new->délka; $j++) (
/* Hledáme měny, které nás zajímají */
$el = $childs_new->item($j);
$code = $el->nodeValue;
if (($code == "USD") || ($code == "EUR")) $data = $childs_new; // Přidejte potřebné měny do pole
}
}
/* Procházet pole s údaji o měně */
pro ($i = 0; $i< count($data); $i++) {
$seznam = $data[$i];
pro ($j = 0; $j< $list->délka; $j++) (
$el = $seznam->položka($j);
/* Zobrazit směnné kurzy */
if ($el->nodeName == "Jméno") echo $el->nodeValue." - ";
elseif ($el->nodeName == "Value") echo $el->nodeValue."
";
}
}
?>

Snažil jsem se pečlivě komentovat kód, takže by neměly být problémy s jeho pochopením. Abyste pochopili, proč je jich tolik a proč takové cykly, a také odkud pocházejí určité podmínky, důrazně doporučuji, abyste sledovali odkaz z kódu (stačí nahradit datum). Pak uvidíš XML dokument, a bude pro vás mnohem snazší pochopit, proč byl takový kód napsán.

Dobré odpoledne drazí přátelé. Jak víte, nedávno (11. února) došlo v Kazachstánu k další devalvaci, toto „černé úterý“, jak jej mnozí na internetu nazývali, zasáhlo mnohé do kapsy. Další negativní článek na toto téma psát nebudu. Myslím, že to není nutné. Co je hotovo, je hotovo. Ale onoho nešťastného dne mě velmi pobouřilo, že nikde na internetu nebylo možné zjistit přesný kurz dolaru, eura či jiných devizy. Všechny známé i neznámé (ahoj google) mi nebyly dostupné. Možná některé stránky upadly v nemilost kazašských uživatelů a nebyly připraveny na takovou zátěž uživatelů. Faktem ale zůstává, že stránky nefungovaly.

A večer, když mé vášně z devalvace začaly opadat a mé nervy se začaly uklidňovat, rozhodl jsem se, že si musím napsat malý kurzový informátor na svůj útulný malý blog. Jak jsem řekl výše, nechtěl jsem používat widgety jiných stránek, jelikož tyto stránky "lhaly", když celý kaznet chtěl znát tento zatracený kurz. :) Níže je skript php informer, myslím, že skript nepotřebuje komentáře:

$částka = "1";
$od = "USD";
$od = "EUR";
$from = "RUB";
$to="KZT";
$i=0;
zatímco ($i<= 2){
$i++;
$get = explode(" ",$get);
$get = explode("
",$get);


";
}
?>

Skript je univerzální, můžete měnit proměnnou $to na jinou měnu, na kterou chcete převést, a také zvýšit nebo změnit pole $from[?], přidejte další měny, jen nezapomeňte změnit podmínku smyčky, pokud jste zvýšili počet stažených měn. Identifikátor (název) měn získáte z odkazu - https://www.google.com/finance/converter. Jak jste pravděpodobně pochopili, skript analyzuje tuto stránku Google ve smyčce a bere informace, které potřebuje.

Jak nainstalovat tento skript na váš web? Pokud máte wordpress engine, budete si muset nainstalovat plugin " Widget PHP kódu"a vyberte tento widget a přidejte tam veškerý kód. Toto je nejjednodušší způsob. Pokud dojde k problému, můžete plugin vždy zakázat a vše se vrátí tak, jak bylo. Nenabízím složité možnosti instalace skriptu. Můžete mi poslat e-mail a já se vám pokusím pomoci. Doufám, že vám tento článek pomohl. :)

P.S: Pro sebe jsem trochu optimalizoval skript (přidal caching) a dal cronu za úkol aktualizovat skript jednou za hodinu.Moje verze ukládá soubor * .html a já ho zobrazuji ve widgetech, přes ajax.

// Spustí ukládání do vyrovnávací paměti výstupu
ob_start();

$částka = "1";
$od = "USD";
$od = "EUR";
$from = "RUB";
$to="KZT";
$i=0;
zatímco ($i<= 2){
$i++;
$get = file_get_contents("https://www.google.com/finance/converter?a=$amount&from=$from[$i]&to=$to");
$get = explode(" ",$get);
$get = explode("
",$get);
$converted_amount = preg_replace("/[^0-9\.]/", null, $get);
$převedená_částka = round($převedená_částka,2);
echo $amount." ".$from[$i]." = ".$converted_amount." ".$to."
";
}

// uložit zachycený výstup do souboru .html
file_put_contents("měna.html", ob_get_contents());
// ukončení ukládání do vyrovnávací paměti a zobrazení stránky
ob_end_flush();
?>

Skript uložte ve formátu *.php, je vhodné jej uložit do samostatné složky (například do složky "scripts", aby nedošlo k ucpání webu. Poté bude potřeba přidat úkol do cron, přistupujte ke skriptu každých n hodin. A jednou přes prohlížeč ručně otevřete skript tak, aby vytvořil soubor html, na který se v budoucnu odkážeme. Dále můžete skript zobrazit ve widgetech prostřednictvím prvku iframe:


funkce show_temp()
{
$.ajax((
url: "http://yoursite/scripts/currency.html",
cache: false
úspěch: funkce(html)(
$("#měna").html(html);
}
});
}
$(document).ready(function()(
show_temp();
});

Tento druh výstupu vám umožní změnit velikost písma, barvu písma nebo přidat další efekty pomocí CSS (Cascading Style Sheet).

Optimalizovaná verze skriptu nenačte server a neustále přistupuje na google. Ukládání do mezipaměti můžete implementovat jinak a kontrolovat podle data, abyste nepoužívali cron. Osobně jsem ale vycházel z jednoduchého. Nerad jsem chytrý . :)

Rozbitá pračka? 1v.kz pomůže! - Opravy praček v Almaty:

Profesionálové ze všech částí města

V některých případech se při práci s obchodem stává nutností získat aktuální informace o směnném kurzu konkrétní měny. Centrální banka je nejlepším zdrojem takových dat a vzhledem k tomu, že poskytuje otevřené a včasné informace o směnném kurzu ve formátu XML, je hřích je nevyužít.

Tato funkce vypadá takto:

Funkce get_currency($currency_code, $format) ( $date = date("d/m/Y"); // Aktuální datum $cache_time_out = "3600"; // Životnost mezipaměti v sekundách $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("Value")->Hodnota), $formát); )

Obsahuje řádky:

$datum = datum("d/m/Y"); // Aktuální datum $cache_time_out = "3600"; // Životnost mezipaměti v sekundách

jsou zodpovědné za datum (v našem případě je to aktuální) a životnost cache, resp. Vzhledem k tomu, že centrální banka neaktualizuje měnová data tak často, neměli byste ho jen tak obtěžovat při každém jejich použití. Hodnoty v těchto řádcích můžete změnit (volitelně) na své vlastní.

Použití funkce je následující:

echo get_currency("USD", 3);

Tady " americký dolar“ je symbolický kód měny (v našem případě je to americký dolar) a „ 3 “ – řada symbolů za čárkou.

Přijatelný seznam měn poskytnutý Centrální bankou Ruské federace (v době psaní tohoto článku) ve formě „kódu měny – nominální hodnota a název“:

AUD - 1 australský dolar AZN - 1 ázerbájdžánský manat GBP - 1 britská libra šterlinků AMD - 100 arménských dramů BYN - 1 běloruský rubl BGN - 1 bulharský lev BRL - 1 brazilský real HUF - 100 HUF HKD - 10 hongkongských dolarů 10 dánských DKK - koruna USD - 1 americký dolar EUR - 1 euro INR - 100 indických rupií KZT - 100 kazašských tenge CAD - 1 kanadský dolar KGS - 100 kyrgyzských somů CNY - 10 čínských juanů MDL - 10 MDL NOK - 10 norských korun PLN - 1 RON polský złoty – 1 rumunský leu XDR – 1 SDR (zvláštní práva čerpání) SGD – 1 singapurský dolar TJS – 10 tádžických somoni TRY – 1 turecká lira TMT – 1 nový turkmenský manat UZS – 10 000 UZS UAH – 10 ukrajinských hřiven Kč – 10 Kč SEK - 10 SEK CHF – 1 švýcarský frank ZAR – 10 jihoafrických randů KRW – 1 000 ROK výher

Doufám, že funkce najde své místo ve vašem projektu. Pokud máte nějaké dotazy nebo se vám něco zdálo nepochopitelné - určitě o tom napište do komentářů pod tento článek.

Líbil se vám článek? Sdílej to