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 90e643cc..b49aaa3a 100644 --- a/app/src/main/java/com/github/catvod/bean/Class.java +++ b/app/src/main/java/com/github/catvod/bean/Class.java @@ -9,6 +9,10 @@ public class Class { @SerializedName("type_name") private String typeName; + public Class(int typeId, String typeName) { + this(String.valueOf(typeId), typeName); + } + public Class(String typeId, String typeName) { this.typeId = typeId; this.typeName = typeName; diff --git a/app/src/main/java/com/github/catvod/spider/Anime1.java b/app/src/main/java/com/github/catvod/spider/Anime1.java index dac67103..7e0ee075 100644 --- a/app/src/main/java/com/github/catvod/spider/Anime1.java +++ b/app/src/main/java/com/github/catvod/spider/Anime1.java @@ -2,10 +2,14 @@ package com.github.catvod.spider; 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.OKCallBack; import com.github.catvod.net.OkHttpUtil; +import com.google.gson.Gson; import org.json.JSONArray; import org.json.JSONObject; @@ -16,6 +20,7 @@ import org.jsoup.select.Elements; import java.net.URLDecoder; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.HashMap; import java.util.List; @@ -33,299 +38,10 @@ import okhttp3.Response; */ public class Anime1 extends Spider { - private String cookies = ""; - private String authority = ""; private final JSONArray srcArray = new JSONArray(); - - @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); - } - JSONObject result = new JSONObject(); - JSONArray classes = new JSONArray(); - Calendar cal = Calendar.getInstance(); - int doy = cal.get(Calendar.YEAR) + 1; - for (int i = 0; i < 8; i++) { - JSONObject cateobj = new JSONObject(); - String istr = Integer.toString(i); - if (i == 0) { - cateobj.put("type_name", "最近更新"); - cateobj.put("type_id", istr); - } else if (i < 7) { - doy = doy - 1; - String year = Integer.toString(doy); - cateobj.put("type_name", year); - cateobj.put("type_id", istr); - } else { - cateobj.put("type_name", "更早"); - cateobj.put("type_id", istr); - } - classes.put(cateobj); - } - result.put("class", classes); - JSONArray videos = new JSONArray(); - for (int i = 0; i < 10; i++) { - JSONObject v = new JSONObject(); - String id = srcArray.getJSONObject(i).getString("link"); - String name = srcArray.getJSONObject(i).getString("name"); - String mark = srcArray.getJSONObject(i).getString("hit"); - v.put("vod_id", id); - v.put("vod_name", name); - v.put("vod_pic", "https://sta.anicdn.com/playerImg/8.jpg"); - v.put("vod_remarks", mark); - videos.put(v); - } - 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 { - JSONArray srccate = new JSONArray(); - int cateId = Integer.parseInt(tid); - int srclen = srcArray.length(); - Calendar cal = Calendar.getInstance(); - int doy = cal.get(Calendar.YEAR) + 1; - if (cateId == 0) { - for (int i = 0; i < 100; i++) { - JSONObject subobj = srcArray.getJSONObject(i); - srccate.put(subobj); - } - } else if (cateId > 0 && cateId < 7) { - int yearchk = doy - cateId; - for (int i = 0; i < srclen; 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) { - srccate.put(subobj); - } - } - } else { - int yy = doy - 6; - for (int i = 0; i < srclen; 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) { - srccate.put(subobj); - } - } - } - JSONArray videos = new JSONArray(); - for (int i = 0; i < srccate.length(); i++) { - JSONObject v = new JSONObject(); - String id = srccate.getJSONObject(i).getString("link"); - String name = srccate.getJSONObject(i).getString("name"); - String mark = srccate.getJSONObject(i).getString("hit"); - v.put("vod_id", id); - v.put("vod_name", name); - v.put("vod_pic", "https://sta.anicdn.com/playerImg/8.jpg"); - v.put("vod_remarks", mark); - videos.put(v); - } - JSONObject result = new JSONObject(); - result.put("list", videos); - return result.toString(); - } 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"); - JSONObject result = new JSONObject(); - JSONObject vodList = new JSONObject(); - vodList.put("vod_id", ids.get(0)); - vodList.put("vod_name", title); - vodList.put("vod_pic", "https://sta.anicdn.com/playerImg/8.jpg"); - vodList.put("vod_year", year); - vodList.put("type_name", season); - vodList.put("vod_area", "日本"); - vodList.put("vod_actor", team); - vodList.put("vod_content", 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++) { - Element vod = playListA.get(j); - String playURL = vod.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); - 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 { - cookies = ""; - authority = ""; - String url = "https://v.anime1.me/api"; - JSONObject result = new JSONObject(); - String jsonreq = URLDecoder.decode(id, "UTF-8"); - HashMap reqpayload = new HashMap<>(); - reqpayload.put("d", jsonreq); - OkHttpUtil.post(url, reqpayload, getHeaders2(), new OKCallBack() { - @Override - protected String onParseResponse(Call call, Response response) { - try { - Map> respHeader = new HashMap<>(response.headers().toMultimap()); - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < 3; i++) sb.append(respHeader.get("set-cookie").get(i).split(";")[0]).append(";"); - cookies = sb.toString(); - return response.body().string(); - } catch (Exception e) { - return ""; - } - } - - @Override - protected void onResponse(String response) { - try { - JSONObject obj = new JSONObject(response); - JSONArray objarray = obj.getJSONArray("s"); - JSONObject obj2 = objarray.getJSONObject(0); - String videolink = obj2.getString("src"); - authority = videolink.split("/")[2]; - videolink = "https:" + videolink; - result.put("url", videolink); - } catch (Exception ignored) { - } - } - }); - result.put("header", new JSONObject(getHeaders1()).toString()); - result.put("parse", 0); - result.put("playUrl", ""); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } + private final String vodPic = "https://sta.anicdn.com/playerImg/8.jpg"; + private String authority = ""; + private String cookies = ""; private HashMap getHeaders3() { HashMap headers = new HashMap<>(); @@ -380,6 +96,262 @@ public class Anime1 extends Spider { 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); + } + Result result = new Result(); + 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 videos = 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"); + videos.add(new Vod(id, name, vodPic, mark)); + } + result.setClasses(classes); + result.setList(videos); + return result.toString(); + } 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 videos = 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"); + videos.add(new Vod(id, name, vodPic, mark)); + } + Result result = new Result(); + result.setList(videos); + return result.toString(); + } 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"); + + Result result = new Result(); + 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())); + result.setList(Arrays.asList(vod)); + return result.toString(); + } catch (Exception e) { + SpiderDebug.log(e); + return ""; + } + } + + @Override + public String playerContent(String flag, String id, List vipFlags) { + try { + cookies = ""; + authority = ""; + String url = "https://v.anime1.me/api"; + Result result = new Result(); + String jsonreq = URLDecoder.decode(id, "UTF-8"); + HashMap reqpayload = new HashMap<>(); + reqpayload.put("d", jsonreq); + OkHttpUtil.post(url, reqpayload, getHeaders2(), new OKCallBack() { + @Override + protected String onParseResponse(Call call, Response response) { + try { + Map> respHeader = new HashMap<>(response.headers().toMultimap()); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < 3; i++) sb.append(respHeader.get("set-cookie").get(i).split(";")[0]).append(";"); + cookies = sb.toString(); + return response.body().string(); + } catch (Exception e) { + return ""; + } + } + + @Override + protected void onResponse(String response) { + try { + JSONObject obj = new JSONObject(response); + JSONArray objarray = obj.getJSONArray("s"); + JSONObject obj2 = objarray.getJSONObject(0); + String videolink = obj2.getString("src"); + authority = videolink.split("/")[2]; + videolink = "https:" + videolink; + result.setUrl(videolink); + } catch (Exception ignored) { + } + } + }); + result.setHeader(new Gson().toJson(getHeaders1())); + result.setParse("0"); + return result.toString(); + } catch (Exception e) { + SpiderDebug.log(e); + return ""; + } + } + @Override public String searchContent(String key, boolean quick) { try { @@ -387,27 +359,20 @@ public class Anime1 extends Spider { 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); - } + if (kw.contains(key)) searchResult.put(srobj); } - JSONObject result = new JSONObject(); - JSONArray videos = new JSONArray(); + Result result = new Result(); + List videos = 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"); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", name); - v.put("vod_pic", "https://sta.anicdn.com/playerImg/8.jpg"); - v.put("vod_remarks", mark); - videos.put(v); + videos.add(new Vod(id, name, vodPic, mark)); } } - result.put("list", videos); + result.setList(videos); return result.toString(); } catch (Exception e) { SpiderDebug.log(e); diff --git a/app/src/main/java/com/github/catvod/spider/Tangrenjie.java b/app/src/main/java/com/github/catvod/spider/Tangrenjie.java index 63d3deca..2320a520 100644 --- a/app/src/main/java/com/github/catvod/spider/Tangrenjie.java +++ b/app/src/main/java/com/github/catvod/spider/Tangrenjie.java @@ -39,7 +39,6 @@ public class Tangrenjie extends Spider { 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 final Pattern regexPage = Pattern.compile("\\S+/page/(\\d+)\\S+"); private JSONObject playerConfig; private JSONObject filterConfig;