Egela2Dropbox

De Wikiversidad

Egela2Dropbox es una aplicación desarrollada en Python. Está basado en un trabajo de la asignatura de Sistemas Web del segundo cuatrimestre del tercer año de la carrera de Ingeniería Informática de Gestión y Sistemas de Información. En dicho trabajo la aplicación descargaba de Egela los documentos pdf de la asignatura. Para este trabajo le hemos añadido una interfaz a la aplicación mencionada, la posibilidad de descargar no solo documentos pdf sino que también documentos .docx, .pdf, .txt y .zip. Los documentos descargados se podrán subir a la cuenta de Dropbox del usuario, tendrá que hacer login mediante nuestra aplicación, o descargarlos en el equipo local, indicando la ruta en la que queremos descargarlos.
Nuestro objetivo era mejorar la práctica en la que nos basamos y crear una aplicación de escritorio intuitiva y fácil de usar.

Estado del arte[editar]

Esta aplicación esta basada en la técnica de Web Scraping. Es una técnica utilizada mediante programas de software para extraer información de sitios web.​ Usualmente, estos programas simulan la navegación de un humano en la World Wide Web ya sea utilizando el protocolo HTTP manualmente, o incrustando un navegador en una aplicación. El web scraping se utiliza en muchas empresas digitales que se dedican a la recopilación de bases de datos. Nosotros lo hemos orientado de otra manera, con esta aplicación no queríamos hacer análisis de datos si no que hemos intentado crear una app que facilite la descarga de los archivos que se recopilan en ella. Hay diferentes ambientes en la que puede ser útil aplicar esta técnica, por ejemplo, para recopilar datos de contacto o información especial con gran rapidez. En el ámbito profesional, el scraping se utiliza a menudo para obtener ventajas respecto a la competencia. De esta forma, por medio del harvesting de datos, una empresa puede examinar todos los productos de un competidor y compararlos con los propios. El web scraping también resulta valioso en relación con los datos financieros: es posible leer datos desde un sitio web externo, organizarlos en forma de tabla y después analizarlos y procesarlos. Como casi todas las tecnologías es una técnica que sigue evolucionando día a día. El primer rastreador web se creó ya en 1993, cuando se presentó el primer motor de búsqueda: Jumpstation.

Herramientas colaborativas[editar]

Al estar haciendo este proyecto entre cuatro personas no podemos estar tres esperando a que una acabe de hacer lo suyo para poder avanzar. Para ello hemos usado dos herramientas colaborativas, una para la gestión de la documentación y otra para la gestión de versiones de la aplicación.

Gestor de documentación[editar]

Para el gestor de documentación tuvimos un par en mente. Latex(u Overleaf, su versión online) fue el primero que pensamos en usar pero lo descartamos rápidamente al no tener un historial de cambios en la versión gratuita. Google Drive fue el siguiente en la lista, pero también lo descartamos ya que no nos convencía para este trabajo la estructura que tiene Drive en sus documentos. El siguiente fue Wikidot que también acabó siendo descartado porque requería que el profesor se registrara para poder acceder al documento. Sphinx fue un editor que nos llamó mucho la atención ya que es un editor de texto que se usa en Python, lenguaje de programación el cual hemos usado para crear la aplicación. Al final acabamos descartándolo ya que requería que aprendiésemos como se usaba y no vimos rentable ese esfuerzo teniendo en cuenta el tiempo que teníamos. Al final nos decantamos por Wikipedia, un gestor de documentación que algunos integrantes del grupo ya habían usado y eran familiares con él. En concreto hemos desarrollado la documentación en Wikidiversidad, que nos pareció apropiado para este proyecto. Wikidiversidad, es un proyecto hermano de Wikipedia cuyo objetivo es construir una plataforma educativa virtual libre y gratuita, con filosofía wiki y que forme parte de la Fundación Wikimedia. En este proyecto se elaboran materiales y recursos didácticos (que incluyen exámenes, ejercicios de prácticas, estudios de casos, etc.), y se forman grupos de estudio, a diversos niveles educativos. Se construye bajo el concepto wiki, donde todo cibernauta puede crear, editar, eliminar o modificar un contenido o página web.
Ventajas de usar Wikis

  • Promueven la descentralización del trabajo grupal, dan la opción de poder colaborar entre sí y construir de manera conjunta.
  • Presentan un importante control sobre la evolución del trabajo, cada vez que se hace un cambio se guardan las versiones anteriores y esto posibilita que, en cualquier momento, se pueda recuperar alguna parte del trabajo que se haya perdido por accidente o que se haya eliminado adrede.
  • Facilitan el trabajo de seguimiento y evaluación que debe realizar el docente. Igualmente, permite al grupo poder identificar las contribuciones y participación de cada uno de sus miembros. El historial de trabajo motivará a todos los estudiantes a participar, porque si no lo hacen el resto del grupo se enterará.
  • La facilidad de uso de la mayoría de las wikis permite que hasta el más inexperto usuario pueda colaborar y aportar en el trabajo.
  • Para las actuales generaciones, trabajar en el diseño de una página web usando wiki, resulta ser mucho más atractivo y motivador que construir un cartel en el aula.
  • La estructura es mucho mas atractiva que un simple documento
  • Se puede contar con varias plataformas de trabajo gratuitas.

