Support local py

pull/123/head
FongMi 3 years ago
parent 1212e6f547
commit e8179858f0
  1. 2
      app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java
  2. 2
      app/src/main/java/com/fongmi/android/tv/api/JarLoader.java
  3. 9
      app/src/main/java/com/fongmi/android/tv/api/PyLoader.java
  4. 1
      app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java
  5. 1
      pyramid/build.gradle
  6. 8
      pyramid/src/main/java/com/undcover/freedom/pyramid/Loader.java
  7. 5
      pyramid/src/main/java/com/undcover/freedom/pyramid/Spider.java
  8. 100
      pyramid/src/main/python/app.py

@ -140,7 +140,7 @@ public class ApiConfig {
if (ext.startsWith("http")) return ext;
else if (ext.startsWith("file")) return FileUtil.read(ext);
else if (ext.startsWith("img+")) return Decoder.getExt(ext);
else if (ext.endsWith(".json")) return parseExt(Utils.convert(ext));
else if (ext.endsWith(".json") || ext.endsWith(".py")) return parseExt(Utils.convert(ext));
return ext;
}

@ -85,7 +85,7 @@ public class JarLoader {
String spKey = (current = Utils.getMD5(jar)) + key;
if (spiders.containsKey(spKey)) return spiders.get(spKey);
if (!loaders.containsKey(current)) parseJar(current, jar);
Spider spider = (Spider) loaders.get(current).loadClass("com.github.catvod.spider." + api.replace("csp_", "")).newInstance();
Spider spider = (Spider) loaders.get(current).loadClass("com.github.catvod.spider." + api.split("csp_")[1]).newInstance();
spider.init(App.get(), ext);
spiders.put(spKey, spider);
return spider;

@ -1,7 +1,6 @@
package com.fongmi.android.tv.api;
import android.content.Context;
import android.net.Uri;
import com.fongmi.android.tv.App;
import com.github.catvod.crawler.Spider;
@ -35,11 +34,9 @@ public class PyLoader {
public Spider getSpider(String key, String api, String ext) {
try {
if (spiders.containsKey(key)) return spiders.get(key);
String extend = Uri.parse(ext).getQueryParameter("extend");
Method method = loader.getClass().getMethod("spider", Context.class, String.class);
Spider spider = (Spider) method.invoke(loader, App.get(), ext);
extend = extend == null ? "" : extend;
spider.init(App.get(), extend);
Method method = loader.getClass().getMethod("spider", Context.class, String.class, String.class);
Spider spider = (Spider) method.invoke(loader, App.get(), api.split("py_")[1], ext);
spider.init(App.get());
spiders.put(key, spider);
return spider;
} catch (Exception e) {

@ -44,6 +44,7 @@ public class FileUtil {
}
public static File getLocal(String path) {
if (path.contains(getRootPath())) return new File(path);
return new File(path.replace("file:/", getRootPath()));
}

@ -13,6 +13,7 @@ android {
python {
buildPython "C:/Users/FongMi.DIREK/Anaconda3/python.exe"
pip {
install "pycrypto"
install "requests"
install "lxml"
}

@ -13,13 +13,13 @@ public class Loader {
private void init(Context context) {
if (!Python.isStarted()) Python.start(new AndroidPlatform(context));
cache = context.getCacheDir().getAbsolutePath();
cache = context.getCacheDir().getAbsolutePath() + "/plugin/";
app = Python.getInstance().getModule("app");
}
public com.github.catvod.crawler.Spider spider(Context context, String ext) {
public Spider spider(Context context, String name, String ext) {
if (app == null) init(context);
String path = app.callAttr("downloadPlugin", cache, ext).toString();
return new Spider(app, app.callAttr("loadFromDisk", path));
PyObject obj = app.callAttr("init_py", cache, name, ext);
return new Spider(app, obj);
}
}

@ -20,6 +20,11 @@ public class Spider extends com.github.catvod.crawler.Spider {
this.obj = obj;
}
@Override
public void init(Context context) {
app.callAttr("init", obj);
}
@Override
public void init(Context context, String extend) {
app.callAttr("init", obj, extend);

@ -1,98 +1,47 @@
import os
import requests
from importlib.machinery import SourceFileLoader
from urllib import parse
import json
def createFile(file_path):
def create_file(file_path):
if os.path.exists(file_path) is False:
os.makedirs(file_path)
def redirectResponse(tUrl):
rsp = requests.get(tUrl, allow_redirects=False, verify=False)
def write_file(name, content):
with open(name, 'wb') as f:
f.write(content)
def redirect(url):
rsp = requests.get(url, allow_redirects=False, verify=False)
if 'Location' in rsp.headers:
return redirectResponse(rsp.headers['Location'])
return redirect(rsp.headers['Location'])
else:
return rsp
def downloadFile(name, url):
try:
rsp = redirectResponse(url)
with open(name, 'wb') as f:
f.write(rsp.content)
print(url)
except:
print(name + ' =======================================> error')
print(url)
def downloadPlugin(basePath, url):
createFile(basePath)
name = url.split('/')[-1].split('.')[0]
if url.startswith('file://'):
pyName = url.replace('file://', '')
def download_file(name, ext):
if ext.startswith('http'):
write_file(name, redirect(ext).content)
else:
pyName = basePath + name + '.py'
downloadFile(pyName, url)
sPath = gParam['SpiderPath']
sPath[name] = pyName
sParam = gParam['SpiderParam']
paramList = parse.parse_qs(parse.urlparse(url).query).get('extend')
if paramList == None:
paramList = ['']
sParam[name] = paramList[0]
return pyName
def loadFromDisk(fileName):
name = fileName.split('/')[-1].split('.')[0]
spList = gParam['SpiderList']
if name not in spList:
sp = SourceFileLoader(name, fileName).load_module().Spider()
spList[name] = sp
return spList[name]
def str2json(content):
return json.loads(content)
write_file(name, str.encode(ext))
gParam = {
"SpiderList": {},
"SpiderPath": {},
"SpiderParam": {}
}
def init_py(path, name, ext):
create_file(path)
py_name = path + name + '.py'
download_file(py_name, ext)
return SourceFileLoader(name, py_name).load_module().Spider()
def getDependence(ru):
result = ru.getDependence()
return result
def getName(ru):
result = ru.getName()
return result
def str2json(content):
return json.loads(content)
def init(ru, extend):
spoList = []
spList = gParam['SpiderList']
sPath = gParam['SpiderPath']
sParam = gParam['SpiderParam']
for key in ru.getDependence():
sp = None
if key in spList.keys():
sp = spList[key]
elif key in sPath.keys():
sp = loadFromDisk(sPath[key])
if sp != None:
sp.setExtendInfo(sParam[key])
spoList.append(sp)
ru.setExtendInfo(extend)
ru.init(spoList)
def init(ru):
ru.init()
def homeContent(ru, filter):
@ -131,11 +80,6 @@ def searchContent(ru, key, quick):
return formatJo
def localProxy(ru, param):
result = ru.localProxy(str2json(param))
return result
def run():
pass

Loading…
Cancel
Save