Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Parse more metadata badges for SearchVideos #4863

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/invidious/channels/channels.cr
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ def fetch_channel(ucid, pull_all_videos : Bool)
length_seconds = channel_video.try &.length_seconds
length_seconds ||= 0

live_now = channel_video.try &.live_now
live_now = channel_video.try &.badges.live_now?
live_now ||= false

premiere_timestamp = channel_video.try &.premiere_timestamp
Expand Down Expand Up @@ -275,7 +275,7 @@ def fetch_channel(ucid, pull_all_videos : Bool)
ucid: video.ucid,
author: video.author,
length_seconds: video.length_seconds,
live_now: video.live_now,
live_now: video.badges.live_now?,
premiere_timestamp: video.premiere_timestamp,
views: video.views,
})
Expand Down
41 changes: 23 additions & 18 deletions src/invidious/helpers/serialized_yt_data.cr
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
@[Flags]
enum VideoBadges
LiveNow
Premium
ThreeD
FourK
New
EightK
VR180
VR360
CCommons
ChunkyProgrammer marked this conversation as resolved.
Show resolved Hide resolved
end

struct SearchVideo
include DB::Serializable

Expand All @@ -9,17 +22,9 @@ struct SearchVideo
property views : Int64
property description_html : String
property length_seconds : Int32
property live_now : Bool
property premium : Bool
property premiere_timestamp : Time?
property author_verified : Bool
property is_new : Bool
property is_4k : Bool
property is_8k : Bool
property is_vr180 : Bool
property is_vr360 : Bool
property is_3d : Bool
property has_captions : Bool
property badges : VideoBadges

def to_xml(auto_generated, query_params, xml : XML::Builder)
query_params["v"] = self.id
Expand Down Expand Up @@ -95,20 +100,20 @@ struct SearchVideo
json.field "published", self.published.to_unix
json.field "publishedText", translate(locale, "`x` ago", recode_date(self.published, locale))
json.field "lengthSeconds", self.length_seconds
json.field "liveNow", self.live_now
json.field "premium", self.premium
json.field "liveNow", self.badges.live_now?
json.field "premium", self.badges.premium?
json.field "isUpcoming", self.upcoming?

if self.premiere_timestamp
json.field "premiereTimestamp", self.premiere_timestamp.try &.to_unix
end
json.field "isNew", self.is_new
json.field "is4k", self.is_4k
json.field "is8k", self.is_8k
json.field "isVR180", is_vr180
json.field "isVR360", is_vr360
json.field "is3d", is_3d
json.field "hasCaptions", self.has_captions
json.field "isNew", self.badges.new?
json.field "is4k", self.badges.four_k?
json.field "is8k", self.badges.eight_k?
json.field "isVr180", self.badges.vr180?
json.field "isVr360", self.badges.vr360?
json.field "is3d", self.badges.three_d?
json.field "hasCaptions", self.badges.c_commons?
end
end

Expand Down
11 changes: 1 addition & 10 deletions src/invidious/routes/feeds.cr
Original file line number Diff line number Diff line change
Expand Up @@ -192,18 +192,9 @@ module Invidious::Routes::Feeds
views: views,
description_html: description_html,
length_seconds: 0,
live_now: false,
paid: false,
premium: false,
premiere_timestamp: nil,
author_verified: false,
is_new: false,
is_4k: false,
is_8k: false,
is_vr180: false,
is_vr360: false,
is_3d: false,
has_captions: false,
badges: VideoBadges::None,
})
end

Expand Down
53 changes: 13 additions & 40 deletions src/invidious/yt_backend/extractors.cr
Original file line number Diff line number Diff line change
Expand Up @@ -108,42 +108,31 @@ private module Parsers
length_seconds = 0
end

live_now = false
premium = false
is_new = false
is_4k = false
is_8k = false
is_vr180 = false
is_vr360 = false
is_3d = false
has_captions = false

premiere_timestamp = item_contents.dig?("upcomingEventData", "startTime").try { |t| Time.unix(t.as_s.to_i64) }

badges = VideoBadges::None
item_contents["badges"]?.try &.as_a.each do |badge|
b = badge["metadataBadgeRenderer"]
case b["label"].as_s
when "LIVE NOW"
live_now = true
badges |= VideoBadges::LiveNow
when "New"
is_new = true
badges |= VideoBadges::New
when "4K"
is_4k = true
badges |= VideoBadges::FourK
when "8K"
is_8k = true
badges |= VideoBadges::EightK
when "VR180"
is_vr180 = true
badges |= VideoBadges::VR180
when "360°"
is_vr360 = true
badges |= VideoBadges::VR360
when "3D"
is_3d = true
badges |= VideoBadges::ThreeD
when "CC"
has_captions = true
badges |= VideoBadges::CCommons
when "Premium"
# TODO: Potentially available as item_contents["topStandaloneBadge"]["metadataBadgeRenderer"]
premium = true
else # Ignore
puts b["label"].as_s
badges |= VideoBadges::Premium
else nil # Ignore
end
end

Expand All @@ -156,17 +145,9 @@ private module Parsers
views: view_count,
description_html: description_html,
length_seconds: length_seconds,
live_now: live_now,
premium: premium,
premiere_timestamp: premiere_timestamp,
author_verified: author_verified,
is_new: is_new,
is_4k: is_4k,
is_8k: is_8k,
is_vr180: is_vr180,
is_vr360: is_vr360,
is_3d: is_3d,
has_captions: has_captions,
badges: badges,
})
end

Expand Down Expand Up @@ -590,17 +571,9 @@ private module Parsers
views: view_count,
description_html: "",
length_seconds: duration,
live_now: false,
premium: false,
premiere_timestamp: Time.unix(0),
author_verified: false,
is_new: false,
is_4k: false,
is_8k: false,
is_vr180: false,
is_vr360: false,
is_3d: false,
has_captions: false,
badges: VideoBadges::None,
})
end

Expand Down