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

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

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

Loading…
Cancel
Save