From 72f9ac223e25e246218e5eb34040077161831561 Mon Sep 17 00:00:00 2001 From: tonakriz Date: Thu, 23 Nov 2017 11:47:05 +0100 Subject: [PATCH] Using Class instead of HashMap, removed downloadSubtitles method --- .../schabi/newpipe/extractor/Subtitles.java | 31 ++++++++++++++ .../soundcloud/SoundcloudStreamExtractor.java | 14 ++----- .../youtube/YoutubeStreamExtractor.java | 40 +++++++++---------- .../extractor/stream/StreamExtractor.java | 5 +-- 4 files changed, 54 insertions(+), 36 deletions(-) create mode 100644 src/main/java/org/schabi/newpipe/extractor/Subtitles.java diff --git a/src/main/java/org/schabi/newpipe/extractor/Subtitles.java b/src/main/java/org/schabi/newpipe/extractor/Subtitles.java new file mode 100644 index 000000000..12e1dcbc3 --- /dev/null +++ b/src/main/java/org/schabi/newpipe/extractor/Subtitles.java @@ -0,0 +1,31 @@ +package org.schabi.newpipe.extractor; + +public class Subtitles { + private String languageName; + private String languageCode; + private String URL; + private boolean autoGenerated; + + public Subtitles(String languageName, String languageCode, String URL, boolean autoGenerated) { + this.languageName = languageName; + this.languageCode = languageCode; + this.URL = URL; + this.autoGenerated = autoGenerated; + } + + public String getLanguageName() { + return languageName; + } + + public String getLanguageCode() { + return languageCode; + } + + public String getURL() { + return URL; + } + + public boolean isAutoGenerated() { + return autoGenerated; + } +} diff --git a/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudStreamExtractor.java b/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudStreamExtractor.java index 28bc4bdb4..d8b09a11d 100644 --- a/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudStreamExtractor.java +++ b/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudStreamExtractor.java @@ -3,10 +3,7 @@ package org.schabi.newpipe.extractor.services.soundcloud; import com.grack.nanojson.JsonObject; import com.grack.nanojson.JsonParser; import com.grack.nanojson.JsonParserException; -import org.schabi.newpipe.extractor.Downloader; -import org.schabi.newpipe.extractor.MediaFormat; -import org.schabi.newpipe.extractor.NewPipe; -import org.schabi.newpipe.extractor.StreamingService; +import org.schabi.newpipe.extractor.*; import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException; import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.exceptions.ParsingException; @@ -195,13 +192,8 @@ public class SoundcloudStreamExtractor extends StreamExtractor { } @Override - public HashMap getSubtitlesList() throws IOException, ExtractionException, JsonParserException { - return new HashMap<>(); - } - - @Override - public String downloadSubtitles(String URL) throws IOException, ReCaptchaException { - return ""; + public Subtitles[] getSubtitles() throws IOException, ExtractionException, JsonParserException { + return null; } @Override diff --git a/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamExtractor.java b/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamExtractor.java index 4fa3b7afc..b9345e2e5 100644 --- a/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamExtractor.java +++ b/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamExtractor.java @@ -13,6 +13,7 @@ import org.mozilla.javascript.ScriptableObject; import org.schabi.newpipe.extractor.Downloader; import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.StreamingService; +import org.schabi.newpipe.extractor.Subtitles; import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException; import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.exceptions.ParsingException; @@ -421,40 +422,35 @@ public class YoutubeStreamExtractor extends StreamExtractor { } @Override - public HashMap getSubtitlesList() throws IOException, ExtractionException, JsonParserException { - HashMap result = new HashMap<>(); - + public Subtitles[] getSubtitles() throws IOException, ExtractionException, JsonParserException { JsonObject playerConfig = getPlayerConfig(getPageHtml()); - String playerResponse = playerConfig.getObject("args").getString("player_response"); - if (!JsonParser.object().from(playerResponse).has("captions")) { - return new HashMap<>(); - } + if (!JsonParser.object().from(playerResponse).has("captions")) return null; JsonObject captions = JsonParser.object().from(playerResponse).getObject("captions"); JsonArray captionsArray = captions.getObject("playerCaptionsTracklistRenderer").getArray("captionTracks"); - for (int x = 0; x < captionsArray.size(); x++) { - String captionsUrlAndName[] = new String[2]; - captionsUrlAndName[0] = captionsArray.getObject(x).getString("baseUrl"); - captionsUrlAndName[1] = captionsArray.getObject(x).getObject("name").getString("simpleText"); + int captionsSize = captionsArray.size(); + Subtitles[] result = new Subtitles[captionsSize]; + + for (int x = 0; x < captionsSize; x++) { + String baseUrl = captionsArray.getObject(x).getString("baseUrl"); + + String languageName = captionsArray.getObject(x).getObject("name").getString("simpleText"); + String URL = baseUrl.replaceAll("&fmt=[^&]*", "&fmt=vtt"); + String captionsLangCode = captionsArray.getObject(x).getString("vssId"); + String languageCode = captionsLangCode.replaceAll("(a\\.)|(\\.)", ""); - result.put(captionsLangCode, captionsUrlAndName); + boolean isAutoGenerated = captionsLangCode.startsWith("a."); + + result[x] = new Subtitles(languageName, languageCode, URL, isAutoGenerated); } - + return result; } - @Override - public String downloadSubtitles(String URL) throws IOException, ReCaptchaException { - Downloader dl = NewPipe.getDownloader(); - // Instead of the WebVTT 'vtt' we can use also Timed Text Markup Language 'ttml' - String URLasVTT = URL.replaceAll("&fmt=[^&]*", "&fmt=vtt"); - return dl.download(URLasVTT); - } - @Override public StreamType getStreamType() throws ParsingException { //todo: if implementing livestream support this value should be generated dynamically @@ -703,7 +699,7 @@ public class YoutubeStreamExtractor extends StreamExtractor { private String decryptSignature(String encryptedSig, String decryptionCode) throws DecryptException { Context context = Context.enter(); context.setOptimizationLevel(-1); - Object result = null; + Object result; try { ScriptableObject scope = context.initStandardObjects(); context.evaluateString(scope, decryptionCode, "decryptionCode", 1, null); diff --git a/src/main/java/org/schabi/newpipe/extractor/stream/StreamExtractor.java b/src/main/java/org/schabi/newpipe/extractor/stream/StreamExtractor.java index fc49e653a..7030f4aa1 100644 --- a/src/main/java/org/schabi/newpipe/extractor/stream/StreamExtractor.java +++ b/src/main/java/org/schabi/newpipe/extractor/stream/StreamExtractor.java @@ -23,13 +23,13 @@ package org.schabi.newpipe.extractor.stream; import com.grack.nanojson.JsonParserException; import org.schabi.newpipe.extractor.Extractor; import org.schabi.newpipe.extractor.StreamingService; +import org.schabi.newpipe.extractor.Subtitles; import org.schabi.newpipe.extractor.UrlIdHandler; import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ReCaptchaException; import java.io.IOException; -import java.util.HashMap; import java.util.List; /** @@ -67,8 +67,7 @@ public abstract class StreamExtractor extends Extractor { public abstract List getAudioStreams() throws IOException, ExtractionException; public abstract List getVideoStreams() throws IOException, ExtractionException; public abstract List getVideoOnlyStreams() throws IOException, ExtractionException; - public abstract HashMap getSubtitlesList() throws IOException, ExtractionException, JsonParserException; - public abstract String downloadSubtitles(String URL) throws IOException, ReCaptchaException; + public abstract Subtitles[] getSubtitles() throws IOException, ExtractionException, JsonParserException; public abstract StreamType getStreamType() throws ParsingException; public abstract StreamInfoItem getNextVideo() throws IOException, ExtractionException;