forked from midou/invidious
Add 'premiereTimestamp' to /api/v1/videos
This commit is contained in:
parent
f0658bbd09
commit
88b70973cc
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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>
|
||||||
|
Loading…
Reference in New Issue
Block a user