From 3f81fcaff8e129248d51aae36cd545d0d365cf33 Mon Sep 17 00:00:00 2001 From: Cameron Radmore Date: Sun, 19 Jul 2026 18:38:56 -0400 Subject: [PATCH] fix(parser): parse published date and view count for collab videos --- src/invidious/yt_backend/extractors.cr | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/invidious/yt_backend/extractors.cr b/src/invidious/yt_backend/extractors.cr index b2226e74d..4e3c542d5 100644 --- a/src/invidious/yt_backend/extractors.cr +++ b/src/invidious/yt_backend/extractors.cr @@ -661,13 +661,25 @@ private module Parsers metadata = item_contents.dig("metadata", "lockupMetadataViewModel") title = metadata.dig("title", "content").as_s + published = nil + view_count_text = nil # Contains the views of the video and the published time of the video. - metadata_parts = metadata.dig("metadata", "contentMetadataViewModel", "metadataRows", 0, "metadataParts").try &.as_a + if (metadata_rows = metadata.dig("metadata", "contentMetadataViewModel", "metadataRows").try &.as_a) + metadata_rows.each do |row| + metadata_parts = row.dig("metadataParts").try &.as_a - view_count_text = metadata_parts.try &.find { |item| item["icon"]?.nil? && item.dig?("text", "content").try &.as_s.includes?("views") } - .try &.dig("text", "content").as_s - published = metadata_parts.try &.find { |item| item["icon"]?.nil? && item.dig?("text", "content").try &.as_s.includes?("ago") } - .try { |item| decode_date(item.dig("text", "content").as_s) } || Time.local + if view_count_text.nil? + view_count_text = metadata_parts.try &.find { |item| item["icon"]?.nil? && item.dig?("text", "content").try &.as_s.includes?("views") } + .try &.dig("text", "content").as_s + end if + if published.nil? + published = metadata_parts.try &.find { |item| item["icon"]?.nil? && item.dig?("text", "content").try &.as_s.includes?("ago") } + .try { |item| decode_date(item.dig("text", "content").as_s) } + end + + break if !view_count_text.nil? && !published.nil? + end + end view_count = short_text_to_number(view_count_text || "0") @@ -680,7 +692,7 @@ private module Parsers id: video_id, author: author_fallback.name, ucid: author_fallback.id, - published: published, + published: published || Time.local, views: view_count, description_html: "", length_seconds: length_seconds || 0,