diff --git a/app/src/main/java/com/github/catvod/ali/API.java b/app/src/main/java/com/github/catvod/ali/API.java index 806981d7..627c1bd2 100644 --- a/app/src/main/java/com/github/catvod/ali/API.java +++ b/app/src/main/java/com/github/catvod/ali/API.java @@ -17,6 +17,7 @@ import com.github.catvod.bean.Vod; import com.github.catvod.bean.ali.Auth; import com.github.catvod.bean.ali.Data; import com.github.catvod.bean.ali.Item; +import com.github.catvod.crawler.SpiderDebug; import com.github.catvod.net.OkHttp; import com.github.catvod.spider.Init; import com.github.catvod.spider.Proxy; @@ -65,7 +66,11 @@ public class API { } public void setRefreshToken(String token) { - auth.setRefreshToken(Prefers.getString("token", token)); + auth.setRefreshToken(token); + } + + public void setRefreshOpenApiToken(String token) { + auth.setRefreshOpenApiToken(token); } public void setShareId(String shareId) { @@ -131,9 +136,12 @@ public class API { private boolean refreshAccessToken() { try { JSONObject body = new JSONObject(); + SpiderDebug.log("refreshAccessToken" + auth.getRefreshToken()); String token = auth.getRefreshToken(); - if (token.startsWith("http")) token = OkHttp.string(token).replaceAll("[^A-Za-z0-9]", ""); - body.put("refresh_token", token); + if (token.startsWith("http")) + token = OkHttp.string(token); + SpiderDebug.log("refreshAccessToken" + token); + body.put("refresh_token", token.split(";")[0]); body.put("grant_type", "refresh_token"); JSONObject object = new JSONObject(post("https://auth.aliyundrive.com/v2/account/token", body)); auth.setUserId(object.getString("user_id")); @@ -290,15 +298,36 @@ public class API { public String getDownloadUrl(String fileId) { try { - JSONObject body = new JSONObject(); - body.put("file_id", fileId); - body.put("share_id", auth.getShareId()); - body.put("expire_sec", 600); - String json = API.get().auth("v2/file/get_share_link_download_url", body, true); - String url = new JSONObject(json).optString("download_url"); - Map> respHeaders = new HashMap<>(); - OkHttp.stringNoRedirect(url, API.get().getHeader(), respHeaders); - return OkHttp.getRedirectLocation(respHeaders); +// JSONObject body = new JSONObject(); +// body.put("file_id", fileId); +// body.put("share_id", auth.getShareId()); +// body.put("expire_sec", 600); +// String json = API.get().auth("v2/file/get_share_link_download_url", body, true); +// String url = new JSONObject(json).optString("download_url"); +// Map> respHeaders = new HashMap<>(); +// OkHttp.stringNoRedirect(url, API.get().getHeader(), respHeaders); +// return OkHttp.getRedirectLocation(respHeaders); + + String saveBodyStr = "{\"requests\":[{\"body\":{\"file_id\":\"640218332e0d8caeb1424b7e810fddb8368515e3\",\"share_id\":\"x52gz85SF1m\",\"auto_rename\":true,\"to_parent_file_id\":\"root\",\"to_drive_id\":\"3460970\"},\"headers\":{\"Content-Type\":\"application/json\"},\"id\":\"0\",\"method\":\"POST\",\"url\":\"/file/copy\"}],\"resource\":\"file\"}"; + //获取drivId + if (TextUtils.isEmpty(auth.getDriveId())) { + JSONObject body = new JSONObject(); + body.put("file_id", fileId); + body.put("share_id", auth.getShareId()); + auth.setDriveId(new JSONObject(API.get().authOpenApi("https://open.aliyundrive.com/adrive/v1.0/user/getDriveInfo", body, true)).optString("default_drive_id")); + } + String finalSaveBodyStr = saveBodyStr.replace("3460970", auth.getDriveId()).replace("640218332e0d8caeb1424b7e810fddb8368515e3", fileId).replace("x52gz85SF1m", auth.getShareId()); + String newFileId = new JSONObject(API.get().auth("adrive/v2/batch", new JSONObject(finalSaveBodyStr), true)).getJSONArray("responses").getJSONObject(0).getJSONObject("body").optString("file_id"); + //获取新的下载地址 + JSONObject newDownloadBody = new JSONObject(); + newDownloadBody.put("file_id", newFileId); + newDownloadBody.put("drive_id", auth.getDriveId()); + String newDownloadJson = API.get().authOpenApi("https://open.aliyundrive.com/adrive/v1.0/openFile/getDownloadUrl", newDownloadBody, true); + //获取后删除保存的文件 + String deleteBodyStr = "{\"requests\":[{\"body\":{\"drive_id\":\"3460970\",\"file_id\":\"6403d5111bb264eb4dd249bfb98cda43fbc7d347\"},\"headers\":{\"Content-Type\":\"application/json\"},\"id\":\"6403d5111bb264eb4dd249bfb98cda43fbc7d347\",\"method\":\"POST\",\"url\":\"/file/delete\"}],\"resource\":\"file\"}"; + deleteBodyStr = deleteBodyStr.replace("3460970", auth.getDriveId()).replace("6403d5111bb264eb4dd249bfb98cda43fbc7d347", newFileId); + API.get().auth("adrive/v2/batch", new JSONObject(deleteBodyStr), true); + return new JSONObject(newDownloadJson).optString("url"); } catch (Exception e) { e.printStackTrace(); return ""; @@ -443,4 +472,42 @@ public class API { } catch (Exception ignored) { } } + private String authOpenApi(String url, JSONObject body, boolean retry) { + String result = OkHttp.postJson(url, body.toString(), getHeaderAuthOpenApi()); + if (retry && check401OpenApi(result)) return authOpenApi(url, body, false); + return result; + } + private HashMap getHeaderAuthOpenApi() { + HashMap headers = getHeader(); + headers.put("authorization", auth.getAccessOpenApiToken()); + return headers; + } + private boolean check401OpenApi(String result) { + if (result.contains("AccessTokenInvalid")) return refreshAccessTokenOpenApi(); + return false; + } + private boolean refreshAccessTokenOpenApi() { + try { + JSONObject body = new JSONObject(); + String token = auth.getRefreshOpenApiToken(); + if (token.startsWith("http")) + token = OkHttp.string(token); + body.put("refresh_token", token.split(";")[1]); + body.put("grant_type", "refresh_token"); + JSONObject object = new JSONObject(postOpenApi("https://api.nn.ci/alist/ali_open/token", body)); + auth.setAccessOpenApiToken(object.getString("token_type") + " " + object.getString("access_token")); + auth.setRefreshOpenApiToken(object.getString("refresh_token")); + return true; + } catch (Exception e) { + stopService(); + auth.clean(); + //getQRCode(); + return true; + } finally { + while (auth.isEmpty()) SystemClock.sleep(250); + } + } + private String postOpenApi(String url, JSONObject body) { + return OkHttp.postJson(url, body.toString(), getHeader()); + } } diff --git a/app/src/main/java/com/github/catvod/bean/ali/Auth.java b/app/src/main/java/com/github/catvod/bean/ali/Auth.java index 408ae0e4..02b54b72 100644 --- a/app/src/main/java/com/github/catvod/bean/ali/Auth.java +++ b/app/src/main/java/com/github/catvod/bean/ali/Auth.java @@ -11,7 +11,31 @@ public class Auth { private String deviceId; private String shareId; private String userId; + private String driveId; + private String refreshOpenApiToken; + private String accessOpenApiToken; + public String getAccessOpenApiToken() { + return TextUtils.isEmpty(accessOpenApiToken) ? "" : accessOpenApiToken; + } + public void setAccessOpenApiToken(String accessOpenApiToken) { + this.accessOpenApiToken = accessOpenApiToken; + } + public String getDriveId() { + return driveId; + } + + public void setDriveId(String driveId) { + this.driveId = driveId; + } + + public String getRefreshOpenApiToken() { + return TextUtils.isEmpty(refreshOpenApiToken) ? "" : refreshOpenApiToken; + } + + public void setRefreshOpenApiToken(String refreshOpenApiToken) { + this.refreshOpenApiToken = refreshOpenApiToken; + } public String getRefreshToken() { return TextUtils.isEmpty(refreshToken) ? "" : refreshToken; } diff --git a/app/src/main/java/com/github/catvod/spider/Ali.java b/app/src/main/java/com/github/catvod/spider/Ali.java index 7b447374..68fd3103 100644 --- a/app/src/main/java/com/github/catvod/spider/Ali.java +++ b/app/src/main/java/com/github/catvod/spider/Ali.java @@ -21,6 +21,7 @@ public class Ali extends Spider { @Override public void init(Context context, String extend) { API.get().setRefreshToken(extend); + API.get().setRefreshOpenApiToken(extend); } @Override diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 67257e1d..493b9ba7 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 bdc7d710..d2643429 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -69ef6396eb2400c03529c7714d96841a +ce58ebfc747a6a294569a410526590c0