Materia
Ejercicios


Tarea 3: Retemue

Objetivos de aprendizaje

Después de resolver la tarea 3, usted será capaz de:

  • Operar sobre un archivo de texto con una estructura pre-definida de datos,
  • Realizar procesamiento de texto sobre datos con un formato específico,
  • Trabajar con el módulo Tkinter para el desarrollo de una interfaz gráfica (GUI),
  • Interactuar con Facebook desde python,
  • Guardar y leer datos en un archivo.

Enunciado

Retemue, el sabio de la tribu Pythomun ha visto como su pueblo se ha reducido en número. Los jóvenes han migrado a la ciudad y no se sabe nada de ellos. Retemue ha contactado a cada uno de los jóvenes para saber que hacen y no perder el contacto. Sin embargo, sus aceleradas vidas en la ciudad no les permiten responder con toda la información que Retemue quisiera.

En conocimiento de estos problemas, Retemue recurre a los alumnos de IWI-131 para que creen un programa que obtenga información del Facebook. Este programa se lo enviará a cada uno de los jóvenes de la tribu para que obtengan su información y luego se la envíen. Para seguridad de los jóvenes, esta información debe ir encriptada.

En esta tarea usted deberá crear un programa que, a partir de una cuenta de Facebook, entregue varias estadísticas asociadas a su interacción social. Para ello su programa deberá implementar las siguientes funcionalidades:

  • Cargar datos desde Facebook.
  • Respaldar los datos (posts, likes e información general).
  • Encriptar/Desencriptar texto.
  • Analizar los datos para entregar una serie de estadísticas sobre el usuario.

Además, la interacción con el usuario será a través de una interfaz gráfica.

Para desarrollar las funciones anteriores se les entregará un conjunto de archivos que les proveerá de algunas funciones ya implementadas y otras que deben implementar con su equipo de trabajo.

Archivos

Los archivos que se le entregarán los puede descargar acá. La explicación de qué función tiene cada uno de ellos, se encuentra en la documentación que hemos escrito para que sepas como interactuar con Facebook a través de Python.

Funcionamiento

Una vez descargado el archivo para comenzar la tarea, descomprímalo y ejecute el archivo main.py. Se abrirá una ventana con la interfaz gráfica (GUI) que permitirá la interacción con las funciones que usted desarrolle.

La aplicación cuenta con los siguientes menús y botones:

../../_images/retemue_gui.png

Representación

Dentro de su programa usted creará un archivo backup.dat que almacene la información leída desde Facebook, en distintas secciones. La primera sección almacena la información del usuario y posee la siguiente estructura

# id_usuario;Nombre_usuario;genero;link;[otros]

El elemento otros es por si usted quiere extender el alcance de su programa y necesita almacenar más información que la aquí indicada. Este campo es opcional y puede quedar vacío.

Tras la línea con información del usuario, sigue un salto de línea (línea vacía). Luego una serie de líneas con los post (que tengan mensaje) realizados por el usuario, las cuales poseen la siguiente estructura

# id_post||mensaje||fecha||cant_likes||cant_comentarios||[otros]

Nuevamente puede almacenar más información por línea en la sección otros, donde el separador debe ser distinto del establecido en la estructura obligatoria. Terminada las líneas de post, se ingresa una nueva línea vacía, para ingresar una nueva serie de líneas con los datos de los likes realizados

# id_like#fecha#categoria_pagina#nombre_pagina#[otros]
../../_images/file_format.png

Qué hay que implementar

Las funciones que usted debe implementar con su equipo de trabajo son las siguientes:

  • encriptar(archivo, clave): esta función debe encriptar el texto del archivo. Para ello se utilizará un algoritmo basado en la encriptación ROT13, en este caso el salto entre caracteres será el valor de la clave. En este encriptado, cada caracter entre la ‘A’ y la ‘z’ será transformado en otro caracter, donde la clave, valor entero positivo, determina la cantidad de letras a moverse. Por ejemplo, si con la clave 4 se encripta el string “Hola Mundo”, la frase encriptada será “Lspe Qyrhs”. En esta función, considere que las letras en el rango indicado se encuentran en un ciclo cerrado, es decir, luego de la ‘z’ sigue la ‘A’. La función retorna None.

Nota

Para encriptar considere todos los caracteres entre la ‘A’ y la ‘z’. Cada caracter tiene un valor en escala decimal entre 0 y 255, este valor es conocido como el código ASCII de cada letra. En python puede ayudarse de las funciones ord(letra) y chr(valor) para transformar una letra a su código ASCII y vice-versa.

  • desencriptar(archivo, clave): esta función realiza el proceso inverso de la función encriptar, volviendo el archivo a su forma original. La función retorna None.
  • fb_guardar_backup(token, archivo): esta función debe crear el archivo de nombre archivo y respaldar en éste la información del usuario, los estados de su muro y las páginas que le gustan, siguiendo el formato explicado en Representación.

