Add 'premiereTimestamp' to /api/v1/videos

This commit is contained in:
Omar Roth 2019-03-22 11:06:58 -05:00
parent f0658bbd09
commit 88b70973cc
5 changed files with 42 additions and 8 deletions

View file

@ -2899,6 +2899,11 @@ get "/api/v1/videos/:id" do |env|
json.field "rating", video.info["avg_rating"].to_f32 json.field "rating", video.info["avg_rating"].to_f32
json.field "isListed", video.is_listed json.field "isListed", video.is_listed
json.field "liveNow", video.live_now json.field "liveNow", video.live_now
json.field "isUpcoming", video.is_upcoming
if video.is_upcoming
json.field "premiereTimestamp", video.premiere_timestamp
end
if video.player_response["streamingData"]?.try &.["hlsManifestUrl"]? if video.player_response["streamingData"]?.try &.["hlsManifestUrl"]?
host_url = make_host_url(config, Kemal.config) host_url = make_host_url(config, Kemal.config)

View file

@ -118,10 +118,12 @@ def fetch_channel(ucid, db, pull_all_videos = true, locale = nil)
author = entry.xpath_node("author/name").not_nil!.content author = entry.xpath_node("author/name").not_nil!.content
ucid = entry.xpath_node("channelid").not_nil!.content ucid = entry.xpath_node("channelid").not_nil!.content
length_seconds = videos.select { |video| video.id == video_id }[0]?.try &.length_seconds channel_video = videos.select { |video| video.id == video_id }[0]?
length_seconds = channel_video.try &.length_seconds
length_seconds ||= 0 length_seconds ||= 0
live_now = videos.select { |video| video.id == video_id }[0]?.try &.live_now live_now = channel_video.try &.live_now
live_now ||= false live_now ||= false
video = ChannelVideo.new(video_id, title, published, Time.now, ucid, author, length_seconds, live_now) video = ChannelVideo.new(video_id, title, published, Time.now, ucid, author, length_seconds, live_now)

View file

@ -257,7 +257,7 @@ def validate_response(challenge, token, user_id, operation, key, db, locale)
if nonce = db.query_one?("SELECT * FROM nonces WHERE nonce = $1", nonce, as: {String, Time}) if nonce = db.query_one?("SELECT * FROM nonces WHERE nonce = $1", nonce, as: {String, Time})
if nonce[1] > Time.now if nonce[1] > Time.now
db.exec("UPDATE nonces SET expire = $1 WHERE nonce = $2", Time.new(1990, 1, 1), nonce[0]) db.exec("UPDATE nonces SET expire = $1 WHERE nonce = $2", Time.new(1990, 1, 1), nonce[0])
else else
raise translate(locale, "Invalid token") raise translate(locale, "Invalid token")
end end

View file

@ -253,7 +253,7 @@ class Video
def allow_ratings def allow_ratings
allow_ratings = player_response["videoDetails"].try &.["allowRatings"]?.try &.as_bool allow_ratings = player_response["videoDetails"].try &.["allowRatings"]?.try &.as_bool
if !allow_ratings if allow_ratings.nil?
return true return true
end end
@ -263,7 +263,7 @@ class Video
def live_now def live_now
live_now = self.player_response["videoDetails"]?.try &.["isLive"]?.try &.as_bool live_now = self.player_response["videoDetails"]?.try &.["isLive"]?.try &.as_bool
if !live_now if live_now.nil?
return false return false
end end
@ -273,13 +273,38 @@ class Video
def is_listed def is_listed
is_listed = player_response["videoDetails"].try &.["isCrawlable"]?.try &.as_bool is_listed = player_response["videoDetails"].try &.["isCrawlable"]?.try &.as_bool
if !is_listed if is_listed.nil?
return true return true
end end
return is_listed return is_listed
end end
def is_upcoming
is_upcoming = player_response["videoDetails"].try &.["isUpcoming"]?.try &.as_bool
if is_upcoming.nil?
return false
end
return is_upcoming
end
def premiere_timestamp
if self.is_upcoming
premiere_timestamp = player_response["playabilityStatus"]?
.try &.["liveStreamability"]?
.try &.["liveStreamabilityRenderer"]?
.try &.["offlineSlate"]?
.try &.["liveStreamOfflineSlateRenderer"]?
.try &.["scheduledStartTime"].as_s.to_i64
return premiere_timestamp
else
return nil
end
end
def keywords def keywords
keywords = self.player_response["videoDetails"]?.try &.["keywords"]?.try &.as_a keywords = self.player_response["videoDetails"]?.try &.["keywords"]?.try &.as_a
keywords ||= [] of String keywords ||= [] of String

View file

@ -39,7 +39,9 @@
<% else %> <% else %>
<div class="thumbnail"> <div class="thumbnail">
<img class="thumbnail" src="/vi/<%= item.id %>/mqdefault.jpg"/> <img class="thumbnail" src="/vi/<%= item.id %>/mqdefault.jpg"/>
<% if item.length_seconds != 0 %>
<p class="length"><%= recode_length_seconds(item.length_seconds) %></p> <p class="length"><%= recode_length_seconds(item.length_seconds) %></p>
<% end %>
</div> </div>
<% end %> <% end %>
<p><%= item.title %></p> <p><%= item.title %></p>
@ -55,7 +57,7 @@
<img class="thumbnail" src="/vi/<%= item.id %>/mqdefault.jpg"/> <img class="thumbnail" src="/vi/<%= item.id %>/mqdefault.jpg"/>
<% if item.responds_to?(:live_now) && item.live_now %> <% if item.responds_to?(:live_now) && item.live_now %>
<p class="length"><i class="icon ion-ios-play-circle"></i> <%= translate(locale, "LIVE") %></p> <p class="length"><i class="icon ion-ios-play-circle"></i> <%= translate(locale, "LIVE") %></p>
<% else %> <% elsif item.length_seconds != 0 %>
<p class="length"><%= recode_length_seconds(item.length_seconds) %></p> <p class="length"><%= recode_length_seconds(item.length_seconds) %></p>
<% end %> <% end %>
</div> </div>
@ -90,7 +92,7 @@
<% end %> <% end %>
<% if item.responds_to?(:live_now) && item.live_now %> <% if item.responds_to?(:live_now) && item.live_now %>
<p class="length"><i class="icon ion-ios-play-circle"></i> <%= translate(locale, "LIVE") %></p> <p class="length"><i class="icon ion-ios-play-circle"></i> <%= translate(locale, "LIVE") %></p>
<% else %> <% elsif item.length_seconds != 0 %>
<p class="length"><%= recode_length_seconds(item.length_seconds) %></p> <p class="length"><%= recode_length_seconds(item.length_seconds) %></p>
<% end %> <% end %>
</div> </div>