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

2 1

[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:

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay