diff --git a/app/src/main/java/com/github/catvod/api/QuarkApi.java b/app/src/main/java/com/github/catvod/api/QuarkApi.java index c84e9c31..8a930626 100644 --- a/app/src/main/java/com/github/catvod/api/QuarkApi.java +++ b/app/src/main/java/com/github/catvod/api/QuarkApi.java @@ -20,11 +20,9 @@ import com.github.catvod.net.OkHttp; import com.github.catvod.net.OkResult; import com.github.catvod.spider.Init; import com.github.catvod.utils.*; -import com.google.gson.reflect.TypeToken; import org.apache.commons.lang3.StringUtils; import java.io.File; -import java.lang.reflect.Type; import java.util.*; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -300,9 +298,8 @@ public class QuarkApi { private List listFile(int shareIndex, ShareData shareData, List videos, List subtitles, String shareId, String folderId, Integer page) throws Exception { int prePage = 200; page = page != null ? page : 1; - Type type = new TypeToken>() { - }.getType(); - ApiResponse listData = Json.parseSafe(api("share/sharepage/detail?" + this.pr + "&pwd_id=" + shareId + "&stoken=" + encodeURIComponent((String) this.shareTokenCache.get(shareId).get("stoken")) + "&pdir_fid=" + folderId + "&force=0&_page=" + page + "&_size=" + prePage + "&_sort=file_type:asc,file_name:asc", Collections.emptyMap(), Collections.emptyMap(), 0, "GET"), type); + + ApiResponse listData = Json.parseSafe(api("share/sharepage/detail?" + this.pr + "&pwd_id=" + shareId + "&stoken=" + encodeURIComponent((String) this.shareTokenCache.get(shareId).get("stoken")) + "&pdir_fid=" + folderId + "&force=0&_page=" + page + "&_size=" + prePage + "&_sort=file_type:asc,file_name:asc", Collections.emptyMap(), Collections.emptyMap(), 0, "GET"), ApiResponse.class); if (listData.getData() == null) return Collections.emptyList(); List items = listData.getData().getList(); if (items == null) return Collections.emptyList(); @@ -371,9 +368,8 @@ public class QuarkApi { } private void clearSaveDir() throws Exception { - Type type = new TypeToken>() { - }.getType(); - ApiResponse listData = Json.parseSafe(api("file/sort?" + this.pr + "&pdir_fid=" + this.saveDirId + "&_page=1&_size=200&_sort=file_type:asc,updated_at:desc", Collections.emptyMap(), Collections.emptyMap(), 0, "GET"), type); + + ApiResponse listData = Json.parseSafe(api("file/sort?" + this.pr + "&pdir_fid=" + this.saveDirId + "&_page=1&_size=200&_sort=file_type:asc,updated_at:desc", Collections.emptyMap(), Collections.emptyMap(), 0, "GET"), ApiResponse.class); if (listData.getData() != null && !listData.getData().getList().isEmpty()) { List list = new ArrayList<>(); for (Item stringStringMap : listData.getData().getList()) { @@ -388,9 +384,8 @@ public class QuarkApi { if (clean) clearSaveDir(); return; } - Type type = new TypeToken>() { - }.getType(); - ApiResponse listData = Json.parseSafe(api("file/sort?" + this.pr + "&pdir_fid=0&_page=1&_size=200&_sort=file_type:asc,updated_at:desc", Collections.emptyMap(), Collections.emptyMap(), 0, "GET"), type); + + ApiResponse listData = Json.parseSafe(api("file/sort?" + this.pr + "&pdir_fid=0&_page=1&_size=200&_sort=file_type:asc,updated_at:desc", Collections.emptyMap(), Collections.emptyMap(), 0, "GET"), ApiResponse.class); if (listData.getData() != null) { for (Item item : listData.getData().getList()) { if (this.saveDirName.equals(item.getFileName())) { @@ -418,17 +413,15 @@ public class QuarkApi { getShareToken(new ShareData(shareId, null)); if (!this.shareTokenCache.containsKey(shareId)) return null; } - Type type = new TypeToken>>() { - }.getType(); - ApiResponse> saveResult = Json.parseSafe(api("share/sharepage/save?" + this.pr, null, Map.of("fid_list", List.of(fileId), "fid_token_list", List.of(fileToken), "to_pdir_fid", this.saveDirId, "pwd_id", shareId, "stoken", stoken != null ? stoken : (String) this.shareTokenCache.get(shareId).get("stoken"), "pdir_fid", "0", "scene", "link"), 0, "POST"), type); - if (saveResult.getData() != null && (saveResult.getData()).get("task_id") != null) { + + Map saveResult = Json.parseSafe(api("share/sharepage/save?" + this.pr, null, Map.of("fid_list", List.of(fileId), "fid_token_list", List.of(fileToken), "to_pdir_fid", this.saveDirId, "pwd_id", shareId, "stoken", stoken != null ? stoken : (String) this.shareTokenCache.get(shareId).get("stoken"), "pdir_fid", "0", "scene", "link"), 0, "POST"), Map.class); + if (saveResult.get("data") != null && ((Map) saveResult.get("data")).get("task_id") != null) { int retry = 0; while (true) { - Type type2 = new TypeToken>>() { - }.getType(); - ApiResponse> taskResult = Json.parseSafe(api("task?" + this.pr + "&task_id=" + (saveResult.getData()).get("task_id") + "&retry_index=" + retry, Collections.emptyMap(), Collections.emptyMap(), 0, "GET"), type2); - if (taskResult.getData() != null && taskResult.getData().get("save_as") != null && ((Map) taskResult.getData().get("save_as")).get("save_as_top_fids") != null && ((List) ((Map) ((Map) taskResult.getData()).get("save_as")).get("save_as_top_fids")).size() > 0) { - return ((List) ((Map) (taskResult.getData()).get("save_as")).get("save_as_top_fids")).get(0); + + Map taskResult = Json.parseSafe(api("task?" + this.pr + "&task_id=" + ((Map) saveResult.get("data")).get("task_id") + "&retry_index=" + retry, Collections.emptyMap(), Collections.emptyMap(), 0, "GET"), Map.class); + if (taskResult.get("data") != null && ((Map) taskResult.get("data")).get("save_as") != null && ((Map) ((Map) taskResult.get("data")).get("save_as")).get("save_as_top_fids") != null && ((List) ((Map) ((Map) taskResult.get("data")).get("save_as")).get("save_as_top_fids")).size() > 0) { + return ((List) ((Map) ((Map) taskResult.get("data")).get("save_as")).get("save_as_top_fids")).get(0); } retry++; if (retry > 2) break; @@ -444,19 +437,18 @@ public class QuarkApi { if (saveFileId == null) return null; this.saveFileIdCaches.put(fileId, saveFileId); } - Type type2 = new TypeToken>>() { - }.getType(); - ApiResponse> transcoding = Json.parseSafe(api("file/v2/play?" + this.pr, Collections.emptyMap(), Map.of("fid", this.saveFileIdCaches.get(fileId), "resolutions", "normal,low,high,super,2k,4k", "supports", "fmp4"), 0, "POST"), type2); - if (transcoding.getData() != null && (transcoding.getData()).get("video_list") != null) { + + Map transcoding = Json.parseSafe(api("file/v2/play?" + this.pr, Collections.emptyMap(), Map.of("fid", this.saveFileIdCaches.get(fileId), "resolutions", "normal,low,high,super,2k,4k", "supports", "fmp4"), 0, "POST"), Map.class); + if (transcoding.get("data") != null && ((Map) transcoding.get("data")).get("video_list") != null) { String flagId = flag.split("-")[flag.split("-").length - 1]; int index = Util.findAllIndexes(getPlayFormatList(), flagId); String quarkFormat = getPlayFormatQuarkList().get(index); - for (Map video : (List>) (transcoding.getData()).get("video_list")) { + for (Map video : (List>) ((Map) transcoding.get("data")).get("video_list")) { if (video.get("resolution").equals(quarkFormat)) { return (String) ((Map) video.get("video_info")).get("url"); } } - return (String) ((Map) ((List>) (transcoding.getData()).get("video_list")).get(index).get("video_info")).get("url"); + return (String) ((Map) ((List>) ((Map) transcoding.get("data")).get("video_list")).get(index).get("video_info")).get("url"); } return null; } diff --git a/app/src/main/java/com/github/catvod/bean/quark/ApiResponse.java b/app/src/main/java/com/github/catvod/bean/quark/ApiResponse.java index 037a68a5..bbcf1c46 100644 --- a/app/src/main/java/com/github/catvod/bean/quark/ApiResponse.java +++ b/app/src/main/java/com/github/catvod/bean/quark/ApiResponse.java @@ -12,7 +12,7 @@ public class ApiResponse { @SerializedName("timestamp") private long timestamp; @SerializedName("data") - private T data; + private Data data; @SerializedName("metadata") private Metadata metadata; public ApiResponse() { @@ -51,11 +51,11 @@ public class ApiResponse { this.timestamp = timestamp; } - public T getData() { + public Data getData() { return data; } - public void setData(T data) { + public void setData(Data data) { this.data = data; } diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 8b886ad4..38b6dd82 100644 Binary files a/jar/custom_spider.jar and b/jar/custom_spider.jar differ diff --git a/jar/custom_spider.jar.md5 b/jar/custom_spider.jar.md5 index b5d77a7d..1892c2cf 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -827a5607ec16fc5d5b9fee4c3c2d2a11 +28aa6e38d4ab4f6cafec8b7c3c33b454 diff --git a/json/index.json b/json/index.json index 15011612..edb3fbaf 100644 --- a/json/index.json +++ b/json/index.json @@ -1,5 +1,5 @@ { - "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;827a5607ec16fc5d5b9fee4c3c2d2a11", + "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;28aa6e38d4ab4f6cafec8b7c3c33b454", "lives": [ { "name": "直播ipv6", diff --git a/json/index1.json b/json/index1.json index dd779791..7adb5e87 100644 --- a/json/index1.json +++ b/json/index1.json @@ -1,5 +1,5 @@ { - "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;827a5607ec16fc5d5b9fee4c3c2d2a11", + "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;28aa6e38d4ab4f6cafec8b7c3c33b454", "lives": [ { "name": "直播ipv6", diff --git a/json/index2.json b/json/index2.json index 71ce5fd3..e6f426a6 100644 --- a/json/index2.json +++ b/json/index2.json @@ -1,5 +1,5 @@ { - "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;827a5607ec16fc5d5b9fee4c3c2d2a11", + "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;28aa6e38d4ab4f6cafec8b7c3c33b454", "lives": [ { "name": "直播ipv6",