¿El BOE por RSS? (2ª parte)

En la entrada anterior observamos que RSSxl, como scraper, es un tanto limitado. Existen opciones mucho más avanzadas (y complejas), pero requieren disponer de acceso a un servidor, con lo que perdemos la ventaja fundamental de RSSxl: es online y no requiere configuración ni conocimientos especiales.

Pero introduzcamos una nueva herramienta, también online: Pipes, de Yahoo. En resumen, Pipes es un remezclador de fuentes RSS, aunque se le adivina mucho potencial. Verdad es que nada de lo que, hoy por hoy, se puede hacer con Pipes es imposible de otra forma; lo que consigue es una bajada espectacular de la barrera de entrada. Dicho de otro modo, con Pipes manipular fuentes RSS queda al alcance de cualquiera con curiosidad y dos dedos y medio de frente. Justo lo que necesitaba.

Aquí hay una explicación más detallada, y un ejemplo, cortesía de Microsiervos. Y ahora vamos con la receta.

Pipes va de unir módulos que hacen cosas con tubos (¿no era obvio?). Es un poco de filosofía Unix aplicada a la Web 2.0. Necesitaremos:

  • Dos módulos URLBuilder.
  • Un módulo Fetch.
  • Un módulo Regex.
  • El Pipe Output, que ya sale por defecto (representa el resultado final).

Ponemos en juego el primer URLBuilder. En su campo base, pegamos la URL de búsqueda que habíamos obtenido en el BOE usando la página de búsqueda avanzada (ésta). Inmediatamente, los diferentes componentes de la query aparecen desglosados en Query elements dentro del módulo, y separando nombres de valores. Reservamos.

Añadimos ahora el segundo URLBuilder. En su campo base, pegamos la URL que obtuvimos en el episodio anterior pulsando Generate RSS en RSSxl. Obtenemos el mismo resultado que en el caso anterior: los componentes de la parte de query se separan automáticamente. Nos interesa el parámetro pageurl, y el circulito que se ve a la derecha de su valor.

Las flechas rojas indican los extremos de la conexión que hay que hacer. El parámetro pageurl tendrá que tener como valor [url], es decir, la dirección completa que sale del primer URLBuilder.

Ahora insertamos el módulo Fetch, y lo conectamos con la salida del segundo URLBuilder. Éste es más fácil, ya que sólo hay una forma de hacer la conexión. Colocamos el módulo Regex y le prestamos un poco de atención.

Con la salida de Fetch ya tenemos la fuente RSS construida como en el episodio anterior. Lo que vamos a hacer con Regex es corregir el problema de los enlaces de los elementos RSS, que vimos que no funcionaban tal y como quedaban generados por RSSxl. Si miramos el elemento <link> de la fuente RSS generada, y lo comparamos con el valor que tendría que tener (el valor del atributo href del enlace “Más…” de los resultados de la búsqueda en el BOE), observamos que podemos obtener el segundo a partir del primero por medio de una expresión regular y una sustitución.

Las expresiones regulares son uno de los instrumentos más poderosos para el tratamiento y transformación de información textual que existen. También son complejas y dolorosas, sobre todo cuando se empieza con ellas. En este caso, usaremos Regex para sustituir en los elementos link de la fuente RSS aquello que encaje con la expresión:

search\.php\?.*(doc\.php.*$)

Por:

$1

Si estás leyendo esto, no lo entiendes y tienes el más mínimo interés en la programación, te recomiendo que aprendas a manejar expresiones regulares. Hasta en los casos sencillos pueden resolver problemas que de otro modo serían difícilmente tratables (y desde luego, de un modo elegante y terso). La expresión que he usado se puede leer como:

Busca el texto “search.php?” seguido de un número indeterminado de caracteres, y terminado con “doc.php” y otra cadena de 0 a n caracteres. Guarda desde “doc.php” hasta el final en un registro numerado, que usaremos en la sustitución como $1.

Terminamos conectando la salida de Regex con Pipe Output. Sólo queda guardar el pipe que hemos creado y publicarlo si queremos. El que hemos creado aquí está disponible como BOEv1, y la fuente RSS que genera es ésta.

¿El BOE por RSS? (1ª parte y media)

Nota a mí mismo: No Reinventar la Rueda.

La tentación de lanzarse sobre el teclado y hacer algo es muy fuerte cuando se tienen claros los objetivos. Sin tener en cuenta lo divertido que puede llegar a ser. El caso es que ya existen fuentes RSS del BOE. Aquí están:

Todo eso está muy bien, pero ¿y lo bien que me lo estoy pasando?

¿El BOE por RSS?

La necesidad es la madre de las soluciones. Una combinación de dos circunstancias,

  1. Dentro de mes y medio, si todo va bien, seré padre por segunda vez.
  2. En breve entrará en vigor la Ley de Igualdad en España (texto completo).

ha provocado que me interese por el BOE. Como sabéis, la ley en cuestión no será efectiva hasta el día siguiente de su publicación en el Boletín. Y con mi inclinación tecnológica, me pregunto: ¿tiene el BOE una fuente RSS? Me interesa conocer cuándo empieza mi derecho a disfrutar de los famosos “15 días de baja paternal” (la historia completa es más compleja, pero eso no es el motivo de este cuento).

