From f4b0a7d97e6d06e3e93f974fbaeaccbeb627e09c Mon Sep 17 00:00:00 2001 From: AudricV <74829229+AudricV@users.noreply.github.com> Date: Sat, 26 Jul 2025 23:07:59 +0200 Subject: [PATCH] [YouTube] Add trending gaming videos extractor from Gaming system channel --- .../services/youtube/YoutubeService.java | 12 +++++ .../YoutubeTrendingGamingVideosExtractor.java | 14 ++++++ ...rendingGamingVideosLinkHandlerFactory.java | 49 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeTrendingGamingVideosExtractor.java create mode 100644 extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/linkHandler/YoutubeTrendingGamingVideosLinkHandlerFactory.java 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 9bab849da..3cb6847de 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.YoutubeTrendingGamingVideosExtractor; 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; @@ -45,6 +46,7 @@ import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeLiveLink import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubePlaylistLinkHandlerFactory; 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.YoutubeTrendingGamingVideosLinkHandlerFactory; 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; @@ -163,6 +165,8 @@ public class YoutubeService extends StreamingService { YoutubeLiveLinkHandlerFactory.INSTANCE; final ListLinkHandlerFactory trendingPodcastsEpisodesLHF = YoutubeTrendingPodcastsEpisodesLinkHandlerFactory.INSTANCE; + final ListLinkHandlerFactory trendingGamingVideosLHF = + YoutubeTrendingGamingVideosLinkHandlerFactory.INSTANCE; try { list.addKioskEntry( @@ -181,6 +185,14 @@ public class YoutubeService extends StreamingService { trendingPodcastsEpisodesLHF, YoutubeTrendingPodcastsEpisodesLinkHandlerFactory.KIOSK_ID ); + list.addKioskEntry( + (streamingService, url, id) -> new YoutubeTrendingGamingVideosExtractor( + YoutubeService.this, + trendingGamingVideosLHF.fromUrl(url), + id), + trendingGamingVideosLHF, + YoutubeTrendingGamingVideosLinkHandlerFactory.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/YoutubeTrendingGamingVideosExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeTrendingGamingVideosExtractor.java new file mode 100644 index 000000000..4525646f2 --- /dev/null +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/kiosk/YoutubeTrendingGamingVideosExtractor.java @@ -0,0 +1,14 @@ +package org.schabi.newpipe.extractor.services.youtube.extractors.kiosk; + +import org.schabi.newpipe.extractor.StreamingService; +import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler; + +public class YoutubeTrendingGamingVideosExtractor extends YoutubeDesktopBaseKioskExtractor { + + public YoutubeTrendingGamingVideosExtractor(final StreamingService streamingService, + final ListLinkHandler linkHandler, + final String kioskId) { + super(streamingService, linkHandler, kioskId, "UCOpNcN46UbXVtpKMrmU4Abg", + "Egh0cmVuZGluZw%3D%3D"); + } +} diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/linkHandler/YoutubeTrendingGamingVideosLinkHandlerFactory.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/linkHandler/YoutubeTrendingGamingVideosLinkHandlerFactory.java new file mode 100644 index 000000000..1325287aa --- /dev/null +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/linkHandler/YoutubeTrendingGamingVideosLinkHandlerFactory.java @@ -0,0 +1,49 @@ +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 YoutubeTrendingGamingVideosLinkHandlerFactory extends ListLinkHandlerFactory { + + public static final String KIOSK_ID = "trending_gaming"; + + public static final YoutubeTrendingGamingVideosLinkHandlerFactory INSTANCE = + new YoutubeTrendingGamingVideosLinkHandlerFactory(); + + private YoutubeTrendingGamingVideosLinkHandlerFactory() { + } + + @Override + public String getUrl(final String id, + final List contentFilters, + final String sortFilter) + throws ParsingException, UnsupportedOperationException { + return "https://www.youtube.com/gaming/trending"; + } + + @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)) + && "/gaming/trending".equals(urlObj.getPath()); + } +}