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