Materia
Ejercicios


Tarea 3: Pypotify

Objetivos de aprendizaje

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

  • Manipular archivos de texto con una estructura pre-definida de datos,
  • Realizar procesamiento de texto sobre datos con un formato específico,
  • Guardar y leer datos en un archivo.
  • Conocer código html para el desarrollo de una página web,

Enunciado

En la actualidad, el manejo de la información es una clave importante para el funcionamiento de muchos de los servicios que usamos hoy en día, como por ejemplo para el funcionamiento de los servicios de entretenimiento. A ustedes como alumnos de programacion de la USM, se les ha pedido esta vez que logren hacer funcionar la plataforma de musica ‘Pypotify’, agregando las funciones básicas del programa para que los usuarios puedan agregar y eliminar canciones, crear sus propias playlist personalizadas, y que así todos los alumnos de la universidad puedan disfrutar de sus canciones favoritas en fiestas.

Archivos

Los archivos que se le entregarán los puede descargar acá. A continuación se mencionan los dos archivos y la función que cumplen dentro del sistema.

  • main.py: Archivo principal del sistema, es el encargado de levantar el servidor que permite ver el sitio.
  • funciones.py: archivo que contiene las funciones que deberán implementar junto a su equipo de trabajo, para el correcto funcionamiento del sitio.
  • lista_de_canciones.txt: Archivo de texto que almacena todas las canciones que serán utilizadas por el programa. Son más de 50.000 canciones las que contiene.
  • listas_de_reproducciones.txt: Archivo de texto que contiene las listas que genera el usuario. Por defecto trae una lista de ejemplo.

Funcionamiento

Una vez descargado el archivo para comenzar la tarea, descomprímalo y ejecute el archivo main.py. Se abrirá una ventana con un mensaje como el que se muestra a continuación:

# Servicio de Pypotify iniciado en http://localhost:8080

Este mensaje indica que el servidor web que contiene el sitio se está ejecutando de manera local. Abra su navegador preferido (chrome, internet explorer, safari u otro) y escriba la dirección http://localhost:8080/, se debería mostrar la página web.

El sitio se divide en las siguientes secciones:

  • Página Principal: se muestra al escribir la dirección http://localhost:8080. Esta página da la bienvenida al usuario y presenta el menú principal del sitio.
../../_images/2016-1_index.png
  • Canciones: se muestra al escribir http://localhost:8080/canciones/. Esta página muestra todas las canciones del archivo lista_de_canciones.txt, las cuales serán mostradas cada 5000 por página.
../../_images/2016-1_canciones.png
  • Playlist: se muestra al escribir la dirección http://localhost:8080/verListas/. Esta página muestra todas las Playlist creadas y almacenadas en el archivo listas_de_reproducciones.txt.
../../_images/2016-1_playlist.png
  • Agregar Cancion: se muestra al escribir la dirección http://localhost:8080/cancionNueva/. En esta página, ustedes podrán agregar canciones al archivo lista_de_canciones.txt.
../../_images/2016-1_agregar_cancion.png
  • Crear Lista: se muestra al escribir la dirección http://localhost:8080/buscar/. En esta página, podrán agregar Playlists al archivo listas_de_reproducciones.txt. Para ello, debe ingresar el ID, nombre de la canción o el artista que desea tener en su playlist. Para buscar las canciones a agregar, puede colocar el nombre del artista, seguido de cualquier otro, y el sistema mostrará todas las canciones relacionadas con esos artistas, así usted podrá seleccionar una canción en específico y crear su lista.
../../_images/2016-1_playlist.png
  • Borrar Canciones: se muestra al escribir la dirección http://localhost:8080/borrarCancion/. En esta página, ustedes podrán borrar canciones del archivo lista_de_canciones.txt, para ello deben ingresar el ID, nombre o artista de la(s) canción(es) a eliminar.
../../_images/2016-1_borrar_canciones.png
  • Borrar Listas: se muestra al escribir la dirección http://localhost:8080/borrarListas/. En esta página, ustedes podrán borrar Playlist del archivo listas_de_reproducciones.txt. En esta página ustedes deben seleccionar las listas a borrar.
../../_images/2016-1_borrar_playlist.png

El sitio cuenta con una barra de navegación que permite entrar a cada uno de los sitios mostrados anteriormente.

Representación

El sitio web permite que cualquier persona realice cambios en la información. Para mantener la completa integridad del sistema es importante respetar la representación de las distintas estructuras que se les entrega a continuación. De lo contrario, el sistema podría responder de una forma inesperada.

El archivo de texto lista_de_canciones.txt tiene la siguiente estructura:

idPista<SEP>IdCancion<SEP>nombreArtista<SEP>tituloCancion

Además, el archivo listas_de_reproducciones.txt, tiene la siguiente estructura:

nombreLista;;nombreCancion1;artistaCancion1;IDCancion1;;nombreCancion2;artistaCancion2;IDCancion2;;...;;nombreCancion;;artistaCancionN;IDCancionN;;

Cada línea en este archivo corresponde a un Playlist, el cual puede tener N canciones.

Importante Se recomienda no modificar el archivo main.py, puesto que su modificación significa un posible funcionamiento erroneo del sistema.