Control de versiones[editar]

Para el control de versiones hemos utilizado la herramienta GitHub. Es una herramienta que hemos usado desde el principio de la carrera y con la que estamos muy cómodos. Nos permite hacer "branch"-es para trabajar en paralelo sin pisar el código el uno al otro, guarda un historial de todos los cambios por si tenemos que volver a un cambio anterior y más funcionalidades. Somos conscientes de que existen otras herramientas colaborativas como GitLab o Bitbucket por comentar algunas, pero por lo que hemos comentado anteriormente sobre estar muy familiarizados con GitHub, hemos decidido seguir usando esta última.

En realidad, cualquier gestor de use GIT sería una buena opción, GIT es el gestor de código fuente que domina el panorama desde hace años y que la práctica mayoría de desarrolladores y empresas utilizan hoy en día.
Ventajas de usar Github:

  • Versionar tu código.

Esto quiere decir guardar en determinado momento los cambios efectuados a un archivo o conjunto de archivos, con la oportunidad que tener acceso a ese historial de cambios. Hay que destacar las ventajas frente a otras herramientas, la principal es que no necesitarías montar, mantener, hacer copias de seguridad, etcétera a un repositorio o servidor para proteger el código que escribes, en este caso Github es el plataforma que cumple esta función.

  • Aprender y experimentar

Como muchos desarrolladores tienen de forma pública sus proyectos en Github es posible acceder a su código, leerlo, estudiarlo y aprender de él.

  • Contribuir

Si luego de copiar un proyecto (hacer fork) haces ajustes que arreglan bugs o introducen una nueva funcionalidad, puedes proponerle al dueño del proyecto que integre tus cambios en su código.

  • Trabajo en equipo

Github es el lugar perfecto para trabajar conjuntamente en una idea, después de crear tu proyecto podrás invitar a otros usuarios como colaboradores, permitiendo así que estos lean y escriban directamente sobre tu repositorio.

  • Estar informado(a)

Github tiene un sistema de notificaciones con el cual puedes estar al tanto de las actividades alrededor de un repositorio en el cual estás participando o uno en el cual estés interesado.

  • Visor de código

GitHub posee un estupendo visor de código mediante el cual, a través del navegador, podrás consultar en cualquier instante el contenido de un archivo determinado, con la sintaxis correspondiente al lenguaje en el que esté escrito.

  • Registro de incidencias

Cada proyecto creado en Github incluye un sistema de seguimiento de problemas, del estilo sistema de tickets, este permite a los miembros de tu equipo (o a cualquier usuario de GitHub si tu repositorio es público) abrir un ticket escribiendo en este los detalles de un problema que tenga con tu software o una sugerencia sobre una función que le gustaría que fuera implementada.

  • 10. Precio

Github, es completamente gratis e ilimitado para proyectos públicos




GitHub repositorio : https://github.com/JonBarbero/egela2dropbox

