Serviço para consultar CEPs

Semana passada fiquei sabendo via twitter de um serviço gratuito para consultar CEPs é o CEPLivre, o objetivo desse serviço é  auxiliar desenvolvedores e programadores na integração de seus sistemas com consultas a CEPs brasileiros. Trata-se de uma base de dados colaborativa, disponibilizada gratuitamente pela (PC)².

Para usar esse serviço foi disponibilizado um WebService para ser cosumido via REST, para os programadores que são acostumados com o Visual Studio que adicionamos um WSDL e automaticamente é gerado um Proxy para consumo, no padrão REST temos que consumir o via HTTP.

Segue abaixo a implementação para consumir o WS CEPLivre:

[sourcecode language=”csharp”]
/// <summary>
/// Executa a requisição
/// </summary>
/// <param name="endereco">Endereço do WS</param>
/// <returns>Lista de Logradouros</returns>
private List<CEPLivre> Executar(string endereco)
{
// Cria um WebRequest com o endereço
HttpWebRequest request = WebRequest.Create(endereco) as HttpWebRequest;

// Setemos o tipo do metodo a ser usado
request.Method = "POST";

// Tipo do request
request.ContentType = "application/x-www-form-urlencoded";

// Se a rede possuir Proxy
if (this.ConfProxy != null)
{
request.Proxy = this.ConfProxy;
}

// Criamos um array de bytes para enviar a requisição
byte[] byteData = UTF8Encoding.UTF8.GetBytes(endereco);

// Setamos o tamanho do request
request.ContentLength = byteData.Length;

// Executamos nosso POST
using (Stream postStream = request.GetRequestStream())
{
postStream.Write(byteData, 0, byteData.Length);
}

request.ServicePoint.Expect100Continue = false;

// Recuperamos o resultado
string result = null;
XElement element = null;
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
// Recuperamos o Stream
StreamReader reader = new StreamReader(response.GetResponseStream());
result = reader.ReadToEnd();

// Guardamos o resultado em um elemento XML
element = XElement.Parse(result);
}

// Via LINQ criamos uma Lista de objetos com o resultado
var cepsRetorno = from e in element.Elements()
select new CEPLivre
{

Sucesso = e.Element("sucesso").Value,
TipoLogradouro = e.Element("tipo_logradouro").Value,
TipoLogradouroId = e.Element("tipo_logradouro_id").Value,
Logradouro = e.Element("logradouro").Value,
Bairro = e.Element("bairro").Value,
Cidade = e.Element("cidade").Value,
EstadoSigla = e.Element("estado_sigla").Value,
Estado = e.Element("estado").Value,
EstadoId = e.Element("estado_id").Value,
NumeroCEP = e.Element("cep").Value,
CodigoIBGE = e.Element("codigo_ibge").Value
};

// retornarmos uma lista tipada
return cepsRetorno.ToList<CEPLivre>();
}
[/sourcecode]

Como pesquisar por CEP:

[sourcecode language=”csharp”]
// se sua rede possuir proxy
WebProxy proxy = new WebProxy("190.1.1.88", 3128);
proxy.Credentials = new NetworkCredential("USUARIO", "SENHA", "DOMINIO");
// chama o método para pesquisar por CEP passando o proxy como parametro
ComponenteCEP _cep = new ComponenteCEP(proxy);
List<WebService.CEPLivre> lst = _cep.PesquisarPorCEP("82840210");
// mostra o resultado em uma grid
GridView1.DataSource = lst;
GridView1.DataBind();
[/sourcecode]

Como pesquisar por CEP:

[sourcecode language=”csharp”]
// se sua rede possuir proxy
WebProxy proxy = new WebProxy("190.1.1.88", 3128);
proxy.Credentials = new NetworkCredential("USUARIO", "SENHA", "DOMINIO");
// chama o método para pesquisar por CEP passando o proxy como parametro
ComponenteCEP _cep = new ComponenteCEP(proxy);
List<WebService.CEPLivre> lst = _cep.PesquisarPorLogradouro("paulista", "sao paulo");
// mostra o resultado em uma grid
GridView1.DataSource = lst;
GridView1.DataBind();
[/sourcecode]

Para baixar o projeto de exemplo clique aqui

Até a próxima!

Sobre Leandro Prado

Leandro Silveira Prado é Premier Field Engineer na Microsoft especializado em Application Lifecycle Management.