Conversando com o Twitter
Colaboração: Miguel Galves
Data de Publicação: 30 de maio de 2008
Já ouviu falar do Twitter? O sistema de microblog que tem feito muito sucesso na Internet recentemente (e que tem deixado o RubyOnRails em máus lençóis também, mas isto é assunto para outro dia...). Se não conhece, aconselho dar uma visitada: tem algumas iniciativas interessantes ocorrendo por lá.
Eu gostaria de comentar aqui sobre a questão de integração com o Twitter: conversar via software com o Twitter é extremamente simples, graças à API REST de acesso. REST? REpresentational State Transfer, termo criado por Roy Fielding, computeiro americano e um dos principais autores da especificação do protocolo HTTP, em sua tese de PhD.
O próprio REST tem como pilar o protocolo HTTP. A idéia básica é definir que existem recursos (fontes de informação) que podem ser acessados através de um identificador global (que no caso do HTTP, é conhecido como URL), e que retornam uma representação da informação (XML, JSON, etc). Os recursos são considerados objetos, e o REST utiliza as ações do protocolo HTTP para agir sobre estes objetos: GET, POST (as mais famosas, para quem trabalha com sistemas web e com ajax), PUT e DELETE.
- GET URI corresponde à operação de leitura de um objeto
- POST URI correponde à operação de criação, atualização ou remoção de um objeto, utilizando dados enviados pelo comando.
- DELETE URI corresponde à operação de remoção de um objeto.
- PUT URI corresponde, assim como POST, à operação de atualização ou criação de um objeto.
Assim como no HTTP, o REST não armazena sessão: o acesso tem que ser feito sem que o recurso precise ter conhecimento de requisições passadas, proxys, caches e outros recursos utilizados em sistemas web. Ou seja: qualquer serviço REST pode ser acessado apenas com a URI apropriada e a ação desejada.
A API REST do Twitter permite acesso a todas as funcionalidades do sistema, de forma extremamente simples. Por exemplo: caso eu queira listar as mensagens recebidas pelo usuário job4dev em formato xml, basta acessar a URL http://twitter.com/statuses/friends_timeline/job4dev.xml. O sistema retorna informações também em JSON (neste caso, bastaria mudar o xml do final por json).
A maioria dos comandos requer autenticação, que no caso do Twitter é feita usando o BasicAuth: a informação de usuário e senha é enviada em um header chamado Authorization, cujo conteúdo é uma string na forma
Authorization: Basic < dados em base 64>,
onde < dados em base 64> é usuario:senha codificado
em base64
(formato muito utilizado para transmissão de dados na web).
Vou colocar aqui um exemplo em Python para enviar uma mensagem nova para uma conta no Twitter. A função encodestring é responsável por converter para base64, e a função urlencode gera uma string no formato correto para colocar na requisição HTTP:
auth = encodestring('%s:%s' % (user, password))[:-1] header["Authorization"] = 'Basic %s' % self.auth encoded_post_data = urlencode({"status":status}) req = Request(TwitterSender.url, encoded_post_data, header) url_data = urlopen(req)
O mais interessante desta API é que além de ser simples, ela é muito bem documentada: http://groups.google.com/group/twitter-development-talk/web/api-documentation
Miguel Galves é Engenheiro de Computação, editor do blog Log4Dev e do jobboard de TI Job4Dev