summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSvallinn <41585298+Svallinn@users.noreply.github.com>2021-03-24 05:33:45 +0000
committerSvallinn <41585298+Svallinn@users.noreply.github.com>2021-03-24 05:33:45 +0000
commitcbdba66ef3f770c31a99a16a47925ed37439b543 (patch)
tree2d11e6154f8604fa94824323f2146d1b7945e02a /src
parentc481ca924b8665eb14442fd0a9606f16f3e845a7 (diff)
downloadinvidious-cbdba66ef3f770c31a99a16a47925ed37439b543.tar.gz
invidious-cbdba66ef3f770c31a99a16a47925ed37439b543.tar.bz2
invidious-cbdba66ef3f770c31a99a16a47925ed37439b543.zip
Use the youtubei API over the legacy one
Diffstat (limited to 'src')
-rw-r--r--src/invidious.cr6
-rw-r--r--src/invidious/channels.cr26
2 files changed, 18 insertions, 14 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index 8d579f92..88b9ad85 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -1699,7 +1699,7 @@ get "/channel/:ucid" do |env|
sort_options = {"last", "oldest", "newest"}
sort_by ||= "last"
- items, continuation = fetch_channel_playlists(channel.ucid, channel.author, channel.auto_generated, continuation, sort_by)
+ items, continuation = fetch_channel_playlists(channel.ucid, channel.author, continuation, sort_by)
items.uniq! do |item|
if item.responds_to?(:title)
item.title
@@ -1766,7 +1766,7 @@ get "/channel/:ucid/playlists" do |env|
next env.redirect "/channel/#{channel.ucid}"
end
- items, continuation = fetch_channel_playlists(channel.ucid, channel.author, channel.auto_generated, continuation, sort_by)
+ items, continuation = fetch_channel_playlists(channel.ucid, channel.author, continuation, sort_by)
items = items.select { |item| item.is_a?(SearchPlaylist) }.map { |item| item.as(SearchPlaylist) }
items.each { |item| item.author = "" }
@@ -2467,7 +2467,7 @@ end
next error_json(500, ex)
end
- items, continuation = fetch_channel_playlists(channel.ucid, channel.author, channel.auto_generated, continuation, sort_by)
+ items, continuation = fetch_channel_playlists(channel.ucid, channel.author, continuation, sort_by)
JSON.build do |json|
json.object do
diff --git a/src/invidious/channels.cr b/src/invidious/channels.cr
index 9a129e1e..f7aa99e2 100644
--- a/src/invidious/channels.cr
+++ b/src/invidious/channels.cr
@@ -355,14 +355,19 @@ def fetch_channel(ucid, db, pull_all_videos = true, locale = nil)
return channel
end
-def fetch_channel_playlists(ucid, author, auto_generated, continuation, sort_by)
- if continuation || auto_generated
- url = produce_channel_playlists_url(ucid, continuation, sort_by, auto_generated)
+def fetch_channel_playlists(ucid, author, continuation, sort_by)
+ if continuation
+ response_json = request_youtube_api_browse(continuation)
+ result = JSON.parse(response_json.match(/"continuationItems": (?<items>\[.*\]),/m).try &.["items"] || "{}")
- response = YT_POOL.client &.get(url)
+ return [] of SearchItem, nil if result.size == 0
+
+ items = [] of SearchItem
+ result.as_a.select(&.as_h.has_key?("gridPlaylistRenderer")).each { |item|
+ extract_item(item, author, ucid).try { |t| items << t }
+ }
- continuation = response.body.match(/"continuation":"(?<continuation>[^"]+)"/).try &.["continuation"]?
- initial_data = JSON.parse(response.body).as_a.find(&.["response"]?).try &.as_h
+ continuation = result.as_a.last["continuationItemRenderer"]?.try &.["continuationEndpoint"]["continuationCommand"]["token"].as_s
else
url = "/channel/#{ucid}/playlists?flow=list&view=1"
@@ -377,13 +382,12 @@ def fetch_channel_playlists(ucid, author, auto_generated, continuation, sort_by)
end
response = YT_POOL.client &.get(url)
- continuation = response.body.match(/"continuation":"(?<continuation>[^"]+)"/).try &.["continuation"]?
initial_data = extract_initial_data(response.body)
- end
+ return [] of SearchItem, nil if !initial_data
- return [] of SearchItem, nil if !initial_data
- items = extract_items(initial_data)
- continuation = extract_channel_playlists_cursor(continuation, auto_generated) if continuation
+ items = extract_items(initial_data, author, ucid)
+ continuation = response.body.match(/"token":"(?<continuation>[^"]+)"/).try &.["continuation"]?
+ end
return items, continuation
end