Después de resolver la tarea 3, usted será capaz de:
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.
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.
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:
El sitio cuenta con una barra de navegación que permite entrar a cada uno de los sitios mostrados anteriormente.
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.
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')]}
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.
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.