Introducción
Cada vez más sitios están ofreciendo la posibilidad de conocer sus actualizaciones a través de lectores RSS. Puede ser interesante hacer que nuestra página funcione como un pequeño lector de RSS, tal como hace Google en su página personalizada:
En este tutorial vamos a ver una forma rápida de hacer que una JSP se convierta en un mini-lector de RSS, empleando el producto RssUtils, desarrollado por Rodrigo Oliveira.
Preparación del entorno
Para la realización del tutorial, he empleado Eclipse 3.2 Callisto, un servidor Tomcat 5.5 y Java 1.5.
Una vez que lo tenemos todo instalado y correctamente configurado, se crea un nuevo proyecto web en Eclipse:
Seleccionamos el tipo de proyecto «Web»->»Dynamic Web Project»
Y finalmente le asignamos un nombre
Pinchamos en Finalizar y ya tenemos el proyecto listo
Ahora hay que importar el producto RssUtils, que hemos descargado previamente. Al descargarlo, se obtiene un Zip que hay que descomprimir, y obtenemos los siguientes ficheros:
- berkeley_license.txt:
- Este fichero contiene la licencia de uso del producto, así que es conveniente leerlo.
- rss_utils.jar:
- En este Jar se encuentran la implementación de la taglib
- rss_utils.tld:
- Fichero de configuración de la taglib
Una vez que tenemos todos los ficheros, hay que incluirlos en el proyecto. Para ello, creamos una carpeta llamada «tld» en la carpeta de nuestro proyecto «Web Content/WEB-INF»
y se copia en ella el fichero «rss_utils.tld». En la carpeta «WebContent/WEB-INF/lib» se copia el fichero «rss_utils.jar». El proyecto automáticamente incluye el jar entre las librerías de la aplicación, así que sólo nos queda configurar el proyecto para incluir en él el fichero tld.
Para ello, se abre el fichero «web.xml», que se encuentra dentro de la carpeta «WEB-INF». En ese fichero hay que buscar una sección <jsp-config>…</jsp-config> (o crearla si no existe) , y dentro de ella añadir una taglib, de la siguiente manera:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name> AutentiaRssUtils</display-name> <welcome-file-list> <welcome-file>autentiaRssUtils.jsp</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <jsp-config> <taglib> <taglib-uri>/tagsAutentia/rssutils</taglib-uri> <taglib-location>/WEB-INF/tld/rssutils.tld</taglib-location> </taglib> </jsp-config> </web-app> |
En morado aparecen las líneas que es necesario añadir para incluir la taglib en el proyecto. Como se puede ver, la declaración del taglib consta de dos elementos:
- taglib-uri: Es un identificador que se empleará en la JSP para referirse a la taglib indicada. En este caso concreto hemos elegido «/tagsAutentia/rssutils»
- taglib-location: Es la ruta al fichero tld que hemos copiado anteriormente al proyecto. en nuestro caso concreto «/WEB-INF/tld/rssutils.tld»
En rojo, podemos ver que se ha añadido una entrada a la lista de ficheros <welcome-file-list>. Esta lista de ficheros sirve para que el servidor sepa que fichero debe mostrar en el caso de que sólo se invoque a la aplicación a través de su nombre. Más adelante se mostrará para que sirve este cambio
Una vez hecho esto, tenemos nuestro proyecto listo para empezar a trabajar.
Una breve reseña sobre el formato RSS
Los ficheros RSS son ficheros XML que siguen un formato específico. Están divididos en dos partes: La información del canal, es decir, del sitio al que el usuario se subscribe; y la información de los elementos (noticias nuevas publicadas en el sitio). Para más información sobre RSS, podéis consultar la página de RSS Advisory Board con la especificación de RSS 2.0
Empleo de las etiquetas de RssUtils
Lo primero que vamos a hacer es crear una JSP, de nombre en la que hacer nuestras pruebas, y que situaremos en la carpeta WebContent:
Como se ve, el nombre del fichero es el mismo que el que se ha configurado en el welcome-file-list. Lo que hemos logrado con esto es que, al llamar a través del navegador Web a nuestra aplicación (http://localhost:8080/AutentiaRssUtils en nuestro caso), el servidor de aplicaciones invoque directamente a nuestra JSP, sin que el usuario tenga necesidad de conocer su nombre. Hemos puesto el fichero en primera posición de la lista porque el servidor, en este caso Tomcat, comienza a buscar ficheros desde el comienzo de la lista, y devuelve el primero que encuentre. Una vez aclarado este punto, seguimos adelante…
El código de la JSP tendrá más o menos este aspecto:
1 2 3 4 5 6 7 8 9 10 |
<%@page contentType="text/html" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/> <title>AutentiaRssUtils</title> </head> <body> </body> </html> |
Sobre esa plantilla de JSP, vamos a empezar a poner código hasta acabar el tutorial. Lo primero es importar la taglib :
1 2 3 4 5 6 7 8 9 10 11 12 |
<%@page contentType="text/html" %> <%@ taglib uri="/tagsAutentia/rssutils" prefix="rss" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/> <title>AutentiaRssUtils</title> </head> <body> </body> </html> |
Donde «uri» es el taglib-uri que especificamos en el fichero web.xml y «prefix» es el prefijo que emplearemos para decir que una etiqueta pertenece a esta taglib.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<%@page contentType="text/html" %> <%@ taglib uri="/tagsAutentia/rssutils" prefix="rss" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/> <title>AutentiaRssUtils</title> <rss:feed url="http://www.adictosaltrabajo.com/rss/rss.php" feedId="autentia" /> </head> <body> </body> </html> |
Acabamos de añadir la primera etiqueta. En ella se especifica la URL de la fuente RSS que vamos a tratar, y un nombre (el feedId) que usaremos de aquí en adelante para referirnos a la fuente en el resto de tags. En el caso de que nuestro servidor deba acceder a Internet a través de un proxy, podemos hacerlo especificando otros dos atributos, de forma que la etiqueta quedaría así:
<rss:feed url=»MiFeedURL» feedId=»MiFeedId « proxyAddress=»MiProxyAddress» proxyPort=»MiProxyPort»/>
Ya estamos preparados para empezar a manejar la fuente RSS. Primero, vamos a sacar el título del canal al que nos hemos subscrito:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<%@page contentType="text/html" %> <%@ taglib uri="/tagsAutentia/rssutils" prefix="rss" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/> <title>AutentiaRssUtils</title> <rss:feed url="http://www.adictosaltrabajo.com/rss/rss.php" feedId="autentia" /> <rss:channelTitle feedId="autentia"/> </head> <body> </body> </html> |
Y ahora vamos a sacar la información de cada elemento enviado en el fichero de RSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<%@page contentType="text/html" %> <%@ taglib uri="/tagsAutentia/rssutils" prefix="rss" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/> <title>AutentiaRssUtils</title> <rss:feed url="http://www.adictosaltrabajo.com/rss/rss.php" feedId="autentia" /> <rss:channelTitle feedId="autentia"/> <rss:forEachItem feedId="autentia"> <li><a href="http://www.adictosaltrabajo.com/tutoriales/rss-utils/">"><rss:itemTitle feedId="autentia" /></a> <rss:itemDescription feedId="autentia"/> </li> </rss:forEachItem> </head> <body> </body> </html> |
La etiqueta <rss:forEachItem> itera sobre todos los elementos del fichero RSS. Las etiquetas <rss:itemXXXX> extraen información del item. Como se puede observar, se ha mezclado código HTML con las etiquetas de la taglib, con lo que se consigue un mejor efecto. Vamos a ver como va nuestra página, poniendo en el navegador la dirección de la aplicación. En nuestro caso, esta dirección es http://localhost:8080/AutentiaRssUtils. Como se ve debajo, ya tenemos una lista de enlaces a los tutoriales más recientes de AdictosAlTrabajo:
![]() |
También podemos decir que nos muestre sólo un determinado número de elementos, aplicando atributos a <rss:forEachItem>:
- El atributo startIndex señala el primer elemento que se desea mostrar (empezando a contar desde 0)
- El atributo endIndex señala el último elemento que se desea mostrar.
Estos atributos pueden emplearse juntos o por separado.
Ya sabemos lo básico para poder emplear este juego de etiquetas. Ahora os presento la lista de etiquetas disponibles. En las etiquetas que no se expliquen por sí mismas, entre paréntesis se incluye una explicación de su función. Además, se indica si la información que recoge cada etiqueta es obligatoria o puede no venir.
channelCopyright – Opcional | channelDescription – Obligatorio | channelDocs (Enlace a documentación sobre RSS) – Opcional |
channelGenerator (Programa con el que se generó el fichero RSS) | channelImage – Opcional | channelLanguage – Opcional |
channelLastBuildDate (fecha del último cambio en la fuente) – Opcional | channelLink – Obligatorio | channelManagerEditor (Dirección email del responsable de la fuente) – Opcional |
channelPubDate (fecha de publicación del contenido del canal) – Opcional | channelSkipDays (Información sobre los días que se puede evitar buscar actualización del canal) – Opcional | channelSkipHours (Lo mismo que SkipDays, pero con horas) – Opcional |
channelTextInput (indica si debe mostrar una caja de texto, y los datos del programa que gestione la información que en ella se escriba, pero es muy infrecuente) – Opcional | channelTitle – Obligatorio | channelTTL (Tiempo en minutos que puede cachearse la fuente RSS antes de buscar una actualización) – Opcional |
itemDescription – Obligatorio | itemLink – Obligatorio | itemTitle – Obligatorio |
Dando forma a la página
Ahora que ya conocéis lo necesario sobre RssUtils, podéis jugar con las etiquetas y con las hojas de estilos para hacer algo más presentable. Por ejemplo, podemos usar esta JSP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
<%@page contentType="text/html" %> <%@ taglib uri="/tagsAutentia/rssutils" prefix="rss" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/> <title>AutentiaRssUtils</title> <style type="text/css"> #tutorialesAdictos { width:44%; border: 1.5px solid #BBBBFF; font-size: 11px; font-family: Verdana, Arial; margin: 1% ; background-color: #F7F7FF; } #tutorialesAdictos .cabecera img {width:100% ;} #tutorialesAdictos .listaItems { padding: 1%; } #tutorialesAdictos .listaItems a { color: #CC3300; } #tutorialesAdictos .listaItems a:visited { color: #33AA33; } #tutorialesAdictos .listaItems .item { display:block; } #tutorialesAdictos .listaItems .item .titulo { display:block; } </style> </head> <body> <div id="tutorialesAdictos"> <rss:feed url="http://www.adictosaltrabajo.com/rss/rss.php" feedId="autentia" /> <a href="http://www.adictosaltrabajo.com/tutoriales/rss-utils/">" title="<rss:channelTitle feedId="autentia"/>" class="cabecera"><rss:channelImage feedId="autentia"/></a> <div class="listaItems"> <rss:forEachItem feedId="autentia" startIndex="0" endIndex="5"> <div class="item"> <a href="http://www.adictosaltrabajo.com/tutoriales/rss-utils/">" class="titulo"><rss:itemTitle feedId="autentia" /></a> <rss:itemDescription feedId="autentia"/> </div> </rss:forEachItem> </div> </div> </body> </html> |
Para obtener el siguiente resultado
Conclusión
Como veis, hacer un lector de fuentes RSS online no es particularmente complicado, si se conocen las herramientas adecuadas. Nosotros, los miembros de Autentia, intentamos acercaros ese conocimiento a través de nuestros tutoriales. Pero si la solución a vuestros problemas no se encuentra en Adictos Al Trabajo, ya sabéis que podéis poneros en contacto con nosotros para que os asesoremos y formemos.
Excelente aporte me ha sido muy util, Gracias.