兼容t3 py;

pull/144/head
于俊 1 year ago
parent b3e160dbe1
commit 5e8f175ab7
  1. 1
      app/build.gradle
  2. BIN
      app/libs/pyramid.aar
  3. 6
      app/proguard-rules.pro
  4. 54
      app/src/main/java/com/github/catvod/crawler/PyLoader.java
  5. 36
      app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java

@ -108,6 +108,7 @@ dependencies {
implementation 'com.github.hedzr:android-file-chooser:v1.2.0-final'
implementation 'commons-io:commons-io:2.11.0'
implementation 'com.googlecode.juniversalchardet:juniversalchardet:1.0.3'
implementation(name:'pyramid',ext:'aar')
implementation(name:'xwalk_shared_library-23.53.589.4',ext:'aar')
//http3
implementation ('com.google.net.cronet:cronet-okhttp:0.1.0')

Binary file not shown.

@ -214,3 +214,9 @@
# Cronet支持http3
-keep class com.google.net.cronet.**{*;}
-keep class org.chromium.net.**{*;}
# Python支持
-keep public class com.undcover.freedom.pyramid.** { *; }
-dontwarn com.undcover.freedom.pyramid.**
-keep public class com.chaquo.python.** { *; }
-dontwarn com.chaquo.python.**

@ -0,0 +1,54 @@
package com.github.catvod.crawler;
import com.github.tvbox.osc.base.App;
import com.undcover.freedom.pyramid.PythonLoader;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class PyLoader {
private final PythonLoader pythonLoader = PythonLoader.getInstance().setApplication(App.getInstance());
private static ConcurrentHashMap<String, Spider> spiders = new ConcurrentHashMap<>();
private String lastConfig = null; // 记录上次的配置
public void setConfig(String jsonStr) {
if (jsonStr != null && !jsonStr.equals(lastConfig)) {
pythonLoader.setConfig(jsonStr);
lastConfig = jsonStr;
}
}
public Spider getSpider(String key, String cls, String ext) {
if (spiders.containsKey(key))
// Log.i("PyLoader", "echo-getSpider spider缓存: " + key);
// LOG.i("");
return spiders.get(key);
try {
Spider sp = pythonLoader.getSpider(key, getPyUrl(cls,ext));
spiders.put(key, sp);
return sp;
} catch (Throwable th) {
th.printStackTrace();
}
return new SpiderNull();
}
public Object[] proxyInvoke(String key,String url,Map<String,String> params) {
try {
String doStr = params.get("do");
assert doStr != null;
if (doStr.equals("ck") || doStr.equals("live"))return pythonLoader.proxyLocal("", "", params);
return (Object[]) pythonLoader.proxyLocal(key, url, params);
} catch (Throwable th) {
th.printStackTrace();
}
return null;
}
private String getPyUrl(String api,String ext)
{
StringBuilder urlBuilder = new StringBuilder(api);
if (!ext.isEmpty()) {
urlBuilder.append(api.contains("?") ? "&" : "?").append("extend=").append(ext);
}
return urlBuilder.toString();
}
}

@ -7,6 +7,7 @@ import android.util.Base64;
import com.github.catvod.crawler.JarLoader;
import com.github.catvod.crawler.JsLoader;
import com.github.catvod.crawler.PyLoader;
import com.github.catvod.crawler.Spider;
import com.github.tvbox.osc.base.App;
import com.github.tvbox.osc.bean.LiveChannelGroup;
@ -36,6 +37,8 @@ import com.lzy.okgo.callback.AbsCallback;
import com.lzy.okgo.model.Response;
import com.orhanobut.hawk.Hawk;
import com.github.catvod.crawler.SpiderNull;
import org.json.JSONObject;
import java.io.BufferedReader;
@ -76,6 +79,7 @@ public class ApiConfig {
private final JarLoader jarLoader = new JarLoader();
private final JsLoader jsLoader = new JsLoader();
private final PyLoader pyLoader = new PyLoader();
private final Gson gson;
private final String userAgent = "okhttp/3.15";
@ -417,6 +421,7 @@ public class ApiConfig {
private static String jarCache ="true";
private void parseJson(String apiUrl, String jsonStr) {
pyLoader.setConfig(jsonStr);
JsonObject infoJson = gson.fromJson(jsonStr, JsonObject.class);
// spider
spider = DefaultConfig.safeJsonString(infoJson, "spider", "");
@ -435,7 +440,11 @@ public class ApiConfig {
sb.setApi(obj.get("api").getAsString().trim());
sb.setSearchable(DefaultConfig.safeJsonInt(obj, "searchable", 1));
sb.setQuickSearch(DefaultConfig.safeJsonInt(obj, "quickSearch", 1));
sb.setFilterable(DefaultConfig.safeJsonInt(obj, "filterable", 1));
if(siteKey.startsWith("py_")){
sb.setFilterable(1);
}else {
sb.setFilterable(DefaultConfig.safeJsonInt(obj, "filterable", 1));
}
sb.setPlayerUrl(DefaultConfig.safeJsonString(obj, "playUrl", ""));
if(obj.has("ext") && (obj.get("ext").isJsonObject() || obj.get("ext").isJsonArray())){
sb.setExt(obj.get("ext").toString());
@ -870,11 +879,23 @@ public class ApiConfig {
public Spider getCSP(SourceBean sourceBean) {
boolean js = sourceBean.getApi().endsWith(".js") || sourceBean.getApi().contains(".js?");
if (js) return jsLoader.getSpider(sourceBean.getKey(), sourceBean.getApi(), sourceBean.getExt(), sourceBean.getJar());
if (sourceBean.getKey().startsWith("py_") || sourceBean.getApi().endsWith(".py")) {
try {
return pyLoader.getSpider(sourceBean.getKey(), sourceBean.getApi(), sourceBean.getExt());
} catch (Exception e) {
return new SpiderNull();
}
}
return jarLoader.getSpider(sourceBean.getKey(), sourceBean.getApi(), sourceBean.getExt(), sourceBean.getJar());
}
public Object[] proxyLocal(Map<String,String> param) {
return jarLoader.proxyInvoke(param);
SourceBean sourceBean = ApiConfig.get().getHomeSourceBean();
if (sourceBean.getKey().startsWith("py_") || sourceBean.getApi().endsWith(".py")) {
return pyLoader.proxyInvoke(sourceBean.getKey(), getPyUrl(sourceBean), param);
}else {
return jarLoader.proxyInvoke(param);
}
}
public JSONObject jsonExt(String key, LinkedHashMap<String, String> jxs, String url) {
@ -1025,4 +1046,15 @@ public class ApiConfig {
superPb.setType(4);
parseBeanList.add(0, superPb);
}
private String getPyUrl(SourceBean sb)
{
String api = sb.getApi();
String ext = sb.getExt();
StringBuilder urlBuilder = new StringBuilder(api);
if (!ext.isEmpty()) {
urlBuilder.append(api.contains("?") ? "&" : "?").append("extend=").append(ext);
}
return urlBuilder.toString();
}
}

Loading…
Cancel
Save