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 BelmonteAcabei 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