[YouTube] Simplify Optional chains in channel

This commit is contained in:
Stypox 2023-08-12 11:02:51 +02:00
parent 2f7bfd3e7f
commit 44b664af15
No known key found for this signature in database
GPG Key ID: 4BDF1B40A49FDD23
1 changed files with 34 additions and 33 deletions

View File

@ -161,21 +161,24 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
return metadataRendererTitle; return metadataRendererTitle;
} }
return channelHeader.flatMap(header -> { return channelHeader.map(header -> {
final JsonObject channelJson = header.json; final JsonObject channelJson = header.json;
switch (header.headerType) { switch (header.headerType) {
case PAGE: case PAGE:
return Optional.ofNullable(channelJson.getObject("content") return channelJson.getObject("content")
.getObject("pageHeaderViewModel") .getObject("pageHeaderViewModel")
.getObject("title") .getObject("title")
.getObject("dynamicTextViewModel") .getObject("dynamicTextViewModel")
.getObject("text") .getObject("text")
.getString("content", channelJson.getString("pageTitle"))); .getString("content", channelJson.getString("pageTitle"));
case CAROUSEL: case CAROUSEL:
case INTERACTIVE_TABBED: case INTERACTIVE_TABBED:
return Optional.ofNullable(getTextFromObject(channelJson.getObject("title"))); return getTextFromObject(channelJson.getObject("title"));
case C4_TABBED:
default: default:
return Optional.ofNullable(channelJson.getString("title")); return channelJson.getString("title");
} }
}) })
// The channel name from a microformatDataRenderer may be different from the one displayed, // The channel name from a microformatDataRenderer may be different from the one displayed,
@ -200,36 +203,34 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
} }
return channelHeader.map(header -> { return channelHeader.map(header -> {
final HeaderType headerType = header.headerType; switch (header.headerType) {
if (headerType == HeaderType.PAGE) { case PAGE:
return Optional.ofNullable(header.json.getObject("content") return header.json.getObject("content")
.getObject("pageHeaderViewModel") .getObject("pageHeaderViewModel")
.getObject("image") .getObject("image")
.getObject("contentPreviewImageViewModel") .getObject("contentPreviewImageViewModel")
.getObject("image") .getObject("image")
.getArray("sources") .getArray("sources")
.getObject(0) .getObject(0)
.getString("url")) .getString("url");
.map(YoutubeParsingHelper::fixThumbnailUrl)
.orElse(null);
}
if (headerType == HeaderType.INTERACTIVE_TABBED) { case INTERACTIVE_TABBED:
return Optional.ofNullable(header.json.getObject("boxArt") return header.json.getObject("boxArt")
.getArray("thumbnails") .getArray("thumbnails")
.getObject(0) .getObject(0)
.getString("url")) .getString("url");
.map(YoutubeParsingHelper::fixThumbnailUrl)
.orElse(null);
}
return Optional.ofNullable(header.json.getObject("avatar") case C4_TABBED:
.getArray("thumbnails") case CAROUSEL:
.getObject(0) default:
.getString("url")) return header.json.getObject("avatar")
.map(YoutubeParsingHelper::fixThumbnailUrl) .getArray("thumbnails")
.orElse(null); .getObject(0)
}).orElseThrow(() -> new ParsingException("Could not get avatar URL")); .getString("url");
}
})
.map(YoutubeParsingHelper::fixThumbnailUrl)
.orElseThrow(() -> new ParsingException("Could not get avatar URL"));
} }
@Override @Override