-
Notifications
You must be signed in to change notification settings - Fork 0
/
CorreiosUbuntu.py
164 lines (127 loc) · 5.77 KB
/
CorreiosUbuntu.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
import httplib
import urllib
import time
import pynotify
from datetime import datetime
from HTMLParser import HTMLParser
class Correios(object):
def tracking_continuo(self, numTracking):
"""Faz a chamada da funcao tracking a cada 1800 segundos, ate que seja interrompida pelo teclado.
:param numTracking: numero para rastreamento da encomenda.
"""
self.correios = Correios()
self.prosseguir = True
statusAnterior = ""
while self.prosseguir:
try:
self.datas, self.infos = self.correios.tracking(numTracking)
for x in range(0, len(self.datas)):
status = str(self.datas[x]) + " " + self.infos[x] + "\n\n"
if statusAnterior != None:
if status == statusAnterior:
notification = pynotify.Notification("Status Encomenda", "Nope.")
notification.set_timeout(30)
notification.show()
else:
notification = pynotify.Notification("Status Encomenda", status)
notification.set_timeout(60)
notification.show()
statusAnterior = status
else:
statusAnterior = status
time.sleep(1800)
except KeyboardInterrupt:
print "Tracking continuo finalizado"
self.prosseguir = False
def tracking(self, numTracking):
"""Faz um request ao site dos correios com o codigo (de teste) do tracking.
:param numTracking: numero para rastreamento da encomenda.
:returns: uma lista de datas e outra informacoes
"""
try:
conn = httplib.HTTPConnection("websro.correios.com.br")
conn.request("POST", "/sro_bin/txect01$.Inexistente",
urllib.urlencode({'P_COD_LIS': numTracking, 'P_LINGUA': "001", 'P_TIPO': "002"}))
res = conn.getresponse()
except:
print "Ocorreu um erro de conexao"
return "", ""
else:
print "Status:", res.status, res.reason
dados = res.read()
conn.close()
# print Consertando codigo html mal feito...
dados = dados.replace('LINK="000000"', 'LINK="000000" ')
print "Iniciando parsing..."
parser = CustomHTMLParser()
parser.feed(dados)
parser.close()
self.datas = parser.datas
self.infos = parser.infos
print "... Concluido.\n"
return self.datas, self.infos
class CustomHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.is_td = False
self.is_relevante = False
# self.is_info = False
self.count = 0
self.datas = []
self.infos = []
def handle_starttag(self, tag, attrs):
# print "Localizada tag <%s> " % tag
if tag == "td":
self.is_td = True
def handle_data(self, data):
if self.is_td == True:
try:
dt = datetime.strptime(data, "%d/%m/%Y %H:%M")
self.datas.append(dt)
self.infos.append("")
self.is_relevante = True
except ValueError, TypeError:
if self.is_relevante == True:
if "Entregue" in data:
self.infos[self.count] += "Sua encomenda consta como entregue."
self.count += 1
elif "Saiu" in data:
self.infos[self.count] += "Sua encomenda saiu para entrega!"
self.count += 1
elif "ausente" in data:
self.infos[self.count] += "Destinatario ausente."
elif "nova tentativa" in data:
self.infos[self.count] += " - %s" % data
self.count += 1
elif "Postado" in data:
self.infos[self.count] += "Sua encomenda foi postada."
self.count += 1
elif "Conferido" in data:
self.infos[self.count] += "Sua encomenda foi conferida."
elif "Recebido" in data:
self.infos[self.count] += " - %s" % data
self.count += 1
elif "Mal encaminhado" in data:
self.infos[self.count] += "Wheels!"
self.count += 1
elif "Encaminhado" in data:
self.infos[self.count] += "Sua encomenda foi encaminhada!"
elif "Encaminhado para" in data:
# para compensar a mensagem de multiplas linhas
self.infos[self.count] += " - %s" % data
self.count += 1
elif "nsito para" in data:
self.infos[self.count] += " - %s" % data
self.count += 1
elif "Postado" in data:
self.infos[self.count] += "Sua encomenda foi postada!"
self.count += 1
else:
self.infos[self.count] += (data + " | ")
def handle_endtag(self, tag):
# print "Localizada tag </%s>" % tag
if tag == "td":
self.is_td = False
n = raw_input("Numero do Tracking: ")
correios = Correios()
correios.tracking_continuo(n)