Информер курса валют ЦБ РФ   •   Магазин расширений
13 164 просм
16 комм
Поделиться:

Получаем курсы валют с сайта ЦентроБанка на PHP

В некоторых случаях необходимо узнать актуальную информацию о текущем курсе валют. Кто, как не ЦентроБанк, лучше всего справится с этой задачей?

Обратите внимание, что в нашем арсенале есть готовый информер валют, который вы бесплатно можете установить на свой сайт. Подробнее здесь.

Поскольку сайт ЦентроБанка предоставляет информацию о курсе валют на текущий день и прошедшие в формате XML, то ею мы и воспользуемся для написания модуля.

<?php

	header("Content-Type: text/html; charset=utf-8");
	
	$date = date("d/m/Y"); // Текущая дата
	$content = simplexml_load_file("https://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date);
	
	foreach($content->Valute as $cur) {
	
		if($cur->NumCode == 036) { $aud = str_replace(",", ".", $cur->Value); } // Австралийский доллар
		if($cur->NumCode == 826) { $gbr = str_replace(",", ".", $cur->Value); } // Фунт стерлингов Соединенного королевства
		if($cur->NumCode == 974) { $byr = str_replace(",", ".", $cur->Value); } // Белорусских рублей
		if($cur->NumCode == 208) { $dkk = str_replace(",", ".", $cur->Value); } // Датских крон
		if($cur->NumCode == 840) { $usd = str_replace(",", ".", $cur->Value); } // Доллар США
		if($cur->NumCode == 978) { $eur = str_replace(",", ".", $cur->Value); } // Евро
		if($cur->NumCode == 352) { $isk = str_replace(",", ".", $cur->Value); } // Исландских крон
		if($cur->NumCode == 398) { $kzt = str_replace(",", ".", $cur->Value); } // Казахстанских тенге
		if($cur->NumCode == 124) { $cad = str_replace(",", ".", $cur->Value); } // Канадский доллар
		if($cur->NumCode == 578) { $nok = str_replace(",", ".", $cur->Value); } // Норвежских крон
		if($cur->NumCode == 960) { $xdr = str_replace(",", ".", $cur->Value); } // СДР (специальные права заимствования)
		if($cur->NumCode == 702) { $sgd = str_replace(",", ".", $cur->Value); } // Сингапурский доллар
		if($cur->NumCode == 949) { $try = str_replace(",", ".", $cur->Value); } // Турецкая лира
		if($cur->NumCode == 980) { $uah = str_replace(",", ".", $cur->Value); } // Украинских гривен
		if($cur->NumCode == 752) { $sek = str_replace(",", ".", $cur->Value); } // Шведских крон
		if($cur->NumCode == 756) { $chf = str_replace(",", ".", $cur->Value); } // Швейцарский франк
		if($cur->NumCode == 392) { $jpy = str_replace(",", ".", $cur->Value); } // Японских иен
		
	}
	
?>

Как вы поняли, этот скрипт позволяет вам получать курсы следующих валют: австралийского доллара, фунта стерлингов Соединенного королевства, белорусского рубля, датской кроны, доллара США, eвро, исландской кроны, казахстанского тенге, канадского доллара, норвежской кроны, СДР, сингапурского доллара, турецкой лиры, украинской гривны, шведской кроны, швейцарского франка, японской йены.

Использование следующее:

echo "Доллар - ".$usd;

Где $usd – необходимая валюта (в нашем случае - доллар США).

Помимо того, что курс валют предоставляется на текущий день, его можно также получить и на прошедшие даты. Для этого в скрипте

date("d/m/Y")

замените на нужную вам дату в формате «dd/mm/YYYY».

«Pandoge» - помощник веб-мастера
16
комментариев
3.11 в 22:43

А если нужен только доллар? Перебор foreach не нужен?

  • 0

Дмитрий, да, foreach не нужен. Пример на долларе будет такой:

echo $content->xpath('Valute[@ID="R01235"]')[0]->Value;

  • 5
4.02 в 14:21

классная вещь, а можно сделать так же, только с казахстанского национального банка http://www.nationalbank.kz/rss/rates.xml ?

  • 0

Родион, можно. В ближайшее время сделаем.

-----

Готово - https://www.pandoge.com/moduli_i_skripty/poluchaem-kursy-valyut-s-sayta-nacionalnogo-banka-kazahstana-na-php

  • 5
13.02 в 01:30

Здравствуйте!

можно сделат http://cbu.uz/uzc/arkhiv-kursov-valyut/xml/

  • 0
16.02 в 10:57

А курсы получаем только по отношению к рублю?

есть ли возможность например EURJPY?

  • 2
26.02 в 15:47

Здравствуйте, как вывести дату и разницу, наподобие вашего информера?

  • 0

Павел, делаете два запроса - 1 запрос на сегодняшнюю дату, а 2 - на вчерашнюю.

Получаете данные за оба дня и вычитаете одно из другого.

  • 8
6.03 в 19:26

Работает конечно, но через раз! После ctrl+f5 то показывает то пропадает как решить?

  • 0

Павел, Я даже не представляю как вы там реализовали вывод, но предположу, что кэширование данных исправить эту ситуацию.

Грузите файл к себе на сервер и проверяйте: если файлу больше двух часов - значит нужно его обновить, если нет - то используете тот что на вашем сервере.

А вообще, обновлять файл можно и раз в день. ЦБ не так часто обновляет данные.

  • 9
13.04 в 21:37

Спасибо! Как подключить обработчик на DLE?

  • 0
12.05 в 04:20

Во-первых, в настройках системы можно указать критический порог изменения курса валюты в процентах или рублях. Если он превышен, незамедлительно отправляется sms и e-mail сообщения.

  • 0
22.06 в 11:32

а данный скрипт буден работать на сайте ( Opencart 2.3, https) ?

  • 0

Николай, Да.

  • 0
23.08 в 15:13

Добрый день

Как сделать вывод только двух знаков после запятой? Сейчас 4

  • 0

Андрей, нужную валюту оберните в round. На примере доллара это будет выглядеть так:

echo "Доллар - ".round($usd, 2);

  • 1
Гостям запрещено участвовать в обсуждениях сайта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
Подняться наверх