Bookmarklet do YouTube
Foi assim que fiz com JavaScript
Comece com o ytplayer.config.args
objeto. Este contém todos os URLs para o vídeo. É dividido em
url_encoded_fmt_stream_map // traditional: contains video and audio stream
adaptive_fmts // DASH: contains video or audio stream
Cada uma delas é uma matriz separada por vírgula do que eu chamaria de "objetos de fluxo". Cada "objeto de fluxo" conterá valores como este
url // direct HTTP link to a video
itag // code specifying the quality
s // signature, security measure to counter downloading
Cada URL
será codificado, assim você precisará decodificá-los. Agora a parte complicada.
O YouTube possui pelo menos três níveis de segurança para seus vídeos
unsecured // as expected, you can download these with just the unencoded URL
s // see below
RTMPE // uses "rtmpe://" protocol, no known method for these
Os vídeos RTMPE geralmente são usados em filmes oficiais completos e são protegidos com o SWF Verification Type 2. Isso existe
desde 2011
e ainda não foi feito com engenharia reversa.
Os vídeos do tipo "s" são os mais difíceis que podem realmente ser baixados. Você os verá tipicamente nos vídeos VEVO e similares. Eles começam com uma assinatura como
AA5D05FA7771AD4868BA4C977C3DEAAC620DE020E.0F421820F42978A1F8EAFCDAC4EF507DB5
Em seguida, a assinatura é embaralhada com uma função 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("")
}
Essa função é dinâmica, normalmente muda todos os dias. Para dificultar, a função está hospedada em um URL como
http://s.ytimg.com/yts/jsbin/html5player-en_US-vflycBCEX.js
isso introduz o problema da política de
mesma origem . Essencialmente, você não pode baixar este arquivo www.youtube.com
porque são domínios diferentes. Uma solução alternativa para esse problema é o
CORS . Com o CORS,
s.ytimg.com
poderia adicionar este cabeçalho
Access-Control-Allow-Origin: http://www.youtube.com
e permitiria o download do JavaScript www.youtube.com
. Claro que eles não fazem isso. Uma solução alternativa para essa solução alternativa é usar um proxy CORS. Este é um proxy que responde com o seguinte cabeçalho a todas as solicitações
Access-Control-Allow-Origin: *
Portanto, agora que você procurou seu arquivo JS em proxy e usou a função para embaralhar a assinatura, é possível usá-lo na cadeia de consulta para baixar um vídeo.