天意密码登录

This commit is contained in:
“lushunming” 2025-05-18 20:43:40 +08:00
parent cd9c6a232f
commit d3cc8c5fd2
6 changed files with 849 additions and 20 deletions

View File

@ -76,6 +76,7 @@ dependencies {
testImplementation "org.robolectric:robolectric:4.13" testImplementation "org.robolectric:robolectric:4.13"
testImplementation 'cn.hutool:hutool-all:5.8.26' testImplementation 'cn.hutool:hutool-all:5.8.26'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1"
//implementation 'wang.harlon.quickjs:wrapper-java:1.0.0' //implementation 'wang.harlon.quickjs:wrapper-java:1.0.0'
// implementation(ext: 'aar', name: 'quickjs', group: 'fongmi', version: 'release') // implementation(ext: 'aar', name: 'quickjs', group: 'fongmi', version: 'release')

View File

@ -4,7 +4,10 @@ import android.app.AlertDialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.util.Base64;
import android.view.Gravity; import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.ImageView; import android.widget.ImageView;
@ -19,14 +22,21 @@ import com.github.catvod.utils.Notify;
import com.github.catvod.utils.Path; import com.github.catvod.utils.Path;
import com.github.catvod.utils.QRCode; import com.github.catvod.utils.QRCode;
import com.github.catvod.utils.ResUtil; import com.github.catvod.utils.ResUtil;
import com.github.catvod.utils.Util;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateFormatUtils;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -37,6 +47,8 @@ import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import javax.crypto.Cipher;
import okhttp3.Headers; import okhttp3.Headers;
import okhttp3.HttpUrl; import okhttp3.HttpUrl;
import okhttp3.Request; import okhttp3.Request;
@ -72,6 +84,16 @@ public class TianYiHandler {
cookieJar = new SimpleCookieJar(); cookieJar = new SimpleCookieJar();
cache = Cache.objectFrom(Path.read(getCache())); cache = Cache.objectFrom(Path.read(getCache()));
String user = cache.getUser().getCookie();
if (StringUtils.isNoneBlank(user)) {
JsonObject jsonObject = Json.safeObject(user);
String username = jsonObject.get("username").getAsString();
String password = jsonObject.get("password").getAsString();
this.loginWithPassword(username, password);
} else {
this.startFlow();
}
} }
@ -155,6 +177,172 @@ public class TianYiHandler {
} }
public void loginWithPassword(String uname, String passwd) {
try {
// Step 1: 获取加密配置
JsonObject encryptConf = getEncryptConf();
String pubKey = encryptConf.getAsJsonObject("data").get("pubKey").getAsString();
// Step 2: 获取登录参数
PasswordLoginParams params = getLoginParams();
// Step 3: 准备请求头
Map<String, String> headers = buildLoginHeaders(params.lt, params.reqId);
// Step 4: 获取应用配置
AppConfig config = getAppConfig(headers);
// Step 5: 加密凭证
EncryptedCredentials credentials = encryptCredentials(uname, passwd, pubKey);
// Step 6: 提交登录
LoginResult loginResult = submitLogin(headers, config, credentials);
// Step 7: 处理登录结果
processLoginResult(loginResult);
} catch (Exception e) {
SpiderDebug.log("登录失败: " + e.getMessage());
Notify.show("天翼登录失败: " + e.getMessage());
}
}
// 辅助方法实现
private JsonObject getEncryptConf() throws Exception {
String url = API_URL + "/api/logbox/config/encryptConf.do?appId=cloud";
OkResult result = OkHttp.post(url, new HashMap<>(), getHeader(url));
return Json.safeObject(result.getBody());
}
private PasswordLoginParams getLoginParams() throws Exception {
String url = "https://cloud.189.cn/api/portal/loginUrl.action?redirectURL=https://cloud.189.cn/web/redirect.html?returnURL=/main.action";
Map<String, List<String>> resHeaderMap = OkHttp.getLocationHeader(url, getHeader(url));
String redUrl = resHeaderMap.get("Location").get(0);
resHeaderMap = OkHttp.getLocationHeader(redUrl, getHeader(redUrl));
HttpUrl httpUrl = HttpUrl.parse(resHeaderMap.get("Location").get(0));
return new PasswordLoginParams(httpUrl.queryParameter("reqId"), httpUrl.queryParameter("lt"));
}
private Map<String, String> buildLoginHeaders(String lt, String reqId) {
Map<String, String> headers = new HashMap<>(getHeader(API_URL));
headers.put("Content-Type", "application/x-www-form-urlencoded");
headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/76.0");
headers.put("Referer", "https://open.e.189.cn/");
headers.put("Lt", lt);
headers.put("Reqid", reqId);
return headers;
}
private AppConfig getAppConfig(Map<String, String> headers) throws Exception {
Map<String, String> data = new HashMap<>();
data.put("version", "2.0");
data.put("appKey", "cloud");
OkResult result = OkHttp.post(API_URL + "/api/logbox/oauth2/appConf.do", data, headers);
JsonObject dataObj = Json.safeObject(result.getBody()).getAsJsonObject("data");
return new AppConfig(dataObj.get("returnUrl").getAsString(), dataObj.get("paramId").getAsString());
}
private EncryptedCredentials encryptCredentials(String uname, String passwd, String pubKey) throws Exception {
SpiderDebug.log("pubKey: " + pubKey);
PublicKey publicKey = parsePublicKey(pubKey);
return new EncryptedCredentials(encryptRSA(uname, publicKey), encryptRSA(passwd, publicKey));
}
private LoginResult submitLogin(Map<String, String> headers, AppConfig config, EncryptedCredentials credentials) throws Exception {
Map<String, String> data = new HashMap<>();
data.put("appKey", "cloud");
data.put("version", "2.0");
data.put("accountType", "02");
//data.put("mailSuffix", "@189.cn");
data.put("validateCode", "");
data.put("returnUrl", config.returnUrl);
data.put("paramId", config.paramId);
data.put("captchaToken", "");
data.put("dynamicCheck", "FALSE");
data.put("clientType", "1");
data.put("cb_SaveName", "3");
data.put("isOauth2", "false");
data.put("userName", "{NRP}" + credentials.encryptedUname);
data.put("password", "{NRP}" + credentials.encryptedPasswd);
OkResult result = OkHttp.post(API_URL + "/api/logbox/oauth2/loginSubmit.do", data, headers);
return new LoginResult(Json.safeObject(result.getBody()).get("toUrl").getAsString(), result.getResp().get("Set-Cookie"));
}
private void processLoginResult(LoginResult result) throws Exception {
saveCookie(result.cookies, API_URL + "/api/logbox/oauth2/loginSubmit.do");
// 处理重定向
Map<String, List<String>> okResult = OkHttp.getLocationHeader(result.toUrl, getHeader(result.toUrl));
saveCookie(okResult.get("Set-Cookie"), result.toUrl);
}
// 辅助类
private static class PasswordLoginParams {
final String reqId;
final String lt;
PasswordLoginParams(String reqId, String lt) {
this.reqId = reqId;
this.lt = lt;
}
}
private static class AppConfig {
final String returnUrl;
final String paramId;
AppConfig(String returnUrl, String paramId) {
this.returnUrl = returnUrl;
this.paramId = paramId;
}
}
private static class EncryptedCredentials {
final String encryptedUname;
final String encryptedPasswd;
EncryptedCredentials(String encryptedUname, String encryptedPasswd) {
this.encryptedUname = encryptedUname;
this.encryptedPasswd = encryptedPasswd;
}
}
private static class LoginResult {
final String toUrl;
final List<String> cookies;
LoginResult(String toUrl, List<String> cookies) {
this.toUrl = toUrl;
this.cookies = cookies;
}
}
private PublicKey parsePublicKey(String pubKey) throws Exception {
byte[] decoded = android.util.Base64.decode(pubKey, Base64.NO_WRAP);
X509EncodedKeySpec spec = new X509EncodedKeySpec(decoded);
return KeyFactory.getInstance("RSA").generatePublic(spec);
}
private String encryptRSA(String data, PublicKey publicKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encrypted = cipher.doFinal(data.getBytes(Charset.defaultCharset()));
return bytesToHex(encrypted);
}
private String bytesToHex(byte[] bytes) {
StringBuilder hex = new StringBuilder();
for (byte b : bytes) {
hex.append(String.format("%02x", b));
}
return hex.toString().toUpperCase();
}
private String api(String url, Map<String, String> params, Map<String, String> headers, Integer retry, String method) throws InterruptedException { private String api(String url, Map<String, String> params, Map<String, String> headers, Integer retry, String method) throws InterruptedException {
@ -346,6 +534,39 @@ public class TianYiHandler {
} }
} }
public void startFlow() {
Init.run(this::showInput);
}
private void showInput() {
try {
int margin = ResUtil.dp2px(16);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
FrameLayout frame = new FrameLayout(Init.context());
params.setMargins(margin, margin, margin, margin);
EditText username = new EditText(Init.context());
EditText password = new EditText(Init.context());
frame.addView(username, params);
frame.addView(password, params);
dialog = new AlertDialog.Builder(Init.getActivity()).setTitle("请输入天意用户名和密码").setView(frame).setNegativeButton(android.R.string.cancel, null).setPositiveButton(android.R.string.ok, (dialog, which) -> onPositive(username.getText().toString(), password.getText().toString())).show();
} catch (Exception ignored) {
}
}
private void onPositive(String username, String password) {
dismiss();
Init.execute(() -> {
loginWithPassword(username, password);
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("username", username);
jsonObject.addProperty("password", password);
cache.setTianyiUser(new User(Json.toJson(jsonObject)));
});
}
private void dismiss() { private void dismiss() {
try { try {
if (dialog != null) dialog.dismiss(); if (dialog != null) dialog.dismiss();

View File

@ -78,4 +78,10 @@ public class TianYiHandlerTest {
} }
@Test
public void loginWithPassword() throws Exception {
tianYiHandler.loginWithPassword("18896781601","Lushunming@0526");
System.out.println("1111");
}
} }

Binary file not shown.

View File

@ -1 +1 @@
c792d86e7032adf77614775a3aaea124 8ab2c84ea8b35e3be7a269af78dee6a5

View File

@ -1,27 +1,27 @@
{ {
"spider": "https://androidcatvodspider.netlify.app/jar/custom_spider.jar;md5;3b36586b88952e9599f43fe755b4480f", "spider": "https://ghproxy.net/https://raw.githubusercontent.com/lushunming/AndroidCatVodSpider/refs/heads/tianyiPassword/jar/custom_spider.jar;md5;8ab2c84ea8b35e3be7a269af78dee6a5",
"lives": [ "lives": [
{
"name": "电视直播",
"type": "0",
"pass": true,
"url": "https://ghfast.top/raw.githubusercontent.com/Supprise0901/TVBox_live/main/live.txt",
"epg": "https://epg.112114.xyz/?ch={name}&date={date}",
"logo": "https://epg.112114.xyz/logo/{name}.png"
},
{
"name": "网络直播",
"type": "0",
"pass": true,
"url": "https://tv.iill.top/m3u/Live",
"epg": "https://epg.112114.xyz/?ch={name}&date={date}",
"logo": "https://epg.112114.xyz/logo/{name}.png"
},
{ {
"name": "直播", "name": "直播",
"type": "0", "type": "0",
"pass": true, "pass": true,
"url": "https://ghp.ci/https://raw.githubusercontent.com/zwc456baby/iptv_alive/master/live.txt", "url": "https://ghfast.top/https://raw.githubusercontent.com/Wirili/IPTV/main/live.txt",
"epg": "https://epg.112114.xyz/?ch={name}&date={date}",
"logo": "https://epg.112114.xyz/logo/{name}.png"
},
{
"name": "直播ipv6",
"type": "0",
"pass": true,
"url": "https://fanmingming.com/txt?url=https://live.fanmingming.com/tv/m3u/ipv6.m3u",
"epg": "https://epg.112114.xyz/?ch={name}&date={date}",
"logo": "https://epg.112114.xyz/logo/{name}.png"
},
{
"name": "一木",
"type": "0",
"pass": true,
"url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/xianyuyimu/TVBOX-/main/TVBox/%E4%B8%80%E6%9C%A8%E7%9B%B4%E6%92%AD%E6%BA%90.txt",
"epg": "https://epg.112114.xyz/?ch={name}&date={date}", "epg": "https://epg.112114.xyz/?ch={name}&date={date}",
"logo": "https://epg.112114.xyz/logo/{name}.png" "logo": "https://epg.112114.xyz/logo/{name}.png"
}, },
@ -35,7 +35,249 @@
} }
], ],
"sites": [ "sites": [
{
"key": "Introduce",
"name": "Cookie设置",
"type": 3,
"api": "csp_Introduce"
},
{
"key": "Douban",
"name": " 豆瓣仅推荐",
"type": 3,
"api": "csp_Douban",
"searchable": 0,
"filterable": 1
},
{
"key": "Jianpian",
"name": "荐片视频",
"type": 3,
"api": "csp_Jianpian",
"searchable": 1,
"filterable": 1
},
{
"key": "玩偶",
"name": "玩偶哥哥",
"type": 3,
"api": "csp_Wogg",
"searchable": 1,
"changeable": 1,
"ext": "{\"site\": [\"https://www.wogg.net/\",\"https://wogg.xxooo.cf/\"]}"
},
{
"key": "PanTa",
"name": "盘他|139Pan",
"type": 3,
"api": "csp_PanTa",
"searchable": 1,
"changeable": 1,
"ext": {}
},
{
"key": "BiXin",
"name": "彼心|139Pan",
"type": 3,
"api": "csp_BiXin",
"searchable": 1,
"changeable": 1,
"ext": {}
}, {
"key": "TgSearch",
"name": "TgSearch|Pan",
"type": 3,
"api": "csp_TgSearch",
"searchable": 1,
"changeable": 1,
"ext": {}
},
{
"key": "KuaKeBa",
"name": "夸克吧",
"type": 3,
"api": "csp_KuaKeBa",
"searchable": 1,
"changeable": 1,
"ext": {}
},
{
"key": "DianYingYunJi",
"name": "电影云集",
"type": 3,
"api": "csp_DianYingYunJi",
"searchable": 1,
"changeable": 1,
"ext": {}
},
{
"key": "KuaKeS",
"name": "夸克网盘社",
"type": 3,
"api": "csp_KuaKeS",
"searchable": 1,
"changeable": 1,
"ext": {}
},
{
"key": "XuanFeng",
"name": "旋风影视",
"type": 3,
"api": "csp_XuanFeng",
"searchable": 1,
"changeable": 1,
"ext": {}
},
{
"key": "NCat",
"name": "网飞猫影视",
"type": 3,
"api": "csp_NCat",
"searchable": 1,
"filterable": 1
},
{
"key": "ChangZhang",
"name": "厂长影视",
"type": 3,
"api": "csp_ChangZhang",
"searchable": "1",
"filterable": "0",
"changeable": 0,
"ext": "https://www.czzy.site/"
},
{
"key": "Zxzj",
"name": "在线之家",
"type": 3,
"api": "csp_Zxzj",
"searchable": "1",
"filterable": "0",
"changeable": 0,
"ext": {}
},
{
"key": "TvDy",
"name": "电影天堂影视",
"type": 3,
"api": "csp_TvDy",
"searchable": 1,
"filterable": 1
},
{
"key": "W55Movie",
"name": "555电影",
"type": 3,
"api": "csp_W55Movie",
"searchable": 0,
"filterable": 1,
"ext": "https://w55xy.com/"
},
{
"key": "DaGongRen",
"name": "打工人电影",
"type": 3,
"api": "csp_DaGongRen",
"searchable": 1,
"filterable": 1
},
{
"key": "HkTv",
"name": "TVB云播影视",
"type": 3,
"api": "csp_HkTv",
"searchable": 0,
"filterable": 1,
"ext": "http://www.hktvyb.vip/"
},
{
"key": "NGkt",
"name": "瓜瓜",
"type": 3,
"api": "csp_NG",
"searchable": 1,
"filterable": 0,
"ext": {}
},
{
"key": "JustLive",
"name": "JustLive直播",
"type": 3,
"api": "csp_JustLive",
"searchable": 1,
"filterable": 1
},
{
"key": "Xb6v",
"name": "新版6V视频",
"type": 3,
"api": "csp_Xb6v",
"searchable": 1,
"filterable": 1
},
{
"key": "ikanbot",
"name": "爱看机器人",
"type": 3,
"api": "csp_Ikanbot",
"searchable": 1,
"filterable": 0,
"ext": "{\"box\": \"TVBox\", \"danmu\": false}"
},
{
"key": "Libvio",
"name": "立播影视",
"type": 3,
"api": "csp_Libvio",
"searchable": 1,
"filterable": 0,
"ext": "{ \"site\": \"https://www.libvio.app\" }"
},
{
"key": "Ddrk",
"name": "低端影视",
"type": 3,
"api": "csp_Ddrk",
"searchable": 1,
"filterable": 0,
"ext": " {\"site\":\"https://ddys.info/\"}"
},
{
"key": "Ysj",
"name": "异世界动漫(不稳定)",
"type": 3,
"api": "csp_Ysj",
"searchable": 1,
"filterable": 1
},
{
"key": "QxiTv",
"name": "七喜影视",
"type": 3,
"api": "csp_QxiTv",
"searchable": 1,
"changeable": 0,
"ext": {}
},
{
"key": "glod",
"name": "金牌 | 影视",
"type": 3,
"api": "csp_Glod",
"searchable": 1,
"changeable": 0,
"ext": {}
},
{
"key": "YunPanBa",
"name": "云盘吧",
"type": 3,
"api": "csp_YunPanBa",
"searchable": 1,
"timeout": 30
},
{ {
"key": "QiLeSo", "key": "QiLeSo",
"name": "奇乐搜┃搜索", "name": "奇乐搜┃搜索",
@ -43,8 +285,367 @@
"api": "csp_QiLeSo", "api": "csp_QiLeSo",
"searchable": 1, "searchable": 1,
"timeout": 30 "timeout": 30
},
{
"key": "PanSearch",
"name": "盘搜┃搜索",
"type": 3,
"api": "csp_PanSearch",
"searchable": 1,
"timeout": 30
},
{
"key": "TianYiSo",
"name": "天翼┃搜索",
"type": 3,
"api": "csp_TianYiSo",
"searchable": 1,
"timeout": 30
},
{
"key": "newvision",
"name": "(js)新视觉影院(不稳定)",
"api": "https://androidcatvodspider.netlify.app/json/js/newvision.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "kankan70",
"name": "(js)70看看┃📺",
"api": "https://androidcatvodspider.netlify.app/json/js/kankan70.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "jpyy",
"name": "(js)金牌影院",
"api": "https://androidcatvodspider.netlify.app/json/js/jpyy.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "jpyy2",
"name": "(js)金牌影院",
"api": "https://androidcatvodspider.netlify.app/json/js/jpyy2.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "tiantian",
"name": "(js)天天影视┃⛄",
"api": "https://androidcatvodspider.netlify.app/json/js/tiantian.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "xb6v",
"name": "(js)磁力新6V┃🧲",
"api": "https://androidcatvodspider.netlify.app/json/js/xb6v.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "mp4movie",
"name": "(js)Mp4电影┃🍚",
"api": "https://androidcatvodspider.netlify.app/json/js/mp4movie.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "jianpian",
"name": "(js)荐片┃🌼",
"api": "https://androidcatvodspider.netlify.app/json/js/jianpian.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "alipansou",
"name": "(js)阿里猫狸┃😸",
"api": "https://androidcatvodspider.netlify.app/json/js/alipansou.js",
"timeout": 30,
"ext": {
"box": "TVBox",
"aliToken": "26fc6787afff43e78b78992e782502f1",
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
},
"playerType": 0,
"type": 3
},
{
"key": "huya",
"name": "(js)虎牙直播┃🐯",
"api": "https://androidcatvodspider.netlify.app/json/js/huya.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "star",
"name": "(js)星视界┃墙☄️",
"api": "https://androidcatvodspider.netlify.app/json/js/star.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "nivod",
"name": "(js)泥视频┃墙👑",
"api": "https://androidcatvodspider.netlify.app/json/js/nivod.js",
"timeout": 30,
"ext": {
"box": "TVBox",
"code": 0
},
"playerType": 0,
"type": 3
},
{
"key": "aiyingshi",
"name": "(js)爱影视┃🚀",
"api": "https://androidcatvodspider.netlify.app/json/js/aiyingshi.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "sp360",
"name": "(js)360影视┃🥎",
"api": "https://androidcatvodspider.netlify.app/json/js/sp360.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "mxanime",
"name": "(js)MX动漫┃🍒",
"api": "https://androidcatvodspider.netlify.app/json/js/mxanime.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "cntv",
"name": "(js)中央影视┃🤵‍♂️",
"api": "https://androidcatvodspider.netlify.app/json/js/cntv.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "douban",
"name": "(js)豆瓣┃🍥",
"api": "https://androidcatvodspider.netlify.app/json/js/douban.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "pan_search",
"name": "(js)阿里盘搜┃🗂️",
"api": "https://androidcatvodspider.netlify.app/json/js/pan_search.js",
"timeout": 30,
"ext": {
"box": "TVBox",
"aliToken": "26fc6787afff43e78b78992e782502f1",
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
},
"playerType": 0,
"type": 3
},
{
"key": "bilibili",
"name": "(js)哔哩哔哩┃🏰",
"api": "https://androidcatvodspider.netlify.app/json/js/bilibili.js",
"timeout": 30,
"ext": {
"box": "TVBox",
"cookie": "buvid3=02675249-8ED3-C418-87F5-59E18316459714816infoc; b_nut=1704421014; _uuid=5D435F74-F574-D9AB-62C1-B9294DE465D913102infoc; buvid_fp=e8c5650c749398e9b5cad3f3ddb5081e; buvid4=007E85D1-52C1-7E6E-07CF-837FFBC9349516677-024010502-J5vTDSZDCw4fNnXRejbSVg%3D%3D; rpdid=|()kYJmulRu0J'u~|RRJl)JR; PVID=1; SESSDATA=3be091d3%2C1720332009%2C699ed%2A11CjAcCdwXG5kY1umhCOpQHOn_WP7L9xFBfWO7KKd4BPweodpR6VyIfeNyPiRmkr5jCqsSVjg0R0dZOVVHRUo3RnhPRTZFc3JPbGdiUjFCdHpiRDhiTkticmdKTjVyS1VhbDdvNjFMSDJlbUJydUlRdjFUNGFBNkJlV2ZTa0N1Q1BEVi1QYTQzTUh3IIEC; bili_jct=b0ee7b5d3f27df893545d811d95506d4; DedeUserID=78014638; DedeUserID__ckMd5=4c8c5d65065e468a; enable_web_push=DISABLE; header_theme_version=CLOSE; home_feed_column=5; CURRENT_BLACKGAP=0; CURRENT_FNVAL=4048; b_lsid=75E916AA_18EA1A8D995; bsource=search_baidu; FEED_LIVE_VERSION=V_HEADER_LIVE_NO_POP; browser_resolution=1507-691; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTIzNjk5MTMsImlhdCI6MTcxMjExMDY1MywicGx0IjotMX0.8zQW_fNTCSBlK_JkHnzu3gDw62wuTK1qgKcbGec3swM; bili_ticket_expires=171236985"
},
"playerType": 0,
"type": 3
},
{
"key": "changzhang",
"name": "(js)厂长直连┃🏭️",
"api": "https://androidcatvodspider.netlify.app/json/js/changzhang.js",
"timeout": 30,
"ext": {
"box": "TVBox",
"aliToken": "26fc6787afff43e78b78992e782502f1",
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
},
"playerType": 0,
"type": 3
},
{
"key": "wogg",
"name": "(js)阿里玩偶┃💂",
"api": "https://androidcatvodspider.netlify.app/json/js/wogg.js",
"timeout": 30,
"ext": {
"box": "TVBox",
"aliToken": "26fc6787afff43e78b78992e782502f1",
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
},
"playerType": 0,
"type": 3
},
{
"key": "nangua",
"name": "(js)南瓜影视┃🎃",
"api": "https://androidcatvodspider.netlify.app/json/js/nangua.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "aliyunpanshare",
"name": "(js)阿里云盘分享┃🥏‍",
"api": "https://androidcatvodspider.netlify.app/json/js/aliyunpanshare.js",
"timeout": 30,
"ext": {
"box": "TVBox",
"aliToken": "26fc6787afff43e78b78992e782502f1",
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
},
"playerType": 0,
"type": 3
},
{
"key": "dubo",
"name": "(js)独播影视┃🛶",
"api": "https://androidcatvodspider.netlify.app/json/js/dubo.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "haiwaikan",
"name": "(js)海外看┃☕墙",
"api": "https://androidcatvodspider.netlify.app/json/js/haiwaikan.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "dygangs",
"name": "(js)电影港┃🏖️",
"api": "https://androidcatvodspider.netlify.app/json/js/dygangs.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "cilixiong",
"name": "(js)磁力熊┃🐻",
"api": "https://androidcatvodspider.netlify.app/json/js/cilixiong.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "lovemovie",
"name": "(js)爱情电影网┃💕",
"api": "https://androidcatvodspider.netlify.app/json/js/lovemovie.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
},
{
"key": "gitcafe",
"name": "(js)阿里纸条┃🦊",
"api": "https://androidcatvodspider.netlify.app/json/js/gitcafe.js",
"timeout": 30,
"ext": {
"box": "TVBox",
"aliToken": "26fc6787afff43e78b78992e782502f1",
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
},
"playerType": 0,
"type": 3
},
{
"key": "kuaikan",
"name": "(js)快看视频┃🛥︎",
"api": "https://androidcatvodspider.netlify.app/json/js/kuaikan.js",
"timeout": 30,
"ext": {
"box": "TVBox"
},
"playerType": 0,
"type": 3
} }
], ],
"parses": [ "parses": [
{ {