WebView parse support header

pull/137/head
FongMi 3 years ago
parent da1a1f1960
commit 7395218de5
  1. 20
      app/src/main/java/com/fongmi/android/tv/bean/Parse.java
  2. 5
      app/src/main/java/com/fongmi/android/tv/bean/Result.java
  3. 14
      app/src/main/java/com/fongmi/android/tv/player/ParseTask.java
  4. 5
      app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java

@ -4,6 +4,7 @@ import android.text.TextUtils;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.fongmi.android.tv.utils.Json;
import com.fongmi.android.tv.utils.Utils; import com.fongmi.android.tv.utils.Utils;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
@ -11,6 +12,7 @@ import com.google.gson.annotations.SerializedName;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
public class Parse { public class Parse {
@ -42,6 +44,14 @@ public class Parse {
return parse; return parse;
} }
public static Parse get(Integer type, String url, JsonElement header) {
Parse parse = new Parse();
parse.setType(type);
parse.setUrl(url);
parse.getExt().setHeader(header);
return parse;
}
public String getName() { public String getName() {
return TextUtils.isEmpty(name) ? "" : name; return TextUtils.isEmpty(name) ? "" : name;
} }
@ -67,7 +77,7 @@ public class Parse {
} }
public Ext getExt() { public Ext getExt() {
return ext == null ? new Ext() : ext; return ext = ext == null ? new Ext() : ext;
} }
public boolean isActivated() { public boolean isActivated() {
@ -82,8 +92,8 @@ public class Parse {
this.activated = item.equals(this); this.activated = item.equals(this);
} }
public JsonElement getHeader() { public Map<String, String> getHeaders() {
return getExt().getHeader(); return Json.toMap(getExt().getHeader());
} }
public String extUrl() { public String extUrl() {
@ -123,6 +133,10 @@ public class Parse {
return header; return header;
} }
public void setHeader(JsonElement header) {
this.header = header;
}
@NonNull @NonNull
@Override @Override
public String toString() { public String toString() {

@ -63,8 +63,7 @@ public class Result {
public static Result fromJson(String str) { public static Result fromJson(String str) {
try { try {
Type type = new TypeToken<LinkedHashMap<String, List<Filter>>>() { Type type = new TypeToken<LinkedHashMap<String, List<Filter>>>() {}.getType();
}.getType();
Gson gson = new GsonBuilder().registerTypeAdapter(type, new FiltersAdapter()).create(); Gson gson = new GsonBuilder().registerTypeAdapter(type, new FiltersAdapter()).create();
Result result = gson.fromJson(str, Result.class); Result result = gson.fromJson(str, Result.class);
return result == null ? empty() : result; return result == null ? empty() : result;
@ -117,7 +116,7 @@ public class Result {
return filters == null ? new LinkedHashMap<>() : filters; return filters == null ? new LinkedHashMap<>() : filters;
} }
private JsonElement getHeader() { public JsonElement getHeader() {
return header; return header;
} }

@ -10,7 +10,6 @@ import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.net.OKHttp; import com.fongmi.android.tv.net.OKHttp;
import com.fongmi.android.tv.server.Server; import com.fongmi.android.tv.server.Server;
import com.fongmi.android.tv.ui.custom.CustomWebView; import com.fongmi.android.tv.ui.custom.CustomWebView;
import com.fongmi.android.tv.utils.Json;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.gson.JsonParser; import com.google.gson.JsonParser;
@ -43,16 +42,17 @@ public class ParseTask {
} }
public ParseTask run(Result result, boolean useParse) { public ParseTask run(Result result, boolean useParse) {
setParse(result.getPlayUrl(), useParse); setParse(result, useParse);
executor.submit(() -> doInBackground(result.getUrl(), result.getFlag())); executor.submit(() -> doInBackground(result.getUrl(), result.getFlag()));
return this; return this;
} }
private void setParse(String url, boolean useParse) { private void setParse(Result result, boolean useParse) {
String url = result.getPlayUrl();
if (useParse) parse = ApiConfig.get().getParse(); if (useParse) parse = ApiConfig.get().getParse();
else if (url.startsWith("json:")) parse = Parse.get(1, url.substring(5)); else if (url.startsWith("json:")) parse = Parse.get(1, url.substring(5));
else if (url.startsWith("parse:")) parse = ApiConfig.get().getParse(url.substring(6)); else if (url.startsWith("parse:")) parse = ApiConfig.get().getParse(url.substring(6));
if (parse == null) parse = Parse.get(0, url); if (parse == null) parse = Parse.get(0, url, result.getHeader());
} }
private void doInBackground(String webUrl, String flag) { private void doInBackground(String webUrl, String flag) {
@ -62,7 +62,7 @@ public class ParseTask {
} }
switch (parse.getType()) { switch (parse.getType()) {
case 0: //嗅探 case 0: //嗅探
handler.post(() -> webView.start(parse.getUrl() + webUrl, callback)); handler.post(() -> webView.start(parse.getUrl() + webUrl, parse.getHeaders(), callback));
break; break;
case 1: //Json case 1: //Json
jsonParse(webUrl); jsonParse(webUrl);
@ -78,7 +78,7 @@ public class ParseTask {
private void jsonParse(String webUrl) { private void jsonParse(String webUrl) {
try { try {
Response response = OKHttp.newCall(parse.getUrl() + webUrl, Headers.of(Json.toMap(parse.getHeader()))).execute(); Response response = OKHttp.newCall(parse.getUrl() + webUrl, Headers.of(parse.getHeaders())).execute();
JsonObject object = JsonParser.parseString(response.body().string()).getAsJsonObject(); JsonObject object = JsonParser.parseString(response.body().string()).getAsJsonObject();
HashMap<String, String> headers = new HashMap<>(); HashMap<String, String> headers = new HashMap<>();
for (String key : object.keySet()) if (key.equalsIgnoreCase("user-agent") || key.equalsIgnoreCase("referer")) headers.put(key, object.get(key).getAsString()); for (String key : object.keySet()) if (key.equalsIgnoreCase("user-agent") || key.equalsIgnoreCase("referer")) headers.put(key, object.get(key).getAsString());
@ -105,7 +105,7 @@ public class ParseTask {
if (result.getUrl().isEmpty()) { if (result.getUrl().isEmpty()) {
onParseError(); onParseError();
} else if (result.getParse(0) == 1) { } else if (result.getParse(0) == 1) {
handler.post(() -> webView.start(Server.proxy(result.getUrl()), callback)); handler.post(() -> webView.start(Server.proxy(result.getUrl()), result.getHeaders(), callback));
} else { } else {
onParseSuccess(result.getHeaders(), result.getUrl(), result.getJxFrom()); onParseSuccess(result.getHeaders(), result.getUrl(), result.getJxFrom());
} }

@ -55,10 +55,9 @@ public class CustomWebView extends WebView {
setWebViewClient(webViewClient()); setWebViewClient(webViewClient());
} }
public void start(String url, ParseTask.Callback callback) { public void start(String url, Map<String, String> headers, ParseTask.Callback callback) {
this.callback = callback; this.callback = callback;
stopLoading(); loadUrl(url, headers);
loadUrl(url);
retry = 0; retry = 0;
} }

Loading…
Cancel
Save