From ec28a5661c59c1e8ea7b3f6ae4b1d08bfe591355 Mon Sep 17 00:00:00 2001 From: yangqiang3504 <412594121@qq.com> Date: Wed, 7 Sep 2022 10:09:05 +0800 Subject: [PATCH] =?UTF-8?q?add=20-=20=E8=AF=A6=E6=83=85=E9=A1=B5=E6=92=AD?= =?UTF-8?q?=E6=94=BE=20push?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/github/catvod/spider/Proxy.java | 2 +- .../com/github/catvod/spider/PushAgent.java | 695 ++++++++---------- .../com/github/catvod/spider/PushAgentQQ.java | 5 - 3 files changed, 309 insertions(+), 393 deletions(-) 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 fd3a0bd..12f9d02 100644 --- a/app/src/main/java/com/github/catvod/spider/Proxy.java +++ b/app/src/main/java/com/github/catvod/spider/Proxy.java @@ -53,7 +53,7 @@ public class Proxy extends Spider { ByteArrayInputStream baos = new ByteArrayInputStream("ok".getBytes("UTF-8")); result[2] = baos; return result; - } else if (what.equals("push")) { + } else if (what.equals("ali")) { return PushAgent.vod(params); } else if (what.equals("czspp")) { return Czsapp.loadsub(params.get("url")); diff --git a/app/src/main/java/com/github/catvod/spider/PushAgent.java b/app/src/main/java/com/github/catvod/spider/PushAgent.java index d6ea857..499a598 100644 --- a/app/src/main/java/com/github/catvod/spider/PushAgent.java +++ b/app/src/main/java/com/github/catvod/spider/PushAgent.java @@ -21,27 +21,26 @@ import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.ByteArrayInputStream; +import java.net.URLDecoder; import java.util.*; import java.util.concurrent.locks.ReentrantLock; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PushAgent extends Spider { - - private static String j = ""; - private static long StopRefresh; - private static final Map l = new HashMap(); - private static final Map q = new HashMap(); - private static final Map> dizz = new HashMap(); - private static final ReentrantLock ReentrantLock = new ReentrantLock(); - private static final long n = 0; - public static Integer type=1; + private static long timeToken = 0; + private static String accessToken = ""; + private static String refreshToken = "http://catvod.fun:8001/tv/ali.txt"; + private static Map shareToken = new HashMap<>(); + private static Map shareExpires = new HashMap<>(); + private static final Map> videosMap = new HashMap<>(); + private static final ReentrantLock rLock = new ReentrantLock(); private static final String SiteUrl = "https://api.aliyundrive.com"; - private static final Pattern AliPLink = Pattern.compile("(https://www.aliyundrive.com/s/[^\"]+)"); - public static Pattern Folder = Pattern.compile("www.aliyundrive.com/s/([^/]+)(/folder/([^/]+))?"); - public static String Token="http://catvod.fun:8001/tv/ali.txt"; - public static JSONObject siteRule = null; + public static Pattern regexAli = Pattern.compile("(https://www.aliyundrive.com/s/[^\"]+)"); + public static Pattern regexAliFolder = Pattern.compile("www.aliyundrive.com/s/([^/]+)(/folder/([^/]+))?"); + public static JSONObject siteRule = null; + public static Integer type=1; @Override public void init(Context context, String extend) { super.init(context, extend); @@ -55,8 +54,8 @@ public class PushAgent extends Spider { public static void getToken(String token){ if (token.startsWith("http")) { - Token = OkHttpUtil.string(token, null); - }else Token = token; + refreshToken = OkHttpUtil.string(token, null); + }else refreshToken = token; } public static JSONObject fetchRule(boolean flag,int t) { @@ -96,116 +95,11 @@ public class PushAgent extends Spider { } public static long Time() { - return (System.currentTimeMillis() / 1000) + n; - } - - public static Object[] ProxyMedia(Map map) { - try { - String ShareId = map.get("share_id"); - String FileId = map.get("file_id"); - String MediaId = map.get("media_id"); - String Token = getShareTk(ShareId, ""); - ReentrantLock.lock(); - String str4 = dizz.get(FileId).get(MediaId); - UrlQuerySanitizer urlQuerySanitizer = new UrlQuerySanitizer(str4); - Long l2 = new Long(urlQuerySanitizer.getValue("x-oss-expires")); - long longValue = l2.longValue(); - if (longValue - Time() <= 60) { - VideoDetail(ShareId, Token, FileId); - Map> map3 = dizz; - str4 = map3.get(FileId).get(MediaId); - } - ReentrantLock.unlock(); - new HashMap(); - OKCallBack.OKCallBackDefault abVar = new OKCallBack.OKCallBackDefault() { - public void onResponse(Response response) { - } - - @Override - protected void onFailure(Call call, Exception exc) { - } - }; - OkHttpClient YM = OkHttpUtil.defaultClient(); - HashMap t = Headers(); - OkHttpUtil.get(YM, str4, null, t, abVar); - ResponseBody body = abVar.getResult().body(); - return new Object[]{200, "video/MP2T", body.byteStream()}; - } catch (Exception e) { - SpiderDebug.log(e); - return null; - } - } - - public static Object[] vod(Map map) { - String str = map.get("type"); - if (str.equals("m3u8")) { - return getFile(map); - } - if (str.equals("media")) { - return ProxyMedia(map); - } - return null; + return (System.currentTimeMillis() / 1000); } - public static Object[] getFile(Map map) { - try { - String ShareId = map.get("share_id"); - String ShareTK = getShareTk(ShareId, ""); - return new Object[]{200, "application/octet-stream", new ByteArrayInputStream(VideoDetail(ShareId, ShareTK, map.get("file_id")).getBytes())}; - } catch (Exception e) { - SpiderDebug.log(e); - return null; - } - } - - private static String Post(String str, String str2, Map map) { - OKCallBack.OKCallBackString acVar = new OKCallBack.OKCallBackString() { - - public void onResponse(String r) { - } - - @Override - protected void onFailure(Call call, Exception exc) { - } - }; - OkHttpClient YM = OkHttpUtil.defaultClient(); - OkHttpUtil.postJson(YM, str, str2, map, acVar); - return acVar.getResult(); - } - - private static synchronized String getShareTk(String str, String str2) { - - try { - long b = Time(); - Map map = l; - String str3 = map.get(str); - Long l2 = q.get(str); - if (!TextUtils.isEmpty(str3)) { - if (l2 - b > 600) { - return str3; - } - } - JSONObject jSONObject = new JSONObject(); - jSONObject.put("share_id", str); - jSONObject.put("share_pwd", str2); - String jSONObject2 = jSONObject.toString(); - JSONObject jSONObject3 = new JSONObject(Post("https://api.aliyundrive.com/v2/share_link/get_share_token", jSONObject2, Headers())); - String string = jSONObject3.getString("share_token"); - Long valueOf = Long.valueOf(b + jSONObject3.getLong("expires_in")); - Map map2 = q; - map2.put(str, valueOf); - Map map3 = l; - map3.put(str, string); - return string; - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - - } - - private static HashMap Headers() { + private static HashMap getHeaders() { HashMap headers = new HashMap<>(); headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"); headers.put("Referer", "https://www.aliyundrive.com/"); @@ -219,160 +113,258 @@ public class PushAgent extends Spider { return headers; } + private static String postJson(String url, String jsonStr, Map headerMap) { + OKCallBack.OKCallBackString callback = new OKCallBack.OKCallBackString() { + @Override + public void onFailure(Call call, Exception e) { - private static void refreshTk() { - long b = Time(); - String str = j; - if (str.isEmpty() || StopRefresh - b <= 600) { + } + + @Override + public void onResponse(String response) { + + } + }; + OkHttpUtil.postJson(OkHttpUtil.defaultClient(), url, jsonStr, headerMap, callback); + return callback.getResult(); + } + + private static void getRefreshTk() { + long timeSys = Time(); + if (accessToken.isEmpty() || timeToken - timeSys <= 600) { try { - JSONObject jSONObject = new JSONObject(); - jSONObject.put("refresh_token", Token); - String jSONObject2 = jSONObject.toString(); - HashMap t = Headers(); - JSONObject jSONObject3 = new JSONObject(Post("https://api.aliyundrive.com/token/refresh", jSONObject2, t)); - StringBuilder sb = new StringBuilder(); - String string = jSONObject3.getString("token_type"); - sb.append(string); - sb.append(" "); - String string2 = jSONObject3.getString("access_token"); - sb.append(string2); - j = sb.toString(); - long j2 = jSONObject3.getLong("expires_in"); - StopRefresh = b + j2; - } catch (Exception e) { - fetchRule(false,0); + JSONObject json = new JSONObject(); + json.put("refresh_token", refreshToken); + JSONObject response = new JSONObject(postJson("https://api.aliyundrive.com/token/refresh", json.toString(), getHeaders())); + accessToken = response.getString("token_type") + " " + response.getString("access_token"); + timeToken = response.getLong("expires_in") + timeSys; + } catch (JSONException e) { SpiderDebug.log(e); } } } - private static String VideoDetail(String shareid, String token, String fileid) { - int i; + private static synchronized String getShareTk(String shareId, String sharePwd) { + synchronized (PushAgent.class) { + try { + long timeSys = Time(); + String token = shareToken.get(shareId); + Long expires = shareExpires.get(shareId); + if (!TextUtils.isEmpty(token) && expires - timeSys > 600) { + return token; + } + JSONObject json = new JSONObject(); + json.put("share_id", shareId); + json.put("share_pwd", sharePwd); + JSONObject response = new JSONObject(postJson("https://api.aliyundrive.com/v2/share_link/get_share_token", json.toString(), getHeaders())); + String string = response.getString("share_token"); + shareExpires.put(shareId, timeSys + response.getLong("expires_in")); + shareToken.put(shareId, string); + return string; + } catch (JSONException e) { + SpiderDebug.log(e); + return ""; + } + } + } + + public static Object[] loadsub(String url) { try { - String url = SiteUrl + "/v2/file/get_share_link_video_preview_play_info"; - JSONObject Data = new JSONObject(); - Data.put("share_id", shareid); - Data.put("category", "live_transcoding"); - Data.put("file_id", fileid); - Data.put("template_id", ""); - HashMap headers = Headers(); - headers.put("x-share-token", token); - String str5 = j; - headers.put("authorization", str5); - String jSONObject2 = Data.toString(); - JSONObject jSONObject3 = new JSONObject(Post(url, jSONObject2, headers)); - ArrayList arrayList = new ArrayList(); - arrayList.add("FHD"); - arrayList.add("HD"); - arrayList.add("SD"); - JSONObject jSONObject4 = jSONObject3.getJSONObject("video_preview_play_info"); - JSONArray jSONArray = jSONObject4.getJSONArray("live_transcoding_task_list"); - Iterator it = arrayList.iterator(); - String objectUrl = ""; - while (true) { - boolean hasNext = it.hasNext(); - i = 0; - if (!hasNext) { - break; + return new Object[]{200, "application/octet-stream", new ByteArrayInputStream(OkHttpUtil.string(url, getHeaders()).getBytes())}; + } catch (Exception e2) { + e2.printStackTrace(); + SpiderDebug.log(e2); + return null; + } + } + + public static Object[] File(Map params) { + try { + String shareId = params.get("share_id"); + return new Object[]{200, "application/octet-stream", new ByteArrayInputStream(getVideoUrl(shareId, getShareTk(shareId, ""), params.get("file_id")).getBytes())}; + } catch (Exception e2) { + SpiderDebug.log(e2); + return null; + } + } + + public static Object[] ProxyMedia(Map params) { + try { + String shareId = params.get("share_id"); + String fileId = params.get("file_id"); + String mediaId = params.get("media_id"); + String shareToken = getShareTk(shareId, ""); + ReentrantLock reentrantLock = rLock; + reentrantLock.lock(); + String url = videosMap.get(fileId).get(mediaId); + if (new Long(new UrlQuerySanitizer(url).getValue("x-oss-expires")) - Time() <= 60) { + getVideoUrl(shareId, shareToken, fileId); + url = videosMap.get(fileId).get(mediaId); + } + reentrantLock.unlock(); + + OKCallBack.OKCallBackDefault callback = new OKCallBack.OKCallBackDefault() { + @Override + public void onFailure(Call call, Exception e) { + } - String str7 = (String) it.next(); - if (!objectUrl.isEmpty()) { - break; + + @Override + public void onResponse(Response response) { + } - while (true) { - if (i < jSONArray.length()) { - JSONObject jSONObject5 = jSONArray.getJSONObject(i); - String string = jSONObject5.getString("template_id"); - if (string.equals(str7)) { - objectUrl = jSONObject5.getString("url"); - break; - } - i++; + }; + OkHttpUtil.get(OkHttpUtil.defaultClient(), url, null, getHeaders(),callback); + return new Object[]{200, "video/MP2T", callback.getResult().body().byteStream()}; + } catch (Exception e2) { + SpiderDebug.log(e2); + return null; + } + } + + + public static Object[] vod(Map map) { + String type = map.get("type"); + if (type.equals("m3u8")) { + return File(map); + } + if (type.equals("media")) { + return ProxyMedia(map); + } + return null; + } + + private static String getVideoUrl(String shareId, String shareToken, String fileId) { + try { + getRefreshTk(); + JSONObject json = new JSONObject(); + json.put("share_id", shareId); + json.put("category", "live_transcoding"); + json.put("file_id", fileId); + json.put("template_id", ""); + HashMap Headers = getHeaders(); + Headers.put("x-share-token", shareToken); + Headers.put("authorization", accessToken); + JSONObject jSONObject3 = new JSONObject(postJson("https://api.aliyundrive.com/v2/file/get_share_link_video_preview_play_info", json.toString(), Headers)); + JSONArray playList = jSONObject3.getJSONObject("video_preview_play_info").getJSONArray("live_transcoding_task_list"); + String videoUrl = ""; + String[] orders = new String[]{"FHD", "HD", "SD"}; + for (String or : orders) { + for (int i = 0; i < playList.length(); i++) { + JSONObject obj = playList.getJSONObject(i); + if (obj.optString("template_id").equals(or)) { + videoUrl = obj.getString("url"); + break; } } + if (!videoUrl.isEmpty()) + break; } - if (TextUtils.isEmpty(objectUrl)) { - JSONObject jSONObject6 = jSONArray.getJSONObject(0); - objectUrl = jSONObject6.getString("url"); + if (videoUrl.isEmpty() && playList.length() > 0) { + videoUrl = playList.getJSONObject(0).getString("url"); } - HashMap hashMap = new HashMap(); - HashMap header = Headers(); - OkHttpUtil.stringNoRedirect(objectUrl, header, hashMap); - String d = OkHttpUtil.getRedirectLocation(hashMap); - String i2 = OkHttpUtil.string(d, Headers()); - String substring = d.substring(0, d.lastIndexOf("/")) + "/"; - ArrayList arrayList2 = new ArrayList(); - HashMap hashMap2 = new HashMap(); - String[] split = i2.split("\n"); - int length = split.length; - int i3 = 0; - while (i < length) { - String str8 = split[i]; - if (str8.contains("x-oss-expires")) { - i3++; - String sb6 = substring + str8; - String sb8 = "" + i3; - hashMap2.put(sb8, sb6); - str8 = Proxy.localProxyUrl() + "?do=push&type=media&share_id=" + shareid + "&file_id=" + fileid + "&media_id=" + i3; + Map> respHeaderMap = new HashMap<>(); + OkHttpUtil.stringNoRedirect(videoUrl, getHeaders(), respHeaderMap); + String url = OkHttpUtil.getRedirectLocation(respHeaderMap); + String medias = OkHttpUtil.string(url, getHeaders()); + String site = url.substring(0, url.lastIndexOf("/")) + "/"; + ArrayList lists = new ArrayList<>(); + Map video = new HashMap<>(); + String[] split = medias.split("\n"); + int j = 0; + for (int i = 0; i < split.length; i++) { + String vod = split[i]; + if (vod.contains("x-oss-expires")) { + j++; + video.put("" + j, site + vod); + vod = Proxy.localProxyUrl() + "?do=ali&type=media&share_id=" + shareId + "&file_id=" + fileId + "&media_id=" + j; } - arrayList2.add(str8); - i++; + lists.add(vod); } - dizz.put(fileid, hashMap2); - return TextUtils.join("\n", arrayList2); + videosMap.put(fileId, video); + return TextUtils.join("\n", lists); + } catch (Exception e2) { + SpiderDebug.log(e2); + return ""; + } + } + + private static String getOriginalVideoUrl(String shareId, String shareToken, String fileId, String category) { + try { + getRefreshTk(); + HashMap json = getHeaders(); + json.put("x-share-token", shareToken); + json.put("authorization", accessToken); + if (category.equals("video")) { + JSONObject jSONObject = new JSONObject(); + jSONObject.put("share_id", shareId); + jSONObject.put("category", "live_transcoding"); + jSONObject.put("file_id", fileId); + jSONObject.put("template_id", ""); + JSONObject jSONObject2 = new JSONObject(postJson("https://api.aliyundrive.com/v2/file/get_share_link_video_preview_play_info", jSONObject.toString(), json)); + shareId = jSONObject2.getString("share_id"); + fileId = jSONObject2.getString("file_id"); + } + JSONObject jSONObject3 = new JSONObject(); + if (category.equals("video")) { + jSONObject3.put("expire_sec", 600); + jSONObject3.put("file_id", fileId); + jSONObject3.put("share_id", shareId); + } + if (category.equals("audio")) { + jSONObject3.put("share_id", shareId); + jSONObject3.put("get_audio_play_info", true); + jSONObject3.put("file_id", fileId); + } + return new JSONObject(postJson("https://api.aliyundrive.com/v2/file/get_share_link_download_url", jSONObject3.toString(), json)).getString("download_url"); } catch (Exception e) { SpiderDebug.log(e); return ""; } } - public static void listFiles(Map map, String str, String str2, String str3) { - String str4; + + public static void listFiles(Map map, String shareId, String shareToken, String fileId) { try { - String str5 = "https://api.aliyundrive.com/adrive/v3/file/list"; - HashMap Y2 = Headers(); - Y2.put("x-share-token", str2); - JSONObject jSONObject = new JSONObject(); - jSONObject.put("image_thumbnail_process", "image/resize,w_160/format,jpeg"); - jSONObject.put("image_url_process", "image/resize,w_1920/format,jpeg"); - jSONObject.put("limit", 200); - jSONObject.put("order_by", "updated_at"); - jSONObject.put("order_direction", "DESC"); - jSONObject.put("parent_file_id", str3); - jSONObject.put("share_id", str); - jSONObject.put("video_thumbnail_process", "video/snapshot,t_1000,f_jpg,ar_auto,w_300"); - String str6 = ""; - ArrayList arrayList = new ArrayList(); - for (int i = 1; i <= 50 && (i < 2 || !TextUtils.isEmpty(str6)); i++) { - jSONObject.put("marker", str6); - JSONObject jSONObject2 = new JSONObject(Post(str5, jSONObject.toString(), Y2)); - JSONArray jSONArray = jSONObject2.getJSONArray("items"); - int i2 = 0; - while (i2 < jSONArray.length()) { - JSONObject jSONObject3 = jSONArray.getJSONObject(i2); - if (jSONObject3.getString("type").equals("folder")) { - arrayList.add(jSONObject3.getString("file_id")); - str4 = str5; + String url = "https://api.aliyundrive.com/adrive/v3/file/list"; + HashMap headers = getHeaders(); + headers.put("x-share-token", shareToken); + JSONObject json = new JSONObject(); + json.put("image_thumbnail_process", "image/resize,w_160/format,jpeg"); + json.put("image_url_process", "image/resize,w_1920/format,jpeg"); + json.put("limit", 200); + json.put("order_by", "updated_at"); + json.put("order_direction", "DESC"); + json.put("parent_file_id", fileId); + json.put("share_id", shareId); + json.put("video_thumbnail_process", "video/snapshot,t_1000,f_jpg,ar_auto,w_300"); + String marker = ""; + ArrayList arrayList = new ArrayList<>(); + for(int i=1;i<=50;i++) { + if (i >1 && marker.isEmpty()) + break; + json.put("marker", marker); + JSONObject data = new JSONObject(postJson(url, json.toString(), headers)); + JSONArray items = data.getJSONArray("items"); + + for (int j = 0; j < items.length(); j++) { + JSONObject item = items.getJSONObject(j); + if (item.getString("type").equals("folder")) { + arrayList.add(item.getString("file_id")); } else { - str4 = str5; - if (jSONObject3.getString("mime_type").contains("video")) { - String replace = jSONObject3.getString("name").replace("#", "_").replace("$", "_"); - if (replace.length() > 20) { - replace = replace.substring(0, 10) + "..." + replace.substring(replace.length() - 10); - } - String category = jSONObject3.getString("category"); - String fileIds = jSONObject3.getString("file_id"); - map.put(replace, str + "+" + str2 + "+" + fileIds+ "+" + category); + //vnd.rn-realmedia-vbr 为rmvb格式 + if (item.getString("mime_type").contains("video")||item.getString("mime_type").contains("vnd.rn-realmedia-vbr")) { + String replace = item.getString("name").replace("#", "_").replace("$", "_"); + map.put(replace, shareId + "+" + shareToken + "+" + item.getString("file_id")+"+"+item.getString("category")); } } - i2++; - str5 = str4; } - str6 = jSONObject2.getString("next_marker"); + marker = data.getString("next_marker"); } - for (String str7 : arrayList) { + + for (String item : arrayList) { try { - listFiles(map, str, str2, str7); + listFiles(map, shareId, shareToken, item); } catch (Exception e) { SpiderDebug.log(e); return; @@ -383,99 +375,66 @@ public class PushAgent extends Spider { } } - public static String getAliContent(String url,JSONObject jSONObject6) { - String str; + + public static String getAliContent(String url,JSONObject vodAtom) { try { - Pattern pattern = Folder; - Matcher matcher = pattern.matcher(url); + Matcher matcher = regexAliFolder.matcher(url); if (!matcher.find()) { return ""; } - String group = matcher.group(1); - if (matcher.groupCount() == 3) { - str = matcher.group(3); - } else { - str = ""; - } - String AnonymousUrl = SiteUrl + "/adrive/v3/share_link/get_share_by_anonymous"; - JSONObject Data = new JSONObject(); - Data.put("share_id", group); - HashMap headers = Headers(); - JSONObject jSONObject3 = new JSONObject(Post(AnonymousUrl, Data.toString(), headers)); - JSONArray jSONArray = jSONObject3.getJSONArray("file_infos"); - if (jSONArray.length() == 0) { + String shareId = matcher.group(1); + String fileId = matcher.groupCount() == 3 ? matcher.group(3) : ""; + JSONObject json = new JSONObject(); + json.put("share_id", shareId); + JSONObject shareLinkJson = new JSONObject(postJson("https://api.aliyundrive.com/adrive/v3/share_link/get_share_by_anonymous", json.toString(), getHeaders())); + JSONArray fileInfoLists = shareLinkJson.getJSONArray("file_infos"); + if (fileInfoLists.length() == 0) { return ""; } - JSONObject jSONObject4 = null; - boolean isEmpty = TextUtils.isEmpty(str); - if (!isEmpty) { - int i = 0; - while (true) { - if (i >= jSONArray.length()) { + JSONObject fileInfo = null; + if (!TextUtils.isEmpty(fileId)) { + for (int i = 0; i < fileInfoLists.length(); i++) { + JSONObject item = fileInfoLists.getJSONObject(i); + if (item.getString("file_id").equals(item.getString("file_id"))) { + fileInfo = item; break; } - JSONObject jSONObject5 = jSONArray.getJSONObject(i); - String string = jSONObject5.getString("file_id"); - String string2 = jSONObject5.getString("file_id"); - if (string.equals(string2)) { - jSONObject4 = jSONObject5; - break; - } - i++; } - if (jSONObject4 == null) { + } else { + fileInfo = fileInfoLists.getJSONObject(0); + fileId = fileInfo.getString("file_id"); + } + if (!vodAtom.has("vod_name")) { + String string3 = shareLinkJson.getString("share_name"); + vodAtom.put("vod_name", string3); + } + vodAtom.put("type_name", "阿里云盘"); + ArrayList vodItems = new ArrayList<>(); + if (!fileInfo.getString("type").equals("folder")) { + if (!fileInfo.getString("type").equals("file") || !fileInfo.getString("category").equals("video")) { return ""; } - } else { - jSONObject4 = jSONArray.getJSONObject(0); - str = jSONObject4.getString("file_id"); + fileId = "root"; } - if (!jSONObject6.has("vod_name")) { - String string3 = jSONObject3.getString("share_name"); - jSONObject6.put("vod_name", string3); - } - jSONObject6.put("vod_play_from", "4K原画$$$AliYun"); - ArrayList arrayList = new ArrayList(); - String string4 = jSONObject4.getString("type"); - if (!string4.equals("folder")) { - String string5 = jSONObject4.getString("type"); - if (string5.equals("file")) { - String string6 = jSONObject4.getString("category"); - if (string6.equals("video")) { - str = "root"; - } - } - return ""; - } - - String s = getShareTk(group, ""); + String shareTk = getShareTk(shareId, ""); Map hashMap = new HashMap<>(); - listFiles(hashMap, group, s, str); - ArrayList arrayList2 = new ArrayList(hashMap.keySet()); + listFiles(hashMap, shareId, shareTk, fileId); + ArrayList arrayList2 = new ArrayList<>(hashMap.keySet()); Collections.sort(arrayList2); - Iterator it = arrayList2.iterator(); - while (true) { - if (!it.hasNext()) { - break; - } - String str3 = (String) it.next(); - String sb4 = str3 + "$" + hashMap.get(str3); - arrayList.add(sb4); + for (String item : arrayList2) { + vodItems.add(item + "$" + hashMap.get(item)); } - ArrayList arrayList3 = new ArrayList(); - for (int i2 = 0; i2 < 4; i2++) { - String join = TextUtils.join("#", arrayList); - String join4 = TextUtils.join("#", arrayList); - arrayList3.add(join); - arrayList3.add(join4); + if(vodItems.size()>0){ + ArrayList playLists = new ArrayList<>(); + playLists.add(TextUtils.join("#", vodItems)); + playLists.add(TextUtils.join("#", vodItems)); + vodAtom.put("vod_play_url", TextUtils.join("$$$", playLists)); + vodAtom.put("vod_play_from", "4K原画$$$AliYun"); } - String join2 = TextUtils.join("$$$", arrayList3); - jSONObject6.put("vod_play_url", join2); - jSONObject6.put("vod_area", type + Token); JSONObject result = new JSONObject(); - JSONArray jSONArray2 = new JSONArray(); - jSONArray2.put(jSONObject6); - result.put("list", jSONArray2); + JSONArray list = new JSONArray(); + list.put(vodAtom); + result.put("list", list); return result.toString(); } catch (Exception e) { SpiderDebug.log(e); @@ -507,10 +466,7 @@ public class PushAgent extends Spider { VodName = idInfo[2]; } } - Pattern pattern = Folder; - Pattern pattern2 = AliPLink; - Matcher matcher2 = pattern2.matcher(url); - Matcher matcher = pattern.matcher(url); + Matcher matcher = null; List vodItems = new ArrayList<>(); ArrayList aslist = new ArrayList<>(); JSONArray lists = new JSONArray(); @@ -520,7 +476,7 @@ public class PushAgent extends Spider { vodAtom.put("vod_pic", pic); vodAtom.put("type_name", typeName); vodAtom.put("vod_content", url); - vodAtom.put("vod_area", type + Token); + vodAtom.put("vod_area", type + refreshToken); if (Misc.isVip(url) && !url.contains("qq.com") && !url.contains("mgtv.com")) { Elements playListA = null; Document doc = Jsoup.parse(OkHttpUtil.string(url, Misc.Headers(0,url))); @@ -596,7 +552,7 @@ public class PushAgent extends Spider { Matcher mgtv1 = mgtv.matcher(url); if (mgtv1.find()) { String Ep = "https://pcweb.api.mgtv.com/episode/list?video_id=" + mgtv1.group(2); - JSONObject Data = new JSONObject(OkHttpUtil.string(Ep, Headers())); + JSONObject Data = new JSONObject(OkHttpUtil.string(Ep, getHeaders())); VodName = Data.getJSONObject("data").getJSONObject("info").getString("title"); JSONArray a = new JSONArray(Data.getJSONObject("data").getString("list")); if (a.length() > 0) { @@ -632,22 +588,25 @@ public class PushAgent extends Spider { result.put("list", lists); return result.toString(); } else if (url.startsWith("magnet")) { - VodName = url; - if (url.length() > 100) { - VodName = url.substring(0, 30) + "..." + url.substring(url.length() - 10); + matcher = Pattern.compile("(^|&)dn=([^&]*)(&|$)").matcher(URLDecoder.decode(url)); + if (matcher.find()) { + VodName = matcher.group(2); } JSONObject result = new JSONObject(); - vodAtom.put("vod_name", VodName); - vodAtom.put("type_name", "磁力"); - vodAtom.put("vod_play_from", "磁力测试"); + vodAtom.put("vod_id", url); + vodAtom.put("vod_name", !VodName.equals("") ? VodName : url); + vodAtom.put("vod_pic", "https://pic.rmb.bdstatic.com/bjh/1d0b02d0f57f0a42201f92caba5107ed.jpeg"); + vodAtom.put("type_name", "磁力链接"); + vodAtom.put("vod_content", url); + vodAtom.put("vod_play_from", "magnet"); vodAtom.put("vod_play_url", "立即播放$" + url); lists.put(vodAtom); - result.put("list", lists); + result.put("list", list); return result.toString(); - } else if (url.startsWith("http") && (matcher2.find())) { + } else if (regexAli.matcher(url).find()) { if(VodName!=null) vodAtom.put("vod_name", VodName); return getAliContent(url,vodAtom); - } else if (url.startsWith("http") && (!matcher.find()) && (!matcher2.find())) { + } else if (url.startsWith("http://") || url.startsWith("https://")) { Document doc = null; String baseUrl = url.replaceAll("(^https?://.*?)(:\\d+)?/.*$", "$1");//https://www.dyk9.com Pattern urlder = Pattern.compile(".*(\\d+.html|\\d+/)$"); @@ -750,7 +709,6 @@ public class PushAgent extends Spider { ArrayList playFrom = new ArrayList<>(); for (int i = 0; i < playList.size(); i++) { - String k = playList.get(i); playFrom.add("嗅探列表" + (i + 1)); } @@ -845,32 +803,27 @@ public class PushAgent extends Spider { return result.toString(); } case "AliYun": - refreshTk(); String[] split = id.split("\\+"); String str3 = split[0]; String str5 = split[2]; - String url = Proxy.localProxyUrl() + "?do=push&type=m3u8&share_id=" + str3 + "&file_id=" + str5; + String url = Proxy.localProxyUrl() + "?do=ali&type=m3u8&share_id=" + str3 + "&file_id=" + str5; result.put("parse", "0"); result.put("playUrl", ""); result.put("url", url); result.put("header", ""); return result.toString(); case "4K原画": { - refreshTk(); split = id.split("\\+"); - String DownLoadUrl = downLoadUrl(split[0], split[1], split[2], split[3]); - HashMap hashMap = new HashMap(); - OkHttpUtil.stringNoRedirect(DownLoadUrl,Headers(),hashMap); - url= OkHttpUtil.getRedirectLocation(hashMap); - JSONObject jSONObject4 = new JSONObject(); - jSONObject4.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"); - jSONObject4.put("Referer", "https://www.aliyundrive.com/"); - JSONObject jSONObject = new JSONObject(); - jSONObject.put("parse", "0"); - jSONObject.put("playUrl", ""); - jSONObject.put("url", url); - jSONObject.put("header",jSONObject4.toString()); - return jSONObject.toString(); + url = getOriginalVideoUrl(split[0], split[1], split[2], split[3]); + Map> headerMap = new HashMap<>(); + OkHttpUtil.stringNoRedirect(url, getHeaders(), headerMap); + String videoUrl = OkHttpUtil.getRedirectLocation(headerMap); + result = new JSONObject(); + result.put("parse", "0"); + result.put("playUrl", ""); + result.put("url", videoUrl); + result.put("header", new JSONObject(getHeaders()).toString()); + return result.toString(); } } if(flag.startsWith("嗅探")){ @@ -887,38 +840,6 @@ public class PushAgent extends Spider { return ""; } - private static String downLoadUrl(String shareid, String token, String fileid, String type) { - try { - HashMap z = Headers(); - z.put("x-share-token", token); - z.put("authorization", j); - if (type.equals("video")) { - JSONObject jSONObject = new JSONObject(); - jSONObject.put("share_id", shareid); - jSONObject.put("category", "live_transcoding"); - jSONObject.put("file_id", fileid); - jSONObject.put("template_id", ""); - JSONObject jSONObject2 = new JSONObject(Post("https://api.aliyundrive.com/v2/file/get_share_link_video_preview_play_info", jSONObject.toString(), z)); - shareid = jSONObject2.getString("share_id"); - fileid = jSONObject2.getString("file_id"); - } - JSONObject jSONObject3 = new JSONObject(); - if (type.equals("video")) { - jSONObject3.put("expire_sec", 600); - jSONObject3.put("file_id", fileid); - jSONObject3.put("share_id", shareid); - } - if (type.equals("audio")) { - jSONObject3.put("share_id", shareid); - jSONObject3.put("get_audio_play_info", true); - jSONObject3.put("file_id", fileid); - } - return new JSONObject(Post("https://api.aliyundrive.com/v2/file/get_share_link_download_url", jSONObject3.toString(), z)).getString("download_url"); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } //修复软件不支持的格式无法嗅探的问题 @Override diff --git a/app/src/main/java/com/github/catvod/spider/PushAgentQQ.java b/app/src/main/java/com/github/catvod/spider/PushAgentQQ.java index cefa51d..4ba23e0 100644 --- a/app/src/main/java/com/github/catvod/spider/PushAgentQQ.java +++ b/app/src/main/java/com/github/catvod/spider/PushAgentQQ.java @@ -136,11 +136,6 @@ public class PushAgentQQ extends Spider { @Override public String searchContent(String key, boolean quick) { - if (key.equals("000")) { - PushAgent.type=0; - }if (key.equals("111")) { - PushAgent.type=1; - } JSONObject result = new JSONObject(); JSONArray videos = new JSONArray(); try {