Tuitelo, es el cliente Twitter basado en Java desarrollado para la asignatura de ELO329, Diseño y Programación Orientada a Objetos. Nuestro objetivo fue crear un cliente basado en Java, que pueda replicar las funcionalidades básicas de la página de Twitter en la web, así como también el poder agregar características que permanecen ocultas para el usuario de twitter en la web.

Origen del problema

El uso masivo que se da a twitter - incluso en nuestro pais - da la oportunidad de realizar diferentes estudios demograficos, gracias a que es una buena vitrina de las tendencias de un pais, asi como de los temas más comentados del momento. Esa potencial informacion acerca de las tendencias de una poblacion, muchas veces no es aprovechada debido a la dificultad de hacer la tarea de recoleccion manualmente.

 

Análisis del Sistema

El sistema desarrollado, Tuitelo, pretende ser una herramienta para la obtención de datos a partir de tweets. Aparte de replicar las funcionalidades básicas de twitter, permite el guardado masivo de tweets y de búsquedas personalizadas. En este sistema intervienen los siguientes actores:

sistema

La Api de Twitter es la utilizada por todas las aplicaciones clientes de Twitter para conectarse al servicio. Ofrece métodos para prácticamente todas las funcionalidades que posee el sitio web.

Twitter4java es la implementación para java de la api de Twitter. Enmascara la api de Twitter generando métodos de java puro, encapsulados en una biblioteca .jar. Su portabilidad y abudante documentación hacen que sea muy fácil implementar un cliente sencillo de Twitter en java.

TUITELO es nuestra aplicación. Genera la interfaz entre Twitter4java y el usuario.

 

Diagramas UML

Diagrama de clases
Diagrama de secuencia para envío simple de Tweet

 

Un caso común de uso.

Supongamos que se desea recuperar una lista de todos los tweets que hemos realizado en un tiempo determinado, a modo de archivo de nuestra historia en la red social de los 140 caracteres. Hacer la tarea manualmente, implicaría el copiar tweet por tweet desde la webpage, darle formato y guardarlo. Nuestro software Tuitelo realiza la tarea automáticamente, pudiendo especificar el período de tiempo en el que se desea recuperar la información.

Caso de uso 1: Revisar Timeline propio.

Propósito: Poder contemplar el Timeline propio del usuario. Para éste propósito se necesitará unir una cuenta de twitter con el software Tuitelo.

Actores: Usuario interesado en contemplar su propio Timeline.

Pre-condiciones:

  • Poseer una cuenta de Twitter.

Evento: El usuario inicializa Tuitelo.

Post-condiciones:

  • La Timeline del usuario aparece en la ventana de Tuitelo.

Tipo: Manual. El usuario debe completar cada uno de los pasos correctamente.

Curso Normal de Eventos

  1. Al inicializar el software, se pedirá que el usuario registre su cuenta de Twitter. Se deberá hacer click en "dar permiso a Tuitelo".
  2. Una vez que se haya hecho click en "dar permiso a Tuitelo", se redirigirá a la página web de twitter, donde se deberá copiar un PIN de acceso a la aplicación.
  3. Se copia el pin en la ventana de Tuitelo, y luego se presiona "INTENTAR CONECTAR".
  4. Si la cuenta y el pin fueron correctamente generados, se abrirá la pantalla principal de Tuitelo, desplegando el Timeline personal del usuario que registró su cuenta con Tuitelo.

Curso Alternativo de Eventos

4A1 Si el pin es incorrecto aparece una ventana avisando del suceso.
4A2 Si el software pierde conexión de internet, deja de funcionar completamente.

 

 

Caso de uso 2: Guardar Tweets propios.

Propósito: Guardar los tweets emitidos dentro de un plazo determinado de tiempo.

Actores: Usuario interesado en conservar los tweets en su disco duro local.

Pre-condiciones:

  • Poseer una cuenta de Twitter.
  • Pasar el proceso de inicio de Tuitelo (detallado en caso de uso N° 1).

Evento: El usuario hace click en "Guardar Búsqueda".

Post-condiciones:

  • Se generará un archivo .html guardando todas las Búsquedas realizadas.

Curso Normal de eventos.

  1. El usuario sigue todos los pasos detallados en el curso normal de eventos para el caso de uso N° 1.
  2. Hacer click en "buscar -> por nombre de usuario"
  3. El usuario especifica el nombre de usuario de twitter al cual le respaldará sus tweets localmente (en este caso él mismo), así como el tiempo desde donde realizará la búsqueda y la cantidad máxima de tweets que debería aparecer.
  4. Al hacer click en <Guardar Búsqueda>, aparece una ventana en la que se especifica el tiempo a considerar en la búsqueda, así como la máxima cantidad de resultados a guardar.
  5. Al hacer click en <Ok> se abre una ventana en donde se debe especificar el nombre de archivo y ruta.
  6. Al aparecer la notificación de resultados guardados correctamente, el archivo .html generado contendrá la cantidad de tweets especificados según la búsqueda realizada.

Curso alternativo de eventos.

3A1 El usuario especifica un nombre de usuario no válido. El software se detiene y en el log del programa aparecen nuevas entradas.

5A2 Si el usuario especifica una ruta inexistente de archivo. El software se detiene, debiéndose repetir los pasos anteriores.

Tipo: Manual. El usuario se encarga de realizar la búsqueda.

 

Caso de uso 3: Seguir a usuario @fayerwayer

Propósito: Buscar al Usuario @fayerwayer y seguir sus tweets.

