Files
TVBoxSE/TVBox_Java/spider/Ysgc.java
T
2022-12-02 13:36:22 +08:00

395 строки
16 KiB
Java

package com.github.catvod.spider;
import android.content.Context;
import android.text.TextUtils;
import com.github.catvod.crawler.Spider;
import com.github.catvod.crawler.SpiderDebug;
import com.github.catvod.utils.Misc;
import com.github.catvod.utils.okhttp.OkHttpUtil;
import org.json.JSONArray;
import org.json.JSONObject;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 影视工厂
* <p>
* Author: 小黄瓜
*/
public class Ysgc extends Spider {
private static final String siteUrl = "https://www.ik4.cc";
private static final String siteHost = "www.ik4.cc";
protected JSONObject playerConfig = new JSONObject();
@Override
public void init(Context context) {
super.init(context);
}
protected HashMap<String, String> getHeaders(String url) {
HashMap<String, String> headers = new HashMap<>();
headers.put("user-agent", "Dart/2.14 (dart:io)");
headers.put("version", "1.9.8");
headers.put("copyright", "xiaogui");
headers.put("host", siteHost);
headers.put("platform", "android");
return headers;
}
@Override
public String homeContent(boolean filter) {
try {
String url = siteUrl + "/xgapp.php/v1/nav?token=";
JSONObject jsonObject = new JSONObject(OkHttpUtil.string(url, getHeaders(url)));
JSONArray jsonArray = jsonObject.getJSONArray("data");
JSONArray classes = new JSONArray();
JSONObject filterConfig = new JSONObject();
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jObj = jsonArray.getJSONObject(i);
String typeName = jObj.getString("type_name");
if (typeName.equals("电视直播"))
continue;
String typeId = jObj.getString("type_id");
JSONObject newCls = new JSONObject();
newCls.put("type_id", typeId);
newCls.put("type_name", typeName);
classes.put(newCls);
try {
JSONObject typeExtend = jObj.getJSONObject("type_extend");
Iterator<String> typeExtendKeys = typeExtend.keys();
JSONArray extendsAll = new JSONArray();
while (typeExtendKeys.hasNext()) {
String typeExtendKey = typeExtendKeys.next();
String typeExtendName = null;
switch (typeExtendKey) {
case "class":
typeExtendName = "类型";
break;
case "area":
typeExtendName = "地区";
break;
case "lang":
typeExtendName = "语言";
break;
case "year":
typeExtendName = "年代";
break;
}
if (typeExtendName == null) {
SpiderDebug.log(typeExtendKey);
continue;
}
String typeExtendStr = typeExtend.getString(typeExtendKey);
if (typeExtendStr.trim().length() == 0)
continue;
String[] newTypeExtendKeys = typeExtendStr.split(",");
JSONObject newTypeExtend = new JSONObject();
newTypeExtend.put("key", typeExtendKey);
newTypeExtend.put("name", typeExtendName);
JSONArray newTypeExtendKV = new JSONArray();
{
JSONObject kvAll = new JSONObject();
kvAll.put("n", "全部");
kvAll.put("v", "");
newTypeExtendKV.put(kvAll);
}
for (String k : newTypeExtendKeys) {
if (typeExtendName.equals("伦理"))
continue;
JSONObject kv = new JSONObject();
kv.put("n", k);
kv.put("v", k);
newTypeExtendKV.put(kv);
}
newTypeExtend.put("value", newTypeExtendKV);
extendsAll.put(newTypeExtend);
}
filterConfig.put(typeId, extendsAll);
} catch (Exception e) {
SpiderDebug.log(e);
}
}
JSONObject result = new JSONObject();
result.put("class", classes);
if (filter) {
result.put("filters", filterConfig);
}
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
@Override
public String homeVideoContent() {
try {
String url = siteUrl + "/xgapp.php/v1/index_video?token=";
JSONObject jsonObject = new JSONObject(OkHttpUtil.string(url, getHeaders(url)));
JSONArray jsonArray = jsonObject.getJSONArray("data");
JSONArray videos = new JSONArray();
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jObj = jsonArray.getJSONObject(i);
JSONArray videoList = jObj.getJSONArray("vlist");
for (int j = 0; j < videoList.length() && j < 6; j++) {
JSONObject vObj = videoList.getJSONObject(j);
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);
}
}
JSONObject result = new JSONObject();
result.put("list", videos);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
@Override
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) {
try {
String url = siteUrl + "/xgapp.php/v1/video?tid=" + tid + "&pg=" + pg + "&token=";
Set<String> keys = extend.keySet();
for (String key : keys) {
url += "&" + key + "=" + URLEncoder.encode(extend.get(key));
}
JSONObject dataObject = new JSONObject(OkHttpUtil.string(url, getHeaders(url)));
JSONArray jsonArray = dataObject.getJSONArray("data");
JSONArray videos = new JSONArray();
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject vObj = jsonArray.getJSONObject(i);
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);
}
JSONObject result = new JSONObject();
int limit = 20;
int page = dataObject.getInt("page");
int total = dataObject.getInt("total");
int pageCount = dataObject.getInt("pagecount");
result.put("page", page);
result.put("pagecount", pageCount);
result.put("limit", limit);
result.put("total", total);
result.put("list", videos);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
@Override
public String detailContent(List<String> ids) {
try {
String url = siteUrl + "/xgapp.php/v1/video_detail?id=" + ids.get(0) + "&token=";
JSONObject jsonObject = new JSONObject(OkHttpUtil.string(url, getHeaders(url)));
JSONObject dataObject = jsonObject.getJSONObject("data");
if (dataObject.has("vod_info")) {
try {
dataObject = dataObject.getJSONObject("vod_info");
} catch (Exception e) {
}
}
JSONObject vodList = new JSONObject();
vodList.put("vod_id", dataObject.getString("vod_id"));
vodList.put("vod_name", dataObject.getString("vod_name"));
vodList.put("vod_pic", dataObject.getString("vod_pic"));
vodList.put("type_name", dataObject.getString("vod_class"));
vodList.put("vod_year", dataObject.getString("vod_year"));
vodList.put("vod_area", dataObject.getString("vod_area"));
vodList.put("vod_remarks", dataObject.getString("vod_remarks"));
vodList.put("vod_actor", dataObject.getString("vod_actor"));
vodList.put("vod_director", dataObject.getString("vod_director"));
vodList.put("vod_content", dataObject.getString("vod_content"));
JSONArray playerList = dataObject.getJSONArray("vod_url_with_player");
List<String> playFlags = new ArrayList<>();
HashMap<String, String> playUrls = new HashMap<>();
for (int i = 0; i < playerList.length(); i++) {
JSONObject playerListObj = playerList.getJSONObject(i);
String from = playerListObj.getString("code");
playUrls.put(from, playerListObj.getString("url"));
playerListObj.remove("url");
playerConfig.put(from, playerListObj);
playFlags.add(from);
}
Map<String, String> vod_play = new TreeMap<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int sort1 = playFlags.indexOf(o1);
int sort2 = playFlags.indexOf(o2);
if (sort1 == sort2) {
return 1;
}
return sort1 - sort2 > 0 ? 1 : -1;
}
});
String[] vod_play_from_list = dataObject.getString("vod_play_from").split("\\$\\$\\$");
String[] vod_play_url_list = dataObject.getString("vod_play_url").split("\\$\\$\\$");
for (int i = 0; i < vod_play_from_list.length; i++) {
String from = vod_play_from_list[i];
if (i >= vod_play_url_list.length || vod_play_url_list[i].trim().length() == 0) {
if (playUrls.containsKey(from) && playUrls.get(from).trim().length() > 0) {
vod_play.put(vod_play_from_list[i], playUrls.get(from));
}
continue;
}
vod_play.put(vod_play_from_list[i], vod_play_url_list[i]);
}
String vod_play_from = TextUtils.join("$$$", vod_play.keySet());
String vod_play_url = TextUtils.join("$$$", vod_play.values());
vodList.put("vod_play_from", vod_play_from);
vodList.put("vod_play_url", vod_play_url);
JSONObject result = new JSONObject();
JSONArray list = new JSONArray();
list.put(vodList);
result.put("list", list);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
private HashMap<String, String> getHeaderJxs(String url) {
HashMap<String, String> headers = new HashMap<>();
headers.put("platform_version", "LMY47I");
headers.put("user-agent", "Dart/2.12 (dart:io)");
headers.put("version", "1.6.4");
headers.put("copyright", "xiaogui");
headers.put("platform", "android");
headers.put("client_name", "6L+95Ymn6L6+5Lq6");
return headers;
}
@Override
public String playerContent(String flag, String id, List<String> vipFlags) {
try {
JSONObject result = new JSONObject();
if (id.contains("hsl.ysgc.xyz")) {
String uuu = "https://www.ysgc.cc/static/player/dplayer.php?url=" + id;
HashMap<String, String> headers = new HashMap();
headers.put("referer", "https://www.ysgc.cc/");
String content = OkHttpUtil.string(uuu, headers);
Matcher matcher = Pattern.compile("url: url\\+'(.+?)',").matcher(content);
if (matcher.find()) {
result.put("parse", 0);
result.put("playUrl", "");
result.put("url", id + matcher.group(1));
result.put("header", "{\"Referer\":\" https://www.ysgc.cc\"}");
} else {
result.put("parse", 1);
result.put("playUrl", "");
result.put("url", uuu);
result.put("header", "{\"Referer\":\"https://www.ysgc.cc/\"}");
}
return result.toString();
} else if (id.contains("duoduozy.com") || id.contains("m3u8.cache.suoyo.cc")) {
String uuu = "https://www.6080kan.cc/app.php?url=" + id;
String content = OkHttpUtil.string(uuu, null);
return Misc.jsonParse(id, content).toString();
}
if (vipFlags.contains(flag)) {
try {
result.put("parse", 1);
result.put("playUrl", "");
result.put("url", id);
return result.toString();
} catch (Exception ee) {
SpiderDebug.log(ee);
}
}
JSONObject playerObj = playerConfig.getJSONObject(flag);
String parseUrl = playerObj.getString("parse_api") + id;
String content = OkHttpUtil.string(parseUrl, getHeaderJxs(parseUrl));
JSONObject playerData = new JSONObject(content);
JSONObject headers = new JSONObject();
String ua = playerData.optString("user-agent", "");
if (ua.trim().length() > 0) {
headers.put("User-Agent", " " + ua);
}
String referer = playerData.optString("referer", "");
if (referer.trim().length() > 0) {
headers.put("Referer", " " + referer);
}
result.put("parse", 0);
result.put("header", headers.toString());
result.put("playUrl", "");
result.put("url", playerData.getString("url"));
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
if (vipFlags.contains(flag)) {
try {
JSONObject result = new JSONObject();
result.put("parse", 1);
result.put("playUrl", "");
result.put("url", id);
return result.toString();
} catch (Exception ee) {
SpiderDebug.log(ee);
}
}
}
return "";
}
@Override
public String searchContent(String key, boolean quick) {
if (quick)
return "";
try {
String url = siteUrl + "/xgapp.php/v1/search?text=" + URLEncoder.encode(key) + "&pg=1";
String content = OkHttpUtil.string(url, getHeaders(url));
JSONObject dataObject = new JSONObject(content);
JSONArray jsonArray = dataObject.getJSONArray("data");
JSONArray videos = new JSONArray();
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject vObj = jsonArray.getJSONObject(i);
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);
}
JSONObject result = new JSONObject();
result.put("list", videos);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
}