Skip to content

Commit d34f23d

Browse files
authored
Merge pull request #287 from PostmonAPI/buscacepinter
Update ceptracker implementation.
2 parents 13d694c + a397cb8 commit d34f23d

16 files changed

+179
-3198
lines changed

CepTracker.py

Lines changed: 22 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import os
66
import re
77

8-
from lxml.html import fromstring
98
import requests
109

1110
logger = logging.getLogger(__name__)
@@ -15,93 +14,49 @@
1514
class CepTracker(object):
1615
url = os.getenv(
1716
"CORREIOS_CEP_URL",
18-
"http://www.buscacep.correios.com.br/sistemas/buscacep/resultadoBuscaCepEndereco.cfm?t" # NOQA
17+
"https://buscacepinter.correios.com.br/app/endereco/carrega-cep-endereco.php", # NOQA
1918
)
2019

2120
def _request(self, cep):
2221
response = requests.post(self.url, data={
23-
"relaxation": cep,
24-
"Metodo": "listaLogradouro",
25-
"TipoConsulta": "relaxation",
26-
"StartRow": 1,
27-
"EndRow": 10,
22+
"pagina": "/app/endereco/index.php",
23+
"cepaux": "",
24+
"mensagem_alerta": "",
25+
"endereco": cep,
26+
"tipoCEP": "ALL",
2827
}, timeout=10)
2928
try:
3029
response.raise_for_status()
3130
except requests.exceptions.HTTPError as ex:
3231
logger.exception('Erro no site dos Correios')
3332
raise ex
34-
return response.text
35-
36-
def _get_infos_(self, cep):
37-
response = self._request(cep)
38-
html = fromstring(response)
39-
registros = html.cssselect('.tmptabela tr')
40-
41-
if not registros:
42-
return None, []
43-
44-
header = [h.text.strip(':') for h in registros[0].cssselect('th')]
45-
registros = registros[1:]
46-
resultado = []
47-
for item in registros:
48-
td = item.cssselect('td')
49-
line = []
50-
for a in td:
51-
link = a.cssselect('a')
52-
if link:
53-
text = link[0].text
54-
else:
55-
text = a.text
56-
line.append(text)
57-
resultado.append(line)
58-
return header, resultado
33+
return response.json()
5934

6035
def track(self, cep):
61-
header, resultado = self._get_infos_(cep)
36+
data = self._request(cep)
6237
result = []
6338

6439
found = False
6540
now = datetime.now()
6641

67-
for item in resultado:
42+
for item in data["dados"]:
43+
if item['cep'] == cep:
44+
found = True
45+
6846
data = {
6947
"_meta": {
7048
"v_date": now,
71-
}
49+
},
50+
"cep": item['cep'],
51+
"bairro": item['bairro'],
52+
"cidade": item['localidade'],
53+
"estado": item['uf'],
7254
}
73-
74-
for label, value in zip(header, item):
75-
76-
label = label.lower().strip()
77-
value = re.sub(r'\s+', ' ', value.strip())
78-
79-
if 'localidade' in label:
80-
cidade, estado = value.split('/', 1)
81-
data['cidade'] = cidade.strip()
82-
data['estado'] = estado.split('-')[0].strip()
83-
elif 'logradouro' in label:
84-
if ' - ' in value:
85-
logradouro, complemento = value.split(' - ', 1)
86-
data['complemento'] = complemento.strip(' -')
87-
else:
88-
logradouro = value
89-
logradouro = logradouro.strip()
90-
if logradouro:
91-
data['logradouro'] = logradouro
92-
elif label == u'endereço':
93-
# Use sempre a key `endereco`. O `endereço` existe para não
94-
# quebrar clientes existentes. #92
95-
data['endereco'] = data[label] = value
96-
elif 'bairro' in label:
97-
data['bairro'] = value
98-
elif 'cep' in label:
99-
_cep = value.replace('-', '')
100-
if _cep == cep:
101-
found = True
102-
data['cep'] = _cep
103-
else:
104-
data[label] = value
55+
logradouro = item["logradouroDNEC"]
56+
if ' - ' in logradouro:
57+
logradouro, complemento = logradouro.split(' - ', 1)
58+
data['complemento'] = complemento.strip(' -')
59+
data['logradouro'] = logradouro
10560

10661
result.append(data)
10762

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ Requisitos do ambiente Python
1515
As dependências estão listadas no arquivo requirements.txt.
1616

1717
* requests
18-
* lxml
1918
* pymongo
2019
* bottle
2120
* nosetests

requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
bottle==0.12.7
22
bottle-healthcheck==0.2.1
33
cssselect==1.0.3
4-
lxml==4.3.3
54
pymongo<3
65
packtrack==1.6
76
xmltodict

0 commit comments

Comments
 (0)