pull/137/head
FongMi 3 years ago
parent ed62518498
commit 1fc60cebd8
  1. 29
      drpy/src/main/java/com/hiker/drpy/Spider.java
  2. 33
      drpy/src/main/java/com/hiker/drpy/method/Global.java

@ -6,14 +6,11 @@ import com.hiker.drpy.method.Global;
import com.hiker.drpy.method.Local; import com.hiker.drpy.method.Local;
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.JSFunction;
import com.whl.quickjs.wrapper.JSObject; import com.whl.quickjs.wrapper.JSObject;
import com.whl.quickjs.wrapper.QuickJSContext; import com.whl.quickjs.wrapper.QuickJSContext;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
@ -26,7 +23,6 @@ public class Spider extends com.github.catvod.crawler.Spider {
private ExecutorService executor; private ExecutorService executor;
private QuickJSContext ctx; private QuickJSContext ctx;
private JSObject jsObject; private JSObject jsObject;
private Timer timer;
private String key; private String key;
private String api; private String api;
@ -36,7 +32,6 @@ public class Spider extends com.github.catvod.crawler.Spider {
public Spider(String api) { public Spider(String api) {
this.key = "__" + UUID.randomUUID().toString().replace("-", "") + "__"; this.key = "__" + UUID.randomUUID().toString().replace("-", "") + "__";
this.executor = Executors.newSingleThreadExecutor(); this.executor = Executors.newSingleThreadExecutor();
this.timer = new Timer("timer");
this.api = api; this.api = api;
} }
@ -106,31 +101,9 @@ public class Spider extends com.github.catvod.crawler.Spider {
private void createCtx() { private void createCtx() {
ctx = QuickJSContext.create(); ctx = QuickJSContext.create();
Global.create(ctx).setProperty();
QuickJSLoader.initConsoleLog(ctx); QuickJSLoader.initConsoleLog(ctx);
Global.create(ctx, executor).setProperty();
ctx.getGlobalObject().setProperty("local", Local.class); ctx.getGlobalObject().setProperty("local", Local.class);
setTimeout();
}
private void setTimeout() {
ctx.getGlobalObject().setProperty("setTimeout", args -> {
int delay = args.length > 1 ? (int) args[1] : 0;
JSFunction func = (JSFunction) args[0];
func.hold();
schedule(func, delay);
return null;
});
}
private void schedule(JSFunction func, int delay) {
timer.schedule(new TimerTask() {
@Override
public void run() {
executor.submit(() -> {
func.call();
});
}
}, delay);
} }
private String getContent(Context context) { private String getContent(Context context) {

@ -9,6 +9,7 @@ import com.github.catvod.net.OkHttp;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.hiker.drpy.Parser; import com.hiker.drpy.Parser;
import com.whl.quickjs.wrapper.JSArray; import com.whl.quickjs.wrapper.JSArray;
import com.whl.quickjs.wrapper.JSFunction;
import com.whl.quickjs.wrapper.JSMethod; import com.whl.quickjs.wrapper.JSMethod;
import com.whl.quickjs.wrapper.JSObject; import com.whl.quickjs.wrapper.JSObject;
import com.whl.quickjs.wrapper.QuickJSContext; import com.whl.quickjs.wrapper.QuickJSContext;
@ -18,6 +19,9 @@ import org.json.JSONObject;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Iterator; import java.util.Iterator;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import okhttp3.Call; import okhttp3.Call;
@ -30,16 +34,20 @@ import okhttp3.Response;
public class Global { public class Global {
private final ExecutorService executor;
private final QuickJSContext ctx; private final QuickJSContext ctx;
private final Parser parser; private final Parser parser;
private final Timer timer;
private final Gson gson; private final Gson gson;
public static Global create(QuickJSContext jsContext) { public static Global create(QuickJSContext ctx, ExecutorService executor) {
return new Global(jsContext); return new Global(ctx, executor);
} }
private Global(QuickJSContext ctx) { private Global(QuickJSContext ctx, ExecutorService executor) {
this.parser = new Parser(); this.parser = new Parser();
this.executor = executor;
this.timer = new Timer();
this.gson = new Gson(); this.gson = new Gson();
this.ctx = ctx; this.ctx = ctx;
} }
@ -57,6 +65,14 @@ public class Global {
} }
} }
@Keep
@JSMethod
public JSObject setTimeout(JSFunction func, int delay) {
func.hold();
schedule(func, delay);
return null;
}
@Keep @Keep
@JSMethod @JSMethod
public JSObject req(String url, JSObject object) { public JSObject req(String url, JSObject object) {
@ -129,6 +145,17 @@ public class Global {
} }
} }
private void schedule(JSFunction func, int delay) {
timer.schedule(new TimerTask() {
@Override
public void run() {
executor.submit(() -> {
func.call();
});
}
}, delay);
}
private Call call(String url, JSONObject object, Headers headers) { private Call call(String url, JSONObject object, Headers headers) {
int redirect = object.optInt("redirect", 1); int redirect = object.optInt("redirect", 1);
int timeout = object.optInt("timeout", 10000); int timeout = object.optInt("timeout", 10000);

Loading…
Cancel
Save