Estive trabalhando num projeto de um bot para o Twitter. Como achei que é relativamente fácil fazer uma aplicação básica, resolvi compartilhar com vocês.
Antes de tudo, você deve instalar o Python e a API python-twitter.
A palavra "bot" vem do inglês "robot" (robô) |
Após criar uma aplicação (e estando devidamente logado no site), você deve buscar alguns códigos importantes, na seção "Your apps" (seus aplicativos). Já, já iremos falar deles. Vamos ao código:
# Você deve importar a API # (é aqui que você confere se deu tudo certo na instalação) import twitter, time # Esses códigos aqui embaixo são encontrados
# na seção que citei acima ("Your apps") minha_consumer_key = 'AAAAAAAAAA' # Busque por 'Consumer key' minha_consumer_secret = 'EEEEE' # Busque por 'Consumer secret' # Esses dois códigos abaixo estão na seção 'My Access Token' # no menu do lado direito da tela meu_oauth_token = 'IIIIIIIII'
# Access Token (oauth_token) meu_oauth_token_secret = 'OOOOOOOOO'
# Access Token Secret (oauth_token_secret) # Esse é o comando para se conectar à # API usando os dados do seu aplicativo api=twitter.Api(consumer_key = minha_consumer_key, \ consumer_secret = minha_consumer_secret, \ access_token_key = meu_oauth_token, \ access_token_secret = meu_oauth_token_secret) # Como vamos fazer um bot respondedor automático de perguntas, # vamos verificar suas 'mentions' mentions = api.GetMentions() # Para vê-las, você pode executar o seguinte comando print 'Imprimindo mentions' for m in mentions: print m.id, m.user.screen_name, m.text # As 'mentions' são tweets, e têm vários atributos legais, # que você pode ver executado o comando 'dir(mentions[0])' # No exemplo acima, estamos imprimindo o id da 'mention', # o nome do usuário que fez a 'mention' e o texto da mesma. # Quando você chama a função api.GetMentions(), é # possível obter o 'id' dela. Esse 'id' será # importante para, a cada verificação das 'mentions', # identificar quais são novas. Basta, a cada # verificação, comparar o 'id' com o maior 'id' # verificado anteriormente. Os 'ids' maiores # indicam 'ids' de 'mentions' novas. ultima_mention = mentions[0].id # a API dá as 'mentions' como uma lista, na # qual as 'mentions' mais novas vêm primeiro # Agora iremos tratar as 'mentions' e respondê-las while True: # Iremos fazer o programa esperar um pouco a # cada requisição, pois o Twitter não permite # que se faça muitas requisições em um espaço # curto de tempo (o intervalo de 20s é suficiente) time.sleep(20) # Pegando 'mentions' desde a última obtida mentions = api.GetMentions(since_id = ultima_mention) for m in mentions: # O texto, estará em m.text, e primeiramente iremos # retirar o nome da nossa aplicação do texto texto = m.text.replace('@perfil_da_aplicacao', '') # Se houver a hashtag '#calcule', no tuíte... if texto.find('#calcule') >= 0: #...iremos calcular como um comando comum # do Python (usando a função 'eval' # (mas antes, retiramos a hashtag, # com a função "replace") resultado = str(eval(texto.replace('#calcule',''))) # Respondendo a 'mention': # A linha abaixo pega o nome (no perfil)
# de quem fez a 'mention' quem_fez_a_mention = m.user.screen_name # A próxima já responde ao tuíte com
# o resultado do cálculo status = api.PostUpdate('@' + quem_fez_a_mention \ + ': ' + resultado) else: # Ideias? pass # por enquanto, não faz nada # Essas linhas abaixo atualizam o id da última # 'mention', para que nas próximas requisições< # somente as novas 'mentions' sejam obtidas if m.id > ultima_mention: ultima_mention = m.id
Pronto! Você já pode usar seu pode para fazer cálculos simples. Se você tiver outras ideias, basta incrementar mais o seu bot. Lembre-se de que, dependendo do que sua aplicação irá fazer, alguma complexidade a mais será adicionada. E não se esqueça de configurar o tipo de acesso da aplicação ("Default Access type") para "Read, Write, & Private Message", que permite que sua aplicação leia dados, escreva (adicione pessoas, tuíte, etc.) e envie DMs (Direct Messages).
Atualização (07/08/2011)
A propósito: nessa brincadeira de criar bots, criamos esses 3 aí embaixo.
@desencurta: Você tuíta "@desencurta uma-url-curta" (ex: "@desencurta http://kingo.to/G0U") aí ele te devolve uma DM com a url original (pra isso vc precisa seguir o @desencurta)
@descobreai: Esse ainda está adquirindo novas funcionalidades. Por enquanto ele responde a cálculos e descobre resultados de jogos de futebol (Brasileirão séries A e B e Libertadores).
Basta vc tuitar "@descobreai #calcule um-cálculo" (ex: "@descobreai #calcule 3+5*8") ou "@descobreai time1 & time2 uma-data um-campeonato" (ex: "@descobreai flamengo & coritiba 06/08 brasileirão") que ele te responde na hora!
@bandejao_usp: Esse tuíta automaticamente o cardápio de todos os restaurantes (vulgo "bandejões") da USP (campus Butantã) todos os dias uma hora antes de os restaurantes abrirem.
@RUdaUFC: Faz a mesma coisa que o @bandejao_usp, mas para o Restaurante Universitário da Universidade Federal do Ceará. O código está disponível aqui: https://github.com/franzejr/RUdaUFC/