当你最喜欢的 Twitcher 直播时,用 30 行 Python 代码收到一条短信。这个 Twitcher 直播了吗?那个 Twitcher 正在直播吗?现在就给我发短信!整合所有内容 避免重复通知 寻找主持人 改进建议 结论,请不要离开🙏🙏🙏

2025-06-08

当您最喜欢的 Twitcher 用 30 行 Python 代码进行直播时,您会收到一条短信。

这个 Twitcher 有直播吗?

那个 Twitcher 正在直播吗?

现在就给我发短信!

把所有东西放在一起

避免重复通知

寻找宿主

改进的想法

结论,请不要去🙏🙏🙏

大家好 :) 今天我要开始一个专门针对 Python 初学者的新系列文章。这个系列的概念很简单:我会用尽可能少的代码做一个有趣的项目,并尝试尽可能多的新工具。

例如,今天我们将学习如何使用 Twilio API 和 Twitch API,以及如何在 Heroku 上部署项目。我将向您展示如何用 30 行代码,每月只需 12 美分,就能拥有自己的“Twitch Live”短信通知程序。

先决条件:你只需要知道如何在你的机器上运行 Python 以及一些 git 中的基本命令(提交和推送)。如果你需要这方面的帮助,我可以向你推荐以下两篇文章:

您将学到的内容:

  • Twitch API
  • Twilio API
  • 在 Heroku 上部署
  • 在 Heroku 上设置调度程序

您将构建什么:

需求很简单:我们希望在特定 Twitcher 直播时立即收到短信。我们希望知道此人何时开始直播,何时结束直播。我们希望整个流程能够全天候自动运行。

我们将把这个项目分成三个部分。首先,我们将学习如何通过编程来获取某个 Twitcher 是否在线。然后,我们将学习如何在在线时接收短信。最后,我们将学习如何让这段代码每 X 分钟运行一次,这样我们就不会错过我们最喜欢的主播的任何精彩瞬间。

这个 Twitcher 有直播吗?

要知道 Twitcher 是否在线,我们可以做两件事:我们可以转到 Twitcher URL 并尝试查看是否有“在线”徽章。

这个过程涉及到数据抓取,用 Python 写不到 20 行代码是很难做到的。Twitch 运行了大量的 JS 代码,简单的 request.get() 根本不够用。

在这种情况下,为了使抓取功能正常工作,我们需要在 Chrome 浏览器中抓取此页面,才能获得与屏幕截图中相同的内容。这是可行的,但需要的代码远不止 30 行。如果您想了解更多信息,请随时查看我最近的网页抓取指南

因此,我们不会尝试抓取 Twitch 的数据,而是使用他们的 API。对于不熟悉 API 的人来说,API 是一种编程接口,允许网站向任何人(主要是开发者)公开其功能和数据。就 Twitch 而言,他们的 API 通过 HTTP 公开,这意味着我们只需发出一个简单的 HTTP 请求就可以获取大量信息并执行许多操作。

获取您的 API 密钥

为此,您必须先创建 Twitch API 密钥。许多服务会强制执行 API 身份验证,以确保 API 不会被滥用,或限制特定人员访问某些功能。

请按照以下步骤获取您的 API 密钥:

  • 创建 Twitch 帐户
  • 现在创建一个 Twitch开发帐户-> 右上角“注册 - 使用 Twitch”
  • 登录后前往“仪表板”
  • “注册您的应用程序”
  • 名称 -> 任意,Oauth 重定向 URL -> http://localhost,类别 -> 任意

现在您应该会在屏幕底部看到您的客户端 ID。请保留此 ID 以供日后使用。

那个 Twitcher 正在直播吗?

有了 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": "<YOUR-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())
Enter fullscreen mode Exit fullscreen mode

输出应如下所示:

{
   "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"
   }
}
Enter fullscreen mode Exit fullscreen mode

这种数据格式称为 JSON,易于阅读。data对象是一个包含所有当前活动流的数组。键type确保流当前处于活动状态live。否则,此键将为空(例如,在发生错误的情况下)。

因此,如果我们想在 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)
Enter fullscreen mode Exit fullscreen mode

这时,你最喜欢的 Twitcher 正在直播。at_least_one_stream_active现在 我们来看看如何通过短信接收通知。True

现在就给我发短信!

因此,为了给自己发短信,我们将使用 Twilio API。只需前往那里创建一个帐户即可。当系统要求确认您的电话号码时,请使用您希望在此项目中使用的电话号码。这样,您就可以使用 Twilio 为新用户提供的 15 美元免费信用额度。每条短信大约 1 美分,足够您的机器人运行一年。

如果你打开控制台,你会看到你的Account SIDAuth Token,请保存它们以备后用。同时,点击红色大按钮“获取我的试用号码”,按照步骤操作,并保存此号码以备后用。

使用 Twilio Python API 发送文本非常简单,因为他们提供了一个包来帮你完成这些烦人的工作。安装该包,pip install Twilio然后执行以下操作:

from twilio.rest import Client
client = Client(<Your Account SID>, <Your Auth Token>)
client.messages.create(
    body='Test MSG',from_=<Your Trial Number>,to=<Your Real Number>)
Enter fullscreen mode Exit fullscreen mode

这就是你向自己发送短信所需的全部内容,很神奇吧?

把所有东西放在一起

