diff options
| author | ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com> | 2024-11-09 22:31:41 -0500 |
|---|---|---|
| committer | ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com> | 2024-11-09 22:31:41 -0500 |
| commit | 5fa87cc27c09fde4c30bb8d5c54acc7e8d71d95d (patch) | |
| tree | 51b5001fc53d9d38d82a6bf186149dbb884ef16b /src | |
| parent | b173d4acf21563d47d26718eca7932878fb424e6 (diff) | |
| download | invidious-5fa87cc27c09fde4c30bb8d5c54acc7e8d71d95d.tar.gz invidious-5fa87cc27c09fde4c30bb8d5c54acc7e8d71d95d.tar.bz2 invidious-5fa87cc27c09fde4c30bb8d5c54acc7e8d71d95d.zip | |
Add support for author thumbnails in search api for videos
Diffstat (limited to 'src')
| -rw-r--r-- | src/invidious/helpers/serialized_yt_data.cr | 21 | ||||
| -rw-r--r-- | src/invidious/routes/feeds.cr | 1 | ||||
| -rw-r--r-- | src/invidious/yt_backend/extractors.cr | 5 |
3 files changed, 26 insertions, 1 deletions
diff --git a/src/invidious/helpers/serialized_yt_data.cr b/src/invidious/helpers/serialized_yt_data.cr index 1fef5f93..f8e8f187 100644 --- a/src/invidious/helpers/serialized_yt_data.cr +++ b/src/invidious/helpers/serialized_yt_data.cr @@ -24,6 +24,7 @@ struct SearchVideo property length_seconds : Int32 property premiere_timestamp : Time? property author_verified : Bool + property author_thumbnail : String? property badges : VideoBadges def to_xml(auto_generated, query_params, xml : XML::Builder) @@ -88,6 +89,24 @@ struct SearchVideo json.field "authorUrl", "/channel/#{self.ucid}" json.field "authorVerified", self.author_verified + author_thumbnail = self.author_thumbnail + + if author_thumbnail + json.field "authorThumbnails" do + json.array do + qualities = {32, 48, 76, 100, 176, 512} + + qualities.each do |quality| + json.object do + json.field "url", author_thumbnail.gsub(/=s\d+/, "=s#{quality}") + json.field "width", quality + json.field "height", quality + end + end + end + end + end + json.field "videoThumbnails" do Invidious::JSONify::APIv1.thumbnails(json, self.id) end @@ -223,7 +242,7 @@ struct SearchChannel qualities.each do |quality| json.object do - json.field "url", self.author_thumbnail.gsub(/=\d+/, "=s#{quality}") + json.field "url", self.author_thumbnail.gsub(/=s\d+/, "=s#{quality}") json.field "width", quality json.field "height", quality end diff --git a/src/invidious/routes/feeds.cr b/src/invidious/routes/feeds.cr index ea7fb396..82c04994 100644 --- a/src/invidious/routes/feeds.cr +++ b/src/invidious/routes/feeds.cr @@ -194,6 +194,7 @@ module Invidious::Routes::Feeds length_seconds: 0, premiere_timestamp: nil, author_verified: false, + author_thumbnail: nil, badges: VideoBadges::None, }) end diff --git a/src/invidious/yt_backend/extractors.cr b/src/invidious/yt_backend/extractors.cr index 2631b62a..a28e1df6 100644 --- a/src/invidious/yt_backend/extractors.cr +++ b/src/invidious/yt_backend/extractors.cr @@ -67,6 +67,8 @@ private module Parsers author_id = author_fallback.id end + author_thumbnail = item_contents.dig?("channelThumbnailSupportedRenderers", "channelThumbnailWithLinkRenderer", "thumbnail", "thumbnails", 0, "url").try &.as_s + author_verified = has_verified_badge?(item_contents["ownerBadges"]?) # For live videos (and possibly recently premiered videos) there is no published information. @@ -148,6 +150,7 @@ private module Parsers length_seconds: length_seconds, premiere_timestamp: premiere_timestamp, author_verified: author_verified, + author_thumbnail: author_thumbnail, badges: badges, }) end @@ -579,6 +582,7 @@ private module Parsers length_seconds: duration, premiere_timestamp: Time.unix(0), author_verified: false, + author_thumbnail: nil, badges: VideoBadges::None, }) end @@ -708,6 +712,7 @@ private module Parsers length_seconds: duration, premiere_timestamp: Time.unix(0), author_verified: false, + author_thumbnail: nil, badges: VideoBadges::None, }) end |
