diff options
| author | syeopite <syeopite@syeopite.dev> | 2023-07-23 03:22:19 -0700 |
|---|---|---|
| committer | syeopite <syeopite@syeopite.dev> | 2023-07-23 14:40:08 -0700 |
| commit | 4b3ac1a757a5ee14919e83a84de31a3d0bd14a4c (patch) | |
| tree | 0e845427d52464eb5576a261830a6bcaa60dc7de /src | |
| parent | 8e18d445a7adf9a0c0887249003a7b84f0fb95af (diff) | |
| download | invidious-4b3ac1a757a5ee14919e83a84de31a3d0bd14a4c.tar.gz invidious-4b3ac1a757a5ee14919e83a84de31a3d0bd14a4c.tar.bz2 invidious-4b3ac1a757a5ee14919e83a84de31a3d0bd14a4c.zip | |
Add method to parse transcript JSON into structs
Diffstat (limited to 'src')
| -rw-r--r-- | src/invidious/videos/transcript.cr | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/invidious/videos/transcript.cr b/src/invidious/videos/transcript.cr index c50f7569..0d8b0b25 100644 --- a/src/invidious/videos/transcript.cr +++ b/src/invidious/videos/transcript.cr @@ -1,6 +1,8 @@ module Invidious::Videos # Namespace for methods primarily relating to Transcripts module Transcript + record TranscriptLine, start_ms : Time::Span, end_ms : Time::Span, line : String + def self.generate_param(video_id : String, language_code : String, auto_generated : Bool) : String if !auto_generated is_auto_generated = "" @@ -30,5 +32,40 @@ module Invidious::Videos return params end + + def self.convert_transcripts_to_vtt(initial_data : JSON::Any, target_language : String) : String + # Convert into TranscriptLine + + vtt = String.build do |vtt| + result << <<-END_VTT + WEBVTT + Kind: captions + Language: #{tlang} + + + END_VTT + + vtt << "\n\n" + end + end + + def self.parse(initial_data : Hash(String, JSON::Any)) + body = initial_data.dig("actions", 0, "updateEngagementPanelAction", "content", "transcriptRenderer", + "content", "transcriptSearchPanelRenderer", "body", "transcriptSegmentListRenderer", + "initialSegments").as_a + + lines = [] of TranscriptLine + body.each do |line| + line = line["transcriptSegmentRenderer"] + start_ms = line["startMs"].as_s.to_i.millisecond + end_ms = line["endMs"].as_s.to_i.millisecond + + text = extract_text(line["snippet"]) || "" + + lines << TranscriptLine.new(start_ms, end_ms, text) + end + + return lines + end end end |
