pull/137/head
FongMi 2 years ago
parent 9cf2d1da3e
commit 56fa69bff7
  1. 17
      quickjs/src/main/assets/js/lib/http.js
  2. 27
      quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java
  3. 9
      quickjs/src/main/java/com/fongmi/quickjs/method/Function.java
  4. 26
      quickjs/src/main/java/com/fongmi/quickjs/method/Global.java

@ -0,0 +1,17 @@
let req = (url, options) => http(url, Object.assign({
async: false
}, options));
function http(url, options = {}) {
if (options?.async === false) return _http(url, options)
return new Promise(resolve => _http(url, Object.assign({
complete: res => resolve(res)
}, options))).catch(err => {
console.error(err.name, err.message, err.stack)
return {
ok: false,
status: 500,
url
}
})
}

@ -10,6 +10,7 @@ import com.fongmi.quickjs.method.Local;
import com.fongmi.quickjs.utils.JSUtil; import com.fongmi.quickjs.utils.JSUtil;
import com.fongmi.quickjs.utils.Module; import com.fongmi.quickjs.utils.Module;
import com.github.catvod.utils.Json; import com.github.catvod.utils.Json;
import com.github.catvod.utils.Path;
import com.whl.quickjs.android.QuickJSLoader; import com.whl.quickjs.android.QuickJSLoader;
import com.whl.quickjs.wrapper.JSArray; import com.whl.quickjs.wrapper.JSArray;
import com.whl.quickjs.wrapper.JSMethod; import com.whl.quickjs.wrapper.JSMethod;
@ -57,8 +58,8 @@ public class Spider extends com.github.catvod.crawler.Spider {
return executor.submit(callable); return executor.submit(callable);
} }
private Object[] call(String func, Object... args) throws Exception { private Object call(String func, Object... args) throws Exception {
return submit(Function.call(jsObject, func, args)).get(); return executor.submit((Function.call(jsObject, func, args))).get();
} }
@Override @Override
@ -68,49 +69,49 @@ public class Spider extends com.github.catvod.crawler.Spider {
@Override @Override
public String homeContent(boolean filter) throws Exception { public String homeContent(boolean filter) throws Exception {
return (String) call("home", filter)[0]; return (String) call("home", filter);
} }
@Override @Override
public String homeVideoContent() throws Exception { public String homeVideoContent() throws Exception {
return (String) call("homeVod")[0]; return (String) call("homeVod");
} }
@Override @Override
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) throws Exception { public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) throws Exception {
JSObject obj = submit(() -> JSUtil.toObj(ctx, extend)).get(); JSObject obj = submit(() -> JSUtil.toObj(ctx, extend)).get();
return (String) call("category", tid, pg, filter, obj)[0]; return (String) call("category", tid, pg, filter, obj);
} }
@Override @Override
public String detailContent(List<String> ids) throws Exception { public String detailContent(List<String> ids) throws Exception {
return (String) call("detail", ids.get(0))[0]; return (String) call("detail", ids.get(0));
} }
@Override @Override
public String searchContent(String key, boolean quick) throws Exception { public String searchContent(String key, boolean quick) throws Exception {
return (String) call("search", key, quick)[0]; return (String) call("search", key, quick);
} }
@Override @Override
public String searchContent(String key, boolean quick, String pg) throws Exception { public String searchContent(String key, boolean quick, String pg) throws Exception {
return (String) call("search", key, quick, pg)[0]; return (String) call("search", key, quick, pg);
} }
@Override @Override
public String playerContent(String flag, String id, List<String> vipFlags) throws Exception { public String playerContent(String flag, String id, List<String> vipFlags) throws Exception {
JSArray array = submit(() -> JSUtil.toArray(ctx, vipFlags)).get(); JSArray array = submit(() -> JSUtil.toArray(ctx, vipFlags)).get();
return (String) call("play", flag, id, array)[0]; return (String) call("play", flag, id, array);
} }
@Override @Override
public boolean manualVideoCheck() throws Exception { public boolean manualVideoCheck() throws Exception {
return (Boolean) call("sniffer")[0]; return (Boolean) call("sniffer");
} }
@Override @Override
public boolean isVideoFormat(String url) throws Exception { public boolean isVideoFormat(String url) throws Exception {
return (Boolean) call("isVideo", url)[0]; return (Boolean) call("isVideo", url);
} }
@Override @Override
@ -142,6 +143,7 @@ public class Spider extends com.github.catvod.crawler.Spider {
QuickJSLoader.initConsoleLog(ctx); QuickJSLoader.initConsoleLog(ctx);
Global.create(ctx, executor).setProperty(); Global.create(ctx, executor).setProperty();
ctx.getGlobalObject().setProperty("local", Local.class); ctx.getGlobalObject().setProperty("local", Local.class);
ctx.getGlobalObject().getContext().evaluate(Path.asset("js/lib/http.js"));
} }
private void createDex() { private void createDex() {
@ -191,6 +193,7 @@ public class Spider extends com.github.catvod.crawler.Spider {
String global = "globalThis." + key; String global = "globalThis." + key;
String content = Module.get().load(api); String content = Module.get().load(api);
if (content.contains("__jsEvalReturn")) { if (content.contains("__jsEvalReturn")) {
ctx.evaluate("req = http");
return content.concat(global).concat(" = __jsEvalReturn()"); return content.concat(global).concat(" = __jsEvalReturn()");
} else if (content.contains("__JS_SPIDER__")) { } else if (content.contains("__JS_SPIDER__")) {
return content.replace("__JS_SPIDER__", global); return content.replace("__JS_SPIDER__", global);
@ -214,7 +217,7 @@ public class Spider extends com.github.catvod.crawler.Spider {
String header = params.get("header"); String header = params.get("header");
JSArray array = submit(() -> JSUtil.toArray(ctx, Arrays.asList(url.split("/")))).get(); JSArray array = submit(() -> JSUtil.toArray(ctx, Arrays.asList(url.split("/")))).get();
Object object = submit(() -> ctx.parse(header)).get(); Object object = submit(() -> ctx.parse(header)).get();
String json = (String) call("proxy", array, object)[0]; String json = (String) call("proxy", array, object);
Res res = Res.objectFrom(json); Res res = Res.objectFrom(json);
Object[] result = new Object[3]; Object[] result = new Object[3];
result[0] = 200; result[0] = 200;

@ -6,7 +6,7 @@ import com.whl.quickjs.wrapper.JSObject;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
public class Function implements Callable<Object[]> { public class Function implements Callable<Object> {
private final JSObject jsObject; private final JSObject jsObject;
private final Object[] args; private final Object[] args;
@ -24,14 +24,13 @@ public class Function implements Callable<Object[]> {
} }
@Override @Override
public Object[] call() throws Exception { public Object call() throws Exception {
result = jsObject.getJSFunction(name).call(args); result = jsObject.getJSFunction(name).call(args);
boolean jsObj = result instanceof JSObject; if (!(result instanceof JSObject)) return result;
if (!jsObj) return new Object[]{result};
JSObject promise = (JSObject) result; JSObject promise = (JSObject) result;
JSFunction then = promise.getJSFunction("then"); JSFunction then = promise.getJSFunction("then");
if (then != null) then.call(jsCallFunction); if (then != null) then.call(jsCallFunction);
return new Object[]{result}; return result;
} }
private final JSCallFunction jsCallFunction = new JSCallFunction() { private final JSCallFunction jsCallFunction = new JSCallFunction() {

@ -87,7 +87,7 @@ public class Global {
@Keep @Keep
@JSMethod @JSMethod
public JSObject _http(String url, JSObject options) throws IOException { public JSObject _http(String url, JSObject options) {
JSFunction complete = options.getJSFunction("complete"); JSFunction complete = options.getJSFunction("complete");
if (complete == null) return req(url, options); if (complete == null) return req(url, options);
Req req = Req.objectFrom(ctx.stringify(options)); Req req = Req.objectFrom(ctx.stringify(options));
@ -97,10 +97,14 @@ public class Global {
@Keep @Keep
@JSMethod @JSMethod
public JSObject req(String url, JSObject options) throws IOException { public JSObject req(String url, JSObject options) {
Req req = Req.objectFrom(ctx.stringify(options)); try {
Response res = Connect.to(url, req).execute(); Req req = Req.objectFrom(ctx.stringify(options));
return Connect.success(ctx, req, res); Response res = Connect.to(url, req).execute();
return Connect.success(ctx, req, res);
} catch (Exception e) {
return Connect.error(ctx);
}
} }
@Keep @Keep
@ -177,16 +181,12 @@ public class Global {
return new Callback() { return new Callback() {
@Override @Override
public void onResponse(@NonNull Call call, @NonNull Response res) { public void onResponse(@NonNull Call call, @NonNull Response res) {
executor.submit(() -> { if (!executor.isShutdown()) executor.submit(() -> {complete.call(Connect.success(ctx, req, res));});
complete.call(Connect.success(ctx, req, res));
});
} }
@Override @Override
public void onFailure(@NonNull Call call, @NonNull IOException e) { public void onFailure(@NonNull Call call, @NonNull IOException e) {
executor.submit(() -> { if (!executor.isShutdown()) executor.submit(() -> {complete.call(Connect.error(ctx));});
complete.call(Connect.error(ctx));
});
} }
}; };
} }
@ -195,9 +195,7 @@ public class Global {
timer.schedule(new TimerTask() { timer.schedule(new TimerTask() {
@Override @Override
public void run() { public void run() {
if (!executor.isShutdown()) executor.submit(() -> { if (!executor.isShutdown()) executor.submit(() -> {func.call();});
func.call();
});
} }
}, delay); }, delay);
} }

Loading…
Cancel
Save