Блог им. Anassie
Всем привет. Напишем небольшую программу на 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()
для создания графика курсов каждой валюты в течение нужного нам периода времени.
Ну и зачем так сложно если они всё онлайн транслируются
Коллеги еще говорят, что есть спец нейронка, которая заточена на построение кодов, еще не проверял
Например задача написать простого робота на Питоне (брок Сбер соотвественно квик), ну есть еще Тинек со своими прибамбасами но через него не хочется.
Вопросы которые крутятся в голове
1) Как получить котиру? (их же в квик транслируют) чем пользуешься
2) Как слать ордера
Короче мне надо какой-то коннектор Python к Quik)
Раньше обычно заказывал роботов на C#, а сейчас весна охота для души что-то поковырять ))
Жду ответа — если кто знает подскажите.
Илья Нечаев, У этого автора есть серия постов, там код, есть код для отправки управляющих воздействий в квик — работа с заявками, получение данных из таблиц и т.д., есть код для стриминга данных из квика. Поверх этих штук написал свои библиотеки и использую их в своих скриптах.
smart-lab.ru/my/jatotrade_com/
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