Fala, galera! Beleza? Nesse artigo vou lhes mostrar como automatizar consultas de CEPs no site dos Correios através da biblioteca HtmlAgilityPack (HTML Agility Pack) 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.
Instalando a biblioteca HTML Agility Pack
Após a criação da aplicação console, instale a biblioteca do HtmlAgilityPack através do NuGet .
Você pode instalar usando o NuGet dentro do Visual Studio:
Agora que já temos nosso pacote instalado, vamos adicionar o seguinte trecho de código:
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)”.
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<string, string>” (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.
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 exception, 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, em 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:
- NuGet: DotNetCepSearch
- Github: DotNetCepSearch
Escrito por: João Paulo
Para Medium: https://medium.com/@j_paulo_15/automatizando-consultas-de-cep-com-htmlagilitypack-565f6fba2ac