API: Add endpoint to resolve youtube urls (#3612)

This commit is contained in:
Samantaz Fox 2023-02-19 14:39:47 +01:00
commit 217b740e01
No known key found for this signature in database
GPG key ID: F42821059186176E
2 changed files with 28 additions and 0 deletions

View file

@ -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

View file

@ -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