Гид по технологиям

Как получить и использовать API Open Exchange Rates в Python

5 min read Python Обновлено 31 Dec 2025
Open Exchange Rates в Python: получить и использовать API
Open Exchange Rates в Python: получить и использовать API

Телефон и ноутбук с информацией о валютных курсах

Что такое Open Exchange Rates и для чего нужен API

Open Exchange Rates — провайдер данных о курсах валют по миру. API позволяет программно получать актуальные курсы (обычно относительно доллара США) и использовать их в ваших приложениях для расчёта, отображения цен, аналитики или автоматических конвертаций.

Краткое определение: API — это интерфейс, по которому программа запрашивает данные у сервиса и получает структурированный ответ (обычно JSON).

Важно: бесплатный уровень может иметь ограничения по частоте запросов и доступным базовым валютам. Всегда проверяйте ограничения в вашем плане.

Требования и подготовка

  • Python 3.6+ установлен на машине.
  • Установлен модуль requests: pip install requests
  • Аккаунт Open Exchange Rates и App ID (API-ключ).
  • Базовые навыки редактирования файлов и запуска скриптов в терминале.

Как получить App ID (API-токен)

  1. Перейдите на сайт Open Exchange Rates и войдите в аккаунт или зарегистрируйтесь.
  2. Выберите подходящий план (например, Free Plan) и активируйте аккаунт: Страничка с тарифами и планами Open Exchange Rates
  3. В личном кабинете перейдите в раздел App IDs (левое меню): Страница App IDs в аккаунте Open Exchange Rates
  4. Скопируйте существующий App ID или сгенерируйте новый. Этот ключ понадобится для запросов к API.

Совет по безопасности: не храните ключ в репозитории. См. раздел «Безопасность и хранение ключа» ниже.

Полный пример Python-скрипта: конвертер валют

Ниже — упрощённый, но полный пример конвертера, который:

  • получает курсы по App ID;
  • выводит список доступных валют;
  • конвертирует сумму из одной валюты в другую;
  • содержит базовую обработку ошибок и защиту от отсутствующих кодов валют.
import os
import sys
import requests

# Получите App ID и сохраните в переменной окружения OPENEXCHANGE_APP_ID
# Пример для Windows (в терминале PowerShell):
#   setx OPENEXCHANGE_APP_ID "ваш_app_id"
# Или перед запуском в Linux/macOS:
#   export OPENEXCHANGE_APP_ID="ваш_app_id"

api_key = os.environ.get("OPENEXCHANGE_APP_ID")
if not api_key:
    print("Ошибка: переменная окружения OPENEXCHANGE_APP_ID не установлена.")
    sys.exit(1)

url = f"https://openexchangerates.org/api/latest.json?app_id={api_key}"

try:
    response = requests.get(url, timeout=10)
    response.raise_for_status()
    data = response.json()
except requests.exceptions.RequestException as e:
    print("Ошибка при обращении к API:", e)
    sys.exit(1)
except ValueError:
    print("Ошибка: неверный формат ответа от сервера")
    sys.exit(1)

# Курс валют — словарь типа {'USD': 1.0, 'EUR': 0.92, ...}
exchange_rates = data.get("rates")
if not exchange_rates:
    print("Ошибка: в ответе отсутствуют курсы валют")
    sys.exit(1)

# Показать доступные валюты
available_currencies = ", ".join(sorted(exchange_rates.keys()))
print("Доступные валюты:", available_currencies)

# Ввод от пользователя
from_currency = input("Введите базовую валюту (код, например USD): ").strip().upper()
if from_currency not in exchange_rates:
    print(f"Валюта {from_currency} недоступна в списке курсов")
    sys.exit(1)

to_currency = input("Введите целевую валюту (код, например EUR): ").strip().upper()
if to_currency not in exchange_rates:
    print(f"Валюта {to_currency} недоступна в списке курсов")
    sys.exit(1)

try:
    amount = float(input("Введите сумму для конвертации: "))
except ValueError:
    print("Ошибка: введите числовое значение суммы")
    sys.exit(1)

# Курсы в ответе обычно даны относительно USD (по умолчанию база — USD)
# Чтобы конвертировать из A в B: перевести A в USD, затем USD в B
original_in_usd = amount / exchange_rates[from_currency]
converted_amount = original_in_usd * exchange_rates[to_currency]

print(f"{amount} {from_currency} = {converted_amount:.6f} {to_currency}")

Как запускать скрипт

  1. Сохраните файл как currency_exchange_converter.py.
  2. Откройте терминал и перейдите в папку с файлом, например:
cd C:\Users\<ваш_пользователь>\Desktop
  1. Установите зависимость (если ещё не установлена):
