pull/149/head
FongMi 3 years ago
parent 362abf911b
commit 5edf3301ca
  1. 33
      quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java
  2. 42
      quickjs/src/main/java/com/fongmi/quickjs/method/Console.java
  3. 1
      quickjs/src/main/java/com/fongmi/quickjs/utils/Module.java

@ -26,7 +26,6 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@ -40,13 +39,11 @@ public class Spider extends com.github.catvod.crawler.Spider {
private final DexClassLoader dex;
private QuickJSContext ctx;
private JSObject jsObject;
private final String name;
private final String key;
private final String api;
private boolean cat;
public Spider(String key, String api, DexClassLoader dex) throws Exception {
this.name = "__" + UUID.randomUUID().toString().replace("-", "") + "__";
this.executor = Executors.newSingleThreadExecutor();
this.key = key;
this.api = api;
@ -136,28 +133,27 @@ public class Spider extends com.github.catvod.crawler.Spider {
submit(() -> {
if (ctx == null) createCtx();
if (dex != null) createDex();
String content = getContent();
ctx.evaluateModule(content, api);
jsObject = (JSObject) ctx.getProperty(ctx.getGlobalObject(), name);
createObj();
return null;
}).get();
}
private void createCtx() {
ctx = QuickJSContext.create();
ctx.setConsole(new Console());
ctx.evaluate(Path.asset("js/lib/http.js"));
Global.create(ctx, executor).setProperty();
ctx.getGlobalObject().setProperty("local", Local.class);
ctx.getGlobalObject().getContext().evaluate(Path.asset("js/lib/http.js"));
ctx.setModuleLoader(new QuickJSContext.DefaultModuleLoader() {
ctx.getGlobalObject().setProperty("console", Console.class);
ctx.setModuleLoader(new QuickJSContext.BytecodeModuleLoader() {
@Override
public String moduleNormalizeName(String baseModuleName, String moduleName) {
return UriUtil.resolve(baseModuleName, moduleName);
}
@Override
public String getModuleStringCode(String moduleName) {
return Module.get().fetch(moduleName);
public byte[] getModuleBytecode(String moduleName) {
String code = Module.get().fetch(moduleName);
return code.startsWith("//bb") ? Module.get().bb(code) : ctx.compileModule(code, moduleName);
}
});
}
@ -205,17 +201,20 @@ public class Spider extends com.github.catvod.crawler.Spider {
});
}
private String getContent() {
String global = "globalThis." + name;
private void createObj() {
String spider = "__JS_SPIDER__";
String global = "globalThis." + spider;
String content = Module.get().fetch(api);
String catOnly = "\n" + global + " = __jsEvalReturn();";
if (content.contains("__jsEvalReturn")) {
cat = true;
return content.concat(global + " = __jsEvalReturn()");
} else if (content.contains("__JS_SPIDER__")) {
return content.replace("__JS_SPIDER__", global);
ctx.evaluateModule(content.concat(catOnly), api);
} else if (content.contains(spider)) {
ctx.evaluateModule(content.replace(spider, global), api);
} else {
return content.replaceAll("export default.*?[{]", global + " = {");
ctx.evaluateModule(content.replaceAll("export default.*?[{]", global + " = {"), api);
}
jsObject = (JSObject) ctx.getProperty(ctx.getGlobalObject(), spider);
}
private Object[] proxy1(Map<String, String> params) throws Exception {

@ -1,29 +1,41 @@
package com.fongmi.quickjs.method;
import androidx.annotation.Keep;
import com.orhanobut.logger.Logger;
import com.whl.quickjs.wrapper.QuickJSContext;
import com.whl.quickjs.wrapper.JSMethod;
public class Console {
public class Console implements QuickJSContext.Console {
private final String TAG = "quickjs";
private static final String TAG = "quickjs";
@Keep
@JSMethod
public void debug(Object array) {
Logger.t(TAG).d(String.valueOf(array));
}
@Override
public void log(String info) {
Logger.t(TAG).d(info);
@Keep
@JSMethod
public void error(Object array) {
Logger.t(TAG).e(String.valueOf(array));
}
@Override
public void info(String info) {
Logger.t(TAG).i(info);
@Keep
@JSMethod
public void warn(Object array) {
Logger.t(TAG).w(String.valueOf(array));
}
@Override
public void warn(String info) {
Logger.t(TAG).w(info);
@Keep
@JSMethod
public void info(Object array) {
Logger.t(TAG).i(String.valueOf(array));
}
@Override
public void error(String info) {
Logger.t(TAG).e(info);
@Keep
@JSMethod
public void log(Object array) {
Logger.t(TAG).v(String.valueOf(array));
}
}

@ -33,6 +33,7 @@ public class Module {
public String fetch(String name) {
if (cache.contains(name)) return cache.get(name);
if (name.startsWith("http")) cache.put(name, request(name));
if (name.startsWith("lib/")) cache.put(name, Path.asset("js/" + name));
if (name.startsWith("assets")) cache.put(name, Path.asset(name.substring(9)));
return cache.get(name);
}

Loading…
Cancel
Save