 VB. 
NET 
-  Criando um visualizador para RSS
VB. 
NET 
-  Criando um visualizador para RSS
Em meu artigo - VB.NET - Gerando RSS para compartilhar informações criamos um gerador de RSS que você podia usar ou adaptar para gerar conteúdo RSS. Se você pretende apenas obter o conteúdo RSS existente na web a partir de um feed RSS pode obter diversos programas que atuam como leitores RSS.
Este artigo mostrar como criar o seu próprio visualizador de conteúdo RSS usando o Visual Basic 2005 Express Edition, acompanhando o artigo você aprenderá a usar alguns recursos do VB 2005 e ter um leitor de feeds RSS que você mesmo construiu.
 Veja também o artigo
: ASP.NET  2.0 - Criando um leitor para 
conteúdo RSS
 Veja também o artigo
: ASP.NET  2.0 - Criando um leitor para 
conteúdo RSS
Criando um visualizador RSS
A interface de nossa aplicação VB terá o seguinte leiaute:
|  | 
Para chegar ao leiaute acima primeiro incluímos no formulário um Panel e um SplitContainer (fig 2.0) para em seguida preencher cada Panel do formulário com os controles apropriados. Assim em Panel1 incluimos um ListBox e em Panel2 incluímos um controle WebBrowser e um controle Panel com um controle LinkLabel.( fig 3.0)
|  |  | 
| Fig 2.0 - A divisão do formulário em 3 áreas | Fig 3.0 - O preenchimento de cada área com os controles próprios | 
Vamos usar duas classes : RSSChannel.vb e RSSItem.vb para tratar as informações RSS visto o arquivo padrão RSS possui a estrutura : rss/channel/item , conforme abaixo:
| 
 
 Dando uma olhada nas tags principais temos: 
 | 
Quando você executa o projeto , tudo começa no evento Load do formulário que chama a rotina preenchecombo() para preencher o controle ComboBox com os dados da tabela feeds do banco de dados rss.mdb. A combobox irá exibir o valor do campo link definido na propriedade DisplayMember.
| Private Sub 
    RSSVisualizador_Load(ByVal sender
    As Object,
    ByVal e As System.EventArgs)
    Handles Me.Load 
 cboCanal.DisplayMember = "link" cboCanal.ValueMember = "link" 
 lblDescricao.Text = "" linkChannel.Text = "" linkChannel.Links.Add(0, 1, "") linkItemURL.Text = "" linkItemURL.Links.Add(0, 1, "") 
 
 End Sub | 
A rotina preenchecombo() usa um objeto DataReader para acessar a tabela feeds e retorna um objeto DataTable. Observe que usei o método Load do DataTable para carregar a tabela a partir do DataReader. (dt.Load(dr) )
| 
 A nova versão permite que você crie objetos DataTable mais 'leves' que compartilham muitos métodos antes somente existentes no DataSet. Agora os objetos Datatable suportam os métodos : ReadXml, ReadXmlSchema, WriteXml e WriteXmlSchema , Load(DataReader) e o objeto DataTableReader. | 
Você pode também atribuir um namespace e um prefixo namespace ao DataTable.
| 
	Private Function preenchecombo() Dim strConn As StringDim dr As OleDbDataReader Dim dt As New DataTable Dim comando As OleDbCommand Dim sql As StringDim conexao As OleDbConnection 
	 strConn &= "Data Source = c:\teste\rss.mdb" sql = "SELECT * FROM feeds" 
	 
     conexao.Open() comando = New OleDbCommand(sql, conexao) dr = comando.ExecuteReader(CommandBehavior.CloseConnection) dt.Load(dr) Catch MsgBox("Erro de acesso aos dados.") End Try Return dt End Function | 
Nota: Não esqueça de declarar os namespaces para acesso aos dados no projeto :
Imports 
System.Data.oledb
Imports System.data
Após retornar o DataTable que será usado para preencher a combobox, ao final da rotina é feita a chamada para a rotina RefreshChannel(). O código da mesma é o seguinte:
| 
	Private Sub RefreshChannel() If cboCanal.Text <> "" Then Dim channel As New RSSChannel(cboCanal.Text) 
 lblTitulo.Text = channel.Title lblDescricao.Text = channel.Description linkChannel.Text = channel.Link linkChannel.Links(0).Start = 0 linkChannel.Links(0).Length = channel.Link.Length linkChannel.Links(0).LinkData = channel.Link 
	 lbItems.DisplayMember = "Title" lbItems.ValueMember = "link" lbItems.DataSource = feedItems End IfEnd Sub | 
