From b9fad4fcc81003c526c44a1aa36edd3e40b4bc94 Mon Sep 17 00:00:00 2001 From: FireMasterK <20838718+FireMasterK@users.noreply.github.com> Date: Thu, 2 Sep 2021 00:10:00 +0530 Subject: [PATCH 1/5] Extract Uploader's Avatar on YouTube. --- .../BandcampRadioInfoItemExtractor.java | 6 + ...campDiscographStreamInfoItemExtractor.java | 8 + ...ndcampPlaylistStreamInfoItemExtractor.java | 7 + ...BandcampSearchStreamInfoItemExtractor.java | 8 + .../MediaCCCLiveStreamKioskExtractor.java | 6 + .../MediaCCCRecentKioskExtractor.java | 6 + .../MediaCCCStreamInfoItemExtractor.java | 6 + .../PeertubeStreamInfoItemExtractor.java | 8 + .../SoundcloudStreamInfoItemExtractor.java | 8 + .../YoutubeFeedInfoItemExtractor.java | 6 + .../YoutubeStreamInfoItemExtractor.java | 14 +- .../extractor/stream/StreamInfoItem.java | 10 + .../stream/StreamInfoItemExtractor.java | 9 + .../stream/StreamInfoItemsCollector.java | 5 + .../search/YoutubeSearchExtractorTest.java | 53 +- .../generated_mock_0.json | 217 +++++ .../generated_mock_1.json | 246 ++++++ .../generated_mock_2.json | 775 ++++++++++++++++++ 18 files changed, 1382 insertions(+), 16 deletions(-) create mode 100644 extractor/src/test/resources/org/schabi/newpipe/extractor/services/youtube/extractor/search/video_uploader_avatar/generated_mock_0.json create mode 100644 extractor/src/test/resources/org/schabi/newpipe/extractor/services/youtube/extractor/search/video_uploader_avatar/generated_mock_1.json create mode 100644 extractor/src/test/resources/org/schabi/newpipe/extractor/services/youtube/extractor/search/video_uploader_avatar/generated_mock_2.json diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioInfoItemExtractor.java index 7ecc31844..5f6701770 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioInfoItemExtractor.java @@ -79,6 +79,12 @@ public class BandcampRadioInfoItemExtractor implements StreamInfoItemExtractor { return ""; } + @Nullable + @Override + public String getUploaderAvatarUrl() throws ParsingException { + return null; + } + @Override public boolean isUploaderVerified() throws ParsingException { return false; diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampDiscographStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampDiscographStreamInfoItemExtractor.java index 15b044981..e6c8d4faa 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampDiscographStreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampDiscographStreamInfoItemExtractor.java @@ -4,6 +4,8 @@ import com.grack.nanojson.JsonObject; import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.services.bandcamp.extractors.BandcampExtractorHelper; +import javax.annotation.Nullable; + public class BandcampDiscographStreamInfoItemExtractor extends BandcampStreamInfoItemExtractor { private final JsonObject discograph; @@ -18,6 +20,12 @@ public class BandcampDiscographStreamInfoItemExtractor extends BandcampStreamInf return discograph.getString("band_name"); } + @Nullable + @Override + public String getUploaderAvatarUrl() throws ParsingException { + return null; + } + @Override public String getName() { return discograph.getString("title"); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampPlaylistStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampPlaylistStreamInfoItemExtractor.java index e90a12aa1..ac21794cd 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampPlaylistStreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampPlaylistStreamInfoItemExtractor.java @@ -8,6 +8,7 @@ import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.stream.StreamExtractor; +import javax.annotation.Nullable; import java.io.IOException; @@ -53,6 +54,12 @@ public class BandcampPlaylistStreamInfoItemExtractor extends BandcampStreamInfoI return ""; } + @Nullable + @Override + public String getUploaderAvatarUrl() throws ParsingException { + return null; + } + /** * Each track can have its own cover art. Therefore, unless a substitute is provided, * the thumbnail is extracted using a stream extractor. diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampSearchStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampSearchStreamInfoItemExtractor.java index adeea0519..abe57d202 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampSearchStreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampSearchStreamInfoItemExtractor.java @@ -3,6 +3,8 @@ package org.schabi.newpipe.extractor.services.bandcamp.extractors.streaminfoitem import org.jsoup.nodes.Element; import org.schabi.newpipe.extractor.exceptions.ParsingException; +import javax.annotation.Nullable; + public class BandcampSearchStreamInfoItemExtractor extends BandcampStreamInfoItemExtractor { private final Element resultInfo, searchResult; @@ -24,6 +26,12 @@ public class BandcampSearchStreamInfoItemExtractor extends BandcampStreamInfoIte } } + @Nullable + @Override + public String getUploaderAvatarUrl() throws ParsingException { + return null; + } + @Override public String getName() throws ParsingException { return resultInfo.getElementsByClass("heading").text(); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCLiveStreamKioskExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCLiveStreamKioskExtractor.java index 504dd3b08..111ac9cb3 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCLiveStreamKioskExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCLiveStreamKioskExtractor.java @@ -73,6 +73,12 @@ public class MediaCCCLiveStreamKioskExtractor implements StreamInfoItemExtractor return "https://media.ccc.de/c/" + conferenceInfo.getString("slug"); } + @Nullable + @Override + public String getUploaderAvatarUrl() throws ParsingException { + return null; + } + @Override public boolean isUploaderVerified() throws ParsingException { return false; diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCRecentKioskExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCRecentKioskExtractor.java index 2ff86a4fc..72bb10fa3 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCRecentKioskExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCRecentKioskExtractor.java @@ -68,6 +68,12 @@ public class MediaCCCRecentKioskExtractor implements StreamInfoItemExtractor { .getUrl(); // web URL } + @Nullable + @Override + public String getUploaderAvatarUrl() throws ParsingException { + return null; + } + @Override public boolean isUploaderVerified() throws ParsingException { return false; diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/infoItems/MediaCCCStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/infoItems/MediaCCCStreamInfoItemExtractor.java index 023166437..cc9f3d740 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/infoItems/MediaCCCStreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/infoItems/MediaCCCStreamInfoItemExtractor.java @@ -46,6 +46,12 @@ public class MediaCCCStreamInfoItemExtractor implements StreamInfoItemExtractor return event.getString("conference_url"); } + @Nullable + @Override + public String getUploaderAvatarUrl() throws ParsingException { + return null; + } + @Override public boolean isUploaderVerified() throws ParsingException { return false; diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamInfoItemExtractor.java index df6060bd2..8a5a229ca 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamInfoItemExtractor.java @@ -9,6 +9,8 @@ import org.schabi.newpipe.extractor.stream.StreamInfoItemExtractor; import org.schabi.newpipe.extractor.stream.StreamType; import org.schabi.newpipe.extractor.utils.JsonUtils; +import javax.annotation.Nullable; + public class PeertubeStreamInfoItemExtractor implements StreamInfoItemExtractor { protected final JsonObject item; @@ -54,6 +56,12 @@ public class PeertubeStreamInfoItemExtractor implements StreamInfoItemExtractor .fromId("accounts/" + name + "@" + host, baseUrl).getUrl(); } + @Nullable + @Override + public String getUploaderAvatarUrl() throws ParsingException { + return null; + } + @Override public boolean isUploaderVerified() throws ParsingException { return false; diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudStreamInfoItemExtractor.java index 90f6efd85..e0686776a 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudStreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudStreamInfoItemExtractor.java @@ -7,6 +7,8 @@ import org.schabi.newpipe.extractor.services.soundcloud.SoundcloudParsingHelper; import org.schabi.newpipe.extractor.stream.StreamInfoItemExtractor; import org.schabi.newpipe.extractor.stream.StreamType; +import javax.annotation.Nullable; + import static org.schabi.newpipe.extractor.utils.Utils.EMPTY_STRING; import static org.schabi.newpipe.extractor.utils.Utils.replaceHttpWithHttps; @@ -43,6 +45,12 @@ public class SoundcloudStreamInfoItemExtractor implements StreamInfoItemExtracto return replaceHttpWithHttps(itemObject.getObject("user").getString("permalink_url")); } + @Nullable + @Override + public String getUploaderAvatarUrl() throws ParsingException { + return null; + } + @Override public boolean isUploaderVerified() throws ParsingException { return itemObject.getObject("user").getBoolean("verified"); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeFeedInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeFeedInfoItemExtractor.java index a1883621f..a0bd8917b 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeFeedInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeFeedInfoItemExtractor.java @@ -50,6 +50,12 @@ public class YoutubeFeedInfoItemExtractor implements StreamInfoItemExtractor { return entryElement.select("author > uri").first().text(); } + @Nullable + @Override + public String getUploaderAvatarUrl() throws ParsingException { + return null; + } + @Override public boolean isUploaderVerified() throws ParsingException { return false; 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 f7cd38d94..344a01a4f 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 @@ -9,6 +9,7 @@ import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper; import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeStreamLinkHandlerFactory; import org.schabi.newpipe.extractor.stream.StreamInfoItemExtractor; import org.schabi.newpipe.extractor.stream.StreamType; +import org.schabi.newpipe.extractor.utils.JsonUtils; import org.schabi.newpipe.extractor.utils.Utils; import javax.annotation.Nullable; @@ -40,7 +41,7 @@ import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty; */ public class YoutubeStreamInfoItemExtractor implements StreamInfoItemExtractor { - private JsonObject videoInfo; + private final JsonObject videoInfo; private final TimeAgoParser timeAgoParser; private StreamType cachedStreamType; @@ -162,6 +163,17 @@ public class YoutubeStreamInfoItemExtractor implements StreamInfoItemExtractor { return url; } + @Nullable + @Override + public String getUploaderAvatarUrl() throws ParsingException { + + if(videoInfo.has("channelThumbnailSupportedRenderers")) { + return JsonUtils.getArray(videoInfo, "channelThumbnailSupportedRenderers.channelThumbnailWithLinkRenderer.thumbnail.thumbnails").getObject(0).getString("url"); + } + + return null; + } + @Override public boolean isUploaderVerified() throws ParsingException { return YoutubeParsingHelper.isVerified(videoInfo.getArray("ownerBadges")); diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfoItem.java b/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfoItem.java index 63c574153..67431884c 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfoItem.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfoItem.java @@ -39,6 +39,7 @@ public class StreamInfoItem extends InfoItem { private long duration = -1; private String uploaderUrl = null; + private String uploaderAvatarUrl = null; private boolean uploaderVerified = false; public StreamInfoItem(int serviceId, String url, String name, StreamType streamType) { @@ -82,6 +83,15 @@ public class StreamInfoItem extends InfoItem { this.uploaderUrl = uploaderUrl; } + @Nullable + public String getUploaderAvatarUrl() { + return uploaderAvatarUrl; + } + + public void setUploaderAvatarUrl(String uploaderAvatarUrl) { + this.uploaderAvatarUrl = uploaderAvatarUrl; + } + @Nullable public String getTextualUploadDate() { return textualUploadDate; diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfoItemExtractor.java index c9e45170e..6d61ee441 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfoItemExtractor.java @@ -71,6 +71,15 @@ public interface StreamInfoItemExtractor extends InfoItemExtractor { String getUploaderUrl() throws ParsingException; + /** + * Get the uploader's avatar + * + * @return The uploader's avatar url or {@code null} if not provided by the service. + * @throws ParsingException if there is an error in the extraction + */ + @Nullable + String getUploaderAvatarUrl() throws ParsingException; + /** * Whether the uploader has been verified by the service's provider. * If there is no verification implemented, return false. diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfoItemsCollector.java b/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfoItemsCollector.java index 464653a9d..ae00a1b7f 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfoItemsCollector.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfoItemsCollector.java @@ -91,6 +91,11 @@ public class StreamInfoItemsCollector extends InfoItemsCollector Date: Thu, 2 Sep 2021 00:35:56 +0530 Subject: [PATCH 2/5] Improve based on review/feedback. --- .../youtube/extractors/YoutubeStreamInfoItemExtractor.java | 3 ++- .../org/schabi/newpipe/extractor/stream/StreamInfoItem.java | 2 +- .../services/youtube/search/YoutubeSearchExtractorTest.java | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) 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 344a01a4f..051aa2788 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 @@ -168,7 +168,8 @@ public class YoutubeStreamInfoItemExtractor implements StreamInfoItemExtractor { public String getUploaderAvatarUrl() throws ParsingException { if(videoInfo.has("channelThumbnailSupportedRenderers")) { - return JsonUtils.getArray(videoInfo, "channelThumbnailSupportedRenderers.channelThumbnailWithLinkRenderer.thumbnail.thumbnails").getObject(0).getString("url"); + return JsonUtils.getArray(videoInfo, "channelThumbnailSupportedRenderers.channelThumbnailWithLinkRenderer.thumbnail.thumbnails") + .getObject(0).getString("url"); } return null; diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfoItem.java b/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfoItem.java index 67431884c..8f2d42437 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfoItem.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfoItem.java @@ -88,7 +88,7 @@ public class StreamInfoItem extends InfoItem { return uploaderAvatarUrl; } - public void setUploaderAvatarUrl(String uploaderAvatarUrl) { + public void setUploaderAvatarUrl(final String uploaderAvatarUrl) { this.uploaderAvatarUrl = uploaderAvatarUrl; } diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/search/YoutubeSearchExtractorTest.java b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/search/YoutubeSearchExtractorTest.java index e5210c2ed..0ae7f88da 100644 --- a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/search/YoutubeSearchExtractorTest.java +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/search/YoutubeSearchExtractorTest.java @@ -338,7 +338,7 @@ public class YoutubeSearchExtractorTest { @Test public void testUploaderAvatar() throws IOException, ExtractionException { final List items = extractor.getInitialPage().getItems(); - for (InfoItem item : items) { + for (final InfoItem item : items) { assertNotNull(((StreamInfoItem) item).getUploaderAvatarUrl()); } } From a0c1dcc8d81c90b5b3543f87652f18dde6a091ae Mon Sep 17 00:00:00 2001 From: FireMasterK <20838718+FireMasterK@users.noreply.github.com> Date: Thu, 2 Sep 2021 16:12:37 +0530 Subject: [PATCH 3/5] Remove throws parsing exception. --- .../bandcamp/extractors/BandcampRadioInfoItemExtractor.java | 2 +- .../BandcampDiscographStreamInfoItemExtractor.java | 2 +- .../streaminfoitem/BandcampPlaylistStreamInfoItemExtractor.java | 2 +- .../streaminfoitem/BandcampSearchStreamInfoItemExtractor.java | 2 +- .../media_ccc/extractors/MediaCCCLiveStreamKioskExtractor.java | 2 +- .../media_ccc/extractors/MediaCCCRecentKioskExtractor.java | 2 +- .../extractors/infoItems/MediaCCCStreamInfoItemExtractor.java | 2 +- .../peertube/extractors/PeertubeStreamInfoItemExtractor.java | 2 +- .../extractors/SoundcloudStreamInfoItemExtractor.java | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioInfoItemExtractor.java index 5f6701770..cca802e95 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampRadioInfoItemExtractor.java @@ -81,7 +81,7 @@ public class BandcampRadioInfoItemExtractor implements StreamInfoItemExtractor { @Nullable @Override - public String getUploaderAvatarUrl() throws ParsingException { + public String getUploaderAvatarUrl() { return null; } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampDiscographStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampDiscographStreamInfoItemExtractor.java index e6c8d4faa..6a2549989 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampDiscographStreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampDiscographStreamInfoItemExtractor.java @@ -22,7 +22,7 @@ public class BandcampDiscographStreamInfoItemExtractor extends BandcampStreamInf @Nullable @Override - public String getUploaderAvatarUrl() throws ParsingException { + public String getUploaderAvatarUrl() { return null; } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampPlaylistStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampPlaylistStreamInfoItemExtractor.java index ac21794cd..c28c24ba2 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampPlaylistStreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampPlaylistStreamInfoItemExtractor.java @@ -56,7 +56,7 @@ public class BandcampPlaylistStreamInfoItemExtractor extends BandcampStreamInfoI @Nullable @Override - public String getUploaderAvatarUrl() throws ParsingException { + public String getUploaderAvatarUrl() { return null; } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampSearchStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampSearchStreamInfoItemExtractor.java index abe57d202..87ba69d11 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampSearchStreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/streaminfoitem/BandcampSearchStreamInfoItemExtractor.java @@ -28,7 +28,7 @@ public class BandcampSearchStreamInfoItemExtractor extends BandcampStreamInfoIte @Nullable @Override - public String getUploaderAvatarUrl() throws ParsingException { + public String getUploaderAvatarUrl() { return null; } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCLiveStreamKioskExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCLiveStreamKioskExtractor.java index 111ac9cb3..e04be76f9 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCLiveStreamKioskExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCLiveStreamKioskExtractor.java @@ -75,7 +75,7 @@ public class MediaCCCLiveStreamKioskExtractor implements StreamInfoItemExtractor @Nullable @Override - public String getUploaderAvatarUrl() throws ParsingException { + public String getUploaderAvatarUrl() { return null; } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCRecentKioskExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCRecentKioskExtractor.java index 72bb10fa3..4f272898c 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCRecentKioskExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCRecentKioskExtractor.java @@ -70,7 +70,7 @@ public class MediaCCCRecentKioskExtractor implements StreamInfoItemExtractor { @Nullable @Override - public String getUploaderAvatarUrl() throws ParsingException { + public String getUploaderAvatarUrl() { return null; } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/infoItems/MediaCCCStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/infoItems/MediaCCCStreamInfoItemExtractor.java index cc9f3d740..0f03788a4 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/infoItems/MediaCCCStreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/infoItems/MediaCCCStreamInfoItemExtractor.java @@ -48,7 +48,7 @@ public class MediaCCCStreamInfoItemExtractor implements StreamInfoItemExtractor @Nullable @Override - public String getUploaderAvatarUrl() throws ParsingException { + public String getUploaderAvatarUrl() { return null; } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamInfoItemExtractor.java index 8a5a229ca..c7e0c529e 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamInfoItemExtractor.java @@ -58,7 +58,7 @@ public class PeertubeStreamInfoItemExtractor implements StreamInfoItemExtractor @Nullable @Override - public String getUploaderAvatarUrl() throws ParsingException { + public String getUploaderAvatarUrl() { return null; } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudStreamInfoItemExtractor.java index e0686776a..3647ff09e 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudStreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudStreamInfoItemExtractor.java @@ -47,7 +47,7 @@ public class SoundcloudStreamInfoItemExtractor implements StreamInfoItemExtracto @Nullable @Override - public String getUploaderAvatarUrl() throws ParsingException { + public String getUploaderAvatarUrl() { return null; } From db6b3b2c29d1751f08fd0822b822380d631ba640 Mon Sep 17 00:00:00 2001 From: Kavin <20838718+FireMasterK@users.noreply.github.com> Date: Thu, 2 Sep 2021 16:06:35 +0530 Subject: [PATCH 4/5] Extract uploader's avatar in peertube. Co-authored-by: Tobi --- .../peertube/extractors/PeertubeStreamInfoItemExtractor.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamInfoItemExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamInfoItemExtractor.java index c7e0c529e..b9c7f4b13 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamInfoItemExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/extractors/PeertubeStreamInfoItemExtractor.java @@ -59,6 +59,10 @@ public class PeertubeStreamInfoItemExtractor implements StreamInfoItemExtractor @Nullable @Override public String getUploaderAvatarUrl() { + final JsonObject account = item.getObject("account"); + if (account.has("avatar") && !account.isNull("avatar")) { + return baseUrl + account.getObject("avatar").getString("path"); + } return null; } From 1db463b55fee24e0932103c1da0f3451cfcab62c Mon Sep 17 00:00:00 2001 From: FireMasterK <20838718+FireMasterK@users.noreply.github.com> Date: Fri, 3 Sep 2021 21:05:36 +0530 Subject: [PATCH 5/5] Add a default test for the Uploader's Avatar. --- .../org/schabi/newpipe/extractor/services/DefaultTests.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/services/DefaultTests.java b/extractor/src/test/java/org/schabi/newpipe/extractor/services/DefaultTests.java index d2b9ca4ae..a88dff433 100644 --- a/extractor/src/test/java/org/schabi/newpipe/extractor/services/DefaultTests.java +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/services/DefaultTests.java @@ -48,6 +48,11 @@ public final class DefaultTests { assertExpectedLinkType(expectedService, uploaderUrl, LinkType.CHANNEL); } + final String uploaderAvatarUrl = streamInfoItem.getUploaderAvatarUrl(); + if (!isNullOrEmpty(uploaderAvatarUrl)) { + assertIsSecureUrl(uploaderAvatarUrl); + } + assertExpectedLinkType(expectedService, streamInfoItem.getUrl(), LinkType.STREAM); if (!isNullOrEmpty(streamInfoItem.getTextualUploadDate())) {