pull/199/head
FongMi 2 years ago
parent 73550d86b9
commit 9314cc6857
  1. 8
      app/src/main/java/com/fongmi/android/tv/bean/Site.java
  2. 1
      app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java
  3. 25
      app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java
  4. 4
      app/src/main/java/com/fongmi/android/tv/utils/Sniffer.java

@ -22,7 +22,7 @@ import java.util.List;
import okhttp3.Headers;
@Entity(ignoredColumns = {"api", "ext", "jar", "playUrl", "type", "timeout", "playerType", "categories", "header", "style", "activated"})
@Entity(ignoredColumns = {"api", "ext", "jar", "click", "playUrl", "type", "timeout", "playerType", "categories", "header", "style", "activated"})
public class Site implements Parcelable {
@NonNull
@ -38,6 +38,8 @@ public class Site implements Parcelable {
private String ext;
@SerializedName("jar")
private String jar;
@SerializedName("click")
private String click;
@SerializedName("playUrl")
private String playUrl;
@SerializedName("type")
@ -121,6 +123,10 @@ public class Site implements Parcelable {
return TextUtils.isEmpty(jar) ? "" : jar;
}
public String getClick() {
return TextUtils.isEmpty(click) ? "" : click;
}
public String getPlayUrl() {
return TextUtils.isEmpty(playUrl) ? "" : playUrl;
}

@ -190,6 +190,7 @@ public class SiteViewModel extends ViewModel {
result.setHeader(site.getHeader());
result.setPlayUrl(site.getPlayUrl());
result.setParse(Sniffer.isVideoFormat(url.v()) && result.getPlayUrl().isEmpty() ? 0 : 1);
SpiderDebug.log(result.toString());
return result;
}
});

@ -27,13 +27,18 @@ import com.fongmi.android.tv.impl.ParseCallback;
import com.fongmi.android.tv.utils.Sniffer;
import com.github.catvod.crawler.Spider;
import com.google.common.net.HttpHeaders;
import com.orhanobut.logger.Logger;
import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class CustomWebView extends WebView {
private static final String TAG = CustomWebView.class.getSimpleName();
private static final String BLANK = "about:blank";
private WebResourceResponse empty;
private ParseCallback callback;
private AlertDialog dialog;
@ -110,7 +115,8 @@ public class CustomWebView extends WebView {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
evaluate(Sniffer.getScript(Uri.parse(url)));
if (url.equals(BLANK)) return;
evaluate(getScript(url));
}
@Override
@ -137,12 +143,25 @@ public class CustomWebView extends WebView {
dialog = null;
}
private List<String> getScript(String url) {
List<String> script = new ArrayList<>(Sniffer.getScript(Uri.parse(url)));
String click = ApiConfig.get().getSite(key).getClick();
if (click.length() > 0) script.add(0, click);
return script;
}
private void evaluate(List<String> script) {
if (script.size() > 0) evaluateJavascript(script.get(0), value -> evaluate(script.subList(1, script.size())));
if (script.isEmpty()) return;
if (TextUtils.isEmpty(script.get(0))) {
evaluate(script.subList(1, script.size()));
} else {
evaluateJavascript(script.get(0), value -> evaluate(script.subList(1, script.size())));
}
}
private boolean isVideoFormat(Map<String, String> headers, String url) {
try {
Logger.t(TAG).d(url);
Site site = ApiConfig.get().getSite(key);
Spider spider = ApiConfig.get().getSpider(site);
if (spider.manualVideoCheck()) return spider.isVideoFormat(url);
@ -176,7 +195,7 @@ public class CustomWebView extends WebView {
public void stop(boolean error) {
hideDialog();
stopLoading();
loadUrl("about:blank");
loadUrl(BLANK);
App.removeCallbacks(timer);
if (error) onParseError();
else callback = null;

@ -7,7 +7,6 @@ import com.fongmi.android.tv.api.ApiConfig;
import com.fongmi.android.tv.bean.Rule;
import com.github.catvod.utils.Json;
import com.github.catvod.utils.Util;
import com.orhanobut.logger.Logger;
import java.util.Arrays;
import java.util.Collections;
@ -19,8 +18,6 @@ import java.util.regex.Pattern;
public class Sniffer {
private static final String TAG = Sniffer.class.getSimpleName();
public static final Pattern CLICKER = Pattern.compile("\\[a=cr:(\\{.*?\\})\\/](.*?)\\[\\/a]");
public static final Pattern AI_PUSH = Pattern.compile("(http|https|rtmp|rtsp|smb|thunder|magnet|ed2k|mitv|tvbox-xg|jianpian|video):[^\\s]+", Pattern.MULTILINE);
public static final Pattern SNIFFER = Pattern.compile("http((?!http).){12,}?\\.(m3u8|mp4|mkv|flv|mp3|m4a|aac)\\?.*|http((?!http).){12,}\\.(m3u8|mp4|mkv|flv|mp3|m4a|aac)|http((?!http).)*?video/tos*");
@ -47,7 +44,6 @@ public class Sniffer {
}
public static boolean isVideoFormat(String url, Map<String, String> headers) {
Logger.t(TAG).d(url);
if (containOrMatch(url)) return true;
if (headers.containsKey("Accept") && headers.get("Accept").startsWith("image")) return false;
if (url.contains("url=http") || url.contains("v=http") || url.contains(".css") || url.contains(".html")) return false;

Loading…
Cancel
Save