Nesta rotina criamos uma instância da classe RSSChannel() passando como parâmetro o link do feed RSS. A classe RSSChannel define as seguintes propriedades e métodos:
Propriedades:
Private m_FeedURL As String Private m_Title As String Private m_Link As String Private m_Description As StringMétodos:
1 - GetXMLDoc - Responsável por obter os dados RSS via requisição web.
| Private Function GetXMLDoc(ByVal node As String) As XmlNodeList 
	 Dim response As WebResponse = request.GetResponse() Dim rssStream As Stream = response.GetResponseStream() Dim rssDoc As XmlDocument = New XmlDocument() 
     
     Return tempNodeList 
	 | 
Este método usa a classe WebRequest definido no namespace System.Net para criar o objeto request através do método Create para acessar dados via requisição web. (Esta classe é uma classe abstrata e não pode ser usada diretamente)
Para obter a resposta do servidor estamos usando o método GetResponse() do objeto WebRequest.
Para obter um stream dos dados usamos o método GetResponseStream() do objeto WebResponse.
Em seguida via método Load carregamos os dados no formato XML: rssDoc.Load(rssStream)
2- GetChannelInfo - Obtém informação do canal chamando através da chamada da função : GetXMLDoc("rss/channel")
3- GetChannelItems() - Obtém a informação do itens chamando a função : GetXMLDoc("rss/channel/item")
Sempre que o usuário clicar em um item exibido no controle ListBox(lbltems), que representa os dados já carregados, as informações no controle WebBrowser será atualizados graças ao evento SelectedIndexChanged que possui o seguinte código:
| Private Sub
	lbItems_SelectedIndexChanged(ByVal sender
    As System.Object, ByVal 
    e As System.EventArgs) Handles lbItems.SelectedIndexChanged 
	 currentItem = feedItems(lbItems.SelectedIndex) WebBrowser1.DocumentText = currentItem.Description linkItemURL.Text = currentItem.Link linkItemURL.Links(0).Start = 0 linkItemURL.Links(0).Length = currentItem.Link.Length 
	    
    linkItemURL.Links(0).LinkData = currentItem.Link End IfEnd Sub | 
Para atualizar os dados o usuário deve selecionar um novo item no ComboBox(CboCanal) e clicar no botão Atualizar o para refazer o processo através da chamada da função RefresChannel():
| Private Sub btnRefresh_Click(ByVal 
    sender As System.Object, 
    ByVal e As System.EventArgs)
    Handles btnRefresh.Click RefreshChannel() End Sub | 
No evento Click dos controles LinkLabels estamos efetuando a chamada ao link selecionado usando o seguinte código:
| Private Sub linkItemURL_LinkClicked(ByVal 
    sender As System.Object, 
    ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs)
    Handles linkItemURL.LinkClicked System.Diagnostics.Process.Start(linkItemURL.Links(0).LinkData) End SubPrivate Sub linkChannel_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles linkChannel.LinkClicked System.Diagnostics.Process.Start(linkChannel.Links(0).LinkData) End Sub | 
O resto é só alegria.

Executando o projeto teremos o seguinte resultado:
|  | 
pegue o projeto completo aqui : visualizaRSS.zip
Acompanhando este projeto você aprendeu alguns conceitos novos usados na versão 2.0 da plataforma .NET como a facilidade de acessar dados da internet com o controle WebBrowser e as classes WebRequest e WebResponse os novos recursos do DataTable como o método Load e aprendeu a usar classes para tratar informação.
Eu sei é apenas VB.NET, mas eu 
gosto... 
E estamos conversados...
Gostou ?   Compartilhe no Facebook
Compartilhe no Facebook
  
 Compartilhe no Twitter
 
Compartilhe no Twitter 
Referências: