This commit is contained in:
parent
6f555c0252
commit
bd677dec53
|
|
@ -0,0 +1,326 @@
|
|||
package com.github.catvod.spider;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Base64;
|
||||
|
||||
import com.github.catvod.crawler.Spider;
|
||||
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.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
|
||||
|
||||
/**
|
||||
* Author: @SDL
|
||||
*/
|
||||
public class AppTT extends Spider {
|
||||
private static final String KEY = "SRK#e%4UYtU#KiEo*vsPqpr0cC4bxAQW";
|
||||
private static final String IV = "o6sYmm*x5hn#rcCt";
|
||||
private static final String siteUrl = "http://110.42.1.95:7788";
|
||||
|
||||
private String uAgent = "Dalvik/2.1.0 (Linux; U; Android " + Build.VERSION.RELEASE + "; " + Build.MODEL + " Build/" + Build.ID + ")";
|
||||
|
||||
private HashMap<String, String> getHeaders(String url) {
|
||||
HashMap hashMap = new HashMap();
|
||||
hashMap.put("User-Agent", getUA(url));
|
||||
return hashMap;
|
||||
}
|
||||
|
||||
private String getUA(String str) {
|
||||
if (!(str.contains("api.php/app") || str.contains("xgapp"))) {
|
||||
if (!str.contains("freekan")) {
|
||||
if (!(str.contains("zsb") || str.contains("fkxs") || str.contains("xays") || str.contains("xcys") || str.contains("szys") || str.contains("dxys") || str.contains("ytys"))) {
|
||||
if (!str.contains("qnys")) {
|
||||
return str.contains(".vod") ? "okhttp/4.1.0" : "Dalvik/2.1.0";
|
||||
}
|
||||
}
|
||||
return "Dart/2.15 (dart:io)";
|
||||
}
|
||||
}
|
||||
return "Dart/2.14 (dart:io)";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Context context) {
|
||||
super.init(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String homeContent(boolean filter) {
|
||||
try {
|
||||
|
||||
JSONArray classes = new JSONArray();
|
||||
JSONObject jSONObject1 = new JSONObject();
|
||||
jSONObject1.put("type_id", 1);
|
||||
jSONObject1.put("type_name", "电影");
|
||||
classes.put(jSONObject1);
|
||||
|
||||
JSONObject jSONObject2 = new JSONObject();
|
||||
jSONObject2.put("type_id", 2);
|
||||
jSONObject2.put("type_name", "连续剧");
|
||||
classes.put(jSONObject2);
|
||||
|
||||
JSONObject jSONObject3 = new JSONObject();
|
||||
jSONObject3.put("type_id", 3);
|
||||
jSONObject3.put("type_name", "动漫");
|
||||
classes.put(jSONObject3);
|
||||
|
||||
JSONObject jSONObject4 = new JSONObject();
|
||||
jSONObject4.put("type_id", 4);
|
||||
jSONObject4.put("type_name", "综艺");
|
||||
classes.put(jSONObject4);
|
||||
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("class", classes);
|
||||
|
||||
return result.toString();
|
||||
} catch (Throwable th) {
|
||||
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String homeVideoContent() {
|
||||
try {
|
||||
JSONArray videos = new JSONArray();
|
||||
try {
|
||||
String url = siteUrl + "/api.php/v1.vod/curnavitemlist?type_id=0";
|
||||
|
||||
String content = OkHttpUtil.string(url, getHeaders(url));
|
||||
JSONObject jsonObject = new JSONObject(decryptResponse(content));
|
||||
JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("swiperList");
|
||||
for (int i = 0; i < jsonArray.length(); i++) {
|
||||
JSONObject blockObj = jsonArray.getJSONObject(i);
|
||||
JSONObject v = new JSONObject();
|
||||
v.put("vod_id", blockObj.getString("vod_id"));
|
||||
v.put("vod_name", blockObj.getString("vod_name"));
|
||||
v.put("vod_pic", blockObj.getString("vod_pic"));
|
||||
v.put("vod_remarks", blockObj.getString("vod_remarks"));
|
||||
videos.put(v);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("list", videos);
|
||||
return result.toString();
|
||||
} catch (Throwable th) {
|
||||
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) {
|
||||
try {
|
||||
String url = siteUrl + "/api.php/v1.vod?type=" + tid + "&page=" + pg + "&pagesize=20";
|
||||
// Set<String> keys = extend.keySet();
|
||||
// for (String key : keys) {
|
||||
// String val = extend.get(key).trim();
|
||||
// if (val.length() == 0)
|
||||
// continue;
|
||||
// url += "&" + key + "=" + URLEncoder.encode(val);
|
||||
// }
|
||||
String content = OkHttpUtil.string(url, getHeaders(url));
|
||||
JSONObject dataObject = new JSONObject(decryptResponse(content)).getJSONObject("data");
|
||||
JSONArray jsonArray = dataObject.getJSONArray("list");
|
||||
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 = videos.length();
|
||||
result.put("page", page);
|
||||
result.put("pagecount", total / 20);
|
||||
result.put("limit", limit);
|
||||
result.put("total", total);
|
||||
result.put("list", videos);
|
||||
return result.toString();
|
||||
} catch (Throwable th) {
|
||||
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String detailContent(List<String> ids) {
|
||||
try {
|
||||
String url = siteUrl + "/api.php/v1.vod/detilldata?vod_id=" + ids.get(0);
|
||||
String content = OkHttpUtil.string(url, getHeaders(url));
|
||||
JSONObject dataObject = new JSONObject(decryptResponse(content));
|
||||
JSONObject vObj = dataObject.getJSONObject("data");
|
||||
JSONObject result = new JSONObject();
|
||||
JSONArray list = new JSONArray();
|
||||
|
||||
JSONObject videoInfo = vObj.getJSONObject("videoInfo");
|
||||
|
||||
JSONObject vodAtom = new JSONObject();
|
||||
String title = videoInfo.getString("vod_name");
|
||||
vodAtom.put("vod_id", videoInfo.getString("vod_id"));
|
||||
vodAtom.put("vod_name", videoInfo.getString("vod_name"));
|
||||
vodAtom.put("vod_pic", videoInfo.getString("vod_pic"));
|
||||
// vodAtom.put("type_name", videoInfo.getString("subCategory"));
|
||||
vodAtom.put("vod_year", videoInfo.getString("vod_year"));
|
||||
vodAtom.put("vod_area", videoInfo.getString("vod_area"));
|
||||
vodAtom.put("vod_remarks", videoInfo.getString("vod_remarks"));
|
||||
vodAtom.put("vod_actor", videoInfo.getString("vod_actor"));
|
||||
vodAtom.put("vod_director", videoInfo.getString("vod_director"));
|
||||
vodAtom.put("vod_content", videoInfo.getString("vod_content").trim());
|
||||
|
||||
|
||||
JSONArray episodes = vObj.getJSONArray("source");
|
||||
LinkedHashMap<String, ArrayList<String>> playlist = new LinkedHashMap<>();
|
||||
String show = null;
|
||||
String parse = null;
|
||||
for (int i = 0; i < episodes.length(); i++) {
|
||||
JSONArray playurls = episodes.getJSONObject(i).getJSONArray("list");
|
||||
|
||||
show = episodes.getJSONObject(i).getJSONObject("player_info").getString("show");
|
||||
parse = episodes.getJSONObject(i).getJSONObject("player_info").getString("parse");
|
||||
ArrayList<String> urls = playlist.get(show);
|
||||
if (urls == null) {
|
||||
urls = new ArrayList<>();
|
||||
playlist.put(show, urls);
|
||||
}
|
||||
|
||||
for (int j = 0; j < playurls.length(); j++) {
|
||||
if (playurls.get(j).toString().contains(".m3u8") || playurls.get(j).toString().contains(".mp4")) {
|
||||
urls.add(playurls.get(j).toString());
|
||||
} else {
|
||||
String name = playurls.get(j).toString().split("\\$")[0];
|
||||
String pid = playurls.get(j).toString().split("\\$")[1];
|
||||
|
||||
urls.add(name + "$" + parse + pid);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
String vod_play_from = TextUtils.join("$$$", playlist.keySet());
|
||||
StringBuilder sb = new StringBuilder();
|
||||
Iterator<ArrayList<String>> iter = playlist.values().iterator();
|
||||
short fromSize = (short) playlist.size();
|
||||
while (iter.hasNext()) {
|
||||
fromSize--;
|
||||
ArrayList<String> urls = iter.next();
|
||||
sb.append(TextUtils.join("#", urls));
|
||||
if (fromSize > 0)
|
||||
sb.append("$$$");
|
||||
}
|
||||
vodAtom.put("vod_play_from", vod_play_from);
|
||||
vodAtom.put("vod_play_url", sb.toString());
|
||||
list.put(vodAtom);
|
||||
result.put("list", list);
|
||||
return result.toString();
|
||||
} catch (Throwable th) {
|
||||
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String playerContent(String flag, String id, List<String> vipFlags) {
|
||||
try {
|
||||
String jxurl = null;
|
||||
if (id.contains(".m3u8") || id.toString().contains(".mp4")) {
|
||||
jxurl = id;
|
||||
} else {
|
||||
String url = id + "&sc=1&token=" + getToken();
|
||||
String content = OkHttpUtil.string(url, getHeaders(url));
|
||||
String decryptcontent = decrypt(content, "UTF-8", KEY, IV);
|
||||
jxurl = new JSONObject(decryptcontent).getString("url");
|
||||
}
|
||||
|
||||
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("parse", 0);
|
||||
result.put("playUrl", "");
|
||||
result.put("url", jxurl);
|
||||
return result.toString();
|
||||
} catch (Throwable th) {
|
||||
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String searchContent(String key, boolean quick) {
|
||||
try {
|
||||
String url = siteUrl + "/api.php/v1.vod?wd=" + URLEncoder.encode(key);
|
||||
String content = OkHttpUtil.string(url, getHeaders(url));
|
||||
JSONObject dataObject = new JSONObject(decryptResponse(content));
|
||||
JSONArray jsonArray = dataObject.getJSONObject("data").getJSONArray("list");
|
||||
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 (Throwable th) {
|
||||
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
protected String decryptResponse(String src) {
|
||||
return src;
|
||||
}
|
||||
|
||||
public String decrypt(String str, String str2, String str3, String str4) {
|
||||
try {
|
||||
SecretKeySpec secretKeySpec = new SecretKeySpec(str3.getBytes("UTF-8"), "AES");
|
||||
Cipher instance = Cipher.getInstance("AES/CTR/PKCS5Padding");
|
||||
instance.init(2, secretKeySpec, new IvParameterSpec(str4.getBytes()));
|
||||
return new String(instance.doFinal(Base64.decode(str, 0)), str2);
|
||||
} catch (Exception unused) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public String encrypt(String str, String str2, String str3, String str4) {
|
||||
try {
|
||||
Cipher instance = Cipher.getInstance("AES/CTR/PKCS5Padding");
|
||||
instance.init(1, new SecretKeySpec(str3.getBytes(), "AES"), new IvParameterSpec(str4.getBytes()));
|
||||
return Base64.encodeToString(instance.doFinal(str.getBytes(str2)), 0);
|
||||
} catch (Exception unused) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public String getToken() {
|
||||
return encrypt(Long.valueOf(new Date().getTime()).toString(), "UTF-8", KEY, IV);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,466 @@
|
|||
package com.github.catvod.spider;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Base64;
|
||||
|
||||
import com.github.catvod.crawler.Spider;
|
||||
import com.github.catvod.crawler.SpiderDebug;
|
||||
import com.github.catvod.utils.Misc;
|
||||
import com.github.catvod.utils.okhttp.OKCallBack;
|
||||
import com.github.catvod.utils.okhttp.OkHttpUtil;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.math.BigInteger;
|
||||
import java.net.URLEncoder;
|
||||
import java.security.MessageDigest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
|
||||
import okhttp3.Call;
|
||||
|
||||
public class LiteApple extends Spider {
|
||||
private static final String siteUrl = "http://ht.grelighting.cn/api.php";
|
||||
|
||||
private HashMap<String, String> getHeaders(String url, String data) {
|
||||
HashMap<String, String> headers = new HashMap<>();
|
||||
if (data != null) {
|
||||
String token = "";
|
||||
try {
|
||||
token = Base64.encodeToString(b(fakeDevice.getBytes("UTF-8"), tokenKey == null ? "XPINGGUO" : tokenKey), 2);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
int currentTimeMillis = (int) (System.currentTimeMillis() / ((long) 1000));
|
||||
String hash = md5(fakeDevice + data + currentTimeMillis).substring(8, 12);
|
||||
headers.put("token", token);
|
||||
headers.put("hash", hash);
|
||||
headers.put("timestamp", currentTimeMillis + "");
|
||||
if (tokenKey == null) {
|
||||
headers.put("version", "ANDROID cn.grelighting.xpg1.1.5");
|
||||
}
|
||||
}
|
||||
headers.put("User-Agent", "okhttp/4.9.1");
|
||||
return headers;
|
||||
}
|
||||
|
||||
private String fakeDevice = null;
|
||||
private String tokenKey = null;
|
||||
|
||||
@Override
|
||||
public void init(Context context, String extend) {
|
||||
super.init(context, extend);
|
||||
SharedPreferences sharedPreferences = context.getSharedPreferences("spider_LiteApple", Context.MODE_PRIVATE);
|
||||
try {
|
||||
fakeDevice = sharedPreferences.getString("didd", null);
|
||||
} catch (Throwable th) {
|
||||
} finally {
|
||||
if (fakeDevice == null) {
|
||||
fakeDevice = fakeDid();
|
||||
sharedPreferences.edit().putString("didd", fakeDevice).commit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void getTokenKey() {
|
||||
if (tokenKey != null)
|
||||
return;
|
||||
String url = siteUrl + "/v2.user/tokenlogin";
|
||||
OkHttpUtil.post(OkHttpUtil.defaultClient(), url, null, getHeaders(url, "ANDROID cn.grelighting.xpg1.1.5"), new OKCallBack.OKCallBackString() {
|
||||
@Override
|
||||
protected void onFailure(Call call, Exception e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResponse(String response) {
|
||||
try {
|
||||
tokenKey = new JSONObject(response).getJSONObject("data").getString("user_title");
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public String homeContent(boolean filter) {
|
||||
try {
|
||||
getTokenKey();
|
||||
String url = siteUrl + "/v2.vod/androidtypes";
|
||||
String content = OkHttpUtil.string(url, getHeaders(url, null));
|
||||
JSONObject jsonObject = new JSONObject(decryptResponse(content));
|
||||
JSONArray jsonArray = jsonObject.getJSONArray("data");
|
||||
|
||||
JSONObject filterConfig = new JSONObject();
|
||||
JSONArray classes = new JSONArray();
|
||||
for (int i = 0; i < jsonArray.length(); i++) {
|
||||
JSONObject jObj = jsonArray.getJSONObject(i);
|
||||
String typeName = jObj.getString("type_name");
|
||||
String typeId = jObj.getString("type_id");
|
||||
JSONObject newCls = new JSONObject();
|
||||
newCls.put("type_id", typeId);
|
||||
newCls.put("type_name", typeName);
|
||||
classes.put(newCls);
|
||||
|
||||
JSONArray clses = jObj.getJSONArray("classes");
|
||||
JSONArray areas = jObj.getJSONArray("areas");
|
||||
JSONArray years = jObj.getJSONArray("years");
|
||||
|
||||
JSONArray extendsAll = new JSONArray();
|
||||
// 类型
|
||||
JSONObject newTypeExtend;
|
||||
JSONArray newTypeExtendKV;
|
||||
JSONObject kv;
|
||||
newTypeExtend = new JSONObject();
|
||||
newTypeExtend.put("key", "class");
|
||||
newTypeExtend.put("name", "类型");
|
||||
newTypeExtendKV = new JSONArray();
|
||||
for (int j = 0; j < clses.length(); j++) {
|
||||
String v = clses.getString(j);
|
||||
kv = new JSONObject();
|
||||
kv.put("n", v);
|
||||
kv.put("v", v);
|
||||
newTypeExtendKV.put(kv);
|
||||
}
|
||||
newTypeExtend.put("value", newTypeExtendKV);
|
||||
extendsAll.put(newTypeExtend);
|
||||
// 地区
|
||||
newTypeExtend = new JSONObject();
|
||||
newTypeExtend.put("key", "area");
|
||||
newTypeExtend.put("name", "地区");
|
||||
newTypeExtendKV = new JSONArray();
|
||||
kv = new JSONObject();
|
||||
kv.put("n", "全部");
|
||||
kv.put("v", "");
|
||||
newTypeExtendKV.put(kv);
|
||||
for (int j = 0; j < areas.length(); j++) {
|
||||
String area = areas.getString(j);
|
||||
kv = new JSONObject();
|
||||
kv.put("n", area);
|
||||
kv.put("v", area);
|
||||
newTypeExtendKV.put(kv);
|
||||
}
|
||||
newTypeExtend.put("value", newTypeExtendKV);
|
||||
extendsAll.put(newTypeExtend);
|
||||
// 年份
|
||||
newTypeExtend = new JSONObject();
|
||||
newTypeExtend.put("key", "year");
|
||||
newTypeExtend.put("name", "年份");
|
||||
newTypeExtendKV = new JSONArray();
|
||||
kv = new JSONObject();
|
||||
kv.put("n", "全部");
|
||||
kv.put("v", "");
|
||||
newTypeExtendKV.put(kv);
|
||||
for (int j = 0; j < years.length(); j++) {
|
||||
String year = years.getString(j);
|
||||
kv = new JSONObject();
|
||||
kv.put("n", year);
|
||||
kv.put("v", year);
|
||||
newTypeExtendKV.put(kv);
|
||||
}
|
||||
newTypeExtend.put("value", newTypeExtendKV);
|
||||
extendsAll.put(newTypeExtend);
|
||||
filterConfig.put(typeId, extendsAll);
|
||||
// 排序
|
||||
newTypeExtend = new JSONObject();
|
||||
newTypeExtend.put("key", "sortby");
|
||||
newTypeExtend.put("name", "排序");
|
||||
newTypeExtendKV = new JSONArray();
|
||||
kv = new JSONObject();
|
||||
kv.put("n", "时间");
|
||||
kv.put("v", "updatetime");
|
||||
newTypeExtendKV.put(kv);
|
||||
kv = new JSONObject();
|
||||
kv.put("n", "人气");
|
||||
kv.put("v", "hits");
|
||||
newTypeExtendKV.put(kv);
|
||||
kv = new JSONObject();
|
||||
kv.put("n", "评分");
|
||||
kv.put("v", "score");
|
||||
newTypeExtendKV.put(kv);
|
||||
newTypeExtend.put("value", newTypeExtendKV);
|
||||
extendsAll.put(newTypeExtend);
|
||||
}
|
||||
|
||||
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 {
|
||||
JSONArray videos = new JSONArray();
|
||||
for (int id = 1; id < 5; id++) {
|
||||
if (videos.length() > 30)
|
||||
break;
|
||||
try {
|
||||
String url = siteUrl + "/v2.main/androidhome";
|
||||
String content = OkHttpUtil.string(url, getHeaders(url, null));
|
||||
JSONObject jsonObject = new JSONObject(decryptResponse(content));
|
||||
JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("list");
|
||||
for (int i = 0; i < jsonArray.length(); i++) {
|
||||
JSONArray jsonArraySub = jsonArray.getJSONObject(i).getJSONArray("list");
|
||||
for (int j = 0; j < jsonArraySub.length() && j < 4; j++) {
|
||||
JSONObject vObj = jsonArraySub.getJSONObject(j);
|
||||
JSONObject v = new JSONObject();
|
||||
v.put("vod_id", vObj.getString("id"));
|
||||
v.put("vod_name", vObj.getString("name"));
|
||||
v.put("vod_pic", vObj.getString("pic"));
|
||||
v.put("vod_remarks", vObj.getString("updateInfo"));
|
||||
videos.put(v);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
}
|
||||
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 {
|
||||
getTokenKey();
|
||||
String area = extend.containsKey("area") ? extend.get("area") : "";
|
||||
String year = extend.containsKey("year") ? extend.get("year") : "";
|
||||
String url = siteUrl + "/v2.vod/androidfilter?page=" + pg + "&type=" + tid;
|
||||
Set<String> keys = extend.keySet();
|
||||
for (String key : keys) {
|
||||
String val = extend.get(key).trim();
|
||||
if (val.length() == 0)
|
||||
continue;
|
||||
url += "&" + key + "=" + URLEncoder.encode(val);
|
||||
}
|
||||
String content = OkHttpUtil.string(url, getHeaders(url, area + year));
|
||||
JSONObject dataObject = new JSONObject(decryptResponse(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("id"));
|
||||
v.put("vod_name", vObj.getString("name"));
|
||||
v.put("vod_pic", vObj.getString("pic"));
|
||||
v.put("vod_remarks", vObj.getString("updateInfo"));
|
||||
videos.put(v);
|
||||
}
|
||||
JSONObject result = new JSONObject();
|
||||
int limit = 20;
|
||||
int page = Integer.parseInt(pg);
|
||||
result.put("page", page);
|
||||
int pageCount = videos.length() == limit ? page + 1 : page;
|
||||
result.put("pagecount", pageCount);
|
||||
result.put("limit", limit);
|
||||
result.put("total", Integer.MAX_VALUE);
|
||||
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 + "/v2.vod/androiddetail?vod_id=" + ids.get(0);
|
||||
String content = OkHttpUtil.string(url, getHeaders(url, ids.get(0)));
|
||||
JSONObject dataObject = new JSONObject(decryptResponse(content));
|
||||
JSONObject vObj = dataObject.getJSONObject("data");
|
||||
JSONObject result = new JSONObject();
|
||||
JSONArray list = new JSONArray();
|
||||
JSONObject vodAtom = new JSONObject();
|
||||
vodAtom.put("vod_id", vObj.getString("id"));
|
||||
vodAtom.put("vod_name", vObj.getString("name"));
|
||||
vodAtom.put("vod_pic", vObj.getString("pic"));
|
||||
vodAtom.put("type_name", vObj.getString("className"));
|
||||
vodAtom.put("vod_year", vObj.getString("year"));
|
||||
vodAtom.put("vod_area", vObj.getString("area"));
|
||||
vodAtom.put("vod_remarks", vObj.getString("updateInfo"));
|
||||
vodAtom.put("vod_actor", vObj.getString("actor"));
|
||||
vodAtom.put("vod_content", vObj.getString("content").trim());
|
||||
|
||||
ArrayList<String> playUrls = new ArrayList<>();
|
||||
|
||||
JSONArray urls = vObj.getJSONArray("urls");
|
||||
for (int i = 0; i < urls.length(); i++) {
|
||||
JSONObject u = urls.getJSONObject(i);
|
||||
playUrls.add(u.getString("key") + "$" + u.getString("url"));
|
||||
}
|
||||
|
||||
vodAtom.put("vod_play_from", "LiteApple");
|
||||
vodAtom.put("vod_play_url", TextUtils.join("#", playUrls));
|
||||
list.put(vodAtom);
|
||||
result.put("list", list);
|
||||
return result.toString();
|
||||
} catch (Exception e) {
|
||||
SpiderDebug.log(e);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String playerContent(String flag, String id, List<String> vipFlags) {
|
||||
try {
|
||||
if (Misc.isVideoFormat(id)) {
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("parse", 0);
|
||||
result.put("header", "");
|
||||
result.put("playUrl", "");
|
||||
result.put("url", id);
|
||||
return result.toString();
|
||||
}
|
||||
return "";
|
||||
} catch (Exception e) {
|
||||
SpiderDebug.log(e);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String searchContent(String key, boolean quick) {
|
||||
try {
|
||||
getTokenKey();
|
||||
String url = siteUrl + "/v2.vod/androidsearch?page=1&wd=" + URLEncoder.encode(key);
|
||||
String content = OkHttpUtil.string(url, getHeaders(url, key));
|
||||
JSONObject dataObject = new JSONObject(decryptResponse(content));
|
||||
JSONArray jsonArray = dataObject.getJSONArray("data");
|
||||
JSONArray videos = new JSONArray();
|
||||
for (int i = 0; i < jsonArray.length(); i++) {
|
||||
JSONObject vObj = jsonArray.getJSONObject(i);
|
||||
String title = vObj.getString("name");
|
||||
if (!title.contains(key))
|
||||
continue;
|
||||
JSONObject v = new JSONObject();
|
||||
v.put("vod_id", vObj.getString("id"));
|
||||
v.put("vod_name", title);
|
||||
v.put("vod_pic", vObj.getString("pic"));
|
||||
v.put("vod_remarks", vObj.getString("updateInfo"));
|
||||
videos.put(v);
|
||||
}
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("list", videos);
|
||||
return result.toString();
|
||||
} catch (Exception e) {
|
||||
SpiderDebug.log(e);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
protected String decryptResponse(String src) {
|
||||
return src;
|
||||
}
|
||||
|
||||
byte[] a(String str) {
|
||||
byte[] bytes = str.getBytes();
|
||||
byte[] bArr = new byte[333];
|
||||
for (int i9 = 0; i9 < 333; i9++) {
|
||||
bArr[i9] = (byte) i9;
|
||||
}
|
||||
if (bytes.length == 0) {
|
||||
return null;
|
||||
}
|
||||
int i10 = 0;
|
||||
int i11 = 0;
|
||||
for (int i12 = 0; i12 < 333; i12++) {
|
||||
i11 = (((bytes[i10] & 255) + (bArr[i12] & 255)) + i11) % 333;
|
||||
byte b = bArr[i12];
|
||||
bArr[i12] = bArr[i11];
|
||||
bArr[i11] = b;
|
||||
i10 = (i10 + 1) % bytes.length;
|
||||
}
|
||||
return bArr;
|
||||
}
|
||||
|
||||
byte[] b(byte[] bArr, String str) {
|
||||
byte[] a = a(str);
|
||||
byte[] bArr2 = new byte[bArr.length];
|
||||
int i9 = 0;
|
||||
int i10 = 0;
|
||||
for (int i11 = 0; i11 < bArr.length; i11++) {
|
||||
i9 = (i9 + 1) % 333;
|
||||
i10 = ((a[i9] & 255) + i10) % 333;
|
||||
byte b = a[i9];
|
||||
a[i9] = a[i10];
|
||||
a[i10] = b;
|
||||
bArr2[i11] = (byte) (a[((a[i9] & 255) + (a[i10] & 255)) % 333] ^ bArr[i11]);
|
||||
}
|
||||
return bArr2;
|
||||
}
|
||||
|
||||
String randomString(int length) {
|
||||
String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456";
|
||||
Random random = new Random();
|
||||
StringBuffer sb = new StringBuffer();
|
||||
for (int i = 0; i < length; i++) {
|
||||
int number = random.nextInt(str.length());
|
||||
sb.append(str.charAt(number));
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
String randomMACAddress() {
|
||||
Random rand = new Random();
|
||||
byte[] macAddr = new byte[6];
|
||||
rand.nextBytes(macAddr);
|
||||
macAddr[0] = (byte) (macAddr[0] & (byte) 254); //zeroing last 2 bytes to make it unicast and locally adminstrated
|
||||
StringBuilder sb = new StringBuilder(18);
|
||||
for (byte b : macAddr) {
|
||||
sb.append(String.format("%02X", b));
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
String fakeDid() {
|
||||
String i = "";
|
||||
String f = "";
|
||||
String d = "N/A";
|
||||
try {
|
||||
d = Build.class.getField("SERIAL").get((Object) null).toString();
|
||||
} catch (Exception unused) {
|
||||
}
|
||||
String e = "";
|
||||
try {
|
||||
e = (String) Class.forName("android.os.SystemProperties").getDeclaredMethod("get", new Class[]{String.class}).invoke((Object) null, new Object[]{"ro.build.fingerprint"});
|
||||
} catch (Exception unused) {
|
||||
return "";
|
||||
}
|
||||
return (((((((((("" + i) + "||") + f) + "||") + randomMACAddress()) + "||") + randomString(16)) + "||") + d) + "||") + e;
|
||||
}
|
||||
|
||||
String md5(String str) {
|
||||
try {
|
||||
MessageDigest instance = MessageDigest.getInstance("MD5");
|
||||
instance.update(str.getBytes());
|
||||
return new BigInteger(1, instance.digest()).toString(16);
|
||||
} catch (Exception e9) {
|
||||
e9.printStackTrace();
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -11,6 +11,9 @@
|
|||
}
|
||||
],
|
||||
"sites": [
|
||||
{"key":"csp_AppTT","name":"🐰图图影视","type":3,"api":"csp_AppTT","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://154.39.64.151:5566$$$Qks3NWg0dnRPbmlsV3JMdCNkMFZ0OHBJbjRJQXByY3I=$$$Y2hpV2g0dnRiU3pYUGdWWg=="},
|
||||
{"key":"SP360","name":"💘360影视","type":3,"api":"csp_SP360","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"小苹果","name":"🍎小苹果","type":3,"api":"csp_LiteApple","playerType":1,"searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_XYQBiu_虎牙","name":"🐯虎牙","type":3,"api":"csp_XYQBiu","searchable":0,"quickSearch":0,"filterable":0,"ext":"https://agit.ai/Yoursmile7/TVBox/raw/branch/master/sub/虎牙.json"},
|
||||
{"key":"csp_XYQBiu_斗鱼","name":"🐬斗鱼","type":3,"api":"csp_XYQBiu","searchable":0,"quickSearch":0,"filterable":0,"ext":"https://agit.ai/Yoursmile7/TVBox/raw/branch/master/sub/斗鱼.json"},
|
||||
{"key":"csp_Bd","name":"☀️哔嘀影视","type":3,"api":"csp_Bdys01","searchable":1,"quickSearch":1,"filterable":1},
|
||||
|
|
|
|||
Loading…
Reference in New Issue