Channels: Use innertube to fetch the community tab

This commit is contained in:
Samantaz Fox
2023-07-16 17:23:23 +02:00
parent 69e2eaccc0
commit c1a69e4a4a
2 changed files with 34 additions and 46 deletions

View File

@@ -608,19 +608,25 @@ private module Extractors
private def self.unpack_section_list(contents)
raw_items = [] of JSON::Any
contents.as_a.each do |renderer_container|
renderer_container_contents = renderer_container["itemSectionRenderer"]["contents"][0]
# Category extraction
if items_container = renderer_container_contents["shelfRenderer"]?
raw_items << renderer_container_contents
next
elsif items_container = renderer_container_contents["gridRenderer"]?
contents.as_a.each do |item|
if item_section_content = item.dig?("itemSectionRenderer", "contents")
raw_items += self.unpack_item_section(item_section_content)
else
items_container = renderer_container_contents
raw_items << item
end
end
items_container["items"]?.try &.as_a.each do |item|
return raw_items
end
private def self.unpack_item_section(contents)
raw_items = [] of JSON::Any
contents.as_a.each do |item|
# Category extraction
if container = item.dig?("gridRenderer", "items") || item.dig?("items")
raw_items += container.as_a
else
raw_items << item
end
end