CoderCastrov logo
CoderCastrov
Корето

Как получить оповещения о изменении цены криптовалюты по SMS с помощью Python

Как получить оповещения о изменении цены криптовалюты по SMS с помощью Python
просмотров
4 мин чтение
#Корето

Привет всем! В этом посте вы узнаете, как получать оповещения по SMS каждый раз, когда ваша любимая криптовалюта меняет цену, создав простой скрипт на Python.

⚒️ Необходимые инструменты:

  • Python
  • Учетная запись Twilio (для получения номера для отправки SMS)
  • Облачная виртуальная машина AWS ec2 (или другая облачная машина)

🤔 Проблема

Моим последним увлечением стала криптовалюта Coreto, относительно новая криптовалюта, которая стремится изменить рынок, став "Facebook" в мире криптовалют. Проблема заключается в том, что, будучи новой монетой, она все еще не доступна на централизованных биржевых платформах, таких как Coinbase или Binance, и большинство децентрализованных платформ обмена, таких как Uniswap, не предлагают лимитные ордера.

Невозможность размещать ордера на покупку и продажу по предварительно заданным ценам может привести к потере большого количества денег, не смогув завершить покупку на падении или продажу на росте. С помощью скрипта на Python, который вы сможете создать после прочтения этого поста, вы будете получать оповещения о изменении цены в виде SMS-сообщений, даже во время сна.

🐍 Давайте напишем код!

Шаг 1: Парсинг цены Coreto с Coin Market Cap

Для этого мы будем использовать Beautiful Soup, библиотеку Python для извлечения данных из веб-страниц.

import bs4 as bslink = "https://coinmarketcap.com/currencies/coreto/"request = urllib.request.Request(link) webpage = urllib.request.urlopen(request)
source = webpage.read()
webpage.close() soup = bs.BeautifulSoup(source, 'html.parser')

После того, как у нас есть весь веб-сайт в переменной soup, нам нужно найти цену.

price = soup.find(class_="price").text

Имейте в виду, что если вы планируете часто парсить цену, вам следует добавить случайную паузу, чтобы избежать обнаружения как бота и блокировки вашего IP-адреса Coin Market Cap.

Шаг 2: Сохранение результатов в таблицу

Для решения данной задачи есть два подхода. Первый - мы можем отправлять текстовые уведомления каждый раз, когда криптовалюта достигает заранее определенного значения, или второй - мы можем отправлять текстовое сообщение каждый раз, когда криптовалюта понижается/повышается на определенное значение. В этом посте мы выберем второй вариант, но вы можете выбрать первый, если это имеет больше смысла для вас и вашей стратегии.

Для этого нам понадобится сохранить историю последнего отправленного текстового сообщения в таблице.

import pandas as pd
from datetime import datetimecurrent_time = datetime.now().strftime("%m/%d/%Y, %H:%M:%S")
df = pd.DataFrame([(current_time, price)], 
                  columns = ["time", "price"])
df.to_csv("coreto_price_history.csv", index=False)

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

Шаг 3: Отправка текстового сообщения с помощью Twilio

Когда у нас есть информация о изменении цены

price_difference = price - df.price.values[-1]
abs_price_difference = abs(price_difference)
sgn = "🔺" if price_difference <0 else "🔻"

Мы создаем флаговую переменную, чтобы не использовать API Twilio, если мы действительно не хотим отправлять обновление по SMS, чтобы избежать дополнительных расходов.

# Выполнять код, если разница больше чем 0.001 доллара США
flag = round(diff,3)>=0.001

Перейдите в консоль Twilio и получите свой ACCOUNT SID и AUTH TOKEN. Затем получите номер телефона Twilio, который может отправлять текстовые сообщения. Twilio предлагает $15 долларов пробного периода, однако, если у вас есть пробная учетная запись, вы сможете отправлять текстовые сообщения только на проверенные номера Twilio (что должно быть достаточно, если вы отправляете уведомление о цене только себе).

account_sid = "XXXXXXXXXXXXXXXX"
auth_token = "XXXXXXXXXXXXXXXXX"
twilio_phone = "+1........"
target_number = "+1......." # Номер телефона, который получает уведомления

Теперь мы аутентифицируемся и отправляем текстовое сообщение

client = Client(account_sid, auth_token)def send_msg(text, number, sender):    
    message = client.messages.create(body=text, 
                                     from_=sender,
                                     to=number)msg = f"Цена Coreto составляет {price}. Скрапировано @ {current_time}"send_msg(msg, target_number, twilio_phone)

Et voilà!

Ну... на самом деле нет. Мы закончили сценарий, но теперь мы хотим запустить его даже если наш компьютер выключен, пока мы спим.

☁️ Код, который работает 24/7

Вы можете запланировать выполнение своего скрипта так часто, как вам нужно, с помощью cronjob, однако я рекомендую делать это на облачной машине, чтобы ваш компьютер не должен быть включенным и подключенным к интернету все время. Я использовал самый маленький (и самый дешевый) экземпляр AWS ec2, так как наш код довольно простой.

Чтобы добавить cronjob на экземпляр ec2, просто введите crontab -e. Затем вы окажетесь в среде vi. Команды, которые вам понадобятся для выполнения вашей задачи, это i для вставки вашего cronjob, затем нажмите клавишу esc, затем :wq и нажмите Enter, чтобы сохранить изменения.

Мой cronjob выглядит так:

*/2 * * * * python coreto.py >> log.txt

Звездочки означают, что скрипт будет запускаться каждые две минуты, и я решил сохранить все выводы журнала в файл log.txt.

✨ Вот и все! Наслаждайтесь покупкой Coreto или вашей любимой криптовалюты! 🤑🌈

Полный код доступен на моем GitHub.

Подписывайтесь на меня в Twitter или Instagram или YouTube :)

Если вам понравилась эта статья, отправьте мне немного Coreto 😜