summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2023-02-19 14:39:47 +0100
committerSamantaz Fox <coding@samantaz.fr>2023-02-19 14:39:47 +0100
commit217b740e011eab197705ebeb5eaff7090e19530d (patch)
tree6c749ffa2d198705b9aabd629b03fce6eef6f008
parentd6bf9e9bcff98f8aa1343d103d03b4fd0e2e3299 (diff)
parentc162c7ff3f27498bd374b674bf7ca9b0c0790cc8 (diff)
downloadinvidious-217b740e011eab197705ebeb5eaff7090e19530d.tar.gz
invidious-217b740e011eab197705ebeb5eaff7090e19530d.tar.bz2
invidious-217b740e011eab197705ebeb5eaff7090e19530d.zip
API: Add endpoint to resolve youtube urls (#3612)
-rw-r--r--src/invidious/routes/api/v1/misc.cr27
-rw-r--r--src/invidious/routing.cr1
2 files changed, 28 insertions, 0 deletions
diff --git a/src/invidious/routes/api/v1/misc.cr b/src/invidious/routes/api/v1/misc.cr
index 43d360e6..e499f4d6 100644
--- a/src/invidious/routes/api/v1/misc.cr
+++ b/src/invidious/routes/api/v1/misc.cr
@@ -150,4 +150,31 @@ module Invidious::Routes::API::V1::Misc
response
end
+
+ # resolve channel and clip urls, return the UCID
+ def self.resolve_url(env)
+ env.response.content_type = "application/json"
+ url = env.params.query["url"]?
+
+ return error_json(400, "Missing URL to resolve") if !url
+
+ begin
+ resolved_url = YoutubeAPI.resolve_url(url.as(String))
+ endpoint = resolved_url["endpoint"]
+ pageType = endpoint.dig?("commandMetadata", "webCommandMetadata", "webPageType").try &.as_s || ""
+ if resolved_ucid = endpoint.dig?("watchEndpoint", "videoId")
+ elsif resolved_ucid = endpoint.dig?("browseEndpoint", "browseId")
+ elsif pageType == "WEB_PAGE_TYPE_UNKNOWN"
+ return error_json(400, "Unknown url")
+ end
+ rescue ex
+ return error_json(500, ex)
+ end
+ JSON.build do |json|
+ json.object do
+ json.field "ucid", resolved_ucid.try &.as_s || ""
+ json.field "pageType", pageType
+ end
+ end
+ end
end
diff --git a/src/invidious/routing.cr b/src/invidious/routing.cr
index 157e6de7..fb9851a3 100644
--- a/src/invidious/routing.cr
+++ b/src/invidious/routing.cr
@@ -281,6 +281,7 @@ module Invidious::Routing
get "/api/v1/playlists/:plid", {{namespace}}::Misc, :get_playlist
get "/api/v1/auth/playlists/:plid", {{namespace}}::Misc, :get_playlist
get "/api/v1/mixes/:rdid", {{namespace}}::Misc, :mixes
+ get "/api/v1/resolveurl", {{namespace}}::Misc, :resolve_url
{% end %}
end
end