|
|
|
@ -140,19 +140,32 @@ def fetch_related_channels(about_channel : AboutChannel) : Array(AboutRelatedCha |
|
|
|
|
|
|
|
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.map do |item| |
|
|
|
related_id = item.dig("gridChannelRenderer", "channelId").as_s |
|
|
|
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 = tab.dig?( |
|
|
|
"tabRenderer", "content", |
|
|
|
"sectionListRenderer", "contents", 0, |
|
|
|
"itemSectionRenderer", "contents", 0, |
|
|
|
"gridRenderer", "items" |
|
|
|
).try &.as_a? |
|
|
|
|
|
|
|
related = [] of AboutRelatedChannel |
|
|
|
return related if (items.nil? || items.empty?) |
|
|
|
|
|
|
|
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, |
|
|
|
author: related_title, |
|
|
|
author_url: related_author_url, |
|
|
|
author_thumbnail: related_author_thumbnail, |
|
|
|
) |
|
|
|
end |
|
|
|
|
|
|
|
return related |
|
|
|
end |