Merge remote-tracking branch 'origin/master'
# Conflicts: # jar/custom_spider.jar # jar/custom_spider.jar.md5
This commit is contained in:
commit
b874e557b5
|
|
@ -38,7 +38,7 @@ dependencies {
|
||||||
implementation 'com.google.net.cronet:cronet-okhttp:0.1.0'
|
implementation 'com.google.net.cronet:cronet-okhttp:0.1.0'
|
||||||
implementation 'androidx.annotation:annotation:1.5.0'
|
implementation 'androidx.annotation:annotation:1.5.0'
|
||||||
implementation 'com.squareup.okhttp3:okhttp:3.12.13'
|
implementation 'com.squareup.okhttp3:okhttp:3.12.13'
|
||||||
implementation 'com.google.code.gson:gson:2.10.1'
|
implementation 'com.google.code.gson:gson:2.8.6'
|
||||||
implementation 'cn.wanghaomiao:JsoupXpath:2.5.1'
|
implementation 'cn.wanghaomiao:JsoupXpath:2.5.1'
|
||||||
implementation 'com.google.zxing:core:3.3.0'
|
implementation 'com.google.zxing:core:3.3.0'
|
||||||
implementation 'com.alibaba:fastjson:1.2.31'
|
implementation 'com.alibaba:fastjson:1.2.31'
|
||||||
|
|
|
||||||
|
|
@ -1,65 +0,0 @@
|
||||||
package com.github.catvod.parser;
|
|
||||||
|
|
||||||
import android.util.Base64;
|
|
||||||
|
|
||||||
import com.github.catvod.crawler.SpiderDebug;
|
|
||||||
import com.github.catvod.net.OkHttp;
|
|
||||||
import com.github.catvod.utils.Utils;
|
|
||||||
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class JsonBasic {
|
|
||||||
|
|
||||||
public static JSONObject parse(LinkedHashMap<String, String> jx, String url) {
|
|
||||||
SpiderDebug.log("Load Json Parse Basic...");
|
|
||||||
if (jx.isEmpty()) return new JSONObject();
|
|
||||||
Set<String> jxNames = jx.keySet();
|
|
||||||
for (String jxName : jxNames) {
|
|
||||||
String parseUrl = jx.get(jxName);
|
|
||||||
HashMap<String, String> reqHeaders = getReqHeader(parseUrl);
|
|
||||||
try {
|
|
||||||
String realUrl = reqHeaders.get("url");
|
|
||||||
reqHeaders.remove("url");
|
|
||||||
SpiderDebug.log(realUrl + url);
|
|
||||||
String json = OkHttp.string(realUrl + url, reqHeaders);
|
|
||||||
JSONObject taskResult = Utils.jsonParse(url, json);
|
|
||||||
if (taskResult == null) continue;
|
|
||||||
taskResult.put("jxFrom", jxName);
|
|
||||||
SpiderDebug.log(taskResult.toString());
|
|
||||||
return taskResult;
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return new JSONObject();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HashMap<String, String> getReqHeader(String url) {
|
|
||||||
HashMap<String, String> reqHeaders = new HashMap<>();
|
|
||||||
reqHeaders.put("url", url);
|
|
||||||
if (!url.contains("cat_ext")) return reqHeaders;
|
|
||||||
try {
|
|
||||||
int start = url.indexOf("cat_ext=");
|
|
||||||
int end = url.indexOf("&", start);
|
|
||||||
String ext = url.substring(start + 8, end);
|
|
||||||
ext = new String(Base64.decode(ext, Base64.DEFAULT | Base64.URL_SAFE | Base64.NO_WRAP));
|
|
||||||
String newUrl = url.substring(0, start) + url.substring(end + 1);
|
|
||||||
JSONObject jsonObject = new JSONObject(ext);
|
|
||||||
if (jsonObject.has("header")) {
|
|
||||||
JSONObject headerJson = jsonObject.optJSONObject("header");
|
|
||||||
Iterator<String> keys = headerJson.keys();
|
|
||||||
while (keys.hasNext()) {
|
|
||||||
String key = keys.next();
|
|
||||||
reqHeaders.put(key, headerJson.optString(key, ""));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
reqHeaders.put("url", newUrl);
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
return reqHeaders;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,71 +0,0 @@
|
||||||
package com.github.catvod.parser;
|
|
||||||
|
|
||||||
import com.github.catvod.crawler.SpiderDebug;
|
|
||||||
import com.github.catvod.net.OkHttp;
|
|
||||||
import com.github.catvod.utils.Utils;
|
|
||||||
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.CompletionService;
|
|
||||||
import java.util.concurrent.ExecutorCompletionService;
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.concurrent.Future;
|
|
||||||
|
|
||||||
public class JsonParallel {
|
|
||||||
|
|
||||||
private static final String ParseOKTag = "p_json_parse";
|
|
||||||
|
|
||||||
public static JSONObject parse(LinkedHashMap<String, String> jx, String url) {
|
|
||||||
if (jx.isEmpty()) return new JSONObject();
|
|
||||||
ExecutorService service = Executors.newFixedThreadPool(3);
|
|
||||||
CompletionService<JSONObject> completionService = new ExecutorCompletionService<>(service);
|
|
||||||
List<Future<JSONObject>> futures = new ArrayList<>();
|
|
||||||
Set<String> jxNames = jx.keySet();
|
|
||||||
for (String jxName : jxNames) {
|
|
||||||
String parseUrl = jx.get(jxName);
|
|
||||||
futures.add(completionService.submit(() -> {
|
|
||||||
try {
|
|
||||||
HashMap<String, String> reqHeaders = JsonBasic.getReqHeader(parseUrl);
|
|
||||||
String realUrl = reqHeaders.get("url");
|
|
||||||
reqHeaders.remove("url");
|
|
||||||
SpiderDebug.log(realUrl + url);
|
|
||||||
String json = OkHttp.string(realUrl + url, ParseOKTag, reqHeaders);
|
|
||||||
JSONObject taskResult = Utils.jsonParse(url, json);
|
|
||||||
taskResult.put("jxFrom", jxName);
|
|
||||||
SpiderDebug.log(taskResult.toString());
|
|
||||||
return taskResult;
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
JSONObject pTaskResult = null;
|
|
||||||
for (int i = 0; i < futures.size(); ++i) {
|
|
||||||
try {
|
|
||||||
Future<JSONObject> completed = completionService.take();
|
|
||||||
pTaskResult = completed.get();
|
|
||||||
if (pTaskResult != null) {
|
|
||||||
OkHttp.cancel(ParseOKTag);
|
|
||||||
for (int j = 0; j < futures.size(); j++) {
|
|
||||||
try {
|
|
||||||
futures.get(j).cancel(true);
|
|
||||||
} catch (Exception e) {
|
|
||||||
SpiderDebug.log(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
futures.clear();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
service.shutdownNow();
|
|
||||||
return pTaskResult != null ? pTaskResult : new JSONObject();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
||||||
package com.github.catvod.parser;
|
|
||||||
|
|
||||||
import com.github.catvod.crawler.SpiderDebug;
|
|
||||||
import com.github.catvod.net.OkHttp;
|
|
||||||
import com.github.catvod.utils.Utils;
|
|
||||||
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class JsonSequence {
|
|
||||||
|
|
||||||
public static JSONObject parse(LinkedHashMap<String, String> jx, String url) {
|
|
||||||
if (jx.isEmpty()) return new JSONObject();
|
|
||||||
Set<String> jxNames = jx.keySet();
|
|
||||||
for (String jxName : jxNames) {
|
|
||||||
try {
|
|
||||||
String parseUrl = jx.get(jxName);
|
|
||||||
HashMap<String, String> reqHeaders = JsonBasic.getReqHeader(parseUrl);
|
|
||||||
String realUrl = reqHeaders.get("url");
|
|
||||||
reqHeaders.remove("url");
|
|
||||||
SpiderDebug.log(realUrl + url);
|
|
||||||
String json = OkHttp.string(realUrl + url, reqHeaders);
|
|
||||||
JSONObject taskResult = Utils.jsonParse(url, json);
|
|
||||||
if (taskResult == null) continue;
|
|
||||||
taskResult.put("jxFrom", jxName);
|
|
||||||
return taskResult;
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return new JSONObject();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,88 +0,0 @@
|
||||||
package com.github.catvod.parser;
|
|
||||||
|
|
||||||
import android.util.Base64;
|
|
||||||
|
|
||||||
import org.json.JSONArray;
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
|
|
||||||
public class MixDemo {
|
|
||||||
|
|
||||||
private static final HashMap<String, ArrayList<String>> flagWebJx = new HashMap<>();
|
|
||||||
private static HashMap<String, ArrayList<String>> configs = null;
|
|
||||||
|
|
||||||
private static void setConfigs(LinkedHashMap<String, HashMap<String, String>> jx) {
|
|
||||||
configs = new HashMap<>();
|
|
||||||
for (String key : jx.keySet()) {
|
|
||||||
HashMap<String, String> parseBean = jx.get(key);
|
|
||||||
String type = parseBean.get("type");
|
|
||||||
if (type.equals("1") || type.equals("0")) {
|
|
||||||
try {
|
|
||||||
JSONArray flags = new JSONObject(parseBean.get("ext")).getJSONArray("flag");
|
|
||||||
for (int j = 0; j < flags.length(); j++) {
|
|
||||||
String flagKey = flags.getString(j);
|
|
||||||
ArrayList<String> flagJx = configs.get(flagKey);
|
|
||||||
if (flagJx == null) {
|
|
||||||
flagJx = new ArrayList<>();
|
|
||||||
configs.put(flagKey, flagJx);
|
|
||||||
}
|
|
||||||
flagJx.add(key);
|
|
||||||
}
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static JSONObject parse(LinkedHashMap<String, HashMap<String, String>> jx, String nameMe, String flag, String url) {
|
|
||||||
try {
|
|
||||||
if (configs == null) setConfigs(jx);
|
|
||||||
LinkedHashMap<String, String> jsonJx = new LinkedHashMap<>();
|
|
||||||
ArrayList<String> webJx = new ArrayList<>();
|
|
||||||
ArrayList<String> flagJx = configs.get(flag);
|
|
||||||
if (flagJx != null && !flagJx.isEmpty()) {
|
|
||||||
for (int i = 0; i < flagJx.size(); i++) {
|
|
||||||
String key = flagJx.get(i);
|
|
||||||
HashMap<String, String> parseBean = jx.get(key);
|
|
||||||
String type = parseBean.get("type");
|
|
||||||
if (type.equals("1")) {
|
|
||||||
jsonJx.put(key, mixUrl(parseBean.get("url"), parseBean.get("ext")));
|
|
||||||
} else if (type.equals("0")) {
|
|
||||||
webJx.add(parseBean.get("url"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (String key : jx.keySet()) {
|
|
||||||
HashMap<String, String> parseBean = jx.get(key);
|
|
||||||
String type = parseBean.get("type");
|
|
||||||
if (type.equals("1")) {
|
|
||||||
jsonJx.put(key, mixUrl(parseBean.get("url"), parseBean.get("ext")));
|
|
||||||
} else if (type.equals("0")) {
|
|
||||||
webJx.add(parseBean.get("url"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!webJx.isEmpty()) flagWebJx.put(flag, webJx);
|
|
||||||
JSONObject jsonResult = JsonParallel.parse(jsonJx, url);
|
|
||||||
if (jsonResult.has("url")) return jsonResult;
|
|
||||||
if (!webJx.isEmpty()) {
|
|
||||||
JSONObject webResult = new JSONObject();
|
|
||||||
webResult.put("url", "proxy://do=parseMix&flag=" + flag + "&url=" + Base64.encodeToString(url.getBytes(), Base64.DEFAULT | Base64.URL_SAFE | Base64.NO_WRAP));
|
|
||||||
webResult.put("parse", 1);
|
|
||||||
return webResult;
|
|
||||||
}
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
return new JSONObject();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String mixUrl(String url, String ext) {
|
|
||||||
if (ext.trim().isEmpty()) return url;
|
|
||||||
int index = url.indexOf("?");
|
|
||||||
if (index == -1) return url;
|
|
||||||
return url.substring(0, index + 1) + "cat_ext=" + Base64.encodeToString(ext.getBytes(), Base64.DEFAULT | Base64.URL_SAFE | Base64.NO_WRAP) + "&" + url.substring(index + 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -13,9 +13,6 @@ import android.webkit.WebViewClient;
|
||||||
import com.github.catvod.crawler.SpiderDebug;
|
import com.github.catvod.crawler.SpiderDebug;
|
||||||
import com.github.catvod.spider.Init;
|
import com.github.catvod.spider.Init;
|
||||||
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
|
|
@ -75,39 +72,6 @@ public class Utils {
|
||||||
return src;
|
return src;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static JSONObject fixJsonVodHeader(JSONObject headers, String input, String url) throws JSONException {
|
|
||||||
if (headers == null) headers = new JSONObject();
|
|
||||||
if (input.contains("www.mgtv.com")) {
|
|
||||||
headers.put("Referer", "");
|
|
||||||
headers.put("User-Agent", "Mozilla/5.0");
|
|
||||||
} else if (url.contains("titan.mgtv")) {
|
|
||||||
headers.put("Referer", "");
|
|
||||||
headers.put("User-Agent", "Mozilla/5.0");
|
|
||||||
} else if (input.contains("bilibili")) {
|
|
||||||
headers.put("Referer", "https://www.bilibili.com/");
|
|
||||||
headers.put("User-Agent", CHROME);
|
|
||||||
}
|
|
||||||
return headers;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static JSONObject jsonParse(String input, String json) throws JSONException {
|
|
||||||
JSONObject jsonPlayData = new JSONObject(json);
|
|
||||||
String url = jsonPlayData.getString("url");
|
|
||||||
if (url.startsWith("//")) url = "https:" + url;
|
|
||||||
if (!url.startsWith("http")) return null;
|
|
||||||
if (url.equals(input)) if (isVip(url) || !isVideoFormat(url)) return null;
|
|
||||||
JSONObject headers = new JSONObject();
|
|
||||||
String ua = jsonPlayData.optString("user-agent", "");
|
|
||||||
if (ua.trim().length() > 0) headers.put("User-Agent", ua);
|
|
||||||
String referer = jsonPlayData.optString("referer", "");
|
|
||||||
if (referer.trim().length() > 0) headers.put("Referer", referer);
|
|
||||||
headers = Utils.fixJsonVodHeader(headers, input, url);
|
|
||||||
JSONObject taskResult = new JSONObject();
|
|
||||||
taskResult.put("header", headers);
|
|
||||||
taskResult.put("url", url);
|
|
||||||
return taskResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String substring(String text) {
|
public static String substring(String text) {
|
||||||
return substring(text, 1);
|
return substring(text, 1);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1 +1 @@
|
||||||
3bda63c12e463189328eecf144f59503
|
008dbb5b68b754af12a2337810f78dc0
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"spider": "https://gh-proxy.com/https://raw.githubusercontent.com/FongMi/CatVodSpider/main/jar/custom_spider.jar;md5;384628eab024a2a40a57835d2f0684d8",
|
"spider": "https://gh-proxy.com/https://raw.githubusercontent.com/FongMi/CatVodSpider/main/jar/custom_spider.jar;md5;008dbb5b68b754af12a2337810f78dc0",
|
||||||
"wallpaper": "https://gao.chuqiuyu.tk",
|
"wallpaper": "https://gao.chuqiuyu.tk",
|
||||||
"lives": [
|
"lives": [
|
||||||
{
|
{
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
"api": "csp_AList",
|
"api": "csp_AList",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"filterable": 1,
|
"filterable": 1,
|
||||||
"switchable": 0,
|
"changeable": 0,
|
||||||
"ext": {
|
"ext": {
|
||||||
"drives": [
|
"drives": [
|
||||||
{
|
{
|
||||||
|
|
@ -610,7 +610,7 @@
|
||||||
"api": "csp_Push",
|
"api": "csp_Push",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"filterable": 1,
|
"filterable": 1,
|
||||||
"switchable": 0,
|
"changeable": 0,
|
||||||
"ext": "https://agit.ai/Yoursmile7/TVBox/raw/branch/master/token.txt"
|
"ext": "https://agit.ai/Yoursmile7/TVBox/raw/branch/master/token.txt"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,8 @@
|
||||||
{
|
{
|
||||||
"drives": [
|
"drives": [
|
||||||
{
|
{
|
||||||
"name": "小雅",
|
"name": "肥羊",
|
||||||
"server": "http://alist.xiaoya.pro"
|
"server": "https://pan.d1.mk"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "杜比",
|
|
||||||
"server": "https://dubi.tk"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "帥鵬",
|
|
||||||
"server": "https://hi.shuaipeng.wang"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "星夢",
|
|
||||||
"server": "https://pan.bashroot.top"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "梓澪",
|
|
||||||
"server": "https://zi0.cc"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "米奇",
|
|
||||||
"server": "https://anime.mqmmw.ga"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "觸光",
|
"name": "觸光",
|
||||||
|
|
@ -37,20 +17,16 @@
|
||||||
"server": "https://al.chirmyram.com"
|
"server": "https://al.chirmyram.com"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "雲播放",
|
"name": "米奇",
|
||||||
"server": "https://quanzi.laoxianghuijia.cn"
|
"server": "https://anime.mqmmw.ga"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "姬路白雪",
|
|
||||||
"server": "https://pan.jlbx.xyz"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "神族九帝",
|
"name": "神族九帝",
|
||||||
"server": "https://alist.shenzjd.com"
|
"server": "https://alist.shenzjd.com"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "資源小站",
|
"name": "梓澪",
|
||||||
"server": "https://960303.xyz"
|
"server": "https://zi0.cc"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"spider": "https://gh-proxy.com/https://raw.githubusercontent.com/FongMi/CatVodSpider/main/jar/custom_spider.jar;md5;384628eab024a2a40a57835d2f0684d8",
|
"spider": "https://gh-proxy.com/https://raw.githubusercontent.com/FongMi/CatVodSpider/main/jar/custom_spider.jar;md5;008dbb5b68b754af12a2337810f78dc0",
|
||||||
"wallpaper": "http://www.kf666888.cn/api/tvbox/img",
|
"wallpaper": "http://www.kf666888.cn/api/tvbox/img",
|
||||||
"lives": [
|
"lives": [
|
||||||
{
|
{
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
"api": "csp_AList",
|
"api": "csp_AList",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"filterable": 1,
|
"filterable": 1,
|
||||||
"switchable": 0,
|
"changeable": 0,
|
||||||
"ext": "https://gh-proxy.com/https://raw.githubusercontent.com/FongMi/CatVodSpider/main/json/alist.json"
|
"ext": "https://gh-proxy.com/https://raw.githubusercontent.com/FongMi/CatVodSpider/main/json/alist.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
"api": "csp_Bili",
|
"api": "csp_Bili",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"filterable": 1,
|
"filterable": 1,
|
||||||
"switchable": 0,
|
"changeable": 0,
|
||||||
"ext": "https://gh-proxy.com/https://raw.githubusercontent.com/FongMi/CatVodSpider/main/json/bili.json"
|
"ext": "https://gh-proxy.com/https://raw.githubusercontent.com/FongMi/CatVodSpider/main/json/bili.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -38,7 +38,7 @@
|
||||||
"api": "csp_NiNi",
|
"api": "csp_NiNi",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"filterable": 1,
|
"filterable": 1,
|
||||||
"switchable": 1
|
"changeable": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "快播",
|
"key": "快播",
|
||||||
|
|
@ -47,7 +47,7 @@
|
||||||
"api": "https://www.kuaibozy.com/api.php/provide/vod/",
|
"api": "https://www.kuaibozy.com/api.php/provide/vod/",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"filterable": 0,
|
"filterable": 0,
|
||||||
"switchable": 1,
|
"changeable": 1,
|
||||||
"categories": [
|
"categories": [
|
||||||
"动漫",
|
"动漫",
|
||||||
"国产剧",
|
"国产剧",
|
||||||
|
|
@ -73,7 +73,7 @@
|
||||||
"api": "https://api.apibdzy.com/api.php/provide/vod/",
|
"api": "https://api.apibdzy.com/api.php/provide/vod/",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"filterable": 0,
|
"filterable": 0,
|
||||||
"switchable": 1,
|
"changeable": 1,
|
||||||
"categories": [
|
"categories": [
|
||||||
"国产动漫",
|
"国产动漫",
|
||||||
"日韩动漫",
|
"日韩动漫",
|
||||||
|
|
@ -97,7 +97,7 @@
|
||||||
"api": "csp_Ying",
|
"api": "csp_Ying",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"filterable": 1,
|
"filterable": 1,
|
||||||
"switchable": 1
|
"changeable": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "巴士",
|
"key": "巴士",
|
||||||
|
|
@ -106,7 +106,7 @@
|
||||||
"api": "csp_Dm84",
|
"api": "csp_Dm84",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"filterable": 1,
|
"filterable": 1,
|
||||||
"switchable": 1
|
"changeable": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "異界",
|
"key": "異界",
|
||||||
|
|
@ -115,7 +115,7 @@
|
||||||
"api": "csp_Ysj",
|
"api": "csp_Ysj",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"filterable": 1,
|
"filterable": 1,
|
||||||
"switchable": 1
|
"changeable": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "紙條",
|
"key": "紙條",
|
||||||
|
|
@ -124,7 +124,7 @@
|
||||||
"api": "csp_Paper",
|
"api": "csp_Paper",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"filterable": 1,
|
"filterable": 1,
|
||||||
"switchable": 0,
|
"changeable": 0,
|
||||||
"ext": "https://agit.ai/Yoursmile7/TVBox/raw/branch/master/token.txt"
|
"ext": "https://agit.ai/Yoursmile7/TVBox/raw/branch/master/token.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -134,7 +134,7 @@
|
||||||
"api": "csp_YiSo",
|
"api": "csp_YiSo",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"filterable": 0,
|
"filterable": 0,
|
||||||
"switchable": 0,
|
"changeable": 0,
|
||||||
"ext": "https://agit.ai/Yoursmile7/TVBox/raw/branch/master/token.txt"
|
"ext": "https://agit.ai/Yoursmile7/TVBox/raw/branch/master/token.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -144,7 +144,7 @@
|
||||||
"api": "csp_PanSou",
|
"api": "csp_PanSou",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"filterable": 0,
|
"filterable": 0,
|
||||||
"switchable": 0,
|
"changeable": 0,
|
||||||
"ext": "https://agit.ai/Yoursmile7/TVBox/raw/branch/master/token.txt"
|
"ext": "https://agit.ai/Yoursmile7/TVBox/raw/branch/master/token.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -154,7 +154,7 @@
|
||||||
"api": "csp_UpYun",
|
"api": "csp_UpYun",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"filterable": 0,
|
"filterable": 0,
|
||||||
"switchable": 0,
|
"changeable": 0,
|
||||||
"ext": "https://agit.ai/Yoursmile7/TVBox/raw/branch/master/token.txt"
|
"ext": "https://agit.ai/Yoursmile7/TVBox/raw/branch/master/token.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -164,7 +164,7 @@
|
||||||
"api": "csp_Zhaozy",
|
"api": "csp_Zhaozy",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"filterable": 0,
|
"filterable": 0,
|
||||||
"switchable": 0,
|
"changeable": 0,
|
||||||
"ext": "https://agit.ai/Yoursmile7/TVBox/raw/branch/master/token.txt$$$yingshi$$$abcd1234"
|
"ext": "https://agit.ai/Yoursmile7/TVBox/raw/branch/master/token.txt$$$yingshi$$$abcd1234"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -174,7 +174,7 @@
|
||||||
"api": "csp_Live",
|
"api": "csp_Live",
|
||||||
"searchable": 0,
|
"searchable": 0,
|
||||||
"filterable": 0,
|
"filterable": 0,
|
||||||
"switchable": 0,
|
"changeable": 0,
|
||||||
"ext": "2000"
|
"ext": "2000"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -184,7 +184,7 @@
|
||||||
"api": "csp_Push",
|
"api": "csp_Push",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"filterable": 0,
|
"filterable": 0,
|
||||||
"switchable": 0,
|
"changeable": 0,
|
||||||
"ext": "https://agit.ai/Yoursmile7/TVBox/raw/branch/master/token.txt"
|
"ext": "https://agit.ai/Yoursmile7/TVBox/raw/branch/master/token.txt"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
5803
json/live.json
5803
json/live.json
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue