diff options
| author | Samantaz Fox <coding@samantaz.fr> | 2023-02-19 14:39:47 +0100 |
|---|---|---|
| committer | Samantaz Fox <coding@samantaz.fr> | 2023-02-19 14:39:47 +0100 |
| commit | 217b740e011eab197705ebeb5eaff7090e19530d (patch) | |
| tree | 6c749ffa2d198705b9aabd629b03fce6eef6f008 | |
| parent | d6bf9e9bcff98f8aa1343d103d03b4fd0e2e3299 (diff) | |
| parent | c162c7ff3f27498bd374b674bf7ca9b0c0790cc8 (diff) | |
| download | invidious-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.cr | 27 | ||||
| -rw-r--r-- | src/invidious/routing.cr | 1 |
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 |
