it Новости Программа на Python для отслеживания курса валюты
Программа на Python для отслеживания курса валюты

Программа на Python для отслеживания курса валюты

1 367
21 марта 2020 в 16:30

Курс валют постоянно находиться в нестабильном состоянии. Отслеживать его вручную не так удобно, поэтому предлагаем создать программу на Питон для автоматического трекинга.

Наша программа будет работать по следующему алгоритму:

  1. Парсим (копируем) данные из страницы поисковой выдачи Google;
  2. Проверяем изменения курса с момента запуска программы;
  3. Отправляем письмо на электронную почту при сильном изменении курса.


Первое с чем стоит определиться, так это откуда брать курсы валют. Честно говоря, то не вижу смысла платить за какой-либо API, когда можно скопировать спарсить данные прямиком с поисковой выдачи Google или если хотите с других сайтов, которые предоставляют схожий функционал. Таких данных нам вполне хватит, ведь всё равно вряд ли какой-либо API будет предоставлять ещё более точную информацию в отличии от Google.


Первое что необходимо сделать - это установить всё необходимое. Нам потребуется установить Python с официального сайта, скачать IDE, можно использовать PyCharm и далее создать внутри программы новый проект.


Внутри созданного проекта создаем новый файл с названием main.py. После этого сразу же через терминал выполняем установку библиотек: requests, а также beautiful soup

pip install requests bs4

Библиотека requests позволяет обращаться к необходимому сайту и копировать всю его HTML разметку. Внутри HTML разметки выбрать нужные данные очень сложно, если использовать стандартные функции Python по типу: replace, join и прочих. Поэтому мы используем вторую библиотеку beautiful soup для быстрой и комфортной выборки необходимых данных из HTML.


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

import requests # Модуль для обработки URL
from bs4 import BeautifulSoup # Модуль для работы с HTML
import time # Модуль для остановки программы
import smtplib # Модуль для работы с почтой

# Основной класс
class Currency:
	# Ссылка на нужную страницу
	DOLLAR_RUB = 'https://www.google.com/search?sxsrf=ALeKk01NWm6viYijAo3HXYOEQUyDEDtFEw%3A1584716087546&source=hp&ei=N9l0XtDXHs716QTcuaXoAg&q=%D0%B4%D0%BE%D0%BB%D0%BB%D0%B0%D1%80+%D0%BA+%D1%80%D1%83%D0%B1%D0%BB%D1%8E&oq=%D0%B4%D0%BE%D0%BB%D0%BB%D0%B0%D1%80+&gs_l=psy-ab.3.0.35i39i70i258j0i131l4j0j0i131l4.3044.4178..5294...1.0..0.83.544.7......0....1..gws-wiz.......35i39.5QL6Ev1Kfk4'
	# Заголовки для передачи вместе с URL
	headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}

	current_converted_price = 0
	difference = 5 # Разница после которой будет отправлено сообщение на почту

	def __init__(self):
		# Установка курса валюты при создании объекта
		self.current_converted_price = float(self.get_currency_price().replace(",", "."))

	# Метод для получения курса валюты
	def get_currency_price(self):
		# Парсим всю страницу
		full_page = requests.get(self.DOLLAR_RUB, headers=self.headers)

		# Разбираем через BeautifulSoup
		soup = BeautifulSoup(full_page.content, 'html.parser')

		# Получаем нужное для нас значение и возвращаем его
		convert = soup.findAll("span", {"class": "DFlfde", "class": "SwHCTb", "data-precision": 2})
		return convert[0].text

	# Проверка изменения валюты
	def check_currency(self):
		currency = float(self.get_currency_price().replace(",", "."))
		if currency >= self.current_converted_price + self.difference:
			print("Курс сильно вырос, может пора что-то делать?")
			self.send_mail()
		elif currency <= self.current_converted_price - self.difference:
			print("Курс сильно упал, может пора что-то делать?")
			self.send_mail()

		print("Сейчас курс: 1 доллар = " + str(currency))
		time.sleep(3) # Засыпание программы на 3 секунды
		self.check_currency()

	# Отправка почты через SMTP
	def send_mail(self):
		server = smtplib.SMTP('smtp.gmail.com', 587)
		server.ehlo()
		server.starttls()
		server.ehlo()

		server.login('ВАША ПОЧТА', 'ПАРОЛЬ')

		subject = 'Currency mail'
		body = 'Currency has been changed!' 
		message = f'Subject: {subject}\n
{body}'

		server.sendmail(
			'От кого',
			'Кому',
			message
		)
		server.quit()

# Создание объекта и вызов метода
currency = Currency()
currency.check_currency()

Для более детального ознакомления предлагаем просмотреть небольшой урок на эту тему:


Дополнительный курс

На нашем сайте также есть углубленный курс по изучению языка Питон. В ходе огромной программы вы изучите не только язык Питон, но также научитесь создавать веб сайты за счёт веб технологий и фреймворка Джанго. За курс вы изучите массу нового и к концу программы будете уметь работать с языком Питон, создавать на нём полноценные ПК приложения на основе библиотеки Kivy, а также создавать веб сайты на основе библиотеки Джанго.


Больше интересных новостей

Комментарии для сайта Cackle