Implement workaround for broken shorts objects

This commit is contained in:
Samantaz Fox
2023-01-08 13:50:52 +01:00
parent f9eb839c7a
commit a37522a03d
3 changed files with 46 additions and 15 deletions

View File

@@ -408,19 +408,23 @@ private module Parsers
private def self.parse(item_contents, author_fallback)
video_id = item_contents["videoId"].as_s
begin
video_details_container = item_contents.dig(
"navigationEndpoint", "reelWatchEndpoint",
"overlay", "reelPlayerOverlayRenderer",
"reelPlayerHeaderSupportedRenderers",
"reelPlayerHeaderRenderer"
)
rescue ex : KeyError
# Extract key name from original message
key = /"([^"]+)"/.match(ex.message || "").try &.[1]?
raise BrokenTubeException.new(key || "reelPlayerOverlayRenderer")
reel_player_overlay = item_contents.dig(
"navigationEndpoint", "reelWatchEndpoint",
"overlay", "reelPlayerOverlayRenderer"
)
# Sometimes, the "reelPlayerOverlayRenderer" object is missing the
# important part of the response. We use this exception to tell
# the calling function to fetch the content again.
if !reel_player_overlay.as_h.has_key?("reelPlayerHeaderSupportedRenderers")
raise RetryOnceException.new
end
video_details_container = reel_player_overlay.dig(
"reelPlayerHeaderSupportedRenderers",
"reelPlayerHeaderRenderer"
)
# Author infos
author = video_details_container