Skip to content

Commit f4203e6

Browse files
committed
[YouTube] Add trending movies and shows trailers extractor
This kiosk also returns some videos for unsupported YouTube Charts countries, even if there are fewer than in a supported country.
1 parent e643024 commit f4203e6

3 files changed

Lines changed: 88 additions & 0 deletions

File tree

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeTrendingExtractor;
3939
import org.schabi.newpipe.extractor.services.youtube.extractors.kiosk.YoutubeLiveExtractor;
4040
import org.schabi.newpipe.extractor.services.youtube.extractors.kiosk.YoutubeTrendingGamingVideosExtractor;
41+
import org.schabi.newpipe.extractor.services.youtube.extractors.kiosk.YoutubeTrendingMoviesAndShowsTrailersExtractor;
4142
import org.schabi.newpipe.extractor.services.youtube.extractors.kiosk.YoutubeTrendingPodcastsEpisodesExtractor;
4243
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeChannelLinkHandlerFactory;
4344
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeChannelTabLinkHandlerFactory;
@@ -48,6 +49,7 @@
4849
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeStreamLinkHandlerFactory;
4950
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeTrendingGamingVideosLinkHandlerFactory;
5051
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeTrendingLinkHandlerFactory;
52+
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeTrendingMoviesAndShowsTrailersLinkHandlerFactory;
5153
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeTrendingPodcastsEpisodesLinkHandlerFactory;
5254
import org.schabi.newpipe.extractor.stream.StreamExtractor;
5355
import org.schabi.newpipe.extractor.subscription.SubscriptionExtractor;
@@ -167,6 +169,8 @@ public KioskList getKioskList() throws ExtractionException {
167169
YoutubeTrendingPodcastsEpisodesLinkHandlerFactory.INSTANCE;
168170
final ListLinkHandlerFactory trendingGamingVideosLHF =
169171
YoutubeTrendingGamingVideosLinkHandlerFactory.INSTANCE;
172+
final ListLinkHandlerFactory trendingMoviesAndShowsLHF =
173+
YoutubeTrendingMoviesAndShowsTrailersLinkHandlerFactory.INSTANCE;
170174

171175
try {
172176
list.addKioskEntry(
@@ -193,6 +197,15 @@ public KioskList getKioskList() throws ExtractionException {
193197
trendingGamingVideosLHF,
194198
YoutubeTrendingGamingVideosLinkHandlerFactory.KIOSK_ID
195199
);
200+
list.addKioskEntry(
201+
(streamingService, url, id) ->
202+
new YoutubeTrendingMoviesAndShowsTrailersExtractor(
203+
YoutubeService.this,
204+
trendingMoviesAndShowsLHF.fromUrl(url),
205+
id),
206+
trendingMoviesAndShowsLHF,
207+
YoutubeTrendingMoviesAndShowsTrailersLinkHandlerFactory.KIOSK_ID
208+
);
196209
list.addKioskEntry(
197210
(streamingService, url, id) -> new YoutubeTrendingExtractor(
198211
YoutubeService.this,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.schabi.newpipe.extractor.services.youtube.extractors.kiosk;
2+
3+
import org.schabi.newpipe.extractor.StreamingService;
4+
import org.schabi.newpipe.extractor.exceptions.ParsingException;
5+
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
6+
7+
import javax.annotation.Nonnull;
8+
9+
public class YoutubeTrendingMoviesAndShowsTrailersExtractor
10+
extends YoutubeChartsBaseKioskExtractor {
11+
12+
public YoutubeTrendingMoviesAndShowsTrailersExtractor(final StreamingService streamingService,
13+
final ListLinkHandler linkHandler,
14+
final String kioskId) {
15+
super(streamingService, linkHandler, kioskId, "TRENDING_MOVIES");
16+
}
17+
18+
@Nonnull
19+
@Override
20+
public String getName() throws ParsingException {
21+
// This is the official YouTube Charts name, even if shows' trailers are returned too
22+
return "Trending Movie Trailers";
23+
}
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package org.schabi.newpipe.extractor.services.youtube.linkHandler;
2+
3+
import org.schabi.newpipe.extractor.exceptions.ParsingException;
4+
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
5+
import org.schabi.newpipe.extractor.utils.Utils;
6+
7+
import java.net.MalformedURLException;
8+
import java.net.URL;
9+
import java.util.List;
10+
import java.util.Locale;
11+
12+
public final class YoutubeTrendingMoviesAndShowsTrailersLinkHandlerFactory
13+
extends ListLinkHandlerFactory {
14+
15+
public static final String KIOSK_ID = "trending_movies_and_shows";
16+
17+
public static final YoutubeTrendingMoviesAndShowsTrailersLinkHandlerFactory INSTANCE =
18+
new YoutubeTrendingMoviesAndShowsTrailersLinkHandlerFactory();
19+
20+
private static final String PATH = "/charts/TrendingTrailers";
21+
22+
private YoutubeTrendingMoviesAndShowsTrailersLinkHandlerFactory() {
23+
}
24+
25+
@Override
26+
public String getUrl(final String id,
27+
final List<String> contentFilter,
28+
final String sortFilter)
29+
throws ParsingException, UnsupportedOperationException {
30+
return "https://charts.youtube.com" + PATH;
31+
}
32+
33+
@Override
34+
public String getId(final String url) throws ParsingException, UnsupportedOperationException {
35+
return KIOSK_ID;
36+
}
37+
38+
@Override
39+
public boolean onAcceptUrl(final String url) throws ParsingException {
40+
final URL urlObj;
41+
try {
42+
urlObj = Utils.stringToURL(url);
43+
} catch (final MalformedURLException e) {
44+
return false;
45+
}
46+
47+
return Utils.isHTTP(urlObj)
48+
&& "charts.youtube.com".equals(urlObj.getHost().toLowerCase(Locale.ROOT))
49+
&& PATH.equals(urlObj.getPath());
50+
}
51+
}

0 commit comments

Comments
 (0)