Skip to content

Commit 9d5201f

Browse files
committed
[YouTube] Add support for showRenderers in search results
1 parent 37178bd commit 9d5201f

2 files changed

Lines changed: 65 additions & 3 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeSearchExtractor.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,9 +238,14 @@ private void collectStreamsFrom(final MultiInfoItemsCollector collector,
238238
} else if (extractChannelResults && item.has("channelRenderer")) {
239239
collector.commit(new YoutubeChannelInfoItemExtractor(
240240
item.getObject("channelRenderer")));
241-
} else if (extractPlaylistResults && item.has("playlistRenderer")) {
242-
collector.commit(new YoutubePlaylistInfoItemExtractor(
243-
item.getObject("playlistRenderer")));
241+
} else if (extractPlaylistResults) {
242+
if (item.has("playlistRenderer")) {
243+
collector.commit(new YoutubePlaylistInfoItemExtractor(
244+
item.getObject("playlistRenderer")));
245+
} else if (item.has("showRenderer")) {
246+
collector.commit(new YoutubeShowRendererInfoItemExtractor(
247+
item.getObject("showRenderer")));
248+
}
244249
}
245250
}
246251
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package org.schabi.newpipe.extractor.services.youtube.extractors;
2+
3+
import com.grack.nanojson.JsonObject;
4+
import org.schabi.newpipe.extractor.exceptions.ParsingException;
5+
6+
import javax.annotation.Nonnull;
7+
8+
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject;
9+
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getUrlFromObject;
10+
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
11+
12+
/**
13+
* A {@link YoutubeBaseShowInfoItemExtractor} implementation for {@code showRenderer}s.
14+
*/
15+
class YoutubeShowRendererInfoItemExtractor extends YoutubeBaseShowInfoItemExtractor {
16+
17+
@Nonnull
18+
private final JsonObject shortBylineText;
19+
@Nonnull
20+
private final JsonObject longBylineText;
21+
22+
YoutubeShowRendererInfoItemExtractor(@Nonnull final JsonObject showRenderer) {
23+
super(showRenderer);
24+
this.shortBylineText = showRenderer.getObject("shortBylineText");
25+
this.longBylineText = showRenderer.getObject("longBylineText");
26+
}
27+
28+
@Override
29+
public String getUploaderName() throws ParsingException {
30+
String name = getTextFromObject(longBylineText);
31+
if (isNullOrEmpty(name)) {
32+
name = getTextFromObject(shortBylineText);
33+
if (isNullOrEmpty(name)) {
34+
throw new ParsingException("Could not get uploader name");
35+
}
36+
}
37+
return name;
38+
}
39+
40+
@Override
41+
public String getUploaderUrl() throws ParsingException {
42+
String uploaderUrl = getUrlFromObject(longBylineText);
43+
if (uploaderUrl == null) {
44+
uploaderUrl = getUrlFromObject(shortBylineText);
45+
if (uploaderUrl == null) {
46+
throw new ParsingException("Could not get uploader URL");
47+
}
48+
}
49+
return uploaderUrl;
50+
}
51+
52+
@Override
53+
public boolean isUploaderVerified() throws ParsingException {
54+
// We do not have this information in showRenderers
55+
return false;
56+
}
57+
}

0 commit comments

Comments
 (0)