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
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:
O RSS é apenas
um arquivo XML com tags definidas que pode ser lido de forma a compartilhar
informação.
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) )
Na versão anterior da ADO.NET , os objetos DataTable eram originalmente membros dos objetos DataSets. Com o advento da ADO.NET 2.0 isso mudou. 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 String Dim dr As OleDbDataReaderDim dt As New DataTable Dim comando As OleDbCommand Dim sql As String Dim 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 If End 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 If End 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 Sub Private Sub linkChannel_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles linkChannel.LinkClickedSystem.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 Twitter
Referências: