Bookmarklet YouTube
Đây là cách tôi đã làm với JavaScript
Bắt đầu với ytplayer.config.args
đối tượng. Điều này chứa tất cả các URL cho video. Nó được chia thành
url_encoded_fmt_stream_map // traditional: contains video and audio stream
adaptive_fmts // DASH: contains video or audio stream
Mỗi trong số này là một mảng được phân tách bằng dấu phẩy của cái mà tôi sẽ gọi là "đối tượng luồng". Mỗi "đối tượng luồng" sẽ chứa các giá trị như thế này
url // direct HTTP link to a video
itag // code specifying the quality
s // signature, security measure to counter downloading
Mỗi URL
sẽ được mã hóa, do đó bạn sẽ cần giải mã chúng. Bây giờ là phần khó khăn.
YouTube có ít nhất 3 cấp độ bảo mật cho video của họ
unsecured // as expected, you can download these with just the unencoded URL
s // see below
RTMPE // uses "rtmpe://" protocol, no known method for these
Các video RTMPE thường được sử dụng trên các bộ phim có thời lượng đầy đủ chính thức và được bảo vệ với Loại xác minh SWF 2. Điều này đã có
từ năm 2011
và vẫn chưa được thiết kế ngược.
Các loại video "s" là khó nhất thực sự có thể được tải xuống. Bạn sẽ thấy những thứ này trên các video của VEVO và những thứ tương tự. Họ bắt đầu bằng một chữ ký như
AA5D05FA7771AD4868BA4C977C3DEAAC620DE020E.0F421820F42978A1F8EAFCDAC4EF507DB5
Sau đó, chữ ký được xáo trộn với một chức năng như thế này
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("")
}
Chức năng này là năng động, nó thường thay đổi mỗi ngày. Để làm cho khó khăn hơn, chức năng được lưu trữ tại một URL như
http://s.ytimg.com/yts/jsbin/html5player-en_US-vflycBCEX.js
điều này giới thiệu vấn đề của
chính sách cùng nguồn gốc . Về cơ bản, bạn không thể tải xuống tệp này www.youtube.com
vì chúng là các miền khác nhau. Một cách giải quyết của vấn đề này là
CORS . Với CORS,
s.ytimg.com
có thể thêm tiêu đề này
Access-Control-Allow-Origin: http://www.youtube.com
và nó sẽ cho phép JavaScript tải xuống từ www.youtube.com
. Tất nhiên họ không làm điều này. Một cách giải quyết cho cách giải quyết này là sử dụng proxy CORS. Đây là một proxy đáp ứng với tiêu đề sau cho tất cả các yêu cầu
Access-Control-Allow-Origin: *
Vì vậy, bây giờ bạn đã ủy quyền tệp JS của mình và sử dụng hàm để xáo trộn chữ ký, bạn có thể sử dụng nó trong chuỗi truy vấn để tải xuống video.