Tesis de Grado
Tesis de Grado
Tesis de Grado
41
de noviembre del mismo año se realizó la propuesta del presente proyecto, es decir,
es un proyecto que ha tenido un proceso extenso de investigación contemplando
fuentes de información certificadas y catalogadas con información verídica. La fase
de investigación no es un proceso con cierre absoluto, ya que durante las otras
fases, la investigación sigue siendo un factor importante y participativo.
42
6.3 DISEÑO
43
6.3.1 Diagrama de Despliegue.
44
estar en el mismo entorno de ejecución, está directamente ligado con el gestor
Liferay.
Estos componentes involucrados con el almacenamiento de datos provenientes de
twitter y la herramienta, están conectados con diferentes servidores de bases de
datos, tal como se representa tenemos un servidor de base de datos relacional
donde la base de datos de MySQL almacena los datos propios de la herramienta y
la clasificación de las diferentes cuentas, la cual es generada por los diferentes
usuarios. También se representa el servidor de bases de datos no relacional el
cual contiene la base de datos Mongo que contiene la información de los perfiles
de cada cuenta extraída y sus correspondientes líneas de tiempo las cuales son
un conjunto de estados realizados por la cuenta específica y agrupados en una
sola estructura.
45
6.3.2 Diagrama de Componentes.
46
donde el usuario podrá generar la clasificación de las cuentas deseadas en las
categorías y subcategorías que se definan.
Claramente el componente de vista de extracción, Twitter Extraction View, también
se representa como accesible desde que se realice la autenticación, esto depende
de la actividad que necesite realizar el usuario ya que allí tendrá acceso al
componente que permitirá extraer información de las diferentes cuentas
introduciendo sus identificadores. Como se puede apreciar, este componente está
ligado al componente de modelo de datos no relacionales Twitter Extractor
Model el cual almacenara todos los datos provenientes del componente de
extracción.
Adicionalmente vemos una interfaz de integración con Liferay nuestra plataforma
gestora de contenidos la cual nos permitirá gestionar las interfaces de la herramienta
y se puede ver como el consumo de otro componente externo a la codificación de
la herramienta, ya que el software de la plataforma es un producto o servicio el cual
se decidió utilizar en el presente proyecto.
47
Para crear dicha conexión primero se ingresó a la página de comunidad de
desarrollo twitter llamada Twitter Developers, posterior mente se debe crear una
App que simplemente requiere ingresar a una cuenta personal de twitter y
posteriormente introducir alguna información referente a su objetivo y páginas de
acceso.
48
Posteriormente se generarán unas llaves de acceso al API y Tokens los cuales
con los códigos con los cuales dentro de la herramienta yo puedo establecer la
conexión con la red social.
Tal cual se define en el estado del arte del proyecto un API es una interfaz que me
da la oportunidad de consumir un servicio web, en este caso la utilización de esta
API nos permitirá consumir el servicio de twitter. Cabe aclarar que para poder
establecer una extracción de datos de la red social no basta solo con crear dicha
conexión con el API. Adicionalmente necesitamos utilizar una herramienta que
ligado al lenguaje de programación nos permitirá desde nuestra aplicación realizar
la conexión pasando las llaves de acceso y Tokens.
En este caso la herramienta fue programada bajo lenguaje Java y por lo tanto la
herramienta seleccionada luego de una previa investigación de métodos, ventajas
y aplicación fue la famosa librería Twitter4j, la cual también nos permite utilizar
métodos de recolección de datos twitter lo que facilita el proceso de extracción ya
que puede generarse de forma específica como lo menciona (Rubira, 2011) esta
herramienta permite gestionar tweets, usuarios, hilos, listas, mensajes directos,
relaciones, favoritos, subscripciones, bloqueos, realizar y guardar búsquedas,
reportar spam y más estructuras que sin lugar a duda proveen al usuario de la
información necesaria para recolectar los datos de cuentas específicas.
Su implementación es realmente sencilla, retomando el ciclo de desarrollo del
proyecto, se decide crear en el IDE Eclipse tres proyectos independientes
(estructura desacoplada) los cuales representarán los componentes principales de
extracción y almacenamiento tanto relacional como no relacional.
49
Como se puede ver se identifica la sincronización con el repositorio de Github en
el primer componente, en cuanto a los otros dos componentes se puede apreciar
el símbolo de almacenamiento. Esto debido a que se crearon con configuración JPA.
Al realizar la conexión con el API de Twitter y tener acceso a la red social y a los
métodos que nos provee la librería twitter4j anteriormente agregada al Build Path
del componente de software, se puede iniciar con el proceso de codificación
enfocado a la extracción de datos.
Para definir la funcionalidad, creamos dos clases en el paquete definido para la
extracción (.extraction)
50
Ilustración 7 - Componente de extracción.
Este genera una lista de estados de cada cuenta los cuales se extraen por
16 páginas cada una con 200 estados propios de la cuenta especificada.
Devolverá la lista tipo Status o un mensaje de error especificando que no
pudo obtenerse el timeline.
51
extractTimelineAndStoreJSON : Método booleano que recibe por
parámetros un objeto que representa la conexión con la red social, una
cadena con la ruta de un archivo JSON generado y una cadena de texto que
corresponde al account name o nombre de la cuenta de twitter a la cual se le
quiere extraer la información en este caso el timeline.
52
getFollowers: Método que recibe por parámetros un objeto que representa
la conexión con la red social y una cadena llamada account name que
representa el identificador de la cuenta a la cual se le extraerá una lista con
los perfiles de cada usuario que sigue la cuenta, el método devuelve esta lista
o un error informativo.
getHashTags: Método que recibe por parámetro un objeto tipo status que
representa un estado de una cuenta específica con el cual opera y devuelve
una lista de cadenas de texto con los hashtags realizados en ese estado
específico.
initalize: Método que crea la conexión con twitter e inicializa todas las
variables a utilizar en la clase.
Primero se define una variable result de tipo booleano que arrojara un valor
dependiendo de si se pudo extraer el timeline de una cuenta específica.
53
Posteriormente calcula la cantidad de veces que cada estado del timeline
fue citado y almacena este valor en la variable entera totalQuotedTweets,
también calcula el número de retweets obtenidos por cada estado
almacenado en la variable entera totalReTweets.
Luego obtiene los hashtags de cada estado, los cuales son almacenados
en una lista string para la cual se utiliza el método getHashTags de la clase
TwitterExtractorUtilities y también genera listas de perfiles de seguidores y
seguidos donde se implementan los métodos getFollowers y
getFollowingUsers de la clase TwitterExtractorUtilities.
Nota: Los demás métodos consisten en los set y get de cada variable definida
en la clase.
54
establece la conexión con la base de datos MongoDB y se declaran las diferentes
operaciones de un CRUD a través de sus métodos.
La tercer clase de este componente representa también un DAO pero en este
caso perteneciente a los timelines extraídos. TwitterUserTimelineDAO es una
clase que permite el almacenamiento de los timelines de cada cuenta y define las
diferentes operaciones de un CRUD a través de sus métodos.
Ilustración 8 - Componente de almacenamiento (No relacional)
55
Ilustración 9 - Clase TwitterUserProfile
Luego se definen los métodos de lectura los cuales seleccionan desde la colección
los perfiles solicitados, existe un método que los selecciona por el id del usuario
getTwitterUserProfileById, otro que los selecciona por screenName
getTwitterUserProfileByScreenName y un último método de lectura que
selecciona todos los perfiles de la colección ReadAllTwitterUserProfiles. Los dos
primeros reciben el perfil, el último no recibe ningún objeto o variable por parámetro.
56
En cuanto al método de actualización nombrado updateTwitterUserProfileById, es
un método que recibe por parámetro el perfil a actualizar y el perfil con la información
que se quiere reemplazar. La funcionalidad está en identificar el perfil a actualizar
por el id del objeto y posterior mente eliminarlo e insertar el perfil nuevo con
todos sus nuevos atributos.
Finalmente para los métodos de eliminación al igual que los de escritura se puede
realizar la eliminación por Id, ScreenName o en general eliminar toda la lista de
perfiles estos métodos se nombraron como deleteTwitterUserProfileById,
deleteTwitterUserProfileByScreenName y deleteAllTwitterUserProfiles.
57
deleteTwitterUserTimelineByScreenName – Método de eliminación por
screenname recibe Status por parámetro (elimina una timeline).
58
el fichero META-INF se crea una persistencia donde se especifican los datos de
conexión con el gestor (autenticación) y su base de datos
Haciendo énfasis en las diferentes entidades de este modelo, cada una tiene
atributos que las identifican y relacionan entre ellas, esta relación puede detallarse
mejor en el diagrama entidad relación (Véase el Anexo A ).
59
Por ahora cabe resaltar el contexto general y las relaciones entre entidades. La
definición de la entidad User o usuario, comprende al individuo que hará uso de la
herramienta, la información de esta entidad será importante a la hora de realizar una
autenticación e indagación sobre las personas con acceso a la herramienta.
60
representa el nombre de la cuenta, un screenname el cual es el identificador de la
cuenta (tipo string), una descripción (tipo string) y un estado que al igual de todas
las entidades sirve para definir su estado en la base de datos (tipo integer).
Podemos apreciar las diferentes operaciones y los parámetros que recibe cada
método, crear, leer, actualizar y eliminar, son las operaciones generales y las cuales
varían en cuanto al parámetro de identificación. Adicionalmente se crearon dos
métodos que se relacionan con las entidades Category y Subcategory, obteniendo
a cuál de las categorías y subcategorías definidas pertenece esa cuenta.
61
Las operaciones de su DAO se pueden apreciar en la sigu iente imagen:
Podemos apreciar las diferentes operaciones y los parámetros que recibe cada
método, crear, leer, actualizar y eliminar, son las operaciones generales y las cuales
varían en cuanto al parámetro de identificación. Adicionalmente se crearon dos
métodos que se relacionan con las entidades Category y Account, obteniendo a cuál
de las categorías definidas pertenece y las cuentas que pertenecen a dicha
subcategoría.
Por último la entidad Category, se define como la entidad que representa una
categoría especifica definida según los requerimientos funcionales, a esta entidad
se le definieron como atributos un id auto incrementable de tipo double, un
categoryname el cual es un string que representa el nombre de la categoría, una
descripción (tipo string), una lista de subcategorías pertenecientes a la categoría
(tipo List<Subcategory>) y un estado que al igual de todas las entidades sirve para
definir su estado en la base de datos (tipo integer).
62
Ilustración 15 - Métodos de la clase CategoryDAO.
Podemos apreciar las diferentes operaciones y los parámetros que recibe cada
método, crear, leer, actualizar y eliminar, son las operaciones generales y las cuales
varían en cuanto al parámetro de identificación. Adicionalmente se crearon dos
métodos que se relacionan con las entidades Subcategory y Account, obteniendo
las subcategorías definidas que pertenecen a ella y las cuentas que pertenecen a
dicha categoría también.
63