Skip to content
This repository was archived by the owner on Nov 26, 2023. It is now read-only.

Commit c7c9108

Browse files
committed
Update youtube data extractor
1 parent d08d139 commit c7c9108

File tree

3 files changed

+26
-16
lines changed

3 files changed

+26
-16
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ plugins {
2525
}
2626

2727
project.group = "com.dunctebot"
28-
project.version = "1.5.0"
28+
project.version = "1.5.1"
2929
val archivesBaseName = "sourcemanagers"
3030

3131
repositories {

src/main/java/com/dunctebot/sourcemanagers/extra/YoutubeContextFilterOverride.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,12 @@
3535
import java.util.concurrent.Executors;
3636
import java.util.concurrent.ScheduledExecutorService;
3737
import java.util.concurrent.TimeUnit;
38+
import java.util.regex.Matcher;
39+
import java.util.regex.Pattern;
3840

3941
public class YoutubeContextFilterOverride extends YoutubeHttpContextFilter implements Closeable {
4042
private static final Logger logger = LoggerFactory.getLogger(YoutubeContextFilterOverride.class);
43+
private static final Pattern YOUTUBE_INFO_REGEX = Pattern.compile("window\\.ytplayer=\\{\\};\\n?ytcfg\\.set\\((.*)\\);");
4144
private YoutubeVersionData youtubeVersionData = null;
4245
private final HttpInterface httpInterface;
4346
private final ScheduledExecutorService dataUpdateThread = Executors.newSingleThreadScheduledExecutor((r) -> {
@@ -71,6 +74,7 @@ private void updateYoutubeData() {
7174
logger.info("New youtube version data {}", this.youtubeVersionData);
7275
} catch (IOException e) {
7376
Sentry.capture(e);
77+
logger.error("Failed to capture youtube data", e);
7478
}
7579
}
7680

@@ -81,12 +85,18 @@ private YoutubeVersionData getYoutubeHeaderDetails() throws IOException {
8185
try (final CloseableHttpResponse response = this.httpInterface.execute(httpGet)) {
8286
final String html = IOUtils.toString(response.getEntity().getContent(), StandardCharsets.UTF_8);
8387

84-
final String extracted = DataFormatTools.extractBetween(html,
85-
"window.ytplayer = {};ytcfg.set(",
86-
");ytcfg.set(");
87-
final JsonBrowser json = JsonBrowser.parse(extracted);
88+
final Matcher matcher = YOUTUBE_INFO_REGEX.matcher(html);
8889

89-
return YoutubeVersionData.fromBrowser(json);
90+
if (matcher.find()) {
91+
final String extracted = matcher.group(matcher.groupCount())
92+
.trim()
93+
.replaceAll("undefined", "null");
94+
final JsonBrowser json = JsonBrowser.parse(extracted);
95+
96+
return YoutubeVersionData.fromBrowser(json);
97+
}
98+
99+
return null;
90100
}
91101
}
92102

@@ -101,7 +111,7 @@ public void onRequest(HttpClientContext context, HttpUriRequest request, boolean
101111
request.setHeader("x-youtube-client-version", youtubeVersionData.getVersion());
102112
request.setHeader("x-youtube-page-cl", youtubeVersionData.getPageCl());
103113
request.setHeader("x-youtube-page-label", youtubeVersionData.getLabel());
104-
request.setHeader("x-youtube-variants-checksum", youtubeVersionData.getChecksum());
114+
request.setHeader("x-youtube-identity-token", youtubeVersionData.getIdToken());
105115
}
106116

107117
@Override

src/main/java/com/dunctebot/sourcemanagers/extra/YoutubeVersionData.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,19 @@ public class YoutubeVersionData {
2323
/* INNERTUBE_CONTEXT_CLIENT_VERSION x-youtube-client-version */
2424
private final String version;
2525
/* VARIANTS_CHECKSUM x-youtube-variants-checksum */
26-
private final String checksum;
26+
//private final String checksum;
2727
/* PAGE_BUILD_LABEL x-youtube-page-label */
2828
private final String label;
2929
/* ID_TOKEN x-youtube-identity-token */
30-
// private final String idToken;
30+
private final String idToken;
3131
/* PAGE_CL x-youtube-page-cl */
3232
private final String pageCl;
3333
/* DEVICE x-youtube-device */
3434
// private final String device;
3535

36-
public YoutubeVersionData(String version, String checksum, String label, String pageCl) {
36+
public YoutubeVersionData(String version, String idToken, String label, String pageCl) {
3737
this.version = version;
38-
this.checksum = checksum;
38+
this.idToken = idToken;
3939
this.label = label;
4040
this.pageCl = pageCl;
4141
}
@@ -44,8 +44,8 @@ public String getVersion() {
4444
return version;
4545
}
4646

47-
public String getChecksum() {
48-
return checksum;
47+
public String getIdToken() {
48+
return idToken;
4949
}
5050

5151
public String getLabel() {
@@ -60,7 +60,7 @@ public String getPageCl() {
6060
public String toString() {
6161
return "YoutubeVersionData{" +
6262
"version='" + version + '\'' +
63-
", checksum='" + checksum + '\'' +
63+
", idToken='" + idToken + '\'' +
6464
", label='" + label + '\'' +
6565
", pageCl='" + pageCl + '\'' +
6666
'}';
@@ -69,9 +69,9 @@ public String toString() {
6969
public static YoutubeVersionData fromBrowser(JsonBrowser json) {
7070
return new YoutubeVersionData(
7171
json.get("INNERTUBE_CONTEXT_CLIENT_VERSION").safeText(),
72-
json.get("VARIANTS_CHECKSUM").safeText(),
72+
json.get("ID_TOKEN").safeText(),
7373
json.get("PAGE_BUILD_LABEL").safeText(),
7474
json.get("PAGE_CL").safeText()
7575
);
7676
}
77-
}
77+
}

0 commit comments

Comments
 (0)