From 354311c764786e096a50f8dea43fc9c2d25710c9 Mon Sep 17 00:00:00 2001 From: FineFindus Date: Mon, 29 Jun 2026 20:41:36 +0200 Subject: [PATCH] [YouTube] Extract client version from service worker data Closes: https://github.com/TeamNewPipe/NewPipeExtractor/issues/872 --- .../services/youtube/YoutubeParsingHelper.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java index f8a00f9652..d08b002f2e 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java @@ -488,13 +488,17 @@ private static void extractClientVersionFromSwJs() if (clientVersionExtracted) { return; } - final String url = "https://www.youtube.com/sw.js"; + final String url = "https://www.youtube.com/sw.js_data"; final var headers = getOriginReferrerHeaders("https://www.youtube.com"); - final String response = getDownloader().get(url, headers).responseBody(); + String response = getDownloader().get(url, headers).responseBody(); + if (response.startsWith(")]}'")) { + response = response.substring(4); + } + try { - clientVersion = getStringResultFromRegexArray(response, - INNERTUBE_CONTEXT_CLIENT_VERSION_REGEXES, 1); - } catch (final Parser.RegexException e) { + final JsonArray data = JsonParser.array().from(response); + clientVersion = data.getArray(0).getArray(2).getArray(0).getArray(0).getString(16); + } catch (JsonParserException e) { throw new ParsingException("Could not extract YouTube WEB InnerTube client version " + "from sw.js", e); }