.NET

16 jul, 2010

Postando no Twitter com .NET

Publicidade

Olá, pessoal! Após um tempo sem
escrever, volto aqui com um assunto bem bacana, integração com redes sociais. Vamos dar uma olhada em como usar uma API que o Twitter disponibiliza e uma API
do site Migre.me para mandarmos as mensagens “via API”
com a URL encurtada. Podemos fazer isso com aplicações web e desktop.

Vamos lá!

Web

Crie um novo website e, no code
behind da página Default.aspx, adicione os seguintes usings/imports:

  • System.Net;
  • System.IO;
  • System.Xml;
  • System.Web

C#

  • using System.Net;
  • using System.IO;
  • using System.Xml;
  • using System.Web;

VB.NET

  • Imports System.Net
  • Imports System.IO
  • Imports System.Xml
  • Imports System.Web

Agora, na página Default.aspx, adicione os seguintes
controles:

ID Tipo  
EmailTextBox TextBox  
SenhaTextBox TextBox TextMode=Password
ByTextBox TextBox  
UrlTextBox TextBox  
MensagemTextBox TextBox  
PostarButton Button Text=Postar

Seu código deve ter ficado parecido com este:

            <table>

<tr>

<td>

E-mail

</td>

<td>

<asp:TextBox ID="EmailTextBox" runat="server"></asp:TextBox>

</td>

</tr>

<tr>

<td>

Senha

</td>

<td>

<asp:TextBox ID="SenhaTextBox" runat="server" TextMode="Password"></asp:TextBox>

</td>

</tr>

<tr>

<td>

Mensagem

</td>

<td>

<asp:TextBox ID="MensagemTextBox" runat="server"></asp:TextBox>

</td>

</tr>

<tr>

<td>

URL

</td>

<td>

<asp:TextBox ID="UrlTextBox" runat="server"></asp:TextBox>

</td>

</tr>

<tr>

<td>

By

</td>

<td>

<asp:TextBox ID="ByTextBox" runat="server"></asp:TextBox>

</td>

</tr>

<tr>

<td colspan="2">

<asp:Button ID="PostarButton" runat="server" Text="Postar" OnClick="PostarButton_Click" />

</td>

</tr>

</table>

Migre.Me

Nesse momento
iremos fazer nossa aplicação conversar com a API do migre.me. Vamos usar a API
que retorna um XML.

No Code
Behind, crie uma função que retorna uma string chamada CreateMigreMeUrl, que recebe três parâmetros também
do tipo string, denominadas by, url, message, conforme os exemplos abaixo:

C#

 

    public string CreateMigreMeUrl(string by, string url, string message)

{

string retorno = string.Empty;

// essa url será acessada pelo nosso sistema para gerar a url encurtada

string urlMigreMe = string.Format("http://migre.me/api.xml?url={0}", url);

// o WebClient é classe que irá "baixar" o retorno da URL do Migre.me

WebClient client = new WebClient();

// O Stream irá ler o retorno do WebClient

Stream stream = client.OpenRead(urlMigreMe);

// O XmlTextReader é utilizado para receber os dados do Stream

XmlTextReader xmlReader = new XmlTextReader(stream);

// Nesse momento é feita uma busca pelo nó do XML que contém no valor o texto "http://migre.me/", assim que o texto é encontrado a variável retorno é montada

while (xmlReader.Read())

{

if (xmlReader.NodeType == XmlNodeType.Text)

{

if (xmlReader.Value.ToLower().Contains("http://migre.me/"))

{

retorno = string.Format("{0} {1} {2}", message, xmlReader.Value, by);

}

}

}

return retorno;

}

VB.NET

   Public Function CreateMigreMeUrl(ByVal by As String, ByVal url As String, ByVal message As String)

Dim retorno As String = String.Empty

Dim urlMigreMe = String.Format("http://migre.me/api.xml?url={0}", url)

Dim client As New WebClient

Dim stream As Stream

stream = client.OpenRead(urlMigreMe)

Dim xmlReader As New XmlTextReader(stream)

While xmlReader.Read

If xmlReader.NodeType == XmlNodeType.Text Then

If xmlReader.Value.ToLower().Contains("http://migre.me") Then

retorno = String.Format("{0} {1} {2}", message, xmlReader.Value, by)

End If

End If

End While

Return retorno

End Function

Twitter

Agora faremos a função que será
responsável por postar nosso tweet. É bastante simples: crie uma função do
tipo void chamada PostTweet, que recebe três parâmetros do tipo string,
denominados username, password e tweet.

C#

    public static void PostTweet(string username, string password, string tweet)

{

try

{

// Os dados do usuário são "Codificados" nesse momento

string user = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(username + ":" + password));

// a variável byte recebe a saída do post

byte[] bytes = System.Text.Encoding.UTF8.GetBytes("status=" + tweet);

// Inicializa o HttpWebRequest

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://twitter.com/statuses/update.xml");

// Define o método como POST

request.Method = "POST";

// se verdadeiro espera respostas para requisições POST. O valor padrão é true.

request.ServicePoint.Expect100Continue = false;

// adiciona o cabeçalho de autenticação da API do Twitter

request.Headers.Add("Authorization", "Basic " + user);

// Definie o cabeçalho

request.ContentType = "application/x-www-form-urlencoded";

// Tamanho do buffer

request.ContentLength = bytes.Length;



// Pega o retorno

Stream reqStream = request.GetRequestStream();

// Escreve o retorno

reqStream.Write(bytes, 0, bytes.Length);

// Fecha a requisção

reqStream.Close();

}

catch (Exception ex)

{

// As exceções devem ser tratadas aqui

}

}

VB.NET

    Public Sub PostTweet(ByVal username As String, ByVal password As String, ByVal tweet As String)

Try

Dim user As String = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(username + ":" + password))

Dim bytes() As Byte = System.Text.Encoding.UTF8.GetBytes("status=" + tweet)

Dim request As HttpWebRequest

request = HttpWebRequest.Create("http://twitter.com/statuses/update.xml")

request.ServicePoint.Expect100Continue = False

request.Headers.Add("Authorization", "Basic " + user)

request.ContentType = "application/x-www-form-urlencoded"

request.ContentLength = bytes.Length

Dim reqStream As Stream = request.GetRequestStream()

reqStream.Write(bytes, 0, bytes.Length)

reqStream.Close()

Catch ex As Exception

'As exceções devem ser tratadas aqui

End Try

End Sub

No evento, click no botão postar adicione o seguinte código:

C#

PostTweet(EmailTextBox.Text, SenhaTextBox.Text, CreateMigreMeUrl(ByTextBox.Text, UrlTextBox.Text, MensagemTextBox.Text));

VB.NET

PostTweet(EmailTextBox.Text, SenhaTextBox.Text, CreateMigreMeUrl(ByTextBox.Text, UrlTextBox.Text, MensagemTextBox.Text))

Referências

http://migre.me/api-migreme/

http://dev.twitter.com/

Com isso, finalizamos o
desenvolvimento dessa integração, basta agora utilizarmos um usuário válido para postar alguma coisa no Twiiter.

Espero que isso tenha agregado
valor a vocês.

Um grande abraço e até a próxima.