segunda-feira, 3 de junho de 2013

Tutorial - RSS Feed

Olá, pessoal.
Bem nunca escrevi sobre tecnologia aqui no blog, mas tudo tem a sua primeira vez!

Então vamos lá, hoje trago um exemplo de leitor de RSS, é bem simples a solution esta no VS 2012.
Utilizei como fonte de pesquisa o site http://www.geekpedia.com/tutorial147_Creating-an-RSS-feed-reader-in-Csharp.html , que mostra como fazer uma solução voltada para desktop. Achei uma solução prática e fiz algumas adaptações para pode utilizar o exemplo para fazer um Web Forms.


O RSS

O RSS (Really Simple Syndication – RSS 2.0) é uma maneira simplificada de apresentar conteúdo de um site, ele é construído em XML (eXtensible Markup Language) e pode ser acessado por um programa especifico ou sites agregadores.
Uma das vantagens é que não é preciso acessar um determinado site, ou sites, para ver o que esta sendo atualizado ou postado, com o leitor de RSS você escolhe o tipo de informação (muitos RSS são separados por categorias, tais como: Tecnologia, Economia, etc..) que deseja e de quais sites em um único lugar.

Codificando

Primeiro passo foi criar uma solução web no VS 2012, conforme segue figura abaixo.

O VS 2012, cria um projeto web forms ,  ficando como a figura abaixo, no caso utilizei o template criado já que é apenas um exemplo, única coisa que fiz depois foi apagar a pasta “Account” e os arquivos “About.aspx” e “Contact.aspx”, utilizando apenas a “Default.aspx” e editei a master page, “Site.Master”.



Depois adicionei um novo projeto a solução, com o nome de Util, é ai que vamos codificar as classes para fazer a leitura de um RSS Feed.



Escolhemos então o tipo de projeto, escolhi uma Class Library, que irá criar uma dll que será utilizado como referencia no projeto web.

  O VS 2012 por default cria uma classe Class1 que não iremos utilizar.

Então criaremos duas classes, a classe Feed e a classe RssReader.  A classe Feed será o objeto que será criado a partir da leitura do RSS, para cada item do XML será criado um feed e adicionado em uma lista. Já o RssReader será responsável por ler o endereço e preencher essa lista.
 

Classe Feed
namespace Util
{
    ///


    /// Class Feed
    ///

    public class Feed
    {
        #region Property

        public string Titulo { get; set; }
        public string Descricao { get; set; }
        public string Link { get; set; }

        #endregion Property
    }
}

Classe RssReader
using System;
using System.Collections.Generic;
using System.Xml;

namespace Util
{
    ///
    /// Class RssFeed
    ///

    public class RssReader
    {
        #region Private properties
       
        private string url;
        private XmlTextReader rssReader;
        private XmlDocument rssDoc;
        private XmlNode nodeRss;
        private XmlNode nodeChannel;
        private XmlNode nodeItem;

        #endregion Private properties

        ///
        /// Constructor
        ///

        /// url do feed
        public RssReader(string url)
        {
            this.url = url;
        }

        ///
        /// Return feeds
        ///

        ///
        public IList RetornaFeeds()
        {
            IList listRetorno = new List();

            if (string.IsNullOrEmpty(this.url))
            {
                throw new Exception("A url não pode ser vazia!");
            }
            else
            {
                rssReader = new XmlTextReader(this.url);
                rssDoc = new XmlDocument();

                rssDoc.Load(rssReader);

                // Loop for the rss tag
                for (int i = 0; i < rssDoc.ChildNodes.Count; i++)
                {
                    // If it is the rss tag
                    if (rssDoc.ChildNodes[i].Name == "rss")
                    {
                        // rss tag found
                        nodeRss = rssDoc.ChildNodes[i];
                    }
                }

                // Loop for the channel tag
                for (int i = 0; i < nodeRss.ChildNodes.Count; i++)
                {
                    // If it is the channel tag
                    if (nodeRss.ChildNodes[i].Name == "channel")
                    {
                        // channel tag found
                        nodeChannel = nodeRss.ChildNodes[i];
                    }
                }

                // Loop for the title, link, description and all the other tags
                for (int i = 0; i < nodeChannel.ChildNodes.Count; i++)
                {
                    // If it is the item tag, then it has children tags which we will add as items to the List
                    if (nodeChannel.ChildNodes[i].Name == "item")
                    {
                        nodeItem = nodeChannel.ChildNodes[i];

                        // Create a item to the List containing information from inside the nodes
                        Feed feed = new Feed();
                        feed.Titulo = nodeItem["title"].InnerText;
                        feed.Link = nodeItem["link"].InnerText;
                        feed.Descricao = nodeItem["description"].InnerText;
                        listRetorno.Add(feed);
                    }
                }

            }

            return listRetorno;
        }
    }
}

