diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeChannelHelper.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeChannelHelper.java index 31cfa2856..dd338900c 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeChannelHelper.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeChannelHelper.java @@ -320,4 +320,35 @@ public final class YoutubeChannelHelper { return Optional.empty(); } } + + /** + * Check if a channel is verified by using its header. + * + *

+ * The header is mandatory, so the verified status of age-restricted channels with a + * {@code channelAgeGateRenderer} cannot be checked. + *

+ * + * @param channelHeader the {@link ChannelHeader} of a non age-restricted channel + * @return whether the channel is verified + */ + public static boolean isChannelVerified(@Nonnull final ChannelHeader channelHeader) { + // carouselHeaderRenderer and pageHeaderRenderer does not contain any verification + // badges + // Since they are only shown on YouTube internal channels or on channels of large + // organizations broadcasting live events, we can assume the channel to be verified + if (channelHeader.headerType == ChannelHeader.HeaderType.CAROUSEL + || channelHeader.headerType == ChannelHeader.HeaderType.PAGE) { + return true; + } + + if (channelHeader.headerType == ChannelHeader.HeaderType.INTERACTIVE_TABBED) { + // If the header has an autoGenerated property, it should mean that the channel has + // been auto generated by YouTube: we can assume the channel to be verified in this + // case + return channelHeader.json.has("autoGenerated"); + } + + return YoutubeParsingHelper.isVerified(channelHeader.json.getArray("badges")); + } } diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeChannelExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeChannelExtractor.java index fb2425410..0dd79e531 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeChannelExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeChannelExtractor.java @@ -350,31 +350,12 @@ public class YoutubeChannelExtractor extends ChannelExtractor { public boolean isVerified() throws ParsingException { assertPageFetched(); if (channelAgeGateRenderer != null) { + // Verified status is unknown with channelAgeGateRenderers, return false in this case return false; } - if (channelHeader.isPresent()) { - final ChannelHeader header = channelHeader.get(); - - // carouselHeaderRenderer and pageHeaderRenderer does not contain any verification - // badges - // Since they are only shown on YouTube internal channels or on channels of large - // organizations broadcasting live events, we can assume the channel to be verified - if (header.headerType == HeaderType.CAROUSEL || header.headerType == HeaderType.PAGE) { - return true; - } - - if (header.headerType == HeaderType.INTERACTIVE_TABBED) { - // If the header has an autoGenerated property, it should mean that the channel has - // been auto generated by YouTube: we can assume the channel to be verified in this - // case - return header.json.has("autoGenerated"); - } - - return YoutubeParsingHelper.isVerified(header.json.getArray("badges")); - } - - return false; + return YoutubeChannelHelper.isChannelVerified(channelHeader.orElseThrow(() -> + new ParsingException("Could not get verified status"))); } @Nonnull