33-发送短信
18.8.2 发送短信
一旦安装了 twilio 模块,注册了Twilio账号,验证了你的手机号码,登记了Twilio电话号码,获得了账户的SID和auth标志,你就做好通过Python脚本向你自己发短信的准备了。
与所有的注册步骤相比,实际的Python代码很简单。保持计算机连接到因特网,在交互式环境中输入以下代码,用你的真实信息替换 accountSID 、 authToken 、 myTwilioNumber 和 myCellPhone 变量的值:
❶ >>> from twilio.rest import Client
>>> accountSID = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
>>> authToken = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
❷ >>> twilioCli = Client(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 Client ,而不仅仅是 import twilio ❶。将账户的SID保存在 accountSID 中,认证标志保存在 authToken 中,然后调用 Client() ,并传入 accountSID 和 authToken 。 Client() 调用返回一个 Client 对象❷。该对象有一个 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(2019, 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(2019, 7, 8, 1, 36, 18)
输入 message.sid 将显示这个消息的SID。将这个SID传入Twilio客户端的 get() 方法❶,你可以取得一个新的 Message 对象,它包含最新的消息。在这个新的 Message 对象中, status 和 date_sent 属性是正确的。
status 属性将设置为下列字符串之一: 'queued' 、 'sending' 、 'sent' 、 'delivered' 、 'undelivered' 或 'failed' 。这些状态不言自明,对于更准确的细节,请查看相关资源和图书。
用Python接收短信
遗憾的是,用Twilio接收短信比发送短信更复杂一些。Twilio需要你有一个网站,用于运行自己的Web应用程序。这已超出了本书的范围,但你可以在网上找到更多细节。