.NET

4 nov, 2008

Crie um leitor de RSS com Linq to XML

Publicidade

Em um artigo recente, mostrei o que é o Linq to XML e suas principais funcionalidades (https://imasters.com.br/artigo/9978/dotnet/linq_to_xml_xml_literals/). Neste artigo quero mostrar como é fácil criar um leitor de RSS (Really Simple Syndication) utilizando o Linq to XML, uma das mais novas tecnologias da plataforma .NET.

Para mostrar a versatilidade, vou criar uma aplicação mobile (Smart Device). O processo é bem similar como a criação de uma aplicação desktop ou web. O foco deste artigo será a criação do coração de um leitor RSS, ou seja, como acessar um endereço (feed de stockquote do Google, por exemplo) e exibir as informações para o usuário, conforme Figura 01. Ao final do artigo, vamos habilitar a conexão com a internet no emulador de smart aplication, através do ActiveSync da Microsoft.

Mão na massa!

Abra o Visual Studio. Para este projeto utilizei o Visual Studio 2008 com o framework .Net 3.5. Crie um novo projeto, “Smart Device”, chamado “Leitor RSS”, e salve no diretório de sua preferência, conforme Figura 02. Uma nova janela será exibida e para selecionar o tipo de aplicação, selecione “Device Application”, conforme Figura 03.

Figura 01: Leitor RSS, utilizando linq to XML.Figura 01: Leitor RSS, utilizando linq to XML.

Figura 02: Crie um novo projeto, Smart Device, chamado \Figura 02: Crie um novo projeto, Smart Device, chamado \”Leitor RSS\”.

Figura 03: Selecione a opção \Figura 03: Selecione a opção \”Device Application\”

Modo 01: Criando o leitor RSS de modo bem simples

Crie o código, conforme Listagem 01. Note que o código é bem simples. Adicione um controle do tipo “label” no form1 da aplicação, chamada “lbl0Resposta0”, e aumente seu tamanho de forma que ocupe toda a tela e possua barra de rolagem vertical.

A primeira variável criada na Listagem 01 é um URI que recebe o endereço do feed do Google. Note na Figura 04 que, o ao acessar o endereço do feed, um XML é retornado, sendo assim vamos carregá-lo a um documento utilizando o método XDocument, do linq to XML.

Para cada registro em xmlContatos.Descendants(“item”), vamos escrever seu valor na label, caso seja “title” ou “description“. Pronto! Em poucas linhas de código você criou um leitor RSS. Note que utilizando tecnologias anteriores ao linq to XML, seriam necessárias mais linhas de códigos, principalmente de tratamento do XML, e recuperá-lo através de uma requisição http.

Listagem 01: Modo 01 – Recuperando as informações do feed, e exindo de modo simples.
Public Class Form1

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ´ Crio o endereço
        Dim oURI As New Uri("http://www.googlestockquote.com/feed/rss2/")

        ´ Resposta do XML Vinda da fonte RSS
        Dim xmlContatos = XDocument.Load(oURI.ToString)

        ´lipo antes de exibir
        lbl0Resposta0.Text = String.Empty

  ´ ------------------ MODO 01 -----------------------------------------
        ´ Faço um loop pelo retorno
        For Each oRegistro In xmlContatos.Descendants("item")

            ´ Para cada item do XML
            For Each oItem In oRegistro.Descendants

                Select Case oItem.Name.LocalName

                    Case "title"
                        lbl0Resposta0.Text &= oItem.Value & vbCrLf & vbCrLf

                    Case "description"
                        lbl0Resposta0.Text &= Replace(oItem.Value, Chr(10), "") & vbCrLf

                    Case Else
                        ´ não exibo
                End Select
            Next

            ´ Crio um divisor
            lbl0Resposta0.Text &= "-------------------------------" & vbCrLf
        Next

    End Sub
End Class

Figura 04: Retorno como XML do feed.Figura 04: Retorno como XML do feed.

Modo 02: Utilizando linq query para filtrar as informações

Existe um modo mais elegante de obter um mesmo resultado da Listagem 01, utilizando a query do próprio linq. Na Listagem 02, é feito um filtro dos feeds recuperando título, link e descrição. Estas informações são exibidas através de um loop simples entre os itens do resultado da query. Note que para recuperar o título, por exemplo, basta utilizar a variável do loop, com o nome da propriedade atribuído na query, como por exemplo: “oItem.titulo”.

Com a query é possível criar filtros com cláusulas “where”, ordenar e todas as demais operações que a query do linq permitir fazer. Na Figura 04, note que o XML possuí tags do tipo “item”. Por este motivo é utilizado o método xmlContatos.Descendants(“item”), para que todos os valores de “item” sejam retornados.

Listagem 02: Modo 02 – Filtrando as informações utilizando um query, em linq.
Public Class Form1

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ´ Crio o endereço
        Dim oURI As New Uri("http://www.googlestockquote.com/feed/rss2/")

        ´ Resposta do XML Vinda da fonte RSS
        Dim xmlContatos = XDocument.Load(oURI.ToString)

        ´lipo antes de exibir
        lbl0Resposta0.Text = String.Empty

        ´ ------------------ MODO 02 -----------------------------------------
        Dim resultado = From s In xmlContatos.Descendants("item") _
                        Select titulo = s.Element("title").Value, _
                               link = s.Element("link").Value, _
                               descricao = s.Element("description").Value


        ´ Para cada item do XML
        For Each oItem In resultado
            lbl0Resposta0.Text &= oItem.titulo & vbCrLf & vbCrLf & _
                                  Replace(oItem.descricao, Chr(10), "") & vbCrLf

            ´ Crio um divisor
            lbl0Resposta0.Text &= "-------------------------------" & vbCrLf
        Next

    End Sub
End Class

Habilitando a acesso à internet no mobile, e testando a aplicação.

Antes de testar sua aplicação mobile, é necessário habilitar a conexão com a internet. Por padrão o emulador não tem acesso direto à internet. Para obter este acesso instale o ActiveSync da Microsoft, que pode ser baixado gratuitamente no site da própria MS. Procure por “ActiveSync” e instale a ultima versão. Até o término deste artigo a última versão era a 4.5. Após a instalação, habilite a conexão à internet pelo ActiveSync, conforme Figura 05. Agora pelo Visual Studio, inicialize o emulador. Acesse agora a barra de ferramentas “Tool” e selecione a opção “Device Emulator Manager”, conforme Figura 06.

Conecte-se ao Windows Mobile 5,0 Pocket PC SDK, conforme Figura 07. Na opção do emulador “Windows Mobile 5,0 Pocket PC SDK”, habilite a comunicação com o “Cradle”, conforme Figura 08. Isto simulará a conexão com a base do pocket e habilitará a conexão com a internet via ActiveSync. Para testar, abra o Internet Explorer do emulador mobile e acesse o site de sua preferência. Caso o site apareça, significa que o emulador está conectado corretamente com a internet.

Rode agora a aplicação, pressionando F5. Um leitor similar ao da Figura 09 será exibido no emulador.

Figura 05: Habilite a conexão a internet pelo ActiveSync.Figura 05: Habilite a conexão a internet pelo ActiveSync.

Figura 06: Selecione a opção \Figura 06: Selecione a opção \”Device Emulator Manager\”, em tools.

Figura 07: Conecte-se ao \Figura 07: Conecte-se ao \”Mobile 5.0 PC R2\”

Figura 08: Habilite a opção \Figura 08: Habilite a opção \”Cradle\”.

Figura 09: Rode a aplicação, tendo como resultado final, o leitor de RSS.Figura 09: Rode a aplicação, tendo como resultado final, o leitor de RSS.

Agora que você criou o coração do leitor, crie novas funcionalidades. Permita que o usuário possa salvar novos endereços feeds, armazene notícias, acesse-as através de linq e tudo mais que sua imaginação permitir.

Um Forte Abraço!