Interfaz para Bomberos utilizando el API de Twitter
ELO329: Programación orientada a objetos
Francisco Cid Nieto
Miguel Ferreri Guerrero

Descripción del proyecto realizado

Algunos Cuerpos de Bomberos cuentan con centrales de comunicaciones que implementan sistemas informatizados que permiten una gestión más optima, rápida y segura de los recursos de la institución, llámese carros bomba, de rescarte, portaescalas, haz-mat, etc. Y que adicionalemente publican información relevante a carros en servicio y llamados de emergencia, como es el caso de la central del Cuerpo de Bomberos de Talca, el cual lo hace mediante Twitter (se puede leer siguiente este enlace).

Nuestro proyecto consistió en utilizar la API de Twitter para poder obtener esta información desde donde la central de bomberos de Talca la publica de forma automática (la cuenta de Twitter mencionada anteriormente).

Análisis del proyecto realizado

Lo que buscamos es hacer un proyecto en lenguaje Java que fuera capaz de tomar la información desde Twitter por medio de su API y nos permitiera tratarla y desplegarla de la forma que nosotros deseemos. De esta manera podemos utilizar esta información automatizada (para por ejemplo en futuros proyectos realizar acciones o desplegar información cuando cierto carro bomba entra o sale de servicio, o quizás utilizar las coordenadas en latitud y longitud para poder pedirle a un GPS que nos entregue la ruta más corta hacia una emergencia).

Sin embargo, primero debemos analizar 2 problemas a solucionar:

  • ¿Cómo le damos una interfaz gráfica?

    La solución a este problema fue simple gracias a lo aprendido en clases, pues ya bien sabíamos que para crear programas en Java que contaran con interfaz gráfica nos podíamos servir de las bibliotecas JFrame.

  • ¿Cómo nos comunicamos con la API de Twiiter?

    Este problema era nuevo y no sabíamos por donde abordarlo, puesto que para ello necesitaríamos establecer comunicación con los servidores de Twitter, pero mediante protocolos por internet y con los protocolos que nos ofrece la API de twitter, la cual está perfectamente documentada aquí.

    La solución a este problema llegó de la mano de la biblioteca Twitter4J (la cual tiene su web oficial del proyecto aquí) gracias a esta biblioteca (externa y no-oficial) se simplifica enormemente el tratamiento con la API de twiiter, puesto que sólo debemos darle los datos importantes dentro de nuestro código del programa y Twitter4J se encargará de obtener los datos.

Implementación del proyecto realizado

Para la creacion de la interfaz se trabajo con el IDE eclipse, con el cual se programaron todas las clases, de las cuales no se heredaron clases , solo se crearon una clase anidada en PrototipoGUI, y un segundo constructor en la clase Actualizar, con menos variables de entrada.

Para esto se penso en una aplicacion de java que muestre una tabla, creada con Jtables, en un frame de JFrame, con una lista de los carros y su estado, y la hora del ultimo estado. Además se utilizan librerias externa, como es el caso de Twitter4j.

Clases creadas:

  • Actualizar:

    Actualiza la tabla de carros, según el tipo de llamado y su hora. En la primera implementación (constructor con variables de entrada: la tabla y un arreglo con strings de los tweets no utilizados en el SearchTweets) se realiza la primera actualizacion de la tabla, dejandola con los resultados hasta el momento en que se crea. Con el segundo Constructor(solo como variable de entrada la tabla) se hace un query al twitter destino, se cra una lista con esta query, y se actualiza la tabla.

  • CreaTablas:

    En esta clase se crea la tabla que se presenta en la interfaz, utilizando el ArrayList creado en Searchtweets, además se deja explicitado en esta clase que no se puede editar las celdas de la tabla desde la pantalla.

  • Carro:

    Esta clase representa a los carros del cuerpo de bomberos, en la cual se guarda su nombre, estado, hora y fecha del estado .

  • EditMenuListener:

    Clase utilizada para realizar acciones segun se precione los botones del menu de la interfaz. No utilizado mayoritariamente.

  • Fecha:

    Clase que busca la fecha y la guarda en un formato especial, creado con la libreria Calendar. Se utilizó esta libreria debido a que retornar dias anteriores, lo cual es mucho mas dificil de hacer con Date.

  • GetURL:

    Clase que detecta y guarda cuando hay una URL en un string.

  • MyWorld:

    Clase intermediaria que crea una instancia de MyWorldView.

  • PrototipoGUI:

    Clase que contiene el metodo main, en él crea una instancia de Prototipo_GUI, la tabla y un timer, donde, cada 6 segundos, se actualiza la tabla.

  • Prototipo_GUI:

    Crea una frame donde aparece la tabla, y una barra de menú utilizada en EditMenuListener.

  • SearchTweets:

    Hace una query al twitter destino, y con esta hace una lista con 100 tweets. Luego recorre esta lista hasta encontrar ciertos tweets con la informacion del dia sobre el estado de ciertos carros. Con estos twwets crea un Arraylist de objetos Carro, con el cual crea la tabla en CreaTablas.

  • Ventanaurl:

    En esta ultima clase se planea tomar un ArrayList de URLs de la clase actualizar, y mostrar por pantalla esta lista de urls, para poder acceder a ellas y ver la ubicación de los llamados.

Diagrama de Clases (UML) del proyecto

En el presente apartado presentamos el Diagrama de Clases (UML) de nuestro proyecto.

Posibles mejoras que podría tener el proyecto

Si bien este proyecto tiene un alcance limitado, este es un primer paso para quizás un proyecto más elaborado, y algunas de las ideas que se tienen hasta el momento son las siguientes.

  • Integración con OpenStreetMap

    OpenStreetMap es un proyecto colaborativo para crear mapas libre y editables por todo el mundo, el cual ofrece una muy amplia flexibilidad para integrarlo en distintos proyeto e incluso para usarlo como navegador con GPS (aquí hay un enlace a la página del proyecto OSM)

    La idea sería que aprovecharamos que por Twitter se entregan las direcciones georefenciadas de las emergencias, con lo cual se podría hacer un sistema de GPS para integrar en los carros bomba. Incluso, podría resaltarse los grifos cercanos a un incendio al momento en que el carro esté pronto a llegar.

Código Fuente

En este apartado se deja a libre disposición de quien lo necesite el código fuente del proyecto

Código fuente

Nota: Se debe agregar las librerías de twitter4j al momento de re-crear el proyecto

Lista de Bugs conocidos

A continuación se listarán y describirán los bugs conocidos hasta el momento

  • Sobrepaso de peticiones máximas a Twitter

    Esto sucede cuando se hacen más de 180 consultas en menos de 15 minutos, y es debido al límite de consultas que tiene la API de Twiiter, el cual puede verse aquí.