Merge pull request #58 from ShadowDemon1997/main

Try add dr py js rule support.
pull/59/head
q215613905 4 years ago committed by GitHub
commit 3419a6a6e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      app/src/main/java/com/github/catvod/crawler/JarLoader.java
  2. 15
      app/src/main/java/com/github/tvbox/osc/util/js/JSEngine.java
  3. 18
      app/src/main/java/com/github/tvbox/osc/util/js/SpiderJS.java
  4. 2
      quickjs/src/main/java/com/github/tvbox/quickjs/JSModule.java

@ -120,7 +120,7 @@ public class JarLoader {
}
public Spider getSpider(String key, String cls, String ext, String jar) {
if (cls.toLowerCase().endsWith(".js")) {
if (cls.toLowerCase().endsWith(".js") || cls.toLowerCase().contains(".js?")) {
if (spiders.containsKey(key))
return spiders.get(key);
try {

@ -129,19 +129,28 @@ public class JSEngine {
}
void initLocalStorage() {
SharedPreferences sharedPreferences = App.getInstance().getSharedPreferences("js_engine", Context.MODE_PRIVATE);
jsContext.evaluate("var local = {};");
JSObject console = (JSObject) jsContext.getGlobalObject().getProperty("local");
console.setProperty("get", new JSCallFunction() {
@Override
public Object call(Object... args) {
return sharedPreferences.getString(args[0].toString() + "_" + args[1].toString(), "");
SharedPreferences sharedPreferences = App.getInstance().getSharedPreferences("js_engine_" + args[0].toString(), Context.MODE_PRIVATE);
return sharedPreferences.getString(args[1].toString(), "");
}
});
console.setProperty("set", new JSCallFunction() {
@Override
public Object call(Object... args) {
sharedPreferences.edit().putString(args[0].toString() + "_" + args[1].toString(), args[2].toString()).commit();
SharedPreferences sharedPreferences = App.getInstance().getSharedPreferences("js_engine_" + args[0].toString(), Context.MODE_PRIVATE);
sharedPreferences.edit().putString(args[1].toString(), args[2].toString()).commit();
return null;
}
});
console.setProperty("delete", new JSCallFunction() {
@Override
public Object call(Object... args) {
SharedPreferences sharedPreferences = App.getInstance().getSharedPreferences("js_engine_" + args[0].toString(), Context.MODE_PRIVATE);
sharedPreferences.edit().remove(args[1].toString()).commit();
return null;
}
});

@ -4,8 +4,10 @@ import android.content.Context;
import com.github.catvod.crawler.Spider;
import com.github.tvbox.quickjs.JSArray;
import com.github.tvbox.quickjs.JSModule;
import com.github.tvbox.quickjs.JSObject;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
@ -31,6 +33,22 @@ public class SpiderJS extends Spider {
public void run() {
String moduleKey = "__" + UUID.randomUUID().toString().replace("-", "") + "__";
String jsContent = JSEngine.getInstance().loadModule(js);
try {
if (js.contains(".js?")) {
int spIdx = js.indexOf(".js?");
String[] query = js.substring(spIdx + 4).split("&|=");
js = js.substring(0, spIdx);
for (int i = 0; i < query.length; i += 2) {
String key = query[i];
String val = query[i + 1];
String sub = JSModule.convertModuleName(js, val);
String content = JSEngine.getInstance().loadModule(sub);
jsContent = jsContent.replace("__" + key.toUpperCase() + "__", content);
}
}
} catch (Exception e) {
e.printStackTrace();
}
jsContent = jsContent.replace("__JS_SPIDER__", "globalThis." + moduleKey);
JSEngine.getInstance().getJsContext().evaluateModule(jsContent, js);
jsObject = (JSObject) JSEngine.getInstance().getJsContext().getProperty(JSEngine.getInstance().getGlobalObj(), moduleKey);

@ -27,7 +27,7 @@ public final class JSModule {
return name.startsWith("http://") || name.startsWith("https://") || name.startsWith("assets://");
}
static String convertModuleName(String moduleBaseName, String moduleName) {
public static String convertModuleName(String moduleBaseName, String moduleName) {
if (moduleName == null || moduleName.length() == 0) {
return moduleName;
}

Loading…
Cancel
Save