Інформер курси валют цб рф на php. Як отримати офіційні курси валют на дату на PHP

Вклади

Багато хто з Вас неодноразово бачив, що на деяких сайтах виводяться курси валют. Зрозуміло, адміністратори цих сайтів самі їх щодня не змінюють (сподіваюся). Вони їх підвантажують із сайту ЦентроБанку. І в цій статті я дам код PHP-скрипт для завантаження курсів валют з сайту ЦентроБанкута виведення їх на сторінку.

Наводжу відразу код скрипту:

$date = date("d/m/Y"); // Сьогоднішня дата у необхідному форматі
$link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date"; // Посилання на XML-файл із курсами валют
$content = file_get_contents($link); // Завантажуємо вміст сторінки
$dom = новий domDocument("1.0", "cp1251"); // Створюємо DOM
$dom->loadXML($content); // Завантажуємо до DOM XML-документ
$root = $dom->documentElement; // Беремо кореневий елемент
$childs = $root->childNodes; // Отримуємо список дочірніх елементів
$ data = array (); // Набір даних
for ($i = 0; $i< $childs->length; $i++) (
$childs_new = $childs->item($i)->childNodes; // Беремо дочірні вузли
for ($j = 0; $j< $childs_new->length; $j++) (
/* Шукаємо цікаві для нас валюти */
$el = $childs_new->item($j);
$code = $el->nodeValue;
if (($code == "USD") || ($code == "EUR")) $data = $childs_new; // Додаємо необхідні валюти до масиву
}
}
/* Перебір масиву з даними про валюти */
for ($i = 0; $i< count($data); $i++) {
$list = $data[$i];
for ($j = 0; $j< $list->length; $j++) (
$el = $list->item($j);
/* Виводимо курси валют */
if ($el->nodeName == "Name") echo $el->nodeValue." - ";
elseif ($el->nodeName == "Value") echo $el->nodeValue." рублів
";
}
}
?>

Я постарався код ретельно прокоментувати, тож із його розумінням проблем виникнути не повинно. Також, щоб зрозуміти, чому стільки і чому саме такі цикли, а також звідки беруться певні умови, я настійно рекомендую зайти за посиланням з коду (лише дату підставте). Тоді Ви побачите XML-документ, і Вам буде набагато простіше зрозуміти, чому саме такий код був написаний.

Доброго дня любі друзі. Як ви знаєте, нещодавно (11 лютого) у нас у Казахстані відбулася чергова девальвація, цей "чорний вівторок" як його назвали багато хто в інтернеті, вдарив по кишені багатьох. Не писатиму чергову негативну статтю на цю тему. Я вважаю, що це не потрібне. Що зроблено те зроблено. Але того злощасного дня мене дуже обурило те, що ніде в інтернеті не можна було дізнатися точний курс долара, євро чи іншого. іноземної валюти. Усі відомі та не відомі (привіт google) мені сайти були не доступні. Можливо, деякі сайти потрапили немилість казахстанських користувачів і не були готові до такого навантаження користувачів. Але факт залишається фактом, що сайти не працювали.

І ввечері, коли у мене пристрасті про девальвацію почали вщухати і нерви почали приходити у свій спокійний стан, вирішив, що треба написати собі маленький інформер курсу валют на свою затишну блузку. Як я сказав вище віджети інших сайтів я не хотів використовувати, так як ці сайти "лежали" коли весь стратить хотів дізнатися, цей чортовий курс валют. :) Нижче наводжу скрипт інформера на php, думаю скрипт не потребує коментарів:

$amount = "1";
$from = "USD";
$from = "EUR";
$from = "RUB";
$ to = "KZT";
$i = 0;
while($i<= 2){
$i++;
$get = explode(" ", $ get);
$get = explode("
", $ get);


";
}
?>

Універсальний скрипт, Ви можете змінити змінну $toна іншу валюту в яку хочете конвертувати, а також збільшити або змінити масиви $from[?], додати інші валюти, тільки не забудьте змінити умову циклу, якщо ви збільшили кількість валют, що виводяться. Ідентифікатор (назва) валют Ви можете взяти за посиланням - https://www.google.com/finance/converter. Як ви напевно зрозуміли, скрипт парсить у циклі цю сторінку google"a і забирає необхідну для себе інформацію.

Як встановити цей скрипт на власний веб-сайт? Якщо у вас движок wordpress, вам потрібно буде встановити плагін. PHP Code Widgetі вибрати цей віджет і додати весь код туди. Це найлегший спосіб. Якщо виникла проблема, ви завжди можете відключити плагін і все повернеться як було. Сподіваюся, ця стаття була вам корисною.

PS: Для себе я трохи оптимізував скрипт (додав кешування) і дав завдання cron" раз на годину оновлювати скрипт. Мій варіант зберігає *.html файл і його я виводжу у віджетах, через ajax.

// Start output buffering
ob_start();

$amount = "1";
$from = "USD";
$from = "EUR";
$from = "RUB";
$ to = "KZT";
$i = 0;
while($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);
$converted_amount = round($converted_amount,2);
echo $amount." ".$from[$i]." = ".$converted_amount." ".$to."
";
}

