DEV Community

Cover image for [PT-BR] Automatizando consultas de CEP com HtmlAgilityPack
João Paulo de C. Lima
João Paulo de C. Lima

Posted on

[PT-BR] Automatizando consultas de CEP com HtmlAgilityPack

Fala, galera! Beleza?

Nesse artigo vou lhes mostrar como automatizar consultas de CEPs no site dos Correios através da biblioteca HtmlAgilityPack para .NET Core.

Vamos lá!

Obs: para não deixar o artigo muito extenso, não vou explicar o passo a passo para se criar uma aplicação console no .NET Core.

1) Após a criação da aplicação console, instale a biblioteca do HtmlAgilityPack através do NuGet.
Você pode instalar usando o Gerenciador de pacotes do nuget dentro do Visual Studio:

Alt Text

Alt Text

Agora que já temos nosso pacote instalado, vamos adicionar o seguinte trecho de código:

Alt Text

Uma breve explicação do trecho acima:
Primeiro, pedimos para que o usuário insira o CEP para que a nossa aplicação busque o endereço correspondente. Após isso, passamos o CEP digitado para o nosso método chamado “BuscaEnderecoPeloCEP(cep)”.

Alt Text

Nessa primeira parte do nosso método, criamos três variáveis do tipo “string”: “httpResponse, html e UrlCorreio”.
Observação: A variável “httpResponse” será responsável por armazenar o html que é retornado após enviarmos uma requisição do tipo POST para o endereço dos Correios (armazenado na variável “UrlCorreio”).
Após isso, iniciamos o nosso bloco "Try-catch". Dentro dele, criamos uma variável do tipo “Dictionary” (Aqui, pode-se usar qualquer coleção que seja do tipo Chave-Valor).
Iremos enviar essa coleção como um FormUrlEncodedContent dentro do nosso “HttpRequestMessage”. Para fazer a requisição para a url dos correios, criamos um bloco “using” instanciando um objeto do tipo “HttpClient”. Esse objeto será responsável por fazer a requisição HTTP.

Alt Text

Aqui, instanciamos um objeto do tipo “HtmlDocument” (classe do HtmlAgilityPack). Para podermos extrair todas as informações contidas dentro html retornado, passamos o html para o método “LoadHtml()”.
A váriavel “name” é do tipo “HtmlNodeCollection” e receberá todas as informações contidas na tag html “td”.
As variáveis “bairro, cidade e rua”, receberão as informações contidas nas posições dessa coleção (“name[1], name[2], name[0]”, respectivamente).
Por fim, a variável “endereco” receberá a concatenação das informações contidas em “bairro, cidade e rua” e então retornaremos essa informação.
Caso ocorra alguma exceção, retornaremos a mensagem do erro. (é possível melhorar, e muito, esse tipo de tratamento. Porém, não é o assunto principal aqui).

Como forma de estudo e afim de abstrair essas funcionalidades, cm março de 2020, criei uma biblioteca em .NET Standard 2.0 para realizar essas consultas. Inclusive, é possível buscar os CEPs a partir de um endereço. Caso queira conferir, vou deixar os links aqui:

Discussion (0)