Рубрики
Без рубрики

Получите SMS, когда ваш любимый Twitcher транслирует в 30 строк Python.

Код и разверните бот, который уведомит вас по тексту, как только ваш любимый Twitcher живет, менее чем за 30 строк кода Python. Теги с Python, учебником, начинающим, Showdev.

Всем привет:) Сегодня я начинаю новую серию постов, специально нацелен на начинающих Python. Концепция довольно проста: я сделаю забавный проект, в виде нескольких строк кода, как можно меньше, и постараюсь как можно больше новых инструментов.

Например, сегодня мы научимся использовать API Twilio API, Twitch API, и мы увидим, как развернуть проект на Heroku. Я покажу вам, как вы можете иметь свой собственный «Twitch Live» SMS-уведомитель, в 30 строках кодов, а за 12 центов в месяц.

Пререквизит : Вам нужно только знать, как запустить Python на вашей машине и некоторые основные команды в Git (Commit & Push). Если вам нужна помощь с этим, я могу рекомендовать эти 2 статьи к вам:

Что вы узнаете:

  • Twitch API
  • Twilio API
  • Развертывание на Героку
  • Настройка планировщика на Heroku

Что вы построете:

Технические характеристики просты: мы хотим получить SMS, как только определенный Twitcher – это текущая трансляция. Мы хотим знать, когда этот человек собирается жить, и когда они оставляют потоковую. Мы хотим, чтобы все это было бежать самостоятельно, весь день.

Мы разделим проект на 3 части. Во-первых, мы увидим, как программно знать, если определенный Twitcher находится в сети. Тогда мы увидим, как получить SMS, когда это произойдет. Мы заканчиваем, увидев, как сделать этот кусок кода, проводимый каждые x минут, поэтому мы никогда не пропускаем другой момент нашего любимого стримера.

Чтобы узнать, проживает ли Twitcher, мы можем сделать две вещи: мы можем пойти в URL Twitcher и постарайтесь посмотреть, есть ли там значок «Live».

Этот процесс включает в себя соскоб и не легко выполнен в Python менее чем за 20 или около того строк кода. Twitch запускает много кода JS и простой запрос .get () не будет достаточно.

Для соскабливания на работе, в этом случае нам нужно будет соскрести эту страницу внутри Chrome, чтобы получить тот же контент, как то, что вы видите на скриншоте. Это выполнимо, но это займет гораздо более 30 строк кода. Если вы хотите узнать больше, не стесняйтесь проверять мой недавний Веб-соскобное руководство Отказ

Таким образом, вместо того, чтобы пытаться соскребать дергаться, мы будем использовать их API. Для тех, кто не знаком с термином, API – это программный интерфейс, который позволяет веб-сайтам подвергать свои функции и данные всем, в основном разработчики. В случае Twitch их API выставлена через HTTP, что означает, что мы можем иметь много информации и делать много вещей, просто сделав простые HTTP-запрос.

Получите ключ вашего API

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

Пожалуйста, выполните следующие действия, чтобы получить ключ API:

  • Создать учетную запись Twitch
  • Теперь создайте подергивание DEV аккаунт -> «Подписание – с дергащимися»
  • Перейдите на свою «приборную панель», когда-то вошли в систему
  • ” Зарегистрируйте свое приложение “
  • Имя -> Что угодно, URL-адрес перенаправления OAuth -> http://localhost Категория -> Что бы ни

Теперь вы должны увидеть, внизу экрана, ваш клиент-идентификатор. Держите это на потом.

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

# requests is the go to package in python to make http request
# https://2.python-requests.org/en/master/
import requests

# This is one of the route where Twich expose data, 
# They have many more: https://dev.twitch.tv/docs
endpoint = "https://api.twitch.tv/helix/streams?"

# In order to authenticate we need to pass our api key through header
headers = {"Client-ID": ""}

# The previously set endpoint needs some parameter, here, the Twitcher we want to follow
# Disclaimer, I don't even know who this is, but he was the first one on Twich to have a live stream so I could have nice examples
params = {"user_login": "Solary"}

# It is now time to make the actual request
response = request.get(endpoint, params=params, headers=headers)
print(response.json())

Выход должен выглядеть так:

