Всем привет. Напишем небольшую программу на Python для отслеживания курса валюты.
Программа будет работать следующим образом: данные будут скопированы из поисковой выдачи Google, после чего будет произведено сравнение изменения курса с момента запуска программы. В случае значительного изменения курса, программа будет автоматически отправлять уведомление в Telegram.
Первое, что нужно сделать — это решить, откуда брать курсы валют. Парсить данные будем с поисковой выдачи Google, чтобы не платить за API. Чтобы начать создавать программу, необходимо установить Python с официального сайта и загрузить IDE. Можно использовать PyCharm или любой другой редактор кода. Второе, нужно будет написать код для парсинга данных из поисковой выдачи Google, а затем сравнивать текущий курс с предыдущим.
Затем нам потребуются несколько библиотек. Первой из них является requests, которая позволит нам получать данные с сайтов. Второй библиотекой является BeautifulSoup, которая поможет нам парсить HTML-разметку и вытаскивать из нее нужные данные.
Устанавливаем библиотеки:
pip install requests pip install beautifulsoup4Создаем новый файл внутри проекта с названием
main.py и начинаем писать следующий код:import requests
from bs4 import BeautifulSoup
import time
# Функция для получения курса валюты
def get_currency_rate():
# Адрес сайта, с которого мы будем получать данные
url = "https://www.google.com/search?q=курс+доллара+к+рублю"
# Получаем содержимое страницы
response = requests.get(url)
# Создаем объект BeautifulSoup для парсинга HTML-разметки
soup = BeautifulSoup(response.content, "html.parser")
# Получаем элемент с курсом валюты
result = soup.find("div", class_="BNeawe iBp4i AP7Wnd").get_text()
# Возвращаем курс валюты как число
return float(result.replace(",", "."))
# Основной код программы
if __name__ == "__main__":
# Получаем текущий курс валюты
current_rate = get_currency_rate()
print(f"Текущий курс валюты: {current_rate}")
# Запускаем бесконечный цикл
while True:
# Ждем 5 секунд
time.sleep(5)
# Получаем новый курс валюты
new_rate = get_currency_rate()
# Если произошло сильное изменение курса валюты, отправляем уведомление
if abs(new_rate - current_rate) > 2:
print(f"Сильное изменение курса валюты! Старое значение: {current_rate}, новое значение: {new_rate}")
current_rate = new_rate
Здесь мы получаем текущий курс валюты с помощью библиотек requests и BeautifulSoup и запускаем бесконечный цикл, который каждые 5 секунд получает новый курс валюты и проверяет, произошло ли сильное изменение курса.
Для отправки уведомлений через Telegram Bot API необходимо создать бота в Telegram и получить его токен. Для этого подойдёт библиотека python-telegram-bot, чтобы настроить отправку сообщений:
import telegram # Создаем объект бота и указываем токен bot = telegram.Bot(token='YOUR_TELEGRAM_BOT_TOKEN') # Получаем идентификатор чата, в который будем отправлять уведомление chat_id = 'YOUR_TELEGRAM_CHAT_ID' # Формируем текст сообщения с информацией о курсе валют message_text = 'Курс доллара превысил 75 рублей' # Отправляем сообщение bot.send_message(chat_id=chat_id, text=message_text)
Для добавления возможности отслеживания нескольких валют одновременно и установки пороговых значений изменения курса для отправки уведомлений напишем следующий код:
import time
import requests
from bs4 import BeautifulSoup
import smtplib
import matplotlib.pyplot as plt
# Добавляем информацию о валютах и пороговых значениях
currencies = {'USD': {'threshold': 1.0, 'rate': 0},
'EUR': {'threshold': 1.0, 'rate': 0},
'GBP': {'threshold': 1.0, 'rate': 0}}
# Функция отправки уведомлений через Telegram Bot API
def send_notification(currency, rate):
token = 'your_token'
chat_id = 'your_chat_id'
message = f'{currency} rate is {rate}'
url = f'https://api.telegram.org/bot{token}/sendMessage?chat_id={chat_id}&text={message}'
requests.get(url)
# Функция создания графиков
def create_graph(currency, rates):
plt.plot(rates)
plt.ylabel(f'{currency} rate')
plt.show()
while True:
# Парсим данные с сайта Центробанка
url = 'https://www.cbr.ru/'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
# Получаем информацию о каждой валюте и ее курсе
for currency, data in currencies.items():
currency_rate = soup.find('div', {'class': f'currency__rate__{currency.lower()}'})
rate = float(currency_rate.find('div', {'class': 'currency__rate__value'}).text.replace(',', '.'))
# Если курс изменился больше, чем пороговое значение, отправляем уведомление
if abs(rate - data['rate']) > data['threshold']:
send_notification(currency, rate)
# Обновляем информацию о курсе валюты
data['rate'] = rate
# Добавляем курсы в список для создания графиков
data.setdefault('rates_history', []).append(rate)
# Создаем график, если есть достаточно данных
if len(data['rates_history']) >= 10:
create_graph(currency, data['rates_history'])
# Ждем 1 минуту, чтобы не перегружать сервер Центробанка
time.sleep(60)
В этом примере мы создаем словарь currencies с информацией о каждой валюте и ее пороговых значениях изменения курса + добавляем историю курсов каждой валюты в список rates_history. В конце мы создаем функцию create_graph() для создания графика курсов каждой валюты в течение нужного нам периода времени.
Ну и зачем так сложно если они всё онлайн транслируются
C:\Users\User\PycharmProjects\pythonProject_1SmartLab\venv\Scripts\python.exe C:\Users\User\PycharmProjects\pythonProject_1SmartLab\main.py
Traceback (most recent call last):
File «C:\Users\User\PycharmProjects\pythonProject_1SmartLab\main.py», line 27, in <module>
current_rate = get_currency_rate()
^^^^^^^^^^^^^^^^^^^
File «C:\Users\User\PycharmProjects\pythonProject_1SmartLab\main.py», line 21, in get_currency_rate
return float(result.replace(",", "."))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: could not convert string to float: '81.55 Российский рубль'
Process finished with exit code 1