В последнее время технические ресурсы Банка России работают ненадежно. Усложнено получение данных о текущих курсах валют: от разработчиков требуют ставить специальные заголовки, данные не загружаются с первого раза. В следствие чего старые скрипты перестали работать.
Осложнение объясняют ведущейся на сервис DDoS атакой, но ведь нам от этого не легче.
1. Подключаете этот скрипт со встроенной библиотекой money.js.
<script src="https://www.cbr-xml-daily.ru/money.js"></script>
2. Конвертируете из любой валюты в любую по курсам ЦБ РФ.
fx(100).from("USD").to("RUB"); fx(15).from("USD").to("GBP");
Всё! Вот так просто.
Достаточно заменить старые ссылки на сервисы ЦБ РФ на ссылки на нашем ресурсе, и получать все те же самые данные без какой-либо переделки старых скриптов.
Если вы использовали такую ссылку для получения котировок на сегодня:
http://www.cbr.ru/scripts/XML_daily.asp
То вам подойдет любая из двух ниже, в зависимости от того, нужна ли вам перекодировка в UTF-8 или устроит исходная 1251:
https://www.cbr-xml-daily.ru/daily.xml https://www.cbr-xml-daily.ru/daily_utf8.xml
Если вы использовали английскую версию:
https://www.cbr.ru/scripts/XML_daily_eng.asp
То на замену вам подойдую любые из этих, с кодировкой 1251 или в UTF-8:
https://www.cbr-xml-daily.ru/daily_eng.xml https://www.cbr-xml-daily.ru/daily_eng_utf8.xml
Кроме файлов с курсами в формате XML на нашем ресурсе вы можете получить курсы валют в формате JSON и курсы ЦБ РФ в формате JSONP:
https://www.cbr-xml-daily.ru/daily_json.js https://www.cbr-xml-daily.ru/daily_jsonp.js
Для вашего удобства в последних есть курсы на сегодняшнюю и прошлую даты. Как использовать эти курсы.
Кроме того, доступны текущие курсы в формате, совместимом с библиотекой money.js и многими другими:
https://www.cbr-xml-daily.ru/latest.js
Время, которое вы бы потратили на переписывание и обновление старых приложений, теперь вы можете использовать и для более приятных занятий.
Нет ничего проще! Добавьте такой код где нужно показать курсы:
<div id="USD">Доллар США $ — 00,0000 руб.</div> <div id="EUR">Евро € — 00,0000 руб.</div>
И такой код в начале страницы в теге <head>:
<script> function CBR_XML_Daily_Ru(rates) { function trend(current, previous) { if (current > previous) return ' ▲'; if (current < previous) return ' ▼'; return ''; } var USDrate = rates.Valute.USD.Value.toFixed(4).replace('.', ','); var USD = document.getElementById('USD'); USD.innerHTML = USD.innerHTML.replace('00,0000', USDrate); USD.innerHTML += trend(rates.Valute.USD.Value, rates.Valute.USD.Previous); var EURrate = rates.Valute.EUR.Value.toFixed(4).replace('.', ','); var EUR = document.getElementById('EUR'); EUR.innerHTML = EUR.innerHTML.replace('00,0000', EURrate); EUR.innerHTML += trend(rates.Valute.EUR.Value, rates.Valute.EUR.Previous); } </script> <link rel="dns-prefetch" href="https://www.cbr-xml-daily.ru/" /> <script src="//www.cbr-xml-daily.ru/daily_jsonp.js" async></script>
Эта функция выгружает данные курсов и сохраняет их в статической переменной внутри функции, таким образом что при повторном вызове этой функции обращения к API не будет.
<?php function CBR_XML_Daily_Ru() { static $rates; if ($rates === null) { $rates = json_decode(file_get_contents('https://www.cbr-xml-daily.ru/daily_json.js')); } return $rates; } $data = CBR_XML_Daily_Ru(); echo "Обменный курс USD по ЦБ РФ на сегодня: {$data->Valute->USD->Value}\n";
Не пользуетесь PHP? Нет проблем! Страницы с курсом открываются медленней, чем без? Есть ответ! Вам нужно кешировать курсы. Они меняются не чаще раза в день, потому вы ничего не потеряете от обновления курсов раз в несколько часов.
Добавьте такой код в /etc/cron.hourly/cbr:
#!/bin/sh set -e mkdir -p /var/cache/cbr cd /var/cache/cbr for file in daily_utf8.xml daily.xml daily_eng.xml daily_eng_utf8.xml daily_json.js latest.js do wget --timestamping --no-verbose https://www.cbr-xml-daily.ru/$file done 2>&1 | xargs -I{} logger --tag $0 --id=$$ "{}"
Затем дайте права на выполнение:
sudo chmod +x /etc/cron.hourly/cbr
И сделайте первую загрузку:
sudo /etc/cron.hourly/cbr
Эта программа будет поддерживать самую актуальную версию данных о курсах валют во всех форматах в каталоге /var/cache/cbr/
Использовать их можно, например, так:
<?php $data = json_decode(file_get_contents('/var/cache/cbr/daily_json.js')); echo "Обменный курс USD по ЦБ РФ на сегодня: {$data->Valute->USD->Value}";
Или так:
import json with open('/var/cache/cbr/daily_json.js') as data_file: data = json.load(data_file) print(data['Valute']['USD']['Value'])
Да, вот так просто! Работает и оффлайн.
Раз, не более 5 запросов в секунду, 120 запросов в минуту с одного IP и не более 10000 запросов в сутки, пожалуйста. Если вам надо больше, то вы что-то делаете не так. Попробуйте использовать кеш данных курсов валют.
Два, разместите обратную ссылку на проект в одном из следующих форматов:
<a href="https://www.cbr-xml-daily.ru/">Курсы валют, API</a> <a href="https://www.cbr-xml-daily.ru/">API для курсов ЦБ РФ</a> <a href="https://www.cbr-xml-daily.ru/">Виджет курсов валют</a> <a href="https://www.cbr-xml-daily.ru/">Курсы ЦБ РФ в XML и JSON, API</a>
Администрация сайта оставляет за собой право закрыть доступ для IP и сайтов, нарушающих условия использования.
Помогите с оплатой услуг CDN для проекта. Услуги CDN и хостинг обходятся в сумму порядка 25600 рублей в месяц.
Спонсоры сайта имеют возможность обратиться к администрации сайта с вопросами и предложениями.