Привет, Хабр!

Хочу рассказать о нашем новом проекте cbrapi, который может здорово помочь всем, кто работает с финансовыми данными Центробанка России.

cbrapi - бесплатная библиотека с открытым исходным кодом на Python, которая превращает сложное взаимодействие с SOAP API ЦБ в простой и понятный инструмент.
Если вы когда-нибудь пытались работать напрямую с API Центробанка, то наверняка сталкивались с неудобностью SOAP-сервисов, XML-разборок и прочими неудобными стандартами.

Наша библиотека берет всю эту сложность на себя, оставляя вам чистый и удобный Python-интерфейс.

Вместо запутанных запросов вроде:

POST /DailyInfoWebServ/DailyInfo.asmx HTTP/1.1
Host: www.cbr.ru
Content-Type: text/xml; charset=utf-8
Content-Length: 356
SOAPAction: "http://web.cbr.ru/DragMetDynamic"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
               xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <DragMetDynamic xmlns="http://web.cbr.ru/">
      <fromDate>2024-01-01</fromDate>
      <ToDate>2024-12-31</ToDate>
    </DragMetDynamic>
  </soap:Body>
</soap:Envelope>

Теперь достаточно писать:

import cbrapi

cbrapi.get_metals_prices('2024-01-01', '2024-12-31')

Что такое SOAP API?

Банк России для доступа к данным использует SOAP API. Этот протокол немного устарел (появился в 1998 году). В современных проектах его почти полностью вытеснили REST и современные подходы вроде GraphQL и gRPC. Но в банковской среде SOAP всё еще встречается часто.

В отличие от REST в SOAP используется XML для форматирования данных и присутствуют строгие стандарты, которые делают его достаточно надежным и безопасным для передачи данных.

Установка cbrapi

Установка библиотеки делается просто.

pip install cbrapi

После этого можно импортировать и пользоваться библиотекой.

Курсы валют и цены золота

Импортируем библиотеку:

import cbrapi as cbr

Самая популярная часть базы данных ЦБ - это официальные курсы валют к рублю.

# Ознакомиться со списком доступных валют (более 150 наименований):
cbr.get_currencies_list()

После выбора конкретной валюты можно посмотреть ее историю и построить график.

df = cbr.get_time_series(symbol='USDRUB', first_date='2019-01-01', last_date='2020-12-31', period='M')
df.plot(title='График курса USDRUB')

Данные ЦБ для удобства дополнены нами в праздничные и выходные дни (курс в выходные - это курс предыдущего дня).

Полезными будут и данные по ценам драгметаллов, например, золота.

df = cbr.get_metals_prices(first_date='2020-10-15', last_date='2025-10-15', period='M')
df['GOLD'].plot(title='Цена на золото')

Другие полезные функции cbrapi

Кроме курсов валют в базе данных Цетнального банка есть еще много полезного.

История ключевой ставки:

cbr.get_key_rate('2005-01-01', '2025-10-01', period='M')  
# можно указать периодичность данных: месяц 'M' или день 'D'

Международные резервы Российской Федерации:

cbr.get_mrrf('2020-10-01', '2025-10-01')

Ставка RUONIA overnight:

cbr.get_ruonia_overnight('2024-10-01', '2025-10-01')

В cbrapi есть и другие виды ставки RUONIA, ставки ROISfix и еще много чего. Полный перечень функций доступен в README.

Где мы используем cbrapi?

Библиотека cbrapi применяется в наших собственных проектах. Поэтому будет активно поддерживаться. Мы используем данные ЦБ в базе данных okama для получения истории официальных курсов валют ЦБ (например EURRUB.CBR), ключевой ставки (RUS_CBR.RATE), ставок RUONIA (RUONIA.RATE) и др. Все эти данные вместе с историей торгов бирж мира, криптовалют, драгметаллов, коммодитиз и недвижимости доступны бесплатно на API okama.

Кроме того cbrapi активно используется в нашем проекте подготовки налоговых деклараций по зарубежным инвестициям (рабочее место налогового консультанта инвестора).

Проблемы с открытыми API

В России формально существует множество открытых финансовых данных, но их использование на практике сопряжено с серьезными трудностями. Большая часть государственных источников предоставляет информацию в устаревших форматах. Например, Росстат по-прежнему распространяет данные в виде Excel-файлов. Крупный проект ЕМИСС, являющийся интегратором статистической информации, не имеет открытого API. Сайт работает медленно и нестабильно. У Минфина тоже нет API.

На этом фоне положительно выделяются проекты Московской биржи и Центрального банка, которые развивают открытые API, позволяющие интегрировать данные в финансовые приложения и аналитические сервисы.

Отдельного внимания заслуживает инициатива Ассоциации Финтех Концепция открытых API — попытка создать единый технологический стандарт для финансового сектора. Но этот проект на первых стадиях затрагивает только банковскую среду. Только на поздних этапах планируется сделать единый стандарт и для сектора финансовых данных в учреждениях.

Другие библиотеки для финансовых API

cbrapi - это не единственный проект, который мы поддерживаем для доступа к открытым финансовым данным по API.

  • nbsc - Бюро статистики Китая (National Bureau of Statistics of China – NBSC)

  • cfets - Валютная торговая система Китая (China Foreign Exchange Trade System - CFETS)

  • ecb - Европейский центральный банк (European Central Bank - ECB)

  • ons - Управление национальной статистики Великобритании (UK Office for National Statistics - ONS)

  • boi - Банк Израиля (Bank of Israel - BOI)

Возникает справедливый вопрос: "Зачем всё это, если финансовые данные можно взять в одном месте, например, в IMF?". Да, там действительноесть есть много финансовых данных. Но публикуются они часто с задержкой 1 месяц и более, кроме того, специфические виды финансовой информации отсутствуют. Есть отличные библиотеки - интеграторы типа pandas-datareader. Мы ими, конечно, пользуемся. Например, для получения макро-финансовых данных по США. Тем не менее, эти инструменты не охватывают весь спектр необходимых данных.

Приглашаем всех желающих поучаствовать в развитии проекта

Вы можете:

  • Предлагать новые идеи

  • Участвовать в разработке кода

  • Сообщать об ошибках

Репозиторий библиотеки находится на GitHub.

Комментарии (3)


  1. ne555
    06.11.2025 05:40

    Если нужен карманный анализ, то либа пашет и на телефоне.

    Пруф
    Termux for Android. Из особенностей: pandas ставить в Termux из tur-repo, а не через pip, для отображения графиков - plotly либу использовать.
    Termux for Android. Из особенностей: pandas ставить в Termux из tur-repo, а не через pip, для отображения графиков - plotly либу использовать.


  1. kneaded
    06.11.2025 05:40

    Красавчики, наконец-то кто-то это сделал! А то я с их SOAP когда-то разбирался, спустя время смотрю - вообще ничего не понятно. А тут библиотека теперь спасёт. Спасибо!


    1. Chilango
      06.11.2025 05:40

      Спасибо. Мы тоже когда-то помучались. Потом жизнь вынудила :)