Update parse system

pull/123/head
FongMi 3 years ago
parent ee5846216c
commit da8d041f86
  1. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 23
      app/src/main/assets/parse.html
  3. 15
      app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java
  4. 11
      app/src/main/java/com/fongmi/android/tv/bean/Parse.java
  5. 37
      app/src/main/java/com/fongmi/android/tv/player/parse/ParseJob.java
  6. 12
      app/src/main/java/com/fongmi/android/tv/server/Nano.java
  7. 13
      app/src/main/java/com/fongmi/android/tv/server/Server.java
  8. 4
      app/src/main/java/com/fongmi/android/tv/utils/Utils.java

@ -813,8 +813,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private void checkParse() {
int position = getParsePosition();
if (position == mParseAdapter.size() - 1) initParse();
if (position == 0 || position == mParseAdapter.size() - 1) checkFlag();
boolean last = position == mParseAdapter.size() - 1;
boolean pass = position < 2 || last;
if (last) initParse();
if (pass) checkFlag();
else nextParse(position);
}

@ -1,23 +0,0 @@
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<title>解析</title>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1"/>
</head>
<body>
<script>
let html = "";
const jxs = "%s";
const url = "%s";
const list = jxs.split(";");
for (let i = 0; i < list.length; i++) {
html = html + "<iframe sandbox='allow-scripts allow-same-origin allow-forms' src=" + list[i] + url + "></iframe>";
}
document.write(html);
</script>
</body>
</html>

