diff --git a/app/src/main/java/com/github/catvod/bean/Class.java b/app/src/main/java/com/github/catvod/bean/Class.java index 32e3f219..4c8da83e 100644 --- a/app/src/main/java/com/github/catvod/bean/Class.java +++ b/app/src/main/java/com/github/catvod/bean/Class.java @@ -13,6 +13,8 @@ public class Class { private String typeId; @SerializedName("type_name") private String typeName; + @SerializedName("type_flag") + private String typeFlag; public static List arrayFrom(String str) { Type listType = new TypeToken>() {}.getType(); @@ -24,8 +26,13 @@ public class Class { } public Class(String typeId, String typeName) { + this(typeId, typeName, ""); + } + + public Class(String typeId, String typeName, String typeFlag) { this.typeId = typeId; this.typeName = typeName; + this.typeFlag = typeFlag; } public String getTypeId() { diff --git a/app/src/main/java/com/github/catvod/bean/Vod.java b/app/src/main/java/com/github/catvod/bean/Vod.java index 9d5ddfa8..4e4a60e4 100644 --- a/app/src/main/java/com/github/catvod/bean/Vod.java +++ b/app/src/main/java/com/github/catvod/bean/Vod.java @@ -28,6 +28,8 @@ public class Vod { private String vodPlayFrom; @SerializedName("vod_play_url") private String vodPlayUrl; + @SerializedName("vod_tag") + private String vodTag; public Vod() { } @@ -86,4 +88,8 @@ public class Vod { public void setVodPlayUrl(String vodPlayUrl) { this.vodPlayUrl = vodPlayUrl; } + + public void setVodTag(String vodTag) { + this.vodTag = vodTag; + } } diff --git a/app/src/main/java/com/github/catvod/net/OkHttpUtil.java b/app/src/main/java/com/github/catvod/net/OkHttpUtil.java index fb493cb6..cd8285b3 100644 --- a/app/src/main/java/com/github/catvod/net/OkHttpUtil.java +++ b/app/src/main/java/com/github/catvod/net/OkHttpUtil.java @@ -112,9 +112,13 @@ public class OkHttpUtil { return string(defaultClient(), url, null, paramsMap, headerMap, respHeaderMap, METHOD_POST); } - public static String post(String url, String jsonStr, Map headerMap) { + public static String postJson(String url, String json) { + return postJson(url, json, null); + } + + public static String postJson(String url, String json, Map headerMap) { OKCallBack.OKCallBackString callback = new OKCallBack.OKCallBackString(); - new OKRequest(METHOD_POST, url, jsonStr, headerMap, callback).execute(defaultClient()); + new OKRequest(METHOD_POST, url, json, headerMap, callback).execute(defaultClient()); return callback.getResult(); } diff --git a/app/src/main/java/com/github/catvod/spider/Alist.java b/app/src/main/java/com/github/catvod/spider/Alist.java new file mode 100644 index 00000000..d450f2d1 --- /dev/null +++ b/app/src/main/java/com/github/catvod/spider/Alist.java @@ -0,0 +1,152 @@ +package com.github.catvod.spider; + +import android.content.Context; + +import com.github.catvod.bean.Class; +import com.github.catvod.bean.Result; +import com.github.catvod.bean.Vod; +import com.github.catvod.crawler.Spider; +import com.github.catvod.net.OkHttpUtil; +import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; + +import org.json.JSONArray; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; + +public class Alist extends Spider { + + private JSONObject ext; + + private boolean isJson(String json) { + try { + JsonParser.parseString(json); + return true; + } catch (JsonSyntaxException e) { + return false; + } + } + + @Override + public void init(Context context, String extend) { + this.ext = new JSONObject(); + try { + if (extend.startsWith("http")) extend = OkHttpUtil.string(extend); + if (isJson(extend)) parseJson(extend); + else parseText(extend); + } catch (Exception ignored) { + } + } + + private void parseJson(String extend) throws Exception { + JSONObject object = new JSONObject(extend); + JSONArray array = object.names(); + for (int i = 0; i < array.length(); i++) { + String key = array.getString(i); + ext.put(key, object.getString(key)); + } + } + + private void parseText(String extend) throws Exception { + String[] array = extend.split("#"); + for (String text : array) { + String[] arr = text.split("\\$"); + if (arr.length == 1) { + ext.put("alist", arr[0]); + } else if (arr.length == 2) { + ext.put(arr[0], arr[1]); + } + } + } + + @Override + public String homeContent(boolean filter) { + List classes = new ArrayList<>(); + Iterator keys = this.ext.keys(); + while (keys.hasNext()) { + String key = keys.next(); + classes.add(new Class(key + "$/", key, "1")); + } + return Result.string(classes, Collections.emptyList()); + } + + @Override + public String categoryContent(String tid, String pg, boolean filter, HashMap extend) throws Exception { + int index = tid.indexOf('$'); + String name = tid.substring(0, index); + String path = tid.substring(index + 1); + String url = ext.getString(name) + "/api/public/path"; + JSONObject params = new JSONObject(); + params.put("path", path); + String response = OkHttpUtil.postJson(url, params.toString()); + JSONArray array = new JSONObject(response).getJSONObject("data").getJSONArray("files"); + List list = new ArrayList<>(); + for (int i = 0; i < array.length(); ++i) { + JSONObject o = array.getJSONObject(i); + String pic = o.getString("thumbnail"); + boolean folder = o.getInt("type") == 1; + if (pic.isEmpty() && folder) pic = "http://img1.3png.com/281e284a670865a71d91515866552b5f172b.png"; + Vod vod = new Vod(); + vod.setVodId(tid + (tid.charAt(tid.length() - 1) == '/' ? "" : "/") + o.getString("name")); + vod.setVodName(o.getString("name")); + vod.setVodPic(pic); + vod.setVodTag(folder ? "folder" : "file"); + String size = getSize(o.getLong("size")); + vod.setVodRemarks(folder ? size + " 文件夹" : size); + list.add(vod); + } + return Result.string(list); + } + + @Override + public String detailContent(List ids) throws Exception { + String tid = ids.get(0); + int index = tid.indexOf('$'); + String name = tid.substring(0, index); + String path = tid.substring(index + 1); + String url = this.ext.getString(name) + "/api/public/path"; + JSONObject params = new JSONObject(); + params.put("path", path); + String response = OkHttpUtil.postJson(url, params.toString()); + JSONArray files = new JSONObject(response).getJSONObject("data").getJSONArray("files"); + JSONObject o = files.getJSONObject(0); + url = o.getString("url"); + if (url.indexOf("//") == 0) url = "http:" + url; + Vod vod = new Vod(); + vod.setVodId(tid + "/" + o.getString("name")); + vod.setVodName(o.getString("name")); + vod.setVodPic(o.getString("thumbnail")); + vod.setVodTag(o.getInt("type") == 1 ? "folder" : "file"); + vod.setVodPlayFrom("播放"); + vod.setVodPlayUrl(o.getString("name") + "$" + url); + return Result.string(vod); + } + + @Override + public String playerContent(String flag, String id, List vipFlags) { + return Result.get().url(id).string(); + } + + private String getSize(double size) { + if (size == 0) return ""; + if (size > 1024 * 1024 * 1024 * 1024.0) { + size /= (1024 * 1024 * 1024 * 1024.0); + return String.format(Locale.getDefault(), "%.2f%s", size, "TB"); + } else if (size > 1024 * 1024 * 1024.0) { + size /= (1024 * 1024 * 1024.0); + return String.format(Locale.getDefault(), "%.2f%s", size, "GB"); + } else if (size > 1024 * 1024.0) { + size /= (1024 * 1024.0); + return String.format(Locale.getDefault(), "%.2f%s", size, "MB"); + } else { + size /= 1024.0; + return String.format(Locale.getDefault(), "%.2f%s", size, "KB"); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/Bili.java b/app/src/main/java/com/github/catvod/spider/Bili.java index dba8e9da..7afc7290 100644 --- a/app/src/main/java/com/github/catvod/spider/Bili.java +++ b/app/src/main/java/com/github/catvod/spider/Bili.java @@ -25,7 +25,7 @@ import java.util.Objects; */ public class Bili extends Spider { - private final String url = "https://www.bilibili.com"; + private static final String url = "https://www.bilibili.com"; private HashMap header; private JSONObject ext; diff --git a/app/src/main/java/com/github/catvod/spider/wait/Anime1.java b/app/src/main/java/com/github/catvod/spider/wait/Anime1.java deleted file mode 100644 index 37019eab..00000000 --- a/app/src/main/java/com/github/catvod/spider/wait/Anime1.java +++ /dev/null @@ -1,374 +0,0 @@ -package com.github.catvod.spider.wait; - -import android.text.TextUtils; - -import com.github.catvod.bean.Class; -import com.github.catvod.bean.Result; -import com.github.catvod.bean.Vod; -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.net.OkHttpUtil; - -import org.json.JSONArray; -import org.json.JSONObject; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; -import org.jsoup.select.Elements; - -import java.net.URLDecoder; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * @author 不知名 - */ -public class Anime1 extends Spider { - - private final JSONArray srcArray = new JSONArray(); - private final String vodPic = "https://sta.anicdn.com/playerImg/8.jpg"; - private String authority = ""; - private String cookies = ""; - - private HashMap getHeaders3() { - HashMap headers = new HashMap<>(); - headers.put("Authority", "d1zquzjgwo9yb.cloudfront.net"); - headers.put("Accept", "application/json, text/javascript, */*; q=0.01"); - headers.put("Accept-Encoding", "gzip, deflate, br"); - headers.put("Accept-Language", "zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7,ja;q=0.6"); - headers.put("Origin", "https://anime1.me"); - headers.put("Referer", "https://anime1.me/"); - headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.134 YaBrowser/22.7.1.755 (beta) Yowser/2.5 Safari/537.36"); - headers.put("Sec-Fetch-Dest", "empty"); - headers.put("Sec-Fetch-Mode", "cors"); - headers.put("Sec-Fetch-Site", "cross-site"); - headers.put("sec-ch-ua-mobile", "?0"); - headers.put("sec-ch-ua-platform", "\"Windows\""); - headers.put("sec-ch-ua", " \" Not A;Brand\";v=\"99\", \"Chromium\";v=\"102\" "); - return headers; - } - - private HashMap getHeaders2() { - HashMap headers = new HashMap<>(); - headers.put("Authority", "v.anime1.me"); - headers.put("Accept", "*/*"); - headers.put("Accept-Language", "en,zh-TW;q=0.9,zh;q=0.8"); - headers.put("Origin", "https://anime1.me"); - headers.put("Referer", "https://anime1.me/"); - headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.134 YaBrowser/22.7.1.755 (beta) Yowser/2.5 Safari/537.36"); - headers.put("Sec-Fetch-Dest", "empty"); - headers.put("Sec-Fetch-Mode", "cors"); - headers.put("Sec-Fetch-Site", "same-site"); - headers.put("sec-ch-ua-mobile", "?0"); - headers.put("sec-ch-ua-platform", "\"Windows\""); - headers.put("sec-ch-ua", " \" Not A;Brand\";v=\"99\", \"Chromium\";v=\"102\" "); - return headers; - } - - private HashMap getHeaders1() { - HashMap headers = new HashMap<>(); - headers.put("Accept", "*/*"); - headers.put("Accept-encoding", "identity;q=1, *;q=0"); - headers.put("Accept-language", "en,zh-TW;q=0.9,zh;q=0.8"); - headers.put("Referer", "https://anime1.me"); - headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.134 YaBrowser/22.7.1.755 (beta) Yowser/2.5 Safari/537.36"); - headers.put("Sec-Fetch-Dest", "video"); - headers.put("Sec-Fetch-Mode", "no-cors"); - headers.put("Sec-Fetch-Site", "same-site"); - headers.put("sec-ch-ua-mobile", "?0"); - headers.put("sec-ch-ua-platform", "\"Windows\""); - headers.put("sec-ch-ua", " \" Not A;Brand\";v=\"99\", \"Chromium\";v=\"102\" "); - headers.put("Authority", authority); - headers.put("cookie", cookies); - return headers; - } - - @Override - public String homeContent(boolean filter) { - try { - String srcurl = "https://d1zquzjgwo9yb.cloudfront.net/?_=" + System.currentTimeMillis(); - String srcOrignstr = OkHttpUtil.string(srcurl, getHeaders3()); - JSONArray srcOrign = new JSONArray(srcOrignstr); - int srclen = srcOrign.length(); - for (int i = 0; i < srclen; i++) { - JSONObject subobj = new JSONObject(); - subobj.put("link", srcOrign.getJSONArray(i).get(0).toString()); - subobj.put("name", srcOrign.getJSONArray(i).get(1).toString()); - subobj.put("hit", srcOrign.getJSONArray(i).get(2).toString()); - subobj.put("year", srcOrign.getJSONArray(i).get(3).toString()); - subobj.put("season", srcOrign.getJSONArray(i).get(4).toString()); - subobj.put("team", srcOrign.getJSONArray(i).get(5).toString()); - srcArray.put(subobj); - } - List classes = new ArrayList<>(); - Calendar cal = Calendar.getInstance(); - int year = cal.get(Calendar.YEAR) + 1; - for (int i = 0; i < 8; i++) { - if (i == 0) { - classes.add(new Class(i, "最近更新")); - } else if (i < 7) { - year = year - 1; - classes.add(new Class(i, String.valueOf(year))); - } else { - classes.add(new Class(i, "更早")); - } - } - List list = new ArrayList<>(); - for (int i = 0; i < 10; i++) { - String id = srcArray.getJSONObject(i).getString("link"); - String name = srcArray.getJSONObject(i).getString("name"); - String mark = srcArray.getJSONObject(i).getString("hit"); - list.add(new Vod(id, name, vodPic, mark)); - } - return Result.string(classes, list); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { - try { - JSONArray array = new JSONArray(); - int cateId = Integer.parseInt(tid); - Calendar cal = Calendar.getInstance(); - int doy = cal.get(Calendar.YEAR) + 1; - if (cateId == 0) { - for (int i = 0; i < 100; i++) { - array.put(srcArray.getJSONObject(i)); - } - } else if (cateId > 0 && cateId < 7) { - int yearchk = doy - cateId; - for (int i = 0; i < srcArray.length(); i++) { - JSONObject subobj = srcArray.getJSONObject(i); - String yystr = subobj.getString("year"); - if (yystr.contains("/")) yystr = yystr.substring(5); - int yy = Integer.parseInt(yystr); - if (yy == yearchk) array.put(subobj); - } - } else { - int yy = doy - 6; - for (int i = 0; i < srcArray.length(); i++) { - JSONObject subobj = srcArray.getJSONObject(i); - String yearchk = subobj.getString("year"); - if (yearchk.contains("/")) { - yearchk = yearchk.substring(5); - } - int yearint = Integer.parseInt(yearchk); - if (yearint < yy) array.put(subobj); - } - } - List list = new ArrayList<>(); - for (int i = 0; i < array.length(); i++) { - String id = array.getJSONObject(i).getString("link"); - String name = array.getJSONObject(i).getString("name"); - String mark = array.getJSONObject(i).getString("hit"); - list.add(new Vod(id, name, vodPic, mark)); - } - return Result.string(list); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - @Override - public String detailContent(List ids) { - try { - String id = ids.get(0); - JSONObject dtinfo = new JSONObject(); - for (int i = 0; i < srcArray.length(); i++) { - JSONObject dtobj = srcArray.getJSONObject(i); - String objid = dtobj.getString("link"); - if (objid.equals(id)) dtinfo = dtobj; - } - String title = dtinfo.getString("name"); - String mark = dtinfo.getString("hit"); - String year = dtinfo.getString("year"); - String season = dtinfo.getString("season"); - String team = dtinfo.getString("team"); - - Vod vod = new Vod(); - vod.setVodId(ids.get(0)); - vod.setVodName(title); - vod.setVodPic(vodPic); - vod.setVodYear(year); - vod.setTypeName(season); - vod.setVodArea("日本"); - vod.setVodActor(team); - vod.setVodContent(mark); - - String url = "https://anime1.me/?cat=" + id; - Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders2())); - String nextPage; - Map vod_play_Order = new TreeMap<>(); - do { - Element nextPageEle = doc.selectFirst("div.nav-previous a"); - if (nextPageEle != null) { - nextPage = nextPageEle.attr("href"); - } else { - nextPage = ""; - } - Elements sources = doc.select("article"); - for (int i = 0; i < sources.size(); i++) { - Element source = sources.get(i); - Element sno = source.selectFirst("h2 > a"); - String sourceNameori = ""; - if (sno != null) { - sourceNameori = sno.text().trim(); - } else { - Element sno2 = source.selectFirst("h2"); - if (sno2 != null) { - sourceNameori = sno2.text().trim(); - } else { - sourceNameori = "[No Title]"; - } - } - int st = sourceNameori.indexOf("[") + 1; - int ed = sourceNameori.indexOf("]"); - String sourceName = sourceNameori.substring(st, ed); - Elements playListA = source.select("div.vjscontainer video"); - for (int j = 0; j < playListA.size(); j++) { - String playURL = playListA.get(j).attr("data-apireq"); - if (playURL.isEmpty()) continue; - if (playListA.size() > 1) { - if (j < 9) { - int jj = j + 1; - String nn = sourceName + "0" + jj; - vod_play_Order.put(nn, playURL); - } else { - int jj = j + 1; - String nn = sourceName + jj; - vod_play_Order.put(nn, playURL); - } - continue; - } - String regex = ".*[a-zA-Z\\u4e00-\\u9fa5]+.*"; - Matcher m = Pattern.compile(regex).matcher(sourceName); - if (m.matches()) { - vod_play_Order.put(sourceName, playURL); - } else { - float count = Float.parseFloat(sourceName); - if (count < 100.0) { - String nnn = "0" + sourceName; - vod_play_Order.put(nnn, playURL); - } else { - vod_play_Order.put(sourceName, playURL); - } - } - } - } - if (!nextPage.equals("")) { - doc = Jsoup.parse(OkHttpUtil.string(nextPage, getHeaders2())); - } - } while (!nextPage.equals("")); - String playList = ""; - List vodItems = new ArrayList<>(); - Set> entrySet = vod_play_Order.entrySet(); - for (Map.Entry entry : entrySet) { - String key = entry.getKey(); - String value = entry.getValue(); - String pl = key + "$" + value; - vodItems.add(pl); - } - if (vodItems.size() > 0) playList = TextUtils.join("#", vodItems); - if (playList.length() == 0) playList = "nothing here"; - Map vod_play = new TreeMap<>(); - vod_play.put("Anime1", playList); - vod.setVodPlayFrom(TextUtils.join("$$$", vod_play.keySet())); - vod.setVodPlayUrl(TextUtils.join("$$$", vod_play.values())); - return Result.string(vod); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - @Override - public String playerContent(String flag, String id, List vipFlags) { - try { - authority = ""; - String url = "https://v.anime1.me/api"; - String jsonreq = URLDecoder.decode(id, "UTF-8"); - HashMap reqpayload = new HashMap<>(); - reqpayload.put("d", jsonreq); - Map> respHeaderMap = new HashMap<>(); - String response = OkHttpUtil.string(url, reqpayload, getHeaders2(), respHeaderMap); - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < 3; i++) sb.append(respHeaderMap.get("set-cookie").get(i).split(";")[0]).append(";"); - cookies = sb.toString(); - return Result.get().url(getVideoUrl(response)).header(getHeaders1()).toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - private String getVideoUrl(String response) throws Exception { - JSONObject obj = new JSONObject(response); - JSONArray array = obj.getJSONArray("s"); - String m3u8url = ""; - String mp4url = ""; - for (int i = 0; i < array.length(); i++) { - JSONObject obj2 = array.getJSONObject(i); - String m3u8chk = obj2.getString("src"); - if (m3u8chk.contains("m3u8")) { - m3u8url = m3u8chk; - } else { - mp4url = m3u8chk; - } - } - String videoUrl; - if (m3u8url.length() > 0) { - authority = m3u8url.split("/")[2]; - videoUrl = "https:" + m3u8url; - String docm3u8 = OkHttpUtil.string(videoUrl, getHeaders1()); - if (docm3u8.contains("1080p.m3u8")) { - videoUrl = videoUrl.replace("playlist", "1080p"); - } else if (docm3u8.contains("720p.m3u8")) { - videoUrl = videoUrl.replace("playlist", "720p"); - } else { - authority = mp4url.split("/")[2]; - videoUrl = "https:" + mp4url; - } - } else { - authority = mp4url.split("/")[2]; - videoUrl = "https:" + mp4url; - } - return videoUrl; - } - - @Override - public String searchContent(String key, boolean quick) { - try { - JSONArray searchResult = new JSONArray(); - for (int i = 0; i < srcArray.length(); i++) { - JSONObject srobj = srcArray.getJSONObject(i); - String kw = srobj.getString("name"); - if (kw.contains(key)) searchResult.put(srobj); - } - List list = new ArrayList<>(); - if (searchResult.length() > 0) { - int ch = Math.min(searchResult.length(), 10); - for (int i = 0; i < ch; i++) { - String id = searchResult.getJSONObject(i).getString("link"); - String name = searchResult.getJSONObject(i).getString("name"); - String mark = searchResult.getJSONObject(i).getString("hit"); - list.add(new Vod(id, name, vodPic, mark)); - } - } - return Result.string(list); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } -} diff --git a/app/src/main/java/com/github/catvod/spider/wait/Tangrenjie.java b/app/src/main/java/com/github/catvod/spider/wait/Tangrenjie.java deleted file mode 100644 index 3df6ab31..00000000 --- a/app/src/main/java/com/github/catvod/spider/wait/Tangrenjie.java +++ /dev/null @@ -1,329 +0,0 @@ -package com.github.catvod.spider.wait; - -import android.content.Context; -import android.text.TextUtils; -import android.util.Base64; - -import com.github.catvod.bean.Class; -import com.github.catvod.bean.Result; -import com.github.catvod.bean.Vod; -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.net.OkHttpUtil; - -import org.json.JSONException; -import org.json.JSONObject; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; -import org.jsoup.select.Elements; - -import java.net.URLDecoder; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * @author 不知名 - */ -public class Tangrenjie extends Spider { - - private static final String siteUrl = "https://www.tangrenjie.tv"; - private final Pattern regexCategory = Pattern.compile("/vod/type/id/(\\d+).html"); - private final Pattern regexVid = Pattern.compile("/vod/detail/id/(\\d+).html"); - private final Pattern regexPlay = Pattern.compile("/vod/play/id/(\\d+)/sid/(\\d+)/nid/(\\d+).html"); - private JSONObject playerConfig; - private JSONObject filterConfig; - - @Override - public void init(Context context) { - super.init(context); - try { - playerConfig = new JSONObject("{\"if101\":{\"show\":\"蓝光一\",\"des\":\"\",\"ps\":\"0\",\"parse\":\"\",\"or\":999}}"); - filterConfig = new JSONObject("{\"1\":[{\"key\":\"cateId\",\"name\":\"分类\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"动作片\",\"v\":\"6\"},{\"n\":\"喜剧片\",\"v\":\"7\"},{\"n\":\"爱情片\",\"v\":\"8\"},{\"n\":\"科幻片\",\"v\":\"9\"},{\"n\":\"恐怖片\",\"v\":\"10\"},{\"n\":\"剧情片\",\"v\":\"11\"},{\"n\":\"战争片\",\"v\":\"12\"}]},{\"key\":\"area\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"大陆\",\"v\":\"大陆\"},{\"n\":\"香港\",\"v\":\"香港\"},{\"n\":\"台湾\",\"v\":\"台湾\"},{\"n\":\"美国\",\"v\":\"美国\"},{\"n\":\"法国\",\"v\":\"法国\"},{\"n\":\"英国\",\"v\":\"英国\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"韩国\",\"v\":\"韩国\"},{\"n\":\"德国\",\"v\":\"德国\"},{\"n\":\"泰国\",\"v\":\"泰国\"},{\"n\":\"印度\",\"v\":\"印度\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"year\",\"name\":\"年份\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"2022\",\"v\":\"2022\"},{\"n\":\"2021\",\"v\":\"2021\"},{\"n\":\"2020\",\"v\":\"2020\"},{\"n\":\"2019\",\"v\":\"2019\"},{\"n\":\"2018\",\"v\":\"2018\"},{\"n\":\"2017\",\"v\":\"2017\"},{\"n\":\"2016\",\"v\":\"2016\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2000\",\"v\":\"2000\"},{\"n\":\"1997\",\"v\":\"1997\"},{\"n\":\"1980\",\"v\":\"1980\"}]},{\"key\":\"by\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"2\":[{\"key\":\"cateId\",\"name\":\"分类\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"国产剧\",\"v\":\"13\"},{\"n\":\"港台剧\",\"v\":\"14\"},{\"n\":\"日韩剧\",\"v\":\"15\"},{\"n\":\"欧美剧\",\"v\":\"16\"},{\"n\":\"海外剧\",\"v\":\"27\"}]},{\"key\":\"area\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"大陆\",\"v\":\"大陆\"},{\"n\":\"香港\",\"v\":\"香港\"},{\"n\":\"台湾\",\"v\":\"台湾\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"欧美\",\"v\":\"欧美\"},{\"n\":\"韩国\",\"v\":\"韩国\"}]},{\"key\":\"year\",\"name\":\"年份\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"2022\",\"v\":\"2022\"},{\"n\":\"2021\",\"v\":\"2021\"},{\"n\":\"2020\",\"v\":\"2020\"},{\"n\":\"2019\",\"v\":\"2019\"},{\"n\":\"2018\",\"v\":\"2018\"},{\"n\":\"2017\",\"v\":\"2017\"},{\"n\":\"2016\",\"v\":\"2016\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2000\",\"v\":\"2000\"},{\"n\":\"1997\",\"v\":\"1997\"},{\"n\":\"1980\",\"v\":\"1980\"}]},{\"key\":\"by\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"4\":[{\"key\":\"area\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"大陆\",\"v\":\"大陆\"},{\"n\":\"香港\",\"v\":\"香港\"},{\"n\":\"台湾\",\"v\":\"台湾\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"欧美\",\"v\":\"欧美\"},{\"n\":\"韩国\",\"v\":\"韩国\"}]},{\"key\":\"year\",\"name\":\"年份\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"2022\",\"v\":\"2022\"},{\"n\":\"2021\",\"v\":\"2021\"},{\"n\":\"2020\",\"v\":\"2020\"},{\"n\":\"2019\",\"v\":\"2019\"},{\"n\":\"2018\",\"v\":\"2018\"},{\"n\":\"2017\",\"v\":\"2017\"},{\"n\":\"2016\",\"v\":\"2016\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2000\",\"v\":\"2000\"},{\"n\":\"1997\",\"v\":\"1997\"},{\"n\":\"1980\",\"v\":\"1980\"}]},{\"key\":\"by\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"3\":[{\"key\":\"cateId\",\"name\":\"分类\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"纪录片\",\"v\":\"28\"}]},{\"key\":\"area\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"大陆\",\"v\":\"大陆\"},{\"n\":\"香港\",\"v\":\"香港\"},{\"n\":\"台湾\",\"v\":\"台湾\"},{\"n\":\"美国\",\"v\":\"美国\"},{\"n\":\"法国\",\"v\":\"法国\"},{\"n\":\"英国\",\"v\":\"英国\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"韩国\",\"v\":\"韩国\"},{\"n\":\"德国\",\"v\":\"德国\"},{\"n\":\"泰国\",\"v\":\"泰国\"},{\"n\":\"印度\",\"v\":\"印度\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"year\",\"name\":\"年份\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"2022\",\"v\":\"2022\"},{\"n\":\"2021\",\"v\":\"2021\"},{\"n\":\"2020\",\"v\":\"2020\"},{\"n\":\"2019\",\"v\":\"2019\"},{\"n\":\"2018\",\"v\":\"2018\"},{\"n\":\"2017\",\"v\":\"2017\"},{\"n\":\"2016\",\"v\":\"2016\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2000\",\"v\":\"2000\"},{\"n\":\"1997\",\"v\":\"1997\"},{\"n\":\"1980\",\"v\":\"1980\"}]},{\"key\":\"by\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}]}"); - } catch (JSONException e) { - SpiderDebug.log(e); - } - } - - private HashMap getHeaders() { - HashMap headers = new HashMap<>(); - headers.put("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"); - headers.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); - headers.put("Accept-Language", "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2"); - return headers; - } - - @Override - public String homeContent(boolean filter) { - Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl, getHeaders())); - Elements elements = doc.select("ul.top_nav li a"); - List classes = new ArrayList<>(); - for (Element ele : elements) { - Elements b = ele.select("b"); - String name = b.text(); - boolean show = name.equals("电影") || name.equals("电视剧") || name.equals("动漫") || name.equals("综艺"); - if (show) { - Matcher mather = regexCategory.matcher(ele.attr("href")); - if (!mather.find()) continue; - String id = mather.group(1).trim(); - classes.add(new Class(id, name)); - } - } - Element homeList = doc.select("div.cbox1").get(1); - elements = homeList.select("ul.vodlist li.vodlist_item"); - List list = new ArrayList<>(); - for (int i = 0; i < elements.size(); i++) { - Element vod = elements.get(i); - String title = vod.selectFirst("a.vodlist_thumb").attr("title"); - String cover = siteUrl + vod.selectFirst("a.vodlist_thumb").attr("data-original"); - String remark = vod.select("span.pic_text b").text(); - Matcher matcher = regexVid.matcher(vod.selectFirst("a.vodlist_thumb").attr("href")); - if (!matcher.find()) continue; - String id = "1=" + matcher.group(1); - list.add(new Vod(id, title, cover, remark)); - } - return Result.string(classes, list, filterConfig); - } - - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { - StringBuilder url = new StringBuilder(siteUrl + "/vod/show/id/"); - if (extend != null && extend.size() > 0 && extend.containsKey("tid") && extend.get("tid").length() > 0) { - url.append(extend.get("tid")); - } else { - url.append(tid); - } - if (extend != null && extend.size() > 0) { - for (String key : extend.keySet()) { - String value = extend.get(key); - if (TextUtils.isEmpty(value)) continue; - url.append("/").append(key).append("/").append(URLEncoder.encode(value)); - } - } - url.append("/page/").append(pg).append(".html"); - String html = OkHttpUtil.string(url.toString(), getHeaders()); - Document doc = Jsoup.parse(html); - List list = new ArrayList<>(); - if (!html.contains("没有找到您想要的结果哦")) { - Elements elements = doc.select("ul.vodlist li.vodlist_item"); - for (int i = 0; i < elements.size(); i++) { - Element vod = elements.get(i); - String title = vod.selectFirst("a.vodlist_thumb").attr("title"); - String cover = siteUrl + vod.selectFirst("a.vodlist_thumb").attr("data-original"); - String remark = vod.select("span.pic_text b").text(); - Matcher matcher = regexVid.matcher(vod.selectFirst("a.vodlist_thumb").attr("href")); - if (!matcher.find()) continue; - String id = tid + "=" + matcher.group(1); - list.add(new Vod(id, title, cover, remark)); - } - } - return Result.string(list); - } - - @Override - public String detailContent(List ids) { - String[] idd = ids.get(0).split("="); - String tid = idd[0]; - String detail = idd[1]; - String url = siteUrl + "/vod/detail/id/" + detail + ".html"; - String htmltemp = OkHttpUtil.string(url, getHeaders()); - String htmlsrc = ""; - if (tid.equals("1")) { - htmlsrc = htmltemp.substring(0, 25000); - } else { - htmlsrc = htmltemp; - } - Document doc = Jsoup.parse(htmlsrc); - String vid = doc.selectFirst("div.content_thumb a").attr("href"); - String cover = siteUrl + doc.selectFirst("div.content_thumb a").attr("data-original"); - String title = doc.selectFirst("div.content_thumb a").attr("title"); - String desc = doc.selectFirst("div.content > section > font").text(); - String category = "", area = "", year = "", director = "", actor = "", remark = ""; - remark = doc.select("span.data_style b").text(); - Elements span_text_muted = doc.select("li.data span"); - for (int i = 0; i < span_text_muted.size() - 2; i++) { - Element text = span_text_muted.get(i); - String info = text.text(); - if (info.contains("类型")) { - try { - String cate = text.parent().text(); - category = cate.substring(3); - } catch (Exception e) { - category = ""; - } - } else if (info.contains("年份")) { - try { - year = text.parent().select("a").get(0).text(); - } catch (Exception e) { - year = ""; - } - } else if (info.contains("地区")) { - try { - area = text.parent().select("a").get(0).text(); - } catch (Exception e) { - area = ""; - } - } - } - List actors = new ArrayList<>(); - Elements aa = doc.select("li.data").get(0).select("a"); - for (int j = 0; j < aa.size(); j++) actors.add(aa.get(j).text()); - actor = TextUtils.join(",", actors); - List directors = new ArrayList<>(); - Elements bb = doc.select("li.data").get(1).select("a"); - for (int j = 0; j < bb.size(); j++) directors.add(bb.get(j).text()); - director = TextUtils.join(",", directors); - - Vod vod = new Vod(); - vod.setVodId(vid); - vod.setVodName(title); - vod.setVodPic(cover); - vod.setTypeName(category); - vod.setVodYear(year); - vod.setVodArea(area); - vod.setVodRemarks(remark); - vod.setVodActor(actor); - vod.setVodDirector(director); - vod.setVodContent(desc); - - Map vod_play = new TreeMap<>((o1, o2) -> { - try { - int sort1 = playerConfig.getJSONObject(o1).getInt("or"); - int sort2 = playerConfig.getJSONObject(o2).getInt("or"); - if (sort1 == sort2) return 1; - return sort1 - sort2 > 0 ? 1 : -1; - } catch (JSONException e) { - SpiderDebug.log(e); - } - return 0; - }); - - Elements sources = doc.select("div.play_source_tab a"); - Elements sourceList = doc.select("div.playlist_full"); - for (int i = 0; i < sources.size(); i++) { - Element source = sources.get(i); - String sourceName = source.attr("alt"); - sourceName = sourceName.replaceAll("[^\u4E00-\u9FA5]", ""); - boolean found = false; - for (Iterator it = playerConfig.keys(); it.hasNext(); ) { - try { - String flag = it.next(); - if (playerConfig.getJSONObject(flag).getString("show").equals(sourceName)) { - sourceName = flag; - found = true; - break; - } - } catch (Exception ignored) { - } - } - if (!found) continue; - String playList = ""; - Elements playListA = sourceList.get(i).select("ul>li>a"); - List vodItems = new ArrayList<>(); - for (int j = 0; j < playListA.size(); j++) { - Element element = playListA.get(j); - Matcher matcher = regexPlay.matcher(element.attr("href")); - if (!matcher.find()) continue; - String playURL = matcher.group(1) + "/sid/" + matcher.group(2) + "/nid/" + matcher.group(3); - vodItems.add(element.text() + "$" + playURL + "=" + tid); - } - if (vodItems.size() > 0) playList = TextUtils.join("#", vodItems); - if (playList.length() == 0) continue; - vod_play.put(sourceName, playList); - } - if (vod_play.size() > 0) { - vod.setVodPlayFrom(TextUtils.join("$$$", vod_play.keySet())); - vod.setVodPlayUrl(TextUtils.join("$$$", vod_play.values())); - } - return Result.string(vod); - } - - @Override - public String playerContent(String flag, String id, List vipFlags) { - try { - String[] idd = id.split("="); - String tid = idd[1]; - String detail = idd[0]; - String url = siteUrl + "/vod/play/id/" + detail + ".html"; - String htmltemp = OkHttpUtil.string(url, getHeaders()); - String htmlsrc = ""; - if (tid.equals("1")) { - htmlsrc = htmltemp.substring(0, 25000); - } else { - htmlsrc = htmltemp; - } - Document doc = Jsoup.parse(htmlsrc); - Elements allScript = doc.select("script"); - JSONObject result = new JSONObject(); - for (int i = 0; i < allScript.size(); i++) { - String scContent = allScript.get(i).toString(); - if (scContent.contains("var player_")) { // 取直链 - int start = scContent.indexOf('{'); - int end = scContent.lastIndexOf('}') + 1; - String json = scContent.substring(start, end); - JSONObject player = new JSONObject(json); - String urlsrc = player.getString("url"); - String urlb64 = new String(Base64.decode(urlsrc.getBytes(), Base64.DEFAULT)); - String urldec = URLDecoder.decode(urlb64, "UTF-8"); - result.put("parse", 0); - result.put("playUrl", ""); - result.put("url", urldec); - result.put("header", ""); - break; - } - } - String uu = result.getString("url"); - if (!(uu.length() > 0)) { - result.put("parse", 1); - result.put("url", url); - } - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - @Override - public String searchContent(String key, boolean quick) { - String url = siteUrl + "/vod/search.html?wd=" + URLEncoder.encode(key) + "&submit="; - String html = OkHttpUtil.string(url, getHeaders()); - Document doc = Jsoup.parse(html); - List list = new ArrayList<>(); - Elements elements = doc.select("li.searchlist_item"); - for (int i = 0; i < elements.size(); i++) { - Element vod = elements.get(i); - String classes = vod.selectFirst("h4.vodlist_title > a >span").text(); - String tid = ""; - switch (classes) { - case "电影": - tid = "1"; - break; - case "电视剧": - tid = "2"; - break; - case "综艺": - tid = "3"; - break; - case "动漫": - tid = "4"; - break; - } - String title = vod.selectFirst("a.vodlist_thumb").attr("title"); - String cover = siteUrl + vod.selectFirst("a.vodlist_thumb").attr("data-original"); - String remark = vod.select("span.pic_text").text(); - Matcher matcher = regexVid.matcher(vod.selectFirst("a.vodlist_thumb").attr("href")); - if (!matcher.find()) continue; - String id = tid + "=" + matcher.group(1); - list.add(new Vod(id, title, cover, remark)); - } - return Result.string(list); - } -} diff --git a/app/src/main/java/com/github/catvod/spider/wait/Yj1211.java b/app/src/main/java/com/github/catvod/spider/wait/Yj1211.java deleted file mode 100644 index 8f855b87..00000000 --- a/app/src/main/java/com/github/catvod/spider/wait/Yj1211.java +++ /dev/null @@ -1,375 +0,0 @@ -package com.github.catvod.spider.wait; - -import android.text.TextUtils; - -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.net.OkHttpUtil; - -import org.json.JSONArray; -import org.json.JSONObject; - -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -/** - * @author 不知名 - */ -public class Yj1211 extends Spider { - - @Override - public String homeContent(boolean filter) { - try { - String srcurl = "http://live.yj1211.work/api/live/getRecommend?page=1&size=20"; - String srcOrignstr = ""; - for (int i = 0; i < 3; i++) { - srcOrignstr = OkHttpUtil.string(srcurl, getHeaders()); - if (srcOrignstr.length() > 0) { - break; - } else { - Thread.sleep(1000); - } - } - JSONObject srcori = new JSONObject(srcOrignstr); - JSONArray srcoria = srcori.getJSONArray("data"); - JSONObject result = new JSONObject(); - JSONArray classes = new JSONArray(); - String catestr = "{\"推荐\":\"?\",\"斗鱼\":\"ByPlatform?platform=douyu&\",\"哔哩哔哩\":\"ByPlatform?platform=bilibili&\",\"虎牙\":\"ByPlatform?platform=huya&\",\"网易CC\":\"ByPlatform?platform=cc&\"}"; - JSONObject catedef = new JSONObject(catestr); - Iterator it = catedef.keys(); - while (it.hasNext()) { - JSONObject jsonObject = new JSONObject(); - String key = (String) it.next(); - jsonObject.put("type_name", key); - jsonObject.put("type_id", catedef.getString(key)); - classes.put(jsonObject); - } - result.put("class", classes); - JSONObject filterConfig = new JSONObject(); - String geta = "http://live.yj1211.work/api/live/getAllAreas"; - String aaid = ""; - for (int i = 0; i < 3; i++) { - aaid = OkHttpUtil.string(geta, getHeaders()); - if (aaid.length() > 0) { - break; - } else { - Thread.sleep(1000); - } - } - JSONObject aido = new JSONObject(aaid); - JSONArray aidoa = aido.getJSONArray("data"); - JSONArray extendsAll = new JSONArray(); - for (int j = 0; j < 13; j++) { - JSONObject newTypeExtend = new JSONObject(); - String typeName = aidoa.getJSONArray(j).getJSONObject(0).getString("typeName"); - newTypeExtend.put("key", "typeName" + j); - newTypeExtend.put("name", typeName); - JSONArray newTypeExtendKV = new JSONArray(); - int fg = Math.min(aidoa.getJSONArray(j).length(), 20); - JSONObject kv = new JSONObject(); - kv.put("n", "全部"); - kv.put("v", typeName + "=" + "all"); - newTypeExtendKV.put(kv); - for (int k = 0; k < fg; k++) { - kv = new JSONObject(); - String areaName = aidoa.getJSONArray(j).getJSONObject(k).getString("areaName"); - kv.put("n", areaName); - kv.put("v", typeName + "=" + areaName); - newTypeExtendKV.put(kv); - } - newTypeExtend.put("value", newTypeExtendKV); - extendsAll.put(newTypeExtend); - } - for (int i = 0; i < 5; i++) { - String typeId = classes.getJSONObject(i).getString("type_id"); - filterConfig.put(typeId, extendsAll); - } - JSONArray videos = new JSONArray(); - int ch = Math.min(srcoria.length(), 10); - for (int i = 0; i < ch; i++) { - JSONObject srchome = new JSONObject(); - String platForm = srcoria.getJSONObject(i).getString("platForm"); - String rd = srcoria.getJSONObject(i).getString("roomId"); - String id = platForm + "&" + rd; - String name = srcoria.getJSONObject(i).getString("ownerName"); - String pic = srcoria.getJSONObject(i).getString("ownerHeadPic"); - String mark = srcoria.getJSONObject(i).getString("categoryName"); - srchome.put("vod_id", id); - srchome.put("vod_name", name); - srchome.put("vod_pic", pic); - srchome.put("vod_remarks", mark); - videos.put(srchome); - } - if (filter) { - result.put("filters", filterConfig); - } - result.put("list", videos); - return result.toString(); - } catch ( - Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { - try { - String catt = ""; - switch (tid) { - case "?": - catt = "all"; - break; - case "ByPlatform?platform=douyu&": - catt = "douyu"; - break; - case "ByPlatform?platform=bilibili&": - catt = "bilibili"; - break; - case "ByPlatform?platform=huya&": - catt = "huya"; - break; - case "ByPlatform?platform=cc&": - catt = "cc"; - break; - } - extend = extend == null ? new HashMap<>() : extend; - String srcurl = ""; - String[] cate = new String[13]; - int pp = 0; - for (int i = 0; i < 13; i++) { - cate[i] = extend.containsKey("typeName" + i) ? extend.get("typeName" + i) : ("typeName" + i + "=" + "all"); - String[] info = cate[i].split("="); - String area = info[1]; - if (!area.contains("all")) { - pp = pp + 1; - } - } - if (pp == 1) { - for (int i = 0; i < 13; i++) { - String[] info = cate[i].split("="); - String areaType = info[0]; - String area = info[1]; - if (!area.contains("all")) { - String urlft = "http://live.yj1211.work/api/live/getRecommendByAreaAll?areaType={areaType}&area={area}&page={pg}"; - srcurl = urlft.replace("{areaType}", URLEncoder.encode(areaType)).replace("{area}", URLEncoder.encode(area)).replace("{pg}", pg); - break; - } - } - } else if (pp == 0 || pp > 1) { - String urlft = "http://live.yj1211.work/api/live/getRecommend{tid}page={pg}&size=20"; - srcurl = urlft.replace("{tid}", tid).replace("{pg}", pg); - } - String srcOrignstr = ""; - for (int i = 0; i < 3; i++) { - srcOrignstr = OkHttpUtil.string(srcurl, getHeaders()); - if (srcOrignstr.length() > 0) { - break; - } else { - Thread.sleep(1000); - } - } - JSONObject srcori = new JSONObject(srcOrignstr); - JSONArray srcoria = srcori.getJSONArray("data"); - JSONObject result = new JSONObject(); - JSONArray videos = new JSONArray(); - for (int i = 0; i < srcoria.length(); i++) { - JSONObject srchome = new JSONObject(); - String platForm = srcoria.getJSONObject(i).getString("platForm"); - if (pp == 1 && !catt.equals("all")) { - if (!platForm.equals(catt)) { - continue; - } - } - String rd = srcoria.getJSONObject(i).getString("roomId"); - String id = platForm + "&" + rd; - String name = srcoria.getJSONObject(i).getString("ownerName"); - String pic = srcoria.getJSONObject(i).getString("ownerHeadPic"); - String mark = srcoria.getJSONObject(i).getString("categoryName"); - srchome.put("vod_id", id); - srchome.put("vod_name", name); - srchome.put("vod_pic", pic); - srchome.put("vod_remarks", mark); - videos.put(srchome); - } - if (videos.length() == 0) { - JSONObject srchome = new JSONObject(); - srchome.put("vod_id", 111); - srchome.put("vod_name", "此页无符合"); - srchome.put("vod_pic", ""); - srchome.put("vod_remarks", "nothing"); - videos.put(srchome); - } - if (pp == 1) { - result.put("pagecount", 50); - result.put("limit", 1); - } else { - result.put("pagecount", Integer.MAX_VALUE); - result.put("limit", 90); - } - result.put("list", videos); - result.put("page", pg); - result.put("total", Integer.MAX_VALUE); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - private HashMap getHeaders() { - HashMap headers = new HashMap<>(); - headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.134 YaBrowser/22.7.1.755 (beta) Yowser/2.5 Safari/537.36"); - return headers; - } - - @Override - public String detailContent(List ids) { - try { - String id = ids.get(0); - String[] info = id.split("&"); - String platform = info[0]; - String roomId = info[1]; - String srcurl = "http://live.yj1211.work/api/live/getRoomInfo?platform=" + platform + "&roomId=" + roomId; - String srcplayurl = "http://live.yj1211.work/api/live/getRealUrl?platform=" + platform + "&roomId=" + roomId; - String srcdtlstr = OkHttpUtil.string(srcurl, getHeaders()); - String srcdtlplay = OkHttpUtil.string(srcplayurl, getHeaders()); - JSONObject srcdtl = new JSONObject(srcdtlstr); - JSONObject srcdtlo = srcdtl.getJSONObject("data"); - JSONObject srcdtplay = new JSONObject(srcdtlplay); - JSONObject srcdtplayo = srcdtplay.getJSONObject("data"); - String title = srcdtlo.getString("roomName"); - String pic = srcdtlo.getString("roomPic"); - String director = srcdtlo.getString("ownerName") + " RoomID:" + srcdtlo.getString("roomId"); - String content = srcdtlo.getString("categoryName"); - String actor = "观看人数:" + srcdtlo.getString("online"); - String area = srcdtlo.getString("platForm"); - String typechk = srcdtlo.optString("isLive"); - String type = typechk.equals("") ? "录播" : "正在直播中"; - JSONObject result = new JSONObject(); - JSONObject vodList = new JSONObject(); - vodList.put("vod_id", ids.get(0)); - vodList.put("vod_pic", pic); - vodList.put("vod_name", title); - vodList.put("vod_area", area); - vodList.put("type_name", type); - vodList.put("vod_actor", actor); - vodList.put("vod_director", director); - vodList.put("vod_content", content); - String playList = ""; - String pl = ""; - List vodItems = new ArrayList<>(); - for (int i = 0; i < 5; i++) { - String[] qq = new String[]{"OD", "HD", "SD", "LD", "FD"}; - String qa = srcdtplayo.optString(qq[i]); - if (qa.isEmpty()) { - continue; - } - switch (qq[i]) { - case "OD": - pl = "原画" + "$" + qa; - break; - case "HD": - pl = "超清" + "$" + qa; - break; - case "SD": - pl = "高清" + "$" + qa; - break; - case "LD": - pl = "清晣" + "$" + qa; - break; - case "FD": - pl = "流畅" + "$" + qa; - break; - } - vodItems.add(pl); - } - if (vodItems.size() > 0) - playList = TextUtils.join("#", vodItems); - - if (playList.length() == 0) - playList = "NoStream$nolink"; - - Map vod_play = new TreeMap<>(); - vod_play.put("YJ1211", playList); - String vod_play_from = TextUtils.join("$$$", vod_play.keySet()); - String vod_play_url = TextUtils.join("$$$", vod_play.values()); - vodList.put("vod_play_from", vod_play_from); - vodList.put("vod_play_url", vod_play_url); - - JSONArray list = new JSONArray(); - list.put(vodList); - result.put("list", list); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - @Override - public String playerContent(String flag, String id, List vipFlags) { - try { - JSONObject result = new JSONObject(); - result.put("header", getHeaders()); - result.put("parse", 1); - result.put("playUrl", ""); - result.put("url", id); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - @Override - public String searchContent(String key, boolean quick) { - try { - String url = "http://live.yj1211.work/api/live/search?platform=all&keyWords=" + URLEncoder.encode(key) + "&isLive=0"; - String content = ""; - for (int i = 0; i < 3; i++) { - content = OkHttpUtil.string(url, getHeaders()); - if (content.length() > 0) { - break; - } else { - Thread.sleep(1000); - } - } - JSONObject searchResult = new JSONObject(content); - JSONArray sra = searchResult.getJSONArray("data"); - JSONObject result = new JSONObject(); - JSONArray videos = new JSONArray(); - if (sra.length() > 0) { - int ch = Math.min(sra.length(), 20); - for (int i = 0; i < ch; i++) { - JSONObject srat = new JSONObject(); - String platForm = sra.getJSONObject(i).getString("platform"); - String rd = sra.getJSONObject(i).getString("roomId"); - String id = platForm + "&" + rd; - String name = sra.getJSONObject(i).getString("nickName"); - String pic = sra.getJSONObject(i).getString("headPic"); - String mark = ""; - if (!sra.getJSONObject(i).isNull("cateName")) { - mark = sra.getJSONObject(i).getString("cateName"); - } - srat.put("vod_remarks", mark); - srat.put("vod_id", id); - srat.put("vod_name", name); - srat.put("vod_pic", pic); - - videos.put(srat); - } - } - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } -} diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 684afbd4..1467d356 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 abcdf1ba..dc623cc9 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -8099b863f81113740c24c05d7feb3851 +83309fc06ded7cbe68738abebbbca4fe