diff --git a/app/src/main/java/com/github/catvod/bean/mqitv/User.java b/app/src/main/java/com/github/catvod/bean/mqitv/User.java index 3217ebe5..581480a5 100644 --- a/app/src/main/java/com/github/catvod/bean/mqitv/User.java +++ b/app/src/main/java/com/github/catvod/bean/mqitv/User.java @@ -1,9 +1,16 @@ package com.github.catvod.bean.mqitv; +import com.github.catvod.net.OkHttp; + +import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class User { private String id; private String mac; + private String token; public User(String id, String mac) { this.id = id; @@ -17,4 +24,16 @@ public class User { public String getMac() { return mac; } + + public String getToken() { + return token == null ? "" : token; + } + + public User getToken(String host) { + String result = OkHttp.string(String.format(Locale.getDefault(), "%s/HSAndroidLogin.ecgi?ty=json&net_account=%s&mac_address1=%s&_=%d", host, getId(), getMac(), System.currentTimeMillis())); + Pattern pattern = Pattern.compile("\"Token\"\\s*:\\s*\"(.*?)\"", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(result); + token = matcher.find() ? matcher.group(1) : ""; + return this; + } } 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 82e7e1ae..adeb6cd3 100644 --- a/app/src/main/java/com/github/catvod/spider/MQiTV.java +++ b/app/src/main/java/com/github/catvod/spider/MQiTV.java @@ -6,14 +6,12 @@ import android.net.Uri; import com.github.catvod.bean.mqitv.Data; import com.github.catvod.bean.mqitv.User; import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; import com.github.catvod.net.OkHttp; import java.io.ByteArrayInputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Locale; import java.util.Map; import java.util.concurrent.ThreadLocalRandom; import java.util.regex.Matcher; @@ -55,7 +53,7 @@ public class MQiTV extends Spider { String port = params.get("port"); if (port == null) port = "5003"; if (ip != null) ext = ip; - String token = getToken(); + String token = getUser().getToken(); if (token.isEmpty()) { Map header = new HashMap<>(); String playing = params.get("playing"); @@ -69,7 +67,10 @@ public class MQiTV extends Spider { } else { String id = params.get("id"); String auth = authChannel(id, token); - SpiderDebug.log("id=" + id + ", token=" + token + ", auth=" + auth); + if (!"OK".equals(auth)) { + users.get(getHost()).clear(); + return proxy(params); + } Object[] result = new Object[3]; result[0] = 200; result[1] = "application/vnd.apple.mpegurl"; @@ -84,28 +85,24 @@ public class MQiTV extends Spider { if (!users.containsKey(getHost())) users.put(getHost(), new ArrayList<>()); for (Data item : data) { for (String userIp : item.getStat().getUserIpList()) { + if (users.get(getHost()).size() >= 5) continue; Matcher userMatcher = userPattern.matcher(userIp); Matcher macMatcher = macPattern.matcher(userIp); String user = userMatcher.matches() ? userMatcher.group(1) : ""; String mac = macMatcher.matches() ? macMatcher.group(1) : ""; - if (!user.isEmpty() && !mac.isEmpty()) users.get(getHost()).add(new User(user, mac)); + if (!user.isEmpty() && !mac.isEmpty()) { + User u = new User(user, mac).getToken(getHost()); + if (!u.getToken().isEmpty()) users.get(getHost()).add(u); + } } } } - private static User choose() { + private static User getUser() { if (users == null) users = new HashMap<>(); if (!users.containsKey(getHost())) users.put(getHost(), new ArrayList<>()); if (users.get(getHost()).isEmpty()) loadUser(Data.objectFrom(OkHttp.string(getHost() + "/api/post?item=itv_traffic")).getData()); - return users.get(getHost()).get(ThreadLocalRandom.current().nextInt(users.size())); - } - - private static String getToken() { - User user = choose(); - String result = OkHttp.string(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(result); - return matcher.find() ? matcher.group(1) : ""; + return users.get(getHost()).isEmpty() ? new User("", "") : users.get(getHost()).get(ThreadLocalRandom.current().nextInt(users.size())); } private static String authChannel(String id, String token) { @@ -117,8 +114,9 @@ public class MQiTV extends Spider { 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"); + String m3u8 = OkHttp.string(base + id + ".m3u8?token=" + token); + if (m3u8.contains("\"Reason\"")) return ""; + String[] lines = m3u8.split("\\r?\\n"); StringBuilder sb = new StringBuilder(); for (String line : lines) { if (!line.startsWith("#")) line = base + line; diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 8a912702..dff7424f 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 68778798..59f41888 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -3f4ac4a1200a2e49dc6dfeee44d6384e +1f6ad25d85981dd689b5534170cdcd42