diff --git a/app/src/main/java/com/github/catvod/bean/bili/Wbi.java b/app/src/main/java/com/github/catvod/bean/bili/Wbi.java index 853813f4..8a7df20e 100644 --- a/app/src/main/java/com/github/catvod/bean/bili/Wbi.java +++ b/app/src/main/java/com/github/catvod/bean/bili/Wbi.java @@ -3,6 +3,7 @@ package com.github.catvod.bean.bili; import android.net.Uri; import android.text.TextUtils; +import com.github.catvod.utils.Crypto; import com.github.catvod.utils.Util; import com.google.gson.annotations.SerializedName; @@ -41,7 +42,7 @@ public class Wbi { params.put("wts", System.currentTimeMillis() / 1000); for (String key : params.keySet()) sb.append(key).append("=").append(URLEncoder.encode(params.get(key).toString())).append("&"); String query = Util.substring(sb.toString()); - String w_rid = Util.MD5(query + mixinKey); + String w_rid = Crypto.md5(query + mixinKey); return query + "&w_rid=" + w_rid; } } diff --git a/app/src/main/java/com/github/catvod/spider/AppXY.java b/app/src/main/java/com/github/catvod/spider/AppXY.java index d2fec827..d081f81b 100644 --- a/app/src/main/java/com/github/catvod/spider/AppXY.java +++ b/app/src/main/java/com/github/catvod/spider/AppXY.java @@ -8,7 +8,7 @@ import com.github.catvod.bean.Result; import com.github.catvod.bean.Vod; import com.github.catvod.crawler.Spider; import com.github.catvod.net.OkHttp; -import com.github.catvod.utils.Util; +import com.github.catvod.utils.Crypto; import org.json.JSONArray; import org.json.JSONObject; @@ -37,7 +37,7 @@ public class AppXY extends Spider { public void init(Context context, String extend) throws Exception { String s = System.currentTimeMillis() + ""; Map map = new HashMap<>(); - map.put("device", Util.MD5(s)); + map.put("device", Crypto.md5(s)); map.put("install_first_open", "true"); map.put("first_install_time", s); map.put("last_update_time", s); diff --git a/app/src/main/java/com/github/catvod/spider/Feiyang.java b/app/src/main/java/com/github/catvod/spider/Feiyang.java index aa9f69cf..77f0c733 100644 --- a/app/src/main/java/com/github/catvod/spider/Feiyang.java +++ b/app/src/main/java/com/github/catvod/spider/Feiyang.java @@ -5,9 +5,9 @@ import android.os.SystemClock; import com.github.catvod.crawler.Spider; import com.github.catvod.net.OkHttp; +import com.github.catvod.utils.FileUtil; import com.github.catvod.utils.Path; import com.github.catvod.utils.Shell; -import com.github.catvod.utils.Util; import java.io.BufferedInputStream; import java.io.File; @@ -53,7 +53,7 @@ public class Feiyang extends Spider { String url = texts[0].trim(); String md5 = texts[1].trim(); if (md5.startsWith("http")) md5 = OkHttp.string(md5).trim(); - if (Util.MD5(f_aio).equals(md5)) return; + if (FileUtil.md5(f_aio).equals(md5)) return; try { File file = Path.create(new File(Path.download(), AIO)); download(file, OkHttp.newCall(url).body().byteStream()); diff --git a/app/src/main/java/com/github/catvod/spider/Living.java b/app/src/main/java/com/github/catvod/spider/Living.java index d18ffb98..d64ea199 100644 --- a/app/src/main/java/com/github/catvod/spider/Living.java +++ b/app/src/main/java/com/github/catvod/spider/Living.java @@ -10,8 +10,8 @@ import com.github.catvod.bean.Result; import com.github.catvod.bean.Vod; import com.github.catvod.crawler.Spider; import com.github.catvod.net.OkHttp; +import com.github.catvod.utils.Crypto; import com.github.catvod.utils.LZString; -import com.github.catvod.utils.Util; import org.json.JSONArray; import org.json.JSONException; @@ -242,8 +242,8 @@ public class Living extends Spider { String f = String.valueOf(currentTimeMillis + Long.parseLong(N)); String fmPart = code.split("fm=")[1].split("&")[0]; String c = new String(Base64.decode(URLDecoder.decode(fmPart, "UTF-8"), Base64.NO_WRAP)).split("_")[0]; - String u = Util.MD5(f + "|tars_mp|102"); - return String.format("&wsSecret=%s&uuid=%s&wsTime=%s&uid=%s&seqid=%s&fs=%s&ctype=tars_mp&t=102&ver=1&sv=2401310321", Util.MD5(c + "_" + N + "_" + name + "_" + u + "_" + s), i, s, N, f, r); + String u = Crypto.md5(f + "|tars_mp|102"); + return String.format("&wsSecret=%s&uuid=%s&wsTime=%s&uid=%s&seqid=%s&fs=%s&ctype=tars_mp&t=102&ver=1&sv=2401310321", Crypto.md5(c + "_" + N + "_" + name + "_" + u + "_" + s), i, s, N, f, r); } private JSONObject request(String url) throws JSONException { diff --git a/app/src/main/java/com/github/catvod/spider/Uvod.java b/app/src/main/java/com/github/catvod/spider/Uvod.java index 5ff69441..503ff5bc 100644 --- a/app/src/main/java/com/github/catvod/spider/Uvod.java +++ b/app/src/main/java/com/github/catvod/spider/Uvod.java @@ -53,7 +53,7 @@ public class Uvod extends Spider { } else if (URL.equals(play)) { text = String.format("-quality=%s&video_fragment_id=%s&video_id=%s-%s", quality, pg, tid, hm); } - String sign = Util.MD5(text); + String sign = Crypto.md5(text); Map header = new HashMap<>(); header.put("User-Agent", Util.CHROME); header.put("referer", "https://www.uvod.tv/"); diff --git a/app/src/main/java/com/github/catvod/spider/YHDM.java b/app/src/main/java/com/github/catvod/spider/YHDM.java index 9ac1e89b..770cff89 100644 --- a/app/src/main/java/com/github/catvod/spider/YHDM.java +++ b/app/src/main/java/com/github/catvod/spider/YHDM.java @@ -25,6 +25,8 @@ import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * @author Qile @@ -106,10 +108,10 @@ public class YHDM extends Spider { } } String text = doc.select(".myui-content__detail").text(); - String classifyName = Util.Matcher(text, "类型:(.*?)分类"); - String area = Util.Matcher(text, "地区:(.*?)年份"); - String year = Util.Matcher(text, "年份:(.*?)更新"); - String remark = Util.Matcher(text, "更新:(.*?)简介"); + String classifyName = matcher(text, "类型:(.*?)分类"); + String area = matcher(text, "地区:(.*?)年份"); + String year = matcher(text, "年份:(.*?)更新"); + String remark = matcher(text, "更新:(.*?)简介"); String brief = doc.select(".col-pd.text-collapse .data").text(); Vod vod = new Vod(); @@ -147,22 +149,27 @@ public class YHDM extends Spider { String ConfigUrl = siteUrl + "/static/js/playerconfig.js?t=" + todayDate; if (!configCache.containsKey(ConfigUrl)) { String ConfigContent = OkHttp.string(ConfigUrl, getHeader()); - String ConfigObject = Util.Matcher(ConfigContent, "player_list=(.*?),MacPlayerConfig"); + String ConfigObject = matcher(ConfigContent, "player_list=(.*?),MacPlayerConfig"); configCache.put(ConfigUrl, ConfigObject); } String content = OkHttp.string(siteUrl + id, getHeader()); - String json = Util.Matcher(content, "player_aaaa=(.*?)"); + String json = matcher(content, "player_aaaa=(.*?)"); JSONObject player = new JSONObject(json); String aaaaUrl = player.getString("url"); String from = player.getString("from"); String parseUrl = new JSONObject(configCache.get(ConfigUrl)).getJSONObject(from).getString("parse"); String parseUrls = parseUrl + aaaaUrl; String content1 = OkHttp.string(parseUrls, getHeader()); - String playUrl = Util.Matcher(content1, "getVideoInfo\\(\"(.*?)\""); + String playUrl = matcher(content1, "getVideoInfo\\(\"(.*?)\""); String key = "57A891D97E332A9D"; - String iv = Util.Matcher(content1, "bt_token = \"(.*?)\""); + String iv = matcher(content1, "bt_token = \"(.*?)\""); String realUrl = Crypto.CBC(playUrl, key, iv); if (realUrl == null) return Result.get().url(siteUrl + id).parse().string(); return Result.get().url(realUrl).string(); } + + private String matcher(String content, String pattern) { + Matcher matcher = Pattern.compile(pattern).matcher(content); + return matcher.find() ? matcher.group(1) : ""; + } } \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/ui/ScrollTextView.java b/app/src/main/java/com/github/catvod/ui/ScrollTextView.java deleted file mode 100644 index 214596d2..00000000 --- a/app/src/main/java/com/github/catvod/ui/ScrollTextView.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.github.catvod.ui; - -import android.content.Context; -import android.graphics.Rect; -import android.text.TextPaint; -import android.util.AttributeSet; -import android.view.animation.LinearInterpolator; -import android.widget.Scroller; -import android.widget.TextView; - -public class ScrollTextView extends TextView { - - private final Scroller scroller; - private int duration; - - public ScrollTextView(Context context) { - this(context, null); - } - - public ScrollTextView(Context context, AttributeSet attrs) { - this(context, attrs, android.R.attr.textViewStyle); - } - - public ScrollTextView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - setSingleLine(); - setEllipsize(null); - setHorizontallyScrolling(true); - setScroller(scroller = new Scroller(getContext(), new LinearInterpolator())); - } - - public void setDuration(int duration) { - this.duration = duration; - } - - public void startScroll() { - scroller.startScroll(-getWidth(), 0, calculateScrollingLen(), 0, duration * 1000); - } - - public void stopScroll() { - if (scroller != null) scroller.abortAnimation(); - setVisibility(GONE); - } - - private int calculateScrollingLen() { - TextPaint paint = getPaint(); - Rect rect = new Rect(); - String text = getText().toString(); - paint.getTextBounds(text, 0, text.length(), rect); - return rect.width() + getWidth(); - } - - @Override - public void computeScroll() { - super.computeScroll(); - if (scroller != null && scroller.isFinished()) stopScroll(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/utils/Crypto.java b/app/src/main/java/com/github/catvod/utils/Crypto.java index 22149b2a..255c55f3 100644 --- a/app/src/main/java/com/github/catvod/utils/Crypto.java +++ b/app/src/main/java/com/github/catvod/utils/Crypto.java @@ -2,8 +2,10 @@ package com.github.catvod.utils; import android.util.Base64; +import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.security.KeyFactory; +import java.security.MessageDigest; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.AlgorithmParameterSpec; @@ -16,6 +18,23 @@ import javax.crypto.spec.SecretKeySpec; public class Crypto { + public static String md5(String src) { + return md5(src, "UTF-8"); + } + + public static String md5(String src, String charset) { + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] messageDigest = md.digest(src.getBytes(charset)); + BigInteger no = new BigInteger(1, messageDigest); + StringBuilder sb = new StringBuilder(no.toString(16)); + while (sb.length() < 32) sb.insert(0, "0"); + return sb.toString().toLowerCase(); + } catch (Exception e) { + return ""; + } + } + public static String CBC(String src, String KEY, String IV) { try { src = src.replace("\\", ""); diff --git a/app/src/main/java/com/github/catvod/utils/FileUtil.java b/app/src/main/java/com/github/catvod/utils/FileUtil.java index fe2183df..198276f7 100644 --- a/app/src/main/java/com/github/catvod/utils/FileUtil.java +++ b/app/src/main/java/com/github/catvod/utils/FileUtil.java @@ -8,7 +8,9 @@ import android.text.TextUtils; import com.github.catvod.spider.Init; import java.io.File; +import java.io.FileInputStream; import java.net.URLConnection; +import java.security.MessageDigest; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -37,6 +39,22 @@ public class FileUtil { } } + public static String md5(File file) { + try { + MessageDigest digest = MessageDigest.getInstance("MD5"); + FileInputStream fis = new FileInputStream(file); + byte[] bytes = new byte[4096]; + int count; + while ((count = fis.read(bytes)) != -1) digest.update(bytes, 0, count); + fis.close(); + StringBuilder sb = new StringBuilder(); + for (byte b : digest.digest()) sb.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1)); + return sb.toString(); + } catch (Exception e) { + return ""; + } + } + private static Uri getShareUri(File file) { return Build.VERSION.SDK_INT < Build.VERSION_CODES.N ? Uri.fromFile(file) : FileProvider.getUriForFile(Init.context(), Init.context().getPackageName() + ".provider", file); } diff --git a/app/src/main/java/com/github/catvod/utils/ProxyVideo.java b/app/src/main/java/com/github/catvod/utils/ProxyVideo.java deleted file mode 100644 index d1ddfcf3..00000000 --- a/app/src/main/java/com/github/catvod/utils/ProxyVideo.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.github.catvod.utils; - -import android.os.SystemClock; -import android.text.TextUtils; - -import com.github.catvod.net.OkHttp; -import com.github.catvod.spider.Proxy; - -import org.json.JSONObject; - -import java.net.URLEncoder; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; - -import okhttp3.Response; - -public class ProxyVideo { - - private static final String GO_SERVER = "http://127.0.0.1:7777/"; - - public static void go() { - boolean close = OkHttp.string(GO_SERVER).isEmpty(); - if (close) OkHttp.string("http://127.0.0.1:" + Proxy.getPort() + "/go"); - if (close) while (OkHttp.string(GO_SERVER).isEmpty()) SystemClock.sleep(20); - } - - public static String goVer() { - try { - go(); - String result = OkHttp.string(GO_SERVER + "version"); - return new JSONObject(result).optString("version"); - } catch (Exception e) { - return ""; - } - } - - public static String url(String url, int thread) { - if (!TextUtils.isEmpty(goVer()) && url.contains("/proxy?")) url += "&response=url"; - return String.format(Locale.getDefault(), "%s?url=%s&thread=%d", GO_SERVER, URLEncoder.encode(url), thread); - } - - public static Object[] proxy(String url, Map headers) throws Exception { - Response response = OkHttp.newCall(url, headers); - String contentType = response.headers().get("Content-Type"); - String contentDisposition = response.headers().get("Content-Disposition"); - if (contentDisposition != null) contentType = getMimeType(contentDisposition); - Map respHeaders = new HashMap<>(); - for (String key : response.headers().names()) respHeaders.put(key, response.headers().get(key)); - return new Object[]{206, contentType, response.body().byteStream(), respHeaders}; - } - - private static String getMimeType(String contentDisposition) { - if (contentDisposition.endsWith(".mp4")) { - return "video/mp4"; - } else if (contentDisposition.endsWith(".webm")) { - return "video/webm"; - } else if (contentDisposition.endsWith(".avi")) { - return "video/x-msvideo"; - } else if (contentDisposition.endsWith(".wmv")) { - return "video/x-ms-wmv"; - } else if (contentDisposition.endsWith(".flv")) { - return "video/x-flv"; - } else if (contentDisposition.endsWith(".mov")) { - return "video/quicktime"; - } else if (contentDisposition.endsWith(".mkv")) { - return "video/x-matroska"; - } else if (contentDisposition.endsWith(".mpeg")) { - return "video/mpeg"; - } else if (contentDisposition.endsWith(".3gp")) { - return "video/3gpp"; - } else if (contentDisposition.endsWith(".ts")) { - return "video/MP2T"; - } else if (contentDisposition.endsWith(".mp3")) { - return "audio/mp3"; - } else if (contentDisposition.endsWith(".wav")) { - return "audio/wav"; - } else if (contentDisposition.endsWith(".aac")) { - return "audio/aac"; - } else { - return null; - } - } -} diff --git a/app/src/main/java/com/github/catvod/utils/Util.java b/app/src/main/java/com/github/catvod/utils/Util.java index 81b52b34..15d70d55 100644 --- a/app/src/main/java/com/github/catvod/utils/Util.java +++ b/app/src/main/java/com/github/catvod/utils/Util.java @@ -15,12 +15,10 @@ import com.github.catvod.spider.Init; import java.io.File; import java.io.FileInputStream; -import java.math.BigInteger; import java.security.MessageDigest; import java.util.Arrays; import java.util.List; import java.util.Locale; -import java.util.regex.Matcher; import java.util.regex.Pattern; public class Util { @@ -38,12 +36,6 @@ public class Util { return false; } - public static boolean isBlackVodUrl(String url) { - List hosts = Arrays.asList("973973.xyz", ".fit:"); - for (String host : hosts) if (url.contains(host)) return true; - return false; - } - public static boolean isThunder(String url) { return THUNDER.matcher(url).find() || isTorrent(url); } @@ -125,39 +117,6 @@ public class Util { return ""; } - public static String MD5(File file) { - try { - MessageDigest digest = MessageDigest.getInstance("MD5"); - FileInputStream fis = new FileInputStream(file); - byte[] bytes = new byte[4096]; - int count; - while ((count = fis.read(bytes)) != -1) digest.update(bytes, 0, count); - fis.close(); - StringBuilder sb = new StringBuilder(); - for (byte b : digest.digest()) sb.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1)); - return sb.toString(); - } catch (Exception e) { - return ""; - } - } - - public static String MD5(String src) { - return MD5(src, "UTF-8"); - } - - public static String MD5(String src, String charset) { - try { - MessageDigest md = MessageDigest.getInstance("MD5"); - byte[] messageDigest = md.digest(src.getBytes(charset)); - BigInteger no = new BigInteger(1, messageDigest); - StringBuilder sb = new StringBuilder(no.toString(16)); - while (sb.length() < 32) sb.insert(0, "0"); - return sb.toString().toLowerCase(); - } catch (Exception e) { - return ""; - } - } - public static void copy(String text) { ClipboardManager manager = (ClipboardManager) Init.context().getSystemService(Context.CLIPBOARD_SERVICE); manager.setPrimaryClip(ClipData.newPlainText("fongmi", text)); @@ -205,22 +164,4 @@ public class Util { webView.loadUrl(url); }); } - - public static String getDigit(String text) { - try { - String newText = text; - Matcher matcher = Pattern.compile(".*(1080|720|2160|4k|4K).*").matcher(text); - if (matcher.find()) newText = matcher.group(1) + " " + text; - matcher = Pattern.compile("^([0-9]+)").matcher(text); - if (matcher.find()) newText = matcher.group(1) + " " + newText; - return newText.replaceAll("\\D+", "") + " " + newText.replaceAll("\\d+", ""); - } catch (Exception e) { - return ""; - } - } - - public static String Matcher(String content, String pattern) { - Matcher matcher = Pattern.compile(pattern).matcher(content); - return matcher.find() ? matcher.group(1) : ""; - } } diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 3784b64d..e8b73125 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 a64792b9..b7abd4f1 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -41d830d74afd5a31464b2f6678cd3f2e +3cbe660633a395f10a0ae0ee543e935a