Desenvolvimento - C#

Integrando sua Aplicação ASP.Net com Twitter e Migre.me

Faça com que seus textos sejam publicados diretamente no Twitter e use a redução de URL do Migre.me.

por Fabiano Belmonte



Acabei de implementar uma funcionalidade aqui na InfoMoney que integra nossos publicadores de noticias com o Twitter a nova rede social do momento, que e bem legal...
Quando os redatores publicam uma nova noticia no site ela já vai para o Twitter automaticamente.

E seguindo a Dica do Tarifa vou publicar o conteudo.
Segue o Código Utilizado para que Vocês possam aproveitar também...

Primeiro Fiz integração com o Migre.me que e um serviço bem legal que reduz um URL já que no Twitter cada caractere poupado faz a diferença pois o post só pode ter 140 caracteres

Segue o Método que gera a url:

/// <summary>
/// Que que recebe um URL normal e retorna uma menor gerada pelo migre-me
/// </summary>
/// <param name="OriginalURL"></param>
/// <returns></returns>
public string GenerateMigreMeURL(string OriginalURL)
{

try

{

string URIReturn, strURIGenerated;

//Trata se a url não começar com http://

if (!OriginalURL.ToLower().StartsWith("http") && !OriginalURL.ToLower().StartsWith("ftp"))

{

OriginalURL = "http://" + OriginalURL;

}

var Request = System.Net.WebRequest.Create("http://migre.me/api.xml?url=" + OriginalURL);
var Response = Request.GetResponse();


XDocument xmlReturn;

strURIGenerated = "";

using (var reader = new StreamReader(Response.GetResponseStream()))

{

URIReturn = reader.ReadToEnd();

xmlReturn = XDocument.Load(new StringReader(URIReturn), LoadOptions.SetBaseUri | LoadOptions.SetLineInfo);

strURIGenerated = xmlReturn.Descendants("migre").First().Value;

}

return strURIGenerated;

}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}

Como o serviço disponibilizado pelo Migre.me retorna um XML, não poderia deixar de utilizar o LINT To XML para fazer o parse do mesmo, o XML retornado e bem completo tem ate mensagem de erro caso ocorra, mas no exemplo eu faço somente o tratamento da mensagem, caso queira aprimorá-lo fique a vontade basta dar uma olhada do XML de retorno e tratar os campos que desejar...

Ah uma dica importante por ser um serviço Free você so poderá gerar 30 URL`s por hora se o seu serviço precisar de mais ai você devera optar pelo serviço pago do Migre.me.

Método que Posta no Twitter:

Aqui eu utilizo uma API do Twitter chamada “Twitterizer.Framework” que e bem simples de implementar.
Faça o Download da DLL e adicione como referência em seu projeto para poder utiliza-la. E bem legal tem varias funcionalidades, vale dar uma explorada.

/// <summary>
/// Método que faz o "Post" do texto no twitter.
/// </summary>
/// <param name="UserName">Usuário de acesso ao Twitter.</param>
/// <param name="Password">Senha de acesso do Twitter.</param>
/// <param name="Text">Texto a ser gravado no Twitter(Deve ter somente 140 caracteres).</param>
Public static void Post(string UserName, string Password, string Text)
{
try
{
Twitter Tw = new Twitter(UserName, Password);
TwitterStatus TwS = new TwitterStatus();
TwS = Tw.Status.Update(Text);
}
catch (Exception ex)
{
throw new Exception("Ocorreu um erro ao salvar as informções: ", ex);
}
}

E o mais legal dessa API e que e muito rápido o post, muito rápido mesmo.
E fiz também um método que faz a regra para fazer a contagem dos caracteres para garantir que sua mensagem tenha mesmo os 140 caracteres.

///Onde faz o post literalmente

private void PostNews(int NewsId)
{

string url = @"";

//titulo da noticia. Aqui eu tiro tudo que tiver de tag HTML
string tituloNoticia = FrameWork.Util.UtilString.UtilString.RemoverTags(HttpUtility.HtmlDecode(TITULOVINDODOBANCO), true, true, true, true, true, true);

//gera a url.

string URLGerada = BiMigreMe.GenerateMigreMeURL(url);

//trata os erros.

if (URLGerada != "")

{

string TwPost = "";

TwPost = tituloNoticia + "..." + " " + URLGerada; // Aqui junto tudo para poder saber qu tamanho vai ficar o post inteiro

//verifica se o tamanho total é maior que 140.

if (TwPost.Length > 140)

{

//Agora separo todo mundo pra peder montar to tamanho correto cortando o somente o texto e nao o link

int totallink = URLGerada;

TwPost = tituloNoticia;

TwPost = TwPost.Substring(0, 137 - totallink);

TwPost = TwPost + "..." + URLGerada;

}

try

{

TwitterFrameWork.Post(UserTwitter, PasswordTwitter, TwPost);

lblInf.Text = "Notícia postada com sucesso!!";

}

catch (Exception ex)

{

lblInf.Text = "Ocorreu um erro: " + ex.Message.ToString();

}

}

}

}

}

PS: Segue abaixo o metod que retira os caracterer indesejado no post

public static string RemoverTags(string Texto,

bool IsLink,

bool IsHtml,

bool IsCss, bool IsScript,

bool IsHref, bool IsImg)

{

string ReturnText = string.Empty;

StringBuilder Patterns = new StringBuilder();

if (IsLink)

Patterns.Append(@"(\<link[^\>]+\>)" + "|");

if (IsHtml)

Patterns.Append(@"<(.|\n)*?>" + "|");

if (IsCss)

Patterns.Append(@"(class=[""\w].*?[a-z].\"")" + "|");

if (IsScript)

Patterns.Append(@"(\<script[^\>]+\>)|(\</script[>])|(\<script[>])" + "|");

if (IsHref)

Patterns.Append(@"(\<a[^\>]+\>)|(\</a[>])" + "|");

if (IsImg)

Patterns.Append(@"(\<img[^\>]+\>)" + "|");

try

{

return System.Web.HttpContext.Current.Server.HtmlDecode(Regex.Replace(Texto, Patterns.ToString().Substring(0, Patterns.Length - 1), string.Empty));

}

catch (Exception)

{

return Texto;

}

}

Bem pessoal e isso... E bem simples mais funciona.

Espero ter ajudado...

Bons Códigos...
Fabiano Belmonte

Conheça o curso Curso Integrando Aplicativos ASP.NET C# com Redes Sociais (Twitter e Facebook) da Devmedia

Fabiano Belmonte

Fabiano Belmonte - Senior Architect, especialista em aplicações e-business com larga experiência em B2B (Submarino. Com e Saraiva.Com). Trabalha há 5 anos com a tecnologia .Net, aplicando conhecimentos nas diversas áreas: instituições financeiras (sistema SPB), e-commerce, gerenciamento logístico entre outras.