Mi nuevo proyecto: MusicDL, descarga música de forma fácil

Nota: Prácticamente todos los enlaces que aparecen en esta publicación están en inglés. No es culpa mía, todos son proyectos o librerías que están en ese idioma.

En esta ocasión, me gustaría escribir acerca del nuevo proyecto que estoy desarrollando. Lo he llamado MusicDL, es una aplicación cuyo propósito es permitir la búsqueda, reproducción y descarga de música desde diferentes fuentes en internet. Lo he hecho fuertemente inspirado en el proyecto de Chris norman, GMP3 (una aplicación para manejar una subscripción de Google Play Music, que entre otras cosas, permite buscar, reproducir y descargar desde este servicio).

Para ser honesto, hace unos días comencé un curso de Web scraping en Python y quería aplicar algo de lo que he aprendido en un proyecto sencillo.

Además del scraping (extracción de información de páginas web), también quería trabajar con Python 3 y sus nuevas características. Sé que la sintaxis entre Python 2 y 3 no es muy diferente, pero en Python 3 se cuenta con mejoras y algunas cosas que ya no se soportan y estaban presentes en Python 2. En la actualidad ninguno de mis proyectos se encuentra preparado para migrar a Python 3. Así que por ahora, en lugar de migrar un montón de código y escribir un nuevo módulo para generar el ejecutable en Windows (Py2exe, el módulo con el que hacemos esto en Python 2, aún no se encuentra listo para trabajar con Python 3.6, la última versión de Python 3), he decidido crear un proyecto simple que me permita probar una nueva versión de Python, un nuevo paquete para construir los ejecutables de Windows, y un nuevo módulo que planeamos usar en el futuro en TWBlue, llamado VLC.

Así que así había nacido MusicDL. Básicamente es un experimento para probar el soporte para Python 3, WXPython phoenix (WX Python para Python 3), python-vlc (Módulo que permite controlar LibVLC y reproducir algunos de los formatos que VLC puede manejar) y pyinstaller (módulo para crear archivos ejecutables en Windows, que luego pueden distribuirse).

Al iniciar el proyecto, había añadido un módulo que buscaba y obtenía información para una página web en ruso, llamada zaycev.net.. Mi idea sobre lo que hace este programa es bastante simple: Cada servicio (es decir, cada página de la que se puede extraer información y ficheros de audio) debe ir en un módulo separado. Toda la lógica de búsqueda y extracción de información debe estar contenida en ese módulo. Cuando el usuario realice una búsqueda, la aplicación seleccionará el módulo basado en la elección del usuario, creará una nueva instancia de ese módulo, y añadirá todos los resultados que arroje la ejecución de la función de búsqueda del módulo.

Después de zaycev.net, he añadido el soporte para Youtube, gracias a youtube-dl. En youtube, si quieres reproducir el audio, se recuperará el audio de mejor calidad posible (normalmente, el audio en mejor calidad está contenido en formatos compatibles con WebM), y cuando se desea descargar, en lugar de simplemente descargar el audio en WebM, MusicDL intentará recodificar el audio en formato mp3, gracias también a VLC.

Finalmente, he añadido un módulo de actualización automática, y eso fue todo. La primer versión de MusicDL había sido liberada. He generado dos variantes, una versión portable, en un fichero zip, y otra instalable. Deberían funcionar en sistemas de 32 y 64 bits, y ser compatibles con Windows vista y posterior.

Segunda versión

Para la segunda versión que he liberado (la última versión hasta ahora),he corregido algunos errores que la gente había reportado, añadí una traducción al español en la aplicación; así como módulos para buscar y descargar desde mail.ru/music y VK. Además, he escrito una Guía de inicio rápido y una lista de cambios en la página web de la aplicación, que también se encuentran disponibles desde la barra de menú del programa. Ambos documentos se encuentran en español.

Otro cambio que he decidido realizar en esta nueva versión se trata de la versión de Python que se usa como base del proyecto. Anteriormente, había utilizado la última versión disponible de Python 3 hasta la fecha. Esto me permitía contar con todas las características y novedades de Python, pero dejaba de lado el soporte para Windows antiguos, especialmente XP. He recibido algo de retroalimentación de usuarios para no dejar de lado a Windows XP. Lo siguiente que intenté, para esta nueva versión, es disminuir la versión de Python 3 utilizada, hacia la 3.4, la última versión que incluye soporte para XP. De todos modos no funcionó (al menos, no he podido confirmar que la aplicación funciona en XP), y ha causado un problema adicional. El módulo de actualización automática no funciona correctamente debido a que la versión de Python usada en 0.1 no corresponde con la de la actualización 0.2. Así que en lugar de actualizar el programa automáticamente, los usuarios deberán descargar la aplicación de forma manual por esta ocasión. De nuevo, he publicado dos versiones, una instalable y la otra portable.

Futuro

No tengo bien definido qué es lo que voy a hacer con este proyecto. Debido a que he utilizado este proyecto para aprender y aplicar conceptos que pienso utilizar en un futuro cercano, no tengo claro qué camino seguiré con el código fuente que ya está escrito. Para empezar, me gustaría poder brindar soporte a Windows XP, sin que esto afecte de ninguna manera a usuarios que utilizan sistemas más recientes. Probablemente la manera más fácil de hacer esto es crear código compatible con Python 2 y 3. Para que esto funcione, parece que habrá que construir los ejecutables de Windows con Pyinstaller para Python 3, y Py2exe para Python 2 (en Python 2.7, Pyinstaller no termina de añadir todos los contenidos del paquete pubsub, necesario para la aplicación. Creo que puede ser algo relacionado con Este pull request).

Varia gente me ha preguntado si pienso hacer el código fuente disponible en algún repositorio de Github, tal como he hecho con otros proyectos (TWBlue, Socializer). Honestamente no lo sé. He pensado mucho sobre hacer este software bajo una licencia de código abierto, lo que permitiría que otros pudieran crear más servicios de búsqueda, para que los usuarios finales puedan descargar desde más sitios. Ya se incluye youtube-dl, que puede descargar contenido desde más de 1000 sitios, solo hace falta escribir el código para realizar búsquedas y convertirlas en resultados que puedan agregarse a la interfaz del programa. Aunque lo cierto es que tampoco sé si habrá gente que vaya a hacer esto. Pero esto es más un dilema entre software de código abierto o propietario que llevo en la cabeza por un tiempo ya.