当前位置:嗨网首页>书籍在线阅读

33-发送短信

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

18.8.2 发送短信

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

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

❶ >>> 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() ,并传入 accountSIDauthTokenClient() 调用返回一个 Client 对象❷。该对象有一个 message 属性,该属性又有一个 create() 方法,可以用来发送短信。这个方法将告诉Twilio的服务器发送短信。将你的Twilio号码和手机号码分别保存在 myTwilioNumbermyCellPhone 中,然后调用 create() ,传入关键字参数,指明短信的正文、发件人的号码( myTwilioNumber ),以及收信人的电话号码( myCellPhone )❸。

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

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

tofrombody 属性应该分别保存了你的手机号码、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_createddate_sent 属性应该包含一个 datetime 对象。如果已收到短信,而 status 属性却设置为 'queued'date_sent 属性设置为 None ,这似乎有点奇怪。这是因为你先将 Message 对象记录在 message 变量中,然后短信才实际发送。你需要重新获取 Message 对象,查看它最新的 statusdate_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 对象中, statusdate_sent 属性是正确的。

status 属性将设置为下列字符串之一: 'queued''sending''sent''delivered''undelivered''failed' 。这些状态不言自明,对于更准确的细节,请查看相关资源和图书。

用Python接收短信

遗憾的是,用Twilio接收短信比发送短信更复杂一些。Twilio需要你有一个网站,用于运行自己的Web应用程序。这已超出了本书的范围,但你可以在网上找到更多细节。