use json array looping to extract clientVersion to prevent DE crash
This commit is contained in:
parent
c953e23414
commit
0727b97119
|
@ -607,13 +607,8 @@ public final class YoutubeParsingHelper {
|
||||||
final JsonArray serviceTrackingParams = initialData.getObject("responseContext")
|
final JsonArray serviceTrackingParams = initialData.getObject("responseContext")
|
||||||
.getArray("serviceTrackingParams");
|
.getArray("serviceTrackingParams");
|
||||||
|
|
||||||
// Try to get version from initial data first
|
clientVersion = getClientVersionFromServiceTrackingParams(
|
||||||
final Stream<JsonObject> serviceTrackingParamsStream = serviceTrackingParams.stream()
|
serviceTrackingParams, "CSI", "cver");
|
||||||
.filter(JsonObject.class::isInstance)
|
|
||||||
.map(JsonObject.class::cast);
|
|
||||||
|
|
||||||
clientVersion = getClientVersionFromServiceTrackingParam(
|
|
||||||
serviceTrackingParamsStream, "CSI", "cver");
|
|
||||||
|
|
||||||
if (clientVersion == null) {
|
if (clientVersion == null) {
|
||||||
try {
|
try {
|
||||||
|
@ -626,8 +621,8 @@ public final class YoutubeParsingHelper {
|
||||||
// Fallback to get a shortened client version which does not contain the last two
|
// Fallback to get a shortened client version which does not contain the last two
|
||||||
// digits
|
// digits
|
||||||
if (isNullOrEmpty(clientVersion)) {
|
if (isNullOrEmpty(clientVersion)) {
|
||||||
clientVersion = getClientVersionFromServiceTrackingParam(
|
clientVersion = getClientVersionFromServiceTrackingParams(
|
||||||
serviceTrackingParamsStream, "ECATCHER", "client.version");
|
serviceTrackingParams, "ECATCHER", "client.version");
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -652,6 +647,26 @@ public final class YoutubeParsingHelper {
|
||||||
keyAndVersionExtracted = true;
|
keyAndVersionExtracted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static String getClientVersionFromServiceTrackingParams(
|
||||||
|
@Nonnull final JsonArray serviceTrackingParams,
|
||||||
|
@Nonnull final String serviceName,
|
||||||
|
@Nonnull final String clientVersionKey) {
|
||||||
|
for (int i = 0 ; i < serviceTrackingParams.size(); i++) {
|
||||||
|
JsonObject item = serviceTrackingParams.getObject(i);
|
||||||
|
if (item != null && item.getString("service").equals(serviceName) && item.getArray("params") != null) {
|
||||||
|
JsonArray paramsArray = item.getArray("params");
|
||||||
|
for (int j = 0 ; j < paramsArray.size(); j++) {
|
||||||
|
JsonObject paramItem = paramsArray.getObject(i);
|
||||||
|
if (paramItem != null && paramItem.getString("key").equals(clientVersionKey)) {
|
||||||
|
return paramItem.getString("value");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static String getClientVersionFromServiceTrackingParam(
|
private static String getClientVersionFromServiceTrackingParam(
|
||||||
@Nonnull final Stream<JsonObject> serviceTrackingParamsStream,
|
@Nonnull final Stream<JsonObject> serviceTrackingParamsStream,
|
||||||
|
|
Loading…
Reference in New Issue