diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubePlaylistExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubePlaylistExtractor.java index 1a1c8fabf..0f57a21a7 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubePlaylistExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubePlaylistExtractor.java @@ -108,15 +108,14 @@ public class YoutubePlaylistExtractor extends PlaylistExtractor { if (url == null) { try { - return initialData.getObject("microformat").getObject("microformatDataRenderer").getObject("thumbnail") + url = initialData.getObject("microformat").getObject("microformatDataRenderer").getObject("thumbnail") .getArray("thumbnails").getObject(0).getString("url"); } catch (Exception ignored) {} + + if (url == null) throw new ParsingException("Could not get playlist thumbnail"); } - if (url != null && !url.isEmpty()) { - return fixThumbnailUrl(url); - } - throw new ParsingException("Could not get playlist thumbnail"); + return fixThumbnailUrl(url); } @Override diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java index aa690fb95..3a66dd3cb 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java @@ -116,16 +116,20 @@ public class YoutubeStreamExtractor extends StreamExtractor { public String getName() throws ParsingException { assertPageFetched(); String title = null; + try { title = getTextFromObject(getVideoPrimaryInfoRenderer().getObject("title")); } catch (Exception ignored) {} + if (title == null) { try { title = playerResponse.getObject("videoDetails").getString("title"); } catch (Exception ignored) {} + + if (title == null) throw new ParsingException("Could not get name"); } - if (title != null) return title; - throw new ParsingException("Could not get name"); + + return title; } @Override @@ -259,17 +263,21 @@ public class YoutubeStreamExtractor extends StreamExtractor { public long getViewCount() throws ParsingException { assertPageFetched(); String views = null; + try { views = getTextFromObject(getVideoPrimaryInfoRenderer().getObject("viewCount") .getObject("videoViewCountRenderer").getObject("viewCount")); } catch (Exception ignored) {} + if (views == null) { try { views = playerResponse.getObject("videoDetails").getString("viewCount"); } catch (Exception ignored) {} + + if (views == null) throw new ParsingException("Could not get view count"); } - if (views != null) return Long.parseLong(Utils.removeNonDigitCharacters(views)); - throw new ParsingException("Could not get view count"); + + return Long.parseLong(Utils.removeNonDigitCharacters(views)); } @Override @@ -340,17 +348,21 @@ public class YoutubeStreamExtractor extends StreamExtractor { public String getUploaderName() throws ParsingException { assertPageFetched(); String uploaderName = null; + try { uploaderName = getTextFromObject(getVideoSecondaryInfoRenderer().getObject("owner") .getObject("videoOwnerRenderer").getObject("title")); } catch (Exception ignored) {} + if (uploaderName == null) { try { uploaderName = playerResponse.getObject("videoDetails").getString("author"); } catch (Exception ignored) {} + + if (uploaderName == null) throw new ParsingException("Could not get uploader name"); } - if (uploaderName != null) return uploaderName; - throw new ParsingException("Could not get uploader name"); + + return uploaderName; } @Nonnull @@ -910,9 +922,7 @@ public class YoutubeStreamExtractor extends StreamExtractor { urlAndItags.put(streamUrl, itagItem); } - } catch (UnsupportedEncodingException ignored) { - - } + } catch (UnsupportedEncodingException ignored) {} } } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamInfoItemExtractor.java index e981071ca..1e7ad5f9f 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamInfoItemExtractor.java @@ -87,10 +87,13 @@ public class YoutubeStreamInfoItemExtractor implements StreamInfoItemExtractor { @Override public long getDuration() throws ParsingException { if (getStreamType() == StreamType.LIVE_STREAM) return -1; + String duration = null; + try { duration = getTextFromObject(videoInfo.getObject("lengthText")); } catch (Exception ignored) {} + if (duration == null) { try { for (Object thumbnailOverlay : videoInfo.getArray("thumbnailOverlays")) { @@ -100,58 +103,64 @@ public class YoutubeStreamInfoItemExtractor implements StreamInfoItemExtractor { } } } catch (Exception ignored) {} + + if (duration == null) throw new ParsingException("Could not get duration"); } - if (duration != null) return YoutubeParsingHelper.parseDurationString(duration); - throw new ParsingException("Could not get duration"); + + return YoutubeParsingHelper.parseDurationString(duration); } @Override public String getUploaderName() throws ParsingException { String name = null; + try { name = getTextFromObject(videoInfo.getObject("longBylineText")); } catch (Exception ignored) {} + if (name == null) { try { name = getTextFromObject(videoInfo.getObject("ownerText")); } catch (Exception ignored) {} + + if (name == null) { + try { + name = getTextFromObject(videoInfo.getObject("shortBylineText")); + } catch (Exception ignored) {} + + if (name == null) throw new ParsingException("Could not get uploader name"); + } } - if (name == null) { - try { - name = getTextFromObject(videoInfo.getObject("shortBylineText")); - } catch (Exception ignored) {} - } - if (name != null && !name.isEmpty()) return name; - throw new ParsingException("Could not get uploader name"); + + return name; } @Override public String getUploaderUrl() throws ParsingException { + String url = null; + try { - String url = null; + url = getUrlFromNavigationEndpoint(videoInfo.getObject("longBylineText") + .getArray("runs").getObject(0).getObject("navigationEndpoint")); + } catch (Exception ignored) {} + + if (url == null) { try { - url = getUrlFromNavigationEndpoint(videoInfo.getObject("longBylineText") + url = getUrlFromNavigationEndpoint(videoInfo.getObject("ownerText") .getArray("runs").getObject(0).getObject("navigationEndpoint")); } catch (Exception ignored) {} - if (url == null) { - try { - url = getUrlFromNavigationEndpoint(videoInfo.getObject("ownerText") - .getArray("runs").getObject(0).getObject("navigationEndpoint")); - } catch (Exception ignored) {} - } + if (url == null) { try { url = getUrlFromNavigationEndpoint(videoInfo.getObject("shortBylineText") .getArray("runs").getObject(0).getObject("navigationEndpoint")); } catch (Exception ignored) {} + + if (url == null) throw new ParsingException("Could not get uploader url"); } - if (url == null || url.isEmpty()) { - throw new IllegalArgumentException("is empty"); - } - return url; - } catch (Exception e) { - throw new ParsingException("Could not get uploader url"); } + + return url; } @Nullable diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelperTest.java b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelperTest.java index 06eedaef5..f8ff12358 100644 --- a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelperTest.java +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelperTest.java @@ -6,6 +6,8 @@ import org.schabi.newpipe.DownloaderTestImpl; import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeParsingHelper; +import java.io.IOException; + import static org.junit.Assert.assertTrue; public class YoutubeParsingHelperTest { @@ -15,7 +17,7 @@ public class YoutubeParsingHelperTest { } @Test - public void testIsHardcodedClientVersionValid() { + public void testIsHardcodedClientVersionValid() throws IOException { assertTrue("Hardcoded client version is not valid anymore", YoutubeParsingHelper.isHardcodedClientVersionValid()); }