summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOmar Roth <omarroth@protonmail.com>2019-07-29 19:41:45 -0500
committerOmar Roth <omarroth@protonmail.com>2019-07-29 19:41:45 -0500
commitff5d79e3ee1d295e97e589e39ca09bd0a880c99f (patch)
tree46521d362d921386ebb0950a5447e43c94d38e0b
parent4ee3ec09df8a980239fb040d77731b4d52705d7a (diff)
downloadinvidious-0.19.1.tar.gz
invidious-0.19.1.tar.bz2
invidious-0.19.1.zip
Update video extractor0.19.1
-rw-r--r--src/invidious.cr4
-rw-r--r--src/invidious/videos.cr37
-rw-r--r--src/invidious/views/embed.ecr2
-rw-r--r--src/invidious/views/watch.ecr2
4 files changed, 30 insertions, 15 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index b560fcb9..315363d7 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -3649,7 +3649,7 @@ get "/api/v1/top" do |env|
generate_thumbnails(json, video.id, config, Kemal.config)
end
- json.field "lengthSeconds", video.info["length_seconds"].to_i
+ json.field "lengthSeconds", video.length_seconds
json.field "viewCount", video.views
json.field "author", video.author
@@ -4494,7 +4494,7 @@ get "/api/manifest/dash/id/:id" do |env|
XML.build(indent: " ", encoding: "UTF-8") do |xml|
xml.element("MPD", "xmlns": "urn:mpeg:dash:schema:mpd:2011",
"profiles": "urn:mpeg:dash:profile:full:2011", minBufferTime: "PT1.5S", type: "static",
- mediaPresentationDuration: "PT#{video.info["length_seconds"]}S") do
+ mediaPresentationDuration: "PT#{video.length_seconds}S") do
xml.element("Period") do
i = 0
diff --git a/src/invidious/videos.cr b/src/invidious/videos.cr
index 41bf70df..7e2e0f5a 100644
--- a/src/invidious/videos.cr
+++ b/src/invidious/videos.cr
@@ -329,7 +329,7 @@ struct Video
json.field "subCountText", self.sub_count_text
- json.field "lengthSeconds", self.info["length_seconds"].to_i
+ json.field "lengthSeconds", self.length_seconds
json.field "allowRatings", self.allow_ratings
json.field "rating", self.info["avg_rating"].to_f32
json.field "isListed", self.is_listed
@@ -563,7 +563,14 @@ struct Video
fmt["clen"] = fmt_stream["contentLength"]?.try &.as_s || "0"
fmt["bitrate"] = fmt_stream["bitrate"]?.try &.as_i.to_s || "0"
fmt["itag"] = fmt_stream["itag"].as_i.to_s
- fmt["url"] = fmt_stream["url"].as_s
+ if fmt_stream["url"]?
+ fmt["url"] = fmt_stream["url"].as_s
+ end
+ if fmt_stream["cipher"]?
+ HTTP::Params.parse(fmt_stream["cipher"].as_s).each do |key, value|
+ fmt[key] = value
+ end
+ end
fmt["quality"] = fmt_stream["quality"].as_s
if fmt_stream["width"]?
@@ -635,8 +642,14 @@ struct Video
fmt["clen"] = adaptive_fmt["contentLength"]?.try &.as_s || "0"
fmt["bitrate"] = adaptive_fmt["bitrate"]?.try &.as_i.to_s || "0"
fmt["itag"] = adaptive_fmt["itag"].as_i.to_s
- fmt["url"] = adaptive_fmt["url"].as_s
-
+ if adaptive_fmt["url"]?
+ fmt["url"] = adaptive_fmt["url"].as_s
+ end
+ if adaptive_fmt["cipher"]?
+ HTTP::Params.parse(adaptive_fmt["cipher"].as_s).each do |key, value|
+ fmt[key] = value
+ end
+ end
if index = adaptive_fmt["indexRange"]?
fmt["index"] = "#{index["start"]}-#{index["end"]}"
end
@@ -827,7 +840,7 @@ struct Video
end
def length_seconds
- return self.info["length_seconds"].to_i
+ self.player_response["videoDetails"]["lengthSeconds"].as_s.to_i
end
db_mapping({
@@ -1162,17 +1175,19 @@ def fetch_video(id, region)
end
end
- if info["errorcode"]?.try &.== "2"
+ if info["errorcode"]?.try &.== "2" || !info["player_response"]
raise "Video unavailable."
end
- if !info["title"]? || info["title"].empty?
- raise "Video unavailable."
+ if info["reason"]?
+ raise info["reason"]
end
- title = info["title"]
- author = info["author"]? || ""
- ucid = info["ucid"]? || ""
+ player_json = JSON.parse(info["player_response"])
+
+ title = player_json["videoDetails"]["title"].as_s
+ author = player_json["videoDetails"]["author"]?.try &.as_s || ""
+ ucid = player_json["videoDetails"]["ucid"]?.try &.as_s || ""
views = html.xpath_node(%q(//meta[@itemprop="interactionCount"]))
.try &.["content"].to_i64? || 0_i64
diff --git a/src/invidious/views/embed.ecr b/src/invidious/views/embed.ecr
index 9a8a3262..1a253026 100644
--- a/src/invidious/views/embed.ecr
+++ b/src/invidious/views/embed.ecr
@@ -30,7 +30,7 @@
var video_data = {
id: '<%= video.id %>',
plid: '<%= plid %>',
- length_seconds: '<%= video.info["length_seconds"].to_f %>',
+ length_seconds: '<%= video.length_seconds.to_f %>',
video_series: <%= video_series.to_json %>,
params: <%= params.to_json %>,
preferences: <%= preferences.to_json %>,
diff --git a/src/invidious/views/watch.ecr b/src/invidious/views/watch.ecr
index a1239383..f8882c6e 100644
--- a/src/invidious/views/watch.ecr
+++ b/src/invidious/views/watch.ecr
@@ -30,7 +30,7 @@
var video_data = {
id: '<%= video.id %>',
plid: '<%= plid %>',
- length_seconds: <%= video.info["length_seconds"].to_f %>,
+ length_seconds: <%= video.length_seconds.to_f %>,
play_next: <%= !rvs.empty? && !plid && params.continue %>,
next_video: '<%= rvs.select { |rv| rv["id"]? }[0]?.try &.["id"] %>',
youtube_comments_text: '<%= HTML.escape(translate(locale, "View YouTube comments")) %>',