Skip Navigation Links



Translate this page now :



»Programação
»Programação.NET
»Banco de Dados
»Webdesign
»Office
» Certificações Microsoft 4
»Treinamentos4
»Programação 4
»Webdesign«
»Office & User Tips«
»Grupos de UsuĆ”rios
»CĆ©lulas AcadĆŖmicas«

Micro de mulher
Você já está cadastrado e participa do grupo de usuários de sua cidade ? Se não, comente o porque.
 
 
FaƧa um pequeno teste com 10 questƵes de VB
.:.
Teste seus conhecimentos em Visual Basic, SQL Server e ASP 3.0 com nossas provas on-line
.:.
Aprimore seus conhecimentos em programaĆ§Ć£o com nosso treinamento on-line de lĆ³gica de programaĆ§Ć£o
.:.
Veja nosso calendƔrio de treinamentos
Gostou da PƔgina?
Então

para um amigo!

Pesquisa personalizada
Pesquisar Dicas:

 







Publicando notícias da internet no seu site com RSS

Publiquei anteriormente 2 artigos sobre RSS. Um explicando do que se trata (http://www.bufaloinfo.com.br/artigos/coluna01.asp ), outro mostrando como criar um serviço de notícias em RSS (http://www.bufaloinfo.com.br/artigos/artigo0701.asp ).

Então agora vamos ver como consumir um serviço de notícias em RSS. Vamos montar uma página web com diversas fontes de notícias, mas vamos fazer de uma forma tal que seja possível ao próprio usuário personalizar as fontes de notícia que deseja ver.

Não teremos muito trabalho para fazer a leitura do RSS propriamente. Scott Mitchell, desenvolvedor .NET que contribui regularmente para o site http://www.4guysfromrolla.com, produziu um custom Web Control que consome dados em RSS de outros sites e os exibe na forma de uma grid. No momento em que escrevo este componente encontra-se em sua versão 1.4 e pode ser downloadeado do seguinte endereço : http://www.gotdotnet.com/community/workspaces/workspace.aspx?ID=6A116A0F-66C4-4F91-9E13-A0D00960B9AD

Então neste artigo estarei demonstrando o uso deste componente e alguns outros recursos, permitindo o próprio usuário configurar os serviços de notícia que deseja utilizar.

Para começar, precisaremos de uma tabela. Vamos chama-la de "feeds" e vamos utilizar a seguinte estrutura :

idFeed int identity(1,1) ---- identity representa a autonumeração no sql server
Titulo varchar(50)
URL varchar(100)

Certamente você já deve ter downloadeado o Assembly deste custom control do endereço acima e descompactado. Será necessário adicionarmos este componente na toolbox do Visual Studio. Clique com o botão direito na toolbox e selecione a opção "Customize Toolbox". Depois na janela que se abre aponte para o assembly do componente.

Vamos inserir 4 cópias do componente rssFeed em nossa página web, que chamarei de UltimasNovidades.aspx . Inseriremos 2 colunas, uma a esquerda e outra a direita da página e 2 no centro, um no topo e um na parte inferior.

Vamos então configurar os controles. Vamos configura-los para exibirem 4 serviços de notícias fixos, depois faremos com que seja lida a configuração feita pelo usuário.

Podemos manipular as seguintes propriedades para configurar este componente :

ItemStyle : Estilo das linhas de notícias que serão exibidas
AlternatingItemStyle : Estilo de linhas alternadas. Combinado com o ItemStyle gera a exibição de linhas de estilos alternados na grid resultante.
HeaderStyle : Estilo do cabeçalho
HeaderText : Texto do cabeçalho
GridLines : Determina se a tabela deverá exibir linhas separando as células ou não

Bem, com relação ao design estas são as propriedades que acho mais atraentes. Mas o componente tem várias outras, vale a pena examinar mais detalhadamente.

Quanto as funcionalidades, as seguintes propriedades merecem atenção :

CacheDuration : Determina o tempo de cache que será utilizado. O componente fará cache das informações obtidas da origem RSS, evitando um excesso de chamadas para a origem e otimizando a exibição da página.
MaxItems : Número máximo de linhas exibidas
ShowPubDate : Determina se a data de publicação da notícia deve ou não ser exibida
DateFormatString : Formato a ser utilizado pela data de publicação, quando exibida

Vamos então fazer os serviços de notícias serem exibidos. Escolha 4 serviços de notícias e vamos codificar o page_load para exibir as notícias. O código de exibição de um serviço de notícias fica assim :

         rssfeed1.datasource="http://www.devaspnet.com.br/noticias.asmx/ListaNoticias"
         rssfeed1.databind

É necessário então fazer isso para o 4 serviços de notícia, você escolhe os 4 que serão usados como default na sua página. Feito isso, podemos testar.

Feito isso vamos agora começar a fazer com que a página seja configurável pelo usuário. Para isso vamos fazer uso de cookies. Uma forma simples é gravarmos 4 cookies, 1 cookie referente a cada fonte de notícia exibida na página.

Precisaremos então que esses cookies sejam lidos no momento em que a página for carregada. Podemos ler tais cookies e guardar o valor dos cookies em um vetor. Veja como fica o código :

Dim artigo() As Integer = {2, 13, 1, 14}

 Sub CarregarArtigos()
   Dim a As Integer
   Dim cookie As HttpCookie
   For a = 0 To 3
        cookie = Request.Cookies("noticia" & a + 1)
        If Not IsNothing(cookie) Then
            artigo(a) = cookie.Value
        End If
   Next
 End Sub
       

Claro que os cookies ainda não foram criados, estamos primeiro preparando a página para ler os cookies quando existirem e depois nos preocuparemos com a criação dos cookies. 2,13, 1 e 14 são os IDs das origens RSS que escolhi como padrão. Esses IDs foram gerados automaticamente pela autonumeração conforme cadastrei as origens RSS na tabela "feeds".

Observe como o código funciona. É feito um laço de 0 a 3 e com este laço é feita a leitura dos cookies, que possuem um número em seu nome, facilitando assim o trabalho na forma de laços (velhos truques de algorítimo). Verifica-se então se o cookie existe. Se existe, seu valor é inserido no vetor. Se o cookie não existe o vetor permanecerá com o valor default.

Precisaremos então estar recuperando da tabela feeds as fontes de notícia com os códigos escolhidos pelo usuário. Precisaremos de um objeto Connection, um Command e geraremos um dataReader pelo código. A instrução do Command será a seguinte :

SELECT idFeed, Titulo, URL FROM bufaloinfo.bufaloinfo.feeds 
WHERE (idFeed IN (?, ?, ?, ?))
       

O DataReader estará definido a nível da classe, mas vamos criar uma sub separada para preencher os parâmetros e obte-lo. Veja como fica :

 Sub lerArtigos()
       Dim a As Integer
       CN.Open()
       For a = 0 To 3
            cmd.Parameters("param" & a + 1).Value = artigo(a)
       Next
       dr = cmd.ExecuteReader
 End Sub
       

O OledbCommand irá automaticamente criar para cada ? um parâmetro numerado (param1,param2, etc.). Com isso fica fácil fazer um loop no vetor que contém os idFeeds e usar os códigos do vetor para preencher os parâmetros do command.

O próximo passo agora é programarmos o Page_Load para juntar todas essas etapas. Será necessário ler os cookies e carrega-los no vetor, ler os feeds do banco e por fim fazer o databind. Veja como fica :

 Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
                   Handles MyBase.Load
       If Not Page.IsPostBack Then
              Dim objetos() = {RssFeed1, RssFeed2, RssFeed3, RssFeed4}
              Dim indice As Integer
              CarregarArtigos()
              lerArtigos()
              Do While dr.Read
                   indice = artigo.IndexOf(artigo, dr("idFeed"))
                   CType(objetos(indice), skmRss.RssFeed).DataSource = dr("URL")
                   CType(objetos(indice), skmRss.RssFeed).HeaderText = dr("titulo")
                   CType(objetos(indice), skmRss.RssFeed).DataBind()
              Loop
              dr.Close()
              CN.Close()
         End If
End Sub
       

Mais uma vez, usando truques com vetores. Cria-se um vetor contendo os objetos rssFeed, o que nos permite depois fazer o databind dinamicamente para os 4 objetos rssfeed.

Chama-se então as duas subs em sequencia, para carregar os cookies e ler os dados do banco. Por fim faz-se um loop no dataReader. Para cada linha do dataReader é feita uma busca para identificar o seu índice no vetor de idFeeds. O índice no vetor de idFeeds foi organizado para ser o mesmo índice que o objeto correspondente neste vetor de objetos, assim com este indice acessamos o objeto, preenchemos o objeto com os dados do datareader e fazemos o databind.

O próximo passo é criarmos a página que permitirá ao usuário personalizar os serviços de notícia que serão exibidos na página de noticias. Vamos chamar esta nova página de PersonalizarNoticias.aspx .

Nesta página vamos inserir 4 DropDownLists, uma para cada um dos serviços de notícia que deverão ser selecionados. Vamos chama-las de DDL1, DDL2, DDL3 e DDL4. Cada uma será referente a uma das posições na página de notícias. As DropDownLists deverão corresponder com os rssFeeds, ou seja, a DDL1 está selecionando o que será exibido no rssFeed1, e assim por diante, para fazermos mais um truque com vetores.

Nesta página também precisaremos ler os cookies, para podermos preencher a combo com as opções escolhidas pelo usuário. Consequentemente também é util termos um vetor com os códigos das Feeds escolhidas pelo usuário.

Neste caso as páginas PersonalizarNoticias.aspx e UltimasNovidades.aspx tem muitas características em comum. Podemos generalizar essas características em comum usando recursos da orientação a objetos.

Podemos então criar uma classe base contendo estas características e fazer com que as duas páginas herdem as características desta classe base. Veja como fica a classe base :

Public Class AgregadorNoticias
   Inherits System.Web.Ui.Page
   Protected artigo() As Integer = {2, 13, 1, 14}
     Protected Sub CarregarArtigos()
            Dim a As Integer
            Dim cookie As HttpCookie
            For a = 0 To 3
                 cookie = Request.Cookies("artigo" & a + 1)
                 If Not IsNothing(cookie) Then
                    artigo(a) = cookie.Value
                 End If
            Next
    End Sub
End Class

Observem duas características desta classe :

Herda características da classe page, tendo assim as características básicas de uma página Web.

A sub e a variável são protected, o que permitirá que sejam acessadas nas classes filhas (as páginas, no caso).

Precisamos então fazer com que as duas páginas herdem as características desta classe. Para isso alteramos o inherits das páginas, que aponta para System.Web.Ui.Page, fazendo com que passe a apontar para AgregadorNoticias. Isso fará com que as duas páginas possam utilizar tanto o vetor como a sub.

A página PersonalizarNoticias.ASPX precisará então estar trazendo para o usuário todos os serviços de notícia disponíveis. Precisaremos então de uma conexão, um dataAdapter e um dataset, configurados para buscar dados da tabela Feeds. As dropDownlists estarão todas vinculadas com o DataSet e vamos configurar a propriedade DataTextField como "Titulo" e dataValueField como "idFeed". Até ai nenhuma novidade.

No load desta página precisaremos, antes de fazer o databind das combos, fazer a atribuição do código do item selecionado. O código em questão estará no array e será o valor do cookie ou o default.

Veja como fica :

 Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)   _
        Handles MyBase.Load
         'Put user code to initialize the page here
         If Not Page.IsPostBack Then
                Dim objetos() = {DDL1, DDL2, DDL3, DDL4}
                Dim a As Integer
                Dim ddl As DropDownList
                carregarartigos()
                DA.Fill(Dsblogs1)
                For a = 0 To 3
                     ddl = objetos(a)
                     ddl.SelectedValue = artigo(a)
                     ddl.DataBind()
               Next
         End If
