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: