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.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<String, String> getHeaders() {
|
||||
private HashMap<String, String> getHeaders() {
|
||||
HashMap<String, String> headers = new HashMap<>();
|
||||
headers.put("User-Agent", Misc.CHROME);
|
||||
headers.put("Referer", "https://www.aliyundrive.com/");
|
||||
return headers;
|
||||
}
|
||||
|
||||
private static HashMap<String, String> getHeaders(String shareToken) {
|
||||
private HashMap<String, String> getHeaders(String shareToken) {
|
||||
HashMap<String, String> 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<String> 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> 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<String> playUrls = new ArrayList<>();
|
||||
List<Item> 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<String> 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<String, String> params) {
|
||||
public Object[] vod(Map<String, String> 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue