super_banner_728x90

Mostrando postagens com marcador robôs. Mostrar todas as postagens
Mostrando postagens com marcador robôs. Mostrar todas as postagens

domingo, 12 de junho de 2011

Como criar um bot no Twitter (em Python)

Oi pessoal.

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ô)
O segundo passo é criar uma conta no Twitter e registrar uma aplicação na página de desenvolvimento de aplicativos para o Twitter (clique em "Register your own Twitter application").

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/

domingo, 31 de outubro de 2010

I.A. - Inteligência Artificial ou Imbecilidade Automatizada? Máquinas podem pensar e sentir?

O título acima é também o tema de uma palestra dada pelo prof. Valdemar W. Setzer (do IME-USP). Em sua página, ele faz um breve resumo do que é tratado na apresentação e também coloca um texto mais longo sobre o assunto.



RESUMO
  1. O ser humano é uma máquina? O que é um computador. Dado e informação. Sintaxe e semântica. O "quarto chinês" de Searle e a semântica. O pensar como processo singular e como ponte entre a percepção e o conceito. Exemplo da visão e da perspectiva linear. Intuição: xadrez eletrônico e Kasparov vs. Deep Blue. O que é compreender e aprender. A auto-determinação do pensar e a liberdade.
  2. Qual o papel do cérebro? O cérebro é um computador? A atividade neuronal produz o pensamento ou vice-versa? Crítica a R. Kurzweil e suas profecias. Objeções de Penrose (o pensamento não é algorítmico) e de Fetzer (semiótica). As questões da autodeterminação do pensamento e a liberdade.
  3. O que é inteligência? Tipos de inteligência (Gardner e Goleman). Inteligência incorporada em minerais, plantas, animais, seres humanos e máquinas. Inteligência criativa no ser humano. Máquinas podem ser inteligentes? O Teste de Turing e suas extensões (Harnad). Comparação com o "quarto chinês". Inteligência Artificial ou Imbecilidade Automatizada?
  4. O que é ter sentimentos? Subjetividade e individualidade dos sentimentos. A universalidade das máquinas e a possibilidade de terem sentimentos. J. McCarthy e o seu "termostato com opinião". Pensar, sentir e querer.
  5. Consciência e auto-consciência. As máquinas podem ter consciência?
  6. Análise dos filmes The Bicentennial Man de Columbus e Artificial Intelligence de Spielberg. Absurdos presentes nos filmes. Mensagens dos filmes. Influências na mentalidade, principalmente em crianças.
  7. Conclusões. O mundo e a humanidade em perigo e a questão da visão de mundo.
 Leia mais sobre o assunto em:
http://www.ime.usp.br/~vwsetzer/IAtrad.html (texto mais longo, em português)
http://www.ime.usp.br/~vwsetzer/AI.html (original, em inglês)
http://www.ime.usp.br/~vwsetzer/apresentacoes/IA-reduzida.pps (apresentação)

Vale a pena!

* Aproveite e dê uma fuçada na página do Prof. Setzer e leia mais textos dele. Você vai gostar!