Descobrindo a operadora de um número usando JAVA
![]() |
| Alô, esse número é TIM? |
Descobrir qual a operadora de um telefone nunca fui tarefa fácil, devido não existir um padrão numérico que possamos identificar com algum tipo de cálculo ou coisa do gênero, e considerando a portabilidade, não sabemos se o telefone de fulano é da operadora A ou da operadora B, devido isso houve uma grande procura de empresas por serviços de consulta de números, serviços esses que são pagos e não custam barato, dependendo do tipo do plano, ultrapassa a casa das dezenas de milhares de reais, imagina você com uma empresa que precisa fazer 1000 ligações para clientes por dia? É fato que podemos mensurar uma grande economia se você souber a operadora de cada cliente no qual você irá ligar.
Algumas empresas disponibilizam esse serviço gratuitamente para testes, como é o caso da telein
que é a empresa em que vamos utilizar no nosso exemplo, com ela é possível efetuar algumas consultas gratuitas dentro de um período de tempo de 10 segundos entre cada consulta.
WebCrawler
Comumente, chamamos esse mecanismo de captura de “WebCrawler”, 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 Jsoupele 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/
De cara podemos observar um formulário com um input de texto e um botão para efetuar o submit do mesmo, vamos fazer uma consulta de teste e coletar os dados da requisição utilizando a ferramenta Devtools do Chrome para nos auxiliar.
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
(Não vou exemplificar como criar um projeto, então devemos levar em consideração que você já criou o seu projeto Java)
Precisamos da dependência do JSOUP em nosso projeto, então vamos pegar a última versão diretamente do site https://jsoup.org/download, preferencialmente utilizar a dependência do Maven
após adicionada a dependência do projeto vamos criar nossa classe de serviço
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 {
Map<String, String> cookies = 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:
*
* <div class="col-md-8" style="width: 320px;"> <span
* class="azul lead">Operadora:</span><span class="lead laranja"> Telefonica
* Brasil (Móvel/SMP)</span><br> <span class="azul lead">Portado:</span><span
* class="lead laranja"> SIM</span><br> <span
* class="azul lead">Número:</span><span class="lead laranja">
* </span> </div>
*
* 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:



Nenhum comentário:
Postar um comentário