Actores: Usuario interesado en seguir a @fayerwayer

Pre-condiciones:

  • Poseer una cuenta de Twitter.
  • Pasar el proceso de inicio de Tuitelo (detallado en caso de uso N° 1).
  • Buscar al usuario fayerwayer (detallado en caso de uso N° 2).

Evento: Seleccionar con el botón derecho cualquiera de los tweets desplegados de fayerwayer, y seleccionar la opción <Seguir Usuario>

Post-condiciones: El usuario @fayerwayer ahora es seguido por el usuario.

Curso normal de eventos:

  1. El usuario sigue todos los pasos detallados en el curso normal de eventos para el caso de uso N° 1.
  2. Hacer click en "buscar -> por nombre de usuario".
  3. Se especifica el usuario al cual se buscará, en este caso fayerwayer.
  4. Hacer click con el mouse sobre cualquiera de los tweets desplegados del usuario previamente buscado.
  5. Seleccionar la opción "Seguir Usuario".
  6. El usuario pasará a ser parte de los amigos del Usuario, o más bien, en jerga Twitter, a ser parte de su lista de "seguidos".

Curso alternativo de eventos.

3A1. El usuario buscado no existe. En este caso aparecerá una ventana advirtiendo que el usuario no existe.

Tipo: manual. El usuario debe buscar y luego seleccionar las opciones de menú.

 

 

Dificultades encontradas en el Desarrollo de Tuitelo

Las principales dificultades de desarrollar una aplicación como Tuitelo van de la mano con el manejo dinámico de la información a desplegar. Para ésto, se desarrolló un sistema de timer en el caso que la página de tweets necesitara refrescarse.

Por otro lado, las peticiones web que la API twitter4java realiza, dependiendo del ancho de banda del usuario, tomarán más o menos tiempo en realizarse. Si se usa un software completamente secuencial, ésto implicará que mientras no se responda a la petición anterior, tanto las opciones como el panel completo quedarán congelados para el usuario. Para solucionar ésto, se utilizaron hebras separadas para realizar las peticiones al servidor.

Una tercera dificultad consistió en la cantidad de peticiones por hora a la API de twitter, que es un total de 350. En primeras versiones de nuestro código, el refrescar continuamente y además pedir la imagen del usuario por cada petición, hacía que ésta cantidad de peticiones se acabaran en menos de media hora. Para solucionar esta limitante se implementó un caché local con las url de las imágenes de usuario a desplegar en pantalla, así en el caso de que un mismo usuario vuelva a twittear, la información sobre su imagen de usuario está guardada localmente.

Otra dificultad encontrada en el desarrollo fue el despliegue más "amistoso" de la fecha en la que un tweet fue enviado, ésto porque el formato en el que se entrega la fecha de un tweet es del tipo "22-11-2011 10:33:49 PM". Buscando en internet se llegó a la solución para ésto, y fue el uso de la biblioteca Prettytime, la cual utiliza un modo de entregar las fecha de manera relativa a la fecha actual. Así, si según el ejemplo el tweet fue realizado el 22-11-2011 10:33:49 PM, y supongamos estoy ejecutando tuitelo a las 22-11-2011 10:50 PM, en la fecha del tweet aparecerá "hace 17 minutos atrás".

Por último, debemos hacer mención de la biblioteca Twitter4java. Si bien consideramos favorable el que tenga una abundante documentación, ésto mismo es lo que ralentiza el proceso de investigación de la API. El tener una gran cantidad de métodos disponibles hacía lenta la tarea de investigación acerca de las opciones posibles para implementar. Sólo hubo una solución para esta dificultad: paciencia.

 

Test de prueba 1: Caso de uso 1:

Lo siguiente es el resultado de ejecutar los pasos del caso de uso 1: Revisar Timeline propio.

  1. Al inicializar el software, se pedirá que el usuario registre su cuenta de Twitter. Se deberá hacer click en "dar permiso a Tuitelo".
  2. Una vez que se haya hecho click en "dar permiso a Tuitelo", se redirigirá a la página web de twitter, donde se deberá copiar un PIN de acceso a la aplicación.


  3. Se copia el pin en la ventana de Tuitelo, y luego se presiona "INTENTAR CONECTAR".
  4. Si la cuenta y el pin fueron correctamente generados, se abrirá la pantalla principal de Tuitelo, desplegando el Timeline personal del usuario que registró su cuenta con Tuitelo.



     

    Curso Alternativo de Eventos

    4A1 Si el pin es incorrecto aparece una ventana avisando del suceso.


 

 

Test de prueba 2: Búsqueda de usuario

En este test se prueba la funcionalidad de búsqueda por usuario. Para ésto se requerirá que Tuitelo esté abierto. Buscaremos al usuario @mluduenag:

Al hacer click aparecerá la opción de poder ingresar el nombre al cual buscar. En este caso ingresamos mluduenag y presionamos <ENTER>:

Al realizar este paso, se logra que aparezca en el panel principal los tweets de @mluduenag, además de habilitarse la opción de guardar la búsqueda en formato .html.

 

Bugs.

Uno de los bugs que no se corrigieron a tiempo, fue el de implementar una rutina de excepción para cuando se busca un usuario que no existe. Supongamos por ejemplo que se busca al usuario @mluduenagg (el cual no existe):

Al presionar enter, inmediatamente desaparece el panel de tweets principal:

Si echamos un vistazo a lo imprimido por consola, se puede apreciar el problema ocurrido:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

El cual no se ha reparado a la fecha de esta entrega.