Update alist

This commit is contained in:
FongMi 2022-11-28 16:58:37 +08:00
parent acf5de90b2
commit ed63f2babc
4 changed files with 125 additions and 70 deletions

View File

@ -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<Config> arrayFrom(String str) {
Type listType = new TypeToken<ArrayList<Config>>() {
}.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());
}
}

View File

@ -6,16 +6,14 @@ import com.github.catvod.bean.Class;
import com.github.catvod.bean.Filter; import com.github.catvod.bean.Filter;
import com.github.catvod.bean.Result; import com.github.catvod.bean.Result;
import com.github.catvod.bean.Vod; 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.Item;
import com.github.catvod.bean.alist.Sorter; import com.github.catvod.bean.alist.Sorter;
import com.github.catvod.crawler.Spider; import com.github.catvod.crawler.Spider;
import com.github.catvod.net.OkHttpUtil; import com.github.catvod.net.OkHttpUtil;
import com.github.catvod.utils.Misc; import com.github.catvod.utils.Misc;
import com.github.catvod.utils.Trans; 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.json.JSONObject;
import org.jsoup.Jsoup; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document; import org.jsoup.nodes.Document;
@ -28,48 +26,12 @@ import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
public class AList extends Spider { public class AList extends Spider {
private LinkedHashMap<String, String> ext; private List<Config> configs;
private Map<String, String> map; private String ext;
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<Filter> getFilter() { private List<Filter> getFilter() {
List<Filter> items = new ArrayList<>(); List<Filter> items = new ArrayList<>();
@ -78,18 +40,21 @@ public class AList extends Spider {
return items; return items;
} }
private void fetchRule() throws Exception { private void fetchRule() {
if (ext != null && !ext.isEmpty()) return; if (configs != null && !configs.isEmpty()) return;
if (extend.startsWith("http")) extend = OkHttpUtil.string(extend); configs = Config.arrayFrom(ext);
if (isJson(extend)) parseJson(extend); }
else parseText(extend);
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 @Override
public void init(Context context, String extend) { public void init(Context context, String extend) {
try { try {
this.map = new HashMap<>(); ext = extend;
this.extend = extend;
fetchRule(); fetchRule();
} catch (Exception ignored) { } catch (Exception ignored) {
} }
@ -100,7 +65,7 @@ public class AList extends Spider {
fetchRule(); fetchRule();
List<Class> classes = new ArrayList<>(); List<Class> classes = new ArrayList<>();
LinkedHashMap<String, List<Filter>> filters = new LinkedHashMap<>(); LinkedHashMap<String, List<Filter>> 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()); for (Class item : classes) filters.put(item.getTypeId(), getFilter());
return Result.string(classes, filters); return Result.string(classes, filters);
} }
@ -145,11 +110,12 @@ public class AList extends Spider {
try { try {
String key = id.contains("/") ? id.substring(0, id.indexOf("/")) : id; String key = id.contains("/") ? id.substring(0, id.indexOf("/")) : id;
String path = id.contains("/") ? id.substring(id.indexOf("/") + 1) : ""; 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(); JSONObject params = new JSONObject();
params.put("path", path); params.put("path", path);
String response = OkHttpUtil.postJson(url, params.toString()); params.put("password", config.getPassword());
String json = v3(key) ? new JSONObject(response).getJSONObject("data").toString() : new JSONObject(response).getJSONObject("data").getJSONArray("files").getJSONObject(0).toString(); 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); return Item.objectFrom(json);
} catch (Exception e) { } catch (Exception e) {
return new Item(); return new Item();
@ -160,14 +126,15 @@ public class AList extends Spider {
try { try {
String key = id.contains("/") ? id.substring(0, id.indexOf("/")) : id; String key = id.contains("/") ? id.substring(0, id.indexOf("/")) : id;
String path = id.contains("/") ? id.substring(id.indexOf("/") + 1) : ""; 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(); JSONObject params = new JSONObject();
params.put("path", path); params.put("path", path);
String response = OkHttpUtil.postJson(url, params.toString()); params.put("password", config.getPassword());
String json = new JSONObject(response).getJSONObject("data").getJSONArray(v3(key) ? "content" : "files").toString(); String response = OkHttpUtil.postJson(config.listApi(), params.toString());
String json = new JSONObject(response).getJSONObject("data").getJSONArray(config.isNew() ? "content" : "files").toString();
List<Item> items = Item.arrayFrom(json); List<Item> items = Item.arrayFrom(json);
Iterator<Item> iterator = items.iterator(); Iterator<Item> 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; return items;
} catch (Exception e) { } catch (Exception e) {
return Collections.emptyList(); return Collections.emptyList();
@ -178,8 +145,8 @@ public class AList extends Spider {
public String searchContent(String keyword, boolean quick) throws Exception { public String searchContent(String keyword, boolean quick) throws Exception {
fetchRule(); fetchRule();
List<Vod> list = new ArrayList<>(); List<Vod> list = new ArrayList<>();
CountDownLatch cd = new CountDownLatch(ext.size()); CountDownLatch cd = new CountDownLatch(configs.size());
for (String key : ext.keySet()) new Thread(() -> search(cd, list, key, keyword)).start(); for (Config config : configs) new Thread(() -> search(cd, list, config, keyword)).start();
cd.await(); cd.await();
return Result.string(list); return Result.string(list);
} }
@ -201,15 +168,14 @@ public class AList extends Spider {
} }
} }
private void search(CountDownLatch cd, List<Vod> list, String key, String keyword) { private void search(CountDownLatch cd, List<Vod> list, Config config, String keyword) {
if (v3(key)) searchV3(list, key, keyword); if (config.isNew()) searchV3(list, config, keyword);
else searchV2(list, key, getParams(keyword)); else searchV2(list, config, getParams(keyword));
cd.countDown(); cd.countDown();
} }
private void searchV3(List<Vod> list, String key, String param) { private void searchV3(List<Vod> list, Config config, String param) {
String url = ext.get(key) + "/search?box=" + param + "&url="; Document doc = Jsoup.parse(OkHttpUtil.string(config.searchApi(param)));
Document doc = Jsoup.parse(OkHttpUtil.string(url));
for (Element a : doc.select("ul > a")) { for (Element a : doc.select("ul > a")) {
String text = a.text(); String text = a.text();
String[] splits = text.split("\\."); String[] splits = text.split("\\.");
@ -220,17 +186,16 @@ public class AList extends Spider {
item.setPath("/" + text.substring(0, index)); item.setPath("/" + text.substring(0, index));
item.setName(text.substring(index + 1)); item.setName(text.substring(index + 1));
item.setType(file ? 0 : 1); item.setType(file ? 0 : 1);
list.add(item.getVod(key)); list.add(item.getVod(config.getName()));
} }
} }
private void searchV2(List<Vod> list, String key, String param) { private void searchV2(List<Vod> list, Config config, String param) {
try { try {
String url = ext.get(key) + "/api/public/search"; String response = OkHttpUtil.postJson(config.searchApi(), param);
String response = OkHttpUtil.postJson(url, param);
String json = new JSONObject(response).getJSONArray("data").toString(); String json = new JSONObject(response).getJSONArray("data").toString();
List<Item> items = Item.arrayFrom(json); List<Item> 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) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }

Binary file not shown.

View File

@ -1 +1 @@
ad5e07a700c8b50e0eb03e20422c788d 7ee69b177d3dc555da364acebccca100