v0.70.0 — Las descargas de YouTube funcionan de nuevo
Las descargas de YouTube funcionan de nuevo.
Qué había pasado
YouTube empezó a exigir dos cosas que ningún descargador traía: resolver un
desafío en JavaScript, y un PO Token (proof-of-origin). Sin el token la
extracción anda —el título, la duración y las calidades salían bien— pero bajar
el archivo devolvía 403 Forbidden.
Antes de tocar nada se midió, contra la última versión publicada de yt-dlp:
fallaba con todos los clientes de YouTube (android_vr, web, web_safari,
ios, mweb, tv_simply), con y sin motor JavaScript, y con dos videos
distintos. O sea no era la versión de yt-dlp, ni el enlace, ni el formato que
hubieras elegido.
Cómo se resolvió
La salida habitual es pasarle a yt-dlp las cookies de tu navegador. Se
descartó: si la app la usa un equipo de gente, leerle el navegador a cada uno no
es una opción.
En cambio se escribió el acuñador del token: ceca,
repo propio y MIT. Genera el token sin cuentas, sin cookies y sin sesión de
nadie. Existe porque el proveedor de referencia del ecosistema es GPL-3.0 y no se
puede distribuir dentro de una aplicación propia.
Qué tenés que hacer
En el instalador hay un componente nuevo, tildado por defecto en la
instalación Completa:
Descargar de YouTube: motor JS y el token que YouTube empezó a exigir (~93 MB)
Si ya tenés Upflow, el botón está en la pantalla de Tareas, junto al resto de los
paquetes.
Si no lo instalás no se rompe nada: los demás sitios siguen funcionando, y
YouTube te explica qué falta en vez de mostrarte un 403 pelado.
Dos detalles, por si te sirven
Costaron encontrar y ninguno de los dos dice su causa en el error:
- El token se ata al
visitor_datade la sesión, no al id del video. Atarlo
al id —que es lo intuitivo— produce un token válido que igual no descarga. - Con el mismo token, el cliente
webdevuelve solo miniaturas.tv_simplyes
el único que se verificó bajando de punta a punta.
3866 pruebas de backend en verde. Verificado bajando el video que falló en
producción: WAV de 59 MB y 308 segundos.