Enviando mensagens para celulares TIM através de script

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.

[ Hits: 78.126 ]

Por: Vinicius Tavares Petrucci em 30/07/2004


Introdução



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.

Enviando a mensagem


Primeiro pegamos o cookie da página principal:

http://200.179.42.65/weblogic/services/smsmt.jsp?site=consume&service=smsmt

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.

Exemplo do header:

params = urllib.urlencode({'site':'consume',\
    'service':'smsmt',\
    'prefix':dddd,\
    'destNumber':teld,\
    'name':nome,\
    'myNumber':dddc+telc,\
    'message':msg,\
    'counter':152-len(msg)-len(nome)-len(dddc)-len(telc),\
    'chars':simbolo})

Conclusão


Este é um breve explicativo do funcionamento do script para celulares TIM. O script pode ser baixado em:
Entre em contato para maiores explicações!

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Apache + PHP + MySQL + ftpd no OpenBSD

Asterisk - Configurando Ramais, Plano de Discagem e URA Simples

Como instalar o compilador Free Pascal

chkconfig - Adicionando o seu shell script

Business Intelligence - Pentaho 3.5 com PostgreSQL

  
Comentários
[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.

Obrigado.

Fábio Santos Almeida

[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?


Fábio Santos Almeida

[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

[4] Comentário enviado por dinizmu em 30/07/2004 - 17:23h

Muito bom mesmo esse script!!!
é isso ai!

[5] Comentário enviado por warlinux em 31/07/2004 - 10:33h

Cara, muito bom mesmo.

Fiz uns testes e funcionou perfeitamente.

Hhehehe, agora vou criar uns scripts para monitor meu server para envio de msg para o celular também.

Falow fui ...

[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

Valeu .

[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?

[8] Comentário enviado por pop_lamen em 01/08/2004 - 01:36h

Cara...
mto remoto
faltam explicações de uso...
ainda nao entendi mto bem o q fazer...
mas valeu

[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.

Espero ter sido claro...

[10] Comentário enviado por redhatux em 03/08/2004 - 17:31h

Estou tendo problemas com o Giftext.
Alguem tem o pacote para instalar? Não acho nem no google...a pagina oficial está fora..

[11] Comentário enviado por fabio em 03/08/2004 - 17:57h

redhatux,

O giftext vem no pacote libungif:
http://sourceforge.net/projects/libungif

[]'s

[12] Comentário enviado por viniciuspetrucci em 09/08/2004 - 22:14h

Estive fora estes dias e gostaria de saber se alguem ainda está tendo duvidas ou problemas em rodar o script e se posso ajudar.

sim.... o artigo está vago e falta melhorar. estive sem tempo.

Vinicius

[13] Comentário enviado por fsa_net em 11/08/2004 - 07:47h

Olá Vinicius.

Eu continuo com as mesmas dúvidas... Apreciaria sua ajuda!

Obrigado.

Fábio

[14] Comentário enviado por viniciuspetrucci em 11/08/2004 - 10:44h

vamos aos erros:

> raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
> urllib2.HTTPError: HTTP Error 503: Service Unavailable

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".

abracos,
Vinicius

[15] Comentário enviado por neiluizh em 13/08/2004 - 21:03h

nenhum

[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

[17] Comentário enviado por joseh em 07/10/2004 - 10:55h

cara... vc poderia fazer isso em PHP? num podia? dai funcionaria independente do site da tIM... Que cobra por SMS!... Que vc acha?

[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?

desde já, obrigado.

[19] Comentário enviado por Champignon em 12/02/2005 - 21:30h

Sou o thiago so testando manda mensagem

[20] Comentário enviado por Renan_ em 03/11/2005 - 16:05h

Atualmente este script ainda funciona, vinicius?
Aguardo resposta.

[21] Comentário enviado por linux.dcdinfo em 31/10/2006 - 11:25h

Muito bom deu para ter uma noção melhor de como fazer esses comandos.
Valeu.

[22] Comentário enviado por giza em 17/02/2007 - 00:32h

oi

[23] Comentário enviado por gabriel_ em 15/08/2007 - 22:10h

0o

[24] Comentário enviado por frittz em 22/08/2007 - 13:42h

oi

[25] Comentário enviado por aloisioralmeida em 22/08/2007 - 15:42h

Olá BIBI tô aqui pensando em vc.BJS!!!

[26] Comentário enviado por dina em 12/09/2007 - 16:36h

Oi Ronaldo

[27] Comentário enviado por natalyybarros em 05/12/2007 - 15:31h

oi

[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

[29] Comentário enviado por velin em 25/01/2008 - 22:09h

iopyu

[30] Comentário enviado por mensagemcelular em 30/04/2008 - 19:55h

?lllkoi=

[31] Comentário enviado por mensagemcelular em 30/04/2008 - 19:56h

?comentario=

[32] Comentário enviado por juskeny em 25/06/2008 - 14:03h

mhkukuy fgujyi uryetk


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts