TubeScript-API/SOLUCION_FINAL_DOCKER.md

356 lines
6.9 KiB
Markdown

# ✅ SOLUCIÓN FINAL SIMPLIFICADA - Error de Formato de Subtítulos
## 📝 Resumen del Problema
```
ERROR: [youtube] 6hini9Xz_fc: Requested format is not available
```
Este error ocurre porque yt-dlp no puede obtener los subtítulos en el formato solicitado.
---
## ✅ Cambios Implementados en main.py
### 1. Comando Simplificado (Sin Restricciones de Formato)
**ANTES:**
```python
command = [
"yt-dlp",
"--skip-download",
"--write-auto-subs",
"--sub-format", "json3", # ❌ Esto causaba el error
"--sub-langs", f"{lang}.*",
...
]
```
**DESPUÉS:**
```python
command = [
"yt-dlp",
"--skip-download",
"--dump-json", # ✅ Solo obtener metadatos
"--no-warnings",
"--extractor-args", "youtube:player_client=android",
url
]
```
### 2. Búsqueda Flexible de Subtítulos
El código ahora:
1. Obtiene SOLO los metadatos del video
2. Busca subtítulos en el JSON de metadatos
3. Acepta CUALQUIER formato disponible
4. Descarga directamente desde la URL encontrada
```python
# Buscar en automatic_captions
for lang_key in automatic_captions.keys():
if lang in lang_key or lang_key.startswith(lang):
# Tomar el PRIMER formato disponible (sin filtrar)
if automatic_captions[lang_key]:
requested_subs = {lang_key: automatic_captions[lang_key][0]}
break
```
---
## 🚀 CÓMO APLICAR LA SOLUCIÓN
### Método 1: Reconstruir Docker (Recomendado)
```bash
# Limpiar todo
docker stop $(docker ps -aq) 2>/dev/null
docker rm $(docker ps -aq) 2>/dev/null
# Reconstruir desde cero
cd /Users/cesarmendivil/Documents/Nextream/TubeScript-API
docker-compose build --no-cache
# Iniciar
docker-compose up -d
# Ver logs
docker-compose logs -f tubescript-api
```
### Método 2: Si Docker da problemas
```bash
# Reiniciar Docker Desktop
# 1. Cierra Docker Desktop completamente
# 2. Ábrelo nuevamente
# 3. Espera que inicie completamente
# 4. Ejecuta:
docker-compose down
docker-compose build --no-cache
docker-compose up -d
```
### Método 3: Build Manual
```bash
# Build solo del API
docker build -t tubescript-api -f Dockerfile .
# Ejecutar manualmente
docker run -d \
--name tubescript_api \
-p 8080:8000 \
-v "$(pwd)/cookies.txt:/app/cookies.txt:ro" \
-v "$(pwd):/app" \
tubescript-api \
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
# Ver logs
docker logs -f tubescript_api
```
---
## 🧪 PROBAR LA SOLUCIÓN
### Test 1: Verificar que Docker está corriendo
```bash
docker ps
```
Debería mostrar al menos `tubescript_api` corriendo.
### Test 2: Probar el endpoint problemático
```bash
# Esperar 10 segundos después de iniciar
sleep 10
# Probar
curl -X GET "http://localhost:8080/transcript/6hini9Xz_fc?lang=es"
```
### Test 3: Ver logs en tiempo real
```bash
# Terminal 1: Ver logs
docker logs -f tubescript_api
# Terminal 2: Hacer petición
curl -X GET "http://localhost:8080/transcript/6hini9Xz_fc?lang=es"
```
---
## 🔍 DIAGNÓSTICO DE PROBLEMAS
### Problema: Docker no responde
```bash
# Reiniciar Docker
killall Docker
open -a Docker
# Esperar 30 segundos
sleep 30
# Verificar
docker ps
```
### Problema: Puerto 8080 ocupado
```bash
# Ver qué usa el puerto
lsof -i :8080
# Matar proceso
kill -9 $(lsof -ti:8080)
# Cambiar puerto en docker-compose.yml
# ports:
# - "8081:8000" # Usar 8081 en lugar de 8080
```
### Problema: Contenedor se detiene inmediatamente
```bash
# Ver logs completos
docker logs tubescript_api
# Ejecutar en modo interactivo
docker run -it --rm \
-p 8080:8000 \
-v "$(pwd):/app" \
tubescript-api \
bash
# Dentro del contenedor:
python3 main.py
```
---
## 📊 QUÉ HACE EL CÓDIGO AHORA
### Flujo Simplificado:
```
1. Usuario pide transcripción de video
2. yt-dlp obtiene SOLO metadatos (sin bajar subtítulos)
3. Parseamos el JSON de metadatos
4. Buscamos en:
- automatic_captions
- subtitles
5. Tomamos el PRIMER formato disponible
(json3, srv3, vtt, o lo que haya)
6. Descargamos desde la URL encontrada
7. Parseamos según el formato
8. ✅ Retornamos formato estándar
```
### Ventajas:
**Más rápido** - Solo obtiene metadatos una vez
**Más flexible** - Acepta cualquier formato
**Menos errores** - No forzamos formatos específicos
**Mejor compatibilidad** - Funciona con más videos
---
## 💡 ALTERNATIVA: Probar Localmente Sin Docker
Si Docker sigue dando problemas, puedes probar localmente:
```bash
# 1. Instalar dependencias
pip install fastapi uvicorn requests yt-dlp
# 2. Ejecutar el API directamente
cd /Users/cesarmendivil/Documents/Nextream/TubeScript-API
uvicorn main:app --reload --port 8080
# 3. En otra terminal, probar:
curl -X GET "http://localhost:8080/transcript/6hini9Xz_fc?lang=es"
```
---
## 🎯 VERIFICACIÓN FINAL
Una vez que hayas reconstruido, verifica:
```bash
# 1. Contenedor corriendo
docker ps | grep tubescript_api
# 2. API respondiendo
curl http://localhost:8080/docs
# 3. Endpoint de transcripción
curl -X GET "http://localhost:8080/transcript/6hini9Xz_fc?lang=es" | jq
# 4. Logs sin errores
docker logs tubescript_api 2>&1 | tail -20
```
---
## ✅ CHECKLIST
- [ ] Detener servicios Docker actuales
- [ ] Verificar que Docker Desktop esté corriendo
- [ ] Reconstruir imagen: `docker-compose build --no-cache`
- [ ] Iniciar servicios: `docker-compose up -d`
- [ ] Esperar 10 segundos para que inicie
- [ ] Verificar contenedor: `docker ps`
- [ ] Probar endpoint: `curl http://localhost:8080/transcript/6hini9Xz_fc?lang=es`
- [ ] Ver logs: `docker logs tubescript_api`
- [ ] Si funciona: ✅ ¡Listo!
- [ ] Si falla: Ver logs y diagnosticar
---
## 🆘 SI TODO FALLA
### Opción 1: Reinstalar Docker
1. Desinstala Docker Desktop
2. Descarga la última versión
3. Instala
4. Reinicia la Mac
5. Abre Docker Desktop
6. Prueba de nuevo
### Opción 2: Usar Python Local
```bash
# Instalar en entorno virtual
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# Ejecutar
uvicorn main:app --reload --port 8080
```
### Opción 3: Contactar Soporte
Si nada funciona, proporciona:
- Logs completos: `docker logs tubescript_api`
- Versión de Docker: `docker --version`
- Sistema: `uname -a`
- Error exacto que ves
---
## 📝 RESUMEN DE CAMBIOS EN EL CÓDIGO
| Archivo | Cambio | Línea Aprox. |
|---------|--------|--------------|
| main.py | Comando yt-dlp simplificado | ~98-108 |
| main.py | Búsqueda flexible de subtítulos | ~125-145 |
| main.py | Acepta cualquier formato | ~125-145 |
| main.py | Parser multi-formato | ~30-80 |
---
## 🎉 RESULTADO ESPERADO
Después de aplicar los cambios:
```bash
curl -X GET "http://localhost:8080/transcript/6hini9Xz_fc?lang=es"
```
**Debería retornar:**
```json
{
"video_id": "6hini9Xz_fc",
"count": 150,
"segments": [
{
"start": 0.0,
"duration": 2.5,
"text": "Texto del subtítulo..."
},
...
]
}
```
---
**TubeScript API Pro © 2026**
¡Reconstruye Docker y prueba!