From 7da0b2fd7fb977eb9e5f790e63e93b9bde0c9768 Mon Sep 17 00:00:00 2001 From: syeopite Date: Fri, 25 Jun 2021 12:14:21 -0700 Subject: [PATCH] Switch from URI::Params.new to URI::Params.encode --- src/invidious/videos.cr | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/invidious/videos.cr b/src/invidious/videos.cr index 5b2158ec..264a70e8 100644 --- a/src/invidious/videos.cr +++ b/src/invidious/videos.cr @@ -989,15 +989,22 @@ def fetch_video(id, region) # Try to pull streams from embed URL if info["reason"]? - required_parameters = URI::Params.new({ - "video_id" => [id], - "eurl" => ["https://youtube.googleapis.com/v/#{id}"], - "html5" => ["1"], - "c" => ["TVHTML5"], - "cver" => ["6.20180913"], + # The html5, c and cver parameters are required in order to extract age-restricted videos + # See https://github.com/yt-dlp/yt-dlp/commit/4e6767b5f2e2523ebd3dd1240584ead53e8c8905 + required_parameters = URI::Params.encode({ + "video_id" => id, + "eurl" => "https://youtube.googleapis.com/v/#{id}", + "html5" => "1", + "c" => "TVHTML5", + "cver" => "6.20180913", }) - embed_info = HTTP::Params.parse(YT_POOL.client &.get("/get_video_info?#{required_parameters}", headers: HTTP::Headers{"x-youtube-client-version" => "6.20180913"}).body) + # In order to actually extract video info without error, the `x-youtube-client-version` has to be set to the same version as `cver` above. + embed_info = HTTP::Params.parse(YT_POOL.client &.get("/get_video_info?#{required_parameters}", + headers: HTTP::Headers{ + "x-youtube-client-version" => "6.20180913", + }).body + ) if embed_info["player_response"]? player_response = JSON.parse(embed_info["player_response"])