Py and Js support full spider

pull/137/head
FongMi 3 years ago
parent 76dfa58e84
commit 73c4e8d1ee
  1. 4
      catvod/src/main/java/com/github/catvod/crawler/Spider.java
  2. 49
      drpy/src/main/java/com/hiker/drpy/Spider.java
  3. 17
      pyramid/src/main/java/com/undcover/freedom/pyramid/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;
}

@ -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<String, String> 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<String> 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<String> 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());
}
}
}

@ -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<PyObject> 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());
}
}

Loading…
Cancel
Save