#!/bin/bash # Test completo de TubeScript-API con cookies reales set -e REPO="/home/xesar/PycharmProjects/TubeScript-API" cd "$REPO" LOG="/tmp/tubescript_test_$(date +%H%M%S).log" echo "======================================================" echo " TubeScript-API — Test completo" echo " Log: $LOG" echo "======================================================" # ---------- 1. Reconstruir imagen ---------- echo "" echo ">>> [1/5] Parando contenedor anterior..." docker stop tubescript_api 2>/dev/null && echo " Parado." || echo " No estaba corriendo." docker rm tubescript_api 2>/dev/null && echo " Eliminado." || echo " No existia." echo "" echo ">>> [2/5] Construyendo imagen sin caché..." docker build --no-cache -f Dockerfile.api -t tubescript-api:latest . 2>&1 \ | grep -E "^#|DONE|ERROR|naming|Built" || true echo " Build OK." # ---------- 2. Levantar ---------- echo "" echo ">>> [3/5] Levantando contenedor..." docker run -d \ --name tubescript_api \ --network tubescript-network \ -p 8282:8000 \ -v "${REPO}/data:/app/data:rw" \ -e PYTHONUNBUFFERED=1 \ -e API_COOKIES_PATH=/app/data/cookies.txt \ --restart unless-stopped \ tubescript-api:latest echo " Esperando arranque (8s)..." sleep 8 docker logs tubescript_api 2>&1 | grep -E "Uvicorn running|startup|ERROR" | head -5 # ---------- 3. Verificar código en imagen ---------- echo "" echo ">>> [4/5] Verificando lógica de player_client en imagen..." echo " Líneas clave en main.py:" docker exec tubescript_api grep -n "mweb\|_yt_client_args\|client =" /app/main.py | head -10 # ---------- 4. Pruebas yt-dlp directas ---------- echo "" echo ">>> [5/5] Pruebas yt-dlp..." echo "" echo " [A] android SIN cookies (cliente base, sin n-challenge):" docker exec tubescript_api yt-dlp \ --no-warnings --skip-download \ --extractor-args "youtube:player_client=android" \ --print title \ "https://www.youtube.com/watch?v=dQw4w9WgXcQ" 2>&1 \ && echo " ✅ OK" || echo " ❌ FALLO" echo "" echo " [B] mweb,android CON cookies (mweb acepta cookies web, android como fallback):" docker exec tubescript_api yt-dlp \ --cookies /app/data/cookies.txt \ --no-warnings --skip-download \ --extractor-args "youtube:player_client=mweb,android" \ --print title \ "https://www.youtube.com/watch?v=dQw4w9WgXcQ" 2>&1 \ && echo " ✅ OK" || echo " ❌ FALLO" echo "" echo " [C] dump-json CON cookies (para /debug/metadata):" docker exec tubescript_api yt-dlp \ --cookies /app/data/cookies.txt \ --no-warnings --skip-download \ --extractor-args "youtube:player_client=mweb" \ --dump-json \ "https://www.youtube.com/watch?v=dQw4w9WgXcQ" 2>&1 \ | python3 -c "import sys,json; d=json.loads(sys.stdin.read()); print(' title:', d.get('title')); print(' uploader:', d.get('uploader'))" \ && echo " ✅ OK" || echo " ❌ FALLO" # ---------- 5. Endpoints API ---------- echo "" echo " [D] Endpoint /debug/metadata:" sleep 2 RESULT=$(curl -s --max-time 30 "http://127.0.0.1:8282/debug/metadata/dQw4w9WgXcQ") echo "$RESULT" | python3 -c " import sys,json d=json.loads(sys.stdin.read()) if 'detail' in d: print(' ❌ ERROR:', d['detail'][:200]) else: print(' ✅ title :', d.get('title','?')) print(' ✅ uploader:', d.get('uploader','?')) print(' ✅ is_live :', d.get('is_live','?')) " 2>&1 echo "" echo " [E] Endpoint /transcript/dQw4w9WgXcQ?lang=en:" RESULT2=$(curl -s --max-time 60 "http://127.0.0.1:8282/transcript/dQw4w9WgXcQ?lang=en") echo "$RESULT2" | python3 -c " import sys,json d=json.loads(sys.stdin.read()) if 'detail' in d: print(' ❌ ERROR:', d['detail'][:200]) else: print(' ✅ count :', d.get('count','?')) print(' ✅ preview :', str(d.get('text',''))[:100]) " 2>&1 echo "" echo "======================================================" echo " DONE. API: http://127.0.0.1:8282 Docs: http://127.0.0.1:8282/docs" echo "======================================================"