Add logic to fetch transcripts from label

Although available this method should be discouraged as it requires
an extra request to YouTube to get caption data in order to
map label -> language code and auto-generated status, which are needed
to fetch transcripts.
This commit is contained in:
syeopite 2024-06-13 10:56:18 -07:00
parent 7693f61e44
commit b2f5b1eb68
No known key found for this signature in database
GPG Key ID: A73C186DA3955A1A

View File

@ -421,10 +421,11 @@ module Invidious::Routes::API::V1::Videos
id = env.params.url["id"] id = env.params.url["id"]
lang = env.params.query["lang"]? lang = env.params.query["lang"]?
label = env.params.query["label"]?
auto_generated = env.params.query["autogen"]? ? true : false auto_generated = env.params.query["autogen"]? ? true : false
# Return all available transcript options when none is given # Return all available transcript options when none is given
if !lang if !label && !lang
begin begin
video = get_video(id) video = get_video(id)
rescue ex : NotFoundException rescue ex : NotFoundException
@ -462,6 +463,26 @@ module Invidious::Routes::API::V1::Videos
return response return response
end end
# If lang is not given then we attempt to fetch
# the transcript through the given label
if lang.nil?
begin
video = get_video(id)
rescue ex : NotFoundException
return error_json(404, ex)
rescue ex
return error_json(500, ex)
end
target_transcript = video.captions.select(&.name.== label)
if target_transcript.empty?
return error_json(404, NotFoundException.new("Requested transcript does not exist"))
else
target_transcript = target_transcript[0]
lang, auto_generated = target_transcript.language_code, target_transcript.auto_generated
end
end
params = Invidious::Videos::Transcript.generate_param(id, lang, auto_generated) params = Invidious::Videos::Transcript.generate_param(id, lang, auto_generated)
begin begin