# 🔧 Solución para Error HTTP 429 - Rate Limiting de YouTube ## ❌ Problema ``` {"detail":"Error al descargar subtítulos desde YouTube (HTTP 429). El video puede tener restricciones."} ``` **HTTP 429** significa "Too Many Requests" - YouTube está limitando las peticiones desde tu IP. --- ## ✅ Soluciones Implementadas ### 1. Sistema de Retry Automático El sistema ahora intenta automáticamente 3 veces con espera incremental: - Intento 1: Inmediato - Intento 2: Espera 2 segundos - Intento 3: Espera 4 segundos ### 2. Headers de Navegador Se agregaron headers que simulan un navegador real: ```python headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...', 'Accept': 'application/json, text/plain, */*', 'Accept-Language': 'es-ES,es;q=0.9,en;q=0.8', 'Referer': 'https://www.youtube.com/', } ``` ### 3. Mensajes de Error Mejorados Ahora el sistema proporciona mensajes específicos para cada error: - **HTTP 429**: Rate limiting - espera y agrega cookies - **HTTP 403**: Restricciones geográficas o de edad - **HTTP 404**: Subtítulos no disponibles - **Timeout**: Problema de conexión --- ## 🚀 Soluciones Adicionales ### Opción 1: Usar Cookies de YouTube (RECOMENDADO) Las cookies autenticadas evitan el rate limiting. #### Paso 1: Exportar Cookies desde tu Navegador **Chrome/Edge:** 1. Instala la extensión: [Get cookies.txt LOCALLY](https://chrome.google.com/webstore) 2. Ve a youtube.com y asegúrate de estar logueado 3. Haz clic en el icono de la extensión 4. Clic en "Export" → "Export cookies.txt" **Firefox:** 1. Instala el addon: [cookies.txt](https://addons.mozilla.org/firefox/addon/cookies-txt/) 2. Ve a youtube.com 3. Haz clic en el icono del addon 4. Guarda el archivo #### Paso 2: Colocar el archivo cookies.txt ```bash # Copiar el archivo descargado al directorio del proyecto cp ~/Downloads/cookies.txt /path/to/TubeScript-API/cookies.txt # Dar permisos correctos chmod 600 cookies.txt ``` #### Paso 3: Reiniciar los contenedores ```bash docker-compose restart ``` ### Opción 2: Esperar y Reintentar Si no quieres usar cookies, simplemente espera unos minutos antes de volver a intentar. ```bash # Espera 5-10 minutos # Luego intenta nuevamente ``` ### Opción 3: Usar una VPN o Cambiar IP Si YouTube bloqueó tu IP: 1. Conecta a una VPN 2. O reinicia tu router para obtener nueva IP 3. Intenta nuevamente ### Opción 4: Usar Proxy Configura yt-dlp para usar un proxy: ```bash # Edita docker-compose.yml y agrega: environment: - HTTP_PROXY=http://tu-proxy:puerto - HTTPS_PROXY=http://tu-proxy:puerto ``` --- ## 🧪 Probar la Solución ### Test 1: Sin Cookies ```bash # Probar endpoint curl -X GET "http://localhost:8080/transcript/CSlg5S9yL2E?lang=es" ``` Si falla con 429, espera 2 minutos y vuelve a intentar. ### Test 2: Con Cookies ```bash # Después de agregar cookies.txt docker-compose restart # Probar nuevamente curl -X GET "http://localhost:8080/transcript/CSlg5S9yL2E?lang=es" ``` ### Test 3: Verificar Cookies en el Contenedor ```bash # Verificar que cookies.txt esté presente docker exec tubescript_api ls -lh cookies.txt # Ver contenido (primeras líneas) docker exec tubescript_api head -5 cookies.txt ``` --- ## 🔍 Identificar el Problema ### Ver Logs Detallados ```bash # Logs del API docker logs tubescript_api 2>&1 | tail -50 # Logs de Streamlit docker logs streamlit_panel 2>&1 | tail -50 ``` ### Probar Manualmente con yt-dlp ```bash # Entrar al contenedor docker exec -it tubescript_api /bin/bash # Probar yt-dlp directamente yt-dlp --dump-json --skip-download \ --write-auto-subs --sub-format json3 --sub-langs "es.*" \ "https://www.youtube.com/watch?v=CSlg5S9yL2E" # Con cookies yt-dlp --cookies cookies.txt --dump-json --skip-download \ --write-auto-subs --sub-format json3 --sub-langs "es.*" \ "https://www.youtube.com/watch?v=CSlg5S9yL2E" ``` --- ## ⚠️ Prevención de Rate Limiting ### 1. No Hacer Peticiones Excesivas Evita hacer decenas de peticiones seguidas. YouTube detecta esto como abuso. ### 2. Usar Cookies Siempre Las cuentas autenticadas tienen límites más altos. ### 3. Caché de Respuestas Implementar un sistema de caché para no pedir los mismos subtítulos repetidamente. ### 4. Espaciar las Peticiones Si haces múltiples peticiones, espera al menos 1-2 segundos entre cada una. --- ## 📊 Códigos de Error HTTP | Código | Significado | Solución | |--------|-------------|----------| | **429** | Too Many Requests | Esperar + agregar cookies | | **403** | Forbidden | Restricciones geográficas/cookies | | **404** | Not Found | Subtítulos no disponibles | | **503** | Service Unavailable | YouTube caído temporalmente | --- ## 🛠️ Mejoras Implementadas en el Código ### Antes: ```python response = requests.get(sub_url, timeout=30) if response.status_code != 200: return None, f"Error HTTP {response.status_code}" ``` ### Después: ```python # Headers de navegador headers = { 'User-Agent': 'Mozilla/5.0...', 'Accept': 'application/json, text/plain, */*', 'Referer': 'https://www.youtube.com/', } # Retry con espera incremental max_retries = 3 for attempt in range(max_retries): response = requests.get(sub_url, headers=headers, timeout=30) if response.status_code == 200: break elif response.status_code == 429: if attempt < max_retries - 1: time.sleep(2 * (attempt + 1)) # 2s, 4s, 6s continue return None, "Rate limiting - agrega cookies.txt" # ... otros casos ``` --- ## 💡 Recomendaciones ### Para Uso Personal/Desarrollo ✅ Usar cookies.txt de tu cuenta de YouTube ✅ No hacer más de 10-15 peticiones por minuto ✅ Reiniciar servicios si cambias cookies ### Para Producción ✅ Implementar caché de subtítulos ✅ Usar múltiples IPs rotativas ✅ Considerar YouTube Data API oficial (con cuota) ✅ Implementar rate limiting en tu API --- ## 🔄 Actualizar el Sistema Si ya tienes el sistema corriendo, actualiza con: ```bash # Detener servicios docker-compose down # Reconstruir con los cambios docker-compose build --no-cache # Iniciar nuevamente docker-compose up -d # Verificar logs docker-compose logs -f ``` --- ## 📞 Soporte Adicional Si el problema persiste después de aplicar estas soluciones: 1. **Verifica tu conexión**: `ping youtube.com` 2. **Prueba otro video**: Algunos videos tienen más restricciones 3. **Actualiza yt-dlp**: `docker exec tubescript_api pip install --upgrade yt-dlp` 4. **Revisa los logs completos**: `docker logs tubescript_api 2>&1 | grep -i error` --- ## ✅ Checklist de Solución - [ ] Agregar cookies.txt al proyecto - [ ] Reiniciar contenedores Docker - [ ] Verificar que cookies.txt esté en el contenedor - [ ] Probar endpoint nuevamente - [ ] Esperar 5 minutos si sigue fallando - [ ] Verificar logs para otros errores - [ ] Probar con otro video - [ ] Actualizar yt-dlp si es necesario --- **TubeScript API Pro © 2026** Solución de Rate Limiting Implementada ✅