diff --git a/app/src/main/java/com/github/catvod/spider/Push.java b/app/src/main/java/com/github/catvod/spider/Push.java index 25a7b678..29092744 100644 --- a/app/src/main/java/com/github/catvod/spider/Push.java +++ b/app/src/main/java/com/github/catvod/spider/Push.java @@ -31,6 +31,7 @@ public class Push extends Ali { @Override public String playerContent(String flag, String id, List vipFlags) { + if (id.contains("youtube.com")) return Result.get().url(Youtube.fetch(id)).string(); if (flag.equals("直連")) return Result.get().url(id).subs(getSubs(id)).string(); if (flag.equals("嗅探")) return Result.get().parse().url(id).string(); if (flag.equals("解析")) return Result.get().parse().jx().url(id).string(); diff --git a/app/src/main/java/com/github/catvod/spider/Youtube.java b/app/src/main/java/com/github/catvod/spider/Youtube.java new file mode 100644 index 00000000..c6548ab3 --- /dev/null +++ b/app/src/main/java/com/github/catvod/spider/Youtube.java @@ -0,0 +1,49 @@ +package com.github.catvod.spider; + +import com.github.catvod.net.OkHttp; +import com.github.catvod.utils.Utils; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Youtube { + + private static HashMap getHeader() { + HashMap headers = new HashMap<>(); + headers.put("User-Agent", Utils.CHROME); + return headers; + } + + public static String fetch(String url) { + try { + String result = OkHttp.string(url, getHeader()); + Pattern pattern = Pattern.compile("hlsManifestUrl\\S*?(https\\S*?\\.m3u8)"); + Matcher matcher = pattern.matcher(result); + if (!matcher.find()) return ""; + String stable = matcher.group(1); + result = OkHttp.string(stable, getHeader()); + String quality = find(result); + return quality.isEmpty() ? url : quality; + } catch (Exception e) { + e.printStackTrace(); + return url; + } + } + + private static String find(String result) { + String url = ""; + List items = Arrays.asList("301", "300", "96", "95", "94"); + for (String item : items) if (!(url = find(result, "https:/.*/" + item + "/.*index.m3u8")).isEmpty()) break; + return url; + } + + private static String find(String result, String rule) { + Pattern pattern = Pattern.compile(rule); + Matcher matcher = pattern.matcher(result); + if (matcher.find()) return matcher.group(); + return ""; + } +} diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index df46cf6a..652be9e1 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 c54d06e2..3b25df1b 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -91c9b5707a41ef60147a684a61089966 +00a226e422e2f3710e784601354aa8c0