Qué hay que implementar

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

  • obtener_canciones(archivo): ésta función está encargada de obtener todas las canciones del archivo lista_de_canciones.txt, que no tengan el título de la canción o el nombre del artista mayor a 40. La función debe retornar una lista de texto, ordenada de forma alfabética en base al nombre del artista. El texto de las listas corresponde a una línea del archivo, la cual no puede tener el nombre del artista o título de la canción con un largo mayor a 40.

  • filtro_busqueda(palabrasClaves,todasCanciones): ésta función corresponde al filtro de búsqueda que aplica el usuario para buscar una o más canciones de forma exacta, es decir, las palabras deben ser idénticas para ser mostradas en el filtro. Los parámetros que se ingresan son la lista de palabras palabrasClaves, correspondiente a la lista con todas las palabras claves con las que se quiere realizar la búsqueda de una canción. Estas palabras se deben buscar en los títulos, artistas o ID de canciones. La función debe retornar todas las canciones que tengan éstas palabras claves. El segundo parámetro es todasCanciones, correspondiente a una lista con todas las canciones del sistema.

  • filtro_palabras_largas(todasCanciones, maximo): ésta función está encargada de retornar todas las palabras que tengan menos de maximo caracteres en su título o nombre de artista. Estas serán obtenidas de la variable todasCanciones, la cual contiene todas las caciones del archivo lista_de_canciones.txt. Esta función debe ser creada considerando 40 como valor máximo por defecto.

  • generar_codigo(inicio,intermedio): Ésta función recibe 2 string, correspondientes a los textos de inicio e intermedio que contiene el id de la canción. La función está encargada de generar los códigos a usar para una canción, de acuerdo a las siguientes indicaciones:

    Texto de inicio + 5 letras al azar + texto intermedio + 8 letras y/o números al azar.
    Por ejemplo:
    # notar que el signo '+' está puesto para evidenciar la estructura, este no se debe considerar en la creación
    generar_codigo("SO","12A")
    'SO+ZLPUO+12A+GLNQS58G'
    generar_codigo("TRMM","F")
    'TRMM+VGROF+F+A8HLKWYL'

La función debe retornar el código con la estructura antes mencionada, según las variables ingresadas inicio y intermedio, que corresponde a los caracteres en dichas posiciones.

  • agregar_cancion(datos): ésta función está encargada de agregar una canción al archivo lista_de_canciones.txt. La función recibe el diccionario datos, el cual posee la siguiente estructura:

    datos = {'cancion': 'nombre de la cancion', 'artista': 'nombre del artista'}
    

La función debe agregar la canción al archivo antes mencionado, según la estructura:

idPista<SEP>IdCancion<SEP>nombreArtista<SEP>tituloCancion
  • eliminar_canciones(diccionarioCanciones): ésta función está encargada de eliminar una o más canciones de archivo lista_de_canciones.txt. La función recibe la variable diccionarioCanciones, la cual posee la siguiente estructura:

    diccionarioCanciones = {'IdCancion1': 'tituloCancion1', 'IdCancion2': 'tituloCancion2', 'IdCancion3': 'tituloCancion3',...,'IdCancionN': 'tituloCancionN'}

Este contiene todas las canciones que se deben eliminar.

  • crear_Playlist(diccionarioCanciones): ésta función está encargada de crear los Playlist, según lo que el usuario haya seleccionado en la página. Las canciones a considerar para crear un Playlist están en la variable diccionarioCanciones, el cual tiene la estructura:

    diccionarioCanciones = {nombreLista': 'Nombre de la lista',  'IdCancion1': 'tituloCancion1', 'IdCancion2': 'tituloCancion2', 'IdCancion3': 'tituloCancion3',...,'IdCancionN': 'tituloCancionN'}

El Playlist debe ser agregado al archivo listas_de_reproducciones.txt, con la estructura:

nombreLista;;nombreCancion1;artistaCancion1;IDCancion1;;nombreCancion2;artistaCancion2;IDCancion2;;...;;artistaCancionN;IDCancionN;;
  • obtener_Playlist(archivo): ésta función está encargada de obtener todos los Playlists del archivo listas_de_reproducciones.txt. Los Playlists deben ser retornados en un diccionario que contenga como llave el nombre del Playlist y como valor, una lista con las canciones; como la estructura presentada a continuación:

    {'NombreLista1': [('nombreCancion1', 'artistaCancion1', 'idCancion1'), ('nombreCancion2', 'artistaCancion2', 'idCancion2'),...,('nombreCancionN', 'artistaCancionN', 'idCancionN')], 'NombreLista2': [('nombreCancion1', 'artistaCancion1', 'idCancion1'), ('nombreCancion2', 'artistaCancion2', 'idCancion2'),...,('nombreCancionN', 'artistaCancionN', 'idCancionN')],...,'NombreListaN': [('nombreCancion1', 'artistaCancion1', 'idCancion1'), ('nombreCancion2', 'artistaCancion2', 'idCancion2'),...,('nombreCancionN', 'artistaCancionN', 'idCancionN')]}
  • borrar_Playlist(diccionarioPlaylist,archivo): ésta función está encargada de borrar del archivo listas_de_reproducciones.txt todos los Playlist seleccionados por el usuario, los cuales se encuentran en el diccionarioPlaylist. Este diccionario tiene la forma:

    diccionarioPlaylist = {'NombreLista1': [('nombreCancion1', 'artistaCancion1', 'idCancion1'), ('nombreCancion2', 'artistaCancion2', 'idCancion2'),...,('nombreCancionN', 'artistaCancionN', 'idCancionN')], 'NombreLista2': [('nombreCancion1', 'artistaCancion1', 'idCancion1'), ('nombreCancion2', 'artistaCancion2', 'idCancion2'),...,('nombreCancionN', 'artistaCancionN', 'idCancionN')],...,'NombreListaN': [('nombreCancion1', 'artistaCancion1', 'idCancion1'), ('nombreCancion2', 'artistaCancion2', 'idCancion2'),...,('nombreCancionN', 'artistaCancionN', 'idCancionN')]}

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 es obligación borrarlos, pero puede hacerlo si gusta.

Entrega

La fecha de entrega es el Miércoles 15 de Junio a las 23:00 hrs vía Aula`_.

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 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.