Конвертер валют — это приложение, позволяющее быстро переводить одну валюту в другую по курсу. Такие инструменты массово доступны в интернете, воспользоваться ими можно бесплатно. В этой статье мы разберем, как создать конвертер валют на Python.
Мы рассмотрим различные способы получения актуального курса обмена валют. Некоторые из них связаны с парсингом общедоступных веб-страниц, другие — с использованием официальных API (эти данные более надежны и пригодны для коммерческого использования).
Всего мы рассмотрим пять способов получения курса:
- Парсинг X-RATES
- Использование сервиса Xe
- Парсинг платформы Yahoo Finance
- Использование ExchangeRate API
- Использование Fixer API
Вы можете изучить все пять способов и выбрать тот, который вам понравится больше всего.
Для начала не забудьте установить необходимые библиотеки для всех методов, которые мы будем использовать. Запустите следующую команду:
$ pip install python-dateutil requests bs4 yahoo_fin
Итак, теперь мы готовы, давайте приступать!
Парсинг X-RATES
В этом разделе мы будем извлекать данные с сайта x-rates.com. Если вы перейдете на целевую веб-страницу, вы увидите большинство валют мира с курсом, определенным на текущий момент.
Давайте сначала очистим страницу. Сделать это можно следующим образом:
Следующая функция отвечает за выполнение запроса к странице и извлечение данных из таблиц:
Эта функция принимает исходную валюту и необходимую сумму в качестве параметров и возвращает соответствующие суммы в разных валютах мира вместе с датой и временем последнего обновления.
Время последнего обновления находится в теге span с классом rateTimestamp. Обратите внимание, что мы используем функцию parse() из модуля dateutil.parser для автоматического парсинга строки в объект Python DateTime.
Курсы валют размещены в двух таблицах. Мы извлекаем их с помощью метода find_all() из модуля BeautifulSoup, получаем название валюты и сумму по курсу в каждой строке таблиц и добавляем их в наш словарь exchange_rates, который выведем в конце.
Что ж, давайте воспользуемся этой функцией:
Мы используем встроенный модуль sys, чтобы получать целевую валюту и сумму из командной строки. Давайте запустим следующую команду и попробуем перевести 1000 евро во все другие валюты:
$ python currency_converter_xrates.py EUR 1000
Результат будет таким:
На момент написания данного руководства это около 1 021,66 долларов США. Обратите внимание на дату и время последнего обновления. Обычно курс обновляется каждую минуту.
Использование сервиса Xe
А теперь давайте рассмотрим альтернативный вариант.
Xe — это компания, предоставляющая инструменты и услуги по обмену иностранной валюты онлайн. Наиболее известна Xe своим онлайн-конвертером валют. В этом разделе мы воспользуемся такими библиотеками, как requests и BeautifulSoup, чтобы сделать на их основе собственный конвертер валют.
Приступим!
Откройте новый файл Python и импортируйте все необходимые библиотеки:
Теперь давайте создадим функцию, которая принимает исходную валюту, целевую валюту и сумму, которую мы хотим конвертировать, а затем возвращает конвертированную сумму вместе с датой и временем обменного курса.
Выглядеть это будет следующим образом:
На момент написания данного руководства обменный курс находился в третьем абзаце HTML-страницы. Это объясняет строчку soup.find_all("p")[2]. Не забывайте вносить правки, когда в HTML-страницу вносятся изменения.
В HTML DOM последняя дата и время обменного курса находятся во втором родителе абзаца exchange rate.
Поскольку обменный курс содержит строковые символы, мы создали функцию get_digits() для извлечения из заданной строки только цифр и точек.
Что ж, давайте воспользуемся нашей функцией:
На этот раз нам нужно передать исходную и целевую валюты, а также сумму из командной строки. Мы также попытаемся конвертировать 1000 евро в доллары США с помощью команды в консоли:
$ python currency_converter_xe.py EUR USD 1000
Мы получим следующий результат:
Last updated datetime: 2022-07-21 7:59:00+00:00
1000.0 EUR = 1021.66 USD
Замечательно! Xe обычно обновляется каждую минуту, так что мы получаем результат в режиме реального времени!
Парсинг платформы Yahoo Finance
Ещё один источник, который мы сегодня рассмотрим, это Yahoo Finance. Он предоставляет финансовые новости, валютные данные, котировки акций, пресс-релизы и различные финансовые отчеты. В этом разделе нашей статьи для создания конвертера валют на основе данных Yahoo Finance мы мы используем библиотеку yahoo_fin .
Для начала давайте выполним импорт библиотек, которые нам понадобятся:
yahoo_fin отлично справляется с извлечением данных с веб-страницы Yahoo Finance. Мы используем метод get_data() из модуля stock_info и передаем ему символ исходной валюты.
Ниже приведена функция, которая использует данную функцию и возвращает сумму, переведенную из одной валюты в другую:
Мы передаем “1m” в качестве параметра interval в методе get_data() для извлечения данных на текущую минуту, а не текущий день (значение по умолчанию). Мы также извлекаем поминутные данные за предыдущие два дня, просто чтобы перестраховаться (с данными курса в выходные могут быть проблемы).
Существенным преимуществом этого метода является то, что вы можете получить исторические данные, просто изменив параметры start_date и end_date в данном методе. Более того, вы также можете изменить интервал: "1d" для ежедневного обновления, "1wk" для еженедельного и "1mo" для обновления курса один раз в месяц.
Теперь воспользуемся функцией, которая у нас получилась:
Запустим код из консоли следующей командой:
$ python currency_converter_yahoofin.py EUR USD 1000
Мы опять переводим 1000 евро в доллары США. И вот какой результат у нас получился:
Last updated datetime: 2022-07-21 7:59:34
1000.0 EUR = 1021,66 USD
Использование API ExchangeRate
Как упоминалось в самом начале данного руководства, если вы хотите создать более надежный конвертер валют, делать это лучше на базе API. Для данной цели существует несколько различных API. Мы выбрали два наиболее удобных и простых в использовании. Их мы и рассмотрим далее.
Начнем с ExchangeRate API. Он поддерживает 161 валюту и предлагает 1500 бесплатных запросов в месяц. Кроме того, также есть открытый API, который предлагает ежедневно обновляемые данные. Его-то мы и используем:
Приведенная выше функция запрашивает открытый API и возвращает обменные курсы для всех валют с последней датой и временем.
Давайте используем эту функцию, чтобы написать свой конвертер валют:
Далее как обычно, напишем основной код:
И запустим из консоли нашу программу с помощью следующей команды:
$ python currency_converter_erapi.py EUR USD 1000
На выходе мы получим вот такой результат:
Last updated datetime: 2022-07-21 00:09:48+00:00
1000.0 EUR = 1 021.66 USD
Курсы обновляются ежедневно. Стоит отметить, что открытый API не предлагает точный курс обмена. Но вы можете бесплатно зарегистрироваться и получить ключ API, чтобы извлекать точные обменные курсы.
Использование Fixer API
И последний способ получения курса валют — при помощи Fixer API. Это простой и легковесный API для конвертирования валют как в режиме реального времени, так и по состоянию на прошлые периоды.
Вы можете без проблем создать учетную запись и получить ключ API. После этого вы сможете использовать конечную точку /convert для конвертации сумм из одной валюты в другую. Однако, к сожалению, это не входит в бесплатный план и требует апгрейда вашей учетной записи.
Но ещё есть конечная точка /latest, которая отлично работает при бесплатном аккаунте. Она возвращает текущие курсы обмена для валюты вашего региона. В неё мы можем передать исходную и целевую валюты для конвертации и рассчитать обменный курс между ними. Данная функция может быть представлена следующим образом:
Ниже приведена функция, которая использует конечную точку /convert (подходит для платного аккаунта):
Воспользуйтесь той из двух функций, которая вам больше подходит:
Перед запуском скрипта обязательно замените API_KEY на ключ API, который вы получаете при регистрации учетной записи.
Запустим наш скрипт и получим следующий результат:
Last updated datetime: 2022-07-21 09:54:04
1000.0 EUR = 1126.494 USD
Если вы хотите узнать больше про Fixer API, то вы можете ознакомиться с документацией.
Заключение
Что ж, вот и всё! Сегодня мы разобрали, как написать конвертер валют на Python. При написании такой программы один из самых важных моментов — получение актуального курса валют. В этой статье мы рассмотрели пять способов получить курс. Если вам не подходит ни один из них, ничего страшного — вы можете выбрать любой другой!
Если вам необходимо, вы можете получить полный код для рассмотренных примеров здесь.
Надеемся, данная статья была вам полезна! Успехов в написании кода!