返回介绍

16.6 用 Twilio 发送短信

发布于 2024-01-22 21:44:06 字数 3759 浏览 0 评论 0 收藏 0

大多数人更可能靠近自己的手机,而不是自己的电脑,所以与电子邮件相比,短信发送通知可能更直接、可靠。此外,短信的长度较短,让人更有可能阅读它们。

在本节中,你将学习如何注册免费的Twilio服务,并用它的Python模块发送短信。Twilio是一个SMS网关服务,这意味着它是一种服务,让你通过程序发送短信。虽然每月发送多少短信会有限制,并且文本前面会加上Sent from a Twilio trial account,但这项试用服务也许能满足你的个人程序。免费试用没有限期,不必以后升级到付费的套餐。

Twilio不是唯一的SMS网关服务。如果你不喜欢使用Twilio,可以在线搜索free sms gateway、python sms api,甚至twilio alternatives,寻找替代服务。

注册Twilio账户之前,先安装twilio模块。附录A详细介绍了如何安装第三方模块。

本节特别针对美国。Twilio 确实也在美国以外的国家提供手机短信服务,本书并不包括这些细节。但twilio 模块及其功能,在美国以外的国家也能用。更多信息请参见http://twilio.com/。

16.6.1 注册Twilio账号

访问http://twilio.com/并填写注册表单。注册了新账户后,你需要验证一个手机号码,短信将发给该号码(这项验证是必要的,防止有人利用该服务向任意的手机号码发送垃圾短信)。

收到验证号码短信后,在Twilio网站上输入它,证明你拥有要验证的手机。现在,就可以用twilio模块向这个电话号码发送短信了。

Twilio提供的试用账户包括一个电话号码,它将作为短信的发送者。你将需要两个信息:你的账户SID和AUTH(认证)标志。在登录Twilio账户时,可以在Dashboard页面上找到这些信息。从Python程序登录时,这些值将作为你的Twilio用户名和密码。

16.6.2 发送短信

一旦安装了twilio模块,注册了Twilio账号,验证了你的手机号码,登记了Twilio电话号码,获得了账户的SID和auth标志,你就终于准备好通过Python脚本向你自己发短信了。

与所有的注册步骤相比,实际的Python代码很简单。保持计算机连接到因特网,在交互式环境中输入以下代码,用你的真实信息替换accountSID、authToken、myTwilioNumber和myCellPhone变量的值:

❶ >>> from twilio.rest import TwilioRestClient
 >>> accountSID = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
 >>> authToken = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
❷ >>> twilioCli = TwilioRestClient(accountSID, authToken)
 >>> myTwilioNumber = '+14955551234'
 >>> myCellPhone = '+14955558888'
❸ >>> message = twilioCli.messages.create(body='Mr. Watson - Come here - I want
 to see you.', from_=myTwilioNumber, to=myCellPhone)

键入最后一行后不久,你会收到一条短信,内容为:Sent from your Twilio trial account - Mr. Watson - Come here – I want to see you.。

因为twilio模块的设计方式,导入它时需要使用from twilio.rest import TwilioRestClient,而不仅仅是import twilio❶。将账户的SID保存在accountSID,认证标志保存在authToken中,然后调用TwilioRestClient(),并传入accountSID和authToken。TwilioRestClient()调用返回一个TwilioRestClient对象❷。该对象有一个message属性,该属性又有一个create()方法,可以用来发送短信。正是这个方法,将告诉Twilio的服务器发送短信。将你的Twilio号码和手机号码分别保存在myTwilioNumber和myCellPhone中,然后调用create(),传入关键字参数,指明短信的正文、发件人的号码(myTwilioNumber),以及收信人的电话号码(myCellPhone)❸

create()方法返回的Message对象将包含已发送短信的相关信息。输入以下代码,继续交互式环境的例子:

>>> message.to
'+14955558888'
>>> message.from_
'+14955551234'
>>> message.body
'Mr. Watson - Come here - I want to see you.'

to、from和body属性应该分别保存了你的手机号码、Twilio号码和消息。请注意,发送手机号码是在from属性中,末尾有一个下划线,而不是from。这是因为from是一个Python关键字(例如,你在from modulename import *形式的import语句中见过它),所以它不能作为一个属性名。输入以下代码,继续交互式环境的例子:

>>> message.status
'queued'
>>> message.date_created
datetime.datetime(2015, 7, 8, 1, 36, 18)
>>> message.date_sent == None
True

status 属性应该包含一个字符串。如果消息被创建和发送,date_created 和date_sent属性应该包含一个datetime对象。如果已收到短信,而status属性却设置为'queued',date_sent属性设置为None,这似乎有点奇怪。这是因为你先将Message对象记录在message变量中,然后短信才实际发送。你需要重新获取Message对象,查看它最新的status和date_sent。每个Twilio消息都有唯一的字符串ID(SID),可用于获取Message对象的最新更新。输入以下代码,继续交互式环境的例子:

 >>> message.sid
 'SM09520de7639ba3af137c6fcb7c5f4b51'
❶ >>> updatedMessage = twilioCli.messages.get(message.sid)
 >>> updatedMessage.status
 'delivered'
 >>> updatedMessage.date_sent
 datetime.datetime(2015, 7, 8, 1, 36, 18)

输入message.sid将显示这个消息的SID。将这个SID传入Twilio客户端的get()方法❶,你可以取得一个新的Message对象,包含最新的信息。在这个新的Message对象中,status和date_sent属性是正确的。

status属性将设置为下列字符串之一:'queued'、'sending'、'sent'、'delivered'、'undelivered'或'failed'。这些状态不言自明,但对于更准确的细节,请查看http://nostarch. com/automatestuff/的资源。

用Python接收短信

遗憾的是,用Twilio接收短信比发送短信更复杂一些。Twilio需要你有一个网站,运行自己的Web应用程序。这已超出了本书的范围,但你可以在本书的资源中找到更多细节(http://nostarch.com/automatestuff/)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文