From 0f46c18f99a3dd8de7bc12ae8bf15e2308bf6af5 Mon Sep 17 00:00:00 2001 From: Omar Roth Date: Thu, 26 Jul 2018 14:24:45 -0500 Subject: [PATCH] Add 'genre', 'allowedRegions', 'isFamilyFriendly' to videos --- src/invidious.cr | 8 ++++-- src/invidious/helpers.cr | 47 ++++++++++++++++++++++++----------- src/invidious/views/watch.ecr | 2 ++ 3 files changed, 41 insertions(+), 16 deletions(-) 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) 10 11 12 - + diff --git a/src/invidious/views/watch.ecr b/src/invidious/views/watch.ecr index 1022e6fc..ec286754 100644 --- a/src/invidious/views/watch.ecr +++ b/src/invidious/views/watch.ecr @@ -217,6 +217,8 @@ String.prototype.supplant = function (o) {

<%= 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) %>%