From ba02a4cdf5f266b28c4f6ebe7b58b615330d3ee5 Mon Sep 17 00:00:00 2001 From: Fijxu Date: Mon, 8 Sep 2025 17:16:22 -0300 Subject: [PATCH] Prevent player microformat from being overwritten by the next microformat (#5453) * Prevent player microformat from being overwritten by the next microformat Closes https://github.com/iv-org/invidious/issues/5443 The player microformat is what we need to get the published date, premiere timestamp, allowed regions and more information of the video. Youtube introduced a new `microformat.microformatDataRenderer` in the next endpoint which overwrote the player microformat `microformat.playerMicroformatRenderer` when merged * Update src/invidious/videos/parser.cr Co-authored-by: syeopite <70992037+syeopite@users.noreply.github.com> --------- Co-authored-by: syeopite <70992037+syeopite@users.noreply.github.com> --- src/invidious/videos/parser.cr | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/invidious/videos/parser.cr b/src/invidious/videos/parser.cr index 5335aa79..6b1dedd6 100644 --- a/src/invidious/videos/parser.cr +++ b/src/invidious/videos/parser.cr @@ -102,6 +102,9 @@ def extract_video_info(video_id : String) # Don't fetch the next endpoint if the video is unavailable. if {"OK", "LIVE_STREAM_OFFLINE", "LOGIN_REQUIRED"}.any?(playability_status) next_response = YoutubeAPI.next({"videoId": video_id, "params": ""}) + # Remove the microformat returned by the /next endpoint on some videos + # to prevent player_response microformat from being overwritten. + next_response.delete("microformat") player_response = player_response.merge(next_response) end