pip install requests
  1. Убедитесь, что переменная окружения OPENEXCHANGE_APP_ID установлена.
  2. Запустите:
python currency_exchange_converter.py
  1. Введите коды валют и сумму по подсказкам. В результате вы увидите сконвертированную сумму: Конвертер валют в командной строке

Обработка ошибок, ограничения и когда это не сработает

  • Неверный или отозванный App ID: сервер вернёт 401/403 — проверяйте правильность ключа.
  • Сеть или таймаут: requests.get может выбросить исключение — обрабатывайте и устанавливайте разумный timeout.
  • Отсутствие валюты: некоторые коды могут отсутствовать в ответе — проверяйте наличие ключа в словаре rates.
  • Частые запросы: бесплатные тарифы обычно ограничены по частоте (rate limit).
  • Задержка обновления: иногда данные обновляются с задержкой; не полагайтесь на абсолютную мгновенную точность для критичных финансовых операций.

Безопасность и хранение ключа

  • Никогда не храните App ID в публичных репозиториях.
  • Используйте переменные окружения или секретные хранилища (Vault, AWS Secrets Manager, GitHub Secrets).
  • Для CI/CD — передавайте ключи как защищённые переменные. Ограничьте доступ по ролям.

Пример использования .env (локально) и python-dotenv:

# pip install python-dotenv
from dotenv import load_dotenv
load_dotenv()
api_key = os.environ.get('OPENEXCHANGE_APP_ID')

Альтернативные подходы и сервисы

Если Open Exchange Rates не подходит, рассмотрите:

  • Fixer.io — простое API с европейским уклоном.
  • exchangerate.host — бесплатный, открытый API без ключа (проверяйте SLA).
  • Currencylayer — похож по функционалу, разные условия тарификации.
  • Использовать данные от центральных банков (ECB, РФЦБ) для официальных курсов.

Выбор зависит от: частоты запросов, доступности базовых валют, ценовой модели и требований к SLA.

Тесты и критерии успешности

Критерии приёмки:

  • Скрипт успешно получает JSON от /latest.json и извлекает rates.
  • Скрипт корректно обрабатывает несуществующие коды валют и неверный ввод.
  • Скрипт не раскрывает App ID (ключи берутся из переменных окружения).
  • Результат конвертации соответствует формуле через USD и показывается с корректной точностью.

Примеры тест-кейсов:

  • Ввести валидные коды USD→EUR и сравнить с ручным расчётом.
  • Ввести несуществующий код — ожидать сообщение об ошибке и выход.
  • Убедиться, что при отсутствии сети скрипт выводит понятную ошибку.

Контроль качества и роли

Разработчик:

  • Реализует обработку исключений и валидацию ввода.
  • Не хранит ключи в коде.

Тестировщик:

  • Проводит ручные и автоматические тесты по сценариям выше.

Оператор/DevOps:

  • Настраивает секреты в окружении, мониторит ошибки и лимиты запросов.

Ментальные модели и эвристики

  • Модель «через базовую валюту»: большинство провайдеров даёт курсы относительно базовой валюты (обычно USD). Для конверсии A→B сначала переводим A→USD, затем USD→B.
  • Эвристика точности: для пользовательского интерфейса 2–4 знака после запятой обычно достаточно; для расчётов в бухгалтерии — используйте больше знаков и фиксированную арифметику (Decimal).

Когда не использовать этот подход

  • Если нужна строгая нормативная отчётность — используйте официальные данные центрального банка.
  • Если требуется высокая частота обновлений и SLA — платный тариф или специализированный провайдер может быть обязательным.

Быстрые подсказки (cheat sheet)

Короткое резюме

  • Получите App ID в личном кабинете Open Exchange Rates.
  • Используйте requests в Python, чтобы получить JSON с курсами.
  • Конвертируйте суммы через перевод в базовую валюту (обычно USD).
  • Не забывайте про безопасность ключа, обработку ошибок и ограничения тарифного плана.

Важно: при переходе в продакшен подумайте о кешировании курсов, чтобы снизить количество вызовов к API и улучшить устойчивость приложения.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Удалённая помощь с Schnitz Remote Lite
Удалённая помощь

Удалённая помощь с Schnitz Remote Lite

Исправить зацикливание входа в Ubuntu
Ubuntu

Исправить зацикливание входа в Ubuntu

sudo: пароль верный, но не принимается — как исправить
Linux

sudo: пароль верный, но не принимается — как исправить

Добавить светлую/тёмную тему в контекстное меню Windows 11
Windows

Добавить светлую/тёмную тему в контекстное меню Windows 11

Как связывать страницы в Notion: полное руководство
Notion

Как связывать страницы в Notion: полное руководство

VPN на домашнем роутере с DD-WRT
Сеть

VPN на домашнем роутере с DD-WRT