diff --git a/app/src/main/java/com/fongmi/bear/ApiConfig.java b/app/src/main/java/com/fongmi/bear/ApiConfig.java index 511be915e..75dc4faa8 100644 --- a/app/src/main/java/com/fongmi/bear/ApiConfig.java +++ b/app/src/main/java/com/fongmi/bear/ApiConfig.java @@ -29,7 +29,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import okhttp3.Request; import okhttp3.Response; public class ApiConfig { @@ -91,7 +90,7 @@ public class ApiConfig { private void getWebConfig(String url, Callback callback) { try { - Response response = OKHttp.get().client().newCall(new Request.Builder().url(url).build()).execute(); + Response response = OKHttp.newCall(url).execute(); parseConfig(new Gson().fromJson(response.body().string(), JsonObject.class), callback); } catch (IOException e) { handler.post(() -> callback.error(R.string.error_config_get)); @@ -134,7 +133,7 @@ public class ApiConfig { if (spider.startsWith("file://")) { loader.load(FileUtil.getLocal(spider)); } else if (Patterns.WEB_URL.matcher(spider).matches()) { - Response response = OKHttp.get().client().newCall(new Request.Builder().url(spider).build()).execute(); + Response response = OKHttp.newCall(spider).execute(); FileUtil.write(FileUtil.getJar(), response.body().bytes()); loader.load(FileUtil.getJar()); } diff --git a/app/src/main/java/com/fongmi/bear/bean/Result.java b/app/src/main/java/com/fongmi/bear/bean/Result.java index 26dc2b816..ddb8f98ee 100644 --- a/app/src/main/java/com/fongmi/bear/bean/Result.java +++ b/app/src/main/java/com/fongmi/bear/bean/Result.java @@ -72,7 +72,7 @@ public class Result { @Override public LinkedHashMap> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { LinkedHashMap> filterMap = new LinkedHashMap<>(); - JsonObject filters = (JsonObject) json.getAsJsonObject(); + JsonObject filters = json.getAsJsonObject(); if (filters == null) return filterMap; for (String key : filters.keySet()) { List items = new ArrayList<>(); diff --git a/app/src/main/java/com/fongmi/bear/model/SiteViewModel.java b/app/src/main/java/com/fongmi/bear/model/SiteViewModel.java index 953e78bb3..2cb062770 100644 --- a/app/src/main/java/com/fongmi/bear/model/SiteViewModel.java +++ b/app/src/main/java/com/fongmi/bear/model/SiteViewModel.java @@ -7,6 +7,7 @@ import com.fongmi.bear.ApiConfig; import com.fongmi.bear.bean.Result; import com.fongmi.bear.bean.Site; import com.fongmi.bear.bean.Vod; +import com.fongmi.bear.net.OKHttp; import com.github.catvod.crawler.Spider; import com.github.catvod.crawler.SpiderDebug; import com.google.gson.JsonObject; @@ -20,6 +21,9 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; +import okhttp3.HttpUrl; +import okhttp3.Response; + public class SiteViewModel extends ViewModel { public MutableLiveData player; @@ -38,39 +42,75 @@ public class SiteViewModel extends ViewModel { public void homeContent() { Site home = ApiConfig.get().getHome(); postResult(() -> { - Spider spider = ApiConfig.get().getCSP(home); - String homeContent = spider.homeContent(false); - SpiderDebug.json(homeContent); - Result result = Result.objectFrom(homeContent); - if (result.getList().size() > 0) return result; - String homeVideoContent = spider.homeVideoContent(); - SpiderDebug.json(homeVideoContent); - result.setList(Result.objectFrom(homeVideoContent).getList()); - return result; + if (home.getType() == 3) { + Spider spider = ApiConfig.get().getCSP(home); + String homeContent = spider.homeContent(false); + SpiderDebug.json(homeContent); + Result result = Result.objectFrom(homeContent); + if (result.getList().size() > 0) return result; + String homeVideoContent = spider.homeVideoContent(); + SpiderDebug.json(homeVideoContent); + result.setList(Result.objectFrom(homeVideoContent).getList()); + return result; + } else { + Response response = OKHttp.newCall(home.getApi()).execute(); + if (home.getType() == 1) { + String homeContent = response.body().string(); + SpiderDebug.json(homeContent); + return Result.objectFrom(homeContent); + } + return new Result(); + } }); } public void categoryContent(String tid, String page, boolean filter, HashMap extend) { Site home = ApiConfig.get().getHome(); postResult(() -> { - Spider spider = ApiConfig.get().getCSP(home); - String categoryContent = spider.categoryContent(tid, page, filter, extend); - SpiderDebug.json(categoryContent); - return Result.objectFrom(categoryContent); + if (home.getType() == 3) { + Spider spider = ApiConfig.get().getCSP(home); + String categoryContent = spider.categoryContent(tid, page, filter, extend); + SpiderDebug.json(categoryContent); + return Result.objectFrom(categoryContent); + } else { + HttpUrl url = HttpUrl.parse(home.getApi()).newBuilder().addQueryParameter("ac", home.getType() == 0 ? "videolist" : "detail").addQueryParameter("t", tid).addQueryParameter("pg", page).build(); + Response response = OKHttp.newCall(url).execute(); + if (home.getType() == 1) { + String categoryContent = response.body().string(); + SpiderDebug.json(categoryContent); + return Result.objectFrom(categoryContent); + } + return new Result(); + } }); } public void detailContent(String id) { Site home = ApiConfig.get().getHome(); postResult(() -> { - Spider spider = ApiConfig.get().getCSP(home); - String detailContent = spider.detailContent(List.of(id)); - SpiderDebug.json(detailContent); - Result result = Result.objectFrom(detailContent); - if (result.getList().isEmpty()) return result; - Vod vod = result.getList().get(0); - vod.setVodFlags(getVodFlags(vod)); - return result; + if (home.getType() == 3) { + Spider spider = ApiConfig.get().getCSP(home); + String detailContent = spider.detailContent(List.of(id)); + SpiderDebug.json(detailContent); + Result result = Result.objectFrom(detailContent); + if (result.getList().isEmpty()) return result; + Vod vod = result.getList().get(0); + vod.setVodFlags(getVodFlags(vod)); + return result; + } else { + HttpUrl url = HttpUrl.parse(home.getApi()).newBuilder().addQueryParameter("ac", home.getType() == 0 ? "videolist" : "detail").addQueryParameter("ids", id).build(); + Response response = OKHttp.newCall(url).execute(); + if (home.getType() == 1) { + String detailContent = response.body().string(); + SpiderDebug.json(detailContent); + Result result = Result.objectFrom(detailContent); + if (result.getList().isEmpty()) return result; + Vod vod = result.getList().get(0); + vod.setVodFlags(getVodFlags(vod)); + return result; + } + } + return new Result(); }); } diff --git a/app/src/main/java/com/fongmi/bear/net/OKHttp.java b/app/src/main/java/com/fongmi/bear/net/OKHttp.java index eb422494a..8c4c76c3a 100644 --- a/app/src/main/java/com/fongmi/bear/net/OKHttp.java +++ b/app/src/main/java/com/fongmi/bear/net/OKHttp.java @@ -2,7 +2,10 @@ package com.fongmi.bear.net; import java.util.concurrent.TimeUnit; +import okhttp3.Call; +import okhttp3.HttpUrl; import okhttp3.OkHttpClient; +import okhttp3.Request; public class OKHttp { @@ -12,7 +15,7 @@ public class OKHttp { static volatile OKHttp INSTANCE = new OKHttp(); } - public static OKHttp get() { + private static OKHttp get() { return Loader.INSTANCE; } @@ -21,10 +24,15 @@ public class OKHttp { } private OkHttpClient.Builder getBuilder() { - return new OkHttpClient.Builder().readTimeout(15, TimeUnit.SECONDS).writeTimeout(15, TimeUnit.SECONDS).connectTimeout(15, TimeUnit.SECONDS).retryOnConnectionFailure(true).sslSocketFactory(new SSLSocketFactoryCompat(SSLSocketFactoryCompat.trustAllCert), SSLSocketFactoryCompat.trustAllCert); + return new OkHttpClient.Builder().readTimeout(5, TimeUnit.SECONDS).writeTimeout(5, TimeUnit.SECONDS).connectTimeout(5, TimeUnit.SECONDS).retryOnConnectionFailure(true).sslSocketFactory(new SSLSocketFactoryCompat(SSLSocketFactoryCompat.trustAllCert), SSLSocketFactoryCompat.trustAllCert); } - public OkHttpClient client() { + private OkHttpClient client() { return mClient; } + + public static Call newCall(T url) { + if (url instanceof HttpUrl) return get().client().newCall(new Request.Builder().url((HttpUrl) url).build()); + else return get().client().newCall(new Request.Builder().url((String) url).build()); + } }