Implicaciones legales[editar]

Gracias a la técnica de Web scraping podemos automatizar la obtención de información, es decir, se suele trabajar con una gran cantidad de datos. Por ello, es importante el análisis de las implicaciones legales de la aplicación que vayamos a crear.

En España el web scraping es legal, excepto para su uso en varios escenarios bien definidos:

  • A nivel de competencia, si con el scrapeo incurrimos en competencia desleal para con la web scrapeada, generando una duda razonable en el consumidor. Por ejemplo, si con dicha extracción se usa la reputación de la web escrapeada para favorecer la web que usa los contenidos no propios.
  • Si estamos incurriendo en un delito desde el punto de vista de la propiedad intelectual.
  • Dentro del marco de la Ley Orgánica de Protección de Datos (LOPD), cuando accedemos a datos de terceros sobre los que no se tiene consentimiento para su almacenamiento o tratamiento.

En nuestro caso como el usuario tiene que introducir su usuario y contraseña en nuestra aplicación para acceder a Egela o Dropbox tenemos que cumplir con la legislación de la Union Europea(UE) y el estado Español. En el caso de la UE tenemos que cumplir con el Reglamento General de Protección de Datos(RGPD) y en el caso de España tenemos que cumplir con la LSSI.

RGPD[editar]

En el caso de Dropbox el usuario y contraseña no se introducen en nuestra aplicación, usamos la API de Dropbox para que los datos se introduzcan directamente en su aplicación. Por esto no tenemos la obligación de cumplir con la RGPD en el caso de Dropbox. El RGPD (Reglamento General de Protección de Datos) es el reglamento europeo relativo a la protección de las personas físicas en lo que respecta al tratamiento de sus datos personales y a la libre circulación de estos datos

En el caso de Egela, en cambio, los datos sí que se introducen en nuestra aplicación por lo que tenemos que cumplir con la RGPD. Para cumplir con dicha legislación adjuntamos junto a la aplicación un Readme en el cual se informa al usuario de que nuestra aplicación, para darle el servicio deseado, necesitará de su usuario y contraseña de Egela y que si introduce dichos datos está dando su consentimiento para la utilización de estos.

LSSI[editar]

Nuestra aplicación al no tener una página web no tiene la obligación de cumplir con la LSSI (Ley de Servicios de la Sociedad de la Información y de Comercio Electrónico), es la Ley encargada de regular el tema del comercio electrónico.

Recursos[editar]

Para la creación de esta aplicación hemos usado los siguientes recursos:

  • Pycharm Professional edition : Licencia estudiantil
  • Github : Publico
  • Canvas : Versión gratuita
  • Wikiversidad : Publico
  • Dropbox api: Publico
  • GanttProject : Publico
  • Python : Publico

Planificación temporal[editar]

Con el objetivo de facilitar la planificación de este trabajo, los distintos módulos que lo componen han sido descompuestos mediante un diagrama EDT, también se realizo un cronograma a seguir.

EDT[editar]

El diagrama EDT, Estructura de Desglode de Trabajo, es una herramienta de gestión de proyectos que se utiliza para definir y gestionar los entregables de un proyecto. La EDT es una estructura jerárquica que desglosa actividades complejas en partes más manejables y permite que los usuarios vean cada entregable que debe completarse para alcanzar el objetivo general de un proyecto.

Diseño[editar]

Mock up : En esta tarea se realiza la maqueta de la aplicación de escritorio.
Esfuerzo=7

Interfaz Gráfica : En esta tarea se define la interfaz gráfica y como la vamos a realizar. Esfuerzo:30

Implementación[editar]

Guardar en local : Añadir la opción de guardar en el ordenador local.
Esfuerzo:6

Guardar en DropBox: Añadir la opción de guardar en DropBox archivos en las diferentes opciones de la app.
Esfuerzo:3

Cambio de asignatura: En la opción de descargar los pdf-s de egela, inicialmente estaba implementado para la asignatura de Sistemas Web de 3ª curso. Esta tarea consiste en cambiarlo a la asignatura de Aspectos profesionales de la informática.
Esfuerzo:9

