From 73c4e8d1ee2fd9004c0a4851096a143fe574fba2 Mon Sep 17 00:00:00 2001 From: FongMi Date: Mon, 10 Jul 2023 21:46:30 +0800 Subject: [PATCH] Py and Js support full spider --- .../com/github/catvod/crawler/Spider.java | 4 +- drpy/src/main/java/com/hiker/drpy/Spider.java | 49 ++++++++++++------- .../com/undcover/freedom/pyramid/Spider.java | 17 ++++--- 3 files changed, 44 insertions(+), 26 deletions(-) diff --git a/catvod/src/main/java/com/github/catvod/crawler/Spider.java b/catvod/src/main/java/com/github/catvod/crawler/Spider.java index 24dcc68f6..e4ff41bd7 100644 --- a/catvod/src/main/java/com/github/catvod/crawler/Spider.java +++ b/catvod/src/main/java/com/github/catvod/crawler/Spider.java @@ -47,11 +47,11 @@ public abstract class Spider { return ""; } - public boolean manualVideoCheck() { + public boolean manualVideoCheck() throws Exception { return false; } - public boolean isVideoFormat(String url) { + public boolean isVideoFormat(String url) throws Exception { return false; } diff --git a/drpy/src/main/java/com/hiker/drpy/Spider.java b/drpy/src/main/java/com/hiker/drpy/Spider.java index 4d696c8a8..6f414aa5f 100644 --- a/drpy/src/main/java/com/hiker/drpy/Spider.java +++ b/drpy/src/main/java/com/hiker/drpy/Spider.java @@ -44,8 +44,8 @@ public class Spider extends com.github.catvod.crawler.Spider { return executor.submit(callable); } - private String post(String func, Object... args) throws ExecutionException, InterruptedException { - return submit(() -> (String) jsObject.getJSFunction(func).call(args)).get(); + private Object call(String func, Object... args) throws ExecutionException, InterruptedException { + return submit(() -> jsObject.getJSFunction(func).call(args)).get(); } @Override @@ -56,34 +56,44 @@ public class Spider extends com.github.catvod.crawler.Spider { @Override public String homeContent(boolean filter) throws Exception { - return post("home", filter); + return (String) call("home", filter); } @Override public String homeVideoContent() throws Exception { - return post("homeVod"); + return (String) call("homeVod"); } @Override public String categoryContent(String tid, String pg, boolean filter, HashMap extend) throws Exception { JSObject obj = submit(() -> convert(extend)).get(); - return post("category", tid, pg, filter, obj); + return (String) call("category", tid, pg, filter, obj); } @Override public String detailContent(List ids) throws Exception { - return post("detail", ids.get(0)); + return (String) call("detail", ids.get(0)); } @Override public String searchContent(String key, boolean quick) throws Exception { - return post("search", key, quick); + return (String) call("search", key, quick); } @Override public String playerContent(String flag, String id, List vipFlags) throws Exception { JSArray array = submit(() -> convert(vipFlags)).get(); - return post("play", flag, id, array); + return (String) call("play", flag, id, array); + } + + @Override + public boolean manualVideoCheck() throws Exception { + return (Boolean) call("manualVideoCheck"); + } + + @Override + public boolean isVideoFormat(String url) throws Exception { + return (Boolean) call("isVideoFormat", url); } @Override @@ -93,17 +103,9 @@ public class Spider extends com.github.catvod.crawler.Spider { for (Object key : params.keySet()) obj.setProperty((String) key, (String) params.get(key)); JSONArray array = new JSONArray(((JSArray) jsObject.getJSFunction("proxy").call(obj)).stringify()); Object[] result = new Object[3]; - result[0] = array.get(0); + result[0] = array.opt(0); result[1] = array.opt(1); - Object o = array.opt(2); - if (o instanceof JSONArray) { - JSONArray a = (JSONArray) o; - byte[] bytes = new byte[a.length()]; - for (int i = 0; i < a.length(); i++) bytes[i] = (byte) a.optInt(i); - result[2] = new ByteArrayInputStream(bytes); - } else { - result[2] = new ByteArrayInputStream(o.toString().getBytes()); - } + result[2] = getStream(array.opt(2)); return result; }).get(); } @@ -150,4 +152,15 @@ public class Spider extends com.github.catvod.crawler.Spider { for (int i = 0; i < items.size(); i++) array.set(items.get(i), i); return array; } + + private ByteArrayInputStream getStream(Object o) { + if (o instanceof JSONArray) { + JSONArray a = (JSONArray) o; + byte[] bytes = new byte[a.length()]; + for (int i = 0; i < a.length(); i++) bytes[i] = (byte) a.optInt(i); + return new ByteArrayInputStream(bytes); + } else { + return new ByteArrayInputStream(o.toString().getBytes()); + } + } } diff --git a/pyramid/src/main/java/com/undcover/freedom/pyramid/Spider.java b/pyramid/src/main/java/com/undcover/freedom/pyramid/Spider.java index 88f6326e7..ccadc22a8 100644 --- a/pyramid/src/main/java/com/undcover/freedom/pyramid/Spider.java +++ b/pyramid/src/main/java/com/undcover/freedom/pyramid/Spider.java @@ -5,7 +5,6 @@ import android.util.ArrayMap; import com.chaquo.python.PyObject; import com.github.catvod.net.OkHttp; -import com.github.catvod.spider.Proxy; import com.google.gson.Gson; import org.json.JSONObject; @@ -70,6 +69,16 @@ public class Spider extends com.github.catvod.crawler.Spider { return app.callAttr("playerContent", obj, flag, id, gson.toJson(vipFlags)).toString(); } + @Override + public boolean manualVideoCheck() { + return app.callAttr("manualVideoCheck", obj).toBoolean(); + } + + @Override + public boolean isVideoFormat(String url) { + return app.callAttr("isVideoFormat", obj, url).toBoolean(); + } + @Override public Object[] proxyLocal(Map params) throws Exception { List list = app.callAttr("localProxy", params).asList(); @@ -84,7 +93,7 @@ public class Spider extends com.github.catvod.crawler.Spider { if (object.optString("type").equals("stream")) { return new Object[]{code, type, OkHttp.newCall(url, param, header).execute().body().byteStream()}; } else { - content = replaceUrl(content.isEmpty() ? OkHttp.newCall(url, header).execute().body().string() : content); + if (content.isEmpty()) content = OkHttp.newCall(url, header).execute().body().string(); return new Object[]{code, type, new ByteArrayInputStream(content.getBytes())}; } } @@ -108,8 +117,4 @@ public class Spider extends com.github.catvod.crawler.Spider { } return params; } - - private String replaceUrl(String content) { - return content.replace("http://127.0.0.1:UndCover/proxy", Proxy.getUrl()); - } }