«

»

Imprimir esta Post

Bot Subasta Eléctrica (II)

En esta entrada voy a explicar la arquitectura global del proyecto y el por qué de cierta toma de decisiones. Esta entrada no entra en tareas concretas que se han llevado a cabo, sino que pretende describir el proceso para decidir como sería el sistema y qué tecnologías se usarían para desarrollar el prototipo.

Como comentaba en el anterior post sobre el proyecto, @acocadelatorre me planteó desarrollar un bot de Twitter que actualizase con diversos valores extraídos de la subasta eléctrica. Como premisa está el realizarlo en muy poco tiempo (90 minutos aproximadamente), por lo que la toma de decisiones equilibrando la velocidad de desarrollo con la eficiencia y fiabilidad de las tecnologías

¿Qué trabajo vamos a realizar?

El trabajo que se quiere realizar consiste en:

  1. Pedir a los datos de manera periódica
  2. Extraer los datos precisos que queremos de entre los recibidos
  3. Formar un mensaje de texto
  4. Autentificarnos en Twitter
  5. Enviar a Twitter el mensaje formado

Conseguir los datos

Hemos de asegurarnos, antes de plantear el sistema, de que podemos leer los datos que necesitamos. Para ello podemos optar por dos caminos principalmente: documentación ingeniería inversa. El primer camino es más seguro si existe, pero el segundo es indudablemente más divertido, ya que consiste en tomar algo que ya existe y desentrañar cómo funciona.

La interfaz actual que se proporciona a los interesados en leer los datos de la subasta está realizada en Flash. También se proporcionan documentos PDF con resúmenes. Como buscamos automatizar la tarea, ninguna de estas dos interfaces es cómoda para un bot, ya que no son suficientemente sistemáticas ni ofrecen una interfaz de datos normalizada de alguna manera.

Lo ideal sería tener un webservice o API a disposición de los desarrolladores o usuarios que quisieran consultar estos datos públicos. Como no era evidente que existiesen estos servicios, realicé un análisis a ojo del tráfico con la consola de Chrome al cargar el Flash. (Por mucho Flash que sea, en algún punto el navegador debe acceder a los datos que se van a presentar). Al final de la carga de la web, aparecen unos archivos en formato de texto con nombres que parecen sacados de una query (límites de fechas, filtrado por años, identificadores del tipo de datos…). Tomé esas URL, las abrí en nuevas pestañas y voilá: archivos csv con los datos actualizados para los mercados diario e intradiario, que es lo que buscaba.

Como la consulta que vamos a realizar es muy esporádica y de poco volumen, no hay necesidad de buscar otra fuente más eficiente o sistemática que, posiblemente, ni exista. Además, si la página oficial utiliza esta fuente de datos, no voy a ser más papista que el Papa. Así que ya sabemos que nuestro bot, en algún momento, va a realizar una petición HTTP GET a las URL que hemos visto en el tráfico del navegador y va a recibir archivos TXT con valores separados por puntos y coma.

¿Documentación?

Al tratarse de datos oficiales, debe existir alguna normativa o reglamento que especifique los formatos en los que se van a presentar. Efectivamente, en la misma web aparece al final de la sección de documentación un link a un PDF donde se explican el formato de nombrado de archivos, rutas empleadas y contenido.

Esto puede realizarse por inspección, observando algunos ejemplos, pero no está mal tener una documentación mínima para una vez que existe. No todo va a ser hacer ingeniería inversa.

¿Periódicamente?

Sabemos que necesitamos algún elemento del sistema que realice las peticiones HTTP con cierta regularidad. Eso suena a un gestor de trabajos con temporizadores. Eso es, por ejemplo, Cron. ¿Dispongo de alguna máquina que pueda programar para hacer esto? Por supuesto, tengo varios ordenadores en casa, pero usarlos para ello implicaría tenerlos permanentemente conectados a la red, encendidos y mantenidos.

Como no me apetece mantener servidores propios para una tarea tan leve, busco en alguno de los hostings que tengo que no sean de algún cliente. En uno de los hostings baratitos, uno compartido, me permiten configurar trabajos Cron desde cPanel. Así que puedo generar una llamada a un script linux (o ejecutar un comando directamente) configurando una periodicidad.

¿Quién realiza el trabajo sucio?

Puesto que estamos en un servidor barato, con lo básico y elemental hoy en día para ejecutar código, elegimos PHP para realizar las tareas concretas de petición de datos, procesado e interfaz con Twitter. No es glamuroso, no es chic, es mainstream… pero funciona y pude tener un código base en menos de una hora, ya que puede hacer todas las tareas requeridas en un sólo script.

¿Y como se entera Twitter?

Twitter dispone de una API, es decir, de una interfaz para desarrolladores que permite realizar las tareas habituales de la herramienta: tuitear, retuitear, marcar favorito, leer una timeline, etc… En nuestro caso necesitamos autentificarnos con una cuenta, que es la que usaremos para publicar los mensajes del bot. El sistema que emplea Twitter es OAuth y es muy sencillo de implementar en casi cualquier lenguaje en el servidor, especialmente en PHP.

Resumen

  • Se desarrollaron varios scripts PHP, cada uno para un tipo de Tweet diferente (mercado diario, mercado diario incremental y mercado intradiario). Estos scripts realizan:
    • Petición HTTP GET al servidor de datos
    • Composición del Tweet
    • Autentificación con la API de Twitter
    • Envío del Tweet
  • Cada script PHP es llamado por un script .sh, que se ejecuta en el servidor compartido.
  • Cada script .sh es ejecutado por Cron, siguiendo la planificación que le programemos.

En la siguiente entrada sobre el tema, explicaré como realizar la captura de los datos y componer el mensaje que necesitas.

 

Acerca del autor

Dani Ramírez

Artesano del conocimiento, del software y los juegos de mesa. También Ex-CEO de una empresa que nunca dio beneficios, Ex-programador a tiempo completo, Ex-estudiante de ingeniería... Knowledge, software and board game craftsman. Also, Ex-CEO-of-a-company-which-never-had-profits, Ex-full-time-programmer, Ex-engineering-student, ...

Enlace permanente a este artículo: http://danibishop.com/bot-subasta-electrica-ii/

Pinterest