TubeScript-API/run-test.sh

139 lines
3.9 KiB
Bash

#!/bin/bash
# Sin cookies → android (sin n-challenge, sin Node.js)
# Con cookies → web + Node.js (Node.js resuelve n-challenge/signature)
# for_stream → android (mejor HLS en lives)
# Script de prueba completo — guarda TODO en /tmp/resultado.txt
exec > /tmp/resultado.txt 2>&1
REPO="/home/xesar/PycharmProjects/TubeScript-API"
cd "$REPO"
echo "=== $(date) ==="
# ---------- 1. Rebuild imagen ----------
echo "--- Parando contenedor anterior ---"
docker rm -f tubescript_api 2>/dev/null || true
echo "--- Construyendo imagen (CACHEBUST para forzar COPY . /app fresco) ---"
# --build-arg CACHEBUST=$(date +%s) invalida solo la capa COPY . /app
# (mucho más rápido que --no-cache que descarga todo desde cero)
docker build \
--build-arg CACHEBUST="$(date +%s)" \
-f Dockerfile.api \
-t tubescript-api:latest . 2>&1 | tail -8
echo "BUILD_RC=$?"
# ---------- 2. Levantar ----------
echo "--- 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 "RC_RUN=$?"
sleep 10
echo "--- docker ps ---"
docker ps --format "{{.Names}} {{.Status}} {{.Ports}}" | grep tube || echo "NO CORRIENDO"
echo "--- uvicorn logs ---"
docker logs tubescript_api 2>&1 | tail -4
echo "--- _yt_client_args en imagen (verificar lógica nueva) ---"
docker exec tubescript_api grep -A12 "def _yt_client_args" /app/main.py
echo ""
echo "=== PRUEBA A: android SIN cookies ==="
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 "RC_A=$?"
echo ""
echo "=== PRUEBA B: web + Node.js CON cookies ==="
docker exec tubescript_api yt-dlp \
--cookies /app/data/cookies.txt \
--no-warnings --skip-download \
--extractor-args "youtube:player_client=web" \
--js-runtimes "node:/usr/bin/node" \
--print title \
"https://www.youtube.com/watch?v=dQw4w9WgXcQ" 2>&1
echo "RC_B=$?"
echo ""
echo "=== PRUEBA C: endpoint /debug/metadata ==="
sleep 2
curl -s --max-time 30 "http://127.0.0.1:8282/debug/metadata/dQw4w9WgXcQ" \
| python3 -c "
import sys,json
raw=sys.stdin.read()
try:
d=json.loads(raw)
if 'detail' in d:
print('ERROR:', d['detail'][:200])
else:
print('title :', d.get('title','?'))
print('uploader:', d.get('uploader','?'))
print('duration:', d.get('duration','?'))
except Exception as e:
print('PARSE ERROR:', e)
print('RAW:', raw[:300])
"
echo "RC_C=$?"
echo ""
echo "=== PRUEBA D: endpoint /transcript?lang=en ==="
curl -s --max-time 90 "http://127.0.0.1:8282/transcript/dQw4w9WgXcQ?lang=en" \
| python3 -c "
import sys,json
raw=sys.stdin.read()
try:
d=json.loads(raw)
if 'detail' in d:
print('ERROR:', d['detail'][:200])
else:
print('count :', d.get('count','?'))
print('preview:', str(d.get('text','?'))[:120])
except Exception as e:
print('PARSE ERROR:', e)
print('RAW:', raw[:200])
"
echo "RC_D=$?"
echo ""
echo "=== PRUEBA E: /transcript/QjK5wq8L3Ac (sin subtítulos — mensaje claro esperado) ==="
curl -s --max-time 60 "http://127.0.0.1:8282/transcript/QjK5wq8L3Ac?lang=es" \
| python3 -c "
import sys,json
raw=sys.stdin.read()
try:
d=json.loads(raw)
if 'detail' in d:
print('DETALLE:', d['detail'][:250])
else:
print('OK count:', d.get('count','?'))
except Exception as e:
print('RAW:', raw[:200])
"
echo "RC_E=$?"
echo ""
echo "=== PRUEBA F: /debug/metadata/QjK5wq8L3Ac (title con cookies) ==="
curl -s --max-time 30 "http://127.0.0.1:8282/debug/metadata/QjK5wq8L3Ac" \
| python3 -c "
import sys,json
d=json.loads(sys.stdin.read())
print('title:',d.get('title','?')) if 'title' in d else print('ERROR:',d.get('detail','?')[:200])
"
echo "RC_F=$?"
echo ""
echo "=== FIN ==="