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:
|
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 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: