Portabilidade
Olá galera!
Seguinte ano passado postei um source em python para pegar a portabilidae de números Telefonicos via site consultanumero.abr.net.br, o tempo passou e o script parou de funcionar pois o sistema em jboss deles foi atualizado, o povo começou a mandar email pedindo ajuda e querendo de certa forma utilizar esse serviço de forma automatizada, resolvi perder 30 minutos e reescrever o source para o sistema Atual.
Lembrando que o método usa reconhecimento de caracteres para tentar quebrar o captcha, digamos que ele é pouco eficiente para uso amplo em produção, claro se alguem dispor de tempo pode treinar uma base de dados consistente para que ele funcione melhor.
tela dele funcionando:
# -*- coding: iso-8859-1 -*-
#Eng Eder de Souza
#26/05/2010 11:00
import re
import ClientCookie
import commands
import sys
import os
import re
import urllib2
import urllib
inc = 0
MaxTentativas = 15
tel=sys.argv[1]
ddd = tel[:2]
NUM = tel[2:10]
numero_formatado = NUM[0:4]+”.”+NUM[4:8]
telefone = “(“+ddd+”)”+numero_formatado
while inc < MaxTentativas:
inc = inc + 1
req = urllib2.Request(url)
req.add_header(‘Referer’, url)
cj = ClientCookie.MozillaCookieJar()
opener = ClientCookie.build_opener(ClientCookie.HTTPCookieProcessor(cj))
ClientCookie.install_opener(opener)
r = ClientCookie.urlopen(req).read()
cj.save(“infer”, ignore_discard=True, ignore_expires=True)
find = re.search(‘jcid=(\w+)’, r)
cod = find.group(1)
r = urllib2.urlopen(‘http://consultanumero.abr.net.br:8080/consultanumero/jcaptcha.jpg?jcid=’+cod)
fp = open(‘Captcha.jpg’,’w’)
fp.write(r.read())
fp.close()
comando = commands.getoutput(‘djpeg -pnm Captcha.jpg | gocr -C a-zA-Z0-9 -m 2 -a 90 -d 2’)
rmspace = comando.replace(‘ ‘, ”)
rmreturn = rmspace.replace(‘\n’, ”)
rmunderline = rmreturn.replace(‘_’,”)
res = re.search(‘([a-zA-Z0-9]+)’, rmunderline)
captcha = res.group(1)
cj = ClientCookie.MozillaCookieJar()
cj.load(“infer”, ignore_discard=True, ignore_expires=True)
opener = ClientCookie.build_opener(ClientCookie.HTTPCookieProcessor(cj))
ClientCookie.install_opener(opener)
pagina = opener.open(‘http://consultanumero.abr.net.br:8080/consultanumero/consulta/consultaSituacaoAtual!carregar.action?nmTelefone=’+telefone+’&j_captcha_response=’+captcha+’&jcid=’+cod+’&method%3Aconsultar=Consultar’).read()
if “gridselecionado” in pagina:
find = re.findall(‘<td>(.*)</td>’, pagina)
print find[7]
print find[8]
sys.exit()
FLW
Eng Eder de Souza
amigo, to com dificuldade no ClientCookie
sabe como instala esse modulo? Grato.
aquele erro anterior ja resolvi, agora executo ele e nao aparece nada…
sabe como posso ligar um `debug` pra ver qual erro está acontecendo?
grato pela ajuda até agora.
Oi vc nao deve ter o “gocr” e nem o “djpeg” instale os Dois !!
[]’s
Eng Eder de Souza
caraca, aonde eu acho esse djpeg?
desculpe a ignorancia ehehe
cara, desculpe a chatisse
mas eu verifiquei e os 2 pacotes estao instalandos, mas mesmo assim nao da,.. nao tem como verificar um debug do arquivo para achar aonde ta o erro?
na pasta onde vc ta executando o script executa isso veja se tem erro
djpeg -pnm Captcha.jpg | gocr -C a-zA-Z0-9 -m 2 -a 90 -d 2
DB ./db/db.lst not found
_33 llV
Ta ae o seu problema aponte para onde esta o database do gocr no meu caso aqui esta em /root/gocr-0.48/bin/db/ entao o comando seria :
djpeg -pnm Captcha.jpg | gocr -C a-zA-Z0-9 -m 2 -a 90 -d 2 -p /root/gocr-0.48/bin/db/
No fonte do python altere essa linha apontando para onde esta o seu database no meu caso seria:
comando = commands.getoutput(‘djpeg -pnm Captcha.jpg | gocr -C a-zA-Z0-9 -m 2 -a 90 -d 2 -p /root/gocr-0.48/bin/db/′)
[]’s
Eng Eder de Souza
to quase lá…
mas esse diretorio DB nao existe na minha pasta bin…
eu criei ele, dai qndo eu executo esse comando na shell ele roda, e da o resultado do captcha.jpg, mas quando rodo o script ele nao faz nada. volta ao shell normal.
o que será?
bom, pelo menos agora deu um erro diferente.
File “port.py”, line 53, in ?
r = ClientCookie.urlopen(req).read()
File “build/bdist.linux-i686/egg/ClientCookie/_urllib2_support.py”, line 824, in urlopen
File “/usr/lib/python2.4/urllib2.py”, line 364, in open
response = meth(req, response)
File “build/bdist.linux-i686/egg/ClientCookie/_urllib2_support.py”, line 625, in http_response
File “/usr/lib/python2.4/urllib2.py”, line 402, in error
return self._call_chain(*args)
File “/usr/lib/python2.4/urllib2.py”, line 337, in _call_chain
result = func(*args)
File “/usr/lib/python2.4/urllib2.py”, line 480, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 404: Not Found
Luiz só criar o diretório nao funciona vc precisa do database do gocr para o retorno correto das informações !!
aonde encontro esse db?
Compile o gocr via source http://jocr.sourceforge.net/download.html
./configure, make e make install ja fiz
:S
Amigoo
me De uma luz
to me batendo demais aqui
valeu
Olá Eder. Qual o S.O. que você está utilizando? Não consegui instalar as dependencias no CentOS, e gostaria de primeiramente testar o Script o que você usa?
Debian
nao sei mais o que fazer, se puder me ajudar novamente, agradeço.
show de bola o script! agora com uma grande ajuda está funcionando!!
parabens ao criador e muito obrigado pela ajuda!!
Luiz Eduardo, agora que vc sabe como resolver, me ajuda ai, meu sistema tb é Debian e eu to enrolado como vc tava.
Só pra colocar a par eu cheguei até aqui: djpeg -pnm Captcha.jpg | gocr -C a-zA-Z0-9 -m 2 -a 90 -d 2 -p /usr/src/gocr-0.48/bin/db/, apareceu 75.
Ai pessoal, consegui fazer funcionar, algumas aspas recolocadas e funcionou perfeitamente.
Valeu!
Olá,
Alguem pode me ajudar
Uso debian e não estou conseguindo por pra funcionar esta me dando o seguinte erro:
debian:~/portabilidade# python teste.py 1133335151
File “teste.py”, line 29
numero_formatado = NUM[0:4]+?.?+NUM[4:8]
^
SyntaxError: invalid syntax
Valeu
luiz podrias dizer oq ue vc fez para que funcione?
ou postar o script com estas aspas recolocadas
obrigad
Marcelo
Opa,
Consegui fazer funcionar realmente eram as aspas e não tinha me atentado a isso. O que não estão entendendo é como esse script é integrado ao asterisk.
Valeu
Para isto funcionar vc precisa instalar algumas aplicações;
Quem usa Linux CentOS/ RedHAT pode fazer isso com YUM. Executar os comandos abaixo. Para Debian vc precisa usar APT-get
yum install python-setuptools
easy_install ClientCookie
yum install tetex*
yum install ImageMagick
Baixar GOCR daqui http://www-e.uni-magdeburg.de/jschulen/ocr/gocr-0.49.tar.gz
Executar os comandos
wget http://www-e.uni-magdeburg.de/jschulen/ocr/gocr-0.49.tar.gz
tar -zxf gocr-0.49.tar.gz
cd gocr-0.49/bin
./create_db # isso vai construir o banco de dados do GOCR para reconhecimento de imagens
agora vc pode executar o script do Ederwander ( antes disso precisa modificar as aspas porque o forum esta reescrevendo elas e o script acaba de morrer com erro )
Cheers,
Lu
Olá Eder,
O seu python script aqui parou de funcionar de uma vez. Serra que vc vai ter algum tempo pra modifica-lo pra funcionar de novo com ABR.
Cheers,
Lu
Continuo com ele funcionando perfeitamente aqui 🙂 será que vc não caiu em alguma black list ??
Testei de outro servidor que nunca usei antes. O primeiro que eu testei esta nos EUA, o segundo que eu preparei esta aqui no Brasil.. Mas se ta funcionando pra vc então deve ser alguma coisa que eu fiz. Valeu
Cheers
Lu
Na verdade eu testei de uma instalação linux no meu PC com VMWare…mas nas servidores em IDC não ta funcionando…Que coisa ..
Sorry , ta funcionando perfeitamente. Erro meu.
Cheers,
Koki
Eder o scritp para consulta de portabilidade não esta funcionando, existe algum erro com ele ?
Abs,
André Luiz
funcionando perfeitamente aqui 🙂
Aparecendo algum erro ae posta que te ajudo!!
Eng Eder de Souza
Amigos, eu consegui colocar o Script pra rodar aqui, ocorre que não estou sabendo como fazer pra usar o resultado nele no dialplan do asterisk, alguém teria como dá uma luz. Já fucei o google todo (mentira, foi só a metade.. rsrs) mas não tive sucesso. Já quebrei tanto a cabeça q resolvi dá uma respirada e pedir a ajuda de vcs. Quem puder ajudar fico muito agradecido.
Abraços.
Só para completar o que o colega “LU” disse:
execute os comandos:
yum install python-setuptools
easy_install ClientCookie
yum install tetex-dvips
yum install tetex-latex
yum install ImageMagick
Baixar GOCR daqui http://www-e.uni-magdeburg.de/jschulen/ocr/gocr-0.49.tar.gz
Executar os comandos
wget http://www-e.uni-magdeburg.de/jschulen/ocr/gocr-0.49.tar.gz
tar -zxf gocr-0.49.tar.gz
cd gocr-0.49/bin
./create_db # isso vai construir o banco de dados do GOCR para reconhecimento de imagens
alterei o yum install tetex* porque ele da conflito com algumas dependencias, portanto instalado apenas os pacotes necessarios (dvips e latex)
Só pra deixar mais claro: quero usar o resultado do script pra rotear chamadas no dialplan.
Abraços.
Olá eu fiz em python puro apenas para mostrar como pegar os dados, você pode transformar este script em AGI para integrar com as funcionalidades de seu servidor Asterisk !!
Tenho o meu funcionando aqui perfeitamente em Fast AGI + Python, antes que alguem peça para eu postar ja vou avisando que não poderei divulgar a versão feita em AGI, nela fiz algumas coisas para tornar o script mais veloz infelizmente não posso quebrar os termos de contrato aqui 😦
Sempre fui adepto de que tudo seje livre mas meus códigos estão sendo usados por terceiros e sendo vendidos como serviço este é o outro lado da moeda onde gatunos se aproveitam.
Porem nade impede de que eu de uma ajuda para mostrar uma maneira menos convencional de como transferir informações deste script para o dial plan do Asterisk !!
Claro não é aconselhavel fazer isso mas para quem esta precisando vai servir !
chame o script no dial plan do asterisk no seu extensions.conf coloque algo parecido com isto
exten => _0XXXXXXXXXX,1,System(python /local/onde/esta/script/portabilidade.py ${EXTEN:1})
exten => _0XXXXXXXXXX,2,SetVar(OPERADORA=${‘DB(port/operadora)’})
exten => _0XXXXXXXXXX,3,NoOp(O Numero Pertence a Operadora ${OPERADORA})
Agora adicione mais 1 linha no script da portabilidade depois da linha “print find[8]” insira esta linha
os.system(“asterisk -rx ‘database put port operadora find[7]'”)
Ae não testei desta maneira ainda mas irá funcionar para enviar os dados do script para o dial plan …
[]’s
Eng Eder de Souza
Parou de funcionar? fui tentar implementar o os.system que vc falou.. e tá dando esse erro:
captcha = res.group(1)
AttributeError: ‘NoneType’ object has no attribute ‘group’
mesmo tirando a linha os.system..
alguma alteração no site?
Abraço.
Eder,
O pessoal deste site, onde fazemos esta consulta, mudou a imagem onde o djpeg lê as letras. Por isso o script parou de funcionar.
Existe algo que possamos fazer para voltar a funcionar este script???
Att.
André Luis
Éder o meu também parou de funcionar.
Está dando esse erro
Traceback (most recent call last):
File “portabilidade.py”, line 41, in
captcha = res.group(1)
AttributeError: ‘NoneType’ object has no attribute ‘group’
Bom Dia,
Eu tambem uso um script semelhante, extraido do Eder. E o meu tambem parou de funcionar. Fiz o teste somente com djpeg e realmente ele parou de trazer as letras. Acredito que isso tenha haver com a mudança da imagem.
Estou com essa função no meu sistema parada por esse motivo.
Será que existe alguma solução para isso??
Obrigado
Carlos Roberto
Vários emails e comentários no blog não tinha idéia da dimensão que o script estava tendo !!!
Mas vamos lá, o site ABR aplicou um captcha bem pesado desta vez talvez pelo grande volume de consulta crescendo a cada dia com a utilizaçao deste script, o grande problema deste captcha está nas letras grudadas que são muito complicadas de segmentar eu dei uma rápida olhada em como segmentar as imagens novas e é possível sim encontrar padrões para extrair as letras porem não existe nada já pronto hoje que consiga segmentar e reconhecer este tipo de imagem, os padrões são bem distintos, tudo teria que ser feito especificadamente para o site da ABR e isso demanda muito tempo, talvez pelo método que tenho em mente não consiga bons resultados no retorno do captcha , e por falta de tempo não se sei vou conseguir iniciar meus testes aqui são varios os pontos : Remover cores de funto, converter para tons de cinza, encontrar a ocorrencia da primeira letra, calcular altura, calcular largura, abrir janela para segmentar palavras, etc, etc ..
[]’s
Eng Eder de Souza
É galera, complicou mesmo. Sinceramente nao sei nem por onde começar. Mas acho que devemos tentar…
Tenho um ponto que gostaria de colocar.
Penso que na verdade, isso deveria ser informções cedidas pela ABR ou Anatel, em arquivo ou de outra forma qualquer, para que qualquer pessoal fizesse um download e tivesse essas informações. Nem que fosse informações atualizadas mensalmente, que a nossa base ficasse desatualizada por no maximo 29 dias. O percentual de chamadas que saiu pela operadora errada seria muito pequeno e nao teria importancia.
Vamos aguardar e torcer para que consigamos voltar a usar esse serviço
Carlos Roberto
A ABR disponibiliza algum Webservice pago para consulta?
Amigos, tem notícias sobre o assunto ? conseguiram quebrar o novo captcha ?
Pessoal, ao executar o djpeg recebo este erro?
djpeg -pnm Captcha.jpg | gocr -C a-zA-Z0-9 -m 2 -a 90 -d 2 -p /usr/src/gocr-0.49/bin/db/
ERROR pnm.c L311: opening file /usr/src/gocr-0.49/bin/db/db_0000.pbm
Alguém já pegou este erro?
import mechanize as ClientCookie resolve o problema da falta do módulo
Já pensaram em um ação civil pública contra a ABR e Anatel. Isso é informação pública e não pode ser tratada e comercializada dessa forma.
Uma boa forma de começar é enviar reclamações formais ao MPF e Procons Estaduais.
MAS A INFORMAÇÃO ESTÁ DISPONÍVEL A TODOS PARA CONSULTAR NO SITE, O PROBLEMA É O CAPTHCA QUE É COLOCADO PARA EVITAR CONSULTAS AUTOMÁTICAS POR ALGUM SISTEMA.
ELES PODEM ALEGAR QUE A INFORMAÇÃO ESTÁ DISPONÍVEL E O CAPTCHA É PARA PRESERVAR O SISTEMA DE ATAQUES E/OU DE CONSULTAS FEITAS EM MASSA, E NISSO ELES ESTÃO CORRETOS.
CREIO QUE ESTE NÃO É O MELHOR CAMINHO.
Ai que você se engana me amigo. Se a informação e pública eu tenho direito de acessar ela da forma que quiser. Se existe uma restrição contra consulta por meio automatizado ou em massa, ela não é totalmente pública. Para ser totalmente pública eles tem que me deixar consultar da forma que eu quiser, e isso inclui um script para rota de menor custo dentro do meu Asterisk. Se eles vão disponibilizar via webservice, via planilha excel e etc, isso não importa, mais eu (nós) tenho o direito de acessa-la da forma que quiser. E a maior prova de que não é pública esta no próprio fato de a mesma ser comercializada.
Sem querer polemizar, mas o fato de ser pública não necessariamente faz com que ela seja acessada de qualquer jeito. Veja que as certidões com informações conseguidas em órgãos públicos tem forma de requisição, ou seja, não é concedida de qq forma e/ou a qq pessoa.
Outra coisa a saber é se estas informações são realmente de caráter público, pra isso tem que haver uma lei ou regulamento estabelecendo isso.
Valeu, creio que quebrar a captcha seja mais fácil que conseguir isto na justiça, é o que penso.
Consegui fazer um scrip em PHP que faz a busca do numero em um site especifico que esta sempre atualizado, porem nao sei como integrar ao CLI do asterisk para retornar a consulta.. sendo que se for roda ele no navegador passando como parametros apenas o numero.. funciona…Alguem ajuda? posso disponibilizar o codigo de PHP caso me ajude a integrar no asterisk
email migueltsi@yahoo.com.br
Ahh eu até esqueci de colocar aqui no blog mas eu fiz um outro script de Portabilidade para verificar somente celulares:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Operadora.py
hosted with ❤ by GitHub
Agora nao sei como implementar no AGI do Asterisk para verificacção do numero e sair pela interface correta.
Segue o codigo..
–tag inciar php aki —
$numero = “55”.$_GET[“recebido”];
$url=”http://magnussolution.com/portabilidade.php?seache_number=$numero”;
$chave = file_get_contents($url);
switch($chave){
case 5312 :
$operadora = ‘CTBC CELULAR S.A’ ;
break;
case 55314 :
$operadora = ‘OI’ ;
break;
case 55320 :
$operadora = ‘VIVO’ ;
break;
case 55321 :
$operadora = ‘CLARO’ ;
break;
case 55323 :
$operadora = ‘TELEMIG CELULAR’ ;
break;
case 55324 :
$operadora = ‘AMAZONIA CELULAR’ ;
break;
case 55331 :
$operadora = ‘TNL PCS’ ;
break;
case 55337 :
$operadora = ‘UNICEL DO BRASIL’ ;
break;
case 55341 :
$operadora = ‘TIM’ ;
break;
case 55343 :
$operadora = ‘SERCOMTEL CELULAR’ ;
break;
case 55349 :
$operadora = ‘OPTIONS COMP’ ;
break;
case 55377 :
$operadora = ‘MCS (Nextel)’ ;
break;
case 55390 :
$operadora = ‘TELCOM TELECOMUNICACOES DO BRASIL’ ;
break;
case 55391 :
$operadora = ‘FALKLAND TECNOLOGIA’ ;
break;
case 55392 :
$operadora = ‘IRIDIUM’ ;
break;
case 55393 :
$operadora = ‘GLOBALSTAR DO BRASIL’ ;
break;
}
echo $operadora;
exit();
— fecha tag php aki — senao nao consigo postar o codigo
valew ai gente..
Participo da lista Asterisk, fiz o AGI assim que o site foi disponibilizado, olha neste link que já foi feito uma versão de AGI com php que faz exatamente o que precisa:
http://www.mail-archive.com/asteriskbrasil@listas.asteriskbrasil.org/msg60946.html
Eder, bom dia! Eu estou tendo minha primeiras experiencias com o Asterisk e confesso que tenho tido alguma dificuldade pra faze-lo rodar a contento. No caso desse script em Phyton ou em Php, como eu faço para roda-lo e a partir do retorno dele (oi, vivo, tim, etc) ele selecionar a rota…? Por exemplo, eu incluo a informação no extension.conf, conforme esse ultimo link que você postou, e depois o quais alterações devo fazer para que ele selecione a rota conforme a operadora que foi localizada? Abs.
Eder gostaria de fazer um pergunta você esta agora com contrato com empresas privadas para a escript citada acima?
gostaria de saber se e possivel fechamos um contrato para criar uma para freeswich se sim por favor entrar em contato estarei deixando um email para resposta