quarta-feira, 26 de agosto de 2009

Dicas web2py: lendo e enviando tweets

Esse é o primeiro artigo de uma série que pretendo postar aqui no blog. Nessa "série" Dicas web2py serão postados artigos simples e rápidos para ajudarem desenvolvedores que utilizam o web2py como framework para desenvolvimento Web. Em um futuro não muito distante também estarão aqui pequenos tutoriais para quem ainda está iniciando. :-)

Se você usa o framework para desenvolvimento Web web2py, com pouquíssimas linhas você consegue enviar e receber tweets de maneira bem fácil. Resolvi postar essa dica aqui depois de corrigir alguns bugs no código que foi publicado no AlterEgo (um local onde armazenamos receitas de bolo para o web2py).

Seguindo a dica no AlterEgo dá pra ver que utilizando o simplejson fica fácil! Como o web2py web2py já possui o simplejson por padrão então não precisamos de mais nada!
Segue o código:

#Enviando tweets
def post_tweet(username, password, message):
    from urllib import urlencode
    from base64 import b64encode
    from urllib2 import Request, urlopen
    import gluon.contrib.simplejson as sj
    args= urlencode([('status', message)])
    headers = {}
    headers['Authorization'] = 'Basic ' + b64encode(username + ':' + password)
    request = Request('http://twitter.com/statuses/update.json', args, headers)
    return sj.loads(urlopen(request).read())


#Lendo tweets
def get_tweets(user):
    from gluon.tools import fetch
    import gluon.contrib.simplejson as sj
    page = fetch('http://twitter.com/%s?format=json' % user)
    return sj.loads(page)['#timeline']

Para usar:

#Enviando um tweet:
post_tweet('meu_usuario', 'minha_senha', 'Olá, Twitter! Estou no @web2py...')

#Recebendo tweets do usuário 'web2py':
meus_tweets = get_tweets('web2py')

Depois disso é só retornar meus_tweets na função de seu controller e utilizar na view como quiser. Bem simples, né? O código acessa a API do Twitter através da urllib2 e usa o simplejson para transformar uma string JSON em um dicionário Python.
No caso da função post_tweet temos um dicionário como retorno, que possui dados sobre o tweet enviado (id, data/hora, usuário etc.), já a função get_tweets retorna uma string com os tweets já em HTML.

O código acima já é utilizado no web2py: a interface administrativa (aplicação admin) mostra os últimos tweets do @web2py (procure pela função twitter no controller default.py).

--
   Álvaro Justen
   Peta5 - Telecomunicações e Software Livre

2 comentários:

  1. Álvaro,

    Esse esquema de exibir os twitts funciona no GAE ? to tentando implementar mas ele não esta conseguindo conectar !

    ResponderExcluir