Merge branch 'main' of github.com:FongMi/CatVodSpider
This commit is contained in:
commit
451aa69194
|
|
@ -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<String, String> getHeader() {
|
||||
|
|
@ -117,6 +119,7 @@ public class API {
|
|||
HashMap<String, String> 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<String> playFrom = Arrays.asList("原畫", "超清", "高清");
|
||||
List<String> episode = new ArrayList<>();
|
||||
List<String> 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<Sub> getSub(String[] ids) {
|
||||
public List<Sub> getSubs(String[] ids) {
|
||||
List<Sub> 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<Sub> 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<Sub> 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<Sub> 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<String, String> 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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Item> {
|
||||
|
||||
public static void sort(List<Item> 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+", ""));
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,8 +46,7 @@ public class Ali extends Spider {
|
|||
@Override
|
||||
public String playerContent(String flag, String id, List<String> 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<String, String> params) {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String, String> getHeader() {
|
||||
Map<String, String> 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<String, String> 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<Vod> 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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Vod> list = new ArrayList<>();
|
||||
for (Element element : doc.select("div.li_con div.news_text")) {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1 +1 @@
|
|||
e276d142b10b9f2c2971664d0b9dc9a3
|
||||
630997f2d36dde4644f99300f559ff68
|
||||
|
|
|
|||
671
json/adult.json
671
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
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
]
|
||||
|
|
|
|||
Loading…
Reference in New Issue