Respuesta: claro… que no. El BOE vende un servicio de alertas llamado BOELex, que no tiene un coste muy alto y permite recibir avisos de publicación de leyes en tu correo electrónico. Pero yo no necesito tanto; también tengo algo de hacker (bueno, lo intento), así que la idea del día es:

Crear una fuente RSS sobre una búsqueda del BOE

Si el BOE no publica fuentes RSS, habrá que inventárselas. Para eso, viene al pelo RSSxl, una pasarela HTML/RSS. En beta, como todo, pero mi cerebro está en alpha todavía, así que servirá. Por tanto,

Primero: realizar la búsqueda que queremos en el BOE. Para ello, buscamos el enlace de búsqueda avanzada. Bastará con especificar una palabra en el título, por ejemplo, “igualdad”, y otra en el departamento emisor (en este caso, “jefatura”, por la Jefatura del Estado). Podemos también poner una fecha de publicación; si no, se nos irá hacia atrás hasta el principio de los tiempos, y tal vez antes. Ponemos “01/01/2007” y “31/12/2007” en los campos correspondientes. Pulsamos “Buscar”.

Ahora tenemos la búsqueda en pantalla. No nos van a interesar los elementos gráficos, así que podemos pulsar el enlace “Ir a versión adaptada” que aparece en la esquina superior izquierda de la pantalla (esto es opcional). Veremos que tenemos una URL que tiene, en su query, todos los parámetros de la búsqueda. ¡Puede solicitarse una búsqueda en el BOE mediante un GET de HTTP! Esto facilita las cosas (y yo soy muy vago).

Segundo: en la página de RSSxl, introducir la URL obtenida en Page URL. Como RSSxl es un scraper, necesita cierta información para delimitar el contenido de las entradas RSS que creará. Así que…

Tercero: mirar el código HTML de la página de resultados del BOE. Tras hacer una búsqueda cualquiera, vemos que la parte que nos interesa es:

<div class="BoeSumarioBD">

<a name="contenido"></a>

<h1>B&#xFA;squeda en BOE</h1>
<h5>Resultados 1 a 2 de 2</h5>
<h2>MINISTERIO DE TRABAJO Y ASUNTOS SOCIALES (BOE de 15/03/2007 - Secci&#xF3;n III)</h2>
<h3>Resoluci&#xF3;n de 28 de febrero de 2007, de la Secretar&#xED;a General Técnica, por la que se publica el Convenio de colaboraci&#xF3;n entre el Instituto de la Mujer y el Servicio Gallego de Promoci&#xF3;n de la Igualdad del Hombre y de la Mujer.</h3>

<div class="puntoHTML enlacesDoc"><a href="doc.php?coleccion=indilex&amp;id=2007/05553&txtlen=664">M&#xE1;s...</a></div>

<h2>MINISTERIO DE TRABAJO Y ASUNTOS SOCIALES (BOE de 26/01/2007 - Secci&#xF3;n II)</h2>
<h3>Orden TAS/77/2007, de 17 de enero, por la que se dispone el nombramiento, por el procedimiento de libre designaci&#xF3;n, como Subdirector General para la Prevenci&#xF3;n de Riesgos Laborales y Pol&#xED;ticas de Igualdad, de don Adri&#xE1;n González Martín.</h3>
<div class="puntoHTML enlacesDoc"><a href="doc.php?coleccion=personal&amp;id=2007/01626&txtlen=693">M&#xE1;s...</a></div>

</div>

Vemos que los resultados de búsqueda tienen un título (delimitado por etiquetas <h2>) y un contenido (delimitado por <h3>). Además, hay un enlace. Los caracteres acentuados salen como entidades en hexadecimal, pero consideremos eso un problemilla estético.

Cuarto: rellenar en RSSxl los campos Start Item String con el valor “h2“, y End Item String con “/div” (en general, los valores que introduzcamos aquí no tienen que ser HTML bien formado; ¡pueden ser incluso expresiones regulares!). Así abarcamos una entrada completa.

Quinto: añadamos la información cosmética. Para la descripción de los elementos RSS, los campos Start Description String y End Description String llevarían los valores “h3” y “/h3“. Es interesante delimitar la búsqueda al bloque que contiene los resultados, lo que se hace fácilmente poniendo Start String a “BOESumarioBD“. También puse Link Number a 1, pero no noté cambios.

Sexto: pulsamos Generate RSS, con lo que obtendremos la URL de una fuente RSS que nos vale. Más o menos.

El resultado es este enlace, al que nos podremos suscribir con un lector RSS. Yo uso Firefox, así que me puedo suscribir mediante los marcadores dinámicos (live bookmarks).

Hay problemas, como en toda chapucilla tecnológica. Los caracteres acentuados aparecen como entidades HTML en hexadecimal. Más importante aún, los enlaces no funcionan. Por más vueltas que le di a RSSxl, no conseguí arreglar esto.

Hasta que (continuará)…