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.
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.
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.
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.
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:
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})
'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!
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