From b2f5b1eb68382079f4d88792b8f3f79635125254 Mon Sep 17 00:00:00 2001 From: syeopite Date: Thu, 13 Jun 2024 10:56:18 -0700 Subject: [PATCH] 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. --- src/invidious/routes/api/v1/videos.cr | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/invidious/routes/api/v1/videos.cr b/src/invidious/routes/api/v1/videos.cr index 03fdc49b..85a208c7 100644 --- a/src/invidious/routes/api/v1/videos.cr +++ b/src/invidious/routes/api/v1/videos.cr @@ -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