diff --git a/app/src/main/java/com/github/catvod/ali/API.java b/app/src/main/java/com/github/catvod/ali/API.java index e4f26464..1104d8a5 100644 --- a/app/src/main/java/com/github/catvod/ali/API.java +++ b/app/src/main/java/com/github/catvod/ali/API.java @@ -13,13 +13,13 @@ import android.widget.FrameLayout; import android.widget.ImageView; import com.github.catvod.BuildConfig; +import com.github.catvod.bean.Result; import com.github.catvod.bean.Sub; import com.github.catvod.bean.Vod; import com.github.catvod.bean.ali.Code; import com.github.catvod.bean.ali.Data; import com.github.catvod.bean.ali.Item; import com.github.catvod.bean.ali.OAuth; -import com.github.catvod.bean.ali.Sorter; import com.github.catvod.bean.ali.User; import com.github.catvod.crawler.SpiderDebug; import com.github.catvod.net.OkHttp; @@ -37,6 +37,7 @@ import java.io.ByteArrayInputStream; import java.io.File; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -101,9 +102,10 @@ public class API { } public void setShareId(String shareId) { + if (!getOAuthCache().exists()) oauth.clean().save(); + if (!getUserCache().exists()) user.clean().save(); this.shareId = shareId; refreshShareToken(); - checkAccessToken(); } public HashMap getHeader() { @@ -117,6 +119,7 @@ public class API { HashMap headers = getHeader(); headers.put("authorization", user.getAuthorization()); headers.put("x-share-token", shareToken); + headers.put("X-Canary", "client=Android,app=adrive,version=v4.3.1"); return headers; } @@ -126,30 +129,35 @@ public class API { return headers; } - private String alist(String url, JSONObject body) throws Exception { - url = "https://api.nn.ci/alist/ali_open/" + url; + private boolean alist(String url, JSONObject body) { OkResult result = OkHttp.postJson(url, body.toString(), getHeader()); - if (isManyRequest(result.getBody())) return ""; - if (result.getCode() == 200) return result.getBody(); - throw new Exception(result.getBody()); + SpiderDebug.log(result.getCode() + "," + url + "," + result.getBody()); + if (isManyRequest(result.getBody())) return false; + oauth = OAuth.objectFrom(result.getBody()).save(); + return true; } private String post(String url, JSONObject body) { url = url.startsWith("https") ? url : "https://api.aliyundrive.com/" + url; - return OkHttp.postJson(url, body.toString(), getHeader()).getBody(); + OkResult result = OkHttp.postJson(url, body.toString(), getHeader()); + SpiderDebug.log(result.getCode() + "," + url + "," + result.getBody()); + return result.getBody(); } private String auth(String url, String json, boolean retry) { url = url.startsWith("https") ? url : "https://api.aliyundrive.com/" + url; OkResult result = OkHttp.postJson(url, json, getHeaderAuth()); - if (retry && result.getCode() != 200 && refreshAccessToken()) return auth(url, json, false); + SpiderDebug.log(result.getCode() + "," + url + "," + result.getBody()); + if (retry && result.getCode() == 401 && refreshAccessToken()) return auth(url, json, false); + if (retry && result.getCode() == 429) return auth(url, json, false); return result.getBody(); } private String oauth(String url, String json, boolean retry) { url = url.startsWith("https") ? url : "https://open.aliyundrive.com/adrive/v1.0/" + url; OkResult result = OkHttp.postJson(url, json, getHeaderOpen()); - if (retry && result.getCode() != 200 && refreshOpenToken()) return oauth(url, json, false); + SpiderDebug.log(result.getCode() + "," + url + "," + result.getBody()); + if (retry && result.getCode() == 401 && refreshOpenToken()) return oauth(url, json, false); return result.getBody(); } @@ -157,7 +165,6 @@ public class API { if (!result.contains("Too Many Requests")) return false; Init.show("洗洗睡吧,Too Many Requests。"); oauth.clean().save(); - user.clean().save(); return true; } @@ -166,80 +173,6 @@ public class API { return false; } - public void checkAccessToken() { - if (user.getAccessToken().isEmpty()) refreshAccessToken(); - } - - private boolean refreshAccessToken() { - try { - SpiderDebug.log("refreshAccessToken..."); - JSONObject body = new JSONObject(); - String token = user.getRefreshToken(); - if (token.isEmpty()) token = refreshToken; - if (token.startsWith("http")) token = OkHttp.string(token).trim(); - body.put("refresh_token", token); - body.put("grant_type", "refresh_token"); - String result = post("https://auth.aliyundrive.com/v2/account/token", body); - user = User.objectFrom(result).save(); - SpiderDebug.log(user.toString()); - if (user.getAccessToken().isEmpty()) throw new Exception(result); - if (oauth.getAccessToken().isEmpty()) oauthRequest(); - return true; - } catch (Exception e) { - if (e instanceof TimeoutException) return onTimeout(); - e.printStackTrace(); - user.clean().save(); - stopService(); - startFlow(); - return true; - } finally { - while (user.getAccessToken().isEmpty()) SystemClock.sleep(250); - } - } - - private void oauthRequest() { - try { - SpiderDebug.log("OAuth Request..."); - JSONObject body = new JSONObject(); - body.put("authorize", 1); - body.put("scope", "user:base,file:all:read,file:all:write"); - String url = "https://open.aliyundrive.com/oauth/users/authorize?client_id=" + BuildConfig.CLIENT_ID + "&redirect_uri=https://alist.nn.ci/tool/aliyundrive/callback&scope=user:base,file:all:read,file:all:write&state="; - String result = auth(url, body.toString(), true); - oauthRedirect(Code.objectFrom(result).getCode()); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private void oauthRedirect(String code) { - try { - SpiderDebug.log("OAuth Redirect..."); - JSONObject body = new JSONObject(); - body.put("code", code); - body.put("grant_type", "authorization_code"); - oauth = OAuth.objectFrom(alist("code", body)).save(); - } catch (Exception e) { - e.printStackTrace(); - oauth.clean().save(); - } - } - - private boolean refreshOpenToken() { - try { - SpiderDebug.log("refreshOpenToken..."); - JSONObject body = new JSONObject(); - body.put("grant_type", "refresh_token"); - body.put("refresh_token", oauth.getRefreshToken()); - oauth = OAuth.objectFrom(alist("token", body)).save(); - return true; - } catch (Exception e) { - e.printStackTrace(); - oauth.clean().save(); - oauthRequest(); - return true; - } - } - private void refreshShareToken() { try { SpiderDebug.log("refreshShareToken..."); @@ -254,6 +187,75 @@ public class API { } } + private boolean refreshAccessToken() { + try { + SpiderDebug.log("refreshAccessToken..."); + JSONObject body = new JSONObject(); + String token = user.getRefreshToken(); + if (token.isEmpty()) token = refreshToken; + if (token.startsWith("http")) token = OkHttp.string(token).trim(); + body.put("refresh_token", token); + body.put("grant_type", "refresh_token"); + String result = post("https://auth.aliyundrive.com/v2/account/token", body); + user = User.objectFrom(result).save(); + if (user.getAccessToken().isEmpty()) throw new Exception(result); + return true; + } catch (Exception e) { + if (e instanceof TimeoutException) return onTimeout(); + e.printStackTrace(); + user.clean().save(); + stopService(); + startFlow(); + return true; + } finally { + while (user.getAccessToken().isEmpty()) SystemClock.sleep(250); + } + } + + private boolean oauthRequest() { + try { + SpiderDebug.log("OAuth Request..."); + JSONObject body = new JSONObject(); + body.put("authorize", 1); + body.put("scope", "user:base,file:all:read,file:all:write"); + String url = "https://open.aliyundrive.com/oauth/users/authorize?client_id=" + BuildConfig.CLIENT_ID + "&redirect_uri=https://alist.nn.ci/tool/aliyundrive/callback&scope=user:base,file:all:read,file:all:write&state="; + String result = auth(url, body.toString(), true); + return oauthRedirect(Code.objectFrom(result).getCode()); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + private boolean oauthRedirect(String code) { + try { + SpiderDebug.log("OAuth Redirect..."); + JSONObject body = new JSONObject(); + body.put("code", code); + body.put("grant_type", "authorization_code"); + return alist("https://api.nn.ci/alist/ali_open/code", body); + } catch (Exception e) { + e.printStackTrace(); + oauth.clean().save(); + return false; + } + } + + private boolean refreshOpenToken() { + try { + if (oauth.getRefreshToken().isEmpty()) return oauthRequest(); + SpiderDebug.log("refreshOpenToken..."); + JSONObject body = new JSONObject(); + body.put("grant_type", "refresh_token"); + body.put("refresh_token", oauth.getRefreshToken()); + return alist("https://api.nn.ci/alist/ali_open/token", body); + } catch (Exception e) { + e.printStackTrace(); + oauth.clean().save(); + return false; + } + } + public Vod getVod(String url, String fileId) throws Exception { JSONObject body = new JSONObject(); body.put("share_id", shareId); @@ -265,7 +267,6 @@ public class API { List playFrom = Arrays.asList("原畫", "超清", "高清"); List episode = new ArrayList<>(); List playUrl = new ArrayList<>(); - Sorter.sort(files); for (Item file : files) episode.add(file.getDisplayName() + "$" + file.getFileId() + findSubs(file.getName(), subMap)); for (int i = 0; i < playFrom.size(); i++) playUrl.add(TextUtils.join("#", episode)); Vod vod = new Vod(); @@ -337,7 +338,7 @@ public class API { return sb.toString(); } - public List getSub(String[] ids) { + public List getSubs(String[] ids) { List sub = new ArrayList<>(); for (String text : ids) { if (!text.contains("@@@")) continue; @@ -358,7 +359,6 @@ public class API { body.put("file_id", tempIds.get(0)); body.put("drive_id", user.getDriveId()); String json = oauth("openFile/getDownloadUrl", body.toString(), true); - SpiderDebug.log(json); return new JSONObject(json).getString("url"); } catch (Exception e) { e.printStackTrace(); @@ -368,9 +368,9 @@ public class API { } } - public String getPreviewUrl(String fileId, String flag) { + public JSONObject getVideoPreviewPlayInfo(String fileId) { try { - SpiderDebug.log("getPreviewUrl..." + fileId); + SpiderDebug.log("getVideoPreviewPlayInfo..." + fileId); tempIds.add(0, copy(fileId)); JSONObject body = new JSONObject(); body.put("file_id", tempIds.get(0)); @@ -378,18 +378,35 @@ public class API { body.put("category", "live_transcoding"); body.put("url_expire_sec", "14400"); String json = oauth("openFile/getVideoPreviewPlayInfo", body.toString(), true); - SpiderDebug.log(json); - JSONArray taskList = new JSONObject(json).getJSONObject("video_preview_play_info").getJSONArray("live_transcoding_task_list"); - return getPreviewQuality(taskList, flag); + return new JSONObject(json).getJSONObject("video_preview_play_info"); } catch (Exception e) { e.printStackTrace(); - return ""; + return new JSONObject(); } finally { Init.execute(this::deleteAll); } } - private String getPreviewQuality(JSONArray taskList, String flag) throws Exception { + public String playerContent(String[] ids) { + return Result.get().url(getDownloadUrl(ids[0])).subs(getSubs(ids)).header(getHeader()).string(); + } + + public String playerContent(String[] ids, String flag) { + try { + JSONObject playInfo = getVideoPreviewPlayInfo(ids[0]); + String url = getPreviewUrl(playInfo, flag); + List subs = getSubs(ids); + subs.addAll(getSubs(playInfo)); + return Result.get().url(url).subs(subs).header(getHeader()).string(); + } catch (Exception e) { + e.printStackTrace(); + return Result.get().url("").string(); + } + } + + private String getPreviewUrl(JSONObject playInfo, String flag) throws Exception { + if (!playInfo.has("live_transcoding_task_list")) return ""; + JSONArray taskList = playInfo.getJSONArray("live_transcoding_task_list"); for (int i = 0; i < taskList.length(); ++i) { JSONObject task = taskList.getJSONObject(i); if (task.getString("template_id").equals(quality.get(flag))) { @@ -399,11 +416,25 @@ public class API { return taskList.getJSONObject(0).getString("url"); } + private List getSubs(JSONObject playInfo) throws Exception { + if (!playInfo.has("live_transcoding_subtitle_task_list")) return Collections.emptyList(); + JSONArray taskList = playInfo.getJSONArray("live_transcoding_subtitle_task_list"); + List subs = new ArrayList<>(); + for (int i = 0; i < taskList.length(); ++i) { + JSONObject task = taskList.getJSONObject(i); + String lang = task.getString("language"); + String url = task.getString("url"); + subs.add(Sub.create().url(url).name(lang).lang(lang).ext("vtt")); + } + return subs; + } + private String copy(String fileId) throws Exception { SpiderDebug.log("Copy..." + fileId); String json = "{\"requests\":[{\"body\":{\"file_id\":\"%s\",\"share_id\":\"%s\",\"auto_rename\":true,\"to_parent_file_id\":\"root\",\"to_drive_id\":\"%s\"},\"headers\":{\"Content-Type\":\"application/json\"},\"id\":\"0\",\"method\":\"POST\",\"url\":\"/file/copy\"}],\"resource\":\"file\"}"; json = String.format(json, fileId, shareId, user.getDriveId()); String result = auth("adrive/v2/batch", json, true); + if (result.contains("ForbiddenNoPermission.File")) return copy(fileId); return new JSONObject(result).getJSONArray("responses").getJSONObject(0).getJSONObject("body").getString("file_id"); } @@ -497,15 +528,16 @@ public class API { private void startService(Map params) { service = Executors.newScheduledThreadPool(1); service.scheduleAtFixedRate(() -> { - Data result = Data.objectFrom(OkHttp.post("https://passport.aliyundrive.com/newlogin/qrcode/query.do?appName=aliyun_drive&fromSite=52&_bx-v=2.2.3", params)).getContent().getData(); - if (result.hasToken()) setToken(result.getToken()); + String result = OkHttp.post("https://passport.aliyundrive.com/newlogin/qrcode/query.do?appName=aliyun_drive&fromSite=52&_bx-v=2.2.3", params); + Data data = Data.objectFrom(result).getContent().getData(); + if (data.hasToken()) setToken(data.getToken()); }, 1, 1, TimeUnit.SECONDS); } private void setToken(String value) { SpiderDebug.log("Token:" + value); Init.show("Token:" + value); - this.refreshToken = value; + user.setRefreshToken(value); refreshAccessToken(); stopService(); } diff --git a/app/src/main/java/com/github/catvod/bean/ali/Sorter.java b/app/src/main/java/com/github/catvod/bean/ali/Sorter.java deleted file mode 100644 index 3ac7fe35..00000000 --- a/app/src/main/java/com/github/catvod/bean/ali/Sorter.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.github.catvod.bean.ali; - -import com.github.catvod.utils.Utils; - -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -public class Sorter implements Comparator { - - public static void sort(List items) { - Collections.sort(items, new Sorter()); - } - - @Override - public int compare(Item o1, Item o2) { - try { - return Integer.compare(getDigit(o1.getDisplayName()), getDigit(o2.getDisplayName())); - } catch (NumberFormatException e) { - return o1.getDisplayName().compareToIgnoreCase(o2.getDisplayName()); - } - } - - private int getDigit(String text) throws NumberFormatException { - return Integer.parseInt(Utils.removeExt(text).replaceAll("\\D+", "")); - } -} diff --git a/app/src/main/java/com/github/catvod/bean/alist/Item.java b/app/src/main/java/com/github/catvod/bean/alist/Item.java index 016f1bda..1e542e5e 100644 --- a/app/src/main/java/com/github/catvod/bean/alist/Item.java +++ b/app/src/main/java/com/github/catvod/bean/alist/Item.java @@ -94,12 +94,13 @@ public class Item { } public boolean isMedia(boolean isNew) { + if (getName().endsWith(".ts") || getName().endsWith(".mpg")) return true; if (isNew) return getType() == 2 || getType() == 3; return getType() == 3 || getType() == 4; } public boolean ignore(boolean isNew) { - if (getName().endsWith(".ts")) return false; + if (getName().endsWith(".ts") || getName().endsWith(".mpg")) return false; if (isNew) return getType() == 0 || getType() == 4; return getType() == 0 || getType() == 2 || getType() == 5; } diff --git a/app/src/main/java/com/github/catvod/spider/Ali.java b/app/src/main/java/com/github/catvod/spider/Ali.java index 1a1d45c0..348ab57c 100644 --- a/app/src/main/java/com/github/catvod/spider/Ali.java +++ b/app/src/main/java/com/github/catvod/spider/Ali.java @@ -46,8 +46,7 @@ public class Ali extends Spider { @Override public String playerContent(String flag, String id, List vipFlags) { String[] ids = id.split("\\+"); - String url = flag.equals("原畫") ? API.get().getDownloadUrl(ids[0]) : API.get().getPreviewUrl(ids[0], flag); - return Result.get().url(url).subs(API.get().getSub(ids)).header(API.get().getHeader()).parse(0).string(); + return flag.equals("原畫") ? API.get().playerContent(ids) : API.get().playerContent(ids, flag); } public static Object[] proxy(Map params) { diff --git a/app/src/main/java/com/github/catvod/spider/Bili.java b/app/src/main/java/com/github/catvod/spider/Bili.java index e4980a13..608878a0 100644 --- a/app/src/main/java/com/github/catvod/spider/Bili.java +++ b/app/src/main/java/com/github/catvod/spider/Bili.java @@ -5,6 +5,7 @@ import android.content.Context; import android.content.DialogInterface; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; +import android.net.Uri; import android.text.TextUtils; import android.view.Gravity; import android.widget.FrameLayout; @@ -23,13 +24,10 @@ import org.json.JSONArray; import org.json.JSONObject; import org.jsoup.Jsoup; -import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Objects; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -202,14 +200,10 @@ public class Bili extends Spider { } private void setCookie(String url) { - String cookie = ""; - try { - URL abc = new URL(url); - String[] kk = abc.getQuery().split("&"); - for (String a : kk) cookie += a + ";"; - } catch (Exception ignored) { - } - Prefers.put("BiliCookie", cookie); + StringBuilder cookie = new StringBuilder(); + String[] aa = Uri.parse(url).getQuery().split("&"); + for (String a : aa) cookie.append(a).append(";"); + Prefers.put("BiliCookie", cookie.toString()); Init.show("請重新進入播放頁"); stopService(); } diff --git a/app/src/main/java/com/github/catvod/spider/Miss.java b/app/src/main/java/com/github/catvod/spider/Miss.java index 266a46ac..824c8086 100644 --- a/app/src/main/java/com/github/catvod/spider/Miss.java +++ b/app/src/main/java/com/github/catvod/spider/Miss.java @@ -35,7 +35,7 @@ public class Miss extends Spider { String typeId = a.attr("href").replace(url, ""); if (!typeIds.contains(typeId)) continue; classes.add(new Class(typeId, typeName)); - filters.put(typeId, List.of(new Filter("filters", "過濾", Arrays.asList(new Filter.Value("全部", ""), new Filter.Value("單人作品", "individual"), new Filter.Value("中文字幕", "chinese-subtitle"))))); + filters.put(typeId, Arrays.asList(new Filter("filters", "過濾", Arrays.asList(new Filter.Value("全部", ""), new Filter.Value("單人作品", "individual"), new Filter.Value("中文字幕", "chinese-subtitle"))))); } for (Element div : doc.select("div.thumbnail")) { String id = div.select("a.text-secondary").attr("href").replace(url, ""); @@ -61,6 +61,7 @@ public class Miss extends Spider { String name = div.select("a.text-secondary").text(); String pic = div.select("img").attr("data-src"); if (pic.isEmpty()) pic = div.select("img").attr("src"); + if (TextUtils.isEmpty(name)) continue; String remark = div.select("span").text(); list.add(new Vod(id, name, pic, remark)); } diff --git a/app/src/main/java/com/github/catvod/spider/TuGou.java b/app/src/main/java/com/github/catvod/spider/TuGou.java new file mode 100644 index 00000000..2bb1fcfb --- /dev/null +++ b/app/src/main/java/com/github/catvod/spider/TuGou.java @@ -0,0 +1,59 @@ +package com.github.catvod.spider; + +import android.content.Context; + +import com.github.catvod.bean.Result; +import com.github.catvod.bean.Vod; +import com.github.catvod.net.OkHttp; +import com.github.catvod.utils.Utils; + +import org.jsoup.Jsoup; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +import java.util.List; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +/** + * @author zhixc + */ +public class TuGou extends Ali { + + private final String URL = "https://tugousou.com"; + + private Map getHeader() { + Map header = new HashMap<>(); + header.put("User-Agent", Utils.CHROME); + header.put("Host", "tugousou.com"); + header.put("Origin", URL); + header.put("Referer", URL + "/"); + return header; + } + + @Override + public void init(Context context, String extend) { + super.init(context, extend); + } + + @Override + public String searchContent(String key, boolean quick) { + Map params = new HashMap<>(); + params.put("keyword", key); + String html = OkHttp.post(URL + "/search", params, getHeader()); + Element container = Jsoup.parse(html).select(".layui-container").get(1); + Elements aElements = container.select("p[class=layui-font-16] > a"); + Elements pElements = container.select("p[class=layui-font-14 layui-font-gray text-align-right]"); + List list = new ArrayList<>(); + for (int i = 0; i < aElements.size(); i++) { + Element item = aElements.get(i); + String vodId = item.attr("href"); + String name = item.text(); + String pic = "https://inews.gtimg.com/newsapp_bt/0/13263837859/1000"; + String remark = pElements.get(i).text(); + list.add(new Vod(vodId, name, pic, remark)); + } + return Result.string(list); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/Zhaozy.java b/app/src/main/java/com/github/catvod/spider/Zhaozy.java index 5df3b959..b286cee3 100644 --- a/app/src/main/java/com/github/catvod/spider/Zhaozy.java +++ b/app/src/main/java/com/github/catvod/spider/Zhaozy.java @@ -69,7 +69,7 @@ public class Zhaozy extends Ali { @Override public String searchContent(String key, boolean quick) throws Exception { - String url = siteUrl + "sos?filename=" + URLEncoder.encode(key); + String url = siteUrl + "so?filename=" + URLEncoder.encode(key); Document doc = Jsoup.parse(OkHttp.string(url, getHeader())); List list = new ArrayList<>(); for (Element element : doc.select("div.li_con div.news_text")) { diff --git a/app/src/main/java/com/github/catvod/utils/FileUtil.java b/app/src/main/java/com/github/catvod/utils/FileUtil.java index ed239ba5..44763249 100644 --- a/app/src/main/java/com/github/catvod/utils/FileUtil.java +++ b/app/src/main/java/com/github/catvod/utils/FileUtil.java @@ -11,12 +11,16 @@ import java.io.InputStreamReader; public class FileUtil { - public static File getCacheDir() { + public static File getExternalCacheDir() { return Init.context().getExternalCacheDir(); } + public static File getCacheDir() { + return Init.context().getCacheDir(); + } + public static File getCacheFile(String fileName) { - return new File(getCacheDir(), fileName); + return getExternalCacheDir().canWrite() ? new File(getExternalCacheDir(), fileName) : new File(getCacheDir(), fileName); } public static void write(File file, String data) { diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 644136f4..7277070f 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 93d70814..947887b3 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -e276d142b10b9f2c2971664d0b9dc9a3 +630997f2d36dde4644f99300f559ff68 diff --git a/json/adult.json b/json/adult.json index bb6f2054..4f903519 100644 --- a/json/adult.json +++ b/json/adult.json @@ -1,14 +1,29 @@ { - "spider": "https://raw.githubusercontent.com/FongMi/CatVodSpider/main/jar/custom_spider.jar;md5;e276d142b10b9f2c2971664d0b9dc9a3", + "spider": "https://raw.githubusercontent.com/FongMi/CatVodSpider/main/jar/custom_spider.jar;md5;630997f2d36dde4644f99300f559ff68", "wallpaper": "https://gao.chuqiuyu.tk", "sites": [ + { + "key": "AList", + "name": "AList", + "type": 3, + "api": "csp_AList", + "searchable": 1, + "changeable": 0, + "ext": { + "drives": [ + { + "name": "AV", + "server": "https://a74d291e-3b91-45a5-9ec6-9f08a9178e59.id.repl.co" + } + ] + } + }, { "key": "泥巴", "name": "泥巴", "type": 3, "api": "csp_NiNi", "searchable": 1, - "filterable": 1, "ext": "1" }, { @@ -16,568 +31,469 @@ "name": "玩偶", "type": 3, "api": "csp_Doll", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { "key": "18AV", "name": "18AV", "type": 3, "api": "csp_Eighteen", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { "key": "Jable", "name": "Jable", "type": 3, "api": "csp_Jable", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { "key": "MissAV", "name": "MissAV", "type": 3, "api": "csp_Miss", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { "key": "Supjav", "name": "Supjav", "type": 3, "api": "csp_Supjav", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { "key": "Hanime", "name": "Hanime", "type": 3, "api": "csp_Hanime", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { "key": "51smt4.xyz", "name": "成人01", "type": 1, "api": "http://51smt4.xyz/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 - }, - { - "key": "jcspcj8.com", - "name": "成人02", - "type": 0, - "api": "http://jcspcj8.com/api?ac=videolist", - "searchable": 1, - "filterable": 1 - }, - { - "key": "wmcj8.com", - "name": "成人03", - "type": 0, - "api": "http://wmcj8.com/inc/sapi.php", - "searchable": 1, - "filterable": 1 - }, - { - "key": "secj8.com", - "name": "成人04", - "type": 0, - "api": "http://secj8.com/inc/sapi.php?ac=videolist", - "searchable": 1, - "filterable": 1 - }, - { - "key": "91md.me", - "name": "成人05", - "type": 1, - "api": "http://91md.me/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 - }, - { - "key": "zmcj88.com", - "name": "成人06", - "type": 0, - "api": "http://zmcj88.com/sapi?ac=videolist", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { "key": "cjmygzy.com", - "name": "成人07", + "name": "成人02", "type": 0, "api": "http://cjmygzy.com/inc/sapi.php?ac=videolist", - "searchable": 1, - "filterable": 1 + "searchable": 1 + }, + { + "key": "secj8.com", + "name": "成人03", + "type": 0, + "api": "http://secj8.com/inc/sapi.php?ac=videolist", + "searchable": 1 + }, + { + "key": "jcspcj8.com", + "name": "成人04", + "type": 0, + "api": "http://jcspcj8.com/api?ac=videolist", + "searchable": 1 }, { "key": "bttcj.com", - "name": "成人08", + "name": "成人05", "type": 0, "api": "http://bttcj.com/inc/sapi.php", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { "key": "apilj.com", - "name": "成人09", + "name": "成人06", "type": 1, "api": "http://apilj.com/api.php/provide/vod/at/json/", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { - "key": "dadiapi.com", - "name": "成人10", + "key": "wmcj8.com", + "name": "成人07", "type": 0, - "api": "http://dadiapi.com/api.php", - "searchable": 1, - "filterable": 1 - }, - { - "key": "api.putaozy.net", - "name": "成人11", - "type": 1, - "api": "http://api.putaozy.net/inc/apijson_vod.php", - "searchable": 1, - "filterable": 1 - }, - { - "key": "api.kudian70.com", - "name": "成人12", - "type": 1, - "api": "http://api.kudian70.com/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 - }, - { - "key": "mygzycj.com", - "name": "成人13", - "type": 0, - "api": "http://mygzycj.com/api.php?ac=list", - "searchable": 1, - "filterable": 1 - }, - { - "key": "llzxcj.com", - "name": "成人14", - "type": 0, - "api": "http://llzxcj.com/inc/sck.php?ac=videolist", - "searchable": 1, - "filterable": 1 + "api": "http://wmcj8.com/inc/sapi.php", + "searchable": 1 }, { "key": "99zywcj.com", - "name": "成人15", + "name": "成人08", "type": 0, "api": "http://99zywcj.com/inc/sapi.php?ac=videolist", - "searchable": 1, - "filterable": 1 + "searchable": 1 + }, + { + "key": "91md.me", + "name": "成人09", + "type": 1, + "api": "http://91md.me/api.php/provide/vod/", + "searchable": 1 + }, + { + "key": "api.putaozy.net", + "name": "成人10", + "type": 1, + "api": "http://api.putaozy.net/inc/apijson_vod.php", + "searchable": 1 + }, + { + "key": "mygzycj.com", + "name": "成人11", + "type": 0, + "api": "http://mygzycj.com/api.php?ac=list", + "searchable": 1 + }, + { + "key": "llzxcj.com", + "name": "成人12", + "type": 0, + "api": "http://llzxcj.com/inc/sck.php?ac=videolist", + "searchable": 1 + }, + { + "key": "feifei67.com", + "name": "成人13", + "type": 1, + "api": "http://www.feifei67.com/api.php/provide/vod/", + "searchable": 1 + }, + { + "key": "dadiapi.com", + "name": "成人14", + "type": 0, + "api": "http://dadiapi.com/api.php", + "searchable": 1 + }, + { + "key": "sdszyapi.com", + "name": "成人15", + "type": 0, + "api": "http://sdszyapi.com/home/cjapi/asbb/mc10/vod/xml", + "searchable": 1 }, { "key": "f2dcj6.com", "name": "成人16", "type": 0, "api": "http://f2dcj6.com/sapi?ac=videolist", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { - "key": "api.kdapi.info", + "key": "fhapi9.com", "name": "成人17", "type": 1, - "api": "http://api.kdapi.info/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 + "api": "http://fhapi9.com/api.php/provide/vod/", + "searchable": 1 }, { "key": "ggmmzy.com", "name": "成人18", "type": 0, "api": "http://www.ggmmzy.com:9999/inc/xml", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { "key": "99zy.pw", "name": "成人19", "type": 1, "api": "http://99zy.pw/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 - }, - { - "key": "jializyzapi.com", - "name": "成人20", - "type": 1, - "api": "http://www.jializyzapi.com/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 - }, - { - "key": "sdszyapi.com", - "name": "成人21", - "type": 0, - "api": "http://sdszyapi.com/home/cjapi/asbb/mc10/vod/xml", - "searchable": 1, - "filterable": 1 - }, - { - "key": "caiji25.com", - "name": "成人22", - "type": 0, - "api": "http://www.caiji25.com/home/cjapi/p0as/mc10/vod/xml", - "searchable": 1, - "filterable": 1 - }, - { - "key": "madouse.la", - "name": "成人23", - "type": 1, - "api": "http://madouse.la/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 - }, - { - "key": "caiji21.com", - "name": "成人24", - "type": 0, - "api": "http://www.caiji21.com/home/cjapi/klkl/mc10/vod/xml", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { "key": "xjjzyapi.com", - "name": "成人25", + "name": "成人20", "type": 0, "api": "http://xjjzyapi.com/home/cjapi/askl/mc10/vod/xml", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { - "key": "feifei67.com", - "name": "成人26", + "key": "madouse.la", + "name": "成人21", "type": 1, - "api": "http://www.feifei67.com/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 + "api": "http://madouse.la/api.php/provide/vod/", + "searchable": 1 + }, + { + "key": "shabizy.com", + "name": "成人22", + "type": 0, + "api": "http://www.shabizy.com:777/inc/sea", + "searchable": 1 + }, + { + "key": "caiji21.com", + "name": "成人23", + "type": 0, + "api": "http://www.caiji21.com/home/cjapi/klkl/mc10/vod/xml", + "searchable": 1 }, { "key": "caiji26.com", - "name": "成人27", + "name": "成人24", "type": 0, "api": "http://caiji26.com/home/cjapi/p0g8/mc10/vod/xml", - "searchable": 1, - "filterable": 1 + "searchable": 1 + }, + { + "key": "caiji25.com", + "name": "成人25", + "type": 0, + "api": "http://www.caiji25.com/home/cjapi/p0as/mc10/vod/xml", + "searchable": 1 }, { "key": "caiji24.com", - "name": "成人28", + "name": "成人26", "type": 0, "api": "http://www.caiji24.com/home/cjapi/p0d2/mc10/vod/xml", - "searchable": 1, - "filterable": 1 + "searchable": 1 + }, + { + "key": "api.maozyapi.com", + "name": "成人27", + "type": 1, + "api": "https://api.maozyapi.com/inc/apijson_vod.php", + "searchable": 1 }, { "key": "888dav.com", - "name": "成人29", + "name": "成人28", "type": 1, "api": "https://www.888dav.com/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 + "searchable": 1 + }, + { + "key": "mgzyz1.com", + "name": "成人29", + "type": 1, + "api": "https://mgzyz1.com/api.php/provide/vod/", + "searchable": 1 }, { "key": "xrbsp.com", "name": "成人30", "type": 0, "api": "https://www.xrbsp.com/api/xml.php", - "searchable": 1, - "filterable": 1 - }, - { - "key": "caiji.huakuiapi.com", - "name": "成人31", - "type": 1, - "api": "https://caiji.huakuiapi.com/inc/apijson_vod.php", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { "key": "msnii.com", - "name": "成人32", + "name": "成人31", "type": 0, "api": "https://www.msnii.com/api/xml.php", - "searchable": 1, - "filterable": 1 - }, - { - "key": "mgzyz1.com", - "name": "成人33", - "type": 1, - "api": "https://mgzyz1.com/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 - }, - { - "key": "kkzy.me", - "name": "成人34", - "type": 1, - "api": "https://kkzy.me/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { "key": "mgav1.cc", - "name": "成人35", + "name": "成人32", "type": 0, "api": "https://www.mgav1.cc/api.php/provide/vod/at/xml", - "searchable": 1, - "filterable": 1 - }, - { - "key": "kudouzy.com", - "name": "成人36", - "type": 1, - "api": "https://kudouzy.com/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { "key": "afasu.com", - "name": "成人37", + "name": "成人33", "type": 0, "api": "https://www.afasu.com/api/xml.php", - "searchable": 1, - "filterable": 1 + "searchable": 1 + }, + { + "key": "caiji.huakuiapi.com", + "name": "成人34", + "type": 1, + "api": "https://caiji.huakuiapi.com/inc/apijson_vod.php", + "searchable": 1 }, { "key": "gdlsp.com", - "name": "成人38", + "name": "成人35", "type": 0, "api": "https://www.gdlsp.com/api/xml.php", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { - "key": "shayuapi.com", - "name": "成人39", + "key": "kkzy.me", + "name": "成人36", "type": 1, - "api": "https://shayuapi.com/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 - }, - { - "key": "api.ykapi.net", - "name": "成人40", - "type": 1, - "api": "https://api.ykapi.net/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 + "api": "https://kkzy.me/api.php/provide/vod/", + "searchable": 1 }, { "key": "52zyapi.com", - "name": "成人41", + "name": "成人37", "type": 0, "api": "https://52zyapi.com/home/cjapi/asda/mc10/vod/xml", - "searchable": 1, - "filterable": 1 + "searchable": 1 + }, + { + "key": "dmmapi.com", + "name": "成人38", + "type": 0, + "api": "https://www.dmmapi.com/home/cjapi/asd2c7/mc10/vod/xml", + "searchable": 1 + }, + { + "key": "apittzy.com", + "name": "成人39", + "type": 1, + "api": "https://apittzy.com/api.php/provide/vod/", + "searchable": 1 + }, + { + "key": "kxgav.com", + "name": "成人40", + "type": 0, + "api": "https://www.kxgav.com/api/xml.php", + "searchable": 1 + }, + { + "key": "lbapi9.com", + "name": "成人41", + "type": 1, + "api": "https://lbapi9.com/api.php/provide/vod/", + "searchable": 1 }, { "key": "siwazyw.cc", "name": "成人42", "type": 1, "api": "https://siwazyw.cc/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 - }, - { - "key": "kxgav.com", - "name": "成人43", - "type": 0, - "api": "https://www.kxgav.com/api/xml.php", - "searchable": 1, - "filterable": 1 - }, - { - "key": "lbapi9.com", - "name": "成人44", - "type": 1, - "api": "https://lbapi9.com/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 - }, - { - "key": "xx55zyapi.com", - "name": "成人45", - "type": 0, - "api": "https://xx55zyapi.com/home/cjapi/ascf/mc10/vod/xml", - "searchable": 1, - "filterable": 1 - }, - { - "key": "apittzy.com", - "name": "成人46", - "type": 1, - "api": "https://apittzy.com/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 - }, - { - "key": "dmmapi.com", - "name": "成人47", - "type": 0, - "api": "https://www.dmmapi.com/home/cjapi/asd2c7/mc10/vod/xml", - "searchable": 1, - "filterable": 1 - }, - { - "key": "caiji01.com", - "name": "成人48", - "type": 0, - "api": "https://www.caiji01.com/home/cjapi/cfd2/mc10/vod/xml", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { "key": "caiji07.com", - "name": "成人49", + "name": "成人43", "type": 0, "api": "https://www.caiji07.com/home/cjapi/cfcf/mc10/vod/xml", - "searchable": 1, - "filterable": 1 + "searchable": 1 + }, + { + "key": "xx55zyapi.com", + "name": "成人44", + "type": 0, + "api": "https://xx55zyapi.com/home/cjapi/ascf/mc10/vod/xml", + "searchable": 1 + }, + { + "key": "caiji23.com", + "name": "成人45", + "type": 0, + "api": "https://www.caiji23.com/home/cjapi/kls6/mc10/vod/xml", + "searchable": 1 }, { "key": "caiji22.com", - "name": "成人50", + "name": "成人46", "type": 0, "api": "https://www.caiji22.com/home/cjapi/klp0/mc10/vod/xml", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { - "key": "caiji10.com", - "name": "成人51", - "type": 0, - "api": "https://www.caiji10.com/home/cjapi/cfs6/mc10/vod/xml", - "searchable": 1, - "filterable": 1 - }, - { - "key": "caiji08.com", - "name": "成人52", - "type": 0, - "api": "https://www.caiji08.com/home/cjapi/cfkl/mc10/vod/xml", - "searchable": 1, - "filterable": 1 - }, - { - "key": "caiji03.com", - "name": "成人53", - "type": 0, - "api": "https://www.caiji03.com/home/cjapi/cfg8/mc10/vod/xml", - "searchable": 1, - "filterable": 1 - }, - { - "key": "caiji04.com", - "name": "成人54", - "type": 0, - "api": "https://www.caiji04.com/home/cjapi/cfc7/mc10/vod/xml", - "searchable": 1, - "filterable": 1 + "key": "sewozyapi.com", + "name": "成人47", + "type": 1, + "api": "https://sewozyapi.com/api.php/provide/vod/", + "searchable": 1 }, { "key": "api.xiuseapi.com", - "name": "成人55", + "name": "成人48", "type": 1, "api": "https://api.xiuseapi.com/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { - "key": "caiji05.com", + "key": "caiji03.com", + "name": "成人49", + "type": 0, + "api": "https://www.caiji03.com/home/cjapi/cfg8/mc10/vod/xml", + "searchable": 1 + }, + { + "key": "jgczyapi.com", + "name": "成人50", + "type": 0, + "api": "https://jgczyapi.com/home/cjapi/kld2/mc10/vod/xml", + "searchable": 1 + }, + { + "key": "caiji08.com", + "name": "成人51", + "type": 0, + "api": "https://www.caiji08.com/home/cjapi/cfkl/mc10/vod/xml", + "searchable": 1 + }, + { + "key": "caiji.caomeiapi.com", + "name": "成人52", + "type": 1, + "api": "https://caiji.caomeiapi.com/inc/apijson_vod.php", + "searchable": 1 + }, + { + "key": "caiji.523zyw.com", + "name": "成人53", + "type": 1, + "api": "https://caiji.523zyw.com/inc/apijson_vod.php", + "searchable": 1 + }, + { + "key": "caiji.naichaapi.com", + "name": "成人54", + "type": 1, + "api": "https://caiji.naichaapi.com/inc/apijson_vod.php", + "searchable": 1 + }, + { + "key": "caiji09.com", + "name": "成人55", + "type": 0, + "api": "https://www.caiji09.com/home/cjapi/cfp0/mc10/vod/xml", + "searchable": 1 + }, + { + "key": "caiji01.com", "name": "成人56", "type": 0, - "api": "https://www.caiji05.com/home/cjapi/cfda/mc10/vod/xml", - "searchable": 1, - "filterable": 1 + "api": "https://www.caiji01.com/home/cjapi/cfd2/mc10/vod/xml", + "searchable": 1 }, { "key": "caiji02.com", "name": "成人57", "type": 0, "api": "https://www.caiji02.com/home/cjapi/cfas/mc10/vod/xml", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { - "key": "sewozyapi.com", + "key": "caiji05.com", "name": "成人58", - "type": 1, - "api": "https://sewozyapi.com/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 + "type": 0, + "api": "https://www.caiji05.com/home/cjapi/cfda/mc10/vod/xml", + "searchable": 1 }, { - "key": "caiji09.com", + "key": "caiji10.com", "name": "成人59", "type": 0, - "api": "https://www.caiji09.com/home/cjapi/cfp0/mc10/vod/xml", - "searchable": 1, - "filterable": 1 + "api": "https://www.caiji10.com/home/cjapi/cfs6/mc10/vod/xml", + "searchable": 1 }, { - "key": "caiji23.com", + "key": "caiji04.com", "name": "成人60", "type": 0, - "api": "https://www.caiji23.com/home/cjapi/kls6/mc10/vod/xml", - "searchable": 1, - "filterable": 1 - }, - { - "key": "jgczyapi.com", - "name": "成人61", - "type": 0, - "api": "https://jgczyapi.com/home/cjapi/kld2/mc10/vod/xml", - "searchable": 1, - "filterable": 1 - }, - { - "key": "caiji.523zyw.com", - "name": "成人62", - "type": 1, - "api": "https://caiji.523zyw.com/inc/apijson_vod.php", - "searchable": 1, - "filterable": 1 - }, - { - "key": "caiji.caomeiapi.com", - "name": "成人63", - "type": 1, - "api": "https://caiji.caomeiapi.com/inc/apijson_vod.php", - "searchable": 1, - "filterable": 1 - }, - { - "key": "caiji.naichaapi.com", - "name": "成人64", - "type": 1, - "api": "https://caiji.naichaapi.com/inc/apijson_vod.php", - "searchable": 1, - "filterable": 1 + "api": "https://www.caiji04.com/home/cjapi/cfc7/mc10/vod/xml", + "searchable": 1 }, { "key": "api.apilyzy.com", - "name": "成人65", + "name": "成人61", "type": 1, "api": "https://api.apilyzy.com/api.php/provide/vod/", - "searchable": 1, - "filterable": 1 + "searchable": 1 }, { "key": "push_agent", @@ -585,7 +501,6 @@ "type": 3, "api": "csp_Push", "searchable": 1, - "filterable": 1, "changeable": 0 } ] diff --git a/json/alist.json b/json/alist.json index 4077deb0..3f6de0b9 100644 --- a/json/alist.json +++ b/json/alist.json @@ -11,16 +11,12 @@ }, { "name": "一只魚", - "server": "https://alist.youte.ml" + "server": "https://vtok.pp.ua/" }, { "name": "七米藍", "server": "https://al.chirmyram.com" }, - { - "name": "米奇", - "server": "https://anime.mqmmw.ga" - }, { "name": "神族九帝", "server": "https://alist.shenzjd.com" diff --git a/json/config.json b/json/config.json index 4b3abb51..c66c8b1e 100644 --- a/json/config.json +++ b/json/config.json @@ -1,5 +1,5 @@ { - "spider": "https://raw.githubusercontent.com/FongMi/CatVodSpider/main/jar/custom_spider.jar;md5;e276d142b10b9f2c2971664d0b9dc9a3", + "spider": "https://raw.githubusercontent.com/FongMi/CatVodSpider/main/jar/custom_spider.jar;md5;630997f2d36dde4644f99300f559ff68", "wallpaper": "http://饭太硬.ga/深色壁纸/api.php", "sites": [ { @@ -8,7 +8,6 @@ "type": 3, "api": "csp_Local", "searchable": 0, - "filterable": 0, "changeable": 0 }, { @@ -17,7 +16,6 @@ "type": 3, "api": "csp_AList", "searchable": 1, - "filterable": 1, "changeable": 0, "ext": "https://raw.githubusercontent.com/FongMi/CatVodSpider/main/json/alist.json" }, @@ -27,7 +25,6 @@ "type": 3, "api": "csp_WebDAV", "searchable": 1, - "filterable": 1, "changeable": 0, "ext": "https://raw.githubusercontent.com/FongMi/CatVodSpider/main/json/webdav.json" }, @@ -37,7 +34,6 @@ "type": 3, "api": "csp_Bili", "searchable": 1, - "filterable": 1, "changeable": 0, "ext": "https://raw.githubusercontent.com/FongMi/CatVodSpider/main/json/bili.json" }, @@ -47,7 +43,6 @@ "type": 3, "api": "csp_NiNi", "searchable": 1, - "filterable": 1, "changeable": 1 }, { @@ -56,7 +51,6 @@ "type": 3, "api": "csp_XPathMacFilter", "searchable": 1, - "filterable": 1, "changeable": 1, "ext": "https://raw.githubusercontent.com/FongMi/CatVodSpider/main/json/duboku.json" }, @@ -66,7 +60,6 @@ "type": 3, "api": "csp_Ying", "searchable": 1, - "filterable": 1, "changeable": 1 }, { @@ -75,7 +68,6 @@ "type": 3, "api": "csp_Dm84", "searchable": 1, - "filterable": 1, "changeable": 1 }, { @@ -84,16 +76,22 @@ "type": 3, "api": "csp_Ysj", "searchable": 1, - "filterable": 1, "changeable": 1 }, + { + "key": "土狗", + "name": "土狗", + "type": 3, + "api": "csp_TuGou", + "searchable": 1, + "changeable": 0 + }, { "key": "七夜", "name": "七夜", "type": 3, "api": "csp_Dovx", "searchable": 1, - "filterable": 0, "changeable": 0 }, { @@ -102,7 +100,6 @@ "type": 3, "api": "csp_UpYun", "searchable": 1, - "filterable": 0, "changeable": 0 }, { @@ -111,7 +108,6 @@ "type": 3, "api": "csp_PanSou", "searchable": 1, - "filterable": 0, "changeable": 0 }, { @@ -120,7 +116,6 @@ "type": 3, "api": "csp_PanSearch", "searchable": 1, - "filterable": 0, "changeable": 0 }, { @@ -129,7 +124,6 @@ "type": 3, "api": "csp_Zhaozy", "searchable": 1, - "filterable": 0, "changeable": 0, "ext": "影視天下第一$$$test2$$$test2" }, @@ -139,7 +133,6 @@ "type": 3, "api": "csp_Push", "searchable": 1, - "filterable": 0, "changeable": 0 } ]