YouTube, MediaCloud y Apify: fuentes sin RSS ni API estándar
YouTube Transcript: subtítulos sin Apify ni credenciales
El conector de YouTube extrae las transcripciones públicas directamente con youtube-transcript-api, sin pasar por la YouTube Data API ni por Apify. Solo funciona con vídeos que tienen subtítulos públicos activados.
La cascada de idiomas está ordenada por relevancia para el proyecto:
_PREFERRED_LANGS = ("es", "pt", "ca", "eu", "gl", "en", "fr", "de", "it")
def extract_transcript(video_id: str) -> tuple[str, str] | tuple[None, None]:
# intenta cada idioma en orden; si no encuentra ninguno, acepta cualquiera disponible
...
La dependencia es opcional y se importa con graceful fallback: si youtube-transcript-api no está instalada, el conector simplemente no extrae transcripciones sin romper el pipeline.
MediaCloud: archivo de noticias con rotación de API keys
MediaCloud mantiene un archivo de decenas de millones de artículos online indexados por colecciones geográficas y temáticas. El conector soporta múltiples API keys con rotación round-robin para distribuir el uso:
# .env
MC_API_KEY=key_principal
MC_API_KEY_1=key_secundaria # opcional — activates round-robin
El conector tiene rate limiting propio (1 s entre llamadas) y permite filtrar por colecciones de países. MediaCloud agrupa medios en colecciones por país, lo que facilita buscar solo en prensa española, latinoamericana o de cualquier región específica.
Apify: Google, Twitter/X y YouTube vía actores
Para fuentes que no tienen API pública (búsquedas de Google, tweets, resultados de YouTube), el pipeline usa Apify como capa de scraping gestionado. Cada fuente tiene su actor ID configurable por variable de entorno:
APIFY_API_TOKEN=apify_api_xxx
APIFY_GOOGLE_ACTOR_ID=nFJndFXA5zjCTuudP # default
APIFY_TWITTER_ACTOR_ID=8CiMefkv2yLlD7vYl # default
APIFY_YOUTUBE_ACTOR_ID=61RPP7dywgiy0JPD0 # default
Los actores corren de forma síncrona con timeout configurable (120 s por defecto). Si apify-client no está instalado o el token no está configurado, el conector falla con un aviso en logs y el pipeline continúa con el resto de fuentes.