如何用Python获取短信发送者信息?
我正在使用Twilio和Django来做一个短信应用(我昨天才开始学Python,请多多包涵)。
我需要帮助的是:当Twilio把一条短信发到我的网址时,我希望我的应用能自动把发短信的电话号码、日期/时间和短信内容添加到一些列表里。我该怎么做呢?
谢谢!
2 个回答
我刚刚用Twilio和Django写了一个示例应用,放在了GitHub上。不过这里我给你提供你需要的具体答案。
在这个例子中,我使用了我服务器上的'/reply/'这个网址(并告诉Twilio在这里发送数据)。
在urls.py文件里,你只需要做一个标准的映射: url(r'^reply', 'twilio_sms.views.sms_reply'),
下面是一个非常简单的用户回复,按照Twilio服务器的要求来回应。 def sms_reply(request): if request.method == 'POST': params = request.POST phone = re.sub('+1','',params['From'])
response_message = '<?xml version="1.0" encoding="UTF-8">'
response_message += '<Response><Sms>Thanks for your text!</Sms></Response>'
return HttpResponse(response_message)
在我的代码中,我实际上是用一个库来构建XML响应的,我一般建议这样做,但为了这个代码示例来说信息量有点大。
Twilio在请求你的网址时,会把发送者的信息作为'From'参数发送过来。你可以在这里找到相关的文档:http://www.twilio.com/docs/api/twiml/sms/message
这段代码大概是这样的,我是在一个用Python写的网页应用中写的(不是用Django)。
class MainHandler(webapp.RequestHandler):
def get(self):
model = Storage()
from = self.request.get("From")
if from is not '':
model.sms_from = self.request.get("From")
model.sms_body = self.request.get("Body")
model.put()
models = Storage.all()
for i in models:
self.response.out.write(i.sms_from + ' ' + i.sms_body +'<br>')
更新:
当我拿起手机,给xxx-xxx-xxxx发短信时,Twilio会收到这条短信,然后会向我设置的网址发出请求。
从那时起,这个请求看起来就和从网页浏览器发出的请求一模一样。
这个问题会帮助你了解Django中的具体细节,关于如何获取网址参数的信息可以参考这个链接:在request.GET中捕获网址参数
发送者的所有参数应该都会在这里。