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 9b368068..dab37b86 100644 --- a/app/src/main/java/com/github/catvod/spider/Bili.java +++ b/app/src/main/java/com/github/catvod/spider/Bili.java @@ -39,14 +39,14 @@ import java.util.Map; public class Bili extends Spider { private static final String COOKIE = "buvid3=84B0395D-C9F2-C490-E92E-A09AB48FE26E71636infoc"; - private static String cookie; + private String cookie; private JsonObject extend; private boolean login; private boolean isVip; private Wbi wbi; - private static Map getHeader() { + private Map getHeader() { Map headers = new HashMap<>(); headers.put("User-Agent", Util.CHROME); headers.put("Referer", "https://www.bilibili.com"); @@ -198,12 +198,13 @@ public class Bili extends Spider { String dan = "https://api.bilibili.com/x/v1/dm/list.so?oid=".concat(cid); for (int i = 0; i < acceptDesc.length; i++) { url.add(acceptDesc[i]); - url.add("proxy://do=bili" + "&aid=" + aid + "&cid=" + cid + "&qn=" + acceptQuality[i] + "&type=mpd"); + url.add(Proxy.getUrl(siteKey, "&aid=" + aid + "&cid=" + cid + "&qn=" + acceptQuality[i] + "&type=mpd")); } return Result.get().url(url).danmaku(Arrays.asList(Danmaku.create().name("B站").url(dan))).dash().header(getHeader()).string(); } - public static Object[] proxy(Map params) { + @Override + public Object[] proxyLocal(Map params) { String aid = params.get("aid"); String cid = params.get("cid"); String qn = params.get("qn"); @@ -223,7 +224,7 @@ public class Bili extends Spider { return result; } - private static HashMap getAudioFormat() { + private HashMap getAudioFormat() { HashMap audios = new HashMap<>(); audios.put("30280", "192000"); audios.put("30232", "132000"); @@ -231,7 +232,7 @@ public class Bili extends Spider { return audios; } - private static void findAudio(Dash dash, StringBuilder sb) { + private void findAudio(Dash dash, StringBuilder sb) { for (Media audio : dash.getAudio()) { for (String key : getAudioFormat().keySet()) { if (audio.getId().equals(key)) { @@ -241,7 +242,7 @@ public class Bili extends Spider { } } - private static void findVideo(Dash dash, StringBuilder sb, String qn) { + private void findVideo(Dash dash, StringBuilder sb, String qn) { for (Media video : dash.getVideo()) { if (video.getId().equals(qn)) { sb.append(getMedia(video)); @@ -249,7 +250,7 @@ public class Bili extends Spider { } } - private static String getMedia(Media media) { + private String getMedia(Media media) { if (media.getMimeType().startsWith("video")) { return getAdaptationSet(media, String.format(Locale.getDefault(), "height='%s' width='%s' frameRate='%s' sar='%s'", media.getHeight(), media.getWidth(), media.getFrameRate(), media.getSar())); } else if (media.getMimeType().startsWith("audio")) { @@ -259,14 +260,14 @@ public class Bili extends Spider { } } - private static String getAdaptationSet(Media media, String params) { + private String getAdaptationSet(Media media, String params) { String id = media.getId() + "_" + media.getCodecId(); String type = media.getMimeType().split("/")[0]; String baseUrl = media.getBaseUrl().replace("&", "&"); return String.format(Locale.getDefault(), "\n" + "\n" + "\n" + "%s\n" + "\n" + "\n" + "\n" + "\n" + "", type, id, media.getBandWidth(), media.getCodecs(), media.getMimeType(), params, media.getStartWithSap(), baseUrl, media.getSegmentBase().getIndexRange(), media.getSegmentBase().getInitialization()); } - private static String getMpd(Dash dash, String videoList, String audioList) { + private String getMpd(Dash dash, String videoList, String audioList) { return String.format(Locale.getDefault(), "\n" + "\n" + "%s\n" + "%s\n" + "\n" + "", dash.getDuration(), dash.getMinBufferTime(), dash.getDuration(), videoList, audioList); } 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 1582f8be..dfd611b1 100644 --- a/app/src/main/java/com/github/catvod/spider/Proxy.java +++ b/app/src/main/java/com/github/catvod/spider/Proxy.java @@ -13,13 +13,9 @@ public class Proxy { private static Method method; private static int port; - public static Object[] proxy(Map params) throws Exception { - return switch (params.get("do")) { - case "ck" -> new Object[]{200, "text/plain; charset=utf-8", new ByteArrayInputStream("ok".getBytes(StandardCharsets.UTF_8))}; - case "bili" -> Bili.proxy(params); - case "webdav" -> WebDAV.vod(params); - default -> null; - }; + public static Object[] proxy(Map params) { + if ("ck".equals(params.get("do"))) return new Object[]{200, "text/plain; charset=utf-8", new ByteArrayInputStream("ok".getBytes(StandardCharsets.UTF_8))}; + return null; } public static void init() { diff --git a/app/src/main/java/com/github/catvod/spider/WebDAV.java b/app/src/main/java/com/github/catvod/spider/WebDAV.java index b8745c59..313f6a96 100644 --- a/app/src/main/java/com/github/catvod/spider/WebDAV.java +++ b/app/src/main/java/com/github/catvod/spider/WebDAV.java @@ -28,7 +28,7 @@ import java.util.TreeMap; public class WebDAV extends Spider { - private static List drives; + private List drives; private List allExt; private String extend; @@ -53,7 +53,7 @@ public class WebDAV extends Spider { return Util.removeExt(item.getName()); } - private static Drive getDrive(String name) { + private Drive getDrive(String name) { return drives.get(drives.indexOf(new Drive(name))); } @@ -126,7 +126,20 @@ public class WebDAV extends Spider { @Override public String playerContent(String flag, String id, List vipFlags) { String[] ids = id.split("~~~"); - return Result.get().url(getProxyUrl(ids[0])).subs(getSub(ids)).string(); + return Result.get().url(Proxy.getUrl(siteKey, "&url=" + ids[0])).subs(getSub(ids)).string(); + } + + @Override + public Object[] proxyLocal(Map params) throws IOException { + String url = params.get("url"); + String key = url.contains("/") ? url.substring(0, url.indexOf("/")) : url; + url = url.substring(key.length()); + Drive drive = getDrive(key); + Object[] result = new Object[3]; + result[0] = 200; + result[1] = "application/octet-stream"; + result[2] = drive.getWebdav().get(drive.getHost() + url, getHeaders(params)); + return result; } private List getList(Drive drive, String path, List ext) throws IOException { @@ -151,7 +164,7 @@ public class WebDAV extends Spider { private String findSubs(Drive drive, DavResource res, List items) { StringBuilder sb = new StringBuilder(); for (DavResource item : items) if (removeExt(item).equals(removeExt(res))) sb.append("~~~").append(item.getName()).append("@@@").append(getExt(item)).append("@@@").append(drive.getName()).append(item.getPath()); - return !sb.isEmpty() ? sb.toString() : findSubs(drive, items); + return sb.length() > 0 ? sb.toString() : findSubs(drive, items); } private String findSubs(Drive drive, List items) { @@ -167,29 +180,13 @@ public class WebDAV extends Spider { String[] split = text.split("@@@"); String name = split[0]; String ext = split[1]; - String url = getProxyUrl(split[2]); + String url = Proxy.getUrl(siteKey, "&url=" + split[2]); sub.add(Sub.create().name(name).ext(ext).url(url)); } return sub; } - private String getProxyUrl(String url) { - return "proxy://do=webdav&url=" + url; - } - - public static Object[] vod(Map params) throws IOException { - String url = params.get("url"); - String key = url.contains("/") ? url.substring(0, url.indexOf("/")) : url; - url = url.substring(key.length()); - Drive drive = getDrive(key); - Object[] result = new Object[3]; - result[0] = 200; - result[1] = "application/octet-stream"; - result[2] = drive.getWebdav().get(drive.getHost() + url, getHeaders(params)); - return result; - } - - private static Map getHeaders(Map params) { + private Map getHeaders(Map params) { Map headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); List keys = Arrays.asList("referer", "icy-metadata", "range", "connection", "accept-encoding", "user-agent"); for (String key : params.keySet()) if (keys.contains(key)) headers.put(key, params.get(key)); diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 2648cf01..3da6d911 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 2ac689cd..e906751d 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -a460452b3a982dc9f4cf82e75b09391b +a0eb7f9582a738589ec05589299052c9