Mostrarei como enviar mensagens para celulares TIM através de um script feito em Python. Este script pode ser portado para outras linguagens e outros fins. Tenterei apenas explicar o funcionamento do script.
A idéia é automatizar o envio de mensagens para celulares TIM. Queremos tornar o processo automático para podermos através de eventos, recebermos notificações importantes ou não nos nossos celulares.
Que tal receber algumas mensagens do MSN, icq no celular? Dá pra fazer usando o SIM (http://sim-icq.sf.net).
Através do site da TIM é possível enviar as mensagens e utilizaremos o sistema deles para o envio. Algumas proteções são a validação de cookies e imagem GIF que aparecem forçando o usuário a abrir a página, ler o GIF e digitar o que está no GIF. Irei mostrar um script que fará o trabalho de analisar a informação contida no GIF.
Análise da imagem
Primeira fase é o treinamento das imagens. É usado um programa chamado 'giftext', que vem com a biblioteca libungif no Linux (podendo ser compilado o fonte em Windows com Cygwin). Este programa lê um arquivo GIF e gera como saída um fluxo de bytes, que são os pixels. Mais especificamente: a representação hexadecimal da sua cor na tabela de cores, que pode ser visualizada com o próprio programa (vide giftext --help).
Com isso, cria-se uma matriz binária com marcação 1 onde aparece a cor dos caracteres e 0 caso contrário. Próxima tarefa é delimitar onde começa e termina cada caracter, isto é, onde há uma separação de coluna toda preenchida com zeros. Com isso tenho uma delimitação na horizontal dos caracteres.
Já que os caracteres aparecem em posições aleatórias no sentido vertical também, é necessário nivelar cada um em um limite superior comum, isto é, onde começa a primeira linha com valores diferentes de zero em cada delimitação horizontal de cada caracter.
Agora que temos a delimitação horizontal e vertical, podemos gerar um valor numérico para cada coluna onde inicia e termina a delimitação de um caracter, somamos os valores de todas as colunas e por fim temos um número único para cada caracter!
Próximo passo é criar um mapa (um dicionário em Python) que é um array associativo, amarrando um número a sua representação de caracter.
Lendo a imagem
Baixa-se a imagem do site, aplica a análise gerando um número para cada caracter supostamente lido.
Com o mapa de caracteres, usamos cada número encontrado na imagem que acabou de ser lida e temos uma seqüência de caracteres que serão os mesmos caracteres visualizados na imagem GIF.
Depois preparamos um header e o conteúdo da imagem lida será usado em um campo deste header. Enviamos um POST para o script do site da TIM (http://200.179.42.65/weblogic/services/smsmtresult.jsp) com os campos do header devidamente preenchidos e pronto! A mensagem deverá chegar ao destinatário.
[1] Comentário enviado por fsa_net em 30/07/2004 - 10:31h
Vinicius.
No texto acima você descreveu o processo para criar o programa, mas não entendi o quê preciso fazer para executar o programa. Minhas dúvidas:
1- Tenho que salvar a figura com o código de envio em um arquivo?
2- O program irá gerar o header HTML sozinho?
3- Estou usando debian woody, será preciso compilar o arquivo C?
Então para começar executei:
python tim2004.py 11 telefone "msg"
Retornou:
Traceback (most recent call last):
File "tim2004.py", line 13, in ?
sucesso = timLib.enviaSMS(dddd, teld, msg, '', '', '')
File "timLib.py", line 185, in enviaSMS
mapa = abreMapa()
File "timLib.py", line 13, in abreMapa
return pickle.load(file('mapa.save', 'rb'))
NameError: global name 'file' is not defined
Não conheço o python mas acho que faltou configurar mais coisas... Preciso de ajuda para configurar o que falta.
[2] Comentário enviado por fsa_net em 30/07/2004 - 10:33h
Vinicius
Você conhece o Kannel? (http://www.kannel.org/) um gateway open source para SMS e WAP, eu estou tentando configura-lo para enviar um sms, usando o protocolo HTTP e ainda não tive sucesso, se puder dar uma força que sabe não pode pintar um novo tutorial sobre o assunto?
[3] Comentário enviado por mmm em 30/07/2004 - 15:53h
Utilizei o programa, mas muitas vezes é retornado o erro abaixo. Mesmo quando aparece esse erro, às vezes a msg chega. Ou seja, não dá pra confiar muito se a mensagem foi ou não, como acontece no próprio site da TIM.
Traceback (most recent call last):
File "./tim2004.py", line 13, in ?
sucesso = timLib.enviaSMS(dddd, teld, msg, '', '', '')
File "/home/mmaia/temp/tim/timLib.py", line 210, in enviaSMS
f = urllib2.urlopen(req, params)
File "/usr/lib/python2.3/urllib2.py", line 129, in urlopen
return _opener.open(url, data)
File "/usr/lib/python2.3/urllib2.py", line 326, in open
'_open', req)
File "/usr/lib/python2.3/urllib2.py", line 306, in _call_chain
result = func(*args)
File "/usr/lib/python2.3/urllib2.py", line 901, in http_open
return self.do_open(httplib.HTTP, req)
File "/usr/lib/python2.3/urllib2.py", line 895, in do_open
return self.parent.error('http', req, fp, code, msg, hdrs)
File "/usr/lib/python2.3/urllib2.py", line 352, in error
return self._call_chain(*args)
File "/usr/lib/python2.3/urllib2.py", line 306, in _call_chain
result = func(*args)
File "/usr/lib/python2.3/urllib2.py", line 412, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 503: Service Unavailable
[6] Comentário enviado por ag_andrade em 31/07/2004 - 11:03h
Então está dando o mesmo problema que o do Fábio Santos .
Aparece essa mensagem
Traceback (most recent call last):
File "tim2004.py", line 13, in ?
sucesso = timLib.enviaSMS(dddd, teld, msg, '', '', '')
File "timLib.py", line 185, in enviaSMS
mapa = abreMapa()
File "timLib.py", line 13, in abreMapa
return pickle.load(file('mapa.save', 'rb'))
NameError: global name 'file' is not defined
[7] Comentário enviado por pepsue em 31/07/2004 - 23:14h
Olá, teria como fazer um script que ligue para o celular via modem quando cair a internet, ou que mande uma mensagem para o celular (via internet mesmo) quando algo de errado ocorrer no servidor?
[9] Comentário enviado por pepsue em 02/08/2004 - 18:22h
No servidor que tenho aqui (slackware 10) tenho sempre problemas de cair a conexão do speedy (home, pppoe) e as vezes não conecta sozinho, é preciso reiniciar o servidor inteiro por causa disso e as vezes até desligar e ligar novamente. Eu viajo muito, e o pessoal daqui acaba ficando na mão por causa disso, ninguem sabe mecher no linux. Então eu precisaria que algo me avisasse quando cair a internet. como já vi por aí, um rapaiz fez um script que ligava para o celular dele (via modem normal) e assim ele sabia que ocorreram erros no servidor dele.
Eu sei que existe o ssh e o putty, mas se a internet cai eu não conssigo acessar, mesmo que ela volte, meu speedy é pppoe, ip dinamico... nunca iria conseguir controla-lo, eu queria pelo menos um status dele para poder saber porque não está navegando aqui.
este eh um erro entre o servidor de pagina da TIM e a sua maquina. se acontecer constantemente, pode ser necessario fazer algumas outras tentativas de conexao.
> return pickle.load(file('mapa.save', 'rb'))
> NameError: global name 'file' is not defined
qual versao do teu python? muito estranho. tente alterar "file" por "open".
> 1- Tenho que salvar a figura com o código de envio em um arquivo?
nao. eh feito automaticamente.
> 2- O program irá gerar o header HTML sozinho?
nao entendi.
> 3- Estou usando debian woody, será preciso compilar o arquivo C?
nao. baixe o libungif-bin e instale. usando o apt-get ou baixe o fonte e compile. ele ira compilar o programinha chamado "giftext".
[16] Comentário enviado por clauguia em 13/09/2004 - 19:51h
Olá, Vinícius. Adorei seu programa! até fiz um pequeno script de interação com usuário, veja em http://geocities.yahoo.com.br/claudia_enk/ é coisa boba mas foi meu primeiro script...
Queria saber o seguinte:
1. Se você não se importa de eu ter colocado seu script na minha página (coloquei o link para o seu original e disponibilizei um arquivo zipado com os arquivos do seu mais o que acrescentei);
2. Se existem scripts semelhantes para outras operadoras.
Atenciosamente
Cláudia Enk de Aguiar
[18] Comentário enviado por bru.elvis em 09/12/2004 - 23:00h
Eu não manjo nada de python, gostei da idéia do script e gostaria de coloca-lo para funcionar aqui. porém ele está me retornando esse erro quando executo:
$ python tim2004.py "011" "12345678" "mensagem!"
erro:
Traceback (most recent call last):
File "tim2004.py", line 13, in ?
sucesso = timLib.enviaSMS(dddd, teld, msg, '', '', '')
File "/root/programas/tim2004/timLib.py", line 183, in enviaSMS
nomeArq = getServerGif(dado, cookies)
File "/root/programas/tim2004/timLib.py", line 245, in getServerGif
fimg = open(nome, 'wb')
IOError: [Errno 2] No such file or directory: 'vices/.gif'
será que vc poderia me instruir de como corrigí-lo?
[28] Comentário enviado por reuber em 19/12/2007 - 17:16h
O meu esta dando este erro. FC6
Comando que estou executando.
python tim2004.py "71" "12345678" "mensage"
Traceback (most recent call last):
File "tim2004.py", line 13, in ?
sucesso = timLib.enviaSMS(dddd, teld, msg, '', '', '')
File "/net/usr/reuber/plan/timLib.py", line 182, in enviaSMS
dado, cookies = getDadoCookies()
File "/net/usr/reuber/plan/timLib.py", line 178, in getDadoCookies
return dado, cookies
UnboundLocalError: local variable 'cookies' referenced before assignment