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
1 changed files with 22 additions and 1 deletions

View File

@ -421,10 +421,11 @@ module Invidious::Routes::API::V1::Videos
id = env.params.url["id"]
lang = env.params.query["lang"]?
label = env.params.query["label"]?
auto_generated = env.params.query["autogen"]? ? true : false
# Return all available transcript options when none is given
if !lang
if !label && !lang
begin
video = get_video(id)
rescue ex : NotFoundException
@ -462,6 +463,26 @@ module Invidious::Routes::API::V1::Videos
return response
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)
begin