![]() |
||||||||
|
|
||||||||
|
| ||||||||


| com exemplos em VB |
| Componente para deixar forms em Vb semelhantes às telas do winnamp |
| Componente para colocar sua aplicação VB no Systray |
| Componente para transformar sua aplicação VB em serviço |
| Ferramentas úteis para quem usa Olap Server |
| |

|
||||||||||||||||||||||||||||||||||||||||||||||||||||
Pesquisa personalizada
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 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 :
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 :
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 :
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
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Veja abaixo os comentários já enviados :
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 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