gpt4 book ai didi

python - 发送自动短信警报 Python/Django

转载 作者:行者123 更新时间:2023-11-30 21:50:20 24 4
gpt4 key购买 nike

我正在使用 Django 构建一个网站。我希望用户能够在发布新主题时通过短信接收提醒。

我测试了 textlocal,但在尝试向多个号码发送短信时遇到问题 (numbers = ['xxxxx','xxxxx'])。(我不想使用 group_id)。

通常我希望能够做这样的事情:

numbers = (SELECT number FROM users WHERE SMS_subscribe=1)
sender = 'mywebsite'
message = 'Hey, a new topic was posted'
send_sms(numbers, message, sender)
<小时/>

我的textlocal测试代码:

#!/user/bin/python
# -*- coding: utf-8 -*-
from urllib2 import Request, urlopen
from urllib import urlencode

def send_sms(uname, hash_code, numbers, message, sender):
data = urlencode({
'username' : uname,
'hash' : hash_code,
'numbers' : numbers,
'message' : message,
'sender' : sender,
'test' : True
})


#data = data.encode('utf-8')
request = Request('https://api.txtlocal.com/send/?')
response = urlopen(request, data)
return response.read()


def just_one_sms_message(message, annonce_link, sender):
links_len=len(annonce_link) + len(sender) + 1
sms_max_len = 160 - links_len
if len(message)>sms_max_len:
message = message[:sms_max_len-6]+'... : '
else:
message += ' : '
return message + annonce_link + '\n' + sender


username = 'xxxxxxx@gmail.com'
hash_code = '3b5xxxxxxxxxxxxxxxxxxxxxxxxxxx8d83818'
numbers = ('2126xxxxx096','2126xxxxx888')
annonce_link = 'http://example.com/'
sender = 'sender'
message = 'New topics..'
message = just_one_sms_message(message, annonce_link, sender)

resp = send_sms(username, hash_code, numbers, message, sender)
print resp

执行此代码时出现此错误:

{"warnings":[{"code":3,"message":"Invalid number"}],"errors":[{"code":4,"message":"No recipients specified"}],"status":"failure"}

但是如果我改变:numbers=('2126xxxxx096')它就有效。

<小时/>

执行此操作的最佳方法或网络服务是什么?

最佳答案

您遇到了几个问题。第一个是元组文字的定义方式。

('somenumber') 相当于 python 中的'somenumber'。它只是一个字符串。括号本身并不能定义元组文字。要定义单元素元组文字,您需要第一个元素的尾随逗号。例如。 ('somenumber',).

第二个问题是urlencode如何工作。对于数据字典中的每个值,它都会询问字符串表示形式。

对于 ('2126xxxxx096','2126xxxxx888'),由于它被评估为 tuple,因此它被编码为 ('2126xxxxx096',' 2126xxxxx888'),结果为 %28%272126xxxxx096%27%2C+%272126xxxxx888%27%29

对于 ('2126xxxxx096'),由于它被计算为 字符串,因此它被编码为 2126xxxxx096。请注意,缺少 %28%29 等垃圾字符。

所以,简而言之,由于 urlencode 字典中 numbers 的值是一个 tuple,当你有多个数字时,你需要将元组转换为逗号分隔的字符串。这可以通过 ",".join(numbers) 来完成,在 ('2126xxxxx096','2126xxxxx888') 的情况下,会生成 2126xxxxx096%2C2126xxxxx888。使用固定编码,您的消息现在应该发送到多个号码。

关于python - 发送自动短信警报 Python/Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23043939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com