Bookmarklet YouTube
Ini adalah bagaimana saya melakukannya dengan JavaScript
Mulai dengan ytplayer.config.args
objek. Ini berisi semua URL untuk video. Itu dipecah menjadi
url_encoded_fmt_stream_map // traditional: contains video and audio stream
adaptive_fmts // DASH: contains video or audio stream
Masing-masing adalah array yang dipisahkan koma dari apa yang saya sebut "objek streaming". Setiap "aliran objek" akan berisi nilai-nilai seperti ini
url // direct HTTP link to a video
itag // code specifying the quality
s // signature, security measure to counter downloading
Setiap URL
akan disandikan sehingga Anda harus mendekodekannya. Sekarang bagian yang sulit.
YouTube memiliki setidaknya 3 tingkat keamanan untuk video mereka
unsecured // as expected, you can download these with just the unencoded URL
s // see below
RTMPE // uses "rtmpe://" protocol, no known method for these
Video RTMPE biasanya digunakan pada film panjang penuh resmi, dan dilindungi dengan SWF Verification Type 2. Ini sudah ada
sejak 2011
dan belum direkayasa balik.
Jenis "s" video adalah yang paling sulit yang sebenarnya dapat diunduh. Anda biasanya akan melihat ini di video VEVO dan sejenisnya. Mereka mulai dengan tanda tangan seperti
AA5D05FA7771AD4868BA4C977C3DEAAC620DE020E.0F421820F42978A1F8EAFCDAC4EF507DB5
Kemudian tanda tangan diacak dengan fungsi seperti ini
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("")
}
Fungsi ini dinamis, biasanya berubah setiap hari. Untuk membuatnya lebih sulit, fungsi dihosting di URL seperti
http://s.ytimg.com/yts/jsbin/html5player-en_US-vflycBCEX.js
ini memperkenalkan masalah
kebijakan asal yang sama . Pada dasarnya, Anda tidak dapat mengunduh file ini www.youtube.com
karena mereka adalah domain yang berbeda. Solusi dari masalah ini adalah
CORS . Dengan CORS,
s.ytimg.com
bisa menambahkan tajuk ini
Access-Control-Allow-Origin: http://www.youtube.com
dan itu akan memungkinkan JavaScript untuk mengunduh www.youtube.com
. Tentu saja mereka tidak melakukan ini. Solusi untuk solusi ini adalah dengan menggunakan proxy CORS. Ini adalah proksi yang merespons dengan tajuk berikut untuk semua permintaan
Access-Control-Allow-Origin: *
Jadi, sekarang Anda telah memproksi file JS Anda, dan menggunakan fungsi untuk mengacak tanda tangan, Anda dapat menggunakannya dalam querystring untuk mengunduh video.