Add 'paid' and 'premium' flags to API

This commit is contained in:
Omar Roth 2018-10-16 11:15:14 -05:00
parent 8b69e23471
commit 1cfa1f6559
4 changed files with 44 additions and 1 deletions

View file

@ -2245,6 +2245,8 @@ get "/api/v1/videos/:id" do |env|
json.field "likeCount", video.likes json.field "likeCount", video.likes
json.field "dislikeCount", video.dislikes json.field "dislikeCount", video.dislikes
json.field "paid", video.paid
json.field "premium", video.premium
json.field "isFamilyFriendly", video.is_family_friendly json.field "isFamilyFriendly", video.is_family_friendly
json.field "allowedRegions", video.allowed_regions json.field "allowedRegions", video.allowed_regions
json.field "genre", video.genre json.field "genre", video.genre
@ -2602,6 +2604,8 @@ get "/api/v1/channels/:ucid" do |env|
json.field "published", video.published.epoch json.field "published", video.published.epoch
json.field "publishedText", "#{recode_date(video.published)} ago" json.field "publishedText", "#{recode_date(video.published)} ago"
json.field "lengthSeconds", video.length_seconds json.field "lengthSeconds", video.length_seconds
json.field "paid", video.paid
json.field "premium", video.premium
end end
end end
end end
@ -2657,6 +2661,8 @@ end
json.field "published", video.published.epoch json.field "published", video.published.epoch
json.field "publishedText", "#{recode_date(video.published)} ago" json.field "publishedText", "#{recode_date(video.published)} ago"
json.field "lengthSeconds", video.length_seconds json.field "lengthSeconds", video.length_seconds
json.field "paid", video.paid
json.field "premium", video.premium
end end
end end
end end
@ -2704,6 +2710,8 @@ get "/api/v1/channels/search/:ucid" do |env|
json.field "publishedText", "#{recode_date(item.published)} ago" json.field "publishedText", "#{recode_date(item.published)} ago"
json.field "lengthSeconds", item.length_seconds json.field "lengthSeconds", item.length_seconds
json.field "liveNow", item.live_now json.field "liveNow", item.live_now
json.field "paid", item.paid
json.field "premium", item.premium
when SearchPlaylist when SearchPlaylist
json.field "type", "playlist" json.field "type", "playlist"
json.field "title", item.title json.field "title", item.title
@ -2825,6 +2833,8 @@ get "/api/v1/search" do |env|
json.field "publishedText", "#{recode_date(item.published)} ago" json.field "publishedText", "#{recode_date(item.published)} ago"
json.field "lengthSeconds", item.length_seconds json.field "lengthSeconds", item.length_seconds
json.field "liveNow", item.live_now json.field "liveNow", item.live_now
json.field "paid", item.paid
json.field "premium", item.premium
when SearchPlaylist when SearchPlaylist
json.field "type", "playlist" json.field "type", "playlist"
json.field "title", item.title json.field "title", item.title

View file

@ -358,6 +358,18 @@ def extract_items(nodeset, ucid = nil)
live_now = false live_now = false
end end
if node.xpath_node(%q(.//span[text()="Premium"]))
premium = true
else
premium = false
end
if node.xpath_node(%q(.//span[contains(text(), "Get YouTube Premium")]))
paid = true
else
paid = false
end
items << SearchVideo.new( items << SearchVideo.new(
title, title,
id, id,
@ -368,7 +380,9 @@ def extract_items(nodeset, ucid = nil)
description, description,
description_html, description_html,
length_seconds, length_seconds,
live_now live_now,
paid,
premium
) )
end end
end end

View file

@ -10,6 +10,8 @@ class SearchVideo
description_html: String, description_html: String,
length_seconds: Int32, length_seconds: Int32,
live_now: Bool, live_now: Bool,
paid: Bool,
premium: Bool,
}) })
end end

View file

@ -407,6 +407,23 @@ class Video
return @player_json.not_nil! return @player_json.not_nil!
end end
def paid
reason = self.player_response["playabilityStatus"]?.try &.["reason"]?
if reason == "This video requires payment to watch."
paid = true
else
paid = false
end
return paid
end
def premium
premium = self.player_response.to_s.includes? "Get YouTube without the ads."
return premium
end
def captions def captions
captions = [] of Caption captions = [] of Caption
if player_response["captions"]? if player_response["captions"]?