Закладка YouTube
Ось як я це зробив за допомогою JavaScript
Почніть з ytplayer.config.args
об’єкта. Тут містяться всі URL-адреси відео. Він розпадається на
url_encoded_fmt_stream_map // traditional: contains video and audio stream
adaptive_fmts // DASH: contains video or audio stream
Кожен із них є масивом, розділеним комами, того, що я б назвав "об'єктами потоку". Кожен "потоковий об'єкт" буде містити такі значення
url // direct HTTP link to a video
itag // code specifying the quality
s // signature, security measure to counter downloading
Кожна URL-адреса
буде закодована, тому вам потрібно буде їх розшифрувати. Тепер хитра частина.
YouTube має принаймні 3 рівні безпеки своїх відео
unsecured // as expected, you can download these with just the unencoded URL
s // see below
RTMPE // uses "rtmpe://" protocol, no known method for these
Відео RTMPE, як правило, використовується в офіційних повнометражних фільмах і захищено SWF Verification Type 2. Це існувало
з 2011 року
і ще не має бути розроблене на зворотному рівні.
Відео типу "s" - найскладніші, які фактично можна завантажити. Типово їх ви побачите на відео VEVO тощо. Вони починаються з підпису типу
AA5D05FA7771AD4868BA4C977C3DEAAC620DE020E.0F421820F42978A1F8EAFCDAC4EF507DB5
Тоді підпис зашифровується з такою функцією
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("")
}
Ця функція динамічна, вона зазвичай змінюється щодня. Щоб ускладнити функцію, розміщується за такою URL-адресою, як
http://s.ytimg.com/yts/jsbin/html5player-en_US-vflycBCEX.js
це вводить проблему політики
однакового походження . По суті, ви не можете завантажити цей файл з, www.youtube.com
оскільки це різні домени. Вирішення цієї проблеми -
CORS . За допомогою CORS
s.ytimg.com
можна додати цей заголовок
Access-Control-Allow-Origin: http://www.youtube.com
і це дозволить завантажити JavaScript з www.youtube.com
. Звичайно, вони цього не роблять. Вирішення цього способу полягає у використанні проксі-сервера CORS. Це проксі-сервер, який відповідає наступним заголовком на всі запити
Access-Control-Allow-Origin: *
Отже, тепер, коли ви проксирували файл JS і використовували функцію для скремтування підпису, ви можете використовувати це в рядку запитів для завантаження відео.