diff --git a/app/src/main/java/com/github/catvod/bean/alist/Config.java b/app/src/main/java/com/github/catvod/bean/alist/Config.java new file mode 100644 index 00000000..00d8150f --- /dev/null +++ b/app/src/main/java/com/github/catvod/bean/alist/Config.java @@ -0,0 +1,90 @@ +package com.github.catvod.bean.alist; + +import android.text.TextUtils; + +import com.github.catvod.bean.Class; +import com.google.gson.Gson; +import com.google.gson.annotations.SerializedName; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +public class Config { + + @SerializedName("name") + private String name; + @SerializedName("server") + private String server; + @SerializedName("password") + private String password; + @SerializedName("version") + private int version; + + public static List arrayFrom(String str) { + Type listType = new TypeToken>() { + }.getType(); + return new Gson().fromJson(str, listType); + } + + public Config(String name) { + this.name = name; + } + + public String getName() { + return TextUtils.isEmpty(name) ? "" : name; + } + + public String getServer() { + return TextUtils.isEmpty(server) ? "" : server; + } + + public String getPassword() { + return TextUtils.isEmpty(password) ? "" : password; + } + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + + public boolean isNew() { + return getVersion() == 3; + } + + public Class toType() { + return new Class(getName(), getName(), "1"); + } + + public String settingsApi() { + return getServer() + "/api/public/settings"; + } + + public String listApi() { + return getServer() + (isNew() ? "/api/fs/list" : "/api/public/path"); + } + + public String getApi() { + return getServer() + (isNew() ? "/api/fs/get" : "/api/public/path"); + } + + public String searchApi() { + return getServer() + "/api/public/search"; + } + + public String searchApi(String param) { + return getServer() + "/search?box=" + param + "&url="; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!(obj instanceof Config)) return false; + Config it = (Config) obj; + return getName().equals(it.getName()); + } +} diff --git a/app/src/main/java/com/github/catvod/spider/AList.java b/app/src/main/java/com/github/catvod/spider/AList.java index 7d0c8338..ec2e6c99 100644 --- a/app/src/main/java/com/github/catvod/spider/AList.java +++ b/app/src/main/java/com/github/catvod/spider/AList.java @@ -6,16 +6,14 @@ import com.github.catvod.bean.Class; import com.github.catvod.bean.Filter; import com.github.catvod.bean.Result; import com.github.catvod.bean.Vod; +import com.github.catvod.bean.alist.Config; import com.github.catvod.bean.alist.Item; import com.github.catvod.bean.alist.Sorter; import com.github.catvod.crawler.Spider; import com.github.catvod.net.OkHttpUtil; import com.github.catvod.utils.Misc; import com.github.catvod.utils.Trans; -import com.google.gson.JsonParser; -import com.google.gson.JsonSyntaxException; -import org.json.JSONArray; import org.json.JSONObject; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; @@ -28,48 +26,12 @@ import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; -import java.util.Objects; import java.util.concurrent.CountDownLatch; public class AList extends Spider { - private LinkedHashMap ext; - private Map map; - private String extend; - - private boolean isJson(String json) { - try { - JsonParser.parseString(json); - return true; - } catch (JsonSyntaxException e) { - return false; - } - } - - private void parseJson(String extend) throws Exception { - JSONObject object = new JSONObject(extend); - JSONArray array = object.names(); - ext = new LinkedHashMap<>(); - for (int i = 0; i < array.length(); i++) { - String key = array.getString(i); - ext.put(key, object.getString(key)); - } - } - - private void parseText(String extend) { - String[] array = extend.split("#"); - ext = new LinkedHashMap<>(); - for (String text : array) { - String[] arr = text.split("\\$"); - if (arr.length == 2) ext.put(arr[0], arr[1]); - } - } - - private boolean v3(String key) { - if (!map.containsKey(key)) map.put(key, OkHttpUtil.string(ext.get(key) + "/api/public/settings").contains("v3.") ? "3" : "2"); - return Objects.equals(map.get(key), "3"); - } + private List configs; + private String ext; private List getFilter() { List items = new ArrayList<>(); @@ -78,18 +40,21 @@ public class AList extends Spider { return items; } - private void fetchRule() throws Exception { - if (ext != null && !ext.isEmpty()) return; - if (extend.startsWith("http")) extend = OkHttpUtil.string(extend); - if (isJson(extend)) parseJson(extend); - else parseText(extend); + private void fetchRule() { + if (configs != null && !configs.isEmpty()) return; + configs = Config.arrayFrom(ext); + } + + private Config getConfig(String name) { + Config config = configs.get(configs.indexOf(new Config(name))); + if (config.getVersion() == 0) config.setVersion(OkHttpUtil.string(config.settingsApi()).contains("v3.") ? 3 : 2); + return config; } @Override public void init(Context context, String extend) { try { - this.map = new HashMap<>(); - this.extend = extend; + ext = extend; fetchRule(); } catch (Exception ignored) { } @@ -100,7 +65,7 @@ public class AList extends Spider { fetchRule(); List classes = new ArrayList<>(); LinkedHashMap> filters = new LinkedHashMap<>(); - for (String key : ext.keySet()) classes.add(new Class(key, key, "1")); + for (Config config : configs) classes.add(config.toType()); for (Class item : classes) filters.put(item.getTypeId(), getFilter()); return Result.string(classes, filters); } @@ -145,11 +110,12 @@ public class AList extends Spider { try { String key = id.contains("/") ? id.substring(0, id.indexOf("/")) : id; String path = id.contains("/") ? id.substring(id.indexOf("/") + 1) : ""; - String url = ext.get(key) + (v3(key) ? "/api/fs/get" : "/api/public/path"); + Config config = getConfig(key); JSONObject params = new JSONObject(); params.put("path", path); - String response = OkHttpUtil.postJson(url, params.toString()); - String json = v3(key) ? new JSONObject(response).getJSONObject("data").toString() : new JSONObject(response).getJSONObject("data").getJSONArray("files").getJSONObject(0).toString(); + params.put("password", config.getPassword()); + String response = OkHttpUtil.postJson(config.getApi(), params.toString()); + String json = config.isNew() ? new JSONObject(response).getJSONObject("data").toString() : new JSONObject(response).getJSONObject("data").getJSONArray("files").getJSONObject(0).toString(); return Item.objectFrom(json); } catch (Exception e) { return new Item(); @@ -160,14 +126,15 @@ public class AList extends Spider { try { String key = id.contains("/") ? id.substring(0, id.indexOf("/")) : id; String path = id.contains("/") ? id.substring(id.indexOf("/") + 1) : ""; - String url = ext.get(key) + (v3(key) ? "/api/fs/list" : "/api/public/path"); + Config config = getConfig(key); JSONObject params = new JSONObject(); params.put("path", path); - String response = OkHttpUtil.postJson(url, params.toString()); - String json = new JSONObject(response).getJSONObject("data").getJSONArray(v3(key) ? "content" : "files").toString(); + params.put("password", config.getPassword()); + String response = OkHttpUtil.postJson(config.listApi(), params.toString()); + String json = new JSONObject(response).getJSONObject("data").getJSONArray(config.isNew() ? "content" : "files").toString(); List items = Item.arrayFrom(json); Iterator iterator = items.iterator(); - if (filter) while (iterator.hasNext()) if (iterator.next().ignore(v3(key))) iterator.remove(); + if (filter) while (iterator.hasNext()) if (iterator.next().ignore(config.isNew())) iterator.remove(); return items; } catch (Exception e) { return Collections.emptyList(); @@ -178,8 +145,8 @@ public class AList extends Spider { public String searchContent(String keyword, boolean quick) throws Exception { fetchRule(); List list = new ArrayList<>(); - CountDownLatch cd = new CountDownLatch(ext.size()); - for (String key : ext.keySet()) new Thread(() -> search(cd, list, key, keyword)).start(); + CountDownLatch cd = new CountDownLatch(configs.size()); + for (Config config : configs) new Thread(() -> search(cd, list, config, keyword)).start(); cd.await(); return Result.string(list); } @@ -201,15 +168,14 @@ public class AList extends Spider { } } - private void search(CountDownLatch cd, List list, String key, String keyword) { - if (v3(key)) searchV3(list, key, keyword); - else searchV2(list, key, getParams(keyword)); + private void search(CountDownLatch cd, List list, Config config, String keyword) { + if (config.isNew()) searchV3(list, config, keyword); + else searchV2(list, config, getParams(keyword)); cd.countDown(); } - private void searchV3(List list, String key, String param) { - String url = ext.get(key) + "/search?box=" + param + "&url="; - Document doc = Jsoup.parse(OkHttpUtil.string(url)); + private void searchV3(List list, Config config, String param) { + Document doc = Jsoup.parse(OkHttpUtil.string(config.searchApi(param))); for (Element a : doc.select("ul > a")) { String text = a.text(); String[] splits = text.split("\\."); @@ -220,17 +186,16 @@ public class AList extends Spider { item.setPath("/" + text.substring(0, index)); item.setName(text.substring(index + 1)); item.setType(file ? 0 : 1); - list.add(item.getVod(key)); + list.add(item.getVod(config.getName())); } } - private void searchV2(List list, String key, String param) { + private void searchV2(List list, Config config, String param) { try { - String url = ext.get(key) + "/api/public/search"; - String response = OkHttpUtil.postJson(url, param); + String response = OkHttpUtil.postJson(config.searchApi(), param); String json = new JSONObject(response).getJSONArray("data").toString(); List items = Item.arrayFrom(json); - for (Item item : items) if (!item.ignore(false)) list.add(item.getVod(key)); + for (Item item : items) if (!item.ignore(false)) list.add(item.getVod(config.getName())); } catch (Exception e) { e.printStackTrace(); } diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index dbefb6b8..e39306be 100644 Binary files a/jar/custom_spider.jar and b/jar/custom_spider.jar differ diff --git a/jar/custom_spider.jar.md5 b/jar/custom_spider.jar.md5 index c9fdee07..165c2998 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -ad5e07a700c8b50e0eb03e20422c788d +7ee69b177d3dc555da364acebccca100