Una publicación de r/webscraping: el clipper de YouTube del lado del navegador alcanzó los bloqueos del firewall a nivel de IP de Supabase. Esta es la solución arquitectónica.
Requisitos previos
- Clave API de Scavio
- Decide: ¿necesitas bytes de vídeo o sólo metadatos?
Guia paso a paso
Paso 1: Clasificar la necesidad: ¿metadatos o bytes?
La mayoría de las herramientas de clip UX necesitan transcripciones + marcas de tiempo; no bytes.
# Decision: if iframe playback + transcript-driven clip moments are acceptable, you don't need bytes.Paso 2: Ruta de metadatos: punto final de Scavio YouTube
JSON escrito con título, duración, segmentos_transcripción, capítulos.
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
r = requests.post('https://api.scavio.dev/api/v1/search', headers=H, json={'platform': 'youtube', 'url': video_url, 'include_transcript': True}).json()Paso 3: Front-end: reproducción de iframe + UX de clip de transcripción
El usuario elige un momento del clip de la transcripción; iframe busca marcar la hora.
// <iframe src={`https://www.youtube.com/embed/${id}?start=${start}&end=${end}`} />Paso 4: Ruta de bytes (solo si es necesario): trabajador perimetral
Cloudflare/Vercel Edge realiza búsquedas con proxy residencial rotativo.
// Cloudflare Worker (sketch): fetch(`https://www.youtube.com/watch?v=${id}`, { /* proxy headers */ })Paso 5: Caché agresivo por URL de video
Transcripciones en caché en Postgres o Redis.
# Cache key: youtube:{video_id} → expire 7 days.Paso 6: Prueba: no hay peleas de IP de Supabase
Troncos de cola.
# Sanity: tail logs; expect zero 'YouTube blocked the request' errors.Ejemplo en Python
# Per video: ~1 Scavio credit. Cache hit rate after first 1K videos: typically 70%+.Ejemplo en JavaScript
// Same shape in Node + Hono on edge.Salida esperada
Metadata path produces typed JSON without IP blocks. Byte path (when needed) routes through residential proxy.