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 710593ba..57020ff9 100644 --- a/app/src/main/java/com/github/catvod/ali/API.java +++ b/app/src/main/java/com/github/catvod/ali/API.java @@ -17,7 +17,12 @@ 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.*; +import com.github.catvod.bean.ali.Code; +import com.github.catvod.bean.ali.Data; +import com.github.catvod.bean.ali.Drive; +import com.github.catvod.bean.ali.Item; +import com.github.catvod.bean.ali.OAuth; +import com.github.catvod.bean.ali.User; import com.github.catvod.crawler.SpiderDebug; import com.github.catvod.net.OkHttp; import com.github.catvod.net.OkResult; @@ -412,7 +417,7 @@ public class API { private String getPreviewContent(String[] ids) { try { JSONObject playInfo = getVideoPreviewPlayInfo(ids[0]); - String url = getPreviewUrl(playInfo); + List url = getPreviewUrl(playInfo); List subs = getSubs(ids); subs.addAll(getSubs(playInfo)); return Result.get().url(url).m3u8().subs(subs).header(getHeader()).string(); @@ -422,19 +427,17 @@ public class API { } } - private String getPreviewUrl(JSONObject playInfo) throws Exception { - if (!playInfo.has("live_transcoding_task_list")) return ""; + private List getPreviewUrl(JSONObject playInfo) throws Exception { + if (!playInfo.has("live_transcoding_task_list")) return Collections.emptyList(); JSONArray taskList = playInfo.getJSONArray("live_transcoding_task_list"); - List templates = Arrays.asList("UHD", "QHD", "FHD", "HD", "SD", "LD"); - for (String template : templates) { - for (int i = 0; i < taskList.length(); ++i) { - JSONObject task = taskList.getJSONObject(i); - if (task.getString("template_id").equals(template)) { - return task.getString("url"); - } - } + List url = new ArrayList<>(); + for (int i = taskList.length() - 1; i >= 0; i--) { + JSONObject task = taskList.getJSONObject(i); + if (!task.optString("status").equals("finished")) continue; + url.add(task.optString("template_id")); + url.add(task.optString("url")); } - return taskList.getJSONObject(0).getString("url"); + return url; } private List getSubs(JSONObject playInfo) throws Exception { diff --git a/app/src/main/java/com/github/catvod/bean/Result.java b/app/src/main/java/com/github/catvod/bean/Result.java index 6954f6b3..1da6c813 100644 --- a/app/src/main/java/com/github/catvod/bean/Result.java +++ b/app/src/main/java/com/github/catvod/bean/Result.java @@ -26,7 +26,7 @@ public class Result { @SerializedName("format") private String format; @SerializedName("url") - private String url; + private Object url; @SerializedName("subs") private List subs; @SerializedName("parse") @@ -131,6 +131,11 @@ public class Result { return this; } + public Result url(List url) { + this.url = url; + return this; + } + public Result format(String format) { this.format = format; return this; diff --git a/app/src/main/java/com/github/catvod/spider/Bili.java b/app/src/main/java/com/github/catvod/spider/Bili.java index d7a849f1..afb995c6 100644 --- a/app/src/main/java/com/github/catvod/spider/Bili.java +++ b/app/src/main/java/com/github/catvod/spider/Bili.java @@ -58,7 +58,6 @@ public class Bili extends Spider { private JsonObject extend; private String cookie; private boolean login; - private boolean vip; private Map getHeader(String cookie) { Map headers = new HashMap<>(); @@ -163,22 +162,22 @@ public class Bili extends Spider { vod.setVodContent(detail.getDesc()); vod.setVodRemarks(detail.getDuration() / 60 + "分鐘"); - Map vod_play = new LinkedHashMap<>(); - ArrayList playList = new ArrayList<>(); - for (Page page : detail.getPages()) playList.add(page.getPart() + "$" + aid + "+" + page.getCid()); - vod_play.put("B站", TextUtils.join("#", playList)); + LinkedHashMap flag = new LinkedHashMap<>(); + ArrayList episode = new ArrayList<>(); + for (Page page : detail.getPages()) episode.add(page.getPart() + "$" + aid + "+" + page.getCid()); + flag.put("B站", TextUtils.join("#", episode)); + episode = new ArrayList<>(); api = "https://api.bilibili.com/x/web-interface/archive/related?bvid=" + id; - JSONArray related = new JSONObject(OkHttp.string(api, getMember())).optJSONArray("data"); - playList = new ArrayList<>(); - for (int i = 0; i < related.length(); i++) { - JSONObject relatedData = related.getJSONObject(i); - playList.add(relatedData.getString("title") + "$" + relatedData.optLong("aid") + "+" + relatedData.optLong("cid")); + JSONArray array = new JSONObject(OkHttp.string(api, getMember())).optJSONArray("data"); + for (int i = 0; i < array.length(); i++) { + JSONObject object = array.getJSONObject(i); + episode.add(object.getString("title") + "$" + object.optLong("aid") + "+" + object.optLong("cid")); } - vod_play.put("相关推荐", TextUtils.join("#", playList)); + flag.put("相关推荐", TextUtils.join("#", episode)); - vod.setVodPlayFrom(TextUtils.join("$$$", vod_play.keySet())); - vod.setVodPlayUrl(TextUtils.join("$$$", vod_play.values())); + vod.setVodPlayFrom(TextUtils.join("$$$", flag.keySet())); + vod.setVodPlayUrl(TextUtils.join("$$$", flag.values())); return Result.string(vod); } @@ -258,7 +257,6 @@ public class Bili extends Spider { private void checkLogin() { String json = OkHttp.string("https://api.bilibili.com/x/web-interface/nav", getMember()); Data data = Resp.objectFrom(json).getData(); - vip = data.getVipType() > 0; login = data.isLogin(); getQRCode(); }