Formatos: Implementamos la opción de descargar diferentes tipos de archivos de webs en las que no es necesario iniciar sesión. Los archivos que se pueden descargar son los siguientes: .docx .pdf .txt .zip Esfuerzo:2

Documentación[editar]

Planificación: Creación de los diagramas Gantt y EDT. También la realización del análisis de riesgos.
Esfuerzo:4

Implicaciones legales: Redacción del análisis hecho sobre las implicaciones legales.
Esfuerzo:1

Herramientas colaborativas: Redacción del análisis hecho sobre las herramientas colaborativas.
Esfuerzo:1

Plan de riesgos: Análisis de los riesgos que pueden surgir a lo largo del trabajo.
Esfuerzo:2

Conclusiones: Conclusiones finales sobre la realización de este proyecto así como los problemas reales, las soluciones de estos y lo aprendido.
Esfuerzo:3

Análisis[editar]

Gestor documental: Análisis de diferentes gestores y elección de uno de ellos.
Esfuerzo :3

Gestor de versiones: Análisis de diferentes gestores y elección.
Esfuerzo:1

Alcance del proyecto: Análisis de lo que tenemos que implementar y como.
Esfuerzo:3

Gantt[editar]

El diagrama de Gantt es una herramienta gráfica cuyo objetivo es exponer el tiempo de dedicación previsto para diferentes tareas o actividades a lo largo de un tiempo total determinado. Este fue el diagrama creado al empezar con este proyecto. Pero en la realidad debido a varios problemas no se ha seguido al pie de la letra.

Análisis de riesgos[editar]

Tal y como es común en estos proyectos hemos realizado un análisis de riesgos para gestionarlos adecuadamente si fuese necesario.

Perdida de datos:

Ya sea por fallo de hardware o software la perdida de datos es un riesgo bastante común. También podemos sufrir perdida de datos por la eliminación de la página de Wikipedia.

Prevención: Guardar copias de seguridad

Plan de contingencia: Recuperar los datos de las copias de seguridad o rehacer lo perdido si fuese necesario.

Probabilidad: Media

Impacto: %40

Planificación incorrecta:

Una mala definición del domino o un desarrollo lento pueden causar grandes retrasos en el proyecto.

Prevención: Realizar un cronograma

Plan de contingencia: Redefinir y cambiar el cronograma para realizar una nueva planificación.

Probabilidad: Alta

Impacto: %60

Abandono de integrantes:
Al ser un trabajo colaborativo siempre existe el riesgo de abandono de uno de los integrantes

Prevención: Mantener el contacto, hacer reuniones y estar pendiente de los demás.

Plan de contingencia: Repartir el trabajo entre los integrantes y trabajar mas horas de las previstas si fuese necesario .

Probabilidad: Baja

Impacto: %80

Diseño[editar]

Ventana en la que el usuario insterta su usuario y contraseña de la plataforma egela.

Esta ventana te redirige a la web para identificarte en dropbox y dar permisos.

En esta ventana ya hemos conseguido los pdf-s de la asignatura y tenemos la opción de escoger los que queramos para la subida a la cuenta de dropbox.

Implementación[editar]

Como ya se ha comentado en la introducción, este proyecto esta basado en una práctica de la asignatura de Sistemas Web. En esa práctica se implementó un programa que descargaba los archivos con extensión pdf y los guardaba en una cuenta de DropBox a través de la api. En nuestra implementación hemos añadido funcionalidades nuevas, para ello hemos editado el programa inicial. La aplicación de escritorio Egela2Dropbox esta formada por los siguientes archivos:

Archivos[editar]

zeregina4.py
Este es el archivo principal, en el que se crea la ventana principal.

Dropbox.py
Este archivo contiene los metodos necesarios para conectarse a dropbox y poder descargar, subir, crear carpetas... en la cuenta del usuario.

eGela.py
Para identificarse en la plataforma de egela y conseguir los enlaces a los archivos se ha implementado la clase egela que contiene los métodos para realizar estas acciones.

