diff --git a/src/invidious.cr b/src/invidious.cr
index 6662e9c6..141ab482 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -733,6 +733,10 @@ get "/api/v1/videos/:id" do |env|
json.field "likeCount", video.likes
json.field "dislikeCount", video.dislikes
+ json.field "isFamilyFriendly", video.is_family_friendly
+ json.field "allowedRegions", video.allowed_regions
+ json.field "genre", video.genre
+
json.field "author", video.author
json.field "authorId", video.ucid
json.field "authorUrl", "/channel/#{video.ucid}"
@@ -984,7 +988,7 @@ get "/search" do |env|
html = client.get("/results?q=#{URI.escape(query)}&page=#{page}&sp=EgIQAVAU").body
html = XML.parse_html(html)
- videos = [] of Video
+ videos = [] of ChannelVideo
html.xpath_nodes(%q(//ol[@class="item-section"]/li)).each do |item|
root = item.xpath_node(%q(div[contains(@class,"yt-lockup-video")]/div))
@@ -1009,7 +1013,7 @@ get "/search" do |env|
author ||= ""
ucid ||= ""
- video = Video.new(id, HTTP::Params.parse(""), Time.now, title, 0_i64, 0, 0, 0.0, Time.now, "", nil, author, ucid)
+ video = ChannelVideo.new(id, title, Time.now, Time.now, ucid, author)
videos << video
end
end
diff --git a/src/invidious/helpers.cr b/src/invidious/helpers.cr
index 3448245b..e8ed7126 100644
--- a/src/invidious/helpers.cr
+++ b/src/invidious/helpers.cr
@@ -85,17 +85,32 @@ class Video
default: HTTP::Params.parse(""),
converter: Video::HTTPParamConverter,
},
- updated: Time,
- title: String,
- views: Int64,
- likes: Int32,
- dislikes: Int32,
- wilson_score: Float64,
- published: Time,
- description: String,
- language: String?,
- author: String,
- ucid: String,
+ updated: Time,
+ title: String,
+ views: Int64,
+ likes: Int32,
+ dislikes: Int32,
+ wilson_score: Float64,
+ published: Time,
+ description: String,
+ language: String?,
+ author: String,
+ ucid: String,
+ allowed_regions: {
+ type: Array(String),
+ nilable: true,
+ default: [] of String,
+ },
+ is_family_friendly: {
+ type: Bool,
+ nilable: true,
+ default: nil,
+ },
+ genre: {
+ type: String,
+ nilable: true,
+ default: nil,
+ },
})
end
@@ -274,7 +289,11 @@ def fetch_video(id, client)
published = html.xpath_node(%q(//meta[@itemprop="datePublished"])).not_nil!["content"]
published = Time.parse(published, "%Y-%m-%d", Time::Location.local)
- video = Video.new(id, info, Time.now, title, views, likes, dislikes, wilson_score, published, description, nil, author, ucid)
+ allowed_regions = html.xpath_node(%q(//meta[@itemprop="regionsAllowed"])).not_nil!["content"].split(",")
+ is_family_friendly = html.xpath_node(%q(//meta[@itemprop="isFamilyFriendly"])).not_nil!["content"] == "True"
+ genre = html.xpath_node(%q(//meta[@itemprop="genre"])).not_nil!["content"]
+
+ video = Video.new(id, info, Time.now, title, views, likes, dislikes, wilson_score, published, description, nil, author, ucid, allowed_regions, is_family_friendly, genre)
return video
end
@@ -298,7 +317,7 @@ def get_video(id, client, db, refresh = true)
end
else
video = fetch_video(id, client)
- video_array = video.to_a
+ video_array = video.to_a[0, 13]
args = arg_array(video_array)
db.exec("INSERT INTO videos VALUES (#{args}) ON CONFLICT (id) DO NOTHING", video_array)
@@ -983,7 +1002,7 @@ def generate_captcha(key)
<%= number_with_separator(video.views) %>
<%= number_with_separator(video.likes) %>
<%= number_with_separator(video.dislikes) %>
+Genre : <%= video.genre %>
+Family Friendly? <%= video.is_family_friendly %>
Wilson Score : <%= video.wilson_score.round(4) %>
Rating : <%= rating.round(4) %> / 5
Engagement : <%= engagement.round(2) %>%