scieee AI-readable full text Open interactive document viewer

Aplicación web para la gestión y promoción de campañas

Guillén Aroca, Pedro

Abstract

El proyecto que aquí se presenta ha consistido en la realización de una aplicación web para la gestión y promoción de campañas, en particular el análisis, diseño e implementación de una herramienta para la promoción turística e integrada en el portal de andalucia.org. La aplicación desarrollada se estructura en dos subsistemas, uno de administración y otro de gestión de los diferentes microsites creados para las campañas existentes en la plataforma. Al subsistema de administración tienen acceso el administrador y el gestor. El administrador dota al gestor de permisos para gestionar una campaña. Las campañas se componen de una serie de elementos (plantillas, documentos e ítems, concursos, eventos e invitaciones, integración con redes sociales) que ayudan a construir su microsite. Además, se ha desarrollado un módulo de estadísticas, integrado con Google Analytics, que aporta información analítica sobre una campaña a los responsables de la misma. Para la realización del proyecto se han utilizado diferentes herramientas y tecnologías. Para el análisis y diseño de la aplicación se ha utilizado el lenguaje UML y la herramienta MagicDraw, y para su desarrollo Python y Django. Este proyecto es parte de un acuerdo de colaboración entre la Universidad de Málaga y la Empresa Pública para la Gestión del Turismo y del Deporte de Andalucía perteneciente a la Consejería de Turismo y Comercio de la Junta de Andalucía.

