Creación de un Lector de RSS en .Net
1º Introducción RSS y su extensabilidad
2º WebRequest
3º WebResponse
4º Propiedades Proxy del objeto WebRequest
5º Código
6º Bibliografía
1º Introducción a RSS y su extensabilidad
RSS es parte de la familia de los formatos XML desarrollado específicamente para todo tipo de sitios que se actualicen con frecuencia y por medio del cual se puede compartir la información y usarla en otros sitios web o programas. A esto se le conoce como sindicación.
El acrónimo se usa para los siguientes estándares:
• Rich Site Summary (RSS 0.91)
• RDF Site Summary (RSS 0.9 and 1.0)
• Really Simple Syndication (RSS 2.0)
Los programas que leen y presentan fuentes RSS de diferentes procedencias se denominan agregadores.
Gracias a los agregadores o lectores de feeds (programas o sitios que permiten leer fuentes RSS) se puede obtener resúmenes de todos los sitios que se desee desde el escritorio de tu sistema operativo, programas de correo electrónico o por medio de aplicaciones web que funcionan como agregadores. No es necesario abrir el navegador y visitar decenas de webs.
Pero lo verdaderamente importante es que a partir de este formato se está desarrollando una cadena de valor nueva en el sector de los contenidos que está cambiando las formas de relación con la información tanto de los profesionales y empresas del sector como de los usuarios.
Así pues, atendiendo a esto ahora mismo podrías leer las noticias de MV en tu nevera si esta tuviera conexión a Internet (cosa que empezará a ser habitual en los tiempos que corren), y el lector que crearemos más adelante incorporado.
2º Web Request
Realiza una solicitud a un identificador de recursos uniforme (URI). Esto es una clase abstracta MustInherit en Visual Basic. Esto quiere decir que WebRequest es la clase base del modelo de solicitud/respuesta .NET Framework para tener acceso a datos desde Internet. Una aplicación que utilice el modelo de solicitud/respuesta puede solicitar datos de Internet de una manera que sea válida para los protocolos, donde la aplicación trabaja con instancias de la clase WebRequest mientras que las clases descendientes específicas del protocolo se encargan de los detalles de la solicitud.
Las solicitudes se envían desde una aplicación a un identificador URI concreto, como una página Web de un servidor. El identificador URI determina la clase descendiente adecuada que se debe crear a partir de una lista de descendientes de WebRequest registrados para la aplicación. Los descendientes de WebRequest suelen registrarse para controlar un protocolo específico, como HTTP o FTP, pero se pueden registrar para controlar una solicitud a un servidor específico o una ruta de acceso en éste.
3º WebResponse
La clase WebResponse es la clase base (MustInherit en Visual Basic) a partir de la cual se derivan las clases de respuesta específicas del protocolo. Las aplicaciones pueden participar en transacciones de solicitud y respuesta de un modo que sea válido para protocolos utilizando instancias de la clase WebResponse mientras las clases específicas del protocolo derivadas de WebResponse se encargan de los detalles de la solicitud.
Es importante destacar que las aplicaciones cliente no crean objetos WebResponse directamente, sino mediante una llamada al método GetResponse en una instancia de WebRequest.
4º Propiedades Proxy del objeto WebRequest
Según realizaba la aplicación, me ví con un problema, y es que inexplicablemente no conseguía acceder al archivo XML remoto. Bien, tras darle unas cuantas vueltas me percaté de que estaba bajo un proxy de filtrado de usuarios de dominio. Esto es, que para salir a internet antes pasas por un proxy que comprueba los datos de la conexión saliente, y si la autentificación es válida, permite la salida de la conexión.
Por lo tanto primer requisito, tener acceso a internet. Lo curioso de este sistema es que tu, estando autentificado en tu máquina a la vez q en un posible dominio, cuando te conectas a internet la autentificación que haces al proxy es automática, mientras que para poder acceder desde esta aplicación tendrás que mandarle las credenciales para esa autentificación manualmente.
Y esto como se hace te preguntarás, pues basta con echarle un vistazo a las propiedades del objeto WebRequest que usamos para hacer la petición remota, entre ellas encontramos la propiedad Proxy, que será la que usaremos para decirle a nuestro amado Proxy quienes somos. Para ello escribiremos:
Dim req As WebRequest = WebRequest.Create("dirección del xml")
req.Proxy = New WebProxy("dirección del proxy:8080")
req.Proxy.Credentials = New NetworkCredential("usuario", "password")
Como podemos ver, nos creamos una instancia del objeto WebRequest pasándole la dirección remota en la que se encontrará la ubicación del .XML, y después a la propiedad Proxy de dicha instancia le pasaremos la dirección del Proxy y las Credenciales de red, es decir el usuario y el password que debe tener permiso de salida.
Por supuesto si no estuviéramos bajo ningún Proxy este código no tendríamos pq emplearlo :-P
5º Código
Imports System.Xml
Imports System.Xml.Xsl
Imports System.Net
Imports System.IO
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load
Dim midataset As New Data.DataSet
Dim req As WebRequest = WebRequest.Create("dirección RSS remota")
'En el caso de que tengamos proxy
'********************************
'req.Proxy = New WebProxy("dirección del proxy:8080")
'req.Proxy.Credentials = New NetworkCredential("user", "pass")
'********************************
Dim miResponse As WebResponse = req.GetResponse()
midataset.ReadXml(miResponse.GetResponseStream)
miResponse.Close()
Dim memStream As Stream = New MemoryStream()
Dim xmlDocument As XmlDataDocument = New XmlDataDocument(midataset)
Dim xslTran As XslCompiledTransform = New XslCompiledTransform
xslTran.Load(Server.MapPath("PlantillaXML.xsl"))
Dim writer As XmlTextWriter = New XmlTextWriter(memStream, System.Text.Encoding.UTF8)
xslTran.Transform(xmlDocument, Nothing, writer)
memStream.Position = 0
Dim sr As StreamReader = New StreamReader(memStream)
Dim line As String
Do
line = sr.ReadLine()
'Visualizamos el resultado en una simple label..
Label1.Text += " " + line
Loop Until line Is Nothing
sr.Close()
writer.Close()
End Sub
End Class
PlantillaXML.xsl:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rss="http://purl.org/rss/1.0/">
<xsl: output method="html"/>
<xsl:template match="channel">
<html>
<xsl:for-each select="item">
<table>
<tr>
<td>
</td>
<td>
<a href="{link}" target="Blank">
<xsl:value-of select="title"/>
</a>
</td>
</tr>
</table>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
6º Bibliografía
Para realizar este manual, he tomado “prestados” aquellos conceptos, nociones e indicaciones de varios lugares:
<http://msdn.microsoft.com/>
<http://support.microsoft.com/>
<http://es.wikipedia.org/wiki/Portada>
<http://www.w3.org/TR/xslt>
By: IS4KO
Contact: [email protected]