[YouTube] Move channel header's verified status code to YoutubeChannelHelper

Also throw an exception when we cannot get the verified status of a channel in
YoutubeChannelExtractor due to a missing channelHeader, if the channel has no
channelAgeGateRenderer.
This commit is contained in:
AudricV 2024-03-24 00:07:50 +01:00
parent 9fa8d4c0b4
commit 5879190ada
No known key found for this signature in database
GPG Key ID: DA92EC7905614198
2 changed files with 34 additions and 22 deletions

View File

@ -320,4 +320,35 @@ public final class YoutubeChannelHelper {
return Optional.empty(); return Optional.empty();
} }
} }
/**
* Check if a channel is verified by using its header.
*
* <p>
* The header is mandatory, so the verified status of age-restricted channels with a
* {@code channelAgeGateRenderer} cannot be checked.
* </p>
*
* @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"));
}
} }

View File

@ -350,31 +350,12 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
public boolean isVerified() throws ParsingException { public boolean isVerified() throws ParsingException {
assertPageFetched(); assertPageFetched();
if (channelAgeGateRenderer != null) { if (channelAgeGateRenderer != null) {
// Verified status is unknown with channelAgeGateRenderers, return false in this case
return false; return false;
} }
if (channelHeader.isPresent()) { return YoutubeChannelHelper.isChannelVerified(channelHeader.orElseThrow(() ->
final ChannelHeader header = channelHeader.get(); new ParsingException("Could not get verified status")));
// 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;
} }
@Nonnull @Nonnull