Desenvolvimento - ASP. NET
Consumindo RSS no ASP.NET
O RSS nada mais é do que um formato padronizado de XML utilizado para disponibilizar informações específicas na internet. Veja neste artigo como fazer seu consumo em uma página ASP.NET.
por Rodrigo PiresUm RSS Feed é um documento XML disponibilizado e atualizado regularmente por algum site, oferecendo conteúdo dinâmico que pode ser consumido por aplicações cliente.
Este documento oferece metadados sobre uma fonte de conteúdo (notícias, artigos, eventos, posts em blogs etc). O site msdn.com é um bom exemplo, disponibilizando uma série de feeds para serem consumidos: http://msdn.microsoft.com/aboutmsdn/rss/.
Obs: experimente com o RSS do Linha de Código também.
Um RSS Feed (documento XML) é formado por um channel, que é a fonte do conteúdo, e contém um title e description, que descrevem a fonte do conteúdo. Além disso, contém um ou mais elementos item, representando cada item do conteúdo (cada notícia, por exemplo). Cada item, por sua vez, pode ter um title, link e description.
(Dica: Leia mais sobre o que é o RSS neste link: http://www.xml.com/pub/a/2002/12/18/dive-into-xml.html)
Dessa forma, os RSS Feeds terão geralmente a seguinte estrutura:
<rss version="2.0"> <channel> <title>RSS Feeds - by Codificando.net</title> <link>http://www.codificando.net</link> <description>by Rodrigo Pires</description> <image> <url> http://www.codificando.net/images/Topo_01.jpg</url> <title>Codificando.NET</title> <link>http://www.codificando.net</link> </image> <item> <title>Artigo sobre Consumação de RSS</title> <link>http://www.codificando.net</link> <description>Este artigo demonstra como consumir um RSS Feed (XML) através do ASP.NET.</description> <pubDate>Wed, 23 Mar 2005 16:38:55 GMT</pubDate> </item> <item> <title>Segundo artigo</title> <link>http://www.codificando.net</link> <description>Descrição do Segundo artigo.</description> <pubDate> Wed, 27 Mar 2005 14:32:22 GMT </pubDate> </item> </channel> </rss>
Vamos agora colocar a mão na massa e criar uma aplicação ASP.NET que irá ler um RSS Feed disponibilizado na internet.
1) Criando o projeto
Crie um novo Projeto no VS.NET (File > New > Project). Escolha "Visual Basic Projects", template "ASP.NET Web Application" (figura 1). Informe um nome para o projeto (neste caso, utilizei Rss).
Figura 1: Criando o projeto no Visual Studio .Net.
2) Criando e configurando o DataGrid
Abra o webform gerado automaticamente (WebForm1.aspx). No modo Designer, abra a ToolBox (Ctrl+Alt+X) e arraste o objeto DataGrid. Nomeie o DataGrid como grd_aspnet. Defina a propriedade AutoGenerateColumns como False, e aplique o tipo de fonte que desejar.
Configure então as colunas do grid (clique com botão direito no grid > Property Builder).
No lado esquerdo da janela "Properties" do grid, clique na seção "Columns".
Na lista "Available Columns", selecione a "Hyperlink Column", e clique no botão para adicionar (">"), para que a coluna seja adiciona ao grid, aparecendo assim na lista "Selected columns", à direita. Configure então as seguintes propriedades da coluna:
Header text: Title (ou um título qualquer para a coluna)
Text field: title (esse é o nó xml que contém o título do artigo/notícia)
URL field: link (este é o nó xml que contém o link para o artigo/notícia)
Target: _blank (forçará o link a abrir em uma nova janela).
As configurações devem ficar como na figura 2:
Figura 2: Configurando as colunas do DataGrid. Neste caso, apenas uma coluna do tipo Hyperlink Column é adicionada ao grid.
Aplique o estilo visual que desejar ao grid (clique com botão direito no grid > Auto Format). A página deve estar agora semelhante à figura 3:
Figura 3: Aparência da página.
3) Acessando o RSS
Terminada a montagem do layout, iremos agora codificar o acesso ao XML desejado (disponibilizado na internet) e carrega-lo em um DataSet, para assim podermos preencher o DataGrid.
No nosso exemplo, utilizaremos o RSS para listar artigos e "headlines" sobre ASP.NET, disponibilizado direto na fonte, pelo MSDN.com. O link para o RSS é http://msdn.microsoft.com/asp.net/rss.xml.
(Obs.: Obviamente você poderá utilizar qualquer RSS Feed disponibilizado na internet).
Ainda no arquivo WebForm1.aspx, vá para o código (F7).
Defina o seguinte código no método Page_Load:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If Not Page.IsPostBack Then Try "-- Carrega o XML diretamente no DataSet Dim ds as DataSet = New DataSet ds.ReadXml("http://msdn.microsoft.com/asp.net/rss.xml") Me.grd_aspnet.DataSource = ds.Tables(2).DefaultView Me.grd_aspnet.DataBind() Catch ex As Exception Response.Write("Erro: " & ex.Message) End Try End If End Sub
Note que o método ReadXml() do DataSet irá gerar um Schema com 3 DataTables (conforme a estrutura do XML): RSS, Channnel e Item. Como precisamos carregar a tabela Item, que é a que contém a listagem dos dados, é utilizado o índice 2 no range de Tabelas ao definir o DataSource do grid.
No Solution Explorer, clique com o botão direito no arquivo WebForm1.aspx e depois em "View in Browser". O resultado deverá ser como o da figura 4:
Figura 4: Conteúdo do XML (RSS Feed) sendo exibido no DataGrid, com link para abrir cada artigo.
Porém, na primeira vez em que fiz esse teste, obtive o seguinte erro:
Erro: The underlying connection was closed: Unable to connect to the remote server.
Este erro ocorre porque, no caso da máquina onde a aplicação rodava (minha máquina de desenvolvimento) o acesso à Internet é feito através de um servidor Proxy na rede. Veremos a seguir como contornar essa situação.
4) Acessando o RSS através do Proxy
Quando o acesso à internet na máquina onde a aplicação roda é feito através de um Proxy, devemos fazer uma pequena modificação em nosso código, criando um objeto WebRequest, juntamente com um objeto WebProxy (namespace System.Net), para que possamos definir as credenciais (usuário/senha/domínio) a serem utilizadas no Proxy para esse acesso.
Além disso, podem ocorrer problemas ao tentar criar o objeto WebProxy informando um usuário que tem restrições no Proxy (restrições de acesso a determinados sites, por exemplo):
Erro: (407) Proxy Authentication Required.
O ideal é tentar utilizar um usuário com o mínimo de restrições, ou até mesmo com privilégios de administrador.
Modifique o código para que fique da seguinte forma:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If Not Page.IsPostBack Then Try Dim sIpProxy As String sIpProxy = "http://ip_do_seu_proxy:porta" "-- Carrega o XML no DataSet, através de Stream Dim ds as DataSet = New DataSet ds.ReadXml(ObtemStreamParaURI("http://msdn.microsoft.com/asp.net/rss.xml", sIpProxy)) Me.grd_aspnet.DataSource = ds.Tables(2).DefaultView Me.grd_aspnet.DataBind() Catch ex As Exception Response.Write("Erro: " & ex.Message) End Try End If End Sub Public Shared Function ObtemStreamParaURI(ByVal pa_uri As String, ByVal pa_proxyuri As String) As System.IO.Stream "-- Cria o objeto Request Dim oReq As System.Net.WebRequest oReq = System.Net.WebRequest.Create(pa_uri) "-- Cria o objeto Proxy Dim oProxy As New System.Net.WebProxy(pa_proxyuri, True) "passa pelo proxy "-- Cria as credenciais para utilizar no Proxy oProxy.Credentials = New System.Net.NetworkCredential("user", "password", "dominio") oReq.Proxy = oProxy "-- Retorna o Stream do Response Return oReq.GetResponse().GetResponseStream() End Function
Teste novamente a página. O resultado deve ser o grid listando os artigos fornecidos no XML (conforme mostrado na figura 4).
Espero que este artigo o ajude de alguma forma. Se tiver alguma dúvida, entre em contato! ;-)