End Sub
       

Observe mais uma vez o truque com vetores : Criei um vetor contendo as combos para poder fazer as atribuições em um laço. Observe também a chamada para a sub carregarartigos, que não encontra-se nesta classe mas sim na classe pai, AgragadorNoticias.

Por fim, precisamos inserir nesta página um botão "atualizar", que deverá atualizar os cookies com as preferencias do usuário. Mais uma vez usaremos um loop para buscar o selectedValue de cada combo e gravar no cookie, veja :

 Private Sub cmdGravar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
                Handles cmdGravar.Click
   Dim objetos() = {DDL1, DDL2, DDL3, DDL4}
   Dim a As Integer
   Dim cookie As HttpCookie
   For a = 0 To 3
           cookie = New HttpCookie("artigo" & a + 1, _
                   CType(objetos(a), DropDownList).SelectedValue)
           cookie.Expires = Now.AddYears(5)
           Response.Cookies.Add(cookie)
   Next
   Response.Redirect("ultimasnovidades.aspx")
 End Sub
       

Após a atualização fazemos o redirecionamento de volta para a página UltimasNovidades.aspx . Pronto. Temos uma página de notícias personalizável. Podemos ainda criar uma página de cadastramento para a tabela feeds, para fazer com que o próprio usuário possa adicionar seus próprios serviços de notícia.

