summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>2023-02-02 11:52:31 -0500
committerChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>2023-02-02 12:41:13 -0500
commitbf5175d1e979005f6d04c9d7639c9db4aa08fb7b (patch)
tree7255c773d3ca860d3d8f5af2c6023e43c57bd7c7
parent3b8e6c6040fe341fe4b9fc16cdbd3aea697dfad3 (diff)
downloadinvidious-bf5175d1e979005f6d04c9d7639c9db4aa08fb7b.tar.gz
invidious-bf5175d1e979005f6d04c9d7639c9db4aa08fb7b.tar.bz2
invidious-bf5175d1e979005f6d04c9d7639c9db4aa08fb7b.zip
Feat: Add api endpoint to resolve youtube urls
-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..9679b530 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"]
+ if resolved_ucid = endpoint.dig?("watchEndpoint", "videoId")
+ elsif resolved_ucid = endpoint.dig?("browseEndpoint", "browseId")
+ elsif pageType = endpoint.dig?("commandMetadata", "webCommandMetadata", "webPageType").try &.as_s || ""
+ if pageType == "WEB_PAGE_TYPE_UNKNOWN"
+ return error_json(400, "Unknown url")
+ end
+ end
+ rescue ex
+ return error_json(500, ex)
+ end
+ JSON.build do |json|
+ json.object do
+ json.field "ucid", resolved_ucid.try &.as_s || ""
+ 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