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 82d56762..d2904b21 100644 --- a/app/src/main/java/com/github/catvod/ali/API.java +++ b/app/src/main/java/com/github/catvod/ali/API.java @@ -13,6 +13,7 @@ import android.widget.FrameLayout; import android.widget.ImageView; import com.github.catvod.BuildConfig; +import com.github.catvod.bean.Result; import com.github.catvod.bean.Sub; import com.github.catvod.bean.Vod; import com.github.catvod.bean.ali.Code; @@ -37,6 +38,7 @@ import java.io.ByteArrayInputStream; import java.io.File; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -337,7 +339,7 @@ public class API { return sb.toString(); } - public List getSub(String[] ids) { + public List getSubs(String[] ids) { List sub = new ArrayList<>(); for (String text : ids) { if (!text.contains("@@@")) continue; @@ -367,7 +369,7 @@ public class API { } } - public String getPreviewUrl(String fileId, String flag) { + public JSONObject getVideoPreviewPlayInfo(String fileId) { try { SpiderDebug.log("getPreviewUrl..." + fileId); tempIds.add(0, copy(fileId)); @@ -377,17 +379,35 @@ public class API { body.put("category", "live_transcoding"); body.put("url_expire_sec", "14400"); String json = oauth("openFile/getVideoPreviewPlayInfo", body.toString(), true); - JSONArray taskList = new JSONObject(json).getJSONObject("video_preview_play_info").getJSONArray("live_transcoding_task_list"); - return getPreviewQuality(taskList, flag); + return new JSONObject(json).getJSONObject("video_preview_play_info"); } catch (Exception e) { e.printStackTrace(); - return ""; + return new JSONObject(); } finally { Init.execute(this::deleteAll); } } - private String getPreviewQuality(JSONArray taskList, String flag) throws Exception { + public String playerContent(String[] ids) { + return Result.get().url(getDownloadUrl(ids[0])).subs(getSubs(ids)).header(getHeader()).string(); + } + + public String playerContent(String[] ids, String flag) { + try { + JSONObject playInfo = getVideoPreviewPlayInfo(ids[0]); + String url = getPreviewUrl(playInfo, flag); + List subs = getSubs(ids); + subs.addAll(getSubs(playInfo)); + return Result.get().url(url).subs(subs).header(getHeader()).string(); + } catch (Exception e) { + e.printStackTrace(); + return Result.get().url("").string(); + } + } + + private String getPreviewUrl(JSONObject playInfo, String flag) throws Exception { + if (!playInfo.has("live_transcoding_task_list")) return ""; + JSONArray taskList = playInfo.getJSONArray("live_transcoding_task_list"); for (int i = 0; i < taskList.length(); ++i) { JSONObject task = taskList.getJSONObject(i); if (task.getString("template_id").equals(quality.get(flag))) { @@ -397,6 +417,19 @@ public class API { return taskList.getJSONObject(0).getString("url"); } + private List getSubs(JSONObject playInfo) throws Exception { + if (!playInfo.has("live_transcoding_subtitle_task_list")) return Collections.emptyList(); + JSONArray taskList = playInfo.getJSONArray("live_transcoding_subtitle_task_list"); + List subs = new ArrayList<>(); + for (int i = 0; i < taskList.length(); ++i) { + JSONObject task = taskList.getJSONObject(i); + String lang = task.getString("language"); + String url = task.getString("url"); + subs.add(Sub.create().url(url).name(lang).lang(lang).ext("vtt")); + } + return subs; + } + private String copy(String fileId) throws Exception { SpiderDebug.log("Copy..." + fileId); String json = "{\"requests\":[{\"body\":{\"file_id\":\"%s\",\"share_id\":\"%s\",\"auto_rename\":true,\"to_parent_file_id\":\"root\",\"to_drive_id\":\"%s\"},\"headers\":{\"Content-Type\":\"application/json\"},\"id\":\"0\",\"method\":\"POST\",\"url\":\"/file/copy\"}],\"resource\":\"file\"}"; 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 02e9cbc6..72e9f556 100644 --- a/app/src/main/java/com/github/catvod/spider/Ali.java +++ b/app/src/main/java/com/github/catvod/spider/Ali.java @@ -37,8 +37,7 @@ public class Ali extends Spider { @Override public String playerContent(String flag, String id, List vipFlags) { String[] ids = id.split("\\+"); - String url = flag.equals("原畫") ? API.get().getDownloadUrl(ids[0]) : API.get().getPreviewUrl(ids[0], flag); - return Result.get().url(url).subs(API.get().getSub(ids)).header(API.get().getHeader()).parse(0).string(); + return flag.equals("原畫") ? API.get().playerContent(ids) : API.get().playerContent(ids, flag); } public static Object[] proxy(Map params) { diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 3a86f4a0..43ccaf36 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 c31b046f..ff90c7d4 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -424328e448ccb8365a6e5a9477570853 +22a9f82f400252c5adcf68f372540501