This commit is contained in:
FongMi 2025-05-13 22:41:32 +08:00
parent 193d9a69a4
commit 8f59d1552e
4 changed files with 24 additions and 9 deletions

View File

@ -14,6 +14,8 @@ public class Data {
private String id; private String id;
@SerializedName("name") @SerializedName("name")
private String name; private String name;
@SerializedName("port")
private String port;
@SerializedName("stat") @SerializedName("stat")
private Stat stat; private Stat stat;
@ -33,6 +35,10 @@ public class Data {
return name == null ? "" : name; return name == null ? "" : name;
} }
public String getPort() {
return port == null ? "" : port;
}
public Stat getStat() { public Stat getStat() {
return stat == null ? new Stat() : stat; return stat == null ? new Stat() : stat;
} }

View File

@ -1,6 +1,7 @@
package com.github.catvod.spider; package com.github.catvod.spider;
import android.content.Context; import android.content.Context;
import android.net.Uri;
import com.github.catvod.bean.mqitv.Data; import com.github.catvod.bean.mqitv.Data;
import com.github.catvod.bean.mqitv.User; import com.github.catvod.bean.mqitv.User;
@ -22,6 +23,11 @@ public class MQiTV extends Spider {
private static List<User> users; private static List<User> users;
private static String ext; private static String ext;
private static String getHost() {
if (ext.startsWith("http")) return ext;
else return "http://" + ext;
}
@Override @Override
public void init(Context context, String extend) throws Exception { public void init(Context context, String extend) throws Exception {
users = new ArrayList<>(); users = new ArrayList<>();
@ -32,14 +38,17 @@ public class MQiTV extends Spider {
public String liveContent(String url) { public String liveContent(String url) {
List<Data> data; List<Data> data;
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
loadUser(data = Data.objectFrom(OkHttp.string("http://" + ext + "/api/post?item=itv_traffic")).getData()); boolean fixed = ext.startsWith("http");
for (Data item : data) sb.append(item.getName()).append(",").append("proxy://do=mqitv").append("&id=").append(item.getId()).append("&type=m3u8").append("\n"); loadUser(data = Data.objectFrom(OkHttp.string(getHost() + "/api/post?item=itv_traffic")).getData());
for (Data item : data) sb.append(item.getName()).append(",").append("proxy://do=mqitv").append("&id=").append(item.getId()).append("&port=").append(fixed ? item.getPort() : "5003").append("&type=m3u8").append("\n");
return sb.toString(); return sb.toString();
} }
public static Object[] proxy(Map<String, String> params) { public static Object[] proxy(Map<String, String> params) {
String id = params.get("id"); String id = params.get("id");
String ip = params.get("ip"); String ip = params.get("ip");
String port = params.get("port");
if (port == null) port = "5003";
if (ip != null) ext = ip; if (ip != null) ext = ip;
String token = getToken(); String token = getToken();
String auth = authChannel(id, token); String auth = authChannel(id, token);
@ -47,7 +56,7 @@ public class MQiTV extends Spider {
Object[] result = new Object[3]; Object[] result = new Object[3];
result[0] = 200; result[0] = 200;
result[1] = "application/vnd.apple.mpegurl"; result[1] = "application/vnd.apple.mpegurl";
result[2] = new ByteArrayInputStream(getM3u8(id, token).getBytes()); result[2] = new ByteArrayInputStream(getM3u8(id, port, token).getBytes());
return result; return result;
} }
@ -67,13 +76,13 @@ public class MQiTV extends Spider {
private static User choose() { private static User choose() {
if (users == null) users = new ArrayList<>(); if (users == null) users = new ArrayList<>();
if (users.isEmpty()) loadUser(Data.objectFrom(OkHttp.string("http://" + ext + "/api/post?item=itv_traffic")).getData()); if (users.isEmpty()) loadUser(Data.objectFrom(OkHttp.string(getHost() + "/api/post?item=itv_traffic")).getData());
return users.get(ThreadLocalRandom.current().nextInt(users.size())); return users.get(ThreadLocalRandom.current().nextInt(users.size()));
} }
private static String getToken() { private static String getToken() {
User user = choose(); User user = choose();
String url = String.format(Locale.getDefault(), "http://%s/HSAndroidLogin.ecgi?ty=json&net_account=%s&mac_address1=%s&_=%d", ext, user.getId(), user.getMac(), System.currentTimeMillis()); String url = String.format(Locale.getDefault(), "%s/HSAndroidLogin.ecgi?ty=json&net_account=%s&mac_address1=%s&_=%d", getHost(), user.getId(), user.getMac(), System.currentTimeMillis());
Pattern pattern = Pattern.compile("\"Token\"\\s*:\\s*\"(.*?)\"", Pattern.CASE_INSENSITIVE); Pattern pattern = Pattern.compile("\"Token\"\\s*:\\s*\"(.*?)\"", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(OkHttp.string(url)); Matcher matcher = pattern.matcher(OkHttp.string(url));
if (matcher.find()) return matcher.group(1); if (matcher.find()) return matcher.group(1);
@ -81,14 +90,14 @@ public class MQiTV extends Spider {
} }
private static String authChannel(String id, String token) { private static String authChannel(String id, String token) {
String data = OkHttp.string("http://" + ext + "/ualive?cid=" + id + "&token=" + token); String data = OkHttp.string(getHost() + "/ualive?cid=" + id + "&token=" + token);
Matcher matcher = Pattern.compile("\"Reason\":\"(.*?)\"", Pattern.CASE_INSENSITIVE).matcher(data); Matcher matcher = Pattern.compile("\"Reason\":\"(.*?)\"", Pattern.CASE_INSENSITIVE).matcher(data);
if (matcher.find()) return matcher.group(1); if (matcher.find()) return matcher.group(1);
return ""; return "";
} }
private static String getM3u8(String id, String token) { private static String getM3u8(String id, String port, String token) {
String base = "http://" + ext.split(":")[0] + ":" + 5003 + "/"; String base = "http://" + Uri.parse(getHost()).getHost() + ":" + port + "/";
String m3u8 = base + id + ".m3u8?token=" + token; String m3u8 = base + id + ".m3u8?token=" + token;
String[] lines = OkHttp.string(m3u8).split("\\r?\\n"); String[] lines = OkHttp.string(m3u8).split("\\r?\\n");
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();

Binary file not shown.

View File

@ -1 +1 @@
26f24ce089f28b73e39f30562707745f 939c753da67fd9fae919313180a01b6d