Extract live endpoints to route
This commit is contained in:
parent
997d936e9c
commit
cc59de0c93
2 changed files with 38 additions and 37 deletions
|
@ -399,6 +399,10 @@ Invidious::Routing.get "/s_p/:id/:name", Invidious::Routes::Images, :s_p_image
|
||||||
Invidious::Routing.get "/yts/img/:name", Invidious::Routes::Images, :yts_image
|
Invidious::Routing.get "/yts/img/:name", Invidious::Routes::Images, :yts_image
|
||||||
Invidious::Routing.get "/vi/:id/:name", Invidious::Routes::Images, :thumbnails
|
Invidious::Routing.get "/vi/:id/:name", Invidious::Routes::Images, :thumbnails
|
||||||
|
|
||||||
|
Invidious::Routing.get "/channel/:ucid/live", Invidious::Routes::Live, :check
|
||||||
|
Invidious::Routing.get "/user/:user/live", Invidious::Routes::Live, :check
|
||||||
|
Invidious::Routing.get "/c/:user/live", Invidious::Routes::Live, :check
|
||||||
|
|
||||||
# API routes (macro)
|
# API routes (macro)
|
||||||
define_v1_api_routes()
|
define_v1_api_routes()
|
||||||
|
|
||||||
|
@ -406,43 +410,6 @@ define_v1_api_routes()
|
||||||
define_api_manifest_routes()
|
define_api_manifest_routes()
|
||||||
define_video_playback_routes()
|
define_video_playback_routes()
|
||||||
|
|
||||||
# Channels
|
|
||||||
|
|
||||||
{"/channel/:ucid/live", "/user/:user/live", "/c/:user/live"}.each do |route|
|
|
||||||
get route do |env|
|
|
||||||
locale = env.get("preferences").as(Preferences).locale
|
|
||||||
|
|
||||||
# Appears to be a bug in routing, having several routes configured
|
|
||||||
# as `/a/:a`, `/b/:a`, `/c/:a` results in 404
|
|
||||||
value = env.request.resource.split("/")[2]
|
|
||||||
body = ""
|
|
||||||
{"channel", "user", "c"}.each do |type|
|
|
||||||
response = YT_POOL.client &.get("/#{type}/#{value}/live?disable_polymer=1")
|
|
||||||
if response.status_code == 200
|
|
||||||
body = response.body
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
video_id = body.match(/'VIDEO_ID': "(?<id>[a-zA-Z0-9_-]{11})"/).try &.["id"]?
|
|
||||||
if video_id
|
|
||||||
params = [] of String
|
|
||||||
env.params.query.each do |k, v|
|
|
||||||
params << "#{k}=#{v}"
|
|
||||||
end
|
|
||||||
params = params.join("&")
|
|
||||||
|
|
||||||
url = "/watch?v=#{video_id}"
|
|
||||||
if !params.empty?
|
|
||||||
url += "&#{params}"
|
|
||||||
end
|
|
||||||
|
|
||||||
env.redirect url
|
|
||||||
else
|
|
||||||
env.redirect "/channel/#{value}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Authenticated endpoints
|
# Authenticated endpoints
|
||||||
|
|
||||||
# The notification APIs can't be extracted yet
|
# The notification APIs can't be extracted yet
|
||||||
|
|
34
src/invidious/routes/live.cr
Normal file
34
src/invidious/routes/live.cr
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
module Invidious::Routes::Live
|
||||||
|
def self.check(env)
|
||||||
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
|
# Appears to be a bug in routing, having several routes configured
|
||||||
|
# as `/a/:a`, `/b/:a`, `/c/:a` results in 404
|
||||||
|
value = env.request.resource.split("/")[2]
|
||||||
|
body = ""
|
||||||
|
{"channel", "user", "c"}.each do |type|
|
||||||
|
response = YT_POOL.client &.get("/#{type}/#{value}/live?disable_polymer=1")
|
||||||
|
if response.status_code == 200
|
||||||
|
body = response.body
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
video_id = body.match(/'VIDEO_ID': "(?<id>[a-zA-Z0-9_-]{11})"/).try &.["id"]?
|
||||||
|
if video_id
|
||||||
|
params = [] of String
|
||||||
|
env.params.query.each do |k, v|
|
||||||
|
params << "#{k}=#{v}"
|
||||||
|
end
|
||||||
|
params = params.join("&")
|
||||||
|
|
||||||
|
url = "/watch?v=#{video_id}"
|
||||||
|
if !params.empty?
|
||||||
|
url += "&#{params}"
|
||||||
|
end
|
||||||
|
|
||||||
|
env.redirect url
|
||||||
|
else
|
||||||
|
env.redirect "/channel/#{value}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue