diff --git a/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java b/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java index 917915a4d..1103de9aa 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java @@ -237,12 +237,19 @@ public class ApiConfig { else return new SpiderNull(); } - public void setJar(String key) { - jarLoader.setJar(key); + public void setRecent(Site site) { + boolean js = site.getApi().contains(".js"); + boolean csp = site.getApi().startsWith("csp_"); + if (js) jsLoader.setRecent(site.getKey()); + if (csp) jarLoader.setRecent(site.getJar()); } public Object[] proxyLocal(Map param) { - return jarLoader.proxyInvoke(param); + if (param.containsKey("do") && param.get("do").equals("js")) { + return jsLoader.proxyInvoke(param); + } else { + return jarLoader.proxyInvoke(param); + } } public JSONObject jsonExt(String key, LinkedHashMap jxs, String url) throws Exception { diff --git a/app/src/main/java/com/fongmi/android/tv/api/JarLoader.java b/app/src/main/java/com/fongmi/android/tv/api/JarLoader.java index 7e8472aaa..8a1a78cbc 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/JarLoader.java +++ b/app/src/main/java/com/fongmi/android/tv/api/JarLoader.java @@ -25,7 +25,7 @@ public class JarLoader { private final ConcurrentHashMap loaders; private final ConcurrentHashMap methods; private final ConcurrentHashMap spiders; - private String jar; + private String recent; public JarLoader() { this.loaders = new ConcurrentHashMap<>(); @@ -39,8 +39,8 @@ public class JarLoader { this.spiders.clear(); } - public void setJar(String jar) { - this.jar = jar; + public void setRecent(String recent) { + this.recent = recent; } private void load(String key, File file) throws Throwable { @@ -116,7 +116,7 @@ public class JarLoader { public Object[] proxyInvoke(Map params) { try { - Method method = methods.get(Utils.getMd5(jar)); + Method method = methods.get(Utils.getMd5(recent)); if (method != null) return (Object[]) method.invoke(null, params); else return null; } catch (Exception e) { diff --git a/app/src/main/java/com/fongmi/android/tv/api/JsLoader.java b/app/src/main/java/com/fongmi/android/tv/api/JsLoader.java index d31739c61..6ba0deacb 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/JsLoader.java +++ b/app/src/main/java/com/fongmi/android/tv/api/JsLoader.java @@ -4,11 +4,13 @@ import com.fongmi.android.tv.App; import com.hiker.drpy.Loader; import com.hiker.drpy.Spider; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class JsLoader { private final ConcurrentHashMap spiders; + private String recent; public JsLoader() { spiders = new ConcurrentHashMap<>(); @@ -20,6 +22,10 @@ public class JsLoader { this.spiders.clear(); } + public void setRecent(String recent) { + this.recent = recent; + } + private void init() { try { Loader.init(App.get()); @@ -40,4 +46,15 @@ public class JsLoader { return new Spider(); } } + + public Object[] proxyInvoke(Map params) { + try { + Spider spider = spiders.get(recent); + if (spider != null) return spider.doProxy(params); + else return null; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } } diff --git a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java index 076b2bdd3..7d99425d5 100644 --- a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java +++ b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java @@ -57,7 +57,7 @@ public class SiteViewModel extends ViewModel { Spider spider = ApiConfig.get().getCSP(site); String homeContent = spider.homeContent(true); SpiderDebug.log(homeContent); - ApiConfig.get().setJar(site.getJar()); + ApiConfig.get().setRecent(site); Result result = Result.fromJson(homeContent); if (result.getList().size() > 0) return result; String homeVideoContent = spider.homeVideoContent(); @@ -86,7 +86,7 @@ public class SiteViewModel extends ViewModel { Spider spider = ApiConfig.get().getCSP(site); String categoryContent = spider.categoryContent(tid, page, filter, extend); SpiderDebug.log(categoryContent); - ApiConfig.get().setJar(site.getJar()); + ApiConfig.get().setRecent(site); return Result.fromJson(categoryContent); } else { ArrayMap params = new ArrayMap<>(); @@ -109,7 +109,7 @@ public class SiteViewModel extends ViewModel { Spider spider = ApiConfig.get().getCSP(site); String detailContent = spider.detailContent(Arrays.asList(id)); SpiderDebug.log(detailContent); - ApiConfig.get().setJar(site.getJar()); + ApiConfig.get().setRecent(site); Result result = Result.fromJson(detailContent); if (!result.getList().isEmpty()) result.getList().get(0).setVodFlags(); return result; @@ -140,7 +140,7 @@ public class SiteViewModel extends ViewModel { Spider spider = ApiConfig.get().getCSP(site); String playerContent = spider.playerContent(flag, id, ApiConfig.get().getFlags()); SpiderDebug.log(playerContent); - ApiConfig.get().setJar(site.getJar()); + ApiConfig.get().setRecent(site); Result result = Result.objectFrom(playerContent); if (result.getFlag().isEmpty()) result.setFlag(flag); result.setKey(key); diff --git a/drpy/src/main/java/com/hiker/drpy/Parser.java b/drpy/src/main/java/com/hiker/drpy/Parser.java index 1f3a959ae..e90dfc62b 100644 --- a/drpy/src/main/java/com/hiker/drpy/Parser.java +++ b/drpy/src/main/java/com/hiker/drpy/Parser.java @@ -22,7 +22,7 @@ public class Parser { private final Pattern p1 = Pattern.compile("url\\((.*?)\\)", Pattern.MULTILINE | Pattern.DOTALL); private final Pattern p2 = Pattern.compile(":eq|:lt|:gt|:first|:last|^body$|^#"); - private final Pattern p3 = Pattern.compile("(url|src|href|-original|-src|-play|-url)$", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE); + private final Pattern p3 = Pattern.compile("(url|src|href|-original|-src|-play|-url|style)$", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE); private final Cache cache; diff --git a/drpy/src/main/java/com/hiker/drpy/Spider.java b/drpy/src/main/java/com/hiker/drpy/Spider.java index e29b4e642..673d62b29 100644 --- a/drpy/src/main/java/com/hiker/drpy/Spider.java +++ b/drpy/src/main/java/com/hiker/drpy/Spider.java @@ -9,8 +9,12 @@ import com.whl.quickjs.wrapper.JSArray; import com.whl.quickjs.wrapper.JSObject; import com.whl.quickjs.wrapper.QuickJSContext; +import org.json.JSONArray; + +import java.io.ByteArrayInputStream; 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.ExecutionException; @@ -92,6 +96,27 @@ public class Spider extends com.github.catvod.crawler.Spider { }); } + public Object[] doProxy(Map params) throws Exception { + return submit(() -> { + JSObject obj = ctx.createNewJSObject(); + for (Object key : params.keySet()) obj.setProperty((String) key, (String) params.get(key)); + JSONArray array = new JSONArray(((JSArray) jsObject.getJSFunction("proxy").call(obj)).stringify()); + Object[] objects = new Object[3]; + objects[0] = array.get(0); + objects[1] = array.opt(1); + Object o = array.opt(2); + if (o instanceof JSONArray) { + JSONArray a = (JSONArray) o; + byte[] bytes = new byte[a.length()]; + for (int i = 0; i < a.length(); i++) bytes[i] = (byte) a.optInt(i); + objects[2] = new ByteArrayInputStream(bytes); + } else { + objects[2] = new ByteArrayInputStream(o.toString().getBytes()); + } + return objects; + }).get(); + } + private void initJS(Context context, String extend) { if (ctx == null) createCtx(); ctx.evaluateModule(getContent(context), api);