Clean code

This commit is contained in:
FongMi 2023-09-18 00:28:09 +08:00
parent 8db7c6a4d3
commit 88c3d0b1ad
5 changed files with 296 additions and 431 deletions

View File

@ -2,10 +2,12 @@ package com.github.catvod.spider;
import android.content.Context; import android.content.Context;
import android.text.TextUtils; import android.text.TextUtils;
import com.github.catvod.crawler.Spider; import com.github.catvod.crawler.Spider;
import com.github.catvod.crawler.SpiderDebug; import com.github.catvod.crawler.SpiderDebug;
import com.github.catvod.net.OkHttp; import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Utils; import com.github.catvod.utils.Utils;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
@ -17,7 +19,6 @@ import java.util.regex.Pattern;
/** /**
* M浏览器中的App影视 * M浏览器中的App影视
* <p>
* Author: 群友 不负此生 * Author: 群友 不负此生
*/ */
public class AppYsV2 extends Spider { public class AppYsV2 extends Spider {
@ -27,140 +28,208 @@ public class AppYsV2 extends Spider {
super.init(context, extend); super.init(context, extend);
try { try {
extInfos = extend.split("###"); extInfos = extend.split("###");
} catch (Throwable th) { } catch (Exception ignored) {
} }
} }
@Override @Override
public String homeContent(boolean filter) { public String homeContent(boolean filter) throws Exception {
try { String url = getCateUrl(getApiUrl());
String url = getCateUrl(getApiUrl()); JSONArray jsonArray = null;
JSONArray jsonArray = null; if (!url.isEmpty()) {
if (!url.isEmpty()) { SpiderDebug.log(url);
SpiderDebug.log(url); String json = OkHttp.string(url, getHeaders(url));
String json = desc(OkHttp.string(url, getHeaders(url)), (byte) 0); JSONObject obj = new JSONObject(json);
JSONObject obj = new JSONObject(json); if (obj.has("list") && obj.get("list") instanceof JSONArray) {
if (obj.has("list") && obj.get("list") instanceof JSONArray) { jsonArray = obj.getJSONArray("list");
jsonArray = obj.getJSONArray("list"); } else if (obj.has("data") && obj.get("data") instanceof JSONObject && obj.getJSONObject("data").has("list") && obj.getJSONObject("data").get("list") instanceof JSONArray) {
} else if (obj.has("data") && obj.get("data") instanceof JSONObject && obj.getJSONObject("data").has("list") && obj.getJSONObject("data").get("list") instanceof JSONArray) { jsonArray = obj.getJSONObject("data").getJSONArray("list");
jsonArray = obj.getJSONObject("data").getJSONArray("list"); } else if (obj.has("data") && obj.get("data") instanceof JSONArray) {
} else if (obj.has("data") && obj.get("data") instanceof JSONArray) { jsonArray = obj.getJSONArray("data");
jsonArray = obj.getJSONArray("data");
}
} else { // 通过filter列表读分类
String filterStr = getFilterTypes(url, null);
String[] classes = filterStr.split("\n")[0].split("\\+");
jsonArray = new JSONArray();
for (int i = 1; i < classes.length; i++) {
String[] kv = classes[i].trim().split("=");
if (kv.length < 2)
continue;
JSONObject newCls = new JSONObject();
newCls.put("type_name", kv[0].trim());
newCls.put("type_id", kv[1].trim());
jsonArray.put(newCls);
}
} }
JSONObject result = new JSONObject(); } else { // 通过filter列表读分类
JSONArray classes = new JSONArray(); String filterStr = getFilterTypes(url, null);
if (jsonArray != null) { String[] classes = filterStr.split("\n")[0].split("\\+");
for (int i = 0; i < jsonArray.length(); i++) { jsonArray = new JSONArray();
JSONObject jObj = jsonArray.getJSONObject(i); for (int i = 1; i < classes.length; i++) {
String typeName = jObj.getString("type_name"); String[] kv = classes[i].trim().split("=");
if (isBan(typeName)) if (kv.length < 2) continue;
continue; JSONObject newCls = new JSONObject();
String typeId = jObj.getString("type_id"); newCls.put("type_name", kv[0].trim());
JSONObject newCls = new JSONObject(); newCls.put("type_id", kv[1].trim());
newCls.put("type_id", typeId); jsonArray.put(newCls);
newCls.put("type_name", typeName); }
JSONObject typeExtend = jObj.optJSONObject("type_extend"); }
if (filter) { JSONObject result = new JSONObject();
String filterStr = getFilterTypes(url, typeExtend); JSONArray classes = new JSONArray();
String[] filters = filterStr.split("\n"); if (jsonArray != null) {
JSONArray filterArr = new JSONArray(); for (int i = 0; i < jsonArray.length(); i++) {
for (int k = url.isEmpty() ? 1 : 0; k < filters.length; k++) { JSONObject jObj = jsonArray.getJSONObject(i);
String l = filters[k].trim(); String typeName = jObj.getString("type_name");
if (l.isEmpty()) String typeId = jObj.getString("type_id");
continue; JSONObject newCls = new JSONObject();
String[] oneLine = l.split("\\+"); newCls.put("type_id", typeId);
String type = oneLine[0].trim(); newCls.put("type_name", typeName);
String typeN = type; JSONObject typeExtend = jObj.optJSONObject("type_extend");
if (type.contains("筛选")) { if (filter) {
type = type.replace("筛选", ""); String filterStr = getFilterTypes(url, typeExtend);
switch (type) { String[] filters = filterStr.split("\n");
case "class": JSONArray filterArr = new JSONArray();
typeN = "类型"; for (int k = url.isEmpty() ? 1 : 0; k < filters.length; k++) {
break; String l = filters[k].trim();
case "area": if (l.isEmpty()) continue;
typeN = "地区"; String[] oneLine = l.split("\\+");
break; String type = oneLine[0].trim();
case "lang": String typeN = type;
typeN = "语言"; if (type.contains("筛选")) {
break; type = type.replace("筛选", "");
case "year": switch (type) {
typeN = "年份"; case "class":
break; typeN = "类型";
} break;
case "area":
typeN = "地区";
break;
case "lang":
typeN = "语言";
break;
case "year":
typeN = "年份";
break;
} }
JSONObject jOne = new JSONObject(); }
jOne.put("key", type); JSONObject jOne = new JSONObject();
jOne.put("name", typeN); jOne.put("key", type);
JSONArray valueArr = new JSONArray(); jOne.put("name", typeN);
for (int j = 1; j < oneLine.length; j++) { JSONArray valueArr = new JSONArray();
JSONObject kvo = new JSONObject(); for (int j = 1; j < oneLine.length; j++) {
String kv = oneLine[j].trim(); JSONObject kvo = new JSONObject();
int sp = kv.indexOf("="); String kv = oneLine[j].trim();
if (sp == -1) { int sp = kv.indexOf("=");
if (isBan(kv)) if (sp == -1) {
continue; kvo.put("n", kv);
kvo.put("n", kv); kvo.put("v", kv);
kvo.put("v", kv); } else {
} else { String n = kv.substring(0, sp);
String n = kv.substring(0, sp); kvo.put("n", n.trim());
if (isBan(n)) kvo.put("v", kv.substring(sp + 1).trim());
continue;
kvo.put("n", n.trim());
kvo.put("v", kv.substring(sp + 1).trim());
}
valueArr.put(kvo);
} }
jOne.put("value", valueArr); valueArr.put(kvo);
filterArr.put(jOne);
} }
if (!result.has("filters")) { jOne.put("value", valueArr);
result.put("filters", new JSONObject()); filterArr.put(jOne);
}
result.getJSONObject("filters").put(typeId, filterArr);
} }
classes.put(newCls); if (!result.has("filters")) {
result.put("filters", new JSONObject());
}
result.getJSONObject("filters").put(typeId, filterArr);
}
classes.put(newCls);
}
}
result.put("class", classes);
return result.toString();
}
@Override
public String homeVideoContent() throws Exception {
String apiUrl = getApiUrl();
String url = getRecommendUrl(apiUrl);
boolean isTV = false;
if (url.isEmpty()) {
url = getCateFilterUrlPrefix(apiUrl) + "movie&page=1&area=&type=&start=";
isTV = true;
}
SpiderDebug.log(url);
String json = OkHttp.string(url, getHeaders(url));
JSONObject obj = new JSONObject(json);
JSONArray videos = new JSONArray();
if (isTV) {
JSONArray jsonArray = obj.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject vObj = jsonArray.getJSONObject(i);
JSONObject v = new JSONObject();
v.put("vod_id", vObj.getString("nextlink"));
v.put("vod_name", vObj.getString("title"));
v.put("vod_pic", vObj.getString("pic"));
v.put("vod_remarks", vObj.getString("state"));
videos.put(v);
}
} else {
ArrayList<JSONArray> arrays = new ArrayList<>();
findJsonArray(obj, "vlist", arrays);
if (arrays.isEmpty()) {
findJsonArray(obj, "vod_list", arrays);
}
List<String> ids = new ArrayList<>();
for (JSONArray jsonArray : arrays) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject vObj = jsonArray.getJSONObject(i);
String vid = vObj.getString("vod_id");
if (ids.contains(vid)) continue;
ids.add(vid);
JSONObject v = new JSONObject();
v.put("vod_id", vid);
v.put("vod_name", vObj.getString("vod_name"));
v.put("vod_pic", vObj.getString("vod_pic"));
v.put("vod_remarks", vObj.getString("vod_remarks"));
videos.put(v);
} }
} }
result.put("class", classes); }
return result.toString(); JSONObject result = new JSONObject();
result.put("list", videos);
return result.toString();
}
@Override
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) throws Exception {
String apiUrl = getApiUrl();
String url = getCateFilterUrlPrefix(apiUrl) + tid + getCateFilterUrlSuffix(apiUrl);
url = url.replace("#PN#", pg);
url = url.replace("筛选class", (extend != null && extend.containsKey("class")) ? extend.get("class") : "");
url = url.replace("筛选area", (extend != null && extend.containsKey("area")) ? extend.get("area") : "");
url = url.replace("筛选lang", (extend != null && extend.containsKey("lang")) ? extend.get("lang") : "");
url = url.replace("筛选year", (extend != null && extend.containsKey("year")) ? extend.get("year") : "");
url = url.replace("排序", (extend != null && extend.containsKey("排序")) ? extend.get("排序") : "");
SpiderDebug.log(url);
String json = OkHttp.string(url, getHeaders(url));
JSONObject obj = new JSONObject(json);
int totalPg = Integer.MAX_VALUE;
try {
if (obj.has("totalpage") && obj.get("totalpage") instanceof Integer) {
totalPg = obj.getInt("totalpage");
} else if (obj.has("pagecount") && obj.get("pagecount") instanceof Integer) {
totalPg = obj.getInt("pagecount");
} else if (obj.has("data") && obj.get("data") instanceof JSONObject && (obj.getJSONObject("data").has("total") && obj.getJSONObject("data").get("total") instanceof Integer && obj.getJSONObject("data").has("limit") && obj.getJSONObject("data").get("limit") instanceof Integer)) {
int limit = obj.getJSONObject("data").getInt("limit");
int total = obj.getJSONObject("data").getInt("total");
totalPg = total % limit == 0 ? (total / limit) : (total / limit + 1);
}
} catch (Exception e) { } catch (Exception e) {
SpiderDebug.log(e); SpiderDebug.log(e);
} }
return "";
}
@Override JSONArray jsonArray = null;
public String homeVideoContent() { JSONArray videos = new JSONArray();
try { if (obj.has("list") && obj.get("list") instanceof JSONArray) {
String apiUrl = getApiUrl(); jsonArray = obj.getJSONArray("list");
String url = getRecommendUrl(apiUrl); } else if (obj.has("data") && obj.get("data") instanceof JSONObject && obj.getJSONObject("data").has("list") && obj.getJSONObject("data").get("list") instanceof JSONArray) {
boolean isTV = false; jsonArray = obj.getJSONObject("data").getJSONArray("list");
if (url.isEmpty()) { } else if (obj.has("data") && obj.get("data") instanceof JSONArray) {
url = getCateFilterUrlPrefix(apiUrl) + "movie&page=1&area=&type=&start="; jsonArray = obj.getJSONArray("data");
isTV = true; }
} if (jsonArray != null) {
SpiderDebug.log(url); for (int i = 0; i < jsonArray.length(); i++) {
String json = desc(OkHttp.string(url, getHeaders(url)), (byte) 1); JSONObject vObj = jsonArray.getJSONObject(i);
JSONObject obj = new JSONObject(json); if (vObj.has("vod_id")) {
JSONArray videos = new JSONArray(); JSONObject v = new JSONObject();
if (isTV) { v.put("vod_id", vObj.getString("vod_id"));
JSONArray jsonArray = obj.getJSONArray("data"); v.put("vod_name", vObj.getString("vod_name"));
for (int i = 0; i < jsonArray.length(); i++) { v.put("vod_pic", vObj.getString("vod_pic"));
JSONObject vObj = jsonArray.getJSONObject(i); v.put("vod_remarks", vObj.getString("vod_remarks"));
videos.put(v);
} else {
JSONObject v = new JSONObject(); JSONObject v = new JSONObject();
v.put("vod_id", vObj.getString("nextlink")); v.put("vod_id", vObj.getString("nextlink"));
v.put("vod_name", vObj.getString("title")); v.put("vod_name", vObj.getString("title"));
@ -168,211 +237,101 @@ public class AppYsV2 extends Spider {
v.put("vod_remarks", vObj.getString("state")); v.put("vod_remarks", vObj.getString("state"));
videos.put(v); videos.put(v);
} }
} else {
ArrayList<JSONArray> arrays = new ArrayList<>();
findJsonArray(obj, "vlist", arrays);
if (arrays.isEmpty()) {
findJsonArray(obj, "vod_list", arrays);
}
List<String> ids = new ArrayList<>();
for (JSONArray jsonArray : arrays) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject vObj = jsonArray.getJSONObject(i);
String vid = vObj.getString("vod_id");
if (ids.contains(vid))
continue;
ids.add(vid);
JSONObject v = new JSONObject();
v.put("vod_id", vid);
v.put("vod_name", vObj.getString("vod_name"));
v.put("vod_pic", vObj.getString("vod_pic"));
v.put("vod_remarks", vObj.getString("vod_remarks"));
videos.put(v);
}
}
} }
JSONObject result = new JSONObject();
result.put("list", videos);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
} }
return ""; JSONObject result = new JSONObject();
result.put("page", pg);
result.put("pagecount", totalPg);
result.put("limit", 90);
result.put("total", Integer.MAX_VALUE);
result.put("list", videos);
return result.toString();
} }
@Override @Override
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) { public String detailContent(List<String> ids) throws Exception {
try { String apiUrl = getApiUrl();
String apiUrl = getApiUrl(); String url = getPlayUrlPrefix(apiUrl) + ids.get(0);
String url = getCateFilterUrlPrefix(apiUrl) + tid + getCateFilterUrlSuffix(apiUrl); SpiderDebug.log(url);
url = url.replace("#PN#", pg); String json = OkHttp.string(url, getHeaders(url));
url = url.replace("筛选class", (extend != null && extend.containsKey("class")) ? extend.get("class") : ""); JSONObject obj = new JSONObject(json);
url = url.replace("筛选area", (extend != null && extend.containsKey("area")) ? extend.get("area") : ""); JSONObject result = new JSONObject();
url = url.replace("筛选lang", (extend != null && extend.containsKey("lang")) ? extend.get("lang") : ""); JSONObject vod = new JSONObject();
url = url.replace("筛选year", (extend != null && extend.containsKey("year")) ? extend.get("year") : ""); genPlayList(apiUrl, obj, json, vod, ids.get(0));
url = url.replace("排序", (extend != null && extend.containsKey("排序")) ? extend.get("排序") : ""); JSONArray list = new JSONArray();
SpiderDebug.log(url); list.put(vod);
String json = desc(OkHttp.string(url, getHeaders(url)), (byte) 2); result.put("list", list);
JSONObject obj = new JSONObject(json); return result.toString();
int totalPg = Integer.MAX_VALUE;
try {
if (obj.has("totalpage") && obj.get("totalpage") instanceof Integer) {
totalPg = obj.getInt("totalpage");
} else if (obj.has("pagecount") && obj.get("pagecount") instanceof Integer) {
totalPg = obj.getInt("pagecount");
} else if (obj.has("data") && obj.get("data") instanceof JSONObject &&
(obj.getJSONObject("data").has("total") && obj.getJSONObject("data").get("total") instanceof Integer &&
obj.getJSONObject("data").has("limit") && obj.getJSONObject("data").get("limit") instanceof Integer)) {
int limit = obj.getJSONObject("data").getInt("limit");
int total = obj.getJSONObject("data").getInt("total");
totalPg = total % limit == 0 ? (total / limit) : (total / limit + 1);
}
} catch (Exception e) {
SpiderDebug.log(e);
}
JSONArray jsonArray = null;
JSONArray videos = new JSONArray();
if (obj.has("list") && obj.get("list") instanceof JSONArray) {
jsonArray = obj.getJSONArray("list");
} else if (obj.has("data") && obj.get("data") instanceof JSONObject && obj.getJSONObject("data").has("list") && obj.getJSONObject("data").get("list") instanceof JSONArray) {
jsonArray = obj.getJSONObject("data").getJSONArray("list");
} else if (obj.has("data") && obj.get("data") instanceof JSONArray) {
jsonArray = obj.getJSONArray("data");
}
if (jsonArray != null) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject vObj = jsonArray.getJSONObject(i);
if (vObj.has("vod_id")) {
JSONObject v = new JSONObject();
v.put("vod_id", vObj.getString("vod_id"));
v.put("vod_name", vObj.getString("vod_name"));
v.put("vod_pic", vObj.getString("vod_pic"));
v.put("vod_remarks", vObj.getString("vod_remarks"));
videos.put(v);
} else {
JSONObject v = new JSONObject();
v.put("vod_id", vObj.getString("nextlink"));
v.put("vod_name", vObj.getString("title"));
v.put("vod_pic", vObj.getString("pic"));
v.put("vod_remarks", vObj.getString("state"));
videos.put(v);
}
}
}
JSONObject result = new JSONObject();
result.put("page", pg);
result.put("pagecount", totalPg);
result.put("limit", 90);
result.put("total", Integer.MAX_VALUE);
result.put("list", videos);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
} }
@Override @Override
public String detailContent(List<String> ids) { public String searchContent(String key, boolean quick) throws Exception {
try { String apiUrl = getApiUrl();
String apiUrl = getApiUrl(); String url = getSearchUrl(apiUrl, URLEncoder.encode(key));
String url = getPlayUrlPrefix(apiUrl) + ids.get(0); String json = OkHttp.string(url, getHeaders(url));
SpiderDebug.log(url); JSONObject obj = new JSONObject(json);
String json = desc(OkHttp.string(url, getHeaders(url)), (byte) 3); JSONArray jsonArray = null;
JSONObject obj = new JSONObject(json); JSONArray videos = new JSONArray();
JSONObject result = new JSONObject(); if (obj.has("list") && obj.get("list") instanceof JSONArray) {
JSONObject vod = new JSONObject(); jsonArray = obj.getJSONArray("list");
genPlayList(apiUrl, obj, json, vod, ids.get(0)); } else if (obj.has("data") && obj.get("data") instanceof JSONObject && obj.getJSONObject("data").has("list") && obj.getJSONObject("data").get("list") instanceof JSONArray) {
JSONArray list = new JSONArray(); jsonArray = obj.getJSONObject("data").getJSONArray("list");
list.put(vod); } else if (obj.has("data") && obj.get("data") instanceof JSONArray) {
result.put("list", list); jsonArray = obj.getJSONArray("data");
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
} }
return ""; if (jsonArray != null) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject vObj = jsonArray.getJSONObject(i);
if (vObj.has("vod_id")) {
JSONObject v = new JSONObject();
v.put("vod_id", vObj.getString("vod_id"));
v.put("vod_name", vObj.getString("vod_name"));
v.put("vod_pic", vObj.getString("vod_pic"));
v.put("vod_remarks", vObj.getString("vod_remarks"));
videos.put(v);
} else {
JSONObject v = new JSONObject();
v.put("vod_id", vObj.getString("nextlink"));
v.put("vod_name", vObj.getString("title"));
v.put("vod_pic", vObj.getString("pic"));
v.put("vod_remarks", vObj.getString("state"));
videos.put(v);
}
}
}
JSONObject result = new JSONObject();
result.put("list", videos);
return result.toString();
} }
@Override @Override
public String searchContent(String key, boolean quick) { public String playerContent(String flag, String id, List<String> vipFlags) throws Exception {
try { if (flag.contains("fanqie") && Utils.isVideoFormat(id)) {
String apiUrl = getApiUrl();
String url = getSearchUrl(apiUrl, URLEncoder.encode(key));
String json = desc(OkHttp.string(url, getHeaders(url)), (byte) 5);
JSONObject obj = new JSONObject(json);
JSONArray jsonArray = null;
JSONArray videos = new JSONArray();
if (obj.has("list") && obj.get("list") instanceof JSONArray) {
jsonArray = obj.getJSONArray("list");
} else if (obj.has("data") && obj.get("data") instanceof JSONObject && obj.getJSONObject("data").has("list") && obj.getJSONObject("data").get("list") instanceof JSONArray) {
jsonArray = obj.getJSONObject("data").getJSONArray("list");
} else if (obj.has("data") && obj.get("data") instanceof JSONArray) {
jsonArray = obj.getJSONArray("data");
}
if (jsonArray != null) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject vObj = jsonArray.getJSONObject(i);
if (vObj.has("vod_id")) {
JSONObject v = new JSONObject();
v.put("vod_id", vObj.getString("vod_id"));
v.put("vod_name", vObj.getString("vod_name"));
v.put("vod_pic", vObj.getString("vod_pic"));
v.put("vod_remarks", vObj.getString("vod_remarks"));
videos.put(v);
} else {
JSONObject v = new JSONObject();
v.put("vod_id", vObj.getString("nextlink"));
v.put("vod_name", vObj.getString("title"));
v.put("vod_pic", vObj.getString("pic"));
v.put("vod_remarks", vObj.getString("state"));
videos.put(v);
}
}
}
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();
result.put("list", videos); result.put("parse", 0);
result.put("playUrl", "");
result.put("url", id);
return result.toString(); return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
} }
return ""; ArrayList<String> parseUrls = parseUrlMap.get(flag);
} if (parseUrls == null) parseUrls = new ArrayList<>();
@Override if (!parseUrls.isEmpty()) {
public String playerContent(String flag, String id, List<String> vipFlags) { JSONObject result = getFinalVideo(flag, parseUrls, id);
try { if (result != null) return result.toString();
if (flag.contains("fanqie") && Utils.isVideoFormat(id)) { }
JSONObject result = new JSONObject(); if (Utils.isVideoFormat(id)) {
result.put("parse", 0); JSONObject result = new JSONObject();
result.put("playUrl", ""); result.put("parse", 0);
result.put("url", id); result.put("playUrl", "");
return result.toString(); result.put("url", id);
} return result.toString();
ArrayList<String> parseUrls = parseUrlMap.get(flag); } else {
if (parseUrls == null) JSONObject result = new JSONObject();
parseUrls = new ArrayList<>(); result.put("parse", 1);
if (!parseUrls.isEmpty()) { result.put("jx", "1");
JSONObject result = getFinalVideo(flag, parseUrls, id); result.put("url", id);
if (result != null) return result.toString();
return result.toString();
}
if (Utils.isVideoFormat(id)) {
JSONObject result = new JSONObject();
result.put("parse", 0);
result.put("playUrl", "");
result.put("url", id);
return result.toString();
} else {
JSONObject result = new JSONObject();
result.put("parse", 1);
result.put("jx", "1");
result.put("url", id);
return result.toString();
}
} catch (Exception e) {
SpiderDebug.log(e);
} }
return "";
} }
private void findJsonArray(JSONObject obj, String match, ArrayList<JSONArray> result) { private void findJsonArray(JSONObject obj, String match, ArrayList<JSONArray> result) {
@ -381,8 +340,7 @@ public class AppYsV2 extends Spider {
String k = keys.next(); String k = keys.next();
try { try {
Object o = obj.get(k); Object o = obj.get(k);
if (k.equals(match) && o instanceof JSONArray) if (k.equals(match) && o instanceof JSONArray) result.add((JSONArray) o);
result.add((JSONArray) o);
if (o instanceof JSONObject) { if (o instanceof JSONObject) {
findJsonArray((JSONObject) o, match, result); findJsonArray((JSONObject) o, match, result);
} else if (o instanceof JSONArray) { } else if (o instanceof JSONArray) {
@ -405,8 +363,8 @@ public class AppYsV2 extends Spider {
} }
return TextUtils.join(",", strings); return TextUtils.join(",", strings);
} catch (JSONException e) { } catch (JSONException e) {
return "";
} }
return "";
} }
private HashMap<String, String> getHeaders(String URL) { private HashMap<String, String> getHeaders(String URL) {
@ -415,12 +373,7 @@ public class AppYsV2 extends Spider {
return headers; return headers;
} }
private boolean isBan(String key) {
return key.equals("伦理") || key.equals("情色") || key.equals("福利");
}
// M 扩展方法 // M 扩展方法
// ######重组搜索 // ######重组搜索
private String getSearchUrl(String URL, String KEY) { private String getSearchUrl(String URL, String KEY) {
if (URL.contains(".vod")) { if (URL.contains(".vod")) {
@ -432,32 +385,7 @@ public class AppYsV2 extends Spider {
} else if (URL.contains("api.php/app") || URL.contains("xgapp")) { } else if (URL.contains("api.php/app") || URL.contains("xgapp")) {
return URL + "search?text=" + KEY + "&pg="; return URL + "search?text=" + KEY + "&pg=";
} else if (urlPattern1.matcher(URL).find()) { } else if (urlPattern1.matcher(URL).find()) {
if (URL.contains("esellauto") if (URL.contains("esellauto") || URL.contains("1.14.63.101") || URL.contains("zjys") || URL.contains("dcd") || URL.contains("lxue") || URL.contains("weetai.cn") || URL.contains("haokanju1") || URL.contains("fit:8") || URL.contains("zjj.life") || URL.contains("love9989") || URL.contains("8d8q") || URL.contains("lk.pxun") || URL.contains("hgyx") || URL.contains("521x5") || URL.contains("lxyyy") || URL.contains("0818tv") || URL.contains("diyoui") || URL.contains("diliktv") || URL.contains("ppzhu") || URL.contains("aitesucai") || URL.contains("zz.ci") || URL.contains("chxjon") || URL.contains("watchmi") || URL.contains("vipbp") || URL.contains("bhtv") || URL.contains("xfykl")) {
|| URL.contains("1.14.63.101")
|| URL.contains("zjys")
|| URL.contains("dcd")
|| URL.contains("lxue")
|| URL.contains("weetai.cn")
|| URL.contains("haokanju1")
|| URL.contains("fit:8")
|| URL.contains("zjj.life")
|| URL.contains("love9989")
|| URL.contains("8d8q")
|| URL.contains("lk.pxun")
|| URL.contains("hgyx")
|| URL.contains("521x5")
|| URL.contains("lxyyy")
|| URL.contains("0818tv")
|| URL.contains("diyoui")
|| URL.contains("diliktv")
|| URL.contains("ppzhu")
|| URL.contains("aitesucai")
|| URL.contains("zz.ci")
|| URL.contains("chxjon")
|| URL.contains("watchmi")
|| URL.contains("vipbp")
|| URL.contains("bhtv")
|| URL.contains("xfykl")) {
return URL + "?ac=list&" + "wd=" + KEY + "&page="; return URL + "?ac=list&" + "wd=" + KEY + "&page=";
} else { } else {
return URL + "?ac=list&" + "zm=" + KEY + "&page="; return URL + "?ac=list&" + "zm=" + KEY + "&page=";
@ -473,15 +401,7 @@ public class AppYsV2 extends Spider {
private static final Pattern parsePattern1 = Pattern.compile(".*(url|v|vid|php\\?id)="); private static final Pattern parsePattern1 = Pattern.compile(".*(url|v|vid|php\\?id)=");
private static final Pattern parsePattern2 = Pattern.compile("https?://[^/]*"); private static final Pattern parsePattern2 = Pattern.compile("https?://[^/]*");
protected static final Pattern[] htmlVideoKeyMatch = new Pattern[]{ protected static final Pattern[] htmlVideoKeyMatch = new Pattern[]{Pattern.compile("player=new"), Pattern.compile("<div id=\"video\""), Pattern.compile("<div id=\"[^\"]*?player\""), Pattern.compile("//视频链接"), Pattern.compile("HlsJsPlayer\\("), Pattern.compile("<iframe[\\s\\S]*?src=\"[^\"]+?\""), Pattern.compile("<video[\\s\\S]*?src=\"[^\"]+?\"")};
Pattern.compile("player=new"),
Pattern.compile("<div id=\"video\""),
Pattern.compile("<div id=\"[^\"]*?player\""),
Pattern.compile("//视频链接"),
Pattern.compile("HlsJsPlayer\\("),
Pattern.compile("<iframe[\\s\\S]*?src=\"[^\"]+?\""),
Pattern.compile("<video[\\s\\S]*?src=\"[^\"]+?\"")
};
private String UA(String URL) { private String UA(String URL) {
if (URL.contains("vod.9e03.com")) { if (URL.contains("vod.9e03.com")) {
@ -523,7 +443,7 @@ public class AppYsV2 extends Spider {
} }
} else if (URL.contains(".vod")) { } else if (URL.contains(".vod")) {
if (URL.contains("tv.bulei.cc")) { if (URL.contains("tv.bulei.cc")) {
return "https://tv.bulei.cc/api2.php/v1.vod?type="; return "https://tv.bulei.cc/api2.php/v1.vod?type=";
} }
if (URL.contains("iopenyun")) { if (URL.contains("iopenyun")) {
return URL + "/list?type="; return URL + "/list?type=";
@ -626,8 +546,7 @@ public class AppYsV2 extends Spider {
for (int i = 0; i < vodUrlWithPlayer.length(); i++) { for (int i = 0; i < vodUrlWithPlayer.length(); i++) {
JSONObject from = vodUrlWithPlayer.getJSONObject(i); JSONObject from = vodUrlWithPlayer.getJSONObject(i);
String flag = from.optString("code").trim(); String flag = from.optString("code").trim();
if (flag.isEmpty()) if (flag.isEmpty()) flag = from.getString("name").trim();
flag = from.getString("name").trim();
playFlags.add(flag); playFlags.add(flag);
playUrls.add(from.getString("url")); playUrls.add(from.getString("url"));
String purl = from.optString("parse_api").trim(); String purl = from.optString("parse_api").trim();
@ -636,8 +555,7 @@ public class AppYsV2 extends Spider {
parseUrls = new ArrayList<>(); parseUrls = new ArrayList<>();
parseUrlMap.put(flag, parseUrls); parseUrlMap.put(flag, parseUrls);
} }
if (!purl.isEmpty() && !parseUrls.contains(purl)) if (!purl.isEmpty() && !parseUrls.contains(purl)) parseUrls.add(purl);
parseUrls.add(purl);
} }
} else if (URL.contains("xgapp")) { } else if (URL.contains("xgapp")) {
JSONObject data = object.getJSONObject("data").getJSONObject("vod_info"); JSONObject data = object.getJSONObject("data").getJSONObject("vod_info");
@ -655,8 +573,7 @@ public class AppYsV2 extends Spider {
for (int i = 0; i < vodUrlWithPlayer.length(); i++) { for (int i = 0; i < vodUrlWithPlayer.length(); i++) {
JSONObject from = vodUrlWithPlayer.getJSONObject(i); JSONObject from = vodUrlWithPlayer.getJSONObject(i);
String flag = from.optString("code").trim(); String flag = from.optString("code").trim();
if (flag.isEmpty()) if (flag.isEmpty()) flag = from.getString("name").trim();
flag = from.getString("name").trim();
playFlags.add(flag); playFlags.add(flag);
playUrls.add(from.getString("url")); playUrls.add(from.getString("url"));
String purl = from.optString("parse_api").trim(); String purl = from.optString("parse_api").trim();
@ -665,8 +582,7 @@ public class AppYsV2 extends Spider {
parseUrls = new ArrayList<>(); parseUrls = new ArrayList<>();
parseUrlMap.put(flag, parseUrls); parseUrlMap.put(flag, parseUrls);
} }
if (!purl.isEmpty() && !parseUrls.contains(purl)) if (!purl.isEmpty() && !parseUrls.contains(purl)) parseUrls.add(purl);
parseUrls.add(purl);
} }
} else if (/*urlPattern2.matcher(URL).find()*/URL.contains(".vod")) { } else if (/*urlPattern2.matcher(URL).find()*/URL.contains(".vod")) {
JSONObject data = object.getJSONObject("data"); JSONObject data = object.getJSONObject("data");
@ -684,8 +600,7 @@ public class AppYsV2 extends Spider {
for (int i = 0; i < vodUrlWithPlayer.length(); i++) { for (int i = 0; i < vodUrlWithPlayer.length(); i++) {
JSONObject from = vodUrlWithPlayer.getJSONObject(i); JSONObject from = vodUrlWithPlayer.getJSONObject(i);
String flag = from.getJSONObject("player_info").optString("from").trim(); String flag = from.getJSONObject("player_info").optString("from").trim();
if (flag.isEmpty()) if (flag.isEmpty()) flag = from.getJSONObject("player_info").optString("show").trim();
flag = from.getJSONObject("player_info").optString("show").trim();
playFlags.add(flag); playFlags.add(flag);
playUrls.add(from.getString("url")); playUrls.add(from.getString("url"));
try { try {
@ -720,8 +635,7 @@ public class AppYsV2 extends Spider {
} }
} }
purl = purl.replace("..", ".").trim(); purl = purl.replace("..", ".").trim();
if (!purl.isEmpty() && !parseUrls.contains(purl)) if (!purl.isEmpty() && !parseUrls.contains(purl)) parseUrls.add(purl);
parseUrls.add(purl);
} }
} catch (Exception e) { } catch (Exception e) {
SpiderDebug.log(e); SpiderDebug.log(e);
@ -756,8 +670,7 @@ public class AppYsV2 extends Spider {
if (url.contains("url=")) { if (url.contains("url=")) {
int spIdx = url.indexOf("url=") + 4; int spIdx = url.indexOf("url=") + 4;
String pUrl = url.substring(0, spIdx).trim(); String pUrl = url.substring(0, spIdx).trim();
if (!pUrl.isEmpty() && !parseUrls.contains(pUrl)) if (!pUrl.isEmpty() && !parseUrls.contains(pUrl)) parseUrls.add(pUrl);
parseUrls.add(pUrl);
urls.add(urlObj.getString("title") + "$" + url.substring(spIdx).trim()); urls.add(urlObj.getString("title") + "$" + url.substring(spIdx).trim());
} else { } else {
urls.add(urlObj.getString("title") + "$" + url); urls.add(urlObj.getString("title") + "$" + url);
@ -775,10 +688,9 @@ public class AppYsV2 extends Spider {
protected JSONObject getFinalVideo(String flag, ArrayList<String> parseUrls, String url) throws JSONException { protected JSONObject getFinalVideo(String flag, ArrayList<String> parseUrls, String url) throws JSONException {
String htmlPlayUrl = ""; String htmlPlayUrl = "";
for (String parseUrl : parseUrls) { for (String parseUrl : parseUrls) {
if (parseUrl.isEmpty() || parseUrl.equals("null")) if (parseUrl.isEmpty() || parseUrl.equals("null")) continue;
continue;
String playUrl = parseUrl + url; String playUrl = parseUrl + url;
String content = desc(OkHttp.string(playUrl, null), (byte) 4); String content = OkHttp.string(playUrl);
JSONObject tryJson = null; JSONObject tryJson = null;
try { try {
tryJson = jsonParse(url, content); tryJson = jsonParse(url, content);
@ -823,20 +735,12 @@ public class AppYsV2 extends Spider {
} }
private String getApiUrl() { private String getApiUrl() {
if (extInfos == null || extInfos.length < 1) if (extInfos == null || extInfos.length < 1) return "";
return "";
return extInfos[0].trim(); return extInfos[0].trim();
} }
private String[] extInfos = null; private String[] extInfos = null;
protected String desc(String src, byte type) {
if (extInfos.length > 1) {
String descFlag = extInfos[1];
}
return src;
}
public static JSONObject jsonParse(String input, String json) throws JSONException { public static JSONObject jsonParse(String input, String json) throws JSONException {
//处理解析接口返回的报文如果返回的报文中包含header信息就加到返回值中 //处理解析接口返回的报文如果返回的报文中包含header信息就加到返回值中
JSONObject jsonPlayData = new JSONObject(json); JSONObject jsonPlayData = new JSONObject(json);
@ -861,21 +765,17 @@ public class AppYsV2 extends Spider {
JSONObject headers = new JSONObject(); JSONObject headers = new JSONObject();
if (jsonPlayData.has("header")) { if (jsonPlayData.has("header")) {
headers = jsonPlayData.optJSONObject("header"); headers = jsonPlayData.optJSONObject("header");
} } else if (jsonPlayData.has("Header")) {
else if (jsonPlayData.has("Header")) {
headers = jsonPlayData.optJSONObject("Header"); headers = jsonPlayData.optJSONObject("Header");
} } else if (jsonPlayData.has("headers")) {
else if (jsonPlayData.has("headers")) {
headers = jsonPlayData.optJSONObject("headers"); headers = jsonPlayData.optJSONObject("headers");
} } else if (jsonPlayData.has("Headers")) {
else if (jsonPlayData.has("Headers")) {
headers = jsonPlayData.optJSONObject("Headers"); headers = jsonPlayData.optJSONObject("Headers");
} }
String ua = ""; String ua = "";
if (jsonPlayData.has("user-agent")) { if (jsonPlayData.has("user-agent")) {
ua = jsonPlayData.optString("user-agent", ""); ua = jsonPlayData.optString("user-agent", "");
} } else if (jsonPlayData.has("User-Agent")) {
else if (jsonPlayData.has("User-Agent")) {
ua = jsonPlayData.optString("User-Agent", ""); ua = jsonPlayData.optString("User-Agent", "");
} }
if (ua.trim().length() > 0) { if (ua.trim().length() > 0) {
@ -884,8 +784,7 @@ public class AppYsV2 extends Spider {
String referer = ""; String referer = "";
if (jsonPlayData.has("referer")) { if (jsonPlayData.has("referer")) {
referer = jsonPlayData.optString("referer", ""); referer = jsonPlayData.optString("referer", "");
} } else if (jsonPlayData.has("Referer")) {
else if (jsonPlayData.has("Referer")) {
referer = jsonPlayData.optString("Referer", ""); referer = jsonPlayData.optString("Referer", "");
} }
if (referer.trim().length() > 0) { if (referer.trim().length() > 0) {
@ -901,8 +800,7 @@ public class AppYsV2 extends Spider {
} }
public static JSONObject fixJsonVodHeader(JSONObject headers, String input, String url) throws JSONException { public static JSONObject fixJsonVodHeader(JSONObject headers, String input, String url) throws JSONException {
if (headers == null) if (headers == null) headers = new JSONObject();
headers = new JSONObject();
if (input.contains("www.mgtv.com")) { if (input.contains("www.mgtv.com")) {
headers.put("Referer", " "); headers.put("Referer", " ");
headers.put("User-Agent", " Mozilla/5.0"); headers.put("User-Agent", " Mozilla/5.0");

View File

@ -15,8 +15,6 @@ public class Proxy extends Spider {
switch (params.get("do")) { switch (params.get("do")) {
case "ck": case "ck":
return new Object[]{200, "text/plain; charset=utf-8", new ByteArrayInputStream("ok".getBytes("UTF-8"))}; return new Object[]{200, "text/plain; charset=utf-8", new ByteArrayInputStream("ok".getBytes("UTF-8"))};
case "yingshi":
return YingShi.vod(params);
case "ali": case "ali":
return Ali.proxy(params); return Ali.proxy(params);
case "bili": case "bili":

View File

@ -7,30 +7,26 @@ import com.github.catvod.bean.Class;
import com.github.catvod.bean.Filter; import com.github.catvod.bean.Filter;
import com.github.catvod.bean.Result; import com.github.catvod.bean.Result;
import com.github.catvod.bean.Vod; import com.github.catvod.bean.Vod;
import com.github.catvod.bean.webdav.Drive;
import com.github.catvod.crawler.Spider; import com.github.catvod.crawler.Spider;
import com.github.catvod.net.OkHttp; import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.FileUtil; import com.github.catvod.utils.FileUtil;
import com.github.catvod.utils.Utils; import com.github.catvod.utils.Utils;
import org.json.JSONArray;
import org.json.JSONException;
import org.jsoup.Jsoup; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document; import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element; import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; import org.jsoup.select.Elements;
import java.io.ByteArrayInputStream;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.*; import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class YingShi extends Spider { public class YingShi extends Spider {
@ -114,8 +110,7 @@ public class YingShi extends Spider {
@Override @Override
public String playerContent(String flag, String id, List<String> vipFlags) throws Exception { public String playerContent(String flag, String id, List<String> vipFlags) throws Exception {
String proxyUrl = Proxy.getUrl() + "?do=yingshi&url=" + id; return Result.get().url(id).string();
return Result.get().url(proxyUrl).string();
} }
@Override @Override
@ -169,30 +164,4 @@ public class YingShi extends Spider {
return new Filter(key, name, values); return new Filter(key, name, values);
} }
} }
public static Object[] vod(Map<String, String> params) throws Exception {
String url = params.get("url");
List<String> AdBlock = Arrays.asList("10.0099", "8.1748"); // Advertisement ts
String content = OkHttp.string(url);
Matcher m = Pattern.compile("#EXT-X-DISCONTINUITY[\\s\\S]*?(?=#EXT-X-DISCONTINUITY|$)").matcher(content);
while (m.find()) {
BigDecimal k = BigDecimal.ZERO;
Matcher digit = Pattern.compile("#EXTINF:(\\d+\\.\\d+)").matcher(m.group(0));
while (digit.find()) {
BigDecimal g = new BigDecimal(digit.group(1));
k = k.add(g);
}
for (String ads : AdBlock) {
if (k.toString().contains(ads)) {
content = content.replaceAll(m.group(0), "");
System.out.println("Found ads: " + ads);
}
}
}
Object[] result = new Object[3];
result[0] = 200;
result[1] = "application/octet-stream";
result[2] = new ByteArrayInputStream(content.getBytes());
return result;
}
} }

Binary file not shown.

View File

@ -1 +1 @@
e99f254a76be4612aaf4f8e6eef5dae1 805e97263746889cf1405e74ec9d0824