[YouTube] Add ability to get TVHTML5 user agent used

Also make YoutubeParsingHelper.getOriginReferrerHeaders public, in
order to be used by other extractor classes and improve the name of a
parameter of YoutubeParsingHelper.getVisitorDataFromInnertube.
This commit is contained in:
AudricV 2025-01-31 21:43:51 +01:00 committed by Stypox
parent 0952431121
commit c48d449853
No known key found for this signature in database
GPG Key ID: 4BDF1B40A49FDD23

View File

@ -26,6 +26,7 @@ import static org.schabi.newpipe.extractor.services.youtube.ClientsConstants.DES
import static org.schabi.newpipe.extractor.services.youtube.ClientsConstants.IOS_CLIENT_VERSION; import static org.schabi.newpipe.extractor.services.youtube.ClientsConstants.IOS_CLIENT_VERSION;
import static org.schabi.newpipe.extractor.services.youtube.ClientsConstants.IOS_DEVICE_MODEL; import static org.schabi.newpipe.extractor.services.youtube.ClientsConstants.IOS_DEVICE_MODEL;
import static org.schabi.newpipe.extractor.services.youtube.ClientsConstants.IOS_USER_AGENT_VERSION; import static org.schabi.newpipe.extractor.services.youtube.ClientsConstants.IOS_USER_AGENT_VERSION;
import static org.schabi.newpipe.extractor.services.youtube.ClientsConstants.TVHTML5_USER_AGENT;
import static org.schabi.newpipe.extractor.services.youtube.ClientsConstants.WEB_CLIENT_ID; import static org.schabi.newpipe.extractor.services.youtube.ClientsConstants.WEB_CLIENT_ID;
import static org.schabi.newpipe.extractor.services.youtube.ClientsConstants.WEB_CLIENT_NAME; import static org.schabi.newpipe.extractor.services.youtube.ClientsConstants.WEB_CLIENT_NAME;
import static org.schabi.newpipe.extractor.services.youtube.ClientsConstants.WEB_HARDCODED_CLIENT_VERSION; import static org.schabi.newpipe.extractor.services.youtube.ClientsConstants.WEB_HARDCODED_CLIENT_VERSION;
@ -1134,6 +1135,17 @@ public final class YoutubeParsingHelper {
+ ")"; + ")";
} }
/**
* Get the user-agent string used as the user-agent for InnerTube requests with the HTML5 TV
* client.
*
* @return the user-agent used for InnerTube requests with the TVHTML5 client
*/
@Nonnull
public static String getTvHtml5UserAgent() {
return TVHTML5_USER_AGENT;
}
/** /**
* Returns a {@link Map} containing the required YouTube Music headers. * Returns a {@link Map} containing the required YouTube Music headers.
*/ */
@ -1172,7 +1184,7 @@ public final class YoutubeParsingHelper {
* *
* @param url The URL to be set as the origin and referrer. * @param url The URL to be set as the origin and referrer.
*/ */
static Map<String, List<String>> getOriginReferrerHeaders(@Nonnull final String url) { public static Map<String, List<String>> getOriginReferrerHeaders(@Nonnull final String url) {
final var urlList = List.of(url); final var urlList = List.of(url);
return Map.of("Origin", urlList, "Referer", urlList); return Map.of("Origin", urlList, "Referer", urlList);
} }
@ -1496,12 +1508,13 @@ public final class YoutubeParsingHelper {
} }
} }
@Nonnull
public static String getVisitorDataFromInnertube( public static String getVisitorDataFromInnertube(
@Nonnull final InnertubeClientRequestInfo innertubeClientRequestInfo, @Nonnull final InnertubeClientRequestInfo innertubeClientRequestInfo,
@Nonnull final Localization localization, @Nonnull final Localization localization,
@Nonnull final ContentCountry contentCountry, @Nonnull final ContentCountry contentCountry,
@Nonnull final Map<String, List<String>> httpHeaders, @Nonnull final Map<String, List<String>> httpHeaders,
@Nonnull final String innerTubeDomain, @Nonnull final String innertubeDomainAndVersionEndpoint,
@Nullable final String embedUrl, @Nullable final String embedUrl,
final boolean useGuideEndpoint) throws IOException, ExtractionException { final boolean useGuideEndpoint) throws IOException, ExtractionException {
final JsonBuilder<JsonObject> builder = prepareJsonBuilder( final JsonBuilder<JsonObject> builder = prepareJsonBuilder(
@ -1512,8 +1525,9 @@ public final class YoutubeParsingHelper {
final String visitorData = JsonUtils.toJsonObject(getValidJsonResponseBody(getDownloader() final String visitorData = JsonUtils.toJsonObject(getValidJsonResponseBody(getDownloader()
.postWithContentTypeJson( .postWithContentTypeJson(
innerTubeDomain + (useGuideEndpoint ? "guide" : "visitor_id") innertubeDomainAndVersionEndpoint
+ "?" + DISABLE_PRETTY_PRINT_PARAMETER, + (useGuideEndpoint ? "guide" : "visitor_id") + "?"
+ DISABLE_PRETTY_PRINT_PARAMETER,
httpHeaders, body))) httpHeaders, body)))
.getObject("responseContext") .getObject("responseContext")
.getString("visitorData"); .getString("visitorData");