La red social utilizada en la implementación, como se presentó en el enfoque, es Twitter. Para poder realizar el monitoreo de dicha red se creó la clase TwitterMonitor.java como se ilustra en el diagrama de clase de la Figura 4.2. Figura 4.2. Diagrama de clase de la etapa de Monitoreo de Redes Sociales.
En el método startListen() se da inicio a la escucha de interacciones provenientes de Twitter. Para llevar a cabo dicho streaming sobre la red social se utilizan clases de la librería Twitter4J . La clase principal que provee el servicio es 14 denominada TwitterStream y a través de una subscripción permite escuchar las interacciones de Twitter. En este método además se aplican los distintos filtros de idioma, tiempo y categoría que deben cumplirse para tomar como válida una interacción. Dichos filtros se analizan en la sección siguiente (4.3). Cada interacción válida que es escuchada se agrega al vector de interactions que muestra la Figura 4.2. Es importante distinguir que las interacciones son de tipo Status (que también es una clase provista por la librería Twitter4J) pero esto se analiza en mayor profundidad en la sección 4.4.
Para poder realizar el chequeo temporal de las interacciones denominadas replies se usa el módulo Interfaz de Twitter ya que este provee el servicio de búsqueda de información adicional.
Por último, cabe destacar que el hilo t_date permite actualizar cada cierta ventana de tiempo el filtro temporal que debe aplicarse sobre las interacciones en cuestión.
14 Twitter4J: Librería Java no oficial de la Twitter API. Para más información:
4.3. Filtros
En esta sección, se detallan los distintos filtros que pueden aplicarse sobre las interacciones escuchadas en la etapa de monitoreo. El filtrado de categorías se realiza de manera directa sobre el streaming planteado en la sección anterior. Para ello, se utiliza la clase FilterQuery de la librería Twitter4J, la cual permite añadir palabras o keywords a una lista y luego filtrar por la misma. Es decir, las interacciones pasan este filtro sólo si contienen al menos una de las palabras de dicha lista.
El filtro temporal como se enunció en la sección anterior, se aplica dentro de la clase TwitterMonitor.java y se actualiza cada cierta ventana de tiempo.
En la Figura 4.3 se ilustra una jerarquía de filtros que permite la fácil incorporación de nuevos filtros. El único implementado es el filtro de idioma o lenguaje que . Además se permiten las operaciones AND y OR entre distintos filtros, habilitando la concatenación de diversos tipos de filtrado. Figura 4.3. Diagrama de clases de filtros complementarios al filtro temporal y al de categoría.
4.4. Interacción
La implementación de este módulo se materializa en la clase Status de la librería Twitter4J. En la Figura 4.4 pueden visualizarse los métodos utilizados de dicha clase.
Figura 4.4. Lista de métodos utilizados de la clase Status de la librería Twitter4j.
Los distintos métodos permiten obtener una mayor cantidad de información acerca de la interacción en cuestión. Para el monitoreo de redes sociales, su utilización refiere a datos como el idioma, el tiempo de creación de la interacción y su contenido textual. En otras palabras, la información que provee esta clase permite comprobar los filtros a aplicar sobre la interacción.
Además es utilizada para la obtención de identificadores, tanto de usuarios relacionados con la interacción, como de la interacción en sí misma. Además, al igual que en la etapa del monitoreo de redes sociales, permite obtener información sobre tiempos de creación de la acción original y sus interacciones, y sus respectivos contenidos.
4.5. Interfaz de Twitter
Este módulo hace referencia a la interacción con la red social Twitter y la posibilidad de realizar consultas sobre usuarios e interacciones. Es utilizada en la etapa de monitoreo y en la de procesamiento con el objetivo de completar la información obtenida. En el caso del monitoreo se le debe consultar a Twitter por el tiempo original de la interacción reply, cuya información no está incluida dentro de la interacción escuchada.
En el caso del procesamiento de información, es además utilizada para solicitar datos sobre las relaciones entre usuarios. Es fundamental su uso para el establecimiento de enlaces entre usuarios de manera directa o a través de nodos intermedios. En particular las solicitudes que se realizan son showStatus(idstatus) y showFriendship(iduser1,iduser2). La primera permite recuperar una interacción indicando su valor de identificador (idstatus). La segunda permite determinar el tipo de relación existente entre dos usuarios.
Sin embargo, en la versión gratuita de Twitter, la cantidad de solicitudes que se pueden realizar por unidad de tiempo son limitadas. Es por ello, que con el caudal de consultas que el sistema realiza y las limitaciones propias que establece
la Twitter API, se derivó en la creación de una pileta de instancias de Twitter. Esta pileta o pool se diseñó entonces con el objetivo de poder abastecer una mayor cantidad de solicitudes. Twitter a través de cuatro valores identificatorios (credenciales) permite registrar una instancia. Por ende, lo que se hizo fue registrar distintas credenciales en Twitter con el objetivo de permitir la creación de múltiples instancias. En la Figura 4.5, se puede visualizar que en la clase TwitterPool.java se implementa dicho pool. Cabe destacar que sólo se indican tres credenciales registradas por un tema de prolijidad en el diagrama, sin embargo, se utilizan más de quince.
Para saber si una instancia puede o no continuar recibiendo solicitudes se suscribe un CustomRateLimitStatusListener que informa al pool sobre el estado de de la misma. Este listener implementa la interfaz RateLimitStatusListener contenida en la librería Twitter4j, cuyos métodos de interés son onRateLimitStatus y onRateLimitReached. A través de dichos métodos, el listener se comunica con el pool para indicar si una instancia de Twitter aún responde solicitudes o si alcanzó su límite y debe esperarse para volver a utilizarla. Por su parte el pool contiene una tabla de hash que contiene las distintas instancias y un valor lógico por cada una de ellas, que indica si la instancia se encuentra disponible o no. Figura 4.5. Diagrama de clases del sistema de administración de instancias de Twitter.