Центральный банк Российской Федерации (ЦБ РФ) публикует официальные курсы валют каждый день. Эти данные используются в бухгалтерии, финансовом планировании, онлайн‑конвертерах и в самых разных веб‑приложениях. В статье мы подробно разберём, где находится архив курсов ЦБ РФ, как получать данные в удобных форматах (XML, JSON), как работать с API и как быстро внедрять конвертер валют на свой сайт.
Содержание
- Что такое архив курсов ЦБ РФ?
- Где находятся файлы архива?
- Форматы данных: XML, JSON, CSV
- API ЦБ РФ: как получать актуальные и исторические курсы
- Онлайн‑конвертер валют: принципы работы
- Пример использования в PHP
- Пример использования в JavaScript (fetch)
- Лучшие практики и типичные ошибки
- FAQ
Что такое архив курсов ЦБ РФ?
Архив – это набор файлов, в которых хранится информация о курсах валют за каждый день с момента начала их публикации. Каждый файл содержит:
- Дата публикации;
- Код валюты (USD, EUR, GBP, CNY и т.д.);
- Официальный курс (обычно «кросс‑курс» к рублю);
- Дополнительные параметры: «внутренний», «внешний», «средний» курс.
Данные архивируются автоматически, поэтому пользователь может получить курс любой валюты на любую прошедшую дату – от 1992 года до текущего дня.
Где находяться файлы архива?
Официальный сайт ЦБ РФ (www.cbr.ru) предоставляет два основных способа доступа к архиву:
- Через веб‑интерфейс – страница «Курсы валют» → «Архив» с формой выбора даты.
- Через файловую структуру сервера – в большинстве Linux‑систем, где установлен скрипт‑парсер, данные кэшируются в каталоге
/var/cache/cbr/. Там находятся файлы:daily_xml.xml– курс за текущий день в XML;daily_json.js– курс за текущий день в JSON;archive_YYYYMMDD.xml– архивные файлы за конкретную дату.
Для большинства разработчиков удобнее работать именно с кэшем в /var/cache/cbr/, потому что файлы обновляются автоматически каждый день и доступны без лишних запросов к внешнему API.
Форматы данных: XML, JSON, CSV
ЦБ РФ публикует курсы в нескольких форматах:
| Формат | Плюсы | Минусы |
|---|---|---|
| XML | Строгая схема, легко парсится в PHP (SimpleXML), поддерживается большинством языков. | Более «тяжёлый» по размеру, требуется парсинг. |
| JSON | Лёгкий, читаемый, удобно использовать в JavaScript и современных бек‑энд языках. | Не имеет официальной XSD‑схемы, но в реальном мире проблем нет. |
| CSV | Самый простой формат для импорта в Excel/Google Sheets. | Отсутствует в официальном кэше, но может быть сгенерирован вручную. |
Ниже пример фрагмента daily_json.js (данные актуальны на 04:19:15):
{
"Date": "2026-07-07T00:00:00",
"Valute": {
"USD": {
"ID": "R01235",
"NumCode": "840",
"CharCode": "USD",
"Nominal": 1,
"Name": "Доллар США",
"Value": 98.7523,
"Previous": 98.6400
},
"EUR": {
"ID": "R01239",
"NumCode": "978",
"CharCode": "EUR",
"Nominal": 1,
"Name": "Евро",
"Value": 106.3421,
"Previous": 106.2100
}
// … остальные валюты
}
}
API ЦБ РФ: как получать актуальные и исторические курсы
Для автоматизированных решений ЦБ РФ предлагает простой HTTP‑интерфейс. Запросы делаются методом GET к URL‑адресу:
- Текущий курс в XML:
https://www.cbr.ru/scripts/XML_daily.asp - Текущий курс в JSON (через сторонний сервис, например cbr-xml-daily.ru):
https://www.cbr-xml-daily.ru/daily_json.js - Курс на конкретную дату (XML):
https://www.cbr.ru/scripts/XML_daily.asp?date_req=DD/MM/YYYY
Пример запроса курса доллара на 01 января 2025 года:
https://www.cbr.ru/scripts/XML_daily.asp?date_req=
Ответ – XML‑документ, в котором в теге <Valute ID="R01235"> находится нужный курс.
Онлайн‑конвертер валют: принципы работы
Конвертер – это небольшое веб‑приложение, которое:
- Получает актуальные курсы (обычно из
daily_json.js). - Сохраняет их в кэш (файл, Redis, Memcached) на несколько минут, чтобы не перегружать сервер ЦБ.
- Выполняет математическую операцию:
result = amount * rate_target / rate_source. - Отображает результат пользователю в реальном времени.
Важные детали:
- Курсы обновляются в одну минуту после изменения на сайте ЦБ, поэтому конвертер «живой».
- Для точности следует учитывать Nominal – количество единиц валюты, к которым привязан курс (например, 10 JPY).
- Если требуется исторический расчёт, берём курс за нужную дату из архива и используем его в формуле.
Пример использования в PHP
Ниже простой скрипт, который читает файл /var/cache/cbr/daily_json.js, декодирует JSON и выводит курс доллара к рублю.
<?php
// Путь к кэшу (может отличаться в зависимости от конфигурации)
$cacheFile = '/var/cache/cbr/daily_json.js';
// Если кэш устарел более чем на 5 минут – обновляем его
if (!file_exists($cacheFile) || time ⎻ filemtime($cacheFile) > 300) {
$jsonUrl = 'https://www.cbr-xml-daily.ru/daily_json.js';
$jsonData = file_get_contents($jsonUrl);
if ($jsonData === false) {
die('Не удалось загрузить данные от ЦБ РФ');
} file_put_contents($cacheFile, $jsonData);
} else {
$jsonData = file_get_contents($cacheFile);
}
// Декодируем JSON
$data = json_decode($jsonData, true);
if ($data === null) {
die('Ошибка парсинга JSON');
}
// Получаем курс USD
$usd = $data['Valute']['USD'];
$rate = $usd['Value']; // Текущий курс
$previous = $usd['Previous']; // Вчерашний курс
echo "Обменный курс USD по ЦБ РФ на сегодня: {$rate} руб.
";
echo "Вчерашний курс: {$previous} руб.";
?>
В примере используется кэш‑файл, чтобы не делать запрос к внешнему сервису каждый раз.
Пример использования в JavaScript (fetch)
Для клиентских приложений удобно получать данные напрямую через fetch. Ниже пример, который выводит курс евро в элемент с id eur-rate:
<html lang="ru">
<head>
<meta charset="UTF-8">
<>Конвертер валют</>
</head>
<body>
<h2>Курс евро (EUR) по ЦБ РФ</h2>
<div id="eur-rate">Загрузка...</div>
<script>
const url = 'https://www.cbr-xml-daily.ru/daily_json.js';
fetch(url)
.then(response => {
if (!response.ok) throw new Error('Network response was not ok');
return response.json;
}) .then(data => {
const eur = data.Valute.EUR;
const rate = eur.Value.toFixed(4);
document.getElementById('eur-rate').textContent = `1 EUR = ${rate} RUB`;
})
.catch(err => {
console.error('Ошибка загрузки курса:', err);
document.getElementById('eur-rate').textContent = 'Не удалось получить курс';
});
</script>
</body> Лучшие практики и типичные ошибки
- Кешировать данные. Не делайте запрос к API ЦБ более 5‑10 раз в минуту – это может привести к блокировке IP.
- Учитывайте Nominal. Для некоторых валют (например, JPY) курс указывается за 100 единиц, а не за 1.
- Обрабатывайте ошибки. Сетевые сбои, изменение структуры JSON/XML – всегда проверяйте
issetилиtry/catch. - Не храните курсы «вечно». При необходимости исторических данных используйте архивные файлы, а не кэш текущего дня.
- Соблюдайте тайм‑зону. Данные ЦБ публикуются в 00:00 МСК, поэтому при запросе в начале дня может быть «вчерашний» курс.
- Защищайте публичные API‑ключи. Если вы используете сторонний сервис (например,
cbr-xml-daily.ru) с токеном, храните его в серверных переменных, а не в клиентском коде.
Часто задаваемые вопросы (FAQ)
Как получить курс валюты за произвольную дату?
Сформируйте запрос к XML‑файлу с параметром date_req=DD/MM/YYYY. Пример: https://www.cbr.ru/scripts/XML_daily.asp?date_req=. Затем распарсите XML и найдите нужный CharCode.
Можно ли использовать данные ЦБ в коммерческих проектах?
Да, официальные курсы находятся в открытом доступе. Однако рекомендуется указать источник («Источник: Центральный банк Российской Федерации») и не передавать данные третьим лицам без согласия.
Почему в некоторых конвертерах курс отличается от того, что я вижу в мобильном банке?
Банки могут использовать собственные «внутренние» курсы, которые отличаются от официальных (например, добавляют маржу). Конвертер, построенный на данных ЦБ, всегда показывает официальные значения.
Как ускорить работу конвертера при большом трафике?
Рекомендуется:
- Хранить JSON/XML в оперативной памяти (Redis, APCu).
- Обновлять кэш раз в минуту (cron‑задача).
- Предзагружать список валют в JavaScript и выполнять расчёты полностью на клиенте.
Можно ли получить курс в формате CSV?
Прямой CSV‑файл не предоставляется, но его легко сформировать из XML/JSON, используя скрипт на PHP, Python или любой другой язык.
Архив курсов ЦБ РФ и конвертер валют – мощный инструмент для любого проекта, связанного с финансами. Благодаря открытым API, формату JSON и удобному кэшу в /var/cache/cbr/ вы можете получать актуальные данные в реальном времени, а также работать с историческими курсами. Следуя рекомендациям из этой статьи (кеширование, учёт Nominal, обработка ошибок), вы построите надёжный и быстрый сервис, который будет полезен как пользователям, так и бизнес‑задачам.
Если у вас возникли вопросы – оставляйте комментарии, будем рады помочь!