Open micael95 opened 5 years ago
No init.py o nome da lib esta minusculo e necessario mudar para Correios e também instalar o Beautifysoup4
Api para usar dados dos Correios """ from urllib.request import urlopen
version = '0.1.0' author = { 'Thiago Avelino': 'thiagoavelinoster@gmail.com', 'Dilan Nery': 'dnerylopes@gmail.com', }
from urllib import parse,request,response,error import re from xml.dom import minidom
try: from bs4 import BeautifulSoup except ImportError: raise Exception('Você não tem o modulo BeautifulSoup execute pip install beautifulsoup4', ImportError)
class Correios(object):
PAC = 41106 SEDEX = 40010 SEDEX_10 = 40215 SEDEX_HOJE = 40290 E_SEDEX = 81019 OTE = 44105 NORMAL = 41017 SEDEX_A_COBRAR = 40045 def __init__(self): self.status = 'OK' def _getDados(self, tags_name, dom): dados = {} for tag_name in tags_name: try: dados[tag_name] = dom.getElementsByTagName(tag_name)[0] dados[tag_name] = dados[tag_name].childNodes[0].data except: dados[tag_name] = '' return dados # Vários campos viraram obrigatórios para cálculo de frete: # http://www.correios.com.br/webServices/PDF/SCPP_manual_implementacao_calculo_remoto_de_precos_e_prazos.pdf (páginas 2 e 3) def frete(self, cod, GOCEP, HERECEP, peso, formato, comprimento, altura, largura, diametro, mao_propria='N', valor_declarado='0', aviso_recebimento='N', empresa='', senha='', toback='xml'): base_url = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx" fields = [ ('nCdEmpresa', empresa), ('sDsSenha', senha), ('nCdServico', cod), ('sCepOrigem', HERECEP), ('sCepDestino', GOCEP), ('nVlPeso', peso), ('nCdFormato', formato), ('nVlComprimento', comprimento), ('nVlAltura', altura), ('nVlLargura', largura), ('nVlDiametro', diametro), ('sCdMaoPropria', mao_propria), ('nVlValorDeclarado', valor_declarado), ('sCdAvisoRecebimento', aviso_recebimento), ('StrRetorno', toback), ] url = base_url + "?" + parse.urlencode(fields) dom = minidom.parse(urlopen(url)) tags_name = ('MsgErro', 'Erro', 'Codigo', 'Valor', 'PrazoEntrega', 'ValorMaoPropria', 'ValorValorDeclarado', 'EntregaDomiciliar', 'EntregaSabado',) return self._getDados(tags_name, dom) def cep(self, numero): url = 'http://cep.republicavirtual.com.br/web_cep.php?formato=' \ 'xml&cep=%s' % str(numero) dom = minidom.parse(urlopen(url)) tags_name = ('uf', 'cidade', 'bairro', 'tipo_logradouro', 'logradouro',) resultado = dom.getElementsByTagName('resultado')[0] resultado = int(resultado.childNodes[0].data) if resultado != 0: return self._getDados(tags_name, dom) else: return {} def encomenda(self, numero): # Usado como referencia o codigo do Guilherme Chapiewski # https://github.com/guilhermechapiewski/correios-api-py url = 'http://websro.correios.com.br/sro_bin/txect01$.QueryList?' \ 'P_ITEMCODE=&P_LINGUA=001&P_TESTE=&P_TIPO=001&P_COD_UNI=%s' % \ str(numero) html = urlopen(url).read() table = re.search(r'<table.*</TABLE>', html, re.S).group(0) parsed = BeautifulSoup(table) dados = [] for count, tr in enumerate(parsed.table): if count > 4 and str(tr).strip() != '': if re.match(r'\d{2}/\d{2}/\d{4} \d{2}:\d{2}', tr.contents[0].string): dados.append({ 'data': str(tr.contents[0].string), 'local': str(tr.contents[1].string), 'status': str(tr.contents[2].font.string) }) else: dados[len(dados) - 1]['detalhes'] = str( tr.contents[0].string) return dados
@nospelon consegue mandar PR corrigindo?
No init.py o nome da lib esta minusculo e necessario mudar para Correios e também instalar o Beautifysoup4
-- coding: utf-8 --
""" correios.py
Api para usar dados dos Correios """ from urllib.request import urlopen
version = '0.1.0' author = { 'Thiago Avelino': 'thiagoavelinoster@gmail.com', 'Dilan Nery': 'dnerylopes@gmail.com', }
from urllib import parse,request,response,error import re from xml.dom import minidom
try: from bs4 import BeautifulSoup except ImportError: raise Exception('Você não tem o modulo BeautifulSoup execute pip install beautifulsoup4', ImportError)
class Correios(object):