Agora vamos para o projeto web, é lá que iremos fazer a chamada que fará a leitura do RSS Feed.
Primeiramente, vamos criar um Text Box e um Button para poder ler o endereço e carregar as informações de um feed.


Agora vamos adicionar um GridView onde serão carregadas as informações,  após o clique no botão carregar.
No GridView vamos adicionar um Hyperlink Field, clique no grid e depois escolha “Edit Columns...”  e escolha a opção “HyperLinkField” e clique em “Add”. Nomeie a propriedade “HeaderText”  para “Rss Feed” que como nome já diz será o nome do cabeçalho da coluna.


Ainda na mesma tela na propriedade "NavigateUrl" coloque Link, essa propriedade virá da lista de objeto que será o DataSource do grid, essa lista será populada com objeto do tipo Feed, que foi criada anteriormente no projeto Util.  E na propriedade “DataTextField” será colocado a propriedade Titulo, que também virá da lista de objetos do tipo Feed.
 


Agora vamos codificar a ação do botão, é ai que vamos chamar o método que responsável por popular o grid com as informações. Na página “Default.aspx” iremos dar um duplo clique no botão “Carregar...”, ele irá nos jogar para a tela onde iremos codificar (Code-Behind)
 


Antes de colocar o trecho de código com a chamada do método, devemos fazer a referencia ao projeto Util, para podermos utilizar as classes criadas.
Para adicionar é muito simples, basta clicar com o botão direito no projeto RssReader, e escolher a opção “Add reference...”
 

Escolha a opção  “Solution” e em seguida escolha o projeto Util
 

Então colocamos o seguinte trecho de código:
protected void btnOk_Click(object sender, EventArgs e)

{
            try
            {
                //set the object
                Util.RssReader readerFeed = new Util.RssReader(txtUrl.Text);
                //load url
                GridView1.DataSource = readerFeed.RetornaFeeds();
                GridView1.DataBind();
            }
            catch (Exception ex)
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "Alert",
                    "alert('" + ex.Message + "');", true);
            }
 }


Depois, é só executar e está pronto!
 


 


Podem ter certeza, demorei muito mais tempo fazendo o tutorial do que a solução em si!

Espero ter ajudado e quaisquer dúvidas podem falar, caso eu não saiba responder ai procuro a resposta!



Link com a solution - RssReader.zip
Abraços! :)

sábado, 31 de dezembro de 2011

Feliz Ano Novo!

Olá a todos!

Bem fim de ano sempre é a mesma coisa, não tem jeito... Vem as lembranças, as reflexões, as promessas... Muitos acham que isso é besteira, que ano novo é apenas um novo dia... Não deixa de ser... Mais já que podemos “recomeçar” algo por que não no ano que se esta iniciando?!

Até agora por conta de muitas coisas nem tive tempo de ter essas lembranças, reflexões e promessas... Talvez faça isso já no ano novo, afinal estou de férias e vou ter um pouco de tempo livre.

Mesmo que eu não venha a planejar o que fazer e nem refletir o que fiz, tenho para mim coisas que eu faço ou tento fazer independente de qualquer coisa, são elas:


- Fazer para os outros as coisas que eu quisesse que fizessem por mim;

- Estar de lado das pessoas que eu realmente gosto;

- Procurar evoluir como pessoa, tanto profissionalmente quanto pessoalmente;

- Ser verdadeiro com as pessoas ao redor;


Bem, acho que seguindo isso já da pra ter um ano legal, analizando friamente cada "proposta" tudo ai pode trazer complicações, principalmente a parte de ser verdadeiro... Estranho, né?

Nem deveria ser... mais na real, as pessoas no geral (estou incluso), nem sempre estão preparadas paras as verdades do mundo e por isso muitas vezes nos confortamos com a mentira mesmo sabendo que ela vai ser prejudicial depois. Mais faz tempo que decidi que por mais doloroso que seja a verdade eu sempre vou falar, muitas vezes machuco ou sou machucado por isso... é o preço que pago, afinal nem tudo na vida são flores.

