Bookmarklet di YouTube
Ecco come l'ho fatto con JavaScript
Inizia con l' ytplayer.config.args
oggetto. Questo contiene tutti gli URL per il video. È suddiviso in
url_encoded_fmt_stream_map // traditional: contains video and audio stream
adaptive_fmts // DASH: contains video or audio stream
Ognuno di questi è un array separato da virgole di ciò che definirei "oggetti stream". Ogni "oggetto stream" conterrà valori come questo
url // direct HTTP link to a video
itag // code specifying the quality
s // signature, security measure to counter downloading
Ogni URL
verrà codificato, quindi dovrai decodificarli. Ora la parte difficile.
YouTube ha almeno 3 livelli di sicurezza per i loro video
unsecured // as expected, you can download these with just the unencoded URL
s // see below
RTMPE // uses "rtmpe://" protocol, no known method for these
I video RTMPE sono in genere utilizzati su filmati ufficiali a lunghezza intera e sono protetti con il tipo di verifica SWF 2. È in circolazione
dal 2011
e non è ancora stato progettato.
I video di tipo "s" sono i più difficili che possono essere effettivamente scaricati. Li vedrai tipicamente su video VEVO e simili. Iniziano con una firma come
AA5D05FA7771AD4868BA4C977C3DEAAC620DE020E.0F421820F42978A1F8EAFCDAC4EF507DB5
Quindi la firma viene confusa con una funzione come questa
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("")
}
Questa funzione è dinamica, in genere cambia ogni giorno. Per rendere più difficile la funzione è ospitata in un URL come
http://s.ytimg.com/yts/jsbin/html5player-en_US-vflycBCEX.js
questo introduce il problema della politica della
stessa origine . In sostanza, non è possibile scaricare questo file www.youtube.com
perché sono domini diversi. Una soluzione alternativa a questo problema è
CORS . Con CORS, è
s.ytimg.com
possibile aggiungere questa intestazione
Access-Control-Allow-Origin: http://www.youtube.com
e consentirebbe il download di JavaScript da www.youtube.com
. Ovviamente non lo fanno. Una soluzione alternativa per questa soluzione alternativa consiste nell'utilizzare un proxy CORS. Questo è un proxy che risponde con la seguente intestazione a tutte le richieste
Access-Control-Allow-Origin: *
Quindi, ora che hai eseguito il proxy del tuo file JS e hai utilizzato la funzione per decodificare la firma, puoi utilizzarlo nella stringa di query per scaricare un video.