[Java] Consultando a operadora de um telefone
Descobrindo a operadora de um número usando JAVA
![]() |
Alô, esse número é TIM? |
WebScraping
Comumente, chamamos esse mecanismo de captura de “WebScraping”, já que eles funcionam como Vermes – entram em um site e vão capturando o conteúdo, além de entrarem em cada link do site e também capturarem seu conteúdo, e assim por diante, no nosso caso vamos entrar no site e efetuar uma consulta utilizando uma biblioteca Java chamada Jsoup
ele vai nos auxiliar para efetuarmos as requisições e ao receber irá nos auxiliar no parser do HTML.
Simples, não?
Primeiro passo, ver como o site funciona:
vamos acessar o site: http://consultaoperadora.com.br/site2015/
Podemos observar que na nossa requisição feita através de um POST do formulário
enviamos dois parâmetros: tipo e numero, e também foram enviados 2 cookies, nossa tarefa
é replicar essa requisição no Java, neste momento entra em cena nossa lib Jsoup que irá nos auxiliar nessa tarefa de receber e manipular os dados.
JSOUP
package com.jhonatansouza.service; import java.io.IOException; import java.util.Map; import org.jsoup.Connection.Method; import org.jsoup.Connection.Response; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import com.jhonatansouza.exceptions.ConsultaException; import com.jhonatansouza.pojo.Consulta; public class OperadoraService { public Consulta consultaOperadora(String numero) throws ConsultaException { if (numero == null || numero.trim() == "") throw new ConsultaException("Número inválido!"); /** * O "User agent" ou "agente do usuário" é a identificação que o navegador passa * para os sites */ final String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"; /** * O endereço base das nossas requisições, toda requisição vai ter como base * esse endereço */ String endpoint = "http://consultaoperadora.com.br/site2015/"; /** * Vamos utlizar um método estático da classe Jsoup para configurarmos nossa * requisição, vamos setar nosso userAgent e vamos aproveitar que a classe é um * builder e vamos invocar o método execute que retorna uma implementação da * interface Response. Neste momento fizemos a primeira requisição http para o * site, recuperando os cookies iniciais. */ Response res; try { res = Jsoup.connect(endpoint).userAgent(userAgent).execute(); } catch (IOException e) { throw new ConsultaException("Falha ao efetuar consulta, tente novamente!"); } /** * Agora vamos atribuir os cookies recebidos na primeira requisição para uma * HashMap, vamos precisar envia-los na próxima requisição * * Seguindo vamos criar uma requisição do tipo POST, porém concatenando o * endpoint resposta.php e adicionando os cookies, e também passando os dois * parâmetros, número e tipo. */ Response rr; try { Mapcookies = res.cookies(); rr = Jsoup.connect(endpoint.concat("resposta.php")).userAgent(userAgent).cookies(cookies) .method(Method.POST).data("tipo", "consulta").data("numero", numero).execute(); } catch (IOException e) { throw new ConsultaException("Falha ao efetuar consulta, tente novamente!"); } /** * Após a segunda requisição, vamos converter o que foi recebido (text_html) * para um objeto DOM, aqui a manipulação é bem parecida com o DOM utilizando * jQuery, vamos captar todos os elementos com a classe laranja, a resposta: * * Operadora: Telefonica * Brasil (Móvel/SMP) Portado: SIM Número: ** * Então vamos pegar todos os elementos que possuem a classe laranja * e vamos pegar apenas os que posseum os dados que nos interessa. * */ Document dc = Jsoup.parse(rr.body()); Elements el = dc.getElementsByClass("laranja"); Consulta c = new Consulta(); if (el.get(1).text().trim().toLowerCase().equals("aguarde")) { throw new ConsultaException("Por favor, aguarde 10 segundos e tente novamente!"); } c.setOperadora(el.get(1).text()); c.setPortado(el.get(3).text().toLowerCase().equals("sim")); return c; } }
Veja em funcionamento: