diff --git a/app/src/main/java/com/github/catvod/spider/AList.java b/app/src/main/java/com/github/catvod/spider/AList.java index 292dc53..5363f8d 100644 --- a/app/src/main/java/com/github/catvod/spider/AList.java +++ b/app/src/main/java/com/github/catvod/spider/AList.java @@ -22,6 +22,7 @@ import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; +import java.io.ByteArrayInputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -36,6 +37,8 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; +import okhttp3.Response; + public class AList extends Spider { private List drives; @@ -150,10 +153,10 @@ public class AList extends Spider { public String playerContent(String flag, String id, List vipFlags) { String[] ids = id.split("~~~"); String url = getDetail(ids[0]).getUrl(); - return Result.get().url(url).header(getPlayHeader(url)).subs(getSub(ids)).string(); + return Result.get().url(url).header(getPlayHeader(url)).subs(getSubs(ids)).string(); } - private Map getPlayHeader(String url) { + private static Map getPlayHeader(String url) { try { Uri uri = Uri.parse(url); Map header = new HashMap<>(); @@ -244,19 +247,31 @@ public class AList extends Spider { return sb.toString(); } - private List getSub(String[] ids) { + private List getSubs(String[] ids) { List sub = new ArrayList<>(); for (String text : ids) { if (!text.contains("@@@")) continue; String[] split = text.split("@@@"); String name = split[0]; String ext = split[1]; - String url = getDetail(split[2]).getUrl(); + String url = Proxy.getUrl() + "?do=alist&type=sub&url=" + getDetail(split[2]).getUrl(); sub.add(Sub.create().name(name).ext(ext).url(url)); } return sub; } + public static Object[] proxy(Map params) throws Exception { + if (!"sub".equals(params.get("type"))) return null; + String url = params.get("url"); + Response res = OkHttp.newCall(url, getPlayHeader(url)); + byte[] body = Util.toUtf8(res.body().bytes()); + Object[] result = new Object[3]; + result[0] = 200; + result[1] = "application/octet-stream"; + result[2] = new ByteArrayInputStream(body); + return result; + } + class Job implements Callable> { private final Drive drive; 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 2d801be..09a9e81 100644 --- a/app/src/main/java/com/github/catvod/spider/Proxy.java +++ b/app/src/main/java/com/github/catvod/spider/Proxy.java @@ -17,6 +17,8 @@ public class Proxy extends Spider { return new Object[]{200, "text/plain; charset=utf-8", new ByteArrayInputStream("ok".getBytes("UTF-8"))}; case "ali": return Ali.proxy(params); + case "alist": + return AList.proxy(params); case "bili": return Bili.proxy(params); case "webdav": diff --git a/app/src/main/java/com/github/catvod/utils/Util.java b/app/src/main/java/com/github/catvod/utils/Util.java index d6b74f1..1554f88 100644 --- a/app/src/main/java/com/github/catvod/utils/Util.java +++ b/app/src/main/java/com/github/catvod/utils/Util.java @@ -62,12 +62,20 @@ public class Util { UniversalDetector detector = new UniversalDetector(null); detector.handleData(bytes, 0, bytes.length); detector.dataEnd(); - return new String(bytes, detector.getDetectedCharset()).getBytes("UTF-8"); + return removeBOM(new String(bytes, detector.getDetectedCharset()).getBytes("UTF-8")); } catch (Exception e) { return bytes; } } + public static byte[] removeBOM(byte[] bytes) { + byte[] bom = {(byte) 0xEF, (byte) 0xBB, (byte) 0xBF}; + if (bytes.length < 3 || !Arrays.equals(Arrays.copyOf(bytes, 3), bom)) return bytes; + byte[] newBytes = new byte[bytes.length - 3]; + System.arraycopy(bytes, 3, newBytes, 0, newBytes.length); + return newBytes; + } + public static boolean isSub(String ext) { return SUB.contains(ext); } diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 73d8173..f5730b1 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 6b57dea..ff485e3 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -3569e45ba9e1c3200bff36d96acf4241 +4c7e0340480fc0778222c0a0bb8bfc0c