Twitter - Usando a API do Twitter
Hoje vou falar um pouco sobre a API do Twitter e de como podemos usá-la em nossas aplicações. As informações foram obtidas em http://apiwiki.twitter.com/API-Overview.
Nota: Existem outras APIs que permitem efetuar a comunicação com o Twitter. Ex: TweetSharp para C#.(Que abordarei em outro artigo)
Antes de falar sobre a API creio que você sabe que o Twitter é um microblogging muito popular criado no ano de 2006 por Jack Dorsey para ser usado em dispositivos móveis.
A API do Twitter consiste de 3 partes:
Outro ponto importante a considerar quando utilizar a API, é que existe um limite para você efetuar chamadas, requisições, atualizações ou enviar mensagens diretas. A utilização da API neste quesito é restritiva, e, para saber mais sobre este quesito leia o documento: API Twitter - limitações
A utilização da API é bem simples:
Obs: Resumindo podemos dizer que a API é REST e devolve dados no formato XML, JSON, RSS e ATOM.
REST - Representantion State Transfer - Atualmente pode ser
entendido como um conjunto de regras usadas para descrever uma interface web
que utiliza HTTP e XML (JSON,ATOM). Os sistemas que seguem os
princípios REST são conhecidos como RESTfull. O padrão REST se baseia nas requisições HTTP: POST , PUT , GET e DELETE. |
A documentação completa pode ser acessada no link: http://apiwiki.twitter.com/Twitter-API-Documentation mas de forma geral todas as requisições envidas a API do Twitter seguem o seguinte formato:
http://[URL]/[Função].[Formato]?[Parâmetros]
onde :
Nota: Você pode obter diversos tutoriais, dicas e truques neste link : http://www.newwebplatform.com/tips-and-tutorials/Twitter
Como exemplo vejamos o método statuses public_timeline da API Rest do Twitter:
URL:
http://api.twitter.com/1/statuses/public_timeline.formatFormats:
xml, json, rss, atomHTTP Method(s):
GETRequires Authentication:
falseAPI rate limited:
true
O retorno será um arquivo no formato especificado.
Em outro exemplo, para enviar um novo post para o twitter usando a API podemos fazer assim:
http://twitter.com/statuses/update.xml?status=Macoratti esta usando a API do Twitter!
Abaixo temos a requisição no navegador FireFox e a solicitação de autenticação:
Para mais detalhes consulte a documentação.
Vejamos agora um exemplo prático de como usar a API do Twitter em uma aplicação da plataforma .NET usando a linguagem VB .NET.
Vamos pensar...
Quais os parâmetros que eu preciso passar para fazer uma requisição no Twitter ?
Vamos então usar a classe HttpWebRequest que fornece uma implementação HTTP da classe WebRequest para poder implementar um função que faça as requisições a API do Twitter em nossa aplicação.
A classe HttpWebRequest fornece suporte para as propriedades e métodos definidos no WebRequest e para outras propriedades e métodos que permitem que o usuário interaja diretamente com servidores usando HTTP.
É disso que precisamos e vamos usar...
- Vamos usar o método WebRequest.Create para inicializar os objetos HttpWebRequest, o retorno será um objeto HttpWebRequest;
- O método GetResponse realiza uma solicitação assíncrona para o recurso especificado na propriedade RequestUri e retorna um HttpWebResponse contendo a resposta da requisição;
- Para enviar dados podemos usar o método GetRequestStream que retorna um objeto Stream a ser usado para enviar os dados;
- Vamos usar também a propriedade method para definir o método que iremos solicitar na requisição;
Podemos criar um método que utilize estes conceitos e obtenha o retorno na forma de um DataSet usando o seguinte código:
Public Shared Function FazRequisicaoTwitter(ByVal metodo As String, ByVal usuario As String, ByVal senha As String, ByVal url As String) As DataSet Dim requisicao As HttpWebRequest Dim resposta As WebResponse Dim rd As StreamReader = Nothing Dim ds As New DataSet() Try 'monta a requisicao requisicao = DirectCast(HttpWebRequest.Create(url), HttpWebRequest) requisicao.Method = metodo 'verifica a autenticacao requisicao.Credentials = New NetworkCredential(usuario, senha) 'obtem a resposta resposta = requisicao.GetResponse() rd = New StreamReader(resposta.GetResponseStream()) 'le o xml e gera o dataset ds.ReadXml(rd) rd.Close() 'retorna o dataset Return ds Catch ex As Exception throw ex Return Nothing End Try End Function |
Podemos usar esta classe para fazer a requisição que desejamos passando os parâmetros e tratando o retorno, no caso um DataSet da forma que desejarmos.
Podemos também criar outro método sobrecarregado onde os parâmetros usados são o método usado (GET,POST,PUT,DELETE) e a URL (função da API do Twitter) retornando um arquivo texto XML. Neste método as credenciais do usuário são obtidas a partir do arquivo de configuração:
Private Shared Function FazRequisicaoTwitter(ByVal metodo As String, ByVal url As String) As String 'obtem as credenciais do usuário no arquivo de configuração Dim usuario As String = ConfigurationManager.AppSettings("usuario") Dim senha As String = ConfigurationManager.AppSettings("senha") 'monta a requisição Try Dim requisicao As HttpWebRequest = DirectCast(HttpWebRequest.Create(url), HttpWebRequest) requisicao.Method = metodo 'verifica a autenticação requisicao.Credentials = New NetworkCredential(usuario, senha) 'obtem a resposta Dim resposta As WebResponse = requisicao.GetResponse() Dim rd As New StreamReader(resposta.GetResponseStream()) Dim responseString As String = rd.ReadToEnd() rd.Close() 'retorna o xml Return responseString Catch ex As Exception throw ex Return Nothing End Try End Function |
Dessa forma temos dois métodos que podemos usar onde um retorna o DataSet e o outro um arquivo XML que deverá ser tratado.
Vejamos dois exemplos de utilização da nossa rotina:
1-) Método :
statuses/user_timeline - Usado para retornar os 20 post mais recentes postados pelo usuário autenticado:URL :
http://twitter.com/statuses/user_timeline.xmlPara montar a nossa requisição fazemos assim:
FazRequisicaoTwitter("GET", "seu login", "sua senha", "http://twitter.com/statuses/user_timeline.xml")
2-) Método : statuses/friends_timeline - Usado para retornar os 20 posts mais recentes efetuados pelo usuário autenticado e pelos seus seguidores. (Retweets não serão obtidos)
URL : "http://twitter.com/statuses/friends_timeline.xml"
Para montar a nossa requisição fazemos assim:
FazRequisicaoTwitter(
"POST", "seu login", "sua senha", "http://twitter.com/statuses/friends_timeline.xml")Muito simples, não é mesmo ???
Para ver a 'coisa' funcionando eu vou criar uma aplicação Windows Forms (poderia ser qualquer outro tipo de aplicação) usando o Visual Basic 2008 Express Edition;
Abra o VB 2008 Express Edition e crie um novo projeto do tipo Windows Forms Application com o nome apiTwitter;
A seguir no menu Project selecione Add Class e informe o nome Comunica.vb;
Agora inclua no código da classe Comunica os métodos que já criamos:
Imports System.Net Imports System.IO Imports System.Configuration Public Class Comunica Public Shared Function FazRequisicaoTwitter(ByVal metodo As String, ByVal usuario As String, ByVal senha As String, ByVal url As String) _ As DataSet Dim requisicao As HttpWebRequest Dim resposta As WebResponse Dim rd As StreamReader = Nothing Dim ds As New DataSet() Try 'monta a requisicao requisicao = DirectCast(HttpWebRequest.Create(url), HttpWebRequest) requisicao.Method = metodo 'verifica a autenticacao requisicao.Credentials = New NetworkCredential(usuario, senha) 'obtem a resposta resposta = requisicao.GetResponse() rd = New StreamReader(resposta.GetResponseStream()) 'le o xml e gera o dataset ds.ReadXml(rd) rd.Close() 'retorna o dataset Return ds Catch ex As Exception throw ex Return Nothing End Try End Function Private Shared Function FazRequisicaoTwitter(ByVal metodo As String, ByVal url As String) As String 'obtem as credenciais do usuário no arquivo de configuração Dim usuario As String = ConfigurationManager.AppSettings("usuario") Dim senha As String = ConfigurationManager.AppSettings("senha") 'monta a requisição Try Dim requisicao As HttpWebRequest = DirectCast(HttpWebRequest.Create(url), HttpWebRequest) requisicao.Method = metodo requisicao.Credentials = New NetworkCredential(usuario, senha) 'obtem a resposta Dim resposta As WebResponse = requisicao.GetResponse() Dim rd As New StreamReader(resposta.GetResponseStream()) Dim responseString As String = rd.ReadToEnd() rd.Close() 'retorna o xml Return responseString Catch ex As Exception throw ex Return Nothing End Try End Function End Class |
No formulário padrão form1.vb vamos incluir uma controle DataGridView , dois controles Buttons e um controle TextBox conforme o leiaute abaixo:
No evento Click do botão para enviar o post ao twitter inclua o seguinte código:
Private Sub btnPostar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPostar.Click Try Dim texto As String = txtMensagemTwitter.Text Dim url As String = String.Format("http://twitter.com/statuses/update.xml?status={0}", texto) Comunica.FazRequisicaoTwitter("POST", "seu login", "sua senha", url) MsgBox("Mensagem postada com sucesso") Catch ex As Exception MessageBox.Show("Ocorreu um erro durante a conexÆo como Twitter : " & ex.Message) End Try End Sub |
E no evento Click do botão para obter os posts recentes inclua o código a seguir:
Private Sub btnPostsRecentes_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPostsRecentes.Click Try Dim dstwitter As New DataSet dstwitter = Comunica.FazRequisicaoTwitter("GET", "seu login", "sua senha", "http://twitter.com/statuses/user_timeline.xml") DataGridView1.DataSource = dstwitter.Tables("status") Catch ex As Exception MessageBox.Show("Ocorreu um erro durante a conexÆo como Twitter : " & ex.Message) End Try End Sub |
Nota: É obvio que você deve usar as suas credencias para efetuar o logon.
Agora vamos executar o projeto, realizar um post e depois obter os posts mais recentes que serão exibidos no controle DataGridView,. Veja o resultado na figura abaixo:
Observe que a mensagem que eu postei aparece nos posts mais recentes, e, para não haver dúvidas consultando o meu twitter constatamos que a mensagem realmente foi postada:
Reconheço que a interface deixa a desejar mas meu objetivo foi mostrar como usar a API do Twitter usando o VB .NET, deixo a criação de um interface mais caprichada para o tratamento dos resultados como um exercício.
Eu sei é apenas VB .NET e Twitter mas eu gosto...
Referências: