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..0d8ccd97 100644 --- a/app/src/main/java/com/github/catvod/ali/API.java +++ b/app/src/main/java/com/github/catvod/ali/API.java @@ -283,7 +283,7 @@ public class API { List playFrom = Arrays.asList("原畫", "普畫"); List episode = new ArrayList<>(); List playUrl = new ArrayList<>(); - for (Item file : files) episode.add(file.getDisplayName() + "$" + file.getFileId() + findSubs(file.getName(), subs)); + for (Item file : files) episode.add(file.getDisplayName() + "$" + API.get().shareId + "@" + file.getFileId() + findSubs(file.getName(), subs)); for (int i = 0; i < playFrom.size(); i++) playUrl.add(TextUtils.join("#", episode)); Vod vod = new Vod(); vod.setVodId(url); diff --git a/app/src/main/java/com/github/catvod/bean/Vod.java b/app/src/main/java/com/github/catvod/bean/Vod.java index c986d8a9..63f09c89 100644 --- a/app/src/main/java/com/github/catvod/bean/Vod.java +++ b/app/src/main/java/com/github/catvod/bean/Vod.java @@ -116,7 +116,11 @@ public class Vod { public void setVodPlayUrl(String vodPlayUrl) { this.vodPlayUrl = vodPlayUrl; } - + + public String getVodPlayUrl() { + return vodPlayUrl; + } + public void setVodTag(String vodTag) { this.vodTag = vodTag; } 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 2741d036..111fd0af 100644 --- a/app/src/main/java/com/github/catvod/spider/Ali.java +++ b/app/src/main/java/com/github/catvod/spider/Ali.java @@ -1,13 +1,12 @@ package com.github.catvod.spider; import android.content.Context; - +import android.text.TextUtils; import com.github.catvod.ali.API; import com.github.catvod.bean.Result; import com.github.catvod.crawler.Spider; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -36,13 +35,52 @@ public class Ali extends Spider { @Override public String playerContent(String flag, String id, List vipFlags) { - return API.get().playerContent(id.split("\\+"), flag.equals("原畫")); + API.get().setShareId(id.split("@")[0]); + return API.get().playerContent(id.split("@")[1].split("\\+"), flag.split("#")[0].equals("原畫")); + } + + /** + * 获取详情内容视频播放地址(多 share_link 模式) + * + * @param ids share_link 集合 + * @return 详情内容视频播放地址 + */ + public String detailContentVodPlayUrl(List ids) throws Exception { + List playUrl = new ArrayList<>(); + for (String id : ids) { + Matcher matcher = pattern.matcher(id); + if (matcher.find()) { + String shareId = matcher.group(1); + String fileId = matcher.groupCount() == 3 ? matcher.group(3) : ""; + API.get().setShareId(shareId); + playUrl.add(API.get().getVod(id, fileId).getVodPlayUrl()); + } + } + return TextUtils.join("$$$", playUrl); + } + + /** + * 获取详情内容视频播放来源(多 shared_link 模式) + * + * @param ids share_link 集合 + * @return 详情内容视频播放来源 + */ + public String detailContentVodPlayFrom(List ids) { + List playFrom = new ArrayList<>(); + if (ids.size() > 1) { + for (int i = 1; i <= ids.size(); i++) { + playFrom.addAll(Arrays.asList(String.format(Locale.CHINA, "原畫#%02d", i), String.format(Locale.CHINA, "普畫#%02d", i))); + } + } else { + playFrom.addAll(Arrays.asList("原畫", "普畫")); + } + return TextUtils.join("$$$", playFrom); } public static Object[] proxy(Map params) throws Exception { String type = params.get("type"); - if (type.equals("sub")) return API.get().proxySub(params); - if (type.equals("token")) return API.get().getToken(); + if ("sub".equals(type)) return API.get().proxySub(params); + if ("token".equals(type)) return API.get().getToken(); return null; } } \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/Wogg.java b/app/src/main/java/com/github/catvod/spider/Wogg.java index 9483ed22..e0af9ca3 100644 --- a/app/src/main/java/com/github/catvod/spider/Wogg.java +++ b/app/src/main/java/com/github/catvod/spider/Wogg.java @@ -15,7 +15,10 @@ import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.net.URLEncoder; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -27,7 +30,6 @@ public class Wogg extends Ali { private final String siteURL = "http://tvfan.xxooo.cf"; private JSONObject filters; - private final Pattern regexAli = Pattern.compile("(https://www.aliyundrive.com/s/[^\"]+)"); private final Pattern regexCategory = Pattern.compile("/vodtype/(\\w+).html"); private final Pattern regexPageTotal = Pattern.compile("\\$\\(\"\\.mac_total\"\\)\\.text\\('(\\d+)'\\);"); @@ -72,7 +74,7 @@ public class Wogg extends Ali { } } - Document doc = Jsoup.parse(OkHttp.string(siteURL + String.format("/index.php/vodshow/%s.html", String.join("-", urlParams)), getHeader())); + Document doc = Jsoup.parse(OkHttp.string(String.format("%s/index.php/vodshow/%s.html", siteURL, String.join("-", urlParams)), getHeader())); int page = Integer.parseInt(pg), limit = 72, total = 0; Matcher matcher = regexPageTotal.matcher(doc.html()); if (matcher.find()) { @@ -97,9 +99,37 @@ public class Wogg extends Ali { @Override public String detailContent(List ids) throws Exception { - Matcher matcher = regexAli.matcher(OkHttp.string(siteURL + ids.get(0), getHeader())); - if (matcher.find()) return super.detailContent(Collections.singletonList(matcher.group(1))); - return ""; + String vodId = ids.get(0); + + Document doc = Jsoup.parse(OkHttp.string(siteURL + vodId, getHeader())); + + Vod item = new Vod(); + item.setVodId(vodId); + item.setVodName(doc.selectFirst(".video-info-header > .page-title").text()); + item.setVodPic(doc.selectFirst(".module-item-pic img").attr("data-src")); + item.setVodArea(doc.select(".video-info-header a.tag-link").last().text()); + item.setTypeName(String.join(",", doc.select(".video-info-header div.tag-link a").eachText())); + + List shareLinks = doc.select(".module-row-text").eachAttr("data-clipboard-text"); + item.setVodPlayUrl(super.detailContentVodPlayUrl(shareLinks)); + item.setVodPlayFrom(super.detailContentVodPlayFrom(shareLinks)); + + Elements elements = doc.select(".video-info-item"); + for (Element e : elements) { + String title = e.previousElementSibling().text(); + if (title.contains("导演")) { + item.setVodDirector(String.join(",", e.select("a").eachText())); + } else if (title.contains("主演")) { + item.setVodActor(String.join(",", e.select("a").eachText())); + } else if (title.contains("年代")) { + item.setVodYear(e.selectFirst("a").text().trim()); + } else if (title.contains("备注")) { + item.setVodRemarks(e.text().trim()); + } else if (title.contains("剧情")) { + item.setVodContent(e.selectFirst(".sqjj_a").text().replace("[收起部分]", "").trim()); + } + } + return Result.string(item); } @Override