YouTube Bookmarklet
Вот как я это сделал с помощью 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-файл и использовали функцию для шифрования подписи, вы можете использовать ее в строке запроса для загрузки видео.