mirror of
				https://github.com/iv-org/invidious.git
				synced 2025-10-31 04:32:02 +00:00 
			
		
		
		
	API: Add endpoint to resolve youtube urls (#3612)
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Samantaz Fox
					Samantaz Fox