{
   "data":[
      {
         "id":"35289543872",
         "user_id":"174955366",
         "user_name":"Solary",
         "game_id":"21779",
         "type":"live",
         "title":"Wakz duoQ w/ Tioo - GM 400LP - On récupère le chall après les -250LP d'inactivité !",
         "viewer_count":4073,
         "started_at":"2019-08-14T07:01:59Z",
         "language":"fr",
         "thumbnail_url":"https://static-cdn.jtvnw.net/previews-ttv/live_user_solary-{width}x{height}.jpg",
         "tag_ids":[
            "6f655045-9989-4ef7-8f85-1edcec42d648"
         ]
      }
   ],
   "pagination":{
      "cursor":"eyJiIjpudWxsLCJhIjp7Ik9mZnNldCI6MX19"
   }
}

Этот формат данных называется JSON и легко читается. данные Объект – это массив, который содержит все текущие активные потоки. Ключ Тип гарантирует, что поток в настоящее время жить . Этот ключ будет пустым иным образом (в случае ошибки, например).

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

json_response = response.json()

# We get only streams
streams = json_response.get('data', [])

# We create a small function, (a lambda), that tests if a stream is live or not
is_active = lambda stream: stream.get('type') == 'live'
# We filter our array of streams with this function so we only keep streams that are active
streams_active = filter(is_active, streams)

# any returns True if streams_active has at least one element, else False
at_least_one_stream_active = any(streams_active)

print(at_least_one_stream_active)

На данный момент at_least_one_stream_active это Правда Когда ваш любимый кружанок живет. Давайте теперь посмотрим, как получить уведомление по SMS.

Итак, чтобы отправить текст на себя, мы будем использовать API Twilio. Просто иди Там и создать учетную запись. Когда попросили подтвердить свой номер телефона, пожалуйста, используйте номер телефона, который вы хотите использовать в этом проекте. Таким образом, вы сможете использовать 15 долларов бесплатного кредита Twilio для новых пользователей. Около 1 цента текст, для вашего бота должно быть достаточно, чтобы ваш бот проводился в течение одного года.

Если вы идете на Консоль Вы увидите ваше СЧЕТ SID. и ваш Токен авторизации Сохраните их на потом. Также нажмите на большую красную кнопку «Получите мой пробный номер», следуйте за шагом и сохраните этот потом.

Отправка текста с API Twilio Python API очень прост, так как они предоставляют пакет, который делает вас раздражающим материалом. Установите пакет с помощью Пип Установите Twilio И просто сделать:

from twilio.rest import Client
client = Client(, )
client.messages.create(
    body='Test MSG',from_=,to=)

И это все, что вам нужно отправить себе текст, удивительно правильно?

Теперь мы поставим все вместе и сократили код немного, поэтому нам удастся сказать под 30 линиями Python Code.

import requests
from twilio.rest import Client
endpoint = "https://api.twitch.tv/helix/streams?"
headers = {"Client-ID": ""}
params = {"user_login": "Solary"}
response = request.get(endpoint, params=params, headers=headers)
json_response = response.json()
streams = json_response.get('data', [])
is_active = lambda stream:stream.get('type') == 'live'
streams_active = filter(is_active, streams)
at_least_one_stream_active = any(streams_active)
if at_least_one_stream_active:
    client = Client(, )
    client.messages.create(body='LIVE !!!',from_=,to=)

Этот фрагмент отлично работает, но должен ли этот фрагмент запускаться каждую минуту на сервере, как только наш любимый Twitcher идет жить, мы получим SMS каждую минуту.

Нам нужен способ сохранить тот факт, что нас уже уведомли, что наш Twitcher живет, и что нам больше не нужно быть уведомленным.

Хорошая вещь с API Twilio в том, что он предлагает способ получить способ извлечения нашей истории сообщений, поэтому нам просто нужно получить последние смс, которые мы отправили, если мы уже отправили текст, уведомляем нас, что TwiCher живет.

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

if favorite_twitcher_live and last_sent_sms is not live_notification:
    send_live_notification()
if not favorite_twitcher_live and last_sent_sms is live_notification:
    send_live_is_over_notification()

Таким образом, мы получим текст, как только поток запускается, а также когда он закончится. Таким образом, мы не будем спамиться – идеально правы? Давайте код это:

# reusing our Twilio client
last_messages_sent = client.messages.list(limit=1)
last_message_id = last_messages_sent[0].sid
last_message_data = client.messages(last_message_id).fetch()
last_message_content = last_message_data.body

Давайте теперь снова поставим все вместе:

import requests
from twilio.rest import Client
client = Client(, )

endpoint = "https://api.twitch.tv/helix/streams?"
headers = {"Client-ID": ""}
params = {"user_login": "Solary"}
response = request.get(endpoint, params=params, headers=headers)
json_response = response.json()
streams = json_response.get('data', [])
is_active = lambda stream:stream.get('type') == 'live'
streams_active = filter(is_active, streams)
at_least_one_stream_active = any(streams_active)

