fix(parser): parse published date and view count for collab videos

Fixes #5740
This commit is contained in:
campbell 2026-08-11 22:59:44 +09:00
parent 8fde720f94
commit d7824af247

View File

@ -661,13 +661,24 @@ private module Parsers
metadata = item_contents.dig("metadata", "lockupMetadataViewModel") metadata = item_contents.dig("metadata", "lockupMetadataViewModel")
title = metadata.dig("title", "content").as_s title = metadata.dig("title", "content").as_s
# Contains the views of the video and the published time of the video. view_count_text = nil
metadata_parts = metadata.dig("metadata", "contentMetadataViewModel", "metadataRows", 0, "metadataParts").try &.as_a published = nil
view_count_text = metadata_parts.try &.find { |item| item["icon"]?.nil? && item.dig?("text", "content").try &.as_s.includes?("views") } # Contains the views of the video and the published time of the video.
.try &.dig("text", "content").as_s # Collaboration videos have multiple authors in the first row, so we check all rows.
published = metadata_parts.try &.find { |item| item["icon"]?.nil? && item.dig?("text", "content").try &.as_s.includes?("ago") } if metadata_rows = metadata.dig?("metadata", "contentMetadataViewModel", "metadataRows").try &.as_a
.try { |item| decode_date(item.dig("text", "content").as_s) } || Time.local metadata_rows.each do |row|
row.dig?("metadataParts").try &.as_a.each do |item|
next if item["icon"]?
if text = item.dig?("text", "content").try &.as_s
view_count_text ||= text if text.includes?("views")
published ||= decode_date(text) if text.includes?("ago")
end
end
end
end
published ||= Time.local
view_count = short_text_to_number(view_count_text || "0") view_count = short_text_to_number(view_count_text || "0")