diff options
| author | syeopite <syeopite@syeopite.dev> | 2024-06-13 09:05:47 -0700 |
|---|---|---|
| committer | syeopite <syeopite@syeopite.dev> | 2024-06-13 09:07:20 -0700 |
| commit | f466116cd715120a8acea2c388e306caaf62abb0 (patch) | |
| tree | 8abd7b3dcc6b7c856a08bb514291fa0edf52eceb /src | |
| parent | 5b519123a76879edca3d5fa5cff717b58482e7e5 (diff) | |
| download | invidious-f466116cd715120a8acea2c388e306caaf62abb0.tar.gz invidious-f466116cd715120a8acea2c388e306caaf62abb0.tar.bz2 invidious-f466116cd715120a8acea2c388e306caaf62abb0.zip | |
Extract label for transcript in YouTube response
Diffstat (limited to 'src')
| -rw-r--r-- | src/invidious/videos/transcript.cr | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/src/invidious/videos/transcript.cr b/src/invidious/videos/transcript.cr index 76fb8610..9cd064c5 100644 --- a/src/invidious/videos/transcript.cr +++ b/src/invidious/videos/transcript.cr @@ -8,11 +8,16 @@ module Invidious::Videos alias TranscriptLine = HeadingLine | RegularLine property lines : Array(TranscriptLine) + property language_code : String property auto_generated : Bool + # User friendly label for the current transcript. + # Example: "English (auto-generated)" + property label : String + # Initializes a new Transcript struct with the contents and associated metadata describing it - def initialize(@lines : Array(TranscriptLine), @language_code : String, @auto_generated : Bool) + def initialize(@lines : Array(TranscriptLine), @language_code : String, @auto_generated : Bool, @label : String) end # Generates a protobuf string to fetch the requested transcript from YouTube @@ -45,14 +50,29 @@ module Invidious::Videos # Constructs a Transcripts struct from the initial YouTube response def self.from_raw(initial_data : Hash(String, JSON::Any), language_code : String, auto_generated : Bool) - segment_list = initial_data.dig("actions", 0, "updateEngagementPanelAction", "content", "transcriptRenderer", - "content", "transcriptSearchPanelRenderer", "body", "transcriptSegmentListRenderer" - ) + transcript_panel = initial_data.dig("actions", 0, "updateEngagementPanelAction", "content", "transcriptRenderer", + "content", "transcriptSearchPanelRenderer") + + segment_list = transcript_panel.dig("body", "transcriptSegmentListRenderer") if !segment_list["initialSegments"]? raise NotFoundException.new("Requested transcript does not exist") end + # Extract user-friendly label for the current transcript + + footer_language_menu = transcript_panel.dig?( + "footer", "transcriptFooterRenderer", "languageMenu", "sortFilterSubMenuRenderer", "subMenuItems" + ) + + if footer_language_menu + label = footer_language_menu.as_a.select(&.["selected"].as_bool)[0]["title"].as_s + else + label = language_code + end + + # Extract transcript lines + initial_segments = segment_list["initialSegments"].as_a lines = [] of TranscriptLine @@ -76,6 +96,7 @@ module Invidious::Videos lines: lines, language_code: language_code, auto_generated: auto_generated, + label: label ) end |
