Marcador de YouTube
Así lo hice con JavaScript
Comience con el ytplayer.config.args
objeto. Este contiene todas las URL para el video. Se divide en
url_encoded_fmt_stream_map // traditional: contains video and audio stream
adaptive_fmts // DASH: contains video or audio stream
Cada uno de estos es una matriz separada por comas de lo que yo llamaría "objetos de flujo". Cada "objeto continuo" contendrá valores como este
url // direct HTTP link to a video
itag // code specifying the quality
s // signature, security measure to counter downloading
Cada URL
se codificará, por lo que deberá decodificarlas. Ahora la parte difícil.
YouTube tiene al menos 3 niveles de seguridad para sus videos
unsecured // as expected, you can download these with just the unencoded URL
s // see below
RTMPE // uses "rtmpe://" protocol, no known method for these
Los videos RTMPE se usan típicamente en películas oficiales de larga duración, y están protegidos con SWF Verification Type 2. Esto ha existido
desde 2011
y aún no se ha realizado ingeniería inversa.
Los videos de tipo "s" son los más difíciles que realmente se pueden descargar. Normalmente los verá en los videos de VEVO y similares. Comienzan con una firma como
AA5D05FA7771AD4868BA4C977C3DEAAC620DE020E.0F421820F42978A1F8EAFCDAC4EF507DB5
Luego, la firma se codifica con una función como esta
function mo(a) {
a = a.split("");
a = lo.rw(a, 1);
a = lo.rw(a, 32);
a = lo.IC(a, 1);
a = lo.wS(a, 77);
a = lo.IC(a, 3);
a = lo.wS(a, 77);
a = lo.IC(a, 3);
a = lo.wS(a, 44);
return a.join("")
}
Esta función es dinámica, normalmente cambia todos los días. Para hacerlo más difícil, la función está alojada en una URL como
http://s.ytimg.com/yts/jsbin/html5player-en_US-vflycBCEX.js
Esto introduce el problema de la política del
mismo origen . Básicamente, no puede descargar este archivo www.youtube.com
porque son dominios diferentes. Una solución alternativa a este problema es
CORS . Con CORS,
s.ytimg.com
podría agregar este encabezado
Access-Control-Allow-Origin: http://www.youtube.com
y permitiría descargar JavaScript desde www.youtube.com
. Por supuesto que no hacen esto. Una solución alternativa para esta solución alternativa es utilizar un proxy CORS. Este es un proxy que responde con el siguiente encabezado a todas las solicitudes
Access-Control-Allow-Origin: *
Entonces, ahora que ha procesado su archivo JS y ha utilizado la función para codificar la firma, puede usar eso en la cadena de consulta para descargar un video.