Sim, soa estranho começar o texto com isso, mas continue lendo que você vai entender. ;)
Estes dias no serviço, estávamos desenvolvendo um e-commerce e precisávamos fazer o cálculo do frete para envio de encomendas utilizando os serviços PAC e SEDEX dos correios.
Até aí, tudo bem. Peguei as especificações no site dos Correios e comecei a implementar.
Inicialmente o que me deu mais trabalho foi aprender a ler arquivos XML. Aliás, primeiro foi encontrar um pacote bom para ler XML. No fim das contas encontrei um site com vários exemplos utilizando o minidom. Além de consultar a documentação oficial para alguns detalhes.
De qualquer forma, depois de diversos testes e tentativas nos servidores dos exemplos e constatar que estava funcionando tudo direitinho, fomos para os testes no servidor dos Correios...
Bem, creio eu que não preciso dizer o quão
decepcionante foi confirmar que esse tipo de serviço online dos Correios é péssimo. Não me levem a mal, tenho certeza que a equipe deles tem dado duro pra manter tudo funcionando. Pois estão com salários defasados, falta de equipamentos, falta de equipe, etc. Sendo que daí veio a greve dos Correios, que no fim das contas não adiantou de nada... ><
De qualquer forma, como no momento não podemos confiar muito nos serviços online dos Correios, procurei e encontrei um serviço de cálculo de frete gratuito e muito bom: Calculador gratuito de frete - Sedex e encomenda PAC. Fiz uma função para integração com ele e está tudo funcionando muito bem.
Aqui está o código dela para quem estiver precisando:
def calculaFreteW21(codigo, peso, x, y, z, cep_destino): import httplib import urllib import re from xml.dom.minidom import parse, parseString #codifica os parametros para serem inclusos na url params = urllib.urlencode({'cod': codigo, 'cep': cep_destino, 'peso': peso, 'comprimento': x, 'largura': y, 'altura': z, 'servico':'3'}) #inicia a conexao com o servidor e envia os dados via GET conn = httplib.HTTPConnection("frete.w21studio.com") conn.request("GET", "/calFrete.xml?"+params) #obtem a resposta do servidor response = conn.getresponse() #transforma a resposta (pagina XML) em DOM dom = parseString( response.read() ) conn.close() #recupera os dados necessarios da folha xml values = {'status':'', 'valor_sedex':'', 'valor_pac':''} for key in values.keys(): try: values[key] = dom.getElementsByTagName(key)[0].childNodes[0].nodeValue except: pass if values['status'] != 'OK': raise Exception( values['status'] ) return {'pac': values['valor_pac'], 'sedex': values['valor_sedex']}
Antes de terminar, gostaria de agradecer à equipe da w21studio por manter um serviço tão útil e funcional sem cobrar nada. Espero que muito mais pessoas façam o mesmo.
Até mais pessoal!
Abraços with lasers!
Nenhum comentário:
Postar um comentário