// saving captured output to .html file
file_put_contents("currency.html", ob_get_contents());
// end buffering and displaying page
ob_end_flush();
?>

Зберігайте скрипт у форматі *.php, бажано зберегти в окремій папці (наприклад у папці "scripts", щоб не засмічувати сайт. Після вам потрібно в кроні додати завдання, раз n годин звертатися до скрипту. І один через браузер раз вручну звертаєтесь до скрипту, щоб він створив html файл, до якого ми надалі звертатимемося.

‹script›
function show_temp()
{
$.ajax((
url: "http://вашсайт/scripts/currency.html",
cache: false,
success: function(html)(
$("#currency").html(html);
}
});
}
$(document).ready(function()(
show_temp();
});

Такий спосіб виведення дозволить вам змінювати розмір шрифту, колір шрифту або додати будь-які інші ефекти через CSS (каскадну таблицю стилів).

Оптимізований варіант скрипту, не буде навантажувати сервер і постійно звертатися до google"у. Ви можете інакше реалізувати кешування, і перевіряти за датою, щоб не використовувати крон. Але особисто я виходив з простого. Не люблю мудрувати. :)

Зламалася пральна машина? 1v.kz допоможе! - Ремонт пральних машин в Алмати:

Фахівці з усіх районів міста

У деяких випадках під час роботи з комерцією виникає необхідність отримання актуальної інформації про курс тієї чи іншої валюти. Центробанк – найкраще джерело таких даних, а враховуючи те, що він надає відкриту та своєчасно оновлювану інформацію про курс валют у форматі XML – гріх нею не скористатися.

Ця функція виглядає наступним чином:

Function get_currency($currency_code, $format) ( $date = date("d/m/Y"); // Поточна дата $cache_time_out = "3600"; // Час життя кешу в секундах $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("Valute")->Value), $format); )

У ній рядки:

$date = date("d/m/Y"); // Поточна дата $cache_time_out = "3600"; // Час життя кешу в секундах

відповідають за дату (у нашому випадку вона поточна) та час життя кешу відповідно. Оскільки ЦБ не так часто оновлює дані про валюти, не варто докучати йому просто так при кожному їх використанні. Значення у цих рядках (за бажанням) можете змінити на свої.

Використання функції таке:

Echo get_currency("USD", 3);

Тут « USD» – символьний код валюти (у нашому випадку – це долар США), а « 3 - кількість знаків після коми.

Допустимий перелік валют, що надаються ЦБ РФ (на момент написання статті) у вигляді «символьний код валюти – номінал та назва»:

AUD – 1 австралійський долар AZN – 1 азербайджанський манат GBP – 1 фунт стерлінгів Сполученого королівства AMD – 100 вірменських драмів BYN – 1 білоруський рубль BGN – 1 болгарський лев BRL – 1 бразильський реал HUF – 10 K 0 датських крон USD – 1 долар США EUR – 1 євро INR – 100 індійських рупій KZT – 100 казахстанських тенге CAD – 1 канадський долар KGS – 100 киргизьких сомів CNY – 10 китайських юанів MDL – 10 молдавських леїв NOK – 1 злотий RON – 1 румунський лей XDR – 1 СДР (спеціальні права запозичення) SGD – 1 сінгапурський долар TJS – 10 таджицьких сомоні TRY – 1 турецька ліра TMT – 1 новий туркменський манат UZS – 10 000 узбецьких сум UAH 0 чеських крон SEK - 10 шведських крон CHF - 1 швейцарський франк ZAR - 10 південноафриканських рендів KRW - 1 000 геть Республіки Корея

Сподіваюся, що функція знайде своє місце у вашому проекті. Якщо залишилися питання чи щось здалося незрозумілим – обов'язково пишіть про це у коментарях під цією статтею.

У деяких випадках під час роботи з комерцією виникає необхідність отримання актуальної інформації про курс тієї чи іншої валюти. Центробанк – найкраще джерело таких даних, а враховуючи те, що він надає відкриту та своєчасно оновлювану інформацію про курс валют у форматі XML – гріх нею не скористатися.

Ця функція виглядає наступним чином:

Function get_currency($currency_code, $format) ( $date = date("d/m/Y"); // Поточна дата $cache_time_out = "3600"; // Час життя кешу в секундах $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("Valute")->Value), $format); )

У ній рядки:

$date = date("d/m/Y"); // Поточна дата $cache_time_out = "3600"; // Час життя кешу в секундах

відповідають за дату (у нашому випадку вона поточна) та час життя кешу відповідно. Оскільки ЦБ не так часто оновлює дані про валюти, не варто докучати йому просто так при кожному їх використанні. Значення у цих рядках (за бажанням) можете змінити на свої.

Використання функції таке:

Echo get_currency("USD", 3);

Тут « USD» – символьний код валюти (у нашому випадку – це долар США), а « 3 - кількість знаків після коми.

Допустимий перелік валют, що надаються ЦБ РФ (на момент написання статті) у вигляді «символьний код валюти – номінал та назва»:

AUD – 1 австралійський долар AZN – 1 азербайджанський манат GBP – 1 фунт стерлінгів Сполученого королівства AMD – 100 вірменських драмів BYN – 1 білоруський рубль BGN – 1 болгарський лев BRL – 1 бразильський реал HUF – 10 K 0 датських крон USD – 1 долар США EUR – 1 євро INR – 100 індійських рупій KZT – 100 казахстанських тенге CAD – 1 канадський долар KGS – 100 киргизьких сомів CNY – 10 китайських юанів MDL – 10 молдавських леїв NOK – 1 злотий RON – 1 румунський лей XDR – 1 СДР (спеціальні права запозичення) SGD – 1 сінгапурський долар TJS – 10 таджицьких сомоні TRY – 1 турецька ліра TMT – 1 новий туркменський манат UZS – 10 000 узбецьких сум UAH 0 чеських крон SEK - 10 шведських крон CHF - 1 швейцарський франк ZAR - 10 південноафриканських рендів KRW - 1 000 геть Республіки Корея

Сподіваюся, що функція знайде своє місце у вашому проекті. Якщо залишилися питання чи щось здалося незрозумілим – обов'язково пишіть про це у коментарях під цією статтею.

В інтернеті чимало скриптів, які показують курси валют. Але мені потрібен був курс долара та євро від центрального банку. Я вирішив пошукати скрипти, які покажуть офіційні курси валют на дату. Я натрапив на цікаву статтю jQuery сортування таблиці. Там у скрипті " PHP парсер курсів валютграбується xml-документ за допомогою регулярних виразів. У пограбуванні коду активно використовуються регулярні вирази. Скрипт класно працює, але має свої особливості. Він виводить таблицю в HTML з великою кількістю валют. Мені потрібно сформувати з таблиці з курсами валют масив JSON. Цей масив подібний до ковбаси. Саме так називають програмісти такий масив. Бувають дуже великі ковбаси у великій кількості)))

/* * getArr() * курси валют від центрального банку * відбувається парсинг xml-документа * */ function 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"),"" ));; ,$CharCode); preg_match("~ (.*?) ~i",$data,$NumCode); $NumCode; ~i",$data,$Nominal); $arr[$CharCode]["nominal"] = $Nominal ; preg_match("~ (.*?) ~i",$data,$Name); $arr[$ CharCode]["name"].= toUtf8($Name); preg_match("~ (.*?) ~i",$data,$Value); ; $i++; ) return $arr; ) ) function getContentPage($url) ( $c = curl_init($url); curl_exec($c); curl_close($c); return $text; ) $arr = getArr(); echo json_encode($arr); /* ( "EUR":("num_code":"978", "nominal":"1", "name":"\u0435", "value":"63,6090") "USD":("num_code":"840", "nominal":"1", "name":"\u0414" "58,0374") )*/

