From 792b23c82963d8333b58cd91dfd74bed4d734faf Mon Sep 17 00:00:00 2001 From: renato97 Date: Mon, 10 Nov 2025 15:28:53 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=8F=B7=EF=B8=8F=20Corregir=20detecci?= =?UTF-8?q?=C3=B3n=20de=20nombres=20de=20videos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Implementar obtención previa del título del video antes de descargar - Usar títulos reales de YouTube como nombres de archivos - Limpiar caracteres especiales para compatibilidad con sistema de archivos - Mantener compatibilidad con UUIDs como fallback - Mejorar experiencia de usuario con nombres descriptivos Antes: archivos con UUID (ej: 16dc1717-25b4-40fb-9069-3a639e331a65.mp3) Ahora: archivos con títulos (ej: Rick Astley - Never Gonna Give You Up.mp3) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- app.py | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/app.py b/app.py index 0d93b3d..58e6d43 100644 --- a/app.py +++ b/app.py @@ -110,9 +110,46 @@ def download_video(url, download_id, format_type='mp4'): # return try: + # Primero obtener información del video para el título + info_opts = { + 'quiet': True, + 'no_warnings': True, + 'extract_flat': False, + 'restrictfilenames': True, + 'no_check_certificate': True, + 'socket_timeout': 60, + 'retries': 5, + 'ignoreerrors': True, + 'http_headers': { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36', + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', + 'Accept-Language': 'en-US,en;q=0.5', + 'Accept-Encoding': 'gzip, deflate', + 'DNT': '1', + 'Connection': 'keep-alive', + 'Upgrade-Insecure-Requests': '1' + } + } + + # Obtener información del video para usar el título + video_title = None + try: + with yt_dlp.YoutubeDL(info_opts) as ydl: + info = ydl.extract_info(url, download=False) + video_title = info.get('title', f'video_{download_id}') + # Limpiar el título para el sistema de archivos + import re + video_title = re.sub(r'[<>:"/\\|?*]', '', video_title) + video_title = video_title.strip() + if not video_title: + video_title = f'video_{download_id}' + except Exception as e: + print(f"Error obteniendo título del video: {e}") + video_title = f'video_{download_id}' + # Estrategia 1: Configuración simple y robusta ydl_opts = { - 'outtmpl': os.path.join(app.config['DOWNLOAD_FOLDER'], f'{download_id}.%(ext)s'), + 'outtmpl': os.path.join(app.config['DOWNLOAD_FOLDER'], f'{video_title}.%(ext)s'), 'progress_hooks': [lambda d: hook(d, download_id)], 'quiet': True, 'no_warnings': True,