From 4f856dd898b20ddc905e7592701eb685813fa262 Mon Sep 17 00:00:00 2001 From: Omar Roth Date: Sun, 4 Nov 2018 09:37:12 -0600 Subject: [PATCH] Add support for Crystal 0.27.0 --- shard.yml | 1 + src/invidious.cr | 20 ++++++++++---------- src/invidious/channels.cr | 4 ++-- src/invidious/comments.cr | 16 ++++++++-------- src/invidious/helpers/helpers.cr | 2 +- src/invidious/mixes.cr | 2 +- src/invidious/playlists.cr | 7 +++---- src/invidious/videos.cr | 6 +++--- 8 files changed, 29 insertions(+), 29 deletions(-) diff --git a/shard.yml b/shard.yml index b9f01337..8172b9fe 100644 --- a/shard.yml +++ b/shard.yml @@ -13,6 +13,7 @@ dependencies: github: detectlanguage/detectlanguage-crystal kemal: github: kemalcr/kemal + commit: b389022 pg: github: will/crystal-pg diff --git a/src/invidious.cr b/src/invidious.cr index 34c9384f..ad0fcf95 100644 --- a/src/invidious.cr +++ b/src/invidious.cr @@ -2096,7 +2096,7 @@ get "/api/v1/videos/:id" do |env| json.field "description", description json.field "descriptionHtml", video.description - json.field "published", video.published.epoch + json.field "published", video.published.to_unix json.field "publishedText", "#{recode_date(video.published)} ago" json.field "keywords", video.keywords @@ -2290,7 +2290,7 @@ get "/api/v1/trending" do |env| json.field "authorId", video.ucid json.field "authorUrl", "/channel/#{video.ucid}" - json.field "published", video.published.epoch + json.field "published", video.published.to_unix json.field "publishedText", "#{recode_date(video.published)} ago" json.field "description", video.description json.field "descriptionHtml", video.description_html @@ -2320,7 +2320,7 @@ get "/api/v1/top" do |env| json.field "author", video.author json.field "authorId", video.ucid json.field "authorUrl", "/channel/#{video.ucid}" - json.field "published", video.published.epoch + json.field "published", video.published.to_unix json.field "publishedText", "#{recode_date(video.published)} ago" description = video.description.gsub("
", "\n") @@ -2370,7 +2370,7 @@ get "/api/v1/channels/:ucid" do |env| total_views = 0_i64 sub_count = 0_i64 - joined = Time.epoch(0) + joined = Time.unix(0) metadata = channel_html.xpath_nodes(%q(//span[@class="about-stat"])) metadata.each do |item| case item.content @@ -2426,7 +2426,7 @@ get "/api/v1/channels/:ucid" do |env| json.field "subCount", sub_count json.field "totalViews", total_views - json.field "joined", joined.epoch + json.field "joined", joined.to_unix json.field "paid", paid json.field "isFamilyFriendly", is_family_friendly @@ -2460,7 +2460,7 @@ get "/api/v1/channels/:ucid" do |env| json.field "descriptionHtml", video.description_html json.field "viewCount", video.views - json.field "published", video.published.epoch + json.field "published", video.published.to_unix json.field "publishedText", "#{recode_date(video.published)} ago" json.field "lengthSeconds", video.length_seconds json.field "paid", video.paid @@ -2517,7 +2517,7 @@ end json.field "descriptionHtml", video.description_html json.field "viewCount", video.views - json.field "published", video.published.epoch + json.field "published", video.published.to_unix json.field "publishedText", "#{recode_date(video.published)} ago" json.field "lengthSeconds", video.length_seconds json.field "paid", video.paid @@ -2565,7 +2565,7 @@ get "/api/v1/channels/search/:ucid" do |env| json.field "descriptionHtml", item.description_html json.field "viewCount", item.views - json.field "published", item.published.epoch + json.field "published", item.published.to_unix json.field "publishedText", "#{recode_date(item.published)} ago" json.field "lengthSeconds", item.length_seconds json.field "liveNow", item.live_now @@ -2688,7 +2688,7 @@ get "/api/v1/search" do |env| json.field "descriptionHtml", item.description_html json.field "viewCount", item.views - json.field "published", item.published.epoch + json.field "published", item.published.to_unix json.field "publishedText", "#{recode_date(item.published)} ago" json.field "lengthSeconds", item.length_seconds json.field "liveNow", item.live_now @@ -2809,7 +2809,7 @@ get "/api/v1/playlists/:plid" do |env| json.field "videoCount", playlist.video_count json.field "viewCount", playlist.views - json.field "updated", playlist.updated.epoch + json.field "updated", playlist.updated.to_unix json.field "videos" do json.array do diff --git a/src/invidious/channels.cr b/src/invidious/channels.cr index d3f4588d..dcab5e29 100644 --- a/src/invidious/channels.cr +++ b/src/invidious/channels.cr @@ -165,14 +165,14 @@ end def produce_channel_videos_url(ucid, page = 1, auto_generated = nil) if auto_generated - seed = Time.epoch(1525757349) + seed = Time.unix(1525757349) until seed >= Time.now seed += 1.month end timestamp = seed - (page - 1).months - page = "#{timestamp.epoch}" + page = "#{timestamp.to_unix}" switch = "\x36" else page = "#{page}" diff --git a/src/invidious/comments.cr b/src/invidious/comments.cr index 94c4698e..a699aaac 100644 --- a/src/invidious/comments.cr +++ b/src/invidious/comments.cr @@ -8,11 +8,11 @@ end class RedditComment module TimeConverter def self.from_json(value : JSON::PullParser) : Time - Time.epoch(value.read_float.to_i) + Time.unix(value.read_float.to_i) end def self.to_json(value : Time, json : JSON::Builder) - json.number(value.epoch) + json.number(value.to_unix) end end @@ -58,7 +58,7 @@ end def fetch_youtube_comments(id, continuation, proxies, format) client = make_client(YT_URL) - html = client.get("/watch?v=#{id}&bpctr=#{Time.new.epoch + 2000}&gl=US&hl=en&disable_polymer=1") + html = client.get("/watch?v=#{id}&bpctr=#{Time.new.to_unix + 2000}&gl=US&hl=en&disable_polymer=1") headers = HTTP::Headers.new headers["cookie"] = html.cookies.add_request_headers(headers)["cookie"] body = html.body @@ -83,7 +83,7 @@ def fetch_youtube_comments(id, continuation, proxies, format) proxy = HTTPProxy.new(proxy_host: proxy[:ip], proxy_port: proxy[:port]) proxy_client.set_proxy(proxy) - response = proxy_client.get("/watch?v=#{id}&bpctr=#{Time.new.epoch + 2000}&gl=US&hl=en&disable_polymer=1") + response = proxy_client.get("/watch?v=#{id}&bpctr=#{Time.new.to_unix + 2000}&gl=US&hl=en&disable_polymer=1") proxy_headers = HTTP::Headers.new proxy_headers["cookie"] = response.cookies.add_request_headers(headers)["cookie"] proxy_html = response.body @@ -140,8 +140,8 @@ def fetch_youtube_comments(id, continuation, proxies, format) headers["content-type"] = "application/x-www-form-urlencoded" headers["x-client-data"] = "CIi2yQEIpbbJAQipncoBCNedygEIqKPKAQ==" - headers["x-spf-previous"] = "https://www.youtube.com/watch?v=#{id}&bpctr=#{Time.new.epoch + 2000}&gl=US&hl=en&disable_polymer=1" - headers["x-spf-referer"] = "https://www.youtube.com/watch?v=#{id}&bpctr=#{Time.new.epoch + 2000}&gl=US&hl=en&disable_polymer=1" + headers["x-spf-previous"] = "https://www.youtube.com/watch?v=#{id}&bpctr=#{Time.new.to_unix + 2000}&gl=US&hl=en&disable_polymer=1" + headers["x-spf-referer"] = "https://www.youtube.com/watch?v=#{id}&bpctr=#{Time.new.to_unix + 2000}&gl=US&hl=en&disable_polymer=1" headers["x-youtube-client-name"] = "1" headers["x-youtube-client-version"] = "2.20180719" @@ -229,7 +229,7 @@ def fetch_youtube_comments(id, continuation, proxies, format) json.field "content", content json.field "contentHtml", content_html - json.field "published", published.epoch + json.field "published", published.to_unix json.field "publishedText", "#{recode_date(published)} ago" json.field "likeCount", node_comment["likeCount"] json.field "commentId", node_comment["commentId"] @@ -327,7 +327,7 @@ def template_youtube_comments(comments) #{child["author"]}

#{child["contentHtml"]}

- #{recode_date(Time.epoch(child["published"].as_i64))} ago + #{recode_date(Time.unix(child["published"].as_i64))} ago | #{number_with_separator(child["likeCount"])}

diff --git a/src/invidious/helpers/helpers.cr b/src/invidious/helpers/helpers.cr index c887f1a2..92a2e1b1 100644 --- a/src/invidious/helpers/helpers.cr +++ b/src/invidious/helpers/helpers.cr @@ -329,7 +329,7 @@ def extract_items(nodeset, ucid = nil) rescue ex end begin - published ||= Time.epoch(metadata[0].xpath_node(%q(.//span)).not_nil!["data-timestamp"].to_i64) + published ||= Time.unix(metadata[0].xpath_node(%q(.//span)).not_nil!["data-timestamp"].to_i64) rescue ex end published ||= Time.now diff --git a/src/invidious/mixes.cr b/src/invidious/mixes.cr index a6a7693c..66f7371d 100644 --- a/src/invidious/mixes.cr +++ b/src/invidious/mixes.cr @@ -26,7 +26,7 @@ def fetch_mix(rdid, video_id, cookies = nil) if cookies headers = cookies.add_request_headers(headers) end - response = client.get("/watch?v=#{video_id}&list=#{rdid}&bpctr=#{Time.new.epoch + 2000}&gl=US&hl=en", headers) + response = client.get("/watch?v=#{video_id}&list=#{rdid}&bpctr=#{Time.new.to_unix + 2000}&gl=US&hl=en", headers) yt_data = response.body.match(/window\["ytInitialData"\] = (?.*);/) if yt_data diff --git a/src/invidious/playlists.cr b/src/invidious/playlists.cr index 4e9d837b..d85084eb 100644 --- a/src/invidious/playlists.cr +++ b/src/invidious/playlists.cr @@ -30,7 +30,7 @@ def fetch_playlist_videos(plid, page, video_count, continuation = nil) client = make_client(YT_URL) if continuation - html = client.get("/watch?v=#{continuation}&list=#{plid}&bpctr=#{Time.new.epoch + 2000}&gl=US&hl=en&disable_polymer=1") + html = client.get("/watch?v=#{continuation}&list=#{plid}&bpctr=#{Time.new.to_unix + 2000}&gl=US&hl=en&disable_polymer=1") html = XML.parse_html(html.body) index = html.xpath_node(%q(//span[@id="playlist-current-index"])).try &.content.to_i? @@ -167,11 +167,10 @@ def fetch_playlist(plid) raise "Invalid playlist." end - body = response.body.gsub(<<-END_BUTTON + body = response.body.gsub(%( - END_BUTTON - , "") + ), "") document = XML.parse_html(body) title = document.xpath_node(%q(//h1[@class="pl-header-title"])) diff --git a/src/invidious/videos.cr b/src/invidious/videos.cr index 1c0ad35a..25ee2770 100644 --- a/src/invidious/videos.cr +++ b/src/invidious/videos.cr @@ -319,7 +319,7 @@ class Video clen = url.match(/clen\/(?\d+)/).try &.["clen"] clen ||= "0" lmt = url.match(/lmt\/(?\d+)/).try &.["lmt"] - lmt ||= "#{((Time.now + 1.hour).epoch_f.to_f64 * 1000000).to_i64}" + lmt ||= "#{((Time.now + 1.hour).to_unix_f.to_f64 * 1000000).to_i64}" segment_list = representation.xpath_node(%q(.//segmentlist)).not_nil! init = segment_list.xpath_node(%q(.//initialization)) @@ -546,7 +546,7 @@ def fetch_video(id, proxies) spawn do client = make_client(YT_URL) - html = client.get("/watch?v=#{id}&bpctr=#{Time.new.epoch + 2000}&gl=US&hl=en&disable_polymer=1") + html = client.get("/watch?v=#{id}&bpctr=#{Time.new.to_unix + 2000}&gl=US&hl=en&disable_polymer=1") if md = html.headers["location"]?.try &.match(/v=(?[a-zA-Z0-9_-]{11})/) next html_channel.send(md["id"]) @@ -620,7 +620,7 @@ def fetch_video(id, proxies) client.connect_timeout = 10.seconds client.set_proxy(proxy) - html = XML.parse_html(client.get("/watch?v=#{id}&bpctr=#{Time.new.epoch + 2000}&gl=US&hl=en&disable_polymer=1").body) + html = XML.parse_html(client.get("/watch?v=#{id}&bpctr=#{Time.new.to_unix + 2000}&gl=US&hl=en&disable_polymer=1").body) info = HTTP::Params.parse(client.get("/get_video_info?video_id=#{id}&el=detailpage&ps=default&eurl=&gl=US&hl=en&disable_polymer=1").body) if info["reason"]?