Ви можете переглянути як курс валюти, так і курс за вчорашній день. Функція strtotime("+0 day") дозволяє змінювати час. Звичайно скільки нулів не плюсуй однаково значення змінної не зміниться. Я залишив цю частину коду для того, щоб у будь-який момент можна було змінити час. Мені довелося трохи переробити масив. Я використав змінну $CharCode як ключ для масиву. У моєму великому масиві є безліч інших масивів і звертатися до певного масиву можна лише за ключом (EUR). У моєму випадку змінна $CharCode приймає такі значення:

  1. AUD => Австралійський долар
  2. AZN => Азербайджанський манат
  3. GBP => Фунт стерлінгів Сполученого Королівства
  4. AMD => Вірменські драми
  5. BYR => Білоруські рублі
  6. BGN => Болгарський лев
  7. BRL => Бразильський реал
  8. HUF => Угорський форинт
  9. DKK => Датських крон
  10. USD => Долар США
  11. EUR => Євро
  12. INR => Індійських рупій
  13. KZT => Казахстанський тенге
  14. CAD => Канадський долар
  15. KGS => Киргизький сом
  16. CNY => Китайський юань
  17. MDL => Молдавських леїв
  18. NOK => Норвезьких крон
  19. PLN => Польський злотий
  20. RON => Новий румунський лей
  21. XDR => СДР (спеціальні права запозичення)
  22. SGD => Сінгапурський долар
  23. TJS => Таджицький сомоні
  24. TRY => Турецька ліра
  25. TMT => Новий туркменський манат
  26. UZS => Узбецький сум
  27. UAH => Українська гривня
  28. CZK => Чеських крон
  29. SEK => Шведських крон
  30. CHF => Швейцарський франк
  31. ZAR => Південноафриканський ренд
  32. KRW => Он Республіки Корея
  33. JPY => Японська єна

Мене цікавить лише USD та EUR. Я не став видаляти з