Class YoutubeParsingHelper
- java.lang.Object
-
- org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper
-
public final class YoutubeParsingHelper extends java.lang.Object
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringCONTENT_CHECK_OKA parameter sent by official clients namedcontentCheckOk.static java.lang.StringCPNA parameter sent by official clients namedcontentPlaybackNonce.static java.lang.StringDISABLE_PRETTY_PRINT_PARAMETERA parameter to disable pretty-printed response of InnerTube requests, to reduce response sizes.static java.lang.StringRACY_CHECK_OKA parameter which may be sent by official clients namedracyCheckOk.static java.lang.StringVIDEO_IDstatic java.lang.StringYOUTUBEI_V1_GAPIS_URLThe base URL of requests of non-web clients to the InnerTube internal API.static java.lang.StringYOUTUBEI_V1_URLThe base URL of requests of theWEBclients to the InnerTube internal API.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static voiddefaultAlertsCheck(com.grack.nanojson.JsonObject initialData)Shared alert detection function, multiple endpoints return the error similarly structured.static AudioTrackTypeextractAudioTrackType(java.lang.String streamUrl)Extract the audio track type from a YouTube stream URL.static java.lang.StringextractCachedUrlIfNeeded(java.lang.String url)Sometimes, YouTube provides URLs which use Google's cache.static java.lang.StringextractCookieValue(java.lang.String cookieName, Response response)static PlaylistInfo.PlaylistTypeextractPlaylistTypeFromPlaylistId(java.lang.String playlistId)static PlaylistInfo.PlaylistTypeextractPlaylistTypeFromPlaylistUrl(java.lang.String playlistUrl)static java.lang.StringextractVideoIdFromMixId(java.lang.String playlistId)static java.lang.StringfixThumbnailUrl(java.lang.String thumbnailUrl)static java.lang.StringgenerateConsentCookie()static java.lang.StringgenerateContentPlaybackNonce()Generate a content playback nonce (also calledcpn), sent by YouTube clients in playback requests (and also for some clients, in the player request body).static java.lang.StringgenerateTParameter()Try to generate atparameter, sent by mobile clients as a query of the player request.static java.lang.StringgetAndroidUserAgent(Localization localization)Get the user-agent string used as the user-agent for InnerTube requests with the Android client.static java.util.Map<java.lang.String,java.util.List<java.lang.String>>getClientHeaders(java.lang.String name, java.lang.String version)Returns an unmodifiableMapcontaining theX-YouTube-Client-NameandX-YouTube-Client-Versionheaders.static java.util.Map<java.lang.String,java.util.List<java.lang.String>>getClientInfoHeaders()Returns aMapcontaining theX-YouTube-Client-Name,X-YouTube-Client-Version,Origin, andRefererheaders.static java.lang.StringgetClientVersion()Get the client version used by YouTube website on InnerTube requests.static java.util.Map<java.lang.String,java.util.List<java.lang.String>>getCookieHeader()Create a map with the required cookie header.static java.lang.StringgetFeedUrlFrom(java.lang.String channelIdOrUser)static java.util.List<Image>getImagesFromThumbnailsArray(com.grack.nanojson.JsonArray thumbnails)Get images from a YouTubethumbnailsJsonArray.static java.lang.StringgetIosUserAgent(Localization localization)Get the user-agent string used as the user-agent for InnerTube requests with the iOS client.static com.grack.nanojson.JsonObjectgetJsonPostResponse(java.lang.String endpoint, byte[] body, Localization localization)static com.grack.nanojson.JsonObjectgetJsonPostResponse(java.lang.String endpoint, java.util.List<java.lang.String> queryParameters, byte[] body, Localization localization)static java.util.Map<java.lang.String,java.util.List<java.lang.String>>getOriginReferrerHeaders(java.lang.String url)Returns an unmodifiableMapcontaining theOriginandRefererheaders set to the given URL.static java.lang.StringgetTextAtKey(com.grack.nanojson.JsonObject jsonObject, java.lang.String theKey)static java.lang.StringgetTextFromObject(com.grack.nanojson.JsonObject textObject)static java.lang.StringgetTextFromObject(com.grack.nanojson.JsonObject textObject, boolean html)Get the text from a JSON object that has either asimpleTextor arunsarray.static java.lang.StringgetTextFromObjectOrThrow(com.grack.nanojson.JsonObject textObject, java.lang.String error)static java.util.List<Image>getThumbnailsFromInfoItem(com.grack.nanojson.JsonObject infoItem)Get thumbnails from aJsonObjectrepresenting a YouTubeInfoItem.static java.lang.StringgetTvHtml5UserAgent()Get the user-agent string used as the user-agent for InnerTube requests with the HTML5 TV client.static java.lang.StringgetUrlFromNavigationEndpoint(com.grack.nanojson.JsonObject navigationEndpoint)static java.lang.StringgetUrlFromObject(com.grack.nanojson.JsonObject textObject)static java.lang.StringgetValidJsonResponseBody(Response response)static java.lang.StringgetVisitorDataFromInnertube(InnertubeClientRequestInfo innertubeClientRequestInfo, Localization localization, ContentCountry contentCountry, java.util.Map<java.lang.String,java.util.List<java.lang.String>> httpHeaders, java.lang.String innertubeDomainAndVersionEndpoint, java.lang.String embedUrl, boolean useGuideEndpoint)static java.util.Map<java.lang.String,java.util.List<java.lang.String>>getYouTubeHeaders()Returns aMapcontaining the required YouTube headers, including theCONSENTcookie to prevent redirects toconsent.youtube.comstatic java.lang.StringgetYoutubeMusicClientVersion()static java.util.Map<java.lang.String,java.util.List<java.lang.String>>getYoutubeMusicHeaders()Returns aMapcontaining the required YouTube Music headers.static booleanhasArtistOrVerifiedIconBadgeAttachment(com.grack.nanojson.JsonArray attachmentRuns)static booleanisAndroidStreamingUrl(java.lang.String url)Check if the streaming URL is a URL from the YouTubeANDROIDclient.static booleanisConsentAccepted()Get the value of the consent's acceptance.static booleanisGoogleURL(java.lang.String url)static booleanisHardcodedClientVersionValid()static booleanisHardcodedYoutubeMusicClientVersionValid()static booleanisHooktubeURL(java.net.URL url)static booleanisInvidiousURL(java.net.URL url)static booleanisIosStreamingUrl(java.lang.String url)Check if the streaming URL is a URL from the YouTubeIOSclient.static booleanisTvHtml5StreamingUrl(java.lang.String url)Check if the streaming URL is a URL from the YouTubeTVHTML5client.static booleanisVerified(com.grack.nanojson.JsonArray badges)static booleanisWebEmbeddedPlayerStreamingUrl(java.lang.String url)Check if the streaming URL is from the YouTubeWEB_EMBEDDED_PLAYERclient.static booleanisWebStreamingUrl(java.lang.String url)Check if the streaming URL is from the YouTubeWEBclient.static booleanisY2ubeURL(java.net.URL url)static booleanisYoutubeGenreMixId(java.lang.String playlistId)Checks if the given playlist id is a YouTube Genre Mix (auto-generated playlist) Ids from a YouTube Genre Mix start with "RDGMEM"static booleanisYoutubeMixId(java.lang.String playlistId)Checks if the given playlist id is a YouTube Mix (auto-generated playlist) Ids from a YouTube Mix start with "RD"static booleanisYoutubeMusicMixId(java.lang.String playlistId)Checks if the given playlist id is a YouTube Music Mix (auto-generated playlist) Ids from a YouTube Music Mix start with "RDAMVM" or "RDCLAK"static booleanisYoutubeMyMixId(java.lang.String playlistId)Checks if the given playlist id is a YouTube My Mix (auto-generated playlist) Ids from a YouTube My Mix start with "RDMM"static booleanisYoutubeServiceURL(java.net.URL url)static booleanisYoutubeURL(java.net.URL url)static java.time.OffsetDateTimeparseDateFrom(java.lang.String textualUploadDate)static intparseDurationString(java.lang.String input)Parses the duration string of the video expecting ":" or "." as separatorsstatic com.grack.nanojson.JsonBuilder<com.grack.nanojson.JsonObject>prepareDesktopJsonBuilder(Localization localization, ContentCountry contentCountry)static com.grack.nanojson.JsonBuilder<com.grack.nanojson.JsonObject>prepareJsonBuilder(Localization localization, ContentCountry contentCountry, InnertubeClientRequestInfo innertubeClientRequestInfo, java.lang.String embedUrl)static voidresetClientVersion()Only used in tests.static voidsetConsentAccepted(boolean accepted)Determines how the consent cookie that is required for YouTube,SOCS, will be generated.static voidsetNumberGenerator(java.util.Random random)Only used in tests.
-
-
-
Field Detail
-
YOUTUBEI_V1_URL
public static final java.lang.String YOUTUBEI_V1_URL
The base URL of requests of theWEBclients to the InnerTube internal API.- See Also:
- Constant Field Values
-
YOUTUBEI_V1_GAPIS_URL
public static final java.lang.String YOUTUBEI_V1_GAPIS_URL
The base URL of requests of non-web clients to the InnerTube internal API.- See Also:
- Constant Field Values
-
DISABLE_PRETTY_PRINT_PARAMETER
public static final java.lang.String DISABLE_PRETTY_PRINT_PARAMETER
A parameter to disable pretty-printed response of InnerTube requests, to reduce response sizes.Sent in query parameters of the requests.
- See Also:
- Constant Field Values
-
CPN
public static final java.lang.String CPN
A parameter sent by official clients namedcontentPlaybackNonce.It is sent by official clients on videoplayback requests and InnerTube player requests in most cases.
It is composed of 16 characters which are generated from
this alphabet, with the use of strong random values.
-
VIDEO_ID
public static final java.lang.String VIDEO_ID
- See Also:
- Constant Field Values
-
CONTENT_CHECK_OK
public static final java.lang.String CONTENT_CHECK_OK
A parameter sent by official clients namedcontentCheckOk.Setting it to
trueallows us to get streaming data on videos with a warning about what the sensible content they contain.- See Also:
- Constant Field Values
-
RACY_CHECK_OK
public static final java.lang.String RACY_CHECK_OK
A parameter which may be sent by official clients namedracyCheckOk.What this parameter does is not really known, but it seems to be linked to sensitive contents such as age-restricted content.
- See Also:
- Constant Field Values
-
-
Method Detail
-
isGoogleURL
public static boolean isGoogleURL(java.lang.String url)
-
isYoutubeURL
public static boolean isYoutubeURL(@Nonnull java.net.URL url)
-
isYoutubeServiceURL
public static boolean isYoutubeServiceURL(@Nonnull java.net.URL url)
-
isHooktubeURL
public static boolean isHooktubeURL(@Nonnull java.net.URL url)
-
isInvidiousURL
public static boolean isInvidiousURL(@Nonnull java.net.URL url)
-
isY2ubeURL
public static boolean isY2ubeURL(@Nonnull java.net.URL url)
-
parseDurationString
public static int parseDurationString(@Nonnull java.lang.String input) throws ParsingException, java.lang.NumberFormatExceptionParses the duration string of the video expecting ":" or "." as separators- Returns:
- the duration in seconds
- Throws:
ParsingException- when more than 3 separators are foundjava.lang.NumberFormatException
-
getFeedUrlFrom
@Nonnull public static java.lang.String getFeedUrlFrom(@Nonnull java.lang.String channelIdOrUser)
-
parseDateFrom
public static java.time.OffsetDateTime parseDateFrom(java.lang.String textualUploadDate) throws ParsingException- Throws:
ParsingException
-
isYoutubeMixId
public static boolean isYoutubeMixId(@Nonnull java.lang.String playlistId)Checks if the given playlist id is a YouTube Mix (auto-generated playlist) Ids from a YouTube Mix start with "RD"- Parameters:
playlistId- the playlist id- Returns:
- Whether given id belongs to a YouTube Mix
-
isYoutubeMyMixId
public static boolean isYoutubeMyMixId(@Nonnull java.lang.String playlistId)Checks if the given playlist id is a YouTube My Mix (auto-generated playlist) Ids from a YouTube My Mix start with "RDMM"- Parameters:
playlistId- the playlist id- Returns:
- Whether given id belongs to a YouTube My Mix
-
isYoutubeMusicMixId
public static boolean isYoutubeMusicMixId(@Nonnull java.lang.String playlistId)Checks if the given playlist id is a YouTube Music Mix (auto-generated playlist) Ids from a YouTube Music Mix start with "RDAMVM" or "RDCLAK"- Parameters:
playlistId- the playlist id- Returns:
- Whether given id belongs to a YouTube Music Mix
-
isYoutubeGenreMixId
public static boolean isYoutubeGenreMixId(@Nonnull java.lang.String playlistId)Checks if the given playlist id is a YouTube Genre Mix (auto-generated playlist) Ids from a YouTube Genre Mix start with "RDGMEM"- Returns:
- Whether given id belongs to a YouTube Genre Mix
-
extractVideoIdFromMixId
@Nonnull public static java.lang.String extractVideoIdFromMixId(java.lang.String playlistId) throws ParsingException- Parameters:
playlistId- the playlist id to parse- Returns:
- the
PlaylistInfo.PlaylistTypeextracted from the playlistId (mix playlist types included) - Throws:
ParsingException- if the playlistId is null or empty, if the playlistId is not a mix, if it is a mix but it's not based on a specific stream (this is the case for channel or genre mixes)
-
extractPlaylistTypeFromPlaylistId
@Nonnull public static PlaylistInfo.PlaylistType extractPlaylistTypeFromPlaylistId(java.lang.String playlistId) throws ParsingException
- Parameters:
playlistId- the playlist id to parse- Returns:
- the
PlaylistInfo.PlaylistTypeextracted from the playlistId (mix playlist types included) - Throws:
ParsingException- if the playlistId is null or empty
-
extractPlaylistTypeFromPlaylistUrl
public static PlaylistInfo.PlaylistType extractPlaylistTypeFromPlaylistUrl(java.lang.String playlistUrl) throws ParsingException
- Parameters:
playlistUrl- the playlist url to parse- Returns:
- the
PlaylistInfo.PlaylistTypeextracted from the playlistUrl's list param (mix playlist types included) - Throws:
ParsingException- if the playlistUrl is malformed, if has no list param or if the list param is empty
-
isHardcodedClientVersionValid
public static boolean isHardcodedClientVersionValid() throws java.io.IOException, ExtractionException- Throws:
java.io.IOExceptionExtractionException
-
getClientVersion
public static java.lang.String getClientVersion() throws java.io.IOException, ExtractionExceptionGet the client version used by YouTube website on InnerTube requests.- Throws:
java.io.IOExceptionExtractionException
-
resetClientVersion
public static void resetClientVersion()
Only used in tests.
Quick-and-dirty solution to reset global state in between test classes.
This is needed for the mocks because in order to reach that state a network request has to be made. If the global state is not reset and the RecordingDownloader is used, then only the first test class has that request recorded. Meaning running the other tests with mocks will fail, because the mock is missing.
-
setNumberGenerator
public static void setNumberGenerator(java.util.Random random)
Only used in tests.
-
isHardcodedYoutubeMusicClientVersionValid
public static boolean isHardcodedYoutubeMusicClientVersionValid() throws java.io.IOException, ReCaptchaException- Throws:
java.io.IOExceptionReCaptchaException
-
getYoutubeMusicClientVersion
public static java.lang.String getYoutubeMusicClientVersion() throws java.io.IOException, ReCaptchaException, Parser.RegexException- Throws:
java.io.IOExceptionReCaptchaExceptionParser.RegexException
-
getUrlFromNavigationEndpoint
@Nullable public static java.lang.String getUrlFromNavigationEndpoint(@Nonnull com.grack.nanojson.JsonObject navigationEndpoint)
-
getTextFromObject
@Nullable public static java.lang.String getTextFromObject(com.grack.nanojson.JsonObject textObject, boolean html)Get the text from a JSON object that has either asimpleTextor arunsarray.- Parameters:
textObject- JSON object to get the text fromhtml- whether to return HTML, by parsing thenavigationEndpoint- Returns:
- text in the JSON object or
null
-
getTextFromObjectOrThrow
@Nonnull public static java.lang.String getTextFromObjectOrThrow(com.grack.nanojson.JsonObject textObject, java.lang.String error) throws ParsingException- Throws:
ParsingException
-
getTextFromObject
@Nullable public static java.lang.String getTextFromObject(com.grack.nanojson.JsonObject textObject)
-
getUrlFromObject
@Nullable public static java.lang.String getUrlFromObject(com.grack.nanojson.JsonObject textObject)
-
getTextAtKey
@Nullable public static java.lang.String getTextAtKey(@Nonnull com.grack.nanojson.JsonObject jsonObject, java.lang.String theKey)
-
fixThumbnailUrl
public static java.lang.String fixThumbnailUrl(@Nonnull java.lang.String thumbnailUrl)
-
getThumbnailsFromInfoItem
@Nonnull public static java.util.List<Image> getThumbnailsFromInfoItem(@Nonnull com.grack.nanojson.JsonObject infoItem) throws ParsingException
Get thumbnails from aJsonObjectrepresenting a YouTubeInfoItem.Thumbnails are got from the
thumbnailsJsonArrayinside thethumbnailJsonObjectof the YouTubeInfoItem, usinggetImagesFromThumbnailsArray(JsonArray).- Parameters:
infoItem- a YouTubeInfoItem- Returns:
- an unmodifiable list of
Images found in thethumbnailsJsonArray - Throws:
ParsingException- if an exception occurs whengetImagesFromThumbnailsArray(JsonArray)is executed
-
getImagesFromThumbnailsArray
@Nonnull public static java.util.List<Image> getImagesFromThumbnailsArray(@Nonnull com.grack.nanojson.JsonArray thumbnails)
Get images from a YouTubethumbnailsJsonArray.The properties of the
Images created will be set using the corresponding ones of thumbnail items.- Parameters:
thumbnails- a YouTubethumbnailsJsonArray- Returns:
- an unmodifiable list of
Images extracted from the givenJsonArray
-
getValidJsonResponseBody
@Nonnull public static java.lang.String getValidJsonResponseBody(@Nonnull Response response) throws ParsingException, java.net.MalformedURLException- Throws:
ParsingExceptionjava.net.MalformedURLException
-
getJsonPostResponse
public static com.grack.nanojson.JsonObject getJsonPostResponse(@Nonnull java.lang.String endpoint, byte[] body, @Nonnull Localization localization) throws java.io.IOException, ExtractionException- Throws:
java.io.IOExceptionExtractionException
-
getJsonPostResponse
public static com.grack.nanojson.JsonObject getJsonPostResponse(@Nonnull java.lang.String endpoint, @Nonnull java.util.List<java.lang.String> queryParameters, byte[] body, @Nonnull Localization localization) throws java.io.IOException, ExtractionException- Throws:
java.io.IOExceptionExtractionException
-
prepareDesktopJsonBuilder
@Nonnull public static com.grack.nanojson.JsonBuilder<com.grack.nanojson.JsonObject> prepareDesktopJsonBuilder(@Nonnull Localization localization, @Nonnull ContentCountry contentCountry) throws java.io.IOException, ExtractionException- Throws:
java.io.IOExceptionExtractionException
-
getAndroidUserAgent
@Nonnull public static java.lang.String getAndroidUserAgent(@Nullable Localization localization)Get the user-agent string used as the user-agent for InnerTube requests with the Android client.If the
Localizationprovided isnull, fallbacks tothe default one.- Parameters:
localization- theLocalizationto set in the user-agent- Returns:
- the Android user-agent used for InnerTube requests with the Android client,
depending on the
Localizationprovided
-
getIosUserAgent
@Nonnull public static java.lang.String getIosUserAgent(@Nullable Localization localization)Get the user-agent string used as the user-agent for InnerTube requests with the iOS client.If the
Localizationprovided isnull, fallbacks tothe default one.- Parameters:
localization- theLocalizationto set in the user-agent- Returns:
- the iOS user-agent used for InnerTube requests with the iOS client, depending on the
Localizationprovided
-
getTvHtml5UserAgent
@Nonnull public static java.lang.String getTvHtml5UserAgent()
Get the user-agent string used as the user-agent for InnerTube requests with the HTML5 TV client.- Returns:
- the user-agent used for InnerTube requests with the TVHTML5 client
-
getYoutubeMusicHeaders
@Nonnull public static java.util.Map<java.lang.String,java.util.List<java.lang.String>> getYoutubeMusicHeaders()
Returns aMapcontaining the required YouTube Music headers.
-
getYouTubeHeaders
public static java.util.Map<java.lang.String,java.util.List<java.lang.String>> getYouTubeHeaders() throws ExtractionException, java.io.IOExceptionReturns aMapcontaining the required YouTube headers, including theCONSENTcookie to prevent redirects toconsent.youtube.com- Throws:
ExtractionExceptionjava.io.IOException
-
getClientInfoHeaders
public static java.util.Map<java.lang.String,java.util.List<java.lang.String>> getClientInfoHeaders() throws ExtractionException, java.io.IOExceptionReturns aMapcontaining theX-YouTube-Client-Name,X-YouTube-Client-Version,Origin, andRefererheaders.- Throws:
ExtractionExceptionjava.io.IOException
-
getOriginReferrerHeaders
public static java.util.Map<java.lang.String,java.util.List<java.lang.String>> getOriginReferrerHeaders(@Nonnull java.lang.String url)Returns an unmodifiableMapcontaining theOriginandRefererheaders set to the given URL.- Parameters:
url- The URL to be set as the origin and referrer.
-
getClientHeaders
public static java.util.Map<java.lang.String,java.util.List<java.lang.String>> getClientHeaders(@Nonnull java.lang.String name, @Nonnull java.lang.String version)Returns an unmodifiableMapcontaining theX-YouTube-Client-NameandX-YouTube-Client-Versionheaders.- Parameters:
name- The X-YouTube-Client-Name value.version- X-YouTube-Client-Version value.
-
getCookieHeader
public static java.util.Map<java.lang.String,java.util.List<java.lang.String>> getCookieHeader()
Create a map with the required cookie header.- Returns:
- A singleton map containing the header.
-
generateConsentCookie
@Nonnull public static java.lang.String generateConsentCookie()
-
extractCookieValue
public static java.lang.String extractCookieValue(java.lang.String cookieName, @Nonnull Response response)
-
defaultAlertsCheck
public static void defaultAlertsCheck(@Nonnull com.grack.nanojson.JsonObject initialData) throws ParsingExceptionShared alert detection function, multiple endpoints return the error similarly structured.Will check if the object has an alert of the type "ERROR".
- Parameters:
initialData- the object which will be checked if an alert is present- Throws:
ContentNotAvailableException- if an alert is detectedParsingException
-
extractCachedUrlIfNeeded
public static java.lang.String extractCachedUrlIfNeeded(java.lang.String url)
Sometimes, YouTube provides URLs which use Google's cache. They look likehttps://webcache.googleusercontent.com/search?q=cache:CACHED_URL- Parameters:
url- the URL which might refer to the Google's webcache- Returns:
- the URL which is referring to the original site
-
isVerified
public static boolean isVerified(com.grack.nanojson.JsonArray badges)
-
hasArtistOrVerifiedIconBadgeAttachment
public static boolean hasArtistOrVerifiedIconBadgeAttachment(@Nonnull com.grack.nanojson.JsonArray attachmentRuns)
-
generateContentPlaybackNonce
@Nonnull public static java.lang.String generateContentPlaybackNonce()
Generate a content playback nonce (also calledcpn), sent by YouTube clients in playback requests (and also for some clients, in the player request body).- Returns:
- a content playback nonce string
-
generateTParameter
@Nonnull public static java.lang.String generateTParameter()
Try to generate atparameter, sent by mobile clients as a query of the player request.Some researches needs to be done to know how this parameter, unique at each request, is generated.
- Returns:
- a 12 characters string to try to reproduce the parameter
-
isWebStreamingUrl
public static boolean isWebStreamingUrl(@Nonnull java.lang.String url)Check if the streaming URL is from the YouTubeWEBclient.- Parameters:
url- the streaming URL to be checked.- Returns:
- true if it's a
WEBstreaming URL, false otherwise
-
isWebEmbeddedPlayerStreamingUrl
public static boolean isWebEmbeddedPlayerStreamingUrl(@Nonnull java.lang.String url)Check if the streaming URL is from the YouTubeWEB_EMBEDDED_PLAYERclient.- Parameters:
url- the streaming URL to be checked.- Returns:
- true if it's a
WEB_EMBEDDED_PLAYERstreaming URL, false otherwise
-
isTvHtml5StreamingUrl
public static boolean isTvHtml5StreamingUrl(@Nonnull java.lang.String url)Check if the streaming URL is a URL from the YouTubeTVHTML5client.- Parameters:
url- the streaming URL on which check if it's aTVHTML5streaming URL.- Returns:
- true if it's a
TVHTML5streaming URL, false otherwise
-
isAndroidStreamingUrl
public static boolean isAndroidStreamingUrl(@Nonnull java.lang.String url)Check if the streaming URL is a URL from the YouTubeANDROIDclient.- Parameters:
url- the streaming URL to be checked.- Returns:
- true if it's a
ANDROIDstreaming URL, false otherwise
-
isIosStreamingUrl
public static boolean isIosStreamingUrl(@Nonnull java.lang.String url)Check if the streaming URL is a URL from the YouTubeIOSclient.- Parameters:
url- the streaming URL on which check if it's aIOSstreaming URL.- Returns:
- true if it's a
IOSstreaming URL, false otherwise
-
setConsentAccepted
public static void setConsentAccepted(boolean accepted)
Determines how the consent cookie that is required for YouTube,SOCS, will be generated.false(the default value) will useCAE=;truewill useCAISAiAD.
Setting this value to
trueis needed to extract mixes and some YouTube Music playlists in some countries such as the EU ones.
-
isConsentAccepted
public static boolean isConsentAccepted()
Get the value of the consent's acceptance.- Returns:
- the consent's acceptance value
- See Also:
setConsentAccepted(boolean)
-
extractAudioTrackType
@Nullable public static AudioTrackType extractAudioTrackType(java.lang.String streamUrl)
Extract the audio track type from a YouTube stream URL.The track type is parsed from the
xtagsURL parameter (Example:acont=original:lang=en).- Parameters:
streamUrl- YouTube stream URL- Returns:
AudioTrackTypeornullif no track type was found
-
getVisitorDataFromInnertube
@Nonnull public static java.lang.String getVisitorDataFromInnertube(@Nonnull InnertubeClientRequestInfo innertubeClientRequestInfo, @Nonnull Localization localization, @Nonnull ContentCountry contentCountry, @Nonnull java.util.Map<java.lang.String,java.util.List<java.lang.String>> httpHeaders, @Nonnull java.lang.String innertubeDomainAndVersionEndpoint, @Nullable java.lang.String embedUrl, boolean useGuideEndpoint) throws java.io.IOException, ExtractionException- Throws:
java.io.IOExceptionExtractionException
-
prepareJsonBuilder
@Nonnull public static com.grack.nanojson.JsonBuilder<com.grack.nanojson.JsonObject> prepareJsonBuilder(@Nonnull Localization localization, @Nonnull ContentCountry contentCountry, @Nonnull InnertubeClientRequestInfo innertubeClientRequestInfo, @Nullable java.lang.String embedUrl)
-
-