Dennes Torres
MCAD,MCSD,MCSE,MCDBA

 

 

 





Envie seus comentįrios sobre este artigo

Nome :

E-mail :

Comentários :


Avise-me quando houverem novos comentįrios nesta pįgina

Veja abaixo os comentários já enviados :

Nome : Luciano E-Mail : lmaximo@divein.com.br
Gostaria muito de conhecer mais sobre RSS. Vcs tem algum curso sobre isso?
Nome : William Roberto E-Mail : wrobertosantos@yahoo.com.br
Realizei os testes com o componente e o resultado foi otimo consegui assimilar toda a materia é de materias assim que a internet deveria estar cheia para que pudessemos nos aperfeiçoar....Valew
Nome : Juan Pablo Gabriel E-Mail : juanpablo0205@brturbo.com
Gostaria de aprender a criar um formulario de comentários assim como esse que estou enviando esse comentário. Como faço ??
Nome : Lucas Comino E-Mail : comino197@gmail.com
ola...ainda naum li o artigo..mais gostaria de saber como fasso para criar um formulario de comentrios igual a este...onde eu comento e aparece logo embaixo...por fqvor se possivel me mande um e-mail ensinando ow crie um arigo sobre isto....
Nome : Hello, nice site look this: E-Mail : titova@pgi.kolasc.net.ru
Hello, nice site look this:
Nome : mnph cxgdjutb E-Mail : tjfzksu@mail.com
lhmbgts ocesdyz acwfzjmxd wquzmva mixjkvgne edkn iykzhexpn
Nome : hornymatches E-Mail : stranger12356@gmail.com
Nise site!
Nome : hornymatches E-Mail : stranger12356@gmail.com
Nise site!
Nome : rafael E-Mail : erica_pryncesa@hotmai.com
Eu gostaria de saber como faço para criar um site de noticias sem que precise
jamar um tencnico na área para poder mostrar as porcarias que o prefeito de nossa
cidade esta fazendo de errado.
Nome : RfCiqutuVzQ E-Mail : nz1f42x0gc8@yahoo.com
If you dont mind, where do you host your web site? I am hunting for a good host and your web site appears to be extlmeery fast and up all the time

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Conheça mais sobre o nosso site :

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::



Quer saber mais?
Faça um curso na Búfalo Informática, Treinamento e Consultoria e
Prepare-se para o Mercado!
Veja o que a Búfalo tem para você.

ļæ½ BĆŗfalo InformĆ”tica, Treinamento e Consultoria - Rua Ɓlvaro Alvim, 37 Sala 920 - CinelĆ¢ndia - Rio de Janeiro / RJ
Tel.: (21)2262-1368 (21) 9240-5134 (21) 9240-7281 e-Mail:
contato@bufaloinfo.com.br