diff --git a/src/invidious/channels.cr b/src/invidious/channels.cr index dce9e6aa..e19a4f27 100644 --- a/src/invidious/channels.cr +++ b/src/invidious/channels.cr @@ -775,8 +775,6 @@ def extract_channel_community_cursor(continuation) cursor end -INITDATA_PREQUERY = "window[\"ytInitialData\"] = {" - def get_about_info(ucid, locale) about = YT_POOL.client &.get("/channel/#{ucid}/about?gl=US&hl=en") if about.status_code != 200 @@ -792,18 +790,14 @@ def get_about_info(ucid, locale) raise error_message end - initdata_pre = about.body.index(INITDATA_PREQUERY) - initdata_post = initdata_pre.nil? ? nil : about.body.index("};", initdata_pre) - if initdata_post.nil? - about = XML.parse_html(about.body) + initdata = extract_initial_data(about.body) + about = XML.parse_html(about.body) + + if initdata.empty? error_message = about.xpath_node(%q(//div[@class="yt-alert-content"])).try &.content.strip error_message ||= translate(locale, "Could not get channel info.") raise error_message end - initdata_pre = initdata_pre.not_nil! + INITDATA_PREQUERY.size - 1 - - initdata = JSON.parse(about.body[initdata_pre, initdata_post - initdata_pre + 1]) - about = XML.parse_html(about.body) if about.xpath_node(%q(//div[contains(@class, "channel-empty-message")])) error_message = translate(locale, "This channel does not exist.") diff --git a/src/invidious/videos.cr b/src/invidious/videos.cr index 8e314fe0..20048460 100644 --- a/src/invidious/videos.cr +++ b/src/invidious/videos.cr @@ -839,8 +839,7 @@ def extract_polymer_config(body) params[f] = player_response[f] if player_response[f]? end - yt_initial_data = body.match(/(window\["ytInitialData"\]|var\s+ytInitialData)\s*=\s*(?.*?);\s*\n/) - .try { |r| JSON.parse(r["info"]).as_h } + yt_initial_data = extract_initial_data(body) params["relatedVideos"] = yt_initial_data.try &.["playerOverlays"]?.try &.["playerOverlayRenderer"]? .try &.["endScreen"]?.try &.["watchNextEndScreenRenderer"]?.try &.["results"]?.try &.as_a.compact_map { |r|