last_messages_sent = client.messages.list(limit=1)
if last_messages_sent:
    last_message_id = last_messages_sent[0].sid
    last_message_data = client.messages(last_message_id).fetch()
    last_message_content = last_message_data.body
    online_notified = "LIVE" in last_message_content
    offline_notified = not online_notified
else:
    online_notified, offline_notified = False, False

if at_least_one_stream_active and not online_notified:
    client.messages.create(body='LIVE !!!',from_=,to=)
if not at_least_one_stream_active and not offline_notified:
    client.messages.create(body='OFFLINE !!!',from_=,to=)

И VOILà!

Теперь у вас есть фрагмент кода, менее чем за 30 строк Python, который отправит вам текст A, когда ваш любимый Twitcher выходит в Интернет/в автономном режиме и без спад.

Мы только сейчас нужны способ разместить и запустить этот фрагмент каждые x минут.

Чтобы провести и запустить этот фрагмент, мы будем использовать Heroku. Heroku честно говоря, одним из самых простых способов принять приложение в Интернете. Недостатком является то, что это действительно дорого по сравнению с другими решениями там. К счастью для нас, у них есть щедрый бесплатный план, который позволит нам делать то, что мы хотим почти ничего.

Если вы еще этого не сделаете, вам нужно создать Учетная запись Heroku . Вам также нужно скачать и Установите клиент Heroku Отказ

Теперь вы должны переместить свой сценарий Python в свою собственную папку, не забудьте добавить требования .txt Файл в нем. Содержание последнего начинается:

requests
twilio

CD в эту папку и просто сделать Heroku Create --app <имя приложения> Отказ

Если вы отправитесь в свое приложение щиток приборов Вы увидите ваше новое приложение.

Теперь нам нужно инициализировать Git Reppo и протолкнуть код на Heroku:

git init
heroku git:remote -a 
git add .
git commit -am 'Deploy breakthrough script'
git push heroku master

Ваше приложение сейчас на Heroku, но это ничего не делает. Поскольку этот маленький скрипт не может принять HTTP-запросы, собираюсь на <Имя приложения> .herokuapp.com ничего не сделаю. Но это не должно быть проблемой. Чтобы этот скрипт запустил 24/7, нам нужно использовать простое дополнение Heroku Call «Heroku Scheduler». Чтобы установить это дополнение, нажмите кнопку «Настроить надстройки» на приложении приложений.

Затем на панели поиска ищите планировщика Heroku:

Нажмите на результат и нажмите «Положение»

Если вы вернетесь к вашему приложению приложение, вы увидите надстройку:

Нажмите на ссылку «Heroku Scheduler», чтобы настроить задание. Затем нажмите «Создать работу». Здесь выберите «10 минут», а для команды запуска выберите Python .py Отказ Нажмите на «Сохранить работу».

В то время как все, что мы использовали до сих пор на Heroku, бесплатны, планировщик Heroku будет запустить работу на экземпляре $ 25/месяц, но протягивается до второго. Поскольку этот скрипт примерно занимает 3 секунды для запуска, для этого скрипта проводится каждые 10 минут, вы должны просто потратить 12 центов в месяц.

Я надеюсь, что вам понравился этот проект, и что вам повеселились наменять на место. Менее чем за 30 строк кода мы многое сделали, но все это далеко от идеальной. Вот несколько идей для его улучшения:

  • Отправьте себя больше информации о текущей потоковой передаче (игра в игре, количество зрителей …)
  • Отправьте себе продолжительность последнего потока, как только Twitcher отключится в автономном режиме
  • Не отправляйте вам текст, а скорее электронное письмо
  • Мониторинг нескольких дерганов одновременно не стесняйтесь сказать мне в комментариях, если у вас есть больше идей.

Я надеюсь, что вам понравился этот пост и что вы научились, читая это. Я искренне верю, что этот вид проекта является одним из лучших способов выучить новые инструменты и концепции, я недавно запустил Web Scraping API Где я многому научился, делая его.

Я обдумываю запись книги для учащегося Python с 15 проектами такого рода. Пожалуйста, скажите мне в комментариях, если вы думаете, что это то, что могло заинтересовать вас, если вы думаете, что это плохое представление 🙅♂️ или только то, что вы думаете 🤔

Счастливое кодирование.

Оригинал: “https://dev.to/daolf/get-an-sms-when-your-favorite-twitcher-is-streaming-in-30-lines-of-python-549a”