diff --git a/app/src/main/java/com/github/catvod/bean/mqitv/Data.java b/app/src/main/java/com/github/catvod/bean/mqitv/Data.java index 2a6f9621..bb69cc05 100644 --- a/app/src/main/java/com/github/catvod/bean/mqitv/Data.java +++ b/app/src/main/java/com/github/catvod/bean/mqitv/Data.java @@ -14,6 +14,8 @@ public class Data { private String id; @SerializedName("name") private String name; + @SerializedName("port") + private String port; @SerializedName("stat") private Stat stat; @@ -33,6 +35,10 @@ public class Data { return name == null ? "" : name; } + public String getPort() { + return port == null ? "" : port; + } + public Stat getStat() { return stat == null ? new Stat() : stat; } diff --git a/app/src/main/java/com/github/catvod/spider/MQiTV.java b/app/src/main/java/com/github/catvod/spider/MQiTV.java index d3f42163..677588f0 100644 --- a/app/src/main/java/com/github/catvod/spider/MQiTV.java +++ b/app/src/main/java/com/github/catvod/spider/MQiTV.java @@ -1,6 +1,7 @@ package com.github.catvod.spider; import android.content.Context; +import android.net.Uri; import com.github.catvod.bean.mqitv.Data; import com.github.catvod.bean.mqitv.User; @@ -22,6 +23,11 @@ public class MQiTV extends Spider { private static List users; private static String ext; + private static String getHost() { + if (ext.startsWith("http")) return ext; + else return "http://" + ext; + } + @Override public void init(Context context, String extend) throws Exception { users = new ArrayList<>(); @@ -32,14 +38,17 @@ public class MQiTV extends Spider { public String liveContent(String url) { List data; StringBuilder sb = new StringBuilder(); - loadUser(data = Data.objectFrom(OkHttp.string("http://" + ext + "/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("&type=m3u8").append("\n"); + boolean fixed = ext.startsWith("http"); + 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(); } public static Object[] proxy(Map params) { String id = params.get("id"); String ip = params.get("ip"); + String port = params.get("port"); + if (port == null) port = "5003"; if (ip != null) ext = ip; String token = getToken(); String auth = authChannel(id, token); @@ -47,7 +56,7 @@ public class MQiTV extends Spider { Object[] result = new Object[3]; result[0] = 200; 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; } @@ -67,13 +76,13 @@ public class MQiTV extends Spider { private static User choose() { 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())); } private static String getToken() { 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); Matcher matcher = pattern.matcher(OkHttp.string(url)); if (matcher.find()) return matcher.group(1); @@ -81,14 +90,14 @@ public class MQiTV extends Spider { } 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); if (matcher.find()) return matcher.group(1); return ""; } - private static String getM3u8(String id, String token) { - String base = "http://" + ext.split(":")[0] + ":" + 5003 + "/"; + private static String getM3u8(String id, String port, String token) { + String base = "http://" + Uri.parse(getHost()).getHost() + ":" + port + "/"; String m3u8 = base + id + ".m3u8?token=" + token; String[] lines = OkHttp.string(m3u8).split("\\r?\\n"); StringBuilder sb = new StringBuilder(); diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index b855357a..ea8770fa 100644 Binary files a/jar/custom_spider.jar and b/jar/custom_spider.jar differ diff --git a/jar/custom_spider.jar.md5 b/jar/custom_spider.jar.md5 index 8eb03f7b..b7194c7b 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -26f24ce089f28b73e39f30562707745f +939c753da67fd9fae919313180a01b6d