funtzioak.py
Para hacer el código mas entendible hemos intentado separar la parte de la creación de las ventanas con las funciones. Por eso este archivo contiene métodos que realizan los extras añadidos en este proyecto. Esos extras serían las opciones de conseguir un pdf desde una página web, es decir pasar el fichero html a pdf, y conseguir diferentes archivos de páginas web.

helper.py
Este fichero python, tiene funciones asistentes para así conseguir un código mas limpio.

OptionWindows.py
OptionWindows.py es el archivo que usamos para crear las ventanas de las novedades que hemos añadido en esta versión de la aplicación.

Portada.png
Esta foto contiene el logo de la app

Librerías[editar]

Este concepto hace referencia al conjunto de implementos funcionales que te ayudarán a codificar todo este lenguaje de programación para crear una interfaz independiente. Las librerías de Python son amplias y cuentan con gran cantidad de producciones en contenidos. Constan de diversos módulos que permiten el acceso de funcionalidades específicas del sistema como entrada y salida de archivos, soluciones estandarizadas a problemas de programación, etc.
Según David Zarruk, profesor del curso de analítica predictiva y modelos de regresión en Python, una librería de programación es un conjunto de funciones que alguien escribió en alguna parte del mundo y ha disponibilizado para que cualquiera pueda utilizarlo de forma gratuita.[1]

BeautifulSoup4[editar]

Beautiful Soup es una librería Python que permite extraer información de contenido en formato HTML o XML. Para usarla, es necesario especificar un parser, que es responsable de transformar un documento HTML o XML en un árbol complejo de objetos Python. Esto permite, por ejemplo, que podamos interactuar con los elementos de una página web como si estuviésemos utilizando las herramientas del desarrollador de un navegador.[2]

Tkinter[editar]

Es una librería que proporciona a las aplicaciones de Python una interfaz de usuario fácil de programar. Además es un conjunto de herramientas GUI de Tcl/Tk (Tcl: Tool Command Language), proporcionando una amplia gama de usos, incluyendo aplicaciones web, de escritorio, redes, administración, pruebas y muchos más.[3]

Requests[editar]

Requests es una biblioteca HTTP para el lenguaje de programación Python. El objetivo del proyecto es hacer que las solicitudes HTTP sean más simples y amigables para los humanos.[4]

weasyprint[editar]

WeasyPrint es una solución inteligente que ayuda a los desarrolladores web a crear documentos PDF. Convierte páginas HTML simples en magníficos informes estadísticos, facturas, tickets ...[5]

urllib[editar]

El módulo urllib.request define funciones y clases que ayudan en la apertura de URLs (la mayoría HTTP) en un mundo complejo — autenticación básica y digest, redirecciones, cookies y más.[6]

Pruebas y Problemas[editar]

Las realización de pruebas es una de las tareas mas importantes en proyectos de desarrollo. En este caso, hemos realizado varias pruebas teniendo en cuenta todas las casuísticas para ofrecer la mejor versión de nuestra aplicación. Las pruebas realizadas y los problemas que hemos encontrado al hacerlas han sido las siguientes:

El primer extra que implementamos fue el de pasar un html de una url a pdf. Para asegurarnos que estaba bien programado probamos con webs aleatorias guardando el archivo tanto en local como en DropBox. En local todo funciona correctamente, si se pasa por error un path no existente guarda el archivo en el directorio en el que nos encontramos. En el caso de guardar el archivo en DropBox si hubo problemas, al hacer la petición HTTP a la api para subir el archivo nos devolvía el error 400 - Bad Request. Este indica que el servidor no puede o no procesará la petición debido a algo que es percibido como un error del cliente.

La otra actualización nueva a implementar, que consiste en descargar diferentes archivos que se encuentran en diferentes webs, también nos dio problemas. Se nos hizo difícil conseguir saber donde guardaban los enlaces a los archivos ya que cada web puede tener una estructura diferente. Por lo que al final implementamos métodos para saber si ese enlace era una url válida. Para saber si era descargable nos fijamos en la extensión de la url, es decir, si termina con .pdf, .docx, .txt o .zip descarga el contenido en el path indicado.