我们现在将所有内容放在一起,并稍微缩短代码,以便我们能够将 Python 代码控制在 30 行以下。

import requests
from twilio.rest import Client
endpoint = "https://api.twitch.tv/helix/streams?"
headers = {"Client-ID": "<YOUR-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(<Your Account SID>, <Your Auth Token>)
    client.messages.create(body='LIVE !!!',from_=<Your Trial Number>,to=<Your Real Number>)
Enter fullscreen mode Exit fullscreen mode

避免重复通知

该代码片段效果很好,但如果该代码片段在服务器上每分钟运行一次,那么只要我们最喜欢的 Twitcher 上线,我们每分钟就会收到一条短信。

我们需要一种方法来存储我们已经收到的 Twitcher 正在直播的通知以及我们不再需要收到通知的事实。

Twilio API 的优点在于它提供了一种检索消息历史记录的方法,因此我们只需检索我们发送的最后一条短信,看看我们是否已经发送了一条短信通知我们该 twitcher 正在直播。

以下是我们将要用伪代码做的事情:

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()
Enter fullscreen mode Exit fullscreen mode

这样,直播开始和结束时我们都会收到短信。这样我们就不会被垃圾信息骚扰了——完美吧?我们来写个代码:

# 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
Enter fullscreen mode Exit fullscreen mode

现在让我们把所有内容重新放在一起:

import requests
from twilio.rest import Client
client = Client(<Your Account SID>, <Your Auth Token>)

endpoint = "https://api.twitch.tv/helix/streams?"
headers = {"Client-ID": "<YOUR-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_=<Your Trial Number>,to=<Your Real Number>)
if not at_least_one_stream_active and not offline_notified:
    client.messages.create(body='OFFLINE !!!',from_=<Your Trial Number>,to=<Your Real Number>)
Enter fullscreen mode Exit fullscreen mode

瞧!

现在,您有一段不到 30 行 Python 代码,当您最喜欢的 Twitcher 上线/下线时,它会向您发送一条短信,而不会向您发送垃圾邮件。

我们现在只需要一种方法来每 X 分钟托管并运行此代码片段。

寻找宿主

我们将使用 Heroku 来托管和运行此代码片段。说实话,Heroku 是 Web 上托管应用最简单的方式之一。缺点是,与其他解决方案相比,它的价格非常昂贵。幸运的是,他们有一个慷慨的免费计划,几乎免费,让我们可以做我们想做的事情。

如果您还没有,您需要创建一个Heroku 帐户。您还需要下载并安装 Heroku 客户端

现在你需要将你的 Python 脚本移动到它自己的文件夹中,别忘了requirements.txt在其中添加一个文件。后者的内容如下:

requests
twilio
Enter fullscreen mode Exit fullscreen mode

cd进入该文件夹并执行heroku create --app <app name>

如果您进入应用程序仪表板,您将看到您的新应用程序。

我们现在需要初始化一个 git repo 并将代码推送到 Heroku:

git init
heroku git:remote -a <app name>
git add .
git commit -am 'Deploy breakthrough script'
git push heroku master
Enter fullscreen mode Exit fullscreen mode

您的应用现在已在 Heroku 上运行,但它没有任何功能。由于这个小脚本无法接受 HTTP 请求,因此运行<app name>.herokuapp.com它不会有任何效果。但这应该不成问题。
要让这个脚本全天候运行,我们需要使用一个简单的 Heroku 插件“Heroku Scheduler”。要安装此插件,请点击应用仪表板上的“配置插件”按钮。

然后,在搜索栏上查找 Heroku Scheduler:

点击结果,然后点击“提供”

如果您返回到应用程序仪表板,您将看到该附加组件:

点击“Heroku Scheduler”链接配置作业。然后点击“创建作业”。这里选择“10 分钟”,运行命令选择python <name_of_your_script>.py。点击“保存作业”。

虽然我们目前在 Heroku 上使用的所有服务都是免费的,但 Heroku Scheduler 会在每月 25 美元的实例上运行该作业,但会按秒计费。由于该脚本大约需要 3 秒才能运行,因此如果该脚本每 10 分钟运行一次,您每月只需花费 12 美分。

改进的想法

希望你喜欢这个项目,并且享受其中的乐趣。虽然不到 30 行代码,我们做了很多工作,但整体还远非完美。以下是一些改进建议:

  • 向自己发送有关当前流媒体的更多信息(玩过的游戏、观众人数......)
  • 当 Twitcher 离线时,向自己发送最后一次直播的时长
  • 不要给你发短信,而是发电子邮件
  • 同时监控多个 twitcher 如果您有更多的想法,请随时在评论中告诉我。

结论,请不要去🙏🙏🙏

希望你喜欢这篇文章,并从中有所收获。我坚信这类项目是学习新工具和新概念的最佳途径之一。我最近发布了一个网页抓取 API,在开发过程中我学到了很多东西。

我正在考虑写一本面向 Python 学习者的书籍,里面会包含 15 个类似的项目。如果你觉得这本书可能让你感兴趣,或者觉得它不太好🙅‍♂️,或者只是你的想法🤔,请在评论区告诉我。

祝您编码愉快。

鏂囩珷鏉簮锛�https://dev.to/daolf/get-an-sms-when-your-favorite-twitcher-is-streaming-in-30-lines-of-python-549a
PREV
Git Rebase 和黄金法则解释
NEXT
即使是大公司也会搞砸