Receita: Web SMS
Diariamente, eu envio várias mensagens para alguns telefones celulares, mas as vezes é um pouco trabalhoso abrir o browser só pra entrar no site da operadora (no caso, Telemig Celular) e enviar a mensagem. Resolvi fazer esse módulo que valida e envia a mensagem. Não deve ser difícil aproveitar a idéia, (e usar a mesma interface), para os sites de outras operadoras.
Código
1 import urllib
2
3
4 class MessageError(Exception):
5 pass
6
7 class Message(object):
8 def __init__(self):
9 self.valid = False
10 self.url = "http://200.152.210.59/cgi-bin/waura.exe"
11 self.frm = {'operadora':"1",
12 'servico':"3",
13 'totalChars':"0",
14 'msg_total':"",
15 'Tel_Orig':"",
16 'Mensagem':"",
17 'DDD':"",
18 'Tel_Dest':"",
19 'Nome_Orig':"",
20 'Mensagem1':"",
21 'totalCounter':"145",
22 }
23
24 def setAreaCode(self, code):
25 self.frm['DDD'] = str(code)
26 self.valid = False
27
28 def setDestination(self, dest):
29 self.frm['Tel_Dest'] = str(dest)
30 self.valid = False
31
32 def setSender(self, sender):
33 self.frm['Nome_Orig'] = str(sender)
34 self.valid = False
35
36 def setMessage(self, message):
37 self.frm['Mensagem1'] = str(message)
38 self.valid = False
39
40 def validate(self):
41 if self.valid:
42 return True, "message not changed"
43 if not self.frm['Mensagem1']:
44 return False, "no message to send"
45 if not self.frm['Tel_Dest']:
46 return False, "no destination"
47 if self.frm['DDD'] not in [str(x) for x in range(31, 39)]:
48 return False, "invalid area code"
49 if not self.frm['Tel_Dest'].isdigit():
50 return False, "invalid destination number"
51
52 text1 = self.frm['Mensagem1']
53 text2 = self.frm['Nome_Orig']
54 text3 = self.frm['Tel_Orig']
55 len1 = len(text1)
56 len2 = len(text2)
57 len3 = len(text3)
58 total = len1 + len2 + len3
59
60 self.frm['totalChars'] = str(total)
61 self.frm['totalCounters'] = str(145 - total)
62 self.frm['msg_total'] = text1
63
64 if total > 145:
65 return False, "message length exceeded"
66
67
68 self.frm['target'] = "WebSMS"
69 self.frm['Mensagem'] = self.frm['Mensagem1']
70 self.frm['Mensagem1'] = ""
71
72 self.valid = True
73
74 return True, "OK"
75
76 def encode(self):
77 isvalid, msg = self.validate()
78
79 if not isvalid:
80 raise MessageError(msg)
81
82 params = urllib.urlencode(self.frm)
83 return params
84
85 def send(self):
86 data = self.encode()
87 url = self.url
88
89 results = urllib.urlopen(url, data)
90 return results
Volta para CookBook.