Integrando sua Aplicação .Net com Twitter

by Fabiano 31. julho 2009 21:18

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


 

Tags: ,

.Net

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen

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.