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

Проект Python в 30 линиях кода: Как настроить уведомление SMS, когда ваш любимый Twitcher Treaking

Автор оригинала: Pierre de Wulf.

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

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

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

Python 3 Руководство по установке и настройке

Команда Ultimate GIT Учебник для начинающих от Адриана Хайдин.

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

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

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

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

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

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

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

Для соскабливания на работе, в этом случае нам нужно будет соскребать эту страницу внутри Chrome, чтобы получить тот же контент, такой как то, что вы видите на скриншоте. Это выполнимо, но это займет гораздо более 30 строк кода. Если вы хотите узнать больше, не стесняйтесь проверять мой недавний Веб соскоб без заблокированного гида Отказ (Я недавно запущенный ScrapingBee, A Web-Scraping Tool Следовательно, мои знания в поле;))

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

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

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

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

  • Создать учетную запись Twitch
  • Теперь создайте подергивание DEV аккаунт -> «Подписаться с Twitch»
  • Перейти к вашей «приборной панели» после входа в систему
  • «Зарегистрируйте свое приложение»
  • Название -> Что угодно, URL-адрес перенаправления ОАУТ -> http://localhost, категория -> что угодно

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

Это твитч по течению сейчас?

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

Давайте теперь посмотрим, как получить уведомление SMS.

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

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

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

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

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

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

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=)

И VUILà!

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

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

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

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

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

requests
twilio

CD В эту папку и просто сделайте `heroku create –app <имя приложения>`.

Если вы идете на свой Приложение Dashboard Вы увидите ваше новое приложение.

Теперь нам нужно инициализировать 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 Где я многому научился, делая это.

Подскажите пожалуйста в комментариях, если вам понравился этот формат и если вы хотите сделать больше.

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

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

Пронзительный

Не хочу пропустить свой следующий пост:

Вы можете подписаться здесь к моей рассылке.