mirror of
https://gitea.invidious.io/iv-org/invidious-copy-2023-06-08.git
synced 2024-08-15 00:53:38 +00:00
Make use of youtube API helper in src/invidious/channels.cr
This commit is contained in:
parent
980f5f1299
commit
94ecd29e35
1 changed files with 15 additions and 30 deletions
|
@ -229,18 +229,18 @@ def fetch_channel(ucid, db, pull_all_videos = true, locale = nil)
|
||||||
page = 1
|
page = 1
|
||||||
|
|
||||||
LOGGER.trace("fetch_channel: #{ucid} : Downloading channel videos page")
|
LOGGER.trace("fetch_channel: #{ucid} : Downloading channel videos page")
|
||||||
response = get_channel_videos_response(ucid, page, auto_generated: auto_generated)
|
response_body = get_channel_videos_response(ucid, page, auto_generated: auto_generated)
|
||||||
|
|
||||||
videos = [] of SearchVideo
|
videos = [] of SearchVideo
|
||||||
begin
|
begin
|
||||||
initial_data = JSON.parse(response.body)
|
initial_data = JSON.parse(response_body)
|
||||||
raise InfoException.new("Could not extract channel JSON") if !initial_data
|
raise InfoException.new("Could not extract channel JSON") if !initial_data
|
||||||
|
|
||||||
LOGGER.trace("fetch_channel: #{ucid} : Extracting videos from channel videos page initial_data")
|
LOGGER.trace("fetch_channel: #{ucid} : Extracting videos from channel videos page initial_data")
|
||||||
videos = extract_videos(initial_data.as_h, author, ucid)
|
videos = extract_videos(initial_data.as_h, author, ucid)
|
||||||
rescue ex
|
rescue ex
|
||||||
if response.body.includes?("To continue with your YouTube experience, please fill out the form below.") ||
|
if response_body.includes?("To continue with your YouTube experience, please fill out the form below.") ||
|
||||||
response.body.includes?("https://www.google.com/sorry/index")
|
response_body.includes?("https://www.google.com/sorry/index")
|
||||||
raise InfoException.new("Could not extract channel info. Instance is likely blocked.")
|
raise InfoException.new("Could not extract channel info. Instance is likely blocked.")
|
||||||
end
|
end
|
||||||
raise ex
|
raise ex
|
||||||
|
@ -304,8 +304,8 @@ def fetch_channel(ucid, db, pull_all_videos = true, locale = nil)
|
||||||
ids = [] of String
|
ids = [] of String
|
||||||
|
|
||||||
loop do
|
loop do
|
||||||
response = get_channel_videos_response(ucid, page, auto_generated: auto_generated)
|
response_body = get_channel_videos_response(ucid, page, auto_generated: auto_generated)
|
||||||
initial_data = JSON.parse(response.body)
|
initial_data = JSON.parse(response_body)
|
||||||
raise InfoException.new("Could not extract channel JSON") if !initial_data
|
raise InfoException.new("Could not extract channel JSON") if !initial_data
|
||||||
videos = extract_videos(initial_data.as_h, author, ucid)
|
videos = extract_videos(initial_data.as_h, author, ucid)
|
||||||
|
|
||||||
|
@ -447,6 +447,7 @@ def produce_channel_videos_continuation(ucid, page = 1, auto_generated = nil, so
|
||||||
return continuation
|
return continuation
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Used in bypass_captcha_job.cr
|
||||||
def produce_channel_videos_url(ucid, page = 1, auto_generated = nil, sort_by = "newest", v2 = false)
|
def produce_channel_videos_url(ucid, page = 1, auto_generated = nil, sort_by = "newest", v2 = false)
|
||||||
continuation = produce_channel_videos_continuation(ucid, page, auto_generated, sort_by, v2)
|
continuation = produce_channel_videos_continuation(ucid, page, auto_generated, sort_by, v2)
|
||||||
return "/browse_ajax?continuation=#{continuation}&gl=US&hl=en"
|
return "/browse_ajax?continuation=#{continuation}&gl=US&hl=en"
|
||||||
|
@ -938,34 +939,18 @@ def get_about_info(ucid, locale)
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_channel_videos_response(ucid, page = 1, auto_generated = nil, sort_by = "newest", youtubei_browse = true)
|
def get_channel_videos_response(ucid, page = 1, auto_generated = nil, sort_by = "newest", youtubei_browse = true)
|
||||||
if youtubei_browse
|
continuation = produce_channel_videos_continuation(ucid, page,
|
||||||
continuation = produce_channel_videos_continuation(ucid, page, auto_generated: auto_generated, sort_by: sort_by, v2: true)
|
auto_generated: auto_generated, sort_by: sort_by, v2: true)
|
||||||
data = {
|
|
||||||
"context": {
|
return request_youtube_api_browse(continuation)
|
||||||
"client": {
|
|
||||||
"clientName": "WEB",
|
|
||||||
"clientVersion": "2.20201021.03.00",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"continuation": continuation,
|
|
||||||
}.to_json
|
|
||||||
return YT_POOL.client &.post(
|
|
||||||
"/youtubei/v1/browse?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8",
|
|
||||||
headers: HTTP::Headers{"content-type" => "application/json"},
|
|
||||||
body: data
|
|
||||||
)
|
|
||||||
else
|
|
||||||
url = produce_channel_videos_url(ucid, page, auto_generated: auto_generated, sort_by: sort_by, v2: true)
|
|
||||||
return YT_POOL.client &.get(url)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_60_videos(ucid, author, page, auto_generated, sort_by = "newest")
|
def get_60_videos(ucid, author, page, auto_generated, sort_by = "newest")
|
||||||
videos = [] of SearchVideo
|
videos = [] of SearchVideo
|
||||||
|
|
||||||
2.times do |i|
|
2.times do |i|
|
||||||
response = get_channel_videos_response(ucid, page * 2 + (i - 1), auto_generated: auto_generated, sort_by: sort_by)
|
response_json = get_channel_videos_response(ucid, page * 2 + (i - 1), auto_generated: auto_generated, sort_by: sort_by)
|
||||||
initial_data = JSON.parse(response.body)
|
initial_data = JSON.parse(response_json)
|
||||||
break if !initial_data
|
break if !initial_data
|
||||||
videos.concat extract_videos(initial_data.as_h, author, ucid)
|
videos.concat extract_videos(initial_data.as_h, author, ucid)
|
||||||
end
|
end
|
||||||
|
@ -974,8 +959,8 @@ def get_60_videos(ucid, author, page, auto_generated, sort_by = "newest")
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_latest_videos(ucid)
|
def get_latest_videos(ucid)
|
||||||
response = get_channel_videos_response(ucid)
|
response_json = get_channel_videos_response(ucid)
|
||||||
initial_data = JSON.parse(response.body)
|
initial_data = JSON.parse(response_json)
|
||||||
return [] of SearchVideo if !initial_data
|
return [] of SearchVideo if !initial_data
|
||||||
author = initial_data["metadata"]?.try &.["channelMetadataRenderer"]?.try &.["title"]?.try &.as_s
|
author = initial_data["metadata"]?.try &.["channelMetadataRenderer"]?.try &.["title"]?.try &.as_s
|
||||||
items = extract_videos(initial_data.as_h, author, ucid)
|
items = extract_videos(initial_data.as_h, author, ucid)
|
||||||
|
|
Loading…
Reference in a new issue