dica rápida: web service pra consulta de endereço

20 02 2008

Algo que eu procuro sempre aqui no trabalho é facilitar a vida do usuário. Coisinhas pequenas, como completar o endereço a partir do cep, podem poupar um bom tempo de quem faz isso dezenas de vezes no dia.

Ao código:

Achei um monte de webservices oferecendo esse serviço. Escolhi esse, em php: web service consulta de endereço. Se você nunca usou webservice no visual studio, leia esse artigo antes de continuar.

Adicione a referência ao wsdl no seu projeto, e a cláusula using na sua unit.

Código simples que recupera os dados:

CEPService _servico = new CEPService();string[] resultado = _servico.obterLogradouro(cep).Split(',');//Quando o cep não é encontrado, a resposta do servidor vem no formato

// "CEP cep NAO ENCONTRADO" ou "Cep cep não encontrado"

if (resultado[0].StartsWith("cep", StringComparison.OrdinalIgnoreCase)   throw new CepNotFoundException("Cep não foi encontrado!");

//Quando o cep é encontrado, a resposta vem no formato

// "LOGRADOURO, BAIRRO, CIDADE, ESTADO"

Console.WriteLine("Logradouro: " + resultado[0].Trim());

Console.WriteLine("Bairro: " + resultado[1].Trim());

Console.WriteLine("Cidade: " + resultado[2].Trim());

Console.WriteLine("Estado: " + resultado[3].Trim());

Código modificado pra retornar um objeto endereço e fazer um cache bem básico:
(O construtor de Endereco tem a assinatura:
public Endereco(string cep, string logradouro, string numresidencial, string bairro, string cidade, string estado))

public class EnderecoHelper {private static CEPService _servico = new CEPService();

//Armazena os endereços de cep que não foram encontrados no banco,//pra não pesquisar duas vezes

private static IList _invalidos = new List();//Número máximo de ceps inválidos que vai ser guardada

private const int MAXINVALIDOS = 15;//Último cep pesquisado. Útil caso o mesmo cep seja

//pesquisado várias vezes seguidasprivate static Endereco _ultimoEndereco = new Endereco;

private static string _cep;
public static Endereco getEndereco(string cep) {

if (cep.Equals(_ultimoEndereco.cep)){

return _ultimoEndereco;}

if (_invalidos.Contains(cep))

{

return null;}

string[] resultado = _servico.obterLogradouro(cep).Split(',');

if (!resultado[0].StartsWith("cep", StringComparison.OrdinalIgnoreCase)) {

_ultimoEndereco = new Endereco(cep, resultado[0].Trim(), "", resultado[1].Trim(), resultado[2].Trim(), resultado[3].Trim());return _ultimoEndereco;

}else

{_invalidos.Add(cep);

if (_invalidos.Count > MAXCOUNT){

_invalidos.Clear();}

return null;}

}}

Ainda tem um monte de coisas que eu quero fazer pra melhorar isso aí. Alguns itens: Aumentar o tamanho do cache de resultados pesquisados (substituir o _ultimoEndereco por uma lista), implementar a lista de ceps inválidos como uma queue, chamar o webservie assíncronamente.
Assim que eu tiver mais tempo livre aqui no trampo eu faço isso, já que não é tão prioritária.

Espero ter ajudado alguém!

Anúncios

Ações

Information

3 responses

25 02 2008
Elomar via Rec6

dica rápida: web service pra consulta de endereço « Codando

Tutorial explicando como usar um web service para descobrir os dados de um endereço a partir de um cep. Você pode usar, por exemplo, numa página onde o usuário tenha que preencher o endereço: quando ele digitar o cep, você completa o logradouro….

21 05 2009
Antony Bracudo

Achei uma classe em PHP 5 muito boa feita para usar justamente esse webservice, foi feito por um programador chamado Deni Santos, achai no mesmo site do webservice, segue o link da classe http://www.byjg.com.br/ftp/cep-php-v2.zip

25 03 2010
Rodrigo T.

Hu! Muito bom o WS e muito boa a classe que o Bracudo indicou. Me baseei nela para gerar uma outra em ASP.NET – uma idéia maluca de usar um site normal ASP.NET, passando parâmetros “By GET” para interagir com uma aplicação VB6 – que não lida de forma fácil com webservices.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s




%d blogueiros gostam disto: