Найти в Дзене
Simple Prog

Как создать конвертер валют на Python

Оглавление

Конвертер валют — это приложение, позволяющее быстро переводить одну валюту в другую по курсу. Такие инструменты массово доступны в интернете, воспользоваться ими можно бесплатно. В этой статье мы разберем, как создать конвертер валют на Python.

Мы рассмотрим различные способы получения актуального курса обмена валют. Некоторые из них связаны с парсингом общедоступных веб-страниц, другие — с использованием официальных API (эти данные более надежны и пригодны для коммерческого использования).

Python. Currency converter
Python. Currency converter

Всего мы рассмотрим пять способов получения курса:

  1. Парсинг X-RATES
  2. Использование сервиса Xe
  3. Парсинг платформы Yahoo Finance
  4. Использование ExchangeRate API
  5. Использование Fixer API

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

Для начала не забудьте установить необходимые библиотеки для всех методов, которые мы будем использовать. Запустите следующую команду:

$ pip install python-dateutil requests bs4 yahoo_fin

Итак, теперь мы готовы, давайте приступать!

-2

Парсинг 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. При написании такой программы один из самых важных моментов — получение актуального курса валют. В этой статье мы рассмотрели пять способов получить курс. Если вам не подходит ни один из них, ничего страшного — вы можете выбрать любой другой!

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

Надеемся, данная статья была вам полезна! Успехов в написании кода!

Наука
7 млн интересуются