Update ali
This commit is contained in:
parent
d538af7ae9
commit
0c492b3c75
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -9,6 +9,7 @@ import android.widget.ImageView;
|
||||||
import com.github.catvod.bean.Result;
|
import com.github.catvod.bean.Result;
|
||||||
import com.github.catvod.bean.Sub;
|
import com.github.catvod.bean.Sub;
|
||||||
import com.github.catvod.bean.Vod;
|
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.Data;
|
||||||
import com.github.catvod.bean.ali.Item;
|
import com.github.catvod.bean.ali.Item;
|
||||||
import com.github.catvod.crawler.SpiderDebug;
|
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 final Pattern pattern = Pattern.compile("www.aliyundrive.com/s/([^/]+)(/folder/([^/]+))?");
|
||||||
private ScheduledExecutorService service;
|
private ScheduledExecutorService service;
|
||||||
private static String authorization;
|
private Auth auth;
|
||||||
private String refreshToken;
|
|
||||||
private long expiresTime;
|
|
||||||
private ImageView view;
|
|
||||||
|
|
||||||
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 (TextUtils.isEmpty(token)) Init.show("尚未設定 Token");
|
||||||
if (token.startsWith("http")) token = OkHttp.string(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<String, String> getHeaders() {
|
private HashMap<String, String> getHeaders() {
|
||||||
HashMap<String, String> headers = new HashMap<>();
|
HashMap<String, String> headers = new HashMap<>();
|
||||||
headers.put("User-Agent", Misc.CHROME);
|
headers.put("User-Agent", Misc.CHROME);
|
||||||
headers.put("Referer", "https://www.aliyundrive.com/");
|
headers.put("Referer", "https://www.aliyundrive.com/");
|
||||||
return headers;
|
return headers;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static HashMap<String, String> getHeaders(String shareToken) {
|
private HashMap<String, String> getHeaders(String shareToken) {
|
||||||
HashMap<String, String> headers = getHeaders();
|
HashMap<String, String> headers = getHeaders();
|
||||||
if (authorization != null) headers.put("authorization", authorization);
|
headers.put("authorization", auth.getAccessToken());
|
||||||
headers.put("x-share-token", shareToken);
|
headers.put("x-share-token", shareToken);
|
||||||
return headers;
|
return headers;
|
||||||
}
|
}
|
||||||
|
|
@ -73,9 +73,17 @@ public class Ali {
|
||||||
return OkHttp.postJson(url, body.toString(), getHeaders());
|
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;
|
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<String> ids) throws Exception {
|
public String detailContent(List<String> ids) throws Exception {
|
||||||
|
|
@ -86,14 +94,13 @@ public class Ali {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String playerContent(String flag, String id) {
|
public String playerContent(String flag, String id) {
|
||||||
if (id.equals("无数据")) return "";
|
if (id.equals("Empty")) return "";
|
||||||
String[] ids = id.split("\\+");
|
String[] ids = id.split("\\+");
|
||||||
String shareId = ids[0];
|
String shareId = ids[0];
|
||||||
String shareToken = ids[1];
|
String shareToken = ids[1];
|
||||||
String fileId = ids[2];
|
String fileId = ids[2];
|
||||||
List<Sub> sub = getSub(shareId, shareToken, ids);
|
List<Sub> sub = getSub(shareId, shareToken, ids);
|
||||||
if (System.currentTimeMillis() > expiresTime) refreshAccessToken();
|
if (auth.needRefresh()) refreshAccessToken();
|
||||||
while (TextUtils.isEmpty(authorization)) SystemClock.sleep(250);
|
|
||||||
if (flag.equals("原畫")) {
|
if (flag.equals("原畫")) {
|
||||||
return Result.get().url(getDownloadUrl(shareId, shareToken, fileId)).sub(sub).header(getHeaders()).string();
|
return Result.get().url(getDownloadUrl(shareId, shareToken, fileId)).sub(sub).header(getHeaders()).string();
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -115,7 +122,7 @@ public class Ali {
|
||||||
List<String> playUrls = new ArrayList<>();
|
List<String> playUrls = new ArrayList<>();
|
||||||
List<Item> files = new ArrayList<>(fileMap.keySet());
|
List<Item> files = new ArrayList<>(fileMap.keySet());
|
||||||
for (Item file : files) playUrls.add(Trans.get(file.getDisplayName()) + "$" + fileMap.get(file) + findSubs(file.getName(), subMap));
|
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<String> sourceUrls = new ArrayList<>();
|
List<String> sourceUrls = new ArrayList<>();
|
||||||
sourceUrls.add(TextUtils.join("#", playUrls));
|
sourceUrls.add(TextUtils.join("#", playUrls));
|
||||||
sourceUrls.add(TextUtils.join("#", playUrls));
|
sourceUrls.add(TextUtils.join("#", playUrls));
|
||||||
|
|
@ -176,18 +183,19 @@ public class Ali {
|
||||||
private void refreshAccessToken() {
|
private void refreshAccessToken() {
|
||||||
try {
|
try {
|
||||||
JSONObject body = new JSONObject();
|
JSONObject body = new JSONObject();
|
||||||
body.put("refresh_token", refreshToken);
|
body.put("refresh_token", auth.getRefreshToken());
|
||||||
body.put("grant_type", "refresh_token");
|
body.put("grant_type", "refresh_token");
|
||||||
JSONObject object = new JSONObject(post("https://auth.aliyundrive.com/v2/account/token", body));
|
JSONObject object = new JSONObject(post("https://auth.aliyundrive.com/v2/account/token", body));
|
||||||
authorization = object.getString("token_type") + " " + object.getString("access_token");
|
auth.setAccessToken(object.getString("token_type") + " " + object.getString("access_token"));
|
||||||
expiresTime = System.currentTimeMillis() + object.getInt("expires_in") * 1000L;
|
auth.setExpiresTime(System.currentTimeMillis() + object.getInt("expires_in") * 1000L);
|
||||||
refreshToken = object.getString("refresh_token");
|
auth.setRefreshToken(object.getString("refresh_token"));
|
||||||
SpiderDebug.log("refresh token: " + refreshToken);
|
SpiderDebug.log("refresh token: " + auth.getRefreshToken());
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
authorization = null;
|
|
||||||
e.printStackTrace();
|
|
||||||
checkService();
|
checkService();
|
||||||
|
auth.clean();
|
||||||
getQRCode();
|
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 {
|
try {
|
||||||
JSONObject body = new JSONObject();
|
JSONObject body = new JSONObject();
|
||||||
body.put("file_id", fileId);
|
body.put("file_id", fileId);
|
||||||
|
|
@ -280,7 +288,7 @@ public class Ali {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Object[] vod(Map<String, String> params) {
|
public Object[] vod(Map<String, String> params) {
|
||||||
String shareId = params.get("share_id");
|
String shareId = params.get("share_id");
|
||||||
String shareToken = params.get("share_token");
|
String shareToken = params.get("share_token");
|
||||||
String fileId = params.get("file_id");
|
String fileId = params.get("file_id");
|
||||||
|
|
@ -294,7 +302,7 @@ public class Ali {
|
||||||
|
|
||||||
private void checkService() {
|
private void checkService() {
|
||||||
if (service != null) service.shutdownNow();
|
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() {
|
private void getQRCode() {
|
||||||
|
|
@ -313,15 +321,16 @@ public class Ali {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setToken(String value) {
|
private void setToken(String value) {
|
||||||
Prefers.put("token", refreshToken = value);
|
Prefers.put("token", value);
|
||||||
Init.show("請重新進入播放頁");
|
Init.show("請重新進入播放頁");
|
||||||
|
auth.setRefreshToken(value);
|
||||||
checkService();
|
checkService();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showCode(Data data) {
|
private void showCode(Data data) {
|
||||||
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
|
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
|
||||||
params.gravity = Gravity.CENTER;
|
params.gravity = Gravity.CENTER;
|
||||||
Misc.addView(view = create(data.getData().getCodeContent()), params);
|
Misc.addView(create(data.getData().getCodeContent()), params);
|
||||||
Init.show("請使用阿里雲盤 App 掃描二維碼");
|
Init.show("請使用阿里雲盤 App 掃描二維碼");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -329,6 +338,7 @@ public class Ali {
|
||||||
ImageView view = new ImageView(Init.context());
|
ImageView view = new ImageView(Init.context());
|
||||||
view.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
view.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
||||||
view.setImageBitmap(QRCode.getBitmap(value, 250, 2));
|
view.setImageBitmap(QRCode.getBitmap(value, 250, 2));
|
||||||
|
auth.setView(view);
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -17,6 +17,7 @@ public class Init {
|
||||||
|
|
||||||
private final Handler handler;
|
private final Handler handler;
|
||||||
private Application app;
|
private Application app;
|
||||||
|
private Ali ali;
|
||||||
|
|
||||||
private static class Loader {
|
private static class Loader {
|
||||||
static volatile Init INSTANCE = new Init();
|
static volatile Init INSTANCE = new Init();
|
||||||
|
|
@ -34,6 +35,14 @@ public class Init {
|
||||||
return get().app;
|
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) {
|
public static void init(Context context) {
|
||||||
SpiderDebug.log("自定義爬蟲代碼載入成功!");
|
SpiderDebug.log("自定義爬蟲代碼載入成功!");
|
||||||
get().app = ((Application) context);
|
get().app = ((Application) context);
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ public class PanSou extends Spider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(Context context, String extend) {
|
public void init(Context context, String extend) {
|
||||||
ali = new Ali(extend);
|
ali = Init.getAli().token(extend);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ public class Paper extends Spider {
|
||||||
@Override
|
@Override
|
||||||
public void init(Context context, String extend) {
|
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");
|
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
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ public class Proxy extends Spider {
|
||||||
case "ck":
|
case "ck":
|
||||||
return new Object[]{200, "text/plain; charset=utf-8", new ByteArrayInputStream("ok".getBytes("UTF-8"))};
|
return new Object[]{200, "text/plain; charset=utf-8", new ByteArrayInputStream("ok".getBytes("UTF-8"))};
|
||||||
case "ali":
|
case "ali":
|
||||||
return Ali.vod(params);
|
return Init.getAli().vod(params);
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ public class Push extends Spider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(Context context, String extend) {
|
public void init(Context context, String extend) {
|
||||||
ali = new Ali(extend);
|
ali = Init.getAli().token(extend);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ public class UpYun extends Spider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(Context context, String extend) {
|
public void init(Context context, String extend) {
|
||||||
ali = new Ali(extend);
|
ali = Init.getAli().token(extend);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public class YiSo extends Spider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(Context context, String extend) {
|
public void init(Context context, String extend) {
|
||||||
ali = new Ali(extend);
|
ali = Init.getAli().token(extend);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ public class Zhaozy extends Spider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(Context context, String extend) {
|
public void init(Context context, String extend) {
|
||||||
ali = new Ali(extend);
|
ali = Init.getAli().token(extend);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue