Skip to content

Commit d38d647

Browse files
committed
[YouTube] Add running lives extractor from Live system channel
1 parent 3d0e302 commit d38d647

3 files changed

Lines changed: 82 additions & 4 deletions

File tree

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

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,11 @@
3636
import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeSubscriptionExtractor;
3737
import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeSuggestionExtractor;
3838
import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeTrendingExtractor;
39+
import org.schabi.newpipe.extractor.services.youtube.extractors.kiosk.YoutubeLiveExtractor;
3940
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeChannelLinkHandlerFactory;
4041
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeChannelTabLinkHandlerFactory;
4142
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeCommentsLinkHandlerFactory;
43+
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeLiveLinkHandlerFactory;
4244
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubePlaylistLinkHandlerFactory;
4345
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory;
4446
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeStreamLinkHandlerFactory;
@@ -154,17 +156,26 @@ public SuggestionExtractor getSuggestionExtractor() {
154156
@Override
155157
public KioskList getKioskList() throws ExtractionException {
156158
final KioskList list = new KioskList(this);
157-
final ListLinkHandlerFactory h = YoutubeTrendingLinkHandlerFactory.getInstance();
159+
final ListLinkHandlerFactory trendingLHF = YoutubeTrendingLinkHandlerFactory.getInstance();
160+
final ListLinkHandlerFactory runningLivesLHF =
161+
YoutubeLiveLinkHandlerFactory.INSTANCE;
158162

159-
// add kiosks here e.g.:
160163
try {
164+
list.addKioskEntry(
165+
(streamingService, url, id) -> new YoutubeLiveExtractor(
166+
YoutubeService.this,
167+
runningLivesLHF.fromUrl(url),
168+
id),
169+
runningLivesLHF,
170+
YoutubeLiveLinkHandlerFactory.KIOSK_ID
171+
);
161172
list.addKioskEntry(
162173
(streamingService, url, id) -> new YoutubeTrendingExtractor(
163174
YoutubeService.this,
164-
h.fromUrl(url),
175+
trendingLHF.fromUrl(url),
165176
id
166177
),
167-
h,
178+
trendingLHF,
168179
YoutubeTrendingExtractor.KIOSK_ID
169180
);
170181
list.setDefaultKiosk(YoutubeTrendingExtractor.KIOSK_ID);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
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 YoutubeLiveExtractor extends YoutubeDesktopBaseKioskExtractor {
7+
8+
public YoutubeLiveExtractor(final StreamingService streamingService,
9+
final ListLinkHandler linkHandler,
10+
final String kioskId) {
11+
super(streamingService, linkHandler, kioskId, "UC4R8DWoMoI7CAwX8_LjQHig",
12+
"EgdsaXZldGFikgEDCKEK");
13+
}
14+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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 YoutubeLiveLinkHandlerFactory extends ListLinkHandlerFactory {
15+
16+
public static final String KIOSK_ID = "live";
17+
18+
public static final YoutubeLiveLinkHandlerFactory INSTANCE =
19+
new YoutubeLiveLinkHandlerFactory();
20+
21+
private static final String LIVE_CHANNEL_PATH = "/channel/UC4R8DWoMoI7CAwX8_LjQHig/livetab";
22+
private static final String LIVE_CHANNEL_TAB_PARAMS = "ss=CKEK";
23+
24+
private YoutubeLiveLinkHandlerFactory() {
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" + LIVE_CHANNEL_PATH + "?" + LIVE_CHANNEL_TAB_PARAMS;
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+
&& LIVE_CHANNEL_PATH.equals(urlObj.getPath())
51+
&& LIVE_CHANNEL_TAB_PARAMS.equals(urlObj.getQuery());
52+
}
53+
}

0 commit comments

Comments
 (0)