使用 Twilio MMS、Frinkiac 和 Python 构建辛普森一家报价机器人
介绍
我是《辛普森一家》的超级粉丝。事实上,我说的每一句话通常都与辛普森有关。我也喜欢社交媒体页面,例如@Simpsons_tweets、The Best Simpsons Faces,尤其是@SimpsonsQOTD。
但是,如果我没有电脑或 Wi-Fi,我该怎么办?我怎样才能充分领略辛普森的幽默?进入Twilio,这是云端文本、VoIP 和语音的 API。
在本教程中,我们将使用 Twilio 以及Frinkiac(辛普森一家的名言和屏幕截图数据库)来创建一个 Python 应用程序,该应用程序将每天通过MMS自动向我们发送辛普森一家的屏幕截图和名言。我们将用不到 40 行 Python 代码来实现这一点。没错,没有 cron 作业,没有服务器,只有纯 Python。
如果您不想跟着做,只想看完成的代码,请查看我的 Github存储库。
入门
在我们开始编写代码之前,我们需要设置我们的环境。
Python 和 pip
$ python -V && pip -V
如果您认为您的系统上没有 pip,请在此处下载。
Python 库
接下来我们需要安装一些 Python 库。pip 让这变得非常简单。运行以下命令,它将自动下载并安装我们的脚本所需的所有外部库:
$ pip install twilio requests schedule
Twilio 账户
最后,确保您拥有 Twilio 帐户。如果没有,您可以免费注册。您需要一个具有 SMS 和 MMS 功能的Twilio 电话号码。您可以在电话号码仪表板上查看号码的功能。一旦所有设置完成,您就可以开始构建报价机器人了。
构建我们的应用程序
现在是时候开始构建我们的应用程序了。我们只需要一个文件,因此请导航到您选择的目录并在您喜欢的编辑器中打开一个名为frinkiac.py的新文件。
在此文件的顶部添加以下行:
import schedule
import requests
from twilio.rest import TwilioRestClient
from twilio import TwilioRestException
account_sid = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
auth_token = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY'
client = TwilioRestClient(account_sid, auth_token)
上述代码中的前四行只是导入了我们刚刚安装的所有库。导入后的三行配置并创建了一个TwilioRestClient对象,该对象将允许我们调用Twilio REST API 。请确保将account_sid和auth_token的值替换为您的实际帐户 SID 和身份验证令牌。您可以在Twilio 帐户仪表板中找到这些值。
重要提示:切勿将包含 API 凭据的代码推送到公共存储库。请参阅本文底部的“可选步骤”部分,了解使用 Twilio API 密钥的替代方法。
接下来将以下功能添加到您的应用程序:
def get_quote():
r = requests.get("https://frinkiac.com/api/random")
if r.status_code == 200:
json = r.json()
# Extract the episode number and timestamp from the API response
# and convert them both to strings.
timestamp, episode, _ = map(str, json["Frame"].values())
image_url = "https://frinkiac.com/meme/" + episode + "/" + timestamp
# Combine each line of subtitles into one string.
caption = "\n".join([subtitle["Content"] for subtitle in json["Subtitles"]])
return image_url, caption
我们刚刚添加的函数使用请求向 Frinkiac 发送 GET 请求并检索有关随机辛普森时刻的数据。虽然 Frinkiac实际上不是一个 API,但整个站点都是基于反应的并通过 HTTP 获取资源。因此,我们可以像使用 API 一样使用该站点。接下来,我们将检索到的数据转换为JSON,提取时间戳和剧集代码,并将这两个组件转换为字符串格式。时间戳和剧集用于创建指向随机辛普森时刻屏幕截图的 URL。最后,我们从 JSON 中的每一行字幕中获取内容并将它们连接在一起形成caption。
现在添加我们唯一需要的其他函数:
def send_MMS():
media, body = get_quote()
try:
message = client.messages.create(
body=body,
media_url=media,
to="+12345678901", # Replace with your phone number
from_="+12345678901") # Replace with your Twilio number
print("Message sent!")
# If an error occurs, print it out.
except TwilioRestException as e:
print(e)
此函数首先调用我们在上一步中创建的get_quote函数并存储其返回值。上面的try / except块改编自Twilio 的 Python 快速入门文档。这些行只是接收一些参数并将它们转换为对 Twilio REST API 的调用。
将to和from参数分别替换为您的手机真实电话号码和您的 Twilio 电话号码。如果在 API 调用期间发生错误,它将被打印到终端。
现在,在我们文件底部刚刚添加的两个函数下面,插入以下三行:
schedule.every().day.at("12:00").do(send_MMS)
while True:
schedule.run_pending()
schedule允许您以非常易读的方式设置函数的运行频率。schedule 将在while循环内运行,该循环将无限期地继续循环。我们的应用程序现在将根据计划运行,这意味着send_MMS将无限期地每天中午 12:00调用,或者直到您退出应用程序。
测试我们的应用程序
为了测试应用程序,最好将上面添加的计划更改为更频繁地运行。例如,schedule.every(30).seconds.do(send_MMS)将每 30 秒调用一次send_MMS函数。(这样,您就不必等到中午才知道应用程序是否正常运行。)
更改后,请确保保存frinkiac.py。返回终端并运行以下命令:
$ python frinkiac.py
您的终端看起来好像冻结了,但这是因为您的应用正在运行。30秒后,您应该会看到终端上打印了一行内容,内容为“消息已发送! ”。有关将程序作为后台进程运行的说明,请参阅“可选步骤”部分。
如果您的应用因主机名不匹配错误而崩溃,这是因为请求库和 Python 版本之间存在问题。升级到 Python >=2.7.9 或按照此 StackOverflow 答案解决此问题。
如果您在使用 Twilio 时遇到任何错误,您将看到打印到终端的许多有关如何解决问题的有用提示。
否则,检查一下你的手机,你应该会看到一条带有随机辛普森一家截图和字幕的彩信!以下是一个例子:
好吧,所以你说你的儿子是金发,小鼻子,顽皮的笑容,并且可能带着弹弓?
总结
恭喜!您刚刚仅使用几行 Python 代码就构建了一个由 Twilio 提供支持的 MMS Simpsons 引用机器人。本指南中的工具(使用请求、 twilio和计划库等)可以以多种方式使用,以创建具有更多功能的应用程序。尝试将新的 API 和库与 Twilio 的其他一些功能(如语音或IP 消息传递)相结合,看看您能想出什么!
如果您喜欢这篇文章,请务必查看Twilio 博客,<font style="vertical-
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~