E essa eu acho que é a minha reflexão de final de ano... ta vendo ai... só foi ter um tempinho!

No mais desejo a todos um Feliz ano novo de verdade e que já que temos um marco de ínicio, que possamos utilizar para rever tudo que passamos e estamos dispostas a passar, faça tudo aqui que realmente vale, para depois não se lamentar ou culpar as pessoas por sua infelicidade. Se você esta se sentindo mal com algo, resolva, esperar só faz as coisas se tornarem cada vez mais complicadas. Se você esta feliz, comemore e aproveite o memento que você criou!

Como dizem la na empresa: "Você é responsável por sua carreira!". Digo praticamente o mesmo, Você é responsável por sua vida! Se ela esta ruim é por que você de uma forma ou outra fez com que isso acontecesse, se ela esta boa é por que você fez com que isso acontecesse também.

Feliz ano novo!

sexta-feira, 16 de dezembro de 2011

opa!

blog recado para vc... talvez você volte a ser um dos meus passatempos! :D heuhiehiheiuhui

sábado, 17 de setembro de 2011

terça-feira, 5 de abril de 2011

Amor e relacionamentos

Olá a todos...,

Bem depois de quase um ano sem postar e uma noite de insônia aqui estou eu..., bem vim falar de uma coisa que venho pensando muito últimamente..., mais vamos introduzindo..., há um ano e pouco sai de Maceió/AL e vim para o Recife/PE para estudar e trabalhar. Divido um apartamento com dois amigos meus, ambos de Alagoas. E durante esse tempo muitas vezes me pego só e fico pensando na vida..., afinal deixei tudo que tinha, família, amigos, alguns amores, etc..

E é sobre isso que venho pensando muito, relacionamentos e amor. Acredito em ambos..., porém dentro de algumas visões, lembro-me quando garoto no ensino médio, falei: "Amor só existe de mãe para filho!". Coisa de adolecente revoltado com a vida! huheiheihuie, depois mudei de visão, acreditei que o amor sim era possível entre pessoas desconhecidas.

Hoje o que venho notando é que existe algo entre pessoas desconhecidas, as vezes acho que deva ser amor mesmo..., outras vezes é egoísmo, outras comodismo, outras querer ou sei lá o que. Ninguém gosta de ficar só por muito tempo e trata logo de arrumar um "amor". As vezes o amor realmente existe, problema é quando ele só existe de um lado...

Relacionamento e amor são temas altamente ligados. Por isso que quando penso em um penso no outro. Eu com muita sinceridade digo, não acredito mais em relacionamentos amorosos..., alguém algum dia pode me fazer mudar de idéia, algum dia...

Vejo e converso com muitas pessoas sobre isso, sempre gostei de observar e conversar sobre o comportamento das pessoas. Quanto mais eu converso mais eu me conveço que o ser humano é um ser muito egoísta no seu gostar. Como falei antes, gosta para não esta só em boa parte das vezes.

Imagino que muitos devem estar pensando, esse levou uma gaia..., esse num sei o que..., se levei não sei..., heuiheiuhie, tudo é possivel, mais não falo aqui só das minhas experiencias, falo muito mais do que eu vejo e converso sobre o tema. Talvez falo por fruto de desamor, ou por ter alguém que me ama e eu não consiga retribuir.

No mundo de hoje as pessoas crescem sem muito apego as coisas, tudo é muito rápido e acessivel, quando falo tudo, falo tudo mesmo! Desde de conhecimento a pessoas. Maioria das pessoas não querem se apegar a nada por haver muitas possibilidades.

Opa, falei no começo que acreditava no amor e em relacionamentos, depois falo ao contrário? Não, continuo a dizer acredito em determinado casos, como relacionamento de amizade, alguns são amorosos, familiares para mim são os mais fáceis de existir, porém não são regra. Como falei relacionamento entre pessoas diferentes que nunca se viram e passam a ter uma vida em comum, são outros quinhentos..., acho dificil existir, alguns devem ter um relacionamento mútuo de amor, mais a maioria das coisas e exemplos que vejo não são.

Visão pessimista? Na minha opinião é apenas realista. Eu fico triste as vezes em não acreditar no amor, mais pra mim isso é realidade.

Que alguém ainda possa mudar minha visão. Mais aviso que sou cabeça dura!