Как на Python написать скрипт для конвертации валют, используя API центрального банка или открытые курсы валют?

Написать скрипт конвертации валют на Python можно несколькими способами — через официальный API Центрального банка России (ЦБ РФ) или через открытые API, такие как exchangerate-api.com, fixer.io или frankfurter.app.

## Способ 1: API Центрального банка РФ

ЦБ РФ предоставляет бесплатный XML-эндпоинт: `https://www.cbr.ru/scripts/XML_daily.asp`

python
import requests
import xml.etree.ElementTree as ET

def get_cbr_rates():
url = ‘https://www.cbr.ru/scripts/XML_daily.asp’
response = requests.get(url)
response.encoding = ‘windows-1251’
root = ET.fromstring(response.text)
rates = {‘RUB’: 1.0}
for valute in root.findall(‘Valute’):
char_code = valute.find(‘CharCode’).text
nominal = float(valute.find(‘Nominal’).text)
value = float(valute.find(‘Value’).text.replace(‘,’, ‘.’))
rates[char_code] = value / nominal
return rates

def convert(amount, from_currency, to_currency, rates):
if from_currency not in rates or to_currency not in rates:
raise ValueError(‘Валюта не найдена’)
amount_in_rub = amount * rates[from_currency]
return amount_in_rub / rates[to_currency]

rates = get_cbr_rates()
result = convert(100, ‘USD’, ‘EUR’, rates)
print(f’100 USD = {result:.2f} EUR’)

## Способ 2: Открытый API frankfurter.app

Этот сервис бесплатный, не требует ключа и поддерживает актуальные курсы ЕЦБ:

python
import requests

def convert_frankfurter(amount, from_currency, to_currency):
url = f’https://api.frankfurter.app/latest?amount={amount}&from={from_currency}&to={to_currency}’
response = requests.get(url)
data = response.json()
return data[‘rates’][to_currency]

result = convert_frankfurter(100, ‘USD’, ‘EUR’)
print(f’100 USD = {result} EUR’)

## Способ 3: exchangerate-api.com (с ключом)

Зарегистрируйтесь на сайте и получите бесплатный API-ключ:

python
import requests

API_KEY = ‘ваш_ключ’

def convert_with_key(amount, from_currency, to_currency):
url = f’https://v6.exchangerate-api.com/v6/{API_KEY}/pair/{from_currency}/{to_currency}/{amount}’
response = requests.get(url)
data = response.json()
return data[‘conversion_result’]

print(convert_with_key(100, ‘USD’, ‘RUB’))

## Советы по улучшению скрипта

— **Кэшируйте курсы** — не делайте запрос при каждой конвертации, сохраняйте данные на 1 час.
— **Обрабатывайте ошибки** — используйте `try/except` для сетевых сбоев и отсутствующих валют.
— **Добавьте CLI** — используйте `argparse` для запуска из командной строки: `python converter.py 100 USD RUB`.
— **Логируйте запросы** — модуль `logging` поможет отследить проблемы.
— **Используйте `.env`** — храните API-ключи в переменных окружения через `python-dotenv`.

Для большинства задач достаточно frankfurter.app или ЦБ РФ — они бесплатны и надёжны.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.