Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -519,22 +519,23 @@ public static String getChannelName(@Nullable final ChannelHeader channelHeader,
}

return Optional.ofNullable(channelHeader)
.map(header -> {
.flatMap(header -> {
final JsonObject channelJson = header.json;
switch (header.headerType) {
case PAGE:
return channelJson.getObject(CONTENT)
final String pageTitle = channelJson.getObject(CONTENT)
.getObject(PAGE_HEADER_VIEW_MODEL)
.getObject(TITLE)
.getObject("dynamicTextViewModel")
.getObject("text")
.getString(CONTENT, channelJson.getString("pageTitle"));
return Optional.ofNullable(pageTitle);
case CAROUSEL:
case INTERACTIVE_TABBED:
return getTextFromObject(channelJson.getObject(TITLE));
case C4_TABBED:
default:
return channelJson.getString(TITLE);
return Optional.ofNullable(channelJson.getString(TITLE));
}
})
// The channel name from a microformatDataRenderer may be different from the one
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,8 @@ private static void addAllCommandRuns(
return;
}

final String url = getUrlFromNavigationEndpoint(navigationEndpoint);
final String url = getUrlFromNavigationEndpoint(navigationEndpoint)
.orElse(null);
if (url == null) {
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getTextFromObjectOrThrow;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.getUrlFromNavigationEndpoint;
import static org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper.isGoogleURL;
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
import static org.schabi.newpipe.extractor.utils.Utils.replaceHttpWithHttps;

import com.grack.nanojson.JsonArray;
Expand Down Expand Up @@ -67,29 +66,24 @@ public static List<MetaInfo> getMetaInfo(@Nonnull final JsonArray contents)
private static MetaInfo getInfoPanelContent(@Nonnull final JsonObject infoPanelContentRenderer)
throws ParsingException {
final MetaInfo metaInfo = new MetaInfo();
final StringBuilder sb = new StringBuilder();
for (final Object paragraph : infoPanelContentRenderer.getArray("paragraphs")) {
if (sb.length() != 0) {
sb.append("<br>");
}
sb.append(getTextFromObject((JsonObject) paragraph));
}
metaInfo.setContent(new Description(sb.toString(), Description.HTML));
final String description = infoPanelContentRenderer.getArray("paragraphs")
.streamAsJsonObjects()
.map(paragraph -> getTextFromObject(paragraph).orElse(""))
.collect(Collectors.joining("<br>"));
metaInfo.setContent(new Description(description, Description.HTML));
if (infoPanelContentRenderer.has("sourceEndpoint")) {
final String metaInfoLinkUrl = getUrlFromNavigationEndpoint(
infoPanelContentRenderer.getObject("sourceEndpoint"));
infoPanelContentRenderer.getObject("sourceEndpoint"))
.orElse("");
try {
metaInfo.addUrl(new URL(Objects.requireNonNull(extractCachedUrlIfNeeded(
metaInfoLinkUrl))));
} catch (final NullPointerException | MalformedURLException e) {
throw new ParsingException("Could not get metadata info URL", e);
}

final String metaInfoLinkText = getTextFromObject(
infoPanelContentRenderer.getObject("inlineSource"));
if (isNullOrEmpty(metaInfoLinkText)) {
throw new ParsingException("Could not get metadata info link text.");
}
final var source = infoPanelContentRenderer.getObject("inlineSource");
final String metaInfoLinkText = getTextFromObjectOrThrow(source, "metadata info link");
metaInfo.addUrlText(metaInfoLinkText);
}

Expand All @@ -101,13 +95,10 @@ private static MetaInfo getClarificationRenderer(
@Nonnull final JsonObject clarificationRenderer) throws ParsingException {
final MetaInfo metaInfo = new MetaInfo();

final String title = getTextFromObject(clarificationRenderer
.getObject("contentTitle"));
final String text = getTextFromObject(clarificationRenderer
.getObject("text"));
if (title == null || text == null) {
throw new ParsingException("Could not extract clarification renderer content");
}
final String title = getTextFromObjectOrThrow(
clarificationRenderer.getObject("contentTitle"), "clarification renderer");
final String text = getTextFromObjectOrThrow(
clarificationRenderer.getObject("text"), "clarification renderer");
metaInfo.setTitle(title);
metaInfo.setContent(new Description(text, Description.PLAIN_TEXT));

Expand All @@ -116,31 +107,28 @@ private static MetaInfo getClarificationRenderer(
.getObject("buttonRenderer");
try {
final String url = getUrlFromNavigationEndpoint(actionButton
.getObject("command"));
.getObject("command")).orElse("");
metaInfo.addUrl(new URL(Objects.requireNonNull(extractCachedUrlIfNeeded(url))));
} catch (final NullPointerException | MalformedURLException e) {
throw new ParsingException("Could not get metadata info URL", e);
}

final String metaInfoLinkText = getTextFromObject(
actionButton.getObject("text"));
if (isNullOrEmpty(metaInfoLinkText)) {
throw new ParsingException("Could not get metadata info link text.");
}
metaInfo.addUrlText(metaInfoLinkText);
final String linkText = getTextFromObjectOrThrow(actionButton.getObject("text"),
"metadata info link");
metaInfo.addUrlText(linkText);
}

if (clarificationRenderer.has("secondaryEndpoint") && clarificationRenderer
.has("secondarySource")) {
final String url = getUrlFromNavigationEndpoint(clarificationRenderer
.getObject("secondaryEndpoint"));
.getObject("secondaryEndpoint")).orElse(null);
// Ignore Google URLs, because those point to a Google search about "Covid-19"
if (url != null && !isGoogleURL(url)) {
try {
metaInfo.addUrl(new URL(url));
final String description = getTextFromObject(clarificationRenderer
.getObject("secondarySource"));
metaInfo.addUrlText(description == null ? url : description);
final String urlText = getTextFromObject(clarificationRenderer
.getObject("secondarySource")).orElse(url);
metaInfo.addUrlText(urlText);
} catch (final MalformedURLException e) {
throw new ParsingException("Could not get metadata info secondary URL", e);
}
Expand Down Expand Up @@ -201,10 +189,9 @@ private static void getEmergencyOneboxRenderer(
metaInfo.addUrlText(urlText);

// usually the webpage of the association
final String url = getUrlFromNavigationEndpoint(r.getObject("navigationEndpoint"));
if (url == null) {
throw new ParsingException("Could not extract emergency renderer url");
}
final String url = getUrlFromNavigationEndpoint(r.getObject("navigationEndpoint"))
.orElseThrow(() ->
new ParsingException("Could not extract emergency renderer url"));

try {
metaInfo.addUrl(new URL(replaceHttpWithHttps(url)));
Expand Down
Loading
Loading