[YouTube] Add support for showRenderers in search results
This commit is contained in:
parent
37178bd007
commit
9d5201f40e
|
@ -238,9 +238,14 @@ public class YoutubeSearchExtractor extends SearchExtractor {
|
||||||
} else if (extractChannelResults && item.has("channelRenderer")) {
|
} else if (extractChannelResults && item.has("channelRenderer")) {
|
||||||
collector.commit(new YoutubeChannelInfoItemExtractor(
|
collector.commit(new YoutubeChannelInfoItemExtractor(
|
||||||
item.getObject("channelRenderer")));
|
item.getObject("channelRenderer")));
|
||||||
} else if (extractPlaylistResults && item.has("playlistRenderer")) {
|
} else if (extractPlaylistResults) {
|
||||||
collector.commit(new YoutubePlaylistInfoItemExtractor(
|
if (item.has("playlistRenderer")) {
|
||||||
item.getObject("playlistRenderer")));
|
collector.commit(new YoutubePlaylistInfoItemExtractor(
|
||||||
|
item.getObject("playlistRenderer")));
|
||||||
|
} else if (item.has("showRenderer")) {
|
||||||
|
collector.commit(new YoutubeShowRendererInfoItemExtractor(
|
||||||
|
item.getObject("showRenderer")));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
package org.schabi.newpipe.extractor.services.youtube.extractors;
|
||||||
|
|
||||||
|
import com.grack.nanojson.JsonObject;
|
||||||
|
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObject;
|
||||||
|
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getUrlFromObject;
|
||||||
|
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A {@link YoutubeBaseShowInfoItemExtractor} implementation for {@code showRenderer}s.
|
||||||
|
*/
|
||||||
|
class YoutubeShowRendererInfoItemExtractor extends YoutubeBaseShowInfoItemExtractor {
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
private final JsonObject shortBylineText;
|
||||||
|
@Nonnull
|
||||||
|
private final JsonObject longBylineText;
|
||||||
|
|
||||||
|
YoutubeShowRendererInfoItemExtractor(@Nonnull final JsonObject showRenderer) {
|
||||||
|
super(showRenderer);
|
||||||
|
this.shortBylineText = showRenderer.getObject("shortBylineText");
|
||||||
|
this.longBylineText = showRenderer.getObject("longBylineText");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUploaderName() throws ParsingException {
|
||||||
|
String name = getTextFromObject(longBylineText);
|
||||||
|
if (isNullOrEmpty(name)) {
|
||||||
|
name = getTextFromObject(shortBylineText);
|
||||||
|
if (isNullOrEmpty(name)) {
|
||||||
|
throw new ParsingException("Could not get uploader name");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUploaderUrl() throws ParsingException {
|
||||||
|
String uploaderUrl = getUrlFromObject(longBylineText);
|
||||||
|
if (uploaderUrl == null) {
|
||||||
|
uploaderUrl = getUrlFromObject(shortBylineText);
|
||||||
|
if (uploaderUrl == null) {
|
||||||
|
throw new ParsingException("Could not get uploader URL");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return uploaderUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isUploaderVerified() throws ParsingException {
|
||||||
|
// We do not have this information in showRenderers
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue