From 0c492b3c758494cf676652a2e34394be249fcac4 Mon Sep 17 00:00:00 2001 From: FongMi Date: Tue, 3 Jan 2023 16:44:25 +0800 Subject: [PATCH] Update ali --- .../java/com/github/catvod/bean/ali/Auth.java | 62 ++++++++++++++++++ .../java/com/github/catvod/spider/Ali.java | 64 +++++++++++-------- .../java/com/github/catvod/spider/Init.java | 9 +++ .../java/com/github/catvod/spider/PanSou.java | 2 +- .../java/com/github/catvod/spider/Paper.java | 2 +- .../java/com/github/catvod/spider/Proxy.java | 2 +- .../java/com/github/catvod/spider/Push.java | 2 +- .../java/com/github/catvod/spider/UpYun.java | 2 +- .../java/com/github/catvod/spider/YiSo.java | 2 +- .../java/com/github/catvod/spider/Zhaozy.java | 2 +- 10 files changed, 115 insertions(+), 34 deletions(-) create mode 100644 app/src/main/java/com/github/catvod/bean/ali/Auth.java 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 new file mode 100644 index 00000000..25f44a16 --- /dev/null +++ b/app/src/main/java/com/github/catvod/bean/ali/Auth.java @@ -0,0 +1,62 @@ +package com.github.catvod.bean.ali; + +import android.text.TextUtils; +import android.widget.ImageView; + +public class Auth { + + private String refreshToken; + private String accessToken; + private long expiresTime; + private ImageView view; + + public Auth(String refreshToken) { + this.refreshToken = refreshToken; + } + + public String getRefreshToken() { + return TextUtils.isEmpty(refreshToken) ? "" : refreshToken; + } + + public void setRefreshToken(String refreshToken) { + this.refreshToken = refreshToken; + } + + public String getAccessToken() { + return TextUtils.isEmpty(accessToken) ? "" : accessToken; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + public long getExpiresTime() { + return expiresTime; + } + + public void setExpiresTime(long expiresTime) { + this.expiresTime = expiresTime; + } + + public ImageView getView() { + return view; + } + + public void setView(ImageView view) { + this.view = view; + } + + public boolean needRefresh() { + return System.currentTimeMillis() > getExpiresTime(); + } + + public boolean isEmpty() { + return getRefreshToken().isEmpty() || getAccessToken().isEmpty(); + } + + public void clean() { + setRefreshToken(""); + setAccessToken(""); + setExpiresTime(0); + } +} 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 7972676c..4cb9b5a7 100644 --- a/app/src/main/java/com/github/catvod/spider/Ali.java +++ b/app/src/main/java/com/github/catvod/spider/Ali.java @@ -9,6 +9,7 @@ import android.widget.ImageView; import com.github.catvod.bean.Result; import com.github.catvod.bean.Sub; 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; @@ -43,27 +44,26 @@ public class Ali { private final Pattern pattern = Pattern.compile("www.aliyundrive.com/s/([^/]+)(/folder/([^/]+))?"); private ScheduledExecutorService service; - private static String authorization; - private String refreshToken; - private long expiresTime; - private ImageView view; + private Auth auth; - public Ali(String token) { + public Ali token(String token) { + if (auth != null && auth.getRefreshToken().length() > 0) return this; if (TextUtils.isEmpty(token)) Init.show("尚未設定 Token"); if (token.startsWith("http")) token = OkHttp.string(token); - refreshToken = Prefers.getString("token", token); + auth = new Auth(Prefers.getString("token", token)); + return this; } - private static HashMap getHeaders() { + private HashMap getHeaders() { HashMap headers = new HashMap<>(); headers.put("User-Agent", Misc.CHROME); headers.put("Referer", "https://www.aliyundrive.com/"); return headers; } - private static HashMap getHeaders(String shareToken) { + private HashMap getHeaders(String shareToken) { HashMap headers = getHeaders(); - if (authorization != null) headers.put("authorization", authorization); + headers.put("authorization", auth.getAccessToken()); headers.put("x-share-token", shareToken); return headers; } @@ -73,9 +73,17 @@ public class Ali { return OkHttp.postJson(url, body.toString(), getHeaders()); } - private static String post(String url, JSONObject body, String shareToken) { + private String post(String url, JSONObject body, String shareToken) { url = url.startsWith("https") ? url : "https://api.aliyundrive.com/" + url; - return OkHttp.postJson(url, body.toString(), getHeaders(shareToken)); + String result = OkHttp.postJson(url, body.toString(), getHeaders(shareToken)); + if (check401(result)) return post(url, body, shareToken); + return result; + } + + private boolean check401(String result) { + if (!result.contains("AccessTokenInvalid")) return false; + refreshAccessToken(); + return true; } public String detailContent(List ids) throws Exception { @@ -86,14 +94,13 @@ public class Ali { } public String playerContent(String flag, String id) { - if (id.equals("无数据")) return ""; + if (id.equals("Empty")) return ""; String[] ids = id.split("\\+"); String shareId = ids[0]; String shareToken = ids[1]; String fileId = ids[2]; List sub = getSub(shareId, shareToken, ids); - if (System.currentTimeMillis() > expiresTime) refreshAccessToken(); - while (TextUtils.isEmpty(authorization)) SystemClock.sleep(250); + if (auth.needRefresh()) refreshAccessToken(); if (flag.equals("原畫")) { return Result.get().url(getDownloadUrl(shareId, shareToken, fileId)).sub(sub).header(getHeaders()).string(); } else { @@ -115,7 +122,7 @@ public class Ali { List playUrls = new ArrayList<>(); List files = new ArrayList<>(fileMap.keySet()); for (Item file : files) playUrls.add(Trans.get(file.getDisplayName()) + "$" + fileMap.get(file) + findSubs(file.getName(), subMap)); - if (playUrls.isEmpty()) playUrls.add("无数据$无数据"); + if (playUrls.isEmpty()) playUrls.add("Empty$Empty"); List sourceUrls = new ArrayList<>(); sourceUrls.add(TextUtils.join("#", playUrls)); sourceUrls.add(TextUtils.join("#", playUrls)); @@ -176,18 +183,19 @@ public class Ali { private void refreshAccessToken() { try { JSONObject body = new JSONObject(); - body.put("refresh_token", refreshToken); + body.put("refresh_token", auth.getRefreshToken()); body.put("grant_type", "refresh_token"); JSONObject object = new JSONObject(post("https://auth.aliyundrive.com/v2/account/token", body)); - authorization = object.getString("token_type") + " " + object.getString("access_token"); - expiresTime = System.currentTimeMillis() + object.getInt("expires_in") * 1000L; - refreshToken = object.getString("refresh_token"); - SpiderDebug.log("refresh token: " + refreshToken); + auth.setAccessToken(object.getString("token_type") + " " + object.getString("access_token")); + auth.setExpiresTime(System.currentTimeMillis() + object.getInt("expires_in") * 1000L); + auth.setRefreshToken(object.getString("refresh_token")); + SpiderDebug.log("refresh token: " + auth.getRefreshToken()); } catch (JSONException e) { - authorization = null; - e.printStackTrace(); checkService(); + auth.clean(); getQRCode(); + } finally { + while (auth.isEmpty()) SystemClock.sleep(250); } } @@ -263,7 +271,7 @@ public class Ali { } } - private static String getDownloadUrl(String shareId, String shareToken, String fileId) { + private String getDownloadUrl(String shareId, String shareToken, String fileId) { try { JSONObject body = new JSONObject(); body.put("file_id", fileId); @@ -280,7 +288,7 @@ public class Ali { } } - public static Object[] vod(Map params) { + public Object[] vod(Map params) { String shareId = params.get("share_id"); String shareToken = params.get("share_token"); String fileId = params.get("file_id"); @@ -294,7 +302,7 @@ public class Ali { private void checkService() { if (service != null) service.shutdownNow(); - if (view != null) Init.run(() -> Misc.removeView(view)); + if (auth.getView() != null) Init.run(() -> Misc.removeView(auth.getView())); } private void getQRCode() { @@ -313,15 +321,16 @@ public class Ali { } private void setToken(String value) { - Prefers.put("token", refreshToken = value); + Prefers.put("token", value); Init.show("請重新進入播放頁"); + auth.setRefreshToken(value); checkService(); } private void showCode(Data data) { FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT); params.gravity = Gravity.CENTER; - Misc.addView(view = create(data.getData().getCodeContent()), params); + Misc.addView(create(data.getData().getCodeContent()), params); Init.show("請使用阿里雲盤 App 掃描二維碼"); } @@ -329,6 +338,7 @@ public class Ali { ImageView view = new ImageView(Init.context()); view.setScaleType(ImageView.ScaleType.CENTER_CROP); view.setImageBitmap(QRCode.getBitmap(value, 250, 2)); + auth.setView(view); return view; } } \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/Init.java b/app/src/main/java/com/github/catvod/spider/Init.java index 1133b8a9..c3c43505 100644 --- a/app/src/main/java/com/github/catvod/spider/Init.java +++ b/app/src/main/java/com/github/catvod/spider/Init.java @@ -17,6 +17,7 @@ public class Init { private final Handler handler; private Application app; + private Ali ali; private static class Loader { static volatile Init INSTANCE = new Init(); @@ -34,6 +35,14 @@ public class Init { return get().app; } + public static Ali getAli() { + return get().ali = get().ali == null ? new Ali() : get().ali; + } + + public static void setAli(Ali ali) { + get().ali = ali; + } + public static void init(Context context) { SpiderDebug.log("自定義爬蟲代碼載入成功!"); get().app = ((Application) context); diff --git a/app/src/main/java/com/github/catvod/spider/PanSou.java b/app/src/main/java/com/github/catvod/spider/PanSou.java index 7aa0d415..0b00769f 100644 --- a/app/src/main/java/com/github/catvod/spider/PanSou.java +++ b/app/src/main/java/com/github/catvod/spider/PanSou.java @@ -37,7 +37,7 @@ public class PanSou extends Spider { @Override public void init(Context context, String extend) { - ali = new Ali(extend); + ali = Init.getAli().token(extend); } @Override diff --git a/app/src/main/java/com/github/catvod/spider/Paper.java b/app/src/main/java/com/github/catvod/spider/Paper.java index d2eb40bb..6de1257a 100644 --- a/app/src/main/java/com/github/catvod/spider/Paper.java +++ b/app/src/main/java/com/github/catvod/spider/Paper.java @@ -43,7 +43,7 @@ public class Paper extends Spider { @Override public void init(Context context, String extend) { types = Arrays.asList("hyds", "rhds", "omds", "qtds", "hydy", "rhdy", "omdy", "qtdy", "hydm", "rhdm", "omdm", "jlp", "zyp", "jypx", "qtsp"); - ali = new Ali(extend); + ali = Init.getAli().token(extend); } @Override diff --git a/app/src/main/java/com/github/catvod/spider/Proxy.java b/app/src/main/java/com/github/catvod/spider/Proxy.java index 123b639a..7d28b287 100644 --- a/app/src/main/java/com/github/catvod/spider/Proxy.java +++ b/app/src/main/java/com/github/catvod/spider/Proxy.java @@ -18,7 +18,7 @@ public class Proxy extends Spider { case "ck": return new Object[]{200, "text/plain; charset=utf-8", new ByteArrayInputStream("ok".getBytes("UTF-8"))}; case "ali": - return Ali.vod(params); + return Init.getAli().vod(params); default: return null; } diff --git a/app/src/main/java/com/github/catvod/spider/Push.java b/app/src/main/java/com/github/catvod/spider/Push.java index 360c28e9..9ca09435 100644 --- a/app/src/main/java/com/github/catvod/spider/Push.java +++ b/app/src/main/java/com/github/catvod/spider/Push.java @@ -15,7 +15,7 @@ public class Push extends Spider { @Override public void init(Context context, String extend) { - ali = new Ali(extend); + ali = Init.getAli().token(extend); } @Override diff --git a/app/src/main/java/com/github/catvod/spider/UpYun.java b/app/src/main/java/com/github/catvod/spider/UpYun.java index 57377abe..0099a154 100644 --- a/app/src/main/java/com/github/catvod/spider/UpYun.java +++ b/app/src/main/java/com/github/catvod/spider/UpYun.java @@ -33,7 +33,7 @@ public class UpYun extends Spider { @Override public void init(Context context, String extend) { - ali = new Ali(extend); + ali = Init.getAli().token(extend); } @Override diff --git a/app/src/main/java/com/github/catvod/spider/YiSo.java b/app/src/main/java/com/github/catvod/spider/YiSo.java index 1dcf9e2f..ac6aa82f 100644 --- a/app/src/main/java/com/github/catvod/spider/YiSo.java +++ b/app/src/main/java/com/github/catvod/spider/YiSo.java @@ -24,7 +24,7 @@ public class YiSo extends Spider { @Override public void init(Context context, String extend) { - ali = new Ali(extend); + ali = Init.getAli().token(extend); } @Override diff --git a/app/src/main/java/com/github/catvod/spider/Zhaozy.java b/app/src/main/java/com/github/catvod/spider/Zhaozy.java index 3e29d330..b5de5c7c 100644 --- a/app/src/main/java/com/github/catvod/spider/Zhaozy.java +++ b/app/src/main/java/com/github/catvod/spider/Zhaozy.java @@ -52,7 +52,7 @@ public class Zhaozy extends Spider { @Override public void init(Context context, String extend) { - ali = new Ali(extend); + ali = Init.getAli().token(extend); } @Override