Skip to content

  • Home
  • Blog
  • Projetos
  • Contato

[Java] Consultando a operadora de um telefone

julho 24, 2020 by jhonatan2760

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.
 

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/

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.

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

(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 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:
*
*
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:


Post Views: 2.525

Post navigation

Previous Post:

De Repente, Califórnia

Next Post:

[iOS – Swift 4] Gerando QRCodes

Posts recentes

  • Como explorar seu novo componente no Arduino
  • CORS em uma aplicação Angular 10 e Spring Security
  • Como gerar um certificado SSL grátis para sua aplicação em Spring
  • Arduino vs Dinossauro do Google Chrome
  • Comprei uma impressora 3D

Arquivos

  • abril 2022
  • novembro 2021
  • dezembro 2020
  • junho 2020
  • maio 2020
  • março 2020
  • dezembro 2019
  • novembro 2019
  • agosto 2019
  • junho 2019
  • março 2019
  • novembro 2018
  • agosto 2018
  • julho 2018
  • março 2018
  • fevereiro 2018
  • janeiro 2018
  • dezembro 2017
  • novembro 2017
  • outubro 2017
  • agosto 2017
  • abril 2017
  • novembro 2016
  • junho 2015
  • fevereiro 2015
  • janeiro 2015
  • novembro 2014
  • setembro 2014
  • agosto 2014
  • julho 2014
  • junho 2014
  • maio 2014
  • abril 2014
  • março 2014
  • fevereiro 2014
  • janeiro 2014
  • dezembro 2013
  • novembro 2013
  • outubro 2013

Categorias

  • 3D printter
  • ALREADY
  • Ame Digital
  • ANGULAR 4+ ROLE BASED
  • ANGULAR 5
  • ANGULAR ROLE BASED
  • Arduino
  • Consulta Operadora
  • Cors
  • Crawler
  • Data Science
  • DIRECTIVE ANGULAR
  • español
  • HTTPS
  • Impressora 3D
  • iOS
  • iOT
  • JAVA
  • JERSEY
  • Jsoup
  • Meetup
  • Pandas
  • Python
  • R
  • REQUEST JERSEY
  • scraping
  • SECURITY CONTEXT
  • Sem categoria
  • Spanish
  • Spring
  • Spring Security
  • Spring Webflux
  • Swift
  • Talkings
  • Technology
  • Uncategorized
  • Webflux
2021 - Jhonatan S. Souza