Skip to content

DiscipleOFGod/DevElianVideoDownloader

Repository files navigation

DevElian Video Downloader

DevElian Video Downloader es una aplicación web diseñada en python con el Framework Flask y la librería Pytube, hecha principalmente para practicar peticiones entre el Framework Flask y un servidor.

Disclaimer: Esta herramienta está diseñada únicamente para fines educativos. No promueve la descarga ni distribución de contenido protegido por derechos de autor, ni busca infringir los términos de servicio de YouTube. Los usuarios son responsables de asegurarse de que su uso de esta herramienta cumpla con todas las leyes aplicables y los términos de servicio de YouTube.

Características principales

-Descargar Videos.
-Descargar Audio.
-Diseño Minimalista.
-Diseño Intuitivo.

Interfaz

Instalación

Para instalar esta herramienta se necesita ejecutar el archivo Installer.py este hace una comprobación si el usuario tiene instaladas las librerias necesarias para la ejecución del programa.

import subprocess
import sys

def install(package):
    subprocess.check_call([sys.executable, "-m", "pip", "install", package])

try:
    import flask
except ImportError:
    install('flask')

try:
    import pytube
except ImportError:
    install('pytube')

try:
    from flask_cors import CORS
except ImportError:
    install('flask-cors')


print("Todas las dependencias están descargadas")

Recomendación: Es posible que deba realizar un entorno virtual dependiendo de la configuración de su entorno más que nada para no tener conflicto con otras librerias.

Cómo Funciona

Botón Buscar
Luego de poner la url de Youtube y tocar el botón buscar aparece información básica del video (La miniatura y el título del video).

Petición:

@app.route('/info', methods=['POST'])
def get_video_info():
    url = request.form['url']
    yt = YouTube(url)
    
    video_info = {
        'title': yt.title,
        'thumbnail_url': yt.thumbnail_url
    }
    
    return jsonify(video_info)

Una vez le damos al botón "buscar" con la libreria Pytube obtenemos la información del video, en este caso el título y la miniatura del video y enviamos los datos en formato json.

Botones de descargas:

Luego de asegurarnos de que ingresamos el video correcto podemos descarga nuestro archivo.

Petición

@app.route('/download', methods=['POST'])
def download():
    url = request.form['url']
    yt = YouTube(url)
    stream = yt.streams.get_highest_resolution()
    
    # Descargar el video en la carpeta de descargas
    if not os.path.exists(DOWNLOAD_FOLDER):
        os.makedirs(DOWNLOAD_FOLDER)
    stream.download(output_path=DOWNLOAD_FOLDER)
    
    # Devolver el nombre del archivo descargado en la respuesta JSON
    return jsonify({'message': 'Finalizado, descargue el archivo dandole click abajo⬇⬇⬇⬇⬇⬇', 'filename': stream.default_filename})


Nota: Todos los archivos se descargaran dentro del directorio donde tenga el programa en la carpeta "downloads" para luego enviarlo al cliente en la página web. Ya pensé en esto para que todos esos archivos no estén ocupando espacio en disco, basta solamente con reiniciar el servidor y los archivos dentro de la carpeta se borrarán.

#Para limpiar todos los videos que queden en caché
for f in os.listdir(DOWNLOAD_FOLDER):
    os.remove(os.path.join(DOWNLOAD_FOLDER, f))