diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeService.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeService.java index e0b605fd1..9bab849da 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeService.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeService.java @@ -37,6 +37,7 @@ import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeSubscript import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeSuggestionExtractor; import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeTrendingExtractor; import org.schabi.newpipe.extractor.services.youtube.extractors.kiosk.YoutubeLiveExtractor; +import org.schabi.newpipe.extractor.services.youtube.extractors.kiosk.YoutubeTrendingPodcastsEpisodesExtractor; import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeChannelLinkHandlerFactory; import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeChannelTabLinkHandlerFactory; import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeCommentsLinkHandlerFactory; @@ -45,6 +46,7 @@ import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubePlaylist import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory; import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeStreamLinkHandlerFactory; import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeTrendingLinkHandlerFactory; +import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeTrendingPodcastsEpisodesLinkHandlerFactory; import org.schabi.newpipe.extractor.stream.StreamExtractor; import org.schabi.newpipe.extractor.subscription.SubscriptionExtractor; import org.schabi.newpipe.extractor.suggestion.SuggestionExtractor; @@ -159,6 +161,8 @@ public class YoutubeService extends StreamingService { final ListLinkHandlerFactory trendingLHF = YoutubeTrendingLinkHandlerFactory.getInstance(); final ListLinkHandlerFactory runningLivesLHF = YoutubeLiveLinkHandlerFactory.INSTANCE; + final ListLinkHandlerFactory trendingPodcastsEpisodesLHF = + YoutubeTrendingPodcastsEpisodesLinkHandlerFactory.INSTANCE; try { list.addKioskEntry( @@ -169,6 +173,14 @@ public class YoutubeService extends StreamingService { runningLivesLHF, YoutubeLiveLinkHandlerFactory.KIOSK_ID ); + list.addKioskEntry( + (streamingService, url, id) -> new YoutubeTrendingPodcastsEpisodesExtractor( + YoutubeService.this, + trendingPodcastsEpisodesLHF.fromUrl(url), + id), + trendingPodcastsEpisodesLHF, + YoutubeTrendingPodcastsEpisodesLinkHandlerFactory.KIOSK_ID + ); list.addKioskEntry( (streamingService, url, id) -> new YoutubeTrendingExtractor( YoutubeService.this, diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeTrendingPodcastsEpisodesExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeTrendingPodcastsEpisodesExtractor.java new file mode 100644 index 000000000..840fd7bb4 --- /dev/null +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeTrendingPodcastsEpisodesExtractor.java @@ -0,0 +1,13 @@ +package org.schabi.newpipe.extractor.services.youtube.extractors.kiosk; + +import org.schabi.newpipe.extractor.StreamingService; +import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler; + +public class YoutubeTrendingPodcastsEpisodesExtractor extends YoutubeDesktopBaseKioskExtractor { + + public YoutubeTrendingPodcastsEpisodesExtractor(final StreamingService streamingService, + final ListLinkHandler linkHandler, + final String kioskId) { + super(streamingService, linkHandler, kioskId, "FEpodcasts_destination", "qgcCCAM%3D"); + } +} diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/linkHandler/YoutubeTrendingPodcastsEpisodesLinkHandlerFactory.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/linkHandler/YoutubeTrendingPodcastsEpisodesLinkHandlerFactory.java new file mode 100644 index 000000000..4cde3487f --- /dev/null +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/linkHandler/YoutubeTrendingPodcastsEpisodesLinkHandlerFactory.java @@ -0,0 +1,52 @@ +package org.schabi.newpipe.extractor.services.youtube.linkHandler; + +import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isInvidiousURL; +import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isYoutubeURL; + +import org.schabi.newpipe.extractor.exceptions.ParsingException; +import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory; +import org.schabi.newpipe.extractor.utils.Utils; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.List; + +public final class YoutubeTrendingPodcastsEpisodesLinkHandlerFactory + extends ListLinkHandlerFactory { + + public static final String KIOSK_ID = "trending_podcasts_episodes"; + + public static final YoutubeTrendingPodcastsEpisodesLinkHandlerFactory INSTANCE = + new YoutubeTrendingPodcastsEpisodesLinkHandlerFactory(); + + private static final String PATH = "/podcasts/popularepisodes"; + + private YoutubeTrendingPodcastsEpisodesLinkHandlerFactory() { + } + + @Override + public String getUrl(final String id, + final List contentFilters, + final String sortFilter) + throws ParsingException, UnsupportedOperationException { + return "https://www.youtube.com" + PATH; + } + + @Override + public String getId(final String url) throws ParsingException, UnsupportedOperationException { + return KIOSK_ID; + } + + @Override + public boolean onAcceptUrl(final String url) { + final URL urlObj; + try { + urlObj = Utils.stringToURL(url); + } catch (final MalformedURLException e) { + return false; + } + + return Utils.isHTTP(urlObj) && (isYoutubeURL(urlObj) || isInvidiousURL(urlObj)) + && PATH.equals(urlObj.getPath()); + } +}