Related channel may contain a continuation entry

This commit is contained in:
Samantaz Fox 2022-02-07 00:37:47 +01:00
parent df599c0fc3
commit 1668e4187e
No known key found for this signature in database
GPG Key ID: F42821059186176E
2 changed files with 26 additions and 9 deletions

View File

@ -140,19 +140,32 @@ def fetch_related_channels(about_channel : AboutChannel) : Array(AboutRelatedCha
return [] of AboutRelatedChannel if tab.nil? return [] of AboutRelatedChannel if tab.nil?
items = tab.dig?("tabRenderer", "content", "sectionListRenderer", "contents", 0, "itemSectionRenderer", "contents", 0, "gridRenderer", "items").try(&.as_a?) || [] of JSON::Any items = tab.dig?(
"tabRenderer", "content",
"sectionListRenderer", "contents", 0,
"itemSectionRenderer", "contents", 0,
"gridRenderer", "items"
).try &.as_a?
items.map do |item| related = [] of AboutRelatedChannel
related_id = item.dig("gridChannelRenderer", "channelId").as_s return related if (items.nil? || items.empty?)
related_title = item.dig("gridChannelRenderer", "title", "simpleText").as_s
related_author_url = item.dig("gridChannelRenderer", "navigationEndpoint", "browseEndpoint", "canonicalBaseUrl").as_s
related_author_thumbnail = item.dig("gridChannelRenderer", "thumbnail", "thumbnails", -1, "url").as_s
AboutRelatedChannel.new( items.each do |item|
renderer = item["gridChannelRenderer"]?
next if !renderer
related_id = renderer.dig("channelId").as_s
related_title = renderer.dig("title", "simpleText").as_s
related_author_url = renderer.dig("navigationEndpoint", "browseEndpoint", "canonicalBaseUrl").as_s
related_author_thumbnail = HelperExtractors.get_thumbnails(renderer)
related << AboutRelatedChannel.new(
ucid: related_id, ucid: related_id,
author: related_title, author: related_title,
author_url: related_author_url, author_url: related_author_url,
author_thumbnail: related_author_thumbnail, author_thumbnail: related_author_thumbnail,
) )
end end
return related
end end

View File

@ -96,7 +96,10 @@ module Invidious::Routes::API::V1::Channels
json.field "relatedChannels" do json.field "relatedChannels" do
json.array do json.array do
fetch_related_channels(channel).each do |related_channel| # Fetch related channels
related_channels = fetch_related_channels(channel)
related_channels.each do |related_channel|
json.object do json.object do
json.field "author", related_channel.author json.field "author", related_channel.author
json.field "authorId", related_channel.ucid json.field "authorId", related_channel.ucid
@ -118,7 +121,8 @@ module Invidious::Routes::API::V1::Channels
end end
end end
end end
end end # relatedChannels
end end
end end
end end