summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2022-10-31 20:40:43 +0100
committerSamantaz Fox <coding@samantaz.fr>2022-11-01 17:48:35 +0100
commitf267394bbe2bd972e0157913ae253bfaa79ead0f (patch)
treea1c637eade38108028b4ff432af924920632b677 /src
parent84cd4d6a5b1854bcf1058351e390cc0f4855c9d7 (diff)
downloadinvidious-f267394bbe2bd972e0157913ae253bfaa79ead0f.tar.gz
invidious-f267394bbe2bd972e0157913ae253bfaa79ead0f.tar.bz2
invidious-f267394bbe2bd972e0157913ae253bfaa79ead0f.zip
extractors: Add support for richGridRenderer
Diffstat (limited to 'src')
-rw-r--r--src/invidious/yt_backend/extractors.cr49
1 files changed, 28 insertions, 21 deletions
diff --git a/src/invidious/yt_backend/extractors.cr b/src/invidious/yt_backend/extractors.cr
index dc65cc52..18b48152 100644
--- a/src/invidious/yt_backend/extractors.cr
+++ b/src/invidious/yt_backend/extractors.cr
@@ -436,21 +436,31 @@ private module Extractors
content = extract_selected_tab(target["tabs"])["content"]
if section_list_contents = content.dig?("sectionListRenderer", "contents")
- section_list_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"]?
- else
- items_container = renderer_container_contents
- end
+ raw_items = unpack_section_list(section_list_contents)
+ elsif rich_grid_contents = content.dig?("richGridRenderer", "contents")
+ raw_items = rich_grid_contents.as_a
+ end
- items_container["items"]?.try &.as_a.each do |item|
- raw_items << item
- end
+ return raw_items
+ end
+
+ 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"]?
+ else
+ items_container = renderer_container_contents
+ end
+
+ items_container["items"]?.try &.as_a.each do |item|
+ raw_items << item
end
end
@@ -525,14 +535,11 @@ private module Extractors
end
private def self.extract(target)
- raw_items = [] of JSON::Any
- if content = target["gridContinuation"]?
- raw_items = content["items"].as_a
- elsif content = target["continuationItems"]?
- raw_items = content.as_a
- end
+ content = target["continuationItems"]?
+ content ||= target.dig?("gridContinuation", "items")
+ content ||= target.dig?("richGridContinuation", "contents")
- return raw_items
+ return content.nil? ? [] of JSON::Any : content.as_a
end
def self.extractor_name