Ayuda: Al momento de escribir los datos extraídos de Facebook al archivo, algunos pueden tener caracteres no válidos para este último. Para solucionar eso puede ayudarse de la función limpiar_text del archivo utilidades.py.

  • fb_cargar_backup(archivo): esta función debe leer el archivo donde se cargaron los datos de Facebook. Con esto debe retornar 3 elementos:
  • Un diccionario con la información del usuario almacenada. Las llaves deben ser las mismas que se obtienen al hacer el llamado desde Facebook (id, name, gender, link) y por valor los valores correspondientes a cada tópico.
  • Una lista de diccionarios, donde cada diccionario almacena la información guardada del post. Las llaves también deben mantener el nombre de Facebook (id, message, created_time), en el caso de las cantidades de like y comentarios, poner por llave cant_likes y cant_comment respectivamente.
  • Una lista de diccionarios, donde cada diccionario almacena la información de una página guardada. Las llaves deben mantener el nombre en Facebook (id, created_time, category, name).
  • frecuencia_palabras(muro, filtro): función que recibe una lista con todos los posts en el muro y una lista con palabras a filtrar. La función debe retornar un diccionario con todas las palabras utilizadas al postear un estado en el muro de Facebook, sin incluir en el diccionario las palabras en el filtro.

Ayuda: No considere signos de puntuación y trabaje con todas las palabras en minúscula.

  • estadistica(data): esta función recibe una tupla con la información del usuario, las lista de estados del muro y una lista con las páginas “gustadas”. La función debe crear un archivo stats_username.txt que contenga la siguiente información como un pequeño informe, donde username es el nombre del usuario. La función retorna None.
  • Cantidad de likes conseguidos: de los post publicados, la cantidad de likes que se obtuvieron.
  • Cantidad de posts: la cantidad de publicaciones en el muro.
  • Cantidad de páginas que le gustan.
  • El mensaje publicado que más likes recibió.
  • Palabras Top-10: indicar las palabras, de más de 5 caracteres, más usadas en sus posts.
  • palabra_search(token, palabra): función que retorna una lista con el nombre de todas las personas que hayan hecho una publicación (pública) con la palabra entregada como parámetro.

Consideraciones

  • Puede implementar otras funciones, además de las que se solicitan para pasos intermedios que le permitan obtener la información solicitada en las funciones.
  • Puede crear archivos intermedios que le permitan realizar lo solicitado en el enunciado (archivos temporales). No debe preocuparse de borrarlos, pero puede hacerlo si gusta.
  • Usted puede mejorar su tarea a gusto, incluir más datos a las estadísticas generadas, guardar más datos de los obligatorios en backup.dat en la ubicación de [otros], agregar funcionalidades y botones a la GUI, etc. Retemue se lo agradecerá.

Entrega

La fecha de entrega es el Viernes 21 de Noviembre a las 23:00.

La tarea debe ser resuelta en equipos de dos o tres personas.

Sólo uno de los integrantes del equipo debe subir la tarea en la sección Tareas de la plataforma Aula, en el ramo de Programación IWI131.

Se debe entregar un archivo comprimido (.zip) que debe contener todos los archivos para hacer funcionar la tarea con el nombre tarea-3-RUT.zip, reemplazando RUT con el RUT del integrante que subirá la tarea. Sólo debe ir la parte del RUT hasta antes de la raya. Por ejemplo: tarea-3-18000123.zip.

Al principio del archivo funciones.py se debe poner un comentario indicando los RUT de los integrantes del equipo como en el siguiente ejemplo:

# Integrantes:
# 18000123-0 Perico Los Palotes
# 18000456-7 Fulanita de Tal
# 18000890-k Federico Santa Maria

No se puede subir ningún archivo adicional.

Evite dejar para última hora la entrega de la tarea. Cerca del plazo final, la plataforma seguramente estará sobrecargada.

Las tareas atrasadas (máximo un día de retraso) tendrán el descuento especificado en la rúbrica de corrección. NO se recibirán tareas por por correo electrónico.

Los equipos de trabajo pueden ser los mismos de la tarea anterior, pero recuerde que deben ser de 2 ó 3 personas.

Políticas de copia

Usted puede discutir la tarea con compañeros de otros grupos, pero bajo ningún motivo puede compartir o copiar el código de su tarea. Cada equipo debe escribir su propio código.

Las políticas de copia de la asignatura rigen para la tarea.

En caso de tener problemas con el desarrollo de la tarea, asista a las ayudantías o consulte en el grupo de facebook.