@ -158,10 +158,13 @@ public class ApiConfig {
Parse item = Parse.objectFrom(element);
if (!parses.contains(item)) parses.add(item);
}
if (parses.size() > 0) {
parses.add(0, Parse.mixWeb());
parses.add(0, Parse.mixJson());
}
}
private void initOther(JsonObject object) {
if (parses.size() > 0) parses.add(0, Parse.mix());
if (home == null) setHome(sites.isEmpty() ? new Site() : sites.get(0));
if (parse == null) setParse(parses.isEmpty() ? new Parse() : parses.get(0));
setFlags(Json.safeListString(object, "flags"));
@ -223,10 +226,16 @@ public class ApiConfig {
return parses == null ? Collections.emptyList() : parses;
}
public List<Parse> getParses(int type) {
List<Parse> items = new ArrayList<>();
for (Parse item : getParses()) if (item.getType() == type) items.add(item);
return items;
}
public List<Parse> getParses(int type, String flag) {
List<Parse> items = new ArrayList<>();
for (Parse item : getParses()) if (item.getType() == type && item.getExt().getFlag().contains(flag)) items.add(item);
if (items.isEmpty()) for (Parse item : getParses()) if (item.getType() == type) items.add(item);
for (Parse item : getParses(type)) if (item.getExt().getFlag().contains(flag)) items.add(item);
if (items.isEmpty()) items.addAll(getParses(type));
return items;
}

@ -52,9 +52,16 @@ public class Parse {
return parse;
}
public static Parse mix() {
public static Parse mixJson() {
Parse parse = new Parse();
parse.setName("超級解析");
parse.setName("Json聚合");
parse.setType(2);
return parse;
}
public static Parse mixWeb() {
Parse parse = new Parse();
parse.setName("Web聚合");
parse.setType(3);
return parse;
}

@ -8,12 +8,12 @@ import com.fongmi.android.tv.api.ApiConfig;
import com.fongmi.android.tv.bean.Parse;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.net.OkHttp;
import com.fongmi.android.tv.server.Server;
import com.fongmi.android.tv.ui.custom.CustomWebView;
import com.fongmi.android.tv.utils.Json;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -27,9 +27,9 @@ import okhttp3.Response;
public class ParseJob {
private final List<CustomWebView> webViews;
private ExecutorService executor;
private ExecutorService infinite;
private CustomWebView webView;
private Callback callback;
private Parse parse;
@ -40,6 +40,7 @@ public class ParseJob {
public ParseJob(Callback callback) {
this.executor = Executors.newFixedThreadPool(2);
this.infinite = Executors.newCachedThreadPool();
this.webViews = new ArrayList<>();
this.callback = callback;
}
@ -79,15 +80,17 @@ public class ParseJob {
private void doInBackground(String key, String webUrl, String flag) throws Exception {
switch (parse.getType()) {
case 0: //嗅探
App.post(() -> startWeb(key, parse.getUrl() + webUrl, parse.getHeaders(), callback));
App.post(() -> startWeb(key, parse, webUrl, callback));
break;
case 1: //Json
jsonParse(parse, webUrl, false);
break;
case 3: //聚合
mixWeb(webUrl, flag);
case 2: //Json聚合
mixJson(webUrl, flag);
break;
case 3: //Web聚合
mixWeb(webUrl, flag);
break;
}
}
@ -108,10 +111,9 @@ public class ParseJob {
}
private void mixWeb(String webUrl, String flag) {
StringBuilder sb = new StringBuilder();
List<Parse> items = ApiConfig.get().getParses(0, flag);
for (Parse item : items) sb.append(item.getUrl()).append(";");
if (sb.length() > 0) App.post(() -> startWeb(Server.getParse(sb.toString(), webUrl), callback));
for (Parse item : items) App.post(() -> startWeb(item, webUrl, callback));
if (items.isEmpty()) onParseError();
}
private void jsonParse(CountDownLatch latch, Parse item, String webUrl) {
@ -133,16 +135,12 @@ public class ParseJob {
if (code == 200) onParseSuccess(headers, url, item.getName());
}
private void startWeb(String url, Callback callback) {
startWeb(url, new HashMap<>(), callback);
private void startWeb(Parse item, String webUrl, Callback callback) {
startWeb("", item, webUrl, callback);
}
private void startWeb(String url, Map<String, String> headers, Callback callback) {
startWeb("", url, headers, callback);
}
private void startWeb(String key, String url, Map<String, String> headers, Callback callback) {
webView = CustomWebView.create(App.get()).start(key, url, headers, callback);
private void startWeb(String key, Parse item, String webUrl, Callback callback) {
webViews.add(CustomWebView.create(App.get()).start(key, item.getUrl() + webUrl, item.getHeaders(), callback));
}
private HashMap<String, String> getHeader(JsonObject object) {
@ -165,14 +163,17 @@ public class ParseJob {
});
}
private void stopWeb() {
for (CustomWebView webView : webViews) webView.stop(false);
}
public void stop() {
if (executor != null) executor.shutdownNow();
if (infinite != null) infinite.shutdownNow();
if (webView != null) webView.stop(false);
infinite = null;
executor = null;
callback = null;
webView = null;
stopWeb();
}
public interface Callback {

@ -70,7 +70,6 @@ public class Nano extends NanoHTTPD {
switch (session.getMethod()) {
case GET:
if (url.startsWith("/file")) return doFile(url);
else if (url.startsWith("/parse")) return doParse(session.getParms());
else if (url.startsWith("/proxy")) return doProxy(session.getParms());
break;
case POST:
@ -106,17 +105,6 @@ public class Nano extends NanoHTTPD {
}
}
private Response doParse(Map<String, String> params) {
try {
String jxs = params.get("jxs");
String url = params.get("url");
String html = String.format(FileUtil.getAsset("parse.html"), jxs, url);
return newFixedLengthResponse(Response.Status.OK, MIME_HTML, html);
} catch (Exception e) {
return newFixedLengthResponse(Response.Status.INTERNAL_ERROR, MIME_PLAINTEXT, "500");
}
}
private Response doProxy(Map<String, String> params) {
try {
Object[] rs = ApiConfig.get().proxyLocal(params);

@ -6,7 +6,6 @@ import android.text.format.Formatter;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.event.ServerEvent;
import com.fongmi.android.tv.utils.Utils;
import java.net.Inet4Address;
import java.net.InetAddress;
@ -27,14 +26,6 @@ public class Server implements Nano.Listener {
return Loader.INSTANCE;
}
public static String getParse(String jxs, String url) {
return get().getAddress(true) + "/parse?jxs=" + Utils.substring(jxs) + "&url=" + url;
}
public static String getProxy() {
return get().getAddress(true) + "/proxy?";
}
public Server() {
this.port = 9978;
}
@ -43,6 +34,10 @@ public class Server implements Nano.Listener {
return "http://" + (local ? "127.0.0.1" : getIP()) + ":" + port;
}
public String getAddress(String path) {
return getAddress(true) + "/" + path;
}
public void start() {
if (nano != null) return;
do {

@ -84,7 +84,7 @@ public class Utils {
}
public static String checkProxy(String url) {
if (url.startsWith("proxy://")) return url.replace("proxy://", Server.getProxy());
if (url.startsWith("proxy://")) return url.replace("proxy://", Server.get().getAddress("proxy?"));
return url;
}
@ -95,7 +95,7 @@ public class Utils {
}
public static String convert(String text) {
return text.startsWith("file") ? Server.get().getAddress(true) + "/" + text : text;
return text.startsWith("file") ? Server.get().getAddress(text) : text;
}
public static String convert(String baseUrl, String text) {

Loading…
Cancel
Save