Full text

ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA GRADUADO EN INGENIERÍA DE COMPUTADORES APLICACIÓN WEB PARA LA GESTIÓN Y PROMOCIÓN DE CAMPAÑAS WEB APPLICATION FOR CAMPAIGN MANAGEMENT AND PROMOTION Realizado por Pedro Guillén Aroca Tutorizado por Carlos Rossi Jiménez Departamento Lenguajes y Ciencias de la Computación UNIVERSIDAD DE MÁLAGA MÁLAGA, Febrero 2015 Fecha defensa: El Secretario del Tribunal Resumen: El proyecto que aquí se presenta ha consistido en la realización de una aplicación web para la gestión y promoción de campañas, en particular el análisis, diseño e implementación de una herramienta para la promoción turística e integrada en el portal de andalucia.org. La aplicación desarrollada se estructura en dos subsistemas, uno de administración y otro de gestión de los diferentes microsites creados para las campañas existentes en la plataforma. Al subsistema de administración tienen acceso el administrador y el gestor. El administrador dota al gestor de permisos para gestionar una campaña. Las campañas se componen de una serie de elementos (plantillas, documentos e ítems, concursos, eventos e invitaciones, integración con redes sociales) que ayudan a construir su microsite. Además, se ha desarrollado un módulo de estadísticas, integrado con Google Analytics, que aporta información analítica sobre una campaña a los responsables de la misma. Para la realización del proyecto se han utilizado diferentes herramientas y tecnologías. Para el análisis y diseño de la aplicación se ha utilizado el lenguaje UML y la herramienta MagicDraw, y para su desarrollo Python y Django. Este proyecto es parte de un acuerdo de colaboración entre la Universidad de Málaga y la Empresa Pública para la Gestión del Turismo y del Deporte de Andalucía perteneciente a la Consejería de Turismo y Comercio de la Junta de Andalucía. Palabras clave: Campaña, promoción, Python, Django. Abstract: The project presented here has consisted in the execution of a web application for campaign management and promotion, specifically, the analysis, design and implementation of a tool aiming to promote tourism and has been integrated into the web page andalucia.org. The developed application is structured in two subsystems, one for administration and other for the management of different microsites created for each campaigns within this platform. Administrator and manager have access to the administration subsystem. The administrator provides the permissions at manager to manage a campaign. The campaigns consist of a set of elements (templates, documents and items, contest, events and invitations, social networks integration) that conforms the microsite. In addition, we have developed a statistics module, integrated with Google Analytics, which provides an analytical information about a campaign for their managers. Different tools and technologies have been involved in the development of this project. On one hand, MagicDraw tool for the application analysis and design, and on the other hand,,Python and Django for its development. This project is part of a partnership agreement between the Universidad de Málaga and Empresa Pública para la Gestión del Turismo y del Deporte de Andalucía, belonging to Consejería de Turismo y Comercio de la Junta de Andalucía. Keywords: Campaign, promotion, Python, Django. Índice. Capítulo 1. Introducción ............................................................................... 1 Objetivo del Trabajo Fin de Grado ................................................................................... 6 1.1. Descripción del sistema ........................................................................................................ 7 1.2. Organización del Trabajo Fin de Grado .......................................................................... 9 1.3. Capítulo 2. Tecnologías y herramientas utilizadas............................ 11 Python ...................................................................................................................................... 11 2.1. Django ...................................................................................................................................... 12 2.2. HTML5 ...................................................................................................................................... 15 2.3. JavaScript ................................................................................................................................ 15 2.4. CSS3 ........................................................................................................................................... 16 2.5. Foundation ............................................................................................................................. 16 2.6. PostgreSQL ............................................................................................................................. 17 2.7. pgAdmin .................................................................................................................................. 19 2.8. Nginx ......................................................................................................................................... 20 2.9. Pycharm ................................................................................................................................ 21 2.10. Mercurial .............................................................................................................................. 22 2.11. TortoiseHg ........................................................................................................................... 22 2.12. UML ......................................................................................................................................... 23 2.13. MagicDraw ........................................................................................................................... 23 2.14. Taiga ....................................................................................................................................... 24 2.15. Capítulo 3. Análisis, Diseño e Implementación de la Aplicación ... 25 Requisitos del sistema ....................................................................................................... 25 3.1. Funcionamiento resumido del sistema ............................................................................... 26 3.1.1. Casos de uso ........................................................................................................................... 27 3.2. Casos de uso del subsistema administración del Gestor de Campañas ................. 27 3.2.1. Permisos de Gestión de Campañas ................................................................................................................. 27 Plantillas ..................................................................................................................................................................... 28 Microsite y documentos ...................................................................................................................................... 28 Menú ............................................................................................................................................................................ 29 Teaser .......................................................................................................................................................................... 30 Concurso .................................................................................................................................................................... 30 Eventos e invitaciones ......................................................................................................................................... 31 Estadísticas ............................................................................................................................................................... 33 Casos de uso del subsistema microsite ............................................................................... 33 3.2.2. Eventos e invitaciones ......................................................................................................................................... 34 Concursos .................................................................................................................................................................. 34 Diseño ....................................................................................................................................... 35 3.3. Arquitectura ................................................................................................................................... 35 3.3.1. Estructura de la aplicación ....................................................................................................... 36 3.3.2. Diseño de clases ...................................................................................................................................................... 37 Diseño de la interfaz de administración ...................................................................................................... 44 Modelo físico de datos ................................................................................................................ 48 3.3.3. Implementación.................................................................................................................... 50 3.4. Metodología de desarrollo y espacio de trabajo ............................................................. 50 3.4.1. Permisos de Gestión de Campañas ....................................................................................... 50 3.4.2. Microsite .......................................................................................................................................... 51 3.4.3. Sistema de Plantillas ............................................................................................................................................. 51 Extensión de los contenidos en documentos y teaser ........................................................................... 52 Concursos ........................................................................................................................................ 52 3.4.4. Eventos y Sistema de invitaciones ........................................................................................ 53 3.4.5. Patrones de URLs y Middleware ............................................................................................ 53 3.4.6. Comandos del Gestor de Campañas ..................................................................................... 53 3.4.7. API de YouTube ............................................................................................................................. 54 3.4.8. API de Google Analytics ............................................................................................................. 54 3.4.9. Capítulo 4. Conclusiones y Futuros Trabajos....................................... 55 Conclusiones .......................................................................................................................... 55 4.1. Trabajos futuros ................................................................................................................... 56 4.2. Instalación y configuración de la aplicación................ 59 Apéndice A. A.1. Requisitos del sistema ....................................................................................................... 59 A.2. Configuración general ........................................................................................................ 60 A.2.1. Parámetros de configuración de la aplicación “Gestor de Campañas” .................. 61 A.3. Despliegue .............................................................................................................................. 61 Configuración de la API de YouTube y de Google Apéndice B. Analytics ........................................................................................................... 63 B.1. Publicación de vídeos del Gestor de Campañas en YouTube. ............................ 63 B.2. Estadísticas del Gestor de Campañas con Google Analytics................................ 64 Manual de Usuario ................................................................ 67 Apéndice C. Referencias ...................................................................................................... 69 | Gestión y promoción de campañas 6 Figura 1.7. Página principal de Google Analytics. Como se ha expuesto, entre todas las herramientas comentadas, no encontramos ninguna opción que combine los mejores aspectos de todas ellas para ofrecer una solución óptima en la gestión integral de campañas. Objetivo del Trabajo Fin de Grado 1.1. El objetivo de este proyecto es realizar una aplicación flexible para crear campañas altamente personalizadas y con una gran cantidad de herramientas que permitan gestionar y agilizar la promoción de un producto. Todo ello con un ahorro de coste económico y de tiempo en la gestión de la misma. Además, como objetivos a alto nivel, se pretende que el trabajo fin de grado sirva para profundizar sobre los conocimientos para la promoción digital, recursos necesarios y estrategia comercial. Así como ampliar los conocimientos hasta ahora adquiridos tanto en la formación académica como laboral. Otro de los objetivos, es la especialización en el desarrollo de aplicaciones web con tecnologías como son Python [13] y Django [14], así como HTML5 [15], CSS3 [16] o JavaScript. Con todo lo comentado hasta este punto, se busca crear una aplicación web que estará integrada dentro de la plataforma “andalucia.org” de la Empresa Pública para la Gestión del Turismo y del Deporte de Andalucía perteneciente a la Consejería de Turismo y Comercio de la Junta de Andalucía, y permitirá a empresas externas crear campañas promocionales y que éstas mismas sean gestionadas por Capítulo 1. Introducción | 7 dicha empresa pública. Entre las funcionalidades destacables de la aplicación y que son objetivo principal de este proyecto, destacamos:  Gestión y administración de campañas.  Gestión de microsite de una campaña y sus apartados correspondientes.  Gestión de teaser asociados a una campaña.  Gestión de envío de newsletters de la campaña.  Gestión de eventos asociados a una campaña.  Gestión e integración de concursos y encuestas.  Gestión de usuarios asociados a una campaña.  Integración con Google Analytics.  Integración con redes sociales. Descripción del sistema 1.2. El sistema a implementar es una aplicación que, integrada dentro de la web andalucia.org y gestionada por la Empresa pública para la Gestión del Turismo y del Deporte de Andalucía (TURASA), nace con la idea de homogeneizar dentro de la propia estructura de la empresa, la gestión de las campañas turísticas y a la vez proporcionar una herramienta propia a otras empresas que son licitadas para la gestión de las mismas. El sistema está desarrollado con Python y Django como principales tecnologías, y también con el uso de HTML5, CSS3, Javascript, Jquery y ZURB Foundation. Es una aplicación cliente-servidor basado en un modelo-vistacontrolador. La aplicación es desplegada en los servidores propios de TURASA, usando un servidor Linux sobre una distribución CentOS [17]. El sistema permite asignar a un usuario o a varios como responsables de una campaña. Dichos usuarios son los responsables de crear, editar y gestionar la campaña. Una vez creada una campaña, existe la posibilidad de enviar correos electrónicos a los usuarios registrados o no en la plataforma, para atraer tráfico al microsite de la campaña online. Normalmente la campaña comenzará con un teaser para su propia promoción. Se podrán incluir cualquier tipo de elementos multimedia e incluso streaming en directo. Una vez comenzada una campaña, ésta estará formada por una serie de documentos en el panel de administración, los cuales derivan en las vistas que conforman el microsite generado para la campaña y que son accesibles para todos los usuarios. Cada documento que genera una vista, dispone de elementos multimedia, personalización de estilos, posibilidad de organizar la visualización de los elementos que lo componen, etc. Existirá también la posibilidad de crear concursos y eventos asociados a las campañas. | Gestión y promoción de campañas 8 Durante el transcurso y el tiempo que esté accesible una campaña, se realizará un seguimiento de los usuarios que acceden e interaccionan durante la evolución de la misma. Dicha información será accesible por el gestor de la campaña en el panel de administración. Con esta descripción general, el usuario encargado de gestionar una campaña tendrá un sistema mediante el cual gestionar la promoción de un producto de forma específica y personalizada. El desarrollo de este sistema ha sido implementado haciendo uso de la metodología SCRUM. A continuación se detallan los sprints desarrollados, coste en tiempos y una breve descripción de su contenido:  1º sprint (3 semanas): Análisis y Diseño del sistema. Se han analizado los requisitos del cliente (TURASA), aplicaciones similares del mercado y trabajos que habían sido realizados por otras empresas para realizar las campañas de promoción turística de Andalucía. Posteriormente se han creado y diseñado los diferentes diagramas UML para el desarrollo del sistema.  2º sprint (3 semanas): Desarrollo. Se han implementado las clases y métodos necesarios para crear el núcleo principal de la aplicación, la gestión de microsite y teaser.  3º sprint (3 semanas): Continuación del desarrollo. En esta iteración se ha implementado la gestión de concursos y encuestas.  4º sprint (3 semanas): Continuación del desarrollo. En esta iteración se ha implementado la gestión de usuarios, eventos y envío de newsletters.  5º sprint (2 semanas): Continuación del desarrollo. En esta iteración se ha implementado la integración con Google Analytics y redes sociales.  6º sprint (2 semanas): Pruebas y corrección de errores. Se ha procedido realizar pruebas y correcciones generales.  7º sprint (1 semana): Despliegue del sistema y puesta en producción. Se ha generado la documentación necesaria para su puesta en marcha en los servidores de TURASA y su integración con el portal “andalucia.org”. Figura 1.8. Página principal de andalucia.org. Capítulo 1. Introducción | 9 Organización del Trabajo Fin de Grado 1.3. La memoria del presente trabajo fin de grado se divide en una serie de capítulos que se comentan a continuación. En el capítulo 2 (tecnologías y herramientas utilizadas), se profundiza en los principales medios utilizados para el desarrollo del proyecto. En el capítulo 3 (análisis, diseño e implementación de la aplicación), se da una descripción exhaustiva de la aplicación, delimitando el alcance del proyecto y detallando el diseño (casos de uso y diagramas UML) e implementación del mismo. En el capítulo 4 (conclusiones y futuros trabajos), se presentan las conclusiones sobre la realización de la aplicación, comentando en qué grado se han conseguido los objetivos iniciales y mostrando posibles líneas de futuro para la expansión de la aplicación. En los apéndices se incluyen documentos adicionales acerca de la instalación y configuración de la aplicación en el entorno de producción, así como el manual de usuario para su manejo. Por último, en la bibliografía se citan las fuentes de información consultadas durante la realización del proyecto. 11 Capítulo 2. Tecnologías y herramientas utilizadas En este capítulo daremos una visión general de las distintas tecnologías y herramientas empleadas en este proyecto. La principal herramienta para el desarrollo de este proyecto ha sido el framework Django [14], un framework en Python [13] para el desarrollo de aplicaciones web. Para complementar el desarrollo con esta herramienta hemos usado las tecnologías HTML5 [15], Javascript [18], Jquery [19], CSS3 [16] y Foundation5 [20] para el desarrollo del frontend y PostgreSQL [21] como base de datos. Además, para llevar a cabo las diferentes tareas asociadas al proceso de desarrollo de software se han utilizado las siguientes herramientas complementarias:  Para agilizar su desarrollo hemos utilizado el editor Pycharm [22] creado por JetBRAINS. Pycharm es nuestro editor de código para Python, HTML5, Javascript y CSS3.  Para interactuar con la base de datos se ha optado por pgAdmin [23], un gestor de base de datos para PostgreSQL.  Para la gestión del código y su versionado se ha utilizado Mercurial y como herramientas visual TortoiseHg [24].  La aplicación ha sido modelada previamente con el lenguaje UML [25] usando la herramienta MagicDraw [26].  Durante su desarrollo se ha aplicado la metodología ágil SCRUM [27] y como herramienta para el control de las tareas Taiga [28].  Para la puesta en producción del producto se ha utilizado el servidor de aplicaciones Nginx [29]. Python 2.1. Python [13] es un lenguaje de programación interpretado, con una sintaxis limpia, elegante y con un tipado dinámico. Este lenguaje es multiplataforma y soporta la programación orientada a objetos, la programación imperativa y la programación funcional. | Gestión y promoción de campañas 12 Este lenguaje de programación fue creado por Guido van Rossum a finales de los años ochenta y lo llamó así por los cómicos británicos Monty Python. Figura 2.1. Logotipo de Python. Aunque ya hemos nombrado algunas de sus características, entre las destacables cabe mencionar:  Simple: el lenguaje y la sintaxis que usa Python es sencilla, lo que permite centrarse más en la solución del problema que en la sintaxis del lenguaje.  Fácil de aprender: al disponer de una sintaxis muy simple, es muy sencillo de aprender.  Libre y de código abierto: Python es un claro ejemplo de FLOSS (Free and Open Source Software), gracias a la disponibilidad de su código fuente, se permite su estudio y modificación con la idea de que cualquier persona pueda mejorar el lenguaje.  Lenguaje de alto nivel: Evita tener que manejar elementos de bajo nivel como la reserva de memoria, centrándonos en la solución del problema.  Portable: Los programas realizados con Python pueden ser exportados a otras plataformas como Windows, Linux o Macintosh, entre las más populares.  Interpretado: No requiere compilación del programa.  Orientado a objetos: permite la programación orientada a objetos.  Integración: puedes incluir código Python en otros programas no necesariamente del mismo lenguaje.  Librerías extendidas: Python dispone de una extensa librería con métodos y funciones que abrevian el desarrollo de un programa. En Python se incluye un modo interactivo o un modo consola donde podemos lanzar el código de Python para poder probar código o realizar operaciones. La versión de Python escogida para el desarrollo de este proyecto viene impuesta por las especificaciones del propio producto, la versión escogida es la 2.7. Django 2.2. Django [14] es un framework de código abierto desarrollado en Python para la creación de aplicaciones web. Capítulo 2. Tecnologías y herramientas utilizadas | 13 Django está basado en el patrón de diseño Model Template View, algo parecido a lo que conocemos como Modelo Vista Controlador y que tiene su equivalencia con respecto a él (ver Figura 2.2 y Figura 2.3). Figura 2.2. Modelo Vista Controlador en Django. Figura 2.3. Equivalencia entre Modelo Vista Controlador y Template View Model. Donde Template (*.html) es la Vista, View (urls.py y view.py) es el Controlador y Model (models.py) es el Modelo. Este framework nace en el otoño de 2003 a partir de la creación de varias páginas dedicadas a diarios de noticias de la World Company de Lawrence, Kansas. La decisión de realizar este framework, surge de la necesidad de Adrian Holovaty y Simon Willison por adaptar sus diarios a continuos cambios en reducidos espacios de tiempo. En el verano del año 2005, la mayoría de los sitios de World Online estaban desarrollados con Django, y fue entonces cuando el equipo de World Online (Adrian Holovaty, Simon Willison y Jacob Kaplan-Moss) decidió liberar como código abierto el framework. Por lo que en Julio de 2005 fué liberado y llamado Django en honor a el guitarrista de jazz Django Reinjardt. | Gestión y promoción de campañas 14 Figura 2.4. Página principal de Django. Entre las premisas destacables de Django se encuentran:  Acoplamiento débil. Cada capa es independiente y desconoce completamente a las demás.  Hacer mucho con poco código.  Desarrollos rápidos.  DRY, Don´t Repeat Yourself.  Explicit is better than implicit.  Consistencia.  Eficiencia, seguridad, flexibilidad y simplicidad. De las características más importantes que nos ofrece el framework Django, podemos encontrar:  Una interfaz de administración para administrar los modelos de datos sin necesidad de programar nada.  API para trabajar con base de datos  Incorpora un ORM, Oriented Relational Model (mapeador objeto-relacional)  Sistema de plantillas basado en un lenguaje de etiquetas con herencia.  Un dispatcher de URLs basado en expresiones regulares.  Sistema de middleware para añadir funcionalidades adicionales.  Soporte multilenguaje  Documentación extensa. El gestor de campañas es una aplicación Django, que se acopla dentro el resto de aplicaciones que conforman la plataforma de la Comunidad Turística Andaluza de andalucia.org Capítulo 2. Tecnologías y herramientas utilizadas | 15 HTML5 2.3. HTML5 [15] es la última versión de HTML (Hyper Text Markup Language), en ella se han incluido nuevos elementos, atributos y comportamientos adaptándose a las nuevas tecnologías y las necesidades de los nuevos sitios web. Figura 2.5. Logotipo de HTML5 HTML5 es el resultado de la colaboración entre el World Wide Web Consortium (W3C) y el Web Hypertext Appliction Technology Working Group (WHATWG). Entre las nuevas características que aporta HTML5, podemos destacar:  Elemento Canvas, que permite generar gráficos estáticos y animaciones.  Elementos de audio y vídeo.  Almacenamiento de datos “offline”  Elementos asociados con el contenido: article, footer, header, nav o section.  Nuevos controles: calendar, date, time, email, url, search, etc. Aunque HTML5 aún no es un estándar oficial, en general es bien soportado por las últimas versiones de los navegadores más populares como son Firefox, Chrome o Internet Explorer. HTML5 nos ha ayudado a definir el sistema de templates por defecto que contiene la aplicación. JavaScript 2.4. JavaScript [18] es un lenguaje interpretado. Este tipo de lenguajes son ideales para trabajar en aplicaciones de desarrollo web, ya que los propios navegadores son los que interpretan, y por tanto ejecutan, los programas escritos en dicho lenguaje. Las dos principales características de JavaScript son, por un lado, que es un lenguaje basado en objetos, y por otro, que es un lenguaje orientado a eventos, debido por supuesto al tipo de entornos de ventanas en los que se utiliza. Esto implica que gran parte de la programación en JavaScript se centra en describir objetos (con sus variables de instancia y métodos de "clase") y escribir funciones que respondan a ciertos eventos (movimientos del ratón, pulsación de teclas, etc.). | Gestión y promoción de campañas 22 Mercurial 2.11. Mercurial es un sistema de control de versiones de código. Este sistema es multiplataforma (Linux, Windows y Mac OS X) y ha sido implementado en su mayor parte en Python. Fué creado por Matt Mackall y el código se encuentra disponible bajo licencia GNU GPL 2. Mercurial nos permite de forma sencilla y mediante línea de comandos, gestionar el versionado de nuestro código. Entre las características de mercurial hay que destacar:  Sistema distribuido  Rendimiento y escalabilidad  Gestión robusta de archivos de texto y binarios  Opciones avanzadas de ramificación e integración entre ramas. TortoiseHg 2.12. TortoiseHg [24] es un cliente visual para el sistema de control de versiones de Mercurial. Es multiplataforma y puede ser usado también por línea de comandos. Figura 2.13. Interfaz de TortoiseHg Entre sus características destacamos:  Explorador de repositorios.  Dialogo para realizar commit.  Soporte para las herramientas visuales de diff/merge.  Sincronización con otros repositorios del mismo proyecto.  Interfaz gráfica intuitiva para manejar Mercurial. Capítulo 2. Tecnologías y herramientas utilizadas | 23 UML 2.13. UML (Unified Modeling Language) [25] es un lenguaje para el modelado de sistemas software. Dicho lenguaje es un estándar que nos permite de forma gráfica definir un sistema, detallar sus aspectos, y documentar y construir el mismo. Podemos diferenciar entre tres tipos de diagramas UML: de estructura, de comportamiento y de interacción. Estos tipos de diagramas muestran diferentes aspectos del sistema representado.  Diagramas de estructura: o Diagrama de clases o Diagrama de objetos o Diagrama de componentes o Diagrama de estructura compuesta o Diagrama de paquetes o Diagrama de despliegue  Diagramas de comportamiento: o Diagrama de casos de uso o Diagrama de actividades o Diagrama de estado  Diagramas de interacción: o Diagrama de secuencia o Diagrama de colaboración/Diagrama de comunicación o Diagrama de tiempo En este proyecto nos hemos ayudado de UML para especificar la aplicación que hemos creado. MagicDraw 2.14. MagicDraw [26] es una herramienta gráfica para el diseño y análisis de UML, que se utiliza para el modelado, documentación, construcción y mantenimiento de sistemas software orientados a objetos. Gracias a esta herramienta es posible realizar diagramas de casos de uso, diagramas de interacción, de clases, de estado, de despliegue, etc., de forma rápida y sencilla. En este proyecto se ha usado para realizar el análisis y el diseño UML y también para su correspondiente documentación. | Gestión y promoción de campañas 24 Figura 2.14. Interfaz de MagicDraw para crear diagramas UML. Taiga 2.15. Taiga [28] es una herramienta que nos permite gestionar el seguimiento de nuestro producto software bajo una metodología ágil SCRUM y KANBAN. Este gestor de proyectos ha sido desarrollado con Django y Python para la parte backend y con AngularJS para el frontend. Es un producto de código abierto con repositorio en Github, con lo cual nos ofrece la posibilidad de instalarlo en nuestros propios servidores. Figura 2.15. Gráfica y pizarra de tareas de un sprint en Taiga 25 Capítulo 3. Análisis, Diseño e Implementación de la Aplicación El diseño de una aplicación es un paso fundamental que permite que el tiempo de implementación y verificación de la misma disminuya. Un buen diseño asegura el desarrollo de un sistema estable, robusto y eficiente, fácil de comprender, modificar y ampliar. En este capítulo se pretenden explicar las diferentes decisiones que han sido tomadas en el diseño e implementación de la aplicación, y de los requisitos que han conducido a tomar estas decisiones. En primer lugar se describe el funcionamiento general del sistema y los requisitos que especifican el comportamiento deseado. En segundo lugar se explican las decisiones tomadas en el diseño y que dan base al correcto funcionamiento de la aplicación. Y finalmente se describen algunos aspectos destacados de la implementación de la aplicación. Requisitos del sistema 3.1. A lo largo de este apartado se hace un análisis exhaustivo de los requisitos de la aplicación, describiendo todas las posibles funcionalidades que presentará, la utilidad de las mismas y los resultados esperados tras su realización. Todo ello está acompañado de los diagramas de casos de uso que facilitan la elaboración del producto software. Para este cometido la aplicación se divide en diferentes escenarios posibles. Cada uno de ellos se corresponde con la interacción de los diferentes elementos o componentes del sistema y los posibles perfiles de usuarios: administrador, gestor, usuario registrado y usuario no registrado. En la sección 3.1.1 se hace una introducción sobre el funcionamiento general del sistema para tener una idea de las necesidades del mismo, y en la sección 3.2 se habla de la gestión del sistema y de los distintos elementos con los que interactúan los perfiles de usuarios del mismo. | Gestión y promoción de campañas 26 Funcionamiento resumido del sistema 3.1.1. Para poder delimitar cuáles son las finalidades del proyecto, es fundamental comprender cuál es el comportamiento básico del sistema Gestor de Campañas y los diferentes subsistemas y actores que se pueden dar en él. El sistema se compone de dos subsistemas principales, la interfaz de administración y el microsite de la campaña. Este último encapsula dentro de él las siguientes funcionalidades: documento, menú, teaser, concursos, eventos e invitaciones y estadísticas. Los actores que pueden interaccionar con estos diferentes escenarios son el administrador, gestor, usuario registrado y usuario no registrado. Figura 3.1. Caso de uso: subsistemas administración y microsite. El subsistema de administración tiene acceso restringido y sólo los usuarios de tipo administrador y gestor podrán acceder a ella. Dentro del subsistema de administración, el administrador es quién concede permisos para la gestión del microsite al gestor. Tanto administrador como gestor tienen permisos para gestionar el sistema Gestor de Campañas. Desde el subsistema de administración se puede gestionar el microsite que es creado con el fin de realizar una campaña. Dicho microsite está compuesto por diferentes elementos, entre los que destacamos: documentos, menú, plantillas, teaser, concurso, eventos e invitaciones. También en el subsistema de administración podremos consultar estadísticas sobre la campaña del microsite. Definimos de forma resumida cada uno de los elementos:  Documentos: nos permiten gestionar el contenido a mostrar en una página del microsite.  Menús: permiten gestionar menús para acceder a los contenidos generados dentro del microsite.  Teaser: es un documento especial, acotado en el tiempo, que permite promocionar una campaña de forma previa.  Concurso: permite a los usuarios participar dentro del microsite añadiendo texto y elementos multimedia.  Eventos e invitaciones: permite gestionar los eventos que se dan para una campaña dentro del microsite, y permiten el envío de invitaciones y difusión de los mismos.  Estadísticas: permite consultar estadísticas sobre las interacciones de los usuarios con el microsite y todos sus componentes. Capítulo 3. Análisis, Diseño e Implementación de la Aplicación | 27 Desde los diferentes elementos que componen el microsite, se permite la integración con otras plataformas y redes sociales como YouTube. El microsite creado es accesible por los usuarios registrados y los usuarios no registrados. Aunque a diferencia de los usuarios no registrados, los usuarios registrados pueden interaccionar participando en los concursos. Tanto usuarios registrados como no registrados tienen acceso a todos los documentos que componen el microsite, así como sus respectivos menús, teaser y eventos e invitaciones. Casos de uso 3.2. En este apartado se van a documentar los casos de uso. Éstos se van a documentar, aportando una descripción textual de cada uno de ellos, y usando diagramas de actividad en los casos de uso más complejos. Casos de uso del subsistema administración del Gestor 3.2.1. de Campañas El sistema Gestor de Campañas dispone de una interfaz de administración que permite gestionar y configurar campañas para la promoción de productos. Esta gestión es llevada a cabo por el administrador y el gestor. En la interfaz de administración disponemos de los siguientes elementos:  Permisos de gestión de campañas  Plantillas  Microsite. Este incluye a su vez: o Documentos o Menú o Teaser o Concurso o Eventos e invitaciones o Estadísticas Permisos de Gestión de Campañas Los permisos de campaña, son gestionados exclusivamente por el administrador, que es quién concede los permisos de gestor de campañas a un usuario registrado en el sistema. Un gestor podrá gestionar más de una campaña, pero sólo aquellas campañas a las que se les haya concedido permisos. | Gestión y promoción de campañas 28 Figura 3.2. Caso de uso: administrador y gestor. Plantillas Para poder personalizar al máximo una campaña, las plantillas nos permiten definir plantillas en HTML usando el mismo lenguaje que Django usa para su sistema de plantillas. Para complementar ésta personalización también se permite el uso y la adición de elementos que complementen al HTML, como son el CSS, imágenes y ficheros JavaScript. Microsite y documentos El elemento central de la campaña es el microsite. El microsite está compuesto por el conjunto de documentos, plantillas, menús, concursos, teasers y eventos e invitaciones. La configuración de estos, dan como resultado el microsite. El elemento principal de un microsite es el documento, éste nos permite la gestión de los contenidos de una página del microsite. Los elementos disponibles para configurar dentro de un microsite son:  Nombre: nombre para identificar el documento. Capítulo 3. Análisis, Diseño e Implementación de la Aplicación | 29  Slug: URL asociada al documento.  Cuerpo: contenido central del documento.  Contenidos para el posicionamiento: etiquetas meta para título, descripción y palabras clave.  Contenidos multimedia: fotos, álbumes multimedia y vídeos.  Buscador: buscador que se alimenta de contenidos del Portal principal sobre el que cuelga el microsite.  Sección relacionada: permite relacionar secciones del portal principal con el microsite.  Estados de la publicación: establece el estado y su visibilidad de forma pública. Los tres estados disponibles son: borrador, publicado y pendiente.  Etiquetas: define etiquetas para identificar al documento.  Plantilla: permite escoger una plantilla de las disponibles para mostrar el contenido.  Ítems: permite añadir contenido extra al documento. Estos permiten darle versatilidad a un documento pudiendo añadir y configurar tantos como sean necesarios. Entre los ítems disponibles encontramos: o Ítem de texto: añade contenido de texto al documento. o Ítem de concurso: añade un concurso al documento. o Ítem de video: añade videos al documento. El poder añadir varios ítems de videos, nos permite la posibilidad de agruparlos y diferenciarlos. o Ítem de foto: añade una foto al documento. o Ítem de audio: añade contenido de audio al documento. o Ítem de fichero extra: añade cualquier tipo de fichero para su descarga en el portal. Pensado sobre todo para añadir ficheros en formato PDF. o Ítem de álbum multimedia: añade álbumes multimedia al documento. El poder añadir varios ítems de álbum multimedia, nos permite la posibilidad de agruparlos y diferenciarlos. o Ítem de carrusel: añade un carrusel al documento. En cada documento del microsite, se gestiona la información y el contenido que aparece en una página del mismo. Cada uno de los documentos compone las diferentes páginas que se pueden visualizar dentro del microsite. Menú Para navegar dentro de una campaña, es fundamental disponer de un menú de navegación, donde configurar la jerarquía de navegación dentro del microsite. En el microsite se permite configurar dicha jerarquía de navegación de modo que se distinguen tres tipos de menús: | Gestión y promoción de campañas 30  Menú principal: listado de enlaces para uso como menú principal del microsite.  Menú secundario: listado de enlaces del portal, para su uso como menú de menor relevancia que el principal, dentro del microsite.  Menú recomendamos: listado de enlaces del portal, para añadir enlaces extras y acceso a contenido adicional. Dentro de cada enlace de un menú se permite definir si dicho elemento es padre de otro elemento del menú, pudiendo crear una jerarquía en forma de árbol dentro de cada elemento del menú. Teaser Teaser es un documento, dónde podremos seleccionar un rango de fechas en el cual será accesible. El slug de un teaser colgará directamente de la URL principal del portal. Concurso Un concurso estará definido por los siguientes elementos:  Nombre: nombre asignado al concurso.  Slug: URL para la página del concurso.  Fecha de inicio y fin: Define el rango temporal en el que es posible participar.  Tipo de concurso: permite definir si el concurso es de vídeo, texto e imagen, pudiendo realizar todas las posibles combinaciones entre estos elementos. Además se permite definir si los vídeos serán publicados en el perfil YouTube del portal. También se permite la opción de poder etiquetar las respuestas por el usuario que concursa.  Definir etiquetas del formulario y plantillas de forma personalizada: permite definir cada una de las etiquetas que componen el formulario y asignar una plantilla personalizada para mostrar el contenido del concurso.  Personalización de textos de errores, validación y de aceptación del concurso. El concurso podrá ser añadido a cualquier documento, mostrando el comportamiento de la Figura 3.3 Capítulo 3. Análisis, Diseño e Implementación de la Aplicación | 31 Figura 3.3. Diagrama de flujo par el formulario de un concurso Eventos e invitaciones Se pueden definir cuantos eventos se precisen dentro de una campaña. Los eventos nos ayudan a distinguir momentos especiales dentro de una campaña. Estos eventos provienen del portal, pero a ellos se les añade una funcionalidad extra para su inmersión en el Gestor de Campañas. Con ello podremos tener eventos relacionados con una campaña, con la funcionalidad extra de añadirle una plantilla para personalizar su aspecto y además añadir invitaciones para difundir su información vía mail tanto a usuarios registrados como a usuarios no registrados. Dentro de un evento se pueden generar un listado de invitaciones. Cada invitación se compone de:  Datos de la invitación: contiene información que identifica la invitación.  Usuarios registrados: dispone de un listado de usuarios registrados, los cuales pueden ser seleccionados e invitados.  Usuarios no registrados: se pueden añadir usuarios que no estén registrados en la plataforma, y en el listado creado de usuarios no registrados, seleccionar los que se deseen para añadirlos a la invitación.  Usuarios invitados: listado de usuarios (tanto usuarios registrados como no registrados) invitados al evento. En el listado se registra si el sistema ha enviado el mail al usuario, si este acepta o rechaza la invitación y si el usuario añade algún comentario sobre el mismo.  Flujo de trabajo de la invitación: define los pasos que sigue el proceso de invitación. En él se definen los siguientes aspectos: | Gestión y promoción de campañas 38 Campaign: Clase que hereda de la clase Section de la aplicación section del portal andalucia.org. Esta clase es la que permite crear una campaña y gestionar todo lo que ella conlleva. DocumentCampaign: Clase que hereda de la clase Document del portal andalucia.org. Gestiona el contenido de cada una de las vistas que componen el microsite de una campaña. Al resto de atributos para gestionar el contenido que hereda de Document, se le añaden el atributo related_campaign que lo relaciona con Campaign y el atributo custom_template que lo relaciona con CustomTemplate para asignarle una Plantilla personalizada. Figura 3.9. Diagrama de clases (1 de 5) TeaserCampaign: Clase que hereda de DocumentCampaign y que está diseñada para añadir teasers a una campaña. A este documento especial se le añade una fecha de inicio y de fin (start_datetime y end_datetime respectivamente). ManageGroupCampaign: permite relacionar un usuario con el grupo de permisos para poder editar una campaña. Donde el atributo campaign, user y group, son la campaña, usuario y grupo de permisos, respectivamente. BasesContestCampaign: contiene atributos para definir bases legales para los concursos. Permite añadir un fichero descargable con las bases, además de establecer un título y descripción para las mismas. Capítulo 3. Análisis, Diseño e Implementación de la Aplicación | 39 Figura 3.10. Diagrama de clases (2 de 5) ContestCampaign: define el concurso de una campaña. Entre los atributos más destacables se encuentran: start_date para marcar el comienzo del concurso; end_date para marcar el final; related_campaign para indicar en que campaña se encuadra; bases_contest hace referencia a las bases del concurso BasesContestCampaign; video_contest, image_contest y text_contest para indicar si el concurso admite respuesta de video, imagen y texto, respectivamente; video_contest_upload_youtube es un booleano para indicar si se sube el video a la plataforma YouTube una vez sea publicado; tags_contest para indicar si la respuesta ha de ser etiquetada. También contiene atributos para controlar el número de respuestas máximas, el aspecto o el contenido del formulario del concurso y sus vistas que hacen referencia a la clase CustomTemplate. UserContestCampaign: hereda de BaseLocatable, que permite añadir la localización. Entre sus atributos incluye: user, para definir el usuario concursante; contest, para indicar a que concurso corresponde la respuesta; video, image y text contienen el video, imagen y texto según el concurso lo requiera; youtube_id, el identificador de YouTube si el video ha sido publicado en la misma; status, para | Gestión y promoción de campañas 40 indicar el estado de publicación de la respuesta del concurso; tags, las etiquetas de que han sido definidas para esa respuesta; y winner, que indica si la respuesta es ganadora del concurso. CustomTemplate: esta clase hereda del paquete “django-dbtemplates”, y nos permite añadir código HTML en el atributo custom_html. Además, permite añadir estilos personalizados con custom_css. Esta plantilla podrá estar relacionada o no con una campaña, indicando así su ámbito de disponibilidad para una campaña en exclusiva o para todas. CustomStyleCssFile, CustomTemplateImage y CustomJavascriptFile: son clases que a través del atributo custom_template están relacionadas con una plantilla, y que permiten añadir ficheros de tipo CSS, imagen y JavaScript, para ser usados en su plantilla relacionada. Figura 3.11. Diagrama de clases (3 de 5) BaseItem: hereda de las clases RealInstanceMixin y LinkProvider, que nos añaden métodos y atributos requeridos, como son utilidades para las instancias que hereden de BaseItem o campos para añadir enlaces a contenidos como podría ser un DocumentCampaign. BaseItem, es una clase que contiene elementos comunes que define un ítem, entre ellos contiene un atributo related_document, con el cual se relaciona un ítem con un CampaignDocument, para extender la gestión de sus Capítulo 3. Análisis, Diseño e Implementación de la Aplicación | 41 contenidos. También contiene los atributos: order, para definir como se ordenan los ítems; status, para indicar si su contenido está publicado o no; url, URL externa para añadir un enlace; ga_tracker, para añadir una etiqueta que identifique el ítem en Google Analytics; title_link, titulo para identificar la URL externa; y alternate_text, que está definido para ser usado como un texto alternativo. Figura 3.12. Diagrama de clases (4 de 5) TexItem: hereda de BaseItem, incluyendo los atributos item_title y item_description, para añadir un título y descripción al ítem respectivamente. A su vez heredan de este:  VideoItem: permite seleccionar un conjunto de videos del portal, tiene una relación de muchos a muchos con la clase Video.  PhotoItem: permite añadir una imagen.  AudioItem: permite añadir un fichero de audio.  ExtraFileItem: permite añadir ficheros extra. | Gestión y promoción de campañas 42  MultimediaAlbumItem: permite seleccionar un MultimediaAlbum de los existentes en el portal.  CarouselItem: permite seleccionar un Carousel de los existentes en el portal. SocialItem: permite definir patrones para compartir contenido en redes sociales. Está compuesto por los atributos: name, para identificar la plataforma con la que se comparte; class_style, para definir estilos al ítem; share_url, para definir un patrón con la URL que comparte el contenido; tag_ga, para establecer la etiqueta que nos identifica que se ha compartido un contenido en Google Analytics. Figura 3.13. Diagrama de clases (5 de 5) EventCampaign: hereda de la clase Event, contenida en el portal. Esta nos permite definir eventos dentro de una campaña. Con el atributo related_campaign, relacionamos un evento con una campaña. Los eventos también nos permiten definir las plantillas que muestra el evento o las que se usarán para enviar notificaciones a los usuarios del evento. Capítulo 3. Análisis, Diseño e Implementación de la Aplicación | 43 InvitationEventCampaign: controla el sistema de invitaciones a un evento. Esta clase contiene un atributo name para identificar las invitaciones al evento y otro atributo related_event para identificar el EventCampaign con el cual está relacionado. InvitationWorkflow: permite definir el flujo de trabajo que sigue las invitaciones a un evento. Este flujo de trabajo se relaciona con un sistema de invitaciones (InvitationEventCampaign) mediante el atributo related_invitation_event. Entre los atributos para definir este flujo de trabajo de las invitaciones a un evento, tenemos:  activate_send_mail y activate_send_mail_date: indican que el sistema puede enviar la invitación y a partir de qué fecha se envían los mails, respectivamente.  subject_email, invitation_email_template e invitation_email_template_html: son los atributos que definen el asunto y la plantilla que muestra la invitación en el mail, también se adjunta la plantilla en formato HTML completo.  answer_subject_email, answer_invitation_email_template e answer_invitation_email_template_html: son los atributos que definen el asunto y la plantilla que son enviados como respuesta a una invitación a través de mail, también se adjunta la plantilla en formato HTML completo en el mismo.  answer_subject_email_accepted, answer_invitation_accepted_email_template e answer_invitation_accepted_email_template_html: son los atributos que definen el asunto y la plantilla que son enviados como respuesta a una aceptación de una invitación a través de mail, también se adjunta la plantilla en formato HTML completo en el mismo.  answer_subject_email_declined, answer_invitation_declined_email_template e answer_invitation_declined_email_template_html: son los atributos que definen el asunto y la plantilla que son enviados como respuesta a un rechazo de una invitación a través de mail, también se adjunta el template en formato HTML completo en el mismo.  share_subject_email, share_invitation_email_template e share_invitation_email_template_html: son los atributos que definen el asunto y la plantilla de un mail que es enviado cuando un usuario comparte la invitación a un evento, también se adjunta la plantilla en formato HTML completo en el mismo.  invitation_startworkflow_template, invitation_commentworkflow_template, invitation_shareworkflow_template, invitation_endworkflow_template: son las plantillas correspondientes con la vista principal de la invitación, la vista para añadir un comentario cuando se acepta una invitación, la vista para compartir la invitación y la vista que se muestra cuando se termina el flujo de trabajo de la invitación. Opcionalmente, disponemos de los atributos document_startworkflow_template, document_commentworkflow_template, | Gestión y promoción de campañas 44 document_shareworkflow_template y document_endworkflow_template, que añaden contenido extra a las plantillas mencionadas anteriormente. UserNoRegisterInvitedCampaign: clase que añade usuarios que no están registrados en la plataforma y a los cuales se les quiere enviar una invitación. Estos vendrán definidos por los atributos: full_name, para definir el nombre completo; email, para establecer el mail al cual se va a enviar la invitación; position, posición dentro de la empresa; company, compañía a la que pertenece; y related_campaign, para establecer la campaña con la cual están relacionados. MailInvitationEventCampaign: clase que está relacionada con InvitationEventCampaign, y con la cual controlamos las invitaciones que han sido creadas para su envío y la interacción de los usuarios con las mismas. Para ello, se compone de los siguientes atributos: user, para definir si es usuario registrado al que se le envía una invitación; no_registered_user, relacionado con UserNoRegisterInvitedCampaign para identificar a un usuario no registrado en la plataforma; is_sent, para indicar si ha sido enviado el mail de invitación; comment, este campo contendrá un comentario añadido por el usuario; will_attend, para indicar si el usuario acepta la invitación; y changed_data, que indica que los datos de la invitación han sido modificados. Diseño de la interfaz de administración Django nos permite definir mediante clases, que hacen uso de las clases definidas en el diseño descrito, una interfaz de administración. En la Figura 3.14, Figura 3.15 y Figura 3.16, disponemos del diseño de clases que se ha usado para personalizar dicha interfaz. Entre estas clases, listamos las más destacadas y explicamos su funcionalidad:  ManageCampaignGroupAdmin: Añade a la interfaz de administración el acceso a configurar y gestionar el listado de permisos que se le asignan a usuarios para gestionar una campaña.  HiddenModelAdmin: oculta las clases que heredan de ella a los usuarios que no tiene permisos de superusuario o administrador.  CampaignAdmin: provee una interfaz que contiene los objetos de la clase Campaign, y que permite gestionar las campañas.  DocumentCampaignRelatedBaseItemModelAdmin: relaciona la clase DocumentCampaign con la clase BaseItem, para poder añadir los diferentes elementos que heredan de BaseItem a un DocumentCampaign. Esta clase añade una pestaña en la interfaz de administración de un DocumentCampaign con el listado de ítems (TextItem, VideoItem, etc.) para poder gestionar los ítems relacionados con el documento.  CampaignRelatedDocumentCampaignModelAdmin: relaciona la clase de DocumentCampaign con Campaign, permitiendo mostrar en una pestaña de Capítulo 3. Análisis, Diseño e Implementación de la Aplicación | 45 la interfaz de administración de una campaña, el listado de documentos asociados a la misma para su gestión.  CampaignRelatedContestAdmin: esta clase relaciona la clase ContestCampaign con la propia Campaign, y muestra en una pestaña de la interfaz de administración de la campaña, el listado de concursos relacionados para poder gestionarlos.  CampaignRelatedEventCampaignAdmin: esta clase relaciona la clase Campaign con EventCampaign, de tal forma que en la interfaz de administración de Campaign se añade una pestaña que contiene un listado de EventCampaign relacionados. Figura 3.14. Diagrama de clases de las clases relacionadas con la interfaz de administración (1 de 3, ver Figura 3.15 y Figura 3.16) | Gestión y promoción de campañas 46 Figura 3.15. Diagrama de clases de las clases relacionadas con la interfaz de administración (2 de 3, ver Figura 3.14 y Figura 3.16) Capítulo 3. Análisis, Diseño e Implementación de la Aplicación | 47 Figura 3.16. Diagrama de clases de las clases relacionadas con la interfaz de administración (1 de 3, ver Figura 3.14y Figura 3.15)  CustomTemplateAdmin: añade una interfaz de administración para gestionar los objetos de tipo CustomTemplate.  DocumentCampaignRelatedCustomTemplateModelAdmin: esta clase relaciona la clase DocumentCampaign con CustomTemplate, de modo que en la interfaz de administración de un documento disponemos de una pestaña donde consultar la plantilla que tiene asociada.  InvitationEventCampaignRelatedInvitationWorkflowModelAdmin: esta clase relaciona la clase InvitationEventCampaign con InvitationWorkflow, de modo que en la vista de invitación de un evento mostramos una pestaña para configurar el flujo de trabajo de la invitación.  RelatedEventInvitationUserAdmin y RelatedEventInvitationUserNoRegisterdAdmin: añaden a la interfaz que | Gestión y promoción de campañas 54 class Command(BaseCommand): help = u"Send pending invitations to events of campaings to users" option_list = BaseCommand.option_list + ( make_option('-m', '--max-to-send', default='100', dest='max_to_send'), make_option('-s', '--subject', default='Invitation', dest='subject'), ) def handle(self, *args, **options): max_to_send = int(options.get('max_to_send')) subject = options.get('subject', '') activate('es') # all the emails will be in spanish for invitation in MailInvitationEventCampaign.objects.filter(is_sent=False)[:max_to_send]: invitation_user_email='' if invitation.user: invitation_user_email = invitation.user.email elif invitation.no_registered_user: invitation_user_email = invitation.no_registered_user.email print u'Enviando invitacion del evento %d al usuario %s' % (invitation.related_invitation_event.related_event.id, invitation_user_email) _send_invitation_email(invitation) time.sleep(5) Figura 3.20. Clase que ejecuta el comando send_pending_event_invitations_campaign API de YouTube 3.4.8. Como requisito de la aplicación, se ha desarrollado la posibilidad de poder subir vídeos a YouTube, procedentes de respuestas de los concursos y cuando estos sean publicados en el portal. Para poder conseguir dicho control, en la clase que se define el concurso disponemos de un atributo que indica si los videos son subidos a YouTube. Cuando se produce la publicación de un video que es respuesta a un concurso, la acción que cambia el estado de una respuesta a pública, consulta si el concurso debe subir el vídeo a YouTube, y si es cierto, entonces procede a la comunicación con la dicha plataforma y la subida. El método está implementado dentro del fichero “api_youtube.py”, y en él se gestiona la autenticación de la conexión con la Api de YouTube (versión 3) y el método de subida. API de Google Analytics 3.4.9. Para completar la gestión de una campaña, es importante tener referencia del éxito de la misma, ello lo podemos comprobar obteniendo estadísticas del microsite. Se ha desarrollado una vista en la que se pueden consultar las estadísticas relacionadas con el track de Google Analytics en la campaña. En el fichero “api_analytics.py” encontramos desarrollado los métodos de autenticación y como se obtiene información sobre una campaña que dispone de un identificador de Google Analytics. 55 Capítulo 4. Conclusiones y Futuros Trabajos En este punto se han de recordar los objetivos que se indicaron en el capítulo inicial para reflexionar en qué grado se han alcanzado las metas que fundamentan este trabajo fin de grado. Además, se dará una lista de posibles ampliaciones para expandir las funcionalidades de la aplicación y líneas de trabajo futuras. Conclusiones 4.1. Volviendo al primer capítulo hay que recordar que la finalidad de este proyecto es la realización de un Gestor de Campañas para el cual se han explorado las posibilidades que ofrece internet para la promoción online de un producto. Para dar sentido a la aplicación, ésta se enmarcó dentro del contexto de sistemas que gestionan campañas publicitarias online con los diferentes mecanismos que también aportan las redes sociales y herramientas de analítica web, entre ellas encontramos AccumbaMail, Woobox, Bloonder o Google Analytics. Con los productos analizados, se estudió la estrategia y requisitos que se necesitaban para poder crear una herramienta que gestionara campañas para promocionar el turismo en Andalucía y que se integrara dentro de la plataforma de la Comunidad Turística Andaluza “andalucia.org”. En la solución desarrollada, se han incluido necesidades cubiertas por otras herramientas para realizar las promociones turísticas pero integrándolas dentro de la plataforma “andalucia.org”, pero con la ventaja de tener los datos centralizados, obteniendo un mayor control sobre la campaña. Por todo ello, la solución aportada ha mejorado la eficiencia de gestión de una campaña, supliendo a otras herramientas que se usaban de forma externa y complementaria. Las tecnologías utilizadas para desarrollar esta aplicación han facilitado su rápido desarrollo y la realización de tareas complejas. Entre las citadas en capítulo 2, cabe destacar principalmente Python y Django. Esta combinación ha sido en gran parte la causa del éxito en el desarrollo, ya que de ambas tecnologías podemos encontrar una extensa documentación, complementada con una gran cantidad de | Gestión y promoción de campañas 56 paquetes implementados por la comunidad y que nos han servido para extender nuestro desarrollo con mayor número de funcionalidades, además de las implementadas. Con respecto a la metodología utilizada, podemos destacar que SCRUM nos ha permitido llevar el desarrollo de forma controlada, marcando metas por cada sprint, haciendo que no se disparen los tiempos y costes de implementación, así como añadiendo dinamismo al desarrollo. A todo lo comentado, me gustaría añadir lo complicado que resulta resumir en unas líneas todo lo que abarca y aporta el trabajo fin de carrera y este proyecto en concreto. Éste me ha aportado varios aspectos que culminan mi formación académica en la titulación de Grado en Ingeniería de Computadores. Me ha ayudado a ver la importancia que un trabajo fin de grado tiene a la hora de completar la formación del alumno y realizar todas las fases que conlleva el desarrollo de un proyecto software. Éste ha resultado ser una gran experiencia a nivel académico, personal y profesional ya que ha sido realizado en gran parte en la Universidad de Málaga en un acuerdo de colaboración con la Consejería de Turismo y la Empresa pública para la Gestión del Turismo y del Deporte de Andalucía. Gracias a este proyecto también me he podido especializar en el área de las aplicaciones web con las tecnologías Python y Django que sin duda marcarán la continuación de mi camino dentro del ámbito profesional. También destacar que la idea de este proyecto es que fuese un proyecto aprovechable y así lo ha sido, ya que la Empresa pública para la Gestión del Turismo y del Deporte de Andalucía la usa para la gestión de sus campañas promocionales para ferias internacionales de turismo y otros eventos. Para finalizar, decir que este proyecto puede ser el complemento de muchos otros proyectos e invito a todo el mundo que quiera a continuar y compartir el camino que yo he comenzado aquí. Trabajos futuros 4.2. Una vez estudiadas las posibilidades que proporciona la aplicación se pueden ver futuras mejoras y ampliaciones para el producto software. A continuación se listan y explican brevemente los futuros trabajos y mejoras para la aplicación:  Comercialización de productos. Cuando se promociona un producto online, la mayoría de usuarios que acceden a esa promoción pueden estar interesados en adquirir dicho producto. Por ello, sería interesante integrar diferentes plataformas de pago como puede ser PayPal y crear un catálogo de productos junto a un carrito de la compra para poder comercializarlos online.  Eventos profesionales, mensajería y estadísticas. En muchas ocasiones, existen eventos dentro de una campaña para comerciar u ofrecer productos a empresas profesionales. La idea sería poder establecer contactos entre dos nuevos tipos de usuarios, la figura del usuario comercial y la del usuario profesional. De forma que puedan quedar registradas dentro de la plataforma Capítulo 4. Conclusiones y Futuros Trabajos | 57 el contacto entre ambos usuarios y el éxito final de la comercialización. Para registrar este contacto se crearía un sistema de mensajería privada dentro de la aplicación, además de ofrecer un contacto directo a través de chat. La comercialización de los productos se podría reflejar en un panel donde se mostrasen las estadísticas para estudiar el éxito de un evento profesional y de la aceptación y comercialización con los profesionales del sector.  Integración con Instagram y Twitter para concursos. Actualmente la plataforma cuenta con la integración de YouTube en el sistema de concursos. Pero sería interesante también la posibilidad de integrar otras redes sociales para los concursos como son Instagram y Twitter. Instagram nos permitiría integrar concursos de imágenes y Twitter estaría más indicado para concursos de texto. La realización de estos concursos se podrían realizar definiendo un hashtag, que permita a la aplicación detectar estas entradas y mostrarlas en el microsite, permitiendo el registro de las respuestas dentro del portal.  Creación de una API de campañas. Otra posible forma de poder dar más publicidad a una campaña, sería la creación de una API que nos permita alimentar con nuestro contenido otras plataformas. También podría servir para crear un portal específico para un producto y alimentar su contenido con los contenidos gestionados desde el gestor de campañas.  Versionado del sistema de plantillas. Incluir un sistema de versionado para las plantillas basadas en el paquete “django-dbtemplates”, puede ayudarnos a recuperar versiones antiguas o depurar errores de cambios posteriores realizados en las plantillas. Esto se podría realizar gracias al paquete “djangoreversion”.  Módulo de encuestas y estadísticas. Aunque el sistema de concurso se podría usar a modo de encuesta, éste sólo aceptaría una pregunta. Por ello es interesante crear un módulo específico para realizar encuestas en las que el gestor pueda añadir una o más preguntas al usuario y el tipo de respuesta (seleccionable, multi-respuesta, etc.). Estas encuestas se enviarían vía mail para que participasen los Usuarios registrados y los Usuarios no registrados en el portal. Las encuestas estarían disponibles durante un tiempo específico. Además, se crearía una vista donde poder consultar las estadísticas a modo de resumen de las encuestas realizadas por los usuarios.  Test con Selenium. Generación de una batería de pruebas, de forma que se cubran todos los aspectos de la aplicación con las herramientas que proporciona Selenium [31]. 59 Instalación y configuración Apéndice A. de la aplicación La aplicación Gestor de Campañas es parte de la aplicación del portal de “andalucia.org”. En los puntos siguientes de este apéndice se explican los requisitos, dependencias y pasos a seguir para configurar e integrar la aplicación dentro del portal anteriormente mencionado. A.1. Requisitos del sistema La aplicación requiere una serie de paquetes que son necesarios y que se listan a continuación:  Django (versión 1.4.2)  South (versión 0.7.6)  reportlab (versión 2.5)  django-rosetta-yaco (versión 0.6.12)  django_rq (0.5.1)  django-dbtemplates (versión 1.3)  django-codemirror-widget (versión 0.4.0)  oauth2 (versión 1.5.167 o superior)  google-api-python-client (versión 1.2) El portal en el que está integrada la aplicación hace uso del paquete zc.buildout [32] para realizar el despliegue de la aplicación. De modo que para realizar este despliegue, añadimos los paquetes necesarios para que estos sean instalados al ejecutar el buildout. Estos se añaden en el apartado de “eggs” del fichero buildout.cfg (ver Figura de Apéndice A.1). | Gestión y promoción de campañas 60 [eggs] recipe = zc.recipe.egg eggs = … Django==1.4.2 South==versión 0.7.6 reportlab==2.5 django-rosetta-yaco==0.6.12 django_rq==0.5.1 django-dbtemplates==1.3 django-codemirror-widget==0.4.0 oauth2>=1.5.167 google-api-python-client==1.2 django-codemirror-widget==0.4.0 django-dbtemplates==1.3 Figura de Apéndice A.1. Código en el fichero buildout.cfg A.2. Configuración general En el fichero settings.py de la aplicación general, hay que configurar ciertos parámetros de los paquetes añadidos:  Para el paquete “django-codemirror-widget”, añadimos al fichero “settings.py” el código de la Figura de Apéndice A.2. CODEMIRROR_PATH = 'codemirror' CODEMIRROR_MODE = 'django' CODEMIRROR_THEME = 'default' CODEMIRROR_CONFIG = { 'lineNumbers': True, } CODEMIRROR_JS_VAR_FORMAT = "%s_editor" Figura de Apéndice A.2. Parámetros y configuración del paquete django-codemirror-widget  Para el paquete “django-dbtemplates”, añadimos al fichero “settings.py” los valores de la Figura de Apéndice A.3. DBTEMPLATES_ADD_DEFAULT_SITE = True DBTEMPLATES_AUTO_POPULATE_CONTENT = True DBTEMPLATES_CACHE_BACKEND = CACHE_BACKEND DBTEMPLATES_USE_CODEMIRROR = True DBTEMPLATES_USE_TINYMCE = False DBTEMPLATES_MEDIA_PREFIX = path.join(STATIC_URL, "dbtemplates/") TEMPLATE_LOADERS += ('dbtemplates.loader.Loader',) DBTEMPLATES_CACHE_BACKEND = 'memcache://127.0.0.1:11211' CACHES = CACHES + { 'dbtemplates' : dict( BACKEND='django.core.cache.backends.memcached.MemcachedCache', LOCATION = ['127.0.0.1:11211'], ),} Figura de Apéndice A.3. Parámetros y configuración del paquete django-dbtemplates Apéndice A. Instalación y configuración de la aplicación | 61  Para configurar el middleware del sistema, añadimos al fichero “settings.py” los valores de la Figura de Apéndice A.4 MIDDLEWARE_CLASSES = MIDDLEWARE_CLASSES + ( 'campaign.middleware.CampaignMiddleware', ) Figura de Apéndice A.4. Configuración del Middleware  Para configurar el paquete django-rosetta-yaco, añadimos al fichero “settings.py” los valores de la Figura de Apéndice A.5 TRANSMETA_LANGUAGES = LANGUAGES TRANSMETA_DEFAULT_LANGUAGE = 'en' TRANSMETA_MANDATORY_LANGUAGE = 'es' TRANSMETA_VALUE_DEFAULT = '' Figura de Apéndice A.5. Parámetros del paquete django-rosetta-yaco  Para configurar la aplicación del Gestor de Campañas dentro del sistema, añadimos al fichero “settings.py” los valores de la Figura de Apéndice A.6. INSTALLED_APPS = INSTALLED_APPS + ( 'dbtemplates', 'campaign' ) Figura de Apéndice A.6. Aplicaciones instaladas en el proyecto. A.2.1. Parámetros de configuración de la aplicación “Gestor de Campañas” Dentro de la aplicación del Gestor de Campañas, encontramos otro fichero de configuración en la ruta “campaign/settings.py”. En él, encontramos el resto de parámetros que se usan dentro de la aplicación. Para completar la configuración de este fichero tenemos que configurar los parámetros de autenticación para la comunicación con la API de YouTube y Google Analytics. Ésta última configuración, la podemos ver en el Apéndice B. A.3. Despliegue Para realizar el despliegue del proyecto junto con la aplicación del Gestor de Campañas, tenemos que copiar la aplicación dentro de nuestro proyecto Django (en el mismo lugar dónde estén el resto de aplicaciones instaladas) y tener configurado todos los parámetros del apartado A.2 y A.2.1. Una vez realizado esto, tenemos que abrir un terminal de consola y seguir los siguientes pasos: | Gestión y promoción de campañas 62 1. Ejecutar el comando para lanzar el buildout. $ ./buildout –N 2. Actualizar la base de datos, haciendo uso del paquete South. Para ello ejecutamos en consola: $ ./python manage.py migrate 3. Actualizar los ficheros estáticos para el editor de código del paquete djangocodemirror-widget lanzando el comando: $ ./python manage.py collectstatic -v3 [pregunta si desea sobreescribir los ficheros, responder ‘yes’] 4. Lanzamos el comando para inicializar los grupos de permisos del Gestor de Campañas: $ ./python manage.py init_group_permissions 5. Iniciamos la aplicación: $ python manage.py runserver 63 Configuración de la API de Apéndice B. YouTube y de Google Analytics La aplicación Gestor de Campañas contiene partes que se comunican con otras plataformas e intercambian información. En concreto, hablamos de las plataformas de YouTube y de Google Analytics. En los siguientes apartados se explica cómo se configura el portal para aceptar dicha comunicación. B.1. Publicación de vídeos del Gestor de Campañas en YouTube. En el Gestor de Campañas, se permite automatizar la subida de vídeos a YouTube. Esto se produce cuando son subidos y publicados como respuesta a un concurso. Para obtener dicho resultado hay que configurar la variable YOUTUBE_JSON_OAUTH2_CLIENTE_SECRET que está en el fichero “campaign/settings.py”. A esta variable hay que asignarle la ruta y el nombre de un fichero en formato JSON que nos permite usar la API de YouTube en su versión 3 como una aplicación instalada en local. Esta forma de interacción es conocida como “flujo de aplicación instalada”, en el enlace https://developers.google.com/youtube/v3/guides/authentication#installed-apps encontramos más información sobre los diferentes flujos de trabajo con la API de Youtube versión 3. Para obtener el fichero JSON que necesitamos y configurar la variable YOUTUBE_JSON_OAUTH2_CLIENTE_SECRET, seguimos los siguientes pasos: 1. Entramos en https://console.developers.google.com/ 2. Si no tenemos activada la API de Youtube v3, Realizar el paso 3. Sino pasar al paso 4. 3. Activamos al API de Youtube v3 para el proyecto que tengamos generado. Para ello entramos en https://console.developers.google.com/project y | Referencias 70 [26] MagicDraw. [Online]. http://www.nomagic.com [27] SCRUM. [Online]. http://www.scrum.org [28] Taiga. [Online]. https://taiga.io/ [29] Nginx. [Online]. http://nginx.org/ [30] Sass (Syntactically Awesome Style Sheets). [Online]. Syntactically Awesome Style Sheets [31] Selenium. [Online]. http://docs.seleniumhq.org [32] Jacob Kaplan-Moss. (2009, Apr.) jacobian.org. [Online]. http://jacobian.org/writing/django-apps-with-buildout/ [33] Redmine. [Online]. http://www.redmine.org [34] Rhodecode. [Online]. https://rhodecode.com/ [35] Documentación. Creación de filters y template_tags. [Online]. https://docs.djangoproject.com/en/1.4/ref/templates/builtins/ [36] Documentación de Django - Sistemas de Plantillas. [Online]. https://docs.djangoproject.com/en/dev/topics/templates/ [37] Mark Lutz’s, Learning Python.: O'Reilly Media, 2013. [38] Henrik Kniberg, Scrum and XP from the trenches, Lulu.com, Ed., 2007. [39] Adrian Holovaty and Jacob Kaplan-Moss, The Definitive Guide to Django: Web Development Done Right (Expert's Voice in Web Development), 2nd ed.: Apress, 2009. [40] Daniel Greenfeld and Audrey Roy, Two Scoops of Django: Best Practices for Django 1.6.: Two Scoops Press, 2014.