Skip to content

Commit a870e37

Browse files
committed
[YouTube] Add trending podcasts episodes extractor from Podcasts page
1 parent d38d647 commit a870e37

3 files changed

Lines changed: 77 additions & 0 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeService.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeSuggestionExtractor;
3838
import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeTrendingExtractor;
3939
import org.schabi.newpipe.extractor.services.youtube.extractors.kiosk.YoutubeLiveExtractor;
40+
import org.schabi.newpipe.extractor.services.youtube.extractors.kiosk.YoutubeTrendingPodcastsEpisodesExtractor;
4041
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeChannelLinkHandlerFactory;
4142
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeChannelTabLinkHandlerFactory;
4243
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeCommentsLinkHandlerFactory;
@@ -45,6 +46,7 @@
4546
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory;
4647
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeStreamLinkHandlerFactory;
4748
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeTrendingLinkHandlerFactory;
49+
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeTrendingPodcastsEpisodesLinkHandlerFactory;
4850
import org.schabi.newpipe.extractor.stream.StreamExtractor;
4951
import org.schabi.newpipe.extractor.subscription.SubscriptionExtractor;
5052
import org.schabi.newpipe.extractor.suggestion.SuggestionExtractor;
@@ -159,6 +161,8 @@ public KioskList getKioskList() throws ExtractionException {
159161
final ListLinkHandlerFactory trendingLHF = YoutubeTrendingLinkHandlerFactory.getInstance();
160162
final ListLinkHandlerFactory runningLivesLHF =
161163
YoutubeLiveLinkHandlerFactory.INSTANCE;
164+
final ListLinkHandlerFactory trendingPodcastsEpisodesLHF =
165+
YoutubeTrendingPodcastsEpisodesLinkHandlerFactory.INSTANCE;
162166

163167
try {
164168
list.addKioskEntry(
@@ -169,6 +173,14 @@ public KioskList getKioskList() throws ExtractionException {
169173
runningLivesLHF,
170174
YoutubeLiveLinkHandlerFactory.KIOSK_ID
171175
);
176+
list.addKioskEntry(
177+
(streamingService, url, id) -> new YoutubeTrendingPodcastsEpisodesExtractor(
178+
YoutubeService.this,
179+
trendingPodcastsEpisodesLHF.fromUrl(url),
180+
id),
181+
trendingPodcastsEpisodesLHF,
182+
YoutubeTrendingPodcastsEpisodesLinkHandlerFactory.KIOSK_ID
183+
);
172184
list.addKioskEntry(
173185
(streamingService, url, id) -> new YoutubeTrendingExtractor(
174186
YoutubeService.this,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.schabi.newpipe.extractor.services.youtube.extractors.kiosk;
2+
3+
import org.schabi.newpipe.extractor.StreamingService;
4+
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
5+
6+
public class YoutubeTrendingPodcastsEpisodesExtractor extends YoutubeDesktopBaseKioskExtractor {
7+
8+
public YoutubeTrendingPodcastsEpisodesExtractor(final StreamingService streamingService,
9+
final ListLinkHandler linkHandler,
10+
final String kioskId) {
11+
super(streamingService, linkHandler, kioskId, "FEpodcasts_destination", "qgcCCAM%3D");
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package org.schabi.newpipe.extractor.services.youtube.linkHandler;
2+
3+
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isInvidiousURL;
4+
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isYoutubeURL;
5+
6+
import org.schabi.newpipe.extractor.exceptions.ParsingException;
7+
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
8+
import org.schabi.newpipe.extractor.utils.Utils;
9+
10+
import java.net.MalformedURLException;
11+
import java.net.URL;
12+
import java.util.List;
13+
14+
public final class YoutubeTrendingPodcastsEpisodesLinkHandlerFactory
15+
extends ListLinkHandlerFactory {
16+
17+
public static final String KIOSK_ID = "trending_podcasts_episodes";
18+
19+
public static final YoutubeTrendingPodcastsEpisodesLinkHandlerFactory INSTANCE =
20+
new YoutubeTrendingPodcastsEpisodesLinkHandlerFactory();
21+
22+
private static final String PATH = "/podcasts/popularepisodes";
23+
24+
private YoutubeTrendingPodcastsEpisodesLinkHandlerFactory() {
25+
}
26+
27+
@Override
28+
public String getUrl(final String id,
29+
final List<String> contentFilters,
30+
final String sortFilter)
31+
throws ParsingException, UnsupportedOperationException {
32+
return "https://www.youtube.com" + PATH;
33+
}
34+
35+
@Override
36+
public String getId(final String url) throws ParsingException, UnsupportedOperationException {
37+
return KIOSK_ID;
38+
}
39+
40+
@Override
41+
public boolean onAcceptUrl(final String url) {
42+
final URL urlObj;
43+
try {
44+
urlObj = Utils.stringToURL(url);
45+
} catch (final MalformedURLException e) {
46+
return false;
47+
}
48+
49+
return Utils.isHTTP(urlObj) && (isYoutubeURL(urlObj) || isInvidiousURL(urlObj))
50+
&& PATH.equals(urlObj.getPath());
51+
}
52+
}

0 commit comments

Comments
 (0)