Por último, comprobamos si la función de la aplicación inicial funcionaba bien. Para ello probamos con diferentes usuarios para identificarse en egela y en todos nos daba fallo de identificación. Este problema es un riesgo que no habíamos contemplado, ya que al haber realizado nosotros esta práctica en el curso 2020-2021 y haber hecho las pruebas correspondientes cuando aquello, supusimos que funcionaba correctamente. Es un problema que nos ha costado arreglar, ya que después de analizar profundamente el código y la estructura de la plataforma de egela nos dimos cuenta que se habían realizado cambios en el inicio de sesión de la plataforma. A la hora de hacer la solicitud de inicio de sesión con el usuario y contraseña, generaba un token que nosotros no teníamos. A parte tuvimos que cambiar la asignatura de la que se extraen los archivos, ya que algunos integrantes de este proyecto no cursamos Sistemas Web. Al tener que meterle muchas horas a estos cambios, luego no hemos tenido tiempo de integrarlo muy bien con las actualizaciones nuevas. Por ello, como trabajo futuro estaría arreglar las integraciones.

Teníamos intención de añadir mas actualizaciones, como por ejemplo, poder enviar los archivos por Gmail[7], pero para conseguir acceso a la api de Gmail necesitábamos créditos de Gcloud[8] por lo que lo descartamos. Tuvimos que dejar de lado también otras ideas ya que no eran viables como conectar nuestra app con Wetransfer[9] porque su api ya no estaba disponible.

Conclusiones[editar]

Mediante este trabajo hemos explorado diferentes gestores de documentación. Nosotros estamos muy acostumbrados a usar LaTeX, pero está bien explorar otros editores que pueden ser mejores que LaTeX en diferentes contextos. Sobre todo nos quedamos con el editor Sphinx, el cual se usa con Python y pensamos que es una buena alternativa si se trabaja con este lenguaje.

Por otro lado, el trabajo nos ha servido para aprender más sobre la planificación del tiempo usando un diagrama EDT. Es importante tener todo planeado y en caso de que haya un problema reestructurar el trabajo para poder acabar a tiempo. Relacionado con este tema está también la elaboración de un plan de riesgos. Esto ha sido muy importante en este trabajo ya que nos han borrado la página de Wikipedia y gracias a haber realizado el plan de riesgos no hemos sufrido pérdidas. Sin embargo, nuestra planificación no ha sido la idónea, ya que hemos tenido bastantes problemas para poder sacar adelante este proyecto. Eso nos ha hecho ver que hay que planificar todo antes de empezar a implementar. Un buen análisis y una buena organización marcan la diferencia.

Un aspecto importante de este trabajo ha sido el análisis de las implicaciones legales, un tema que no hemos tocado nunca pero que es muy importante. No nos habíamos parado a pensar que nuestros desarrollos tuviesen implicaciones legales. A lo largo de este proyecto hemos aprendido que, en nuestro caso en el sector de la técnica Web Scraping, es muy importante hacer el análisis legal de lo que vayamos a implementar para evitar problemas. El avance de las nuevas tecnologías ha supuesto una revolución absoluta en el campo de la creación de contenidos. Cada persona es una fuente de información. Como otras muchas, es una táctica que ha adquirido mayor relevancia en los últimos años; sin embargo, sigue habiendo mucho desconocimiento al respecto de sus posibilidades, limitaciones o implicaciones legales. El web scraping en sí, es legal. De hecho, el problema no está en el uso de los crawlers para rastrear la red, sino en el uso que damos de los datos conseguidos.

  1. https://www.crehana.com/es/blog/desarrollo-web/librerias-python/
  2. https://j2logo.com/python/web-scraping-con-python-guia-inicio-beautifulsoup/#scraping-beautifulsoup
  3. https://unipython.com/tkinter-introduccion/
  4. https://en.wikipedia.org/wiki/Requests_(software)
  5. https://pypi.org/project/weasyprint/
  6. https://docs.python.org/es/3/library/urllib.request.html
  7. https://es.wikipedia.org/wiki/Gmail
  8. https://es.wikipedia.org/wiki/Google_Cloud
  9. https://es.wikipedia.org/wiki/WeTransfer