From 19bbdb85a17580be4f476dcd8ecf708a470c7fa0 Mon Sep 17 00:00:00 2001 From: FongMi Date: Wed, 7 Dec 2022 18:19:56 +0800 Subject: [PATCH] Support drpy - part 1 --- .../com/fongmi/android/tv/api/ApiConfig.java | 31 ++++++++++--------- .../com/fongmi/android/tv/api/JsLoader.java | 24 ++++++++++++++ drpy/build.gradle | 3 +- drpy/src/main/java/com/hiker/drpy/Loader.java | 10 ++++++ drpy/src/main/java/com/hiker/drpy/Spider.java | 6 ++++ 5 files changed, 59 insertions(+), 15 deletions(-) create mode 100644 drpy/src/main/java/com/hiker/drpy/Loader.java create mode 100644 drpy/src/main/java/com/hiker/drpy/Spider.java 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 e0905f887..34bc65a92 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 @@ -33,9 +33,9 @@ public class ApiConfig { private List flags; private List parses; private List sites; - private JarLoader jLoader; - private PyLoader pLoader; - private JsLoader sLoader; + private JarLoader jarLoader; + private PyLoader pyLoader; + private JsLoader jsLoader; private Config config; private String wall; private Parse parse; @@ -73,9 +73,9 @@ public class ApiConfig { this.sites = new ArrayList<>(); this.flags = new ArrayList<>(); this.parses = new ArrayList<>(); - this.jLoader = new JarLoader(); - this.pLoader = new PyLoader(); - this.sLoader = new JsLoader(); + this.jarLoader = new JarLoader(); + this.pyLoader = new PyLoader(); + this.jsLoader = new JsLoader(); return this; } @@ -91,8 +91,9 @@ public class ApiConfig { this.sites.clear(); this.flags.clear(); this.parses.clear(); - this.jLoader.clear(); - this.pLoader.clear(); + this.jarLoader.clear(); + this.pyLoader.clear(); + this.jsLoader.clear(); return this; } @@ -127,7 +128,7 @@ public class ApiConfig { try { parseJson(object); parseLive(object); - jLoader.parseJar("", Json.safeString(object, "spider")); + jarLoader.parseJar("", Json.safeString(object, "spider")); config.json(object.toString()).update(); App.post(callback::success); } catch (Exception e) { @@ -173,23 +174,25 @@ public class ApiConfig { } public Spider getCSP(Site site) { + boolean js = site.getApi().contains(".js"); boolean py = site.getApi().startsWith("py_"); boolean csp = site.getApi().startsWith("csp_"); - if (py) return pLoader.getSpider(site.getKey(), site.getApi(), site.getExt()); - else if (csp) return jLoader.getSpider(site.getKey(), site.getApi(), site.getExt(), site.getJar()); + if (js) return jsLoader.getSpider(site.getKey(), site.getApi(), site.getExt()); + if (py) return pyLoader.getSpider(site.getKey(), site.getApi(), site.getExt()); + if (csp) return jarLoader.getSpider(site.getKey(), site.getApi(), site.getExt(), site.getJar()); else return new SpiderNull(); } public Object[] proxyLocal(Map param) { - return jLoader.proxyInvoke(param); + return jarLoader.proxyInvoke(param); } public JSONObject jsonExt(String key, LinkedHashMap jxs, String url) { - return jLoader.jsonExt(key, jxs, url); + return jarLoader.jsonExt(key, jxs, url); } public JSONObject jsonExtMix(String flag, String key, String name, LinkedHashMap> jxs, String url) { - return jLoader.jsonExtMix(flag, key, name, jxs, url); + return jarLoader.jsonExtMix(flag, key, name, jxs, url); } public Site getSite(String key) { 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 d04402d06..9f78ba813 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 @@ -1,12 +1,18 @@ package com.fongmi.android.tv.api; +import android.content.Context; + +import com.fongmi.android.tv.App; import com.github.catvod.crawler.Spider; +import com.github.catvod.crawler.SpiderNull; +import java.lang.reflect.Method; import java.util.concurrent.ConcurrentHashMap; public class JsLoader { private final ConcurrentHashMap spiders; + private Object loader; public JsLoader() { spiders = new ConcurrentHashMap<>(); @@ -18,6 +24,24 @@ public class JsLoader { } private void init() { + try { + loader = Class.forName("com.hiker.drpy.Loader").newInstance(); + } catch (Exception e) { + e.printStackTrace(); + } + } + public Spider getSpider(String key, String api, String ext) { + try { + if (spiders.containsKey(key)) return spiders.get(key); + Method method = loader.getClass().getMethod("spider", Context.class, String.class, String.class); + Spider spider = (Spider) method.invoke(loader, App.get(), api, ext); + spider.init(App.get(), ext); + spiders.put(key, spider); + return spider; + } catch (Exception e) { + e.printStackTrace(); + return new SpiderNull(); + } } } diff --git a/drpy/build.gradle b/drpy/build.gradle index c50163d3a..755008e5c 100644 --- a/drpy/build.gradle +++ b/drpy/build.gradle @@ -13,5 +13,6 @@ android { } dependencies { - + implementation project(':catvod') + implementation 'wang.harlon.quickjs:wrapper-android:0.6.0' } \ No newline at end of file diff --git a/drpy/src/main/java/com/hiker/drpy/Loader.java b/drpy/src/main/java/com/hiker/drpy/Loader.java new file mode 100644 index 000000000..643584628 --- /dev/null +++ b/drpy/src/main/java/com/hiker/drpy/Loader.java @@ -0,0 +1,10 @@ +package com.hiker.drpy; + +import android.content.Context; + +public class Loader { + + public Spider spider(Context context, String name, String ext) { + return new Spider(); + } +} diff --git a/drpy/src/main/java/com/hiker/drpy/Spider.java b/drpy/src/main/java/com/hiker/drpy/Spider.java new file mode 100644 index 000000000..e2dd43170 --- /dev/null +++ b/drpy/src/main/java/com/hiker/drpy/Spider.java @@ -0,0 +1,6 @@ +package com.hiker.drpy; + +public class Spider extends com.github.catvod.crawler.Spider { + + +}