Programando herramienta recolección información RSS

P

Tras una serie de necesidades y después de darle unas cuantas vueltas a la resolución del problema hemos diseñado una pequeña herramienta de recolección de información de canales RSS. RSS significa Really Simple Syndication, sirve para divulgar contenido e información actualizada de webs, blogs, etc. Los RSS vienen en formato XML.

Con esta pequeña herramienta recolectaremos información de diferentes medios de prensa españoles, viendo así el funcionamiento de la herramienta y su construcción. Es una herramienta sencilla pero muy útil si se configura adecuadamente.

Vamos a ver como leer esa información recogida en los XML. Todo esto es aplicable a las webs que queráis y que dispongan de este servicio (blogs con WordPress por ejemplo). Lo interesante de esto no es la lectura en sí del fichero, existen miles de programas que pueden hacer por nosotros. Lo realmente interesante es la recolección del contenido y el hecho de recibirlo en nuestro correo cada x tiempo. Poco a poco podemos ir integrando a nuestro programa alertas con las últimas noticias, podemos introducir mejoras de seguimiento de palabras clave, etc.

Es por ello que esta herramienta sin duda evolucionará aún más convirtiéndose en ejemplo de automatización para el OSINT.

Recomendaciones y lo que hemos utilizado

Para la realización de este script hemos utilizado un servidor VPS con Linux de base y el lenguaje de programación PHP. El hecho de tener el programa en un servidor hace que pueda funcionar 24/7 sin tener nosotros que depender de tener nuestro ordenador encendido. No obstante podemos hacerlo en un servidor local, mientras realizamos las pruebas. Otra cosa que hemos descubierto y que hemos probado es que mediante un bot de telegram podemos recibir todas estas noticias, pero eso lo dejaremos para otro día.

Vamos a pasar a la parte de nuestro «bot» informativo. En nuestro caso hemos decidido que nos lleguen las noticias al correo, así podemos disponer de las últimas noticias siempre (nosotros lo hemos realizado con noticias pero podríamos hacerlo con los precios de productos de diferentes tiendas para compararlos, recibir información sobre noticias económicas (actualizaciones en la bolsa) o recibir notificaciones si alguien dice algo sobre nuestra empresa en tiempo real). Son múltiples aplicaciones las que se le pueden dar a este script, pero eso ya os lo dejamos a vosotros, sois libres de modificar el código a vuestro gusto.

Impresión de las noticias en la web

En primer lugar lo que hemos hecho ha sido una función que nos imprimirá las noticias. Esta función se puede suprimir al completo, pero la hemos realizado para comprobar que todo funcionase correctamente durante la creación del script.

A esta función le ponemos como parámetro una url. Esto hace que cuando llamemos a la función le pasemos una url de la RSS que queremos leer. Posteriormente leemos el XML de la RSS y le indicamos que queremos información sobre el medio de comunicación del que se trata. En nuestro caso la fecha de publicación, el link de la noticia y la descripción. Podemos modificarlo a nuestro gusto.

Todo esto lo imprimimos en forma de HTML para poder verlo de forma visual en nuestro navegador.

La variable máximo de noticias ($max_noticias) puede modificarse sin problema. esta variable nos indica es que recolectaremos las 10 primeras noticias. Esto deberemos cambiarlo si preferimos ver menos noticias.

Envío por correo de las noticias

Con la siguiente función, que hemos denominado «enviador«, lo que haremos será enviar por correo la información recibida, en un formato bonito. La función anterior es completamente prescindible, como decíamos antes. En esta función reutilizamos algún método de la anterior, como el bucle que lee el XML.

En este caso añadimos también las variables del correo. Añadimos un remitente, un destinatario, un asunto y una cabecera.

«From» añadimos el correo que queremos que salga como remitente en nuestro email, puede ser inventado.

«To» debemos añadir nuestro correo (o el correo al que queremos que nos lleguen las noticias).

«Subject» pondremos nuestro asunto. En mi caso quiero que añadir una regla al correo para que se guarden en una carpeta las noticias, así que le añado mis «tags«. Como algo adicional le pongo el medio en el que ha sido publicado para poder saberlo rápidamente. Para hacer esto hay varias formas pero hemos decidido tirar por la que más me gustaba porque quería introducir un formato específico. Por ello decidimos introducirlo nosotros a mano al llamar a la función. Es por eso que en este caso le pasamos 2 parámetros en vez de uno.

Posteriormente le pasaremos el mensaje con el contenido de las RSS.

Finalmente y para controlar posibles errores hemos añadido un try catch que comprobará que todo vaya bien, en caso de ir todo bien veremos «The email message was sent» en nuestro navegador.

Llamamos a las funciones con nuestros RSS

Finalmente cerramos el código PHP y procedemos al código HTML, añadimos un título a la página aunque esto es provisional, después le añadimos en el cuerpo unos «h1» para que se vea bien cual es cada medio y procedemos a llamar a las funciones.

Toda esta parte nos sobra, podríamos llamar solamente a la función «enviador» y que nos llegue directamente al mail pero, como queremos que se pueda ver también a través de la web, hemos añadido la posibilidad de imprimirlo y que se pueda ver en el navegador de forma bonita. Es por ello por lo que si deseáis omitir esta parte solo tendréis que añadir la de «enviador».

Pasamos las url de las RSS a las funciones, a la de «noticias» solo le pasamos una url y a la de «enviador» le pasamos la url (número 1) y cómo os dijimos antes el nombre del medio (número 2).

Ahora si subimos esta página a nuestro servidor y la ejecutamos veremos impresas las noticias en nuestra pantalla y, recibiremos un correo por cada medio de prensa en nuestro caso con las últimas 10 noticias.

Ahora mismo el script es muy sencillo y se puede mejorar de 1000 maneras pero lo importante es el funcionamiento base. Os dejamos investigarlo y modificarlo a vuestro antojo.

Automatización con cron

Llegados a este punto podéis estar preguntándoos si siempre que queráis recibir las noticias vais a tener que ejecutar el archivo. No, hemos estado pensando en diferentes formas de automatizar este proceso y hemos decidido decantarnos por Cron. El funcionamiento de Cron es muy sencillo y fácil de usar. En nuestro caso para la prueba de funcionamiento hemos puesto que se ejecute cada hora para poder verificar que está funcionado. Para la versión final lo dejaremos en una vez al día o dos a los sumo.

Aquí se podría añadir una mejora y comprobar si ya han sido enviadas o no y no volver a enviar las mismas noticias.

Para la automatización con cron lo que hemos tenido que hacer es introducir el comando «crontab -e« y tras esto nos pide un programa de edición de texto por consola (os recomendamos seleccionar el nano que es el más sencillo). Una vez se abra el archivo, descendemos con las flechas de dirección y sin borrar nada añadimos al final del archivo lo siguiente:

0 * * * * php nombre_del_script.php

Con esto haremos que se ejecute cada hora nuestro programa sin la necesidad de tener que estar accediendo a él continuamente. Si queremos que sólo nos llegue una vez al día, por ejemplo a las 00:00 de la noche podremos lo siguiente:

0 0 * * * php nombre_del_script.php

Para cerrar el archivo deberéis pulsar «control + x», luego pulsar la «y» para decir que queréis mantener los cambios y finalmente enter.

Resultados

En la foto podéis ver como llegan a nuestra bandeja de entrada los correos con la información de cada medio. En nuestro caso salen dos correos de cada medio, eso es por la configuración del cron. Para realizar un test de funcionamiento metimos varias reglas  por ello llega doble. Como podéis ver llegan cada hora en punto, está funcionando correctamente.

El mensaje interior del correo electrónico quedará así:

Esperamos que os haya gustado el artículo y creemos que este script no se quedará aquí. Puesto que se le pueden dar infinitas utilidades para la recolección de información en tiempo real de numerosas noticias de interés, realizar seguimientos de palabras claves en redes sociales (se le puede añadir una funcionalidad para realizar un seguimiento de tuits en tiempo real, o de palabras claves en redes sociales, blogs, etc), incluso basándonos en este principio y con una pequeña modificación podemos tuitear cada x tiempo las noticias más relevantes que nos interesen.

Animaros desde aquí a investigar y esperemos que os sea de ayuda, nosotros nos quedamos implementando nuevas cosas. Hasta el próximo artículo.

Sobre el autor

Luis Diago de Aguilar

Añadir comentario