diff --git a/app/src/main/java/com/github/catvod/spider/Anime1.java b/app/src/main/java/com/github/catvod/spider/Anime1.java deleted file mode 100644 index 034c3d5..0000000 --- a/app/src/main/java/com/github/catvod/spider/Anime1.java +++ /dev/null @@ -1,460 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.text.TextUtils; - -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.okhttp.OKCallBack; -import com.github.catvod.utils.okhttp.OkHttpUtil; -import okhttp3.Call; -import okhttp3.Response; - -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; -import org.jsoup.select.Elements; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.util.ArrayList; -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; -import java.util.Calendar; -import java.net.URLDecoder; - - - - -public class Anime1 extends Spider { - - private String cookies = ""; - private String authority = ""; - private JSONArray srcArray = new JSONArray(); - - @Override - public void init(Context context) { - super.init(context); - } - - @Override - public String homeContent(boolean filter) { - try { - long a = System.currentTimeMillis(); - String srcurl = "https://d1zquzjgwo9yb.cloudfront.net/?_=" + a; - String srcOrignstr = OkHttpUtil.string(srcurl, getHeaders3(srcurl)); - 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); - } - pg ="1"; - JSONObject result = new JSONObject(); - int limit = 20; - int page = Integer.parseInt(pg); - result.put("page", page); - int pageCount = videos.length() == limit ? page + 1 : page; - result.put("pagecount", pageCount); - result.put("limit", limit); - result.put("total", Integer.MAX_VALUE); - 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(url))); - 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" + Integer.toString(jj); - vod_play_Order.put(nn, playURL); - } else { - int jj = j + 1; - String nn = sourceName + Integer.toString(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() == true ){ - 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 != ""){ - doc = Jsoup.parse(OkHttpUtil.string(nextPage, getHeaders2(nextPage))); - } - }while(nextPage != ""); - 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); - if (vod_play.size() > 0) { - 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 vlink = id ; - String url = "https://v.anime1.me/api"; - JSONObject result = new JSONObject(); - String apireq = vlink; - String jsonreq = URLDecoder.decode(apireq,"UTF-8"); - HashMap reqpayload = new HashMap<>(); - reqpayload.put("d", jsonreq); - OkHttpUtil.post(OkHttpUtil.defaultClient(), url, reqpayload, getHeaders2(url), new OKCallBack.OKCallBackString() { - @Override - public String onParseResponse(Call call, Response response) { - try { - Map> respHeader = new HashMap<>(); - respHeader.clear(); - respHeader.putAll(response.headers().toMultimap()); - for (int i = 0; i < 3; i++) { - cookies = cookies + respHeader.get("set-cookie").get(i).split(";")[0]; - if ( i < 2 ) {cookies = cookies + ";";} - } - return response.body().string(); - } catch (IOException e) { - return ""; - } - } - - @Override - public void onFailure(Call call, Exception e) { - } - - @Override - public void onResponse(String respbody) { - try { - JSONObject obj = new JSONObject(respbody); - 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 (JSONException unused) { - } - } - }); - result.put("header", new JSONObject(getHeaders1(url)).toString()); - result.put("parse", 0); - result.put("playUrl", ""); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - private HashMap getHeaders3(String url) { - 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(String url) { - 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(String url) { - 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; - } - - /** - * 搜索 - * - * @param key - * @param quick 是否播放页的快捷搜索 - * @return - */ - @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); - } - } - JSONObject result = new JSONObject(); - JSONArray videos = new JSONArray(); - if (searchResult.length() > 0) { - int ch = searchResult.length() < 10 ? 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); - } - } - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - -} diff --git a/app/src/main/java/com/github/catvod/spider/Auete.java b/app/src/main/java/com/github/catvod/spider/Auete.java deleted file mode 100644 index 2f96e71..0000000 --- a/app/src/main/java/com/github/catvod/spider/Auete.java +++ /dev/null @@ -1,540 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.text.TextUtils; -import android.util.Base64; - -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import org.json.JSONArray; -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.URLEncoder; -import java.util.ArrayList; -import java.util.Comparator; -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; - -public class Auete extends Spider { - private static final String siteUrl = "https://auete.com"; - private static final String siteHost = "auete.com"; - - /** - * 播放源配置 - */ - private JSONObject playerConfig; - /** - * 筛选配置 - */ - private JSONObject filterConfig; - //分类页URL规则 - private Pattern regexCategory = Pattern.compile("/(\\w+)/index.html"); - //详情页URL规则 - private Pattern regexVid = Pattern.compile("/(\\w+/\\w+/\\w+)/"); - //播放页URL规则 - private Pattern regexPlay = Pattern.compile("(/\\w+/\\w+/\\w+/play-\\d+-\\d+.html)"); - //筛选页URL规则 - //private Pattern regexPage = Pattern.compile("/\\w+/\\w+/index(\\d+).html"); - private Pattern regexPage = Pattern.compile("/index(\\d+).html"); - - @Override - public void init(Context context) { - super.init(context); - try { - playerConfig = new JSONObject("{\"byun\":{\"sh\":\"云播B线\",\"pu\":\"\",\"sn\":0,\"or\":999},\"dphd\":{\"sh\":\"云播A线\",\"pu\":\"\",\"sn\":0,\"or\":999},\"cyun\":{\"sh\":\"云播C线\",\"pu\":\"\",\"sn\":0,\"or\":999},\"dbm3u8\":{\"sh\":\"云播D线\",\"pu\":\"\",\"sn\":0,\"or\":999},\"i8i\":{\"sh\":\"云播E线\",\"pu\":\"\",\"sn\":0,\"or\":999},\"m3u8hd\":{\"sh\":\"云播F线\",\"pu\":\"https://auete.com/api/?url=\",\"sn\":1,\"or\":999},\"languang\":{\"sh\":\"云播G线\",\"pu\":\"https://auete.com/api/?url=\",\"sn\":1,\"or\":999},\"hyun\":{\"sh\":\"云播H线\",\"pu\":\"https://auete.com/api/?url=\",\"sn\":1,\"or\":999},\"kyun\":{\"sh\":\"云播K线\",\"pu\":\"https://auete.com/api/?url=\",\"sn\":1,\"or\":999},\"bpyueyu\":{\"sh\":\"云播粤语\",\"pu\":\"\",\"sn\":0,\"or\":999},\"bpguoyu\":{\"sh\":\"云播国语\",\"pu\":\"\",\"sn\":0,\"or\":999},\"lyun\":{\"sh\":\"云播L线\",\"pu\":\"https://auete.com/api/?url=\",\"sn\":1,\"or\":999},\"myun\":{\"sh\":\"云播M线\",\"pu\":\"\",\"sn\":0,\"or\":999},\"dp\":{\"sh\":\"Dplayer\",\"pu\":\"\",\"sn\":0,\"or\":999}}"); - filterConfig = new JSONObject("{\"Movie\":[{\"key\":0,\"name\":\"分类\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"喜剧片\",\"v\":\"xjp\"},{\"n\":\"动作片\",\"v\":\"dzp\"},{\"n\":\"爱情片\",\"v\":\"aqp\"},{\"n\":\"科幻片\",\"v\":\"khp\"},{\"n\":\"恐怖片\",\"v\":\"kbp\"},{\"n\":\"惊悚片\",\"v\":\"jsp\"},{\"n\":\"战争片\",\"v\":\"zzp\"},{\"n\":\"剧情片\",\"v\":\"jqp\"}]}],\"Tv\":[{\"key\":0,\"name\":\"分类\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"美剧\",\"v\":\"oumei\"},{\"n\":\"韩剧\",\"v\":\"hanju\"},{\"n\":\"日剧\",\"v\":\"riju\"},{\"n\":\"泰剧\",\"v\":\"yataiju\"},{\"n\":\"网剧\",\"v\":\"wangju\"},{\"n\":\"台剧\",\"v\":\"taiju\"},{\"n\":\"国产\",\"v\":\"neidi\"},{\"n\":\"港剧\",\"v\":\"tvbgj\"}]}],\"Zy\":[{\"key\":0,\"name\":\"分类\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"国综\",\"v\":\"guozong\"},{\"n\":\"韩综\",\"v\":\"hanzong\"},{\"n\":\"美综\",\"v\":\"meizong\"}]}],\"Dm\":[{\"key\":0,\"name\":\"分类\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"动画\",\"v\":\"donghua\"},{\"n\":\"日漫\",\"v\":\"riman\"},{\"n\":\"国漫\",\"v\":\"guoman\"},{\"n\":\"美漫\",\"v\":\"meiman\"}]}],\"qita\":[{\"key\":0,\"name\":\"分类\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"纪录片\",\"v\":\"Jlp\"},{\"n\":\"经典片\",\"v\":\"Jdp\"},{\"n\":\"经典剧\",\"v\":\"Jdj\"},{\"n\":\"网大电影\",\"v\":\"wlp\"},{\"n\":\"国产老电影\",\"v\":\"laodianying\"}]}]}"); - } catch (JSONException e) { - SpiderDebug.log(e); - } - } - - /** - * 爬虫headers - * - * @param url - * @return - */ - protected HashMap getHeaders(String url) { - HashMap headers = new HashMap<>(); - headers.put("method", "GET"); - headers.put("Host", siteHost); - headers.put("Upgrade-Insecure-Requests", "1"); - headers.put("DNT", "1"); - 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; - } - - /** - * 获取分类数据 + 首页最近更新视频列表数据 - * - * @param filter 是否开启筛选 关联的是 软件设置中 首页数据源里的筛选开关 - * @return - */ - @Override - public String homeContent(boolean filter) { - try { - Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl, getHeaders(siteUrl))); - // 分类节点 - Elements elements = doc.select("ul[class='navbar-nav mr-auto']> li a"); - JSONArray classes = new JSONArray(); - for (Element ele : elements) { - //分类名 - String name = ele.text(); - boolean show = name.equals("电影") || - name.equals("电视剧") || - name.equals("综艺") || - name.equals("动漫") || - name.equals("其他"); - if (show) { - Matcher mather = regexCategory.matcher(ele.attr("href")); - if (!mather.find()) - continue; - // 把分类的id和名称取出来加到列表里 - String id = mather.group(1).trim(); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("type_id", id); - jsonObject.put("type_name", name); - classes.put(jsonObject); - } - } - JSONObject result = new JSONObject(); - if (filter) { - result.put("filters", filterConfig); - } - result.put("class", classes); - try { - // 取首页推荐视频列表 - Element homeList = doc.select("ul.threadlist").get(0); - Elements list = homeList.select("li"); - JSONArray videos = new JSONArray(); - for (int i = 0; i < list.size(); i++) { - Element vod = list.get(i); - String title = vod.selectFirst("h2 a").attr("title"); - String cover = vod.selectFirst("a img").attr("src"); - String remark = vod.selectFirst("a button").text(); - Matcher matcher = regexVid.matcher(vod.selectFirst("a").attr("href")); - if (!matcher.find()) - continue; - String id = matcher.group(1); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", remark); - videos.put(v); - } - result.put("list", videos); - } catch (Exception e) { - SpiderDebug.log(e); - } - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - /** - * 获取分类信息数据 - * - * @param tid 分类id - * @param pg 页数 - * @param filter 同homeContent方法中的filter - * @param extend 筛选参数{k:v, k1:v1} - * @return - */ - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { - // 获取分类数据的url - String url = ""; - try { - if (extend != null && extend.size() > 0) { - for (Iterator it = extend.keySet().iterator(); it.hasNext(); ) { - String key = it.next(); - String value = extend.get(key); - if (value != null && value.length() != 0 && value != " ") { - url = siteUrl + "/" + tid + "/" + value; - } else { - url = siteUrl + "/" + tid; - } - ; - } - } else { - url = siteUrl + "/" + tid; - } - ; - if (pg.equals("1")) { - url = url + "/index.html"; - } else { - url = url + "/index" + pg + ".html"; - } - //System.out.println(url); - String html = OkHttpUtil.string(url, getHeaders(url)); - Document doc = Jsoup.parse(html); - JSONObject result = new JSONObject(); - int pageCount = 0; - int page = -1; - - // 取页码相关信息 - Elements pageInfo = doc.select("ul.pagination li"); - if (pageInfo.size() == 0) { - page = Integer.parseInt(pg); - pageCount = page; - } else { - for (int i = 0; i < pageInfo.size(); i++) { - Element li = pageInfo.get(i); - Element a = li.selectFirst("a"); - if (a == null) - continue; - String name = a.text(); - //System.out.println("名称"+name); - if (page == -1 && li.hasClass("active")) { - Matcher matcher = regexPage.matcher(a.attr("href")); - if (matcher.find()) { - //System.out.println("哈哈"+matcher.group(1)); - page = Integer.parseInt(matcher.group(1)); - } else { - Elements list = doc.select("ul.threadlist li"); - if (list.size() > 0) { - page = 1; - } else { - page = 0; - } - } - } - if (name.equals("尾页")) { - Matcher matcher = regexPage.matcher(a.attr("href")); - if (matcher.find()) { - //System.out.println("尾页" + matcher.group(1)); - pageCount = Integer.parseInt(matcher.group(1)); - } else { - pageCount = 0; - } - break; - } - } - } - - JSONArray videos = new JSONArray(); - if (!html.contains("没有找到您想要的结果哦")) { - // 取当前分类页的视频列表 - Elements list = doc.select("ul.threadlist li"); - for (int i = 0; i < list.size(); i++) { - Element vod = list.get(i); - String title = vod.selectFirst("h2 a").attr("title"); - String cover = vod.selectFirst("a img").attr("src"); - String remark = vod.selectFirst("a button").text(); - Matcher matcher = regexVid.matcher(vod.selectFirst("a").attr("href")); - if (!matcher.find()) - continue; - String id = matcher.group(1); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", remark); - videos.put(v); - } - } - result.put("page", page); - result.put("pagecount", pageCount); - result.put("limit", 20); - result.put("total", pageCount <= 1 ? videos.length() : pageCount * 20); - - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - /** - * 视频详情信息 - * - * @param ids 视频id - * @return - */ - @Override - public String detailContent(List ids) { - try { - // 视频详情url - String url = siteUrl + "/" + ids.get(0) + "/"; - //System.out.println(url); - Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url))); - JSONObject result = new JSONObject(); - JSONObject vodList = new JSONObject(); - - // 取基本数据 - String cover = doc.selectFirst("div.cover a").attr("href"); - String title = doc.selectFirst("div.cover a").attr("title"); - Elements list1 = doc.select("div.message>p"); - String desc = doc.select("div.message>p").get(list1.size() - 1).text(); - String category = "", area = "", year = "", remark = "", director = "", actor = ""; - Elements span_text_muted = doc.select("div.message>p"); - 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 { - category = text.text().split(": ")[1]; - } catch (Exception e) { - category = ""; - } - } else if (info.contains("年份")) { - try { - year = text.text().split(": ")[1]; - } catch (Exception e) { - year = ""; - } - } else if (info.contains("地区")) { - try { - area = text.text().split(": ")[1]; - } catch (Exception e) { - area = ""; - } - } else if (info.contains("影片备注")) { - try { - remark = text.text().split(": ")[1]; - } catch (Exception e) { - remark = ""; - } - } else if (info.contains("导演")) { - try { - director = text.text().split(": ")[1]; - } catch (Exception e) { - director = ""; - } - } else if (info.contains("主演")) { - try { - actor = text.text().split(": ")[1]; - } catch (Exception e) { - actor = ""; - } - } - } - - vodList.put("vod_id", ids.get(0)); - vodList.put("vod_name", title); - vodList.put("vod_pic", cover); - vodList.put("type_name", category); - vodList.put("vod_year", year); - vodList.put("vod_area", area); - vodList.put("vod_remarks", remark); - vodList.put("vod_actor", actor); - vodList.put("vod_director", director); - vodList.put("vod_content", desc); - //System.out.println(vodList.toString()); - Map vod_play = new TreeMap<>(new Comparator() { - @Override - public int compare(String o1, String 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 1; - } - }); - - // 取播放列表数据 - Elements sources = doc.select("div#player_list>h2"); - //System.out.println(sources.size()); - Elements sourceList = doc.select("div#player_list>ul"); - //System.out.println(sourceList.size()); - for (int i = 0; i < sources.size(); i++) { - Element source = sources.get(i); - //System.out.println(sources.text().split(":")[0].split("』")[1]); - String sourceName = source.text().split("』")[1].split(":")[0]; - boolean found = false; - for (Iterator it = playerConfig.keys(); it.hasNext(); ) { - String flag = it.next(); - if (playerConfig.getJSONObject(flag).getString("sh").equals(sourceName)) { - sourceName = flag; - found = true; - break; - } - } - if (!found) - continue; - String playList = ""; - Elements playListA = sourceList.get(i).select("li > a"); - //System.out.println(playListA.size()); - List vodItems = new ArrayList<>(); - - for (int j = 0; j < playListA.size(); j++) { - Element vod = playListA.get(j); - Matcher matcher = regexPlay.matcher(vod.attr("href")); - if (!matcher.find()) - continue; - String playURL = matcher.group(1); - vodItems.add(vod.text() + "$" + playURL); - } - if (vodItems.size() > 0) - playList = TextUtils.join("#", vodItems); - - if (playList.length() == 0) - continue; - - vod_play.put(sourceName, playList); - } - - if (vod_play.size() > 0) { - 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 ""; - } - - /** - * 获取视频播放信息 - * - * @param flag 播放源 - * @param id 视频id - * @param vipFlags 所有可能需要vip解析的源 - * @return - */ - @Override - public String playerContent(String flag, String id, List vipFlags) { - try { - // 播放页 url - String url = siteUrl + id; - Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url))); - /*取得script下面的JS变量*/ - Elements e = doc.select("div>script"); - /*循环遍历script下面的JS变量*/ - String player = ""; - String pn = ""; - JSONObject result = new JSONObject(); - for (Element element : e) { - /*取得JS变量数组*/ - String[] data = element.data().toString().split("var"); - /*取得单个JS变量*/ - for (String variable : data) { - /*过滤variable为空的数据*/ - if (variable.contains("=")) { - /*取到满足条件的JS变量*/ - if (variable.contains("now")) { - String[] kvp = variable.split("="); - player = kvp[1].replaceAll("\"", "").replaceAll(";", ""); - if (player.startsWith("base64")) { - String[] plist1 = player.split("\\("); - String[] plist2 = plist1[1].split("\\)"); - // 解码 - player = new String(Base64.decode(plist2[0].getBytes(), Base64.DEFAULT)); - //byte[] base64Data = Base64.getDecoder().decode(plist2[0]); - //player = new String(base64Data, "utf-8"); - } - if (player.startsWith("http")) { - result.put("parse", 0); - result.put("playUrl", ""); - result.put("url", player); - result.put("header", ""); - } else if (player.contains("m3u8")) { - String finalvideo = "https://datas-s8pwfqdu9yystn90fb----------------cache.haozhansou.com/" + player; - result.put("parse", 0); - result.put("playUrl", ""); - result.put("url", finalvideo); - result.put("header", ""); - - } - } - if (variable.contains("pn")) { - String[] kvp = variable.split("="); - pn = kvp[1].replaceAll("\"", "").replaceAll(";", ""); - } - } - } - if (playerConfig.has(pn)) { - JSONObject pCfg = playerConfig.getJSONObject(pn); - String videoUrl = player; - String playUrl = pCfg.getString("pu"); - result.put("parse", pCfg.getInt("sn")); - result.put("playUrl", playUrl); - result.put("url", videoUrl); - result.put("header", ""); - } - } - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - /** - * 搜索 - * - * @param key - * @param quick 是否播放页的快捷搜索 - * @return - */ - @Override - public String searchContent(String key, boolean quick) { - try { - String url = siteUrl + "/search.php?searchword=" + key; - Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url))); - JSONObject result = new JSONObject(); - - JSONArray videos = new JSONArray(); - Elements list = doc.select("div.card-body>ul>li.media"); - for (int i = 0; i < list.size(); i++) { - Element vod = list.get(i); - String title = vod.select("div.media-body>div.subject>a>span").text(); - String cover = ""; - String remark = vod.selectFirst("div.media-body>div.d-flex>div.text-muted>span").text(); - Matcher matcher = regexVid.matcher(vod.select("div.media-body>div.subject>a").attr("href")); - if (!matcher.find()) - continue; - String id = matcher.group(1); - JSONObject v = new JSONObject(); - - // 视频封面 - String vodurl = siteUrl + "/" + id + "/"; - Document voddoc = Jsoup.parse(OkHttpUtil.string(vodurl, getHeaders(vodurl))); - cover = voddoc.selectFirst("div.cover a").attr("href"); - - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", remark); - videos.put(v); - } - - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } -} diff --git a/app/src/main/java/com/github/catvod/spider/Bili.java b/app/src/main/java/com/github/catvod/spider/Bili.java deleted file mode 100644 index 0accb46..0000000 --- a/app/src/main/java/com/github/catvod/spider/Bili.java +++ /dev/null @@ -1,273 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.text.TextUtils; -import android.util.Base64; - -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; - -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; - -public class Bili extends Spider { - - protected JSONObject ext = null; - - @Override - public void init(Context context, String extend) { - super.init(context, extend); - try { - String content = OkHttpUtil.string(extend, null); - ext = new JSONObject(content); - } catch (JSONException ex) { - ex.printStackTrace(); - } - } - - @Override - public String homeContent(boolean filter) { - JSONObject results = new JSONObject(); - try { - results.put("class", ext.getJSONArray("classes")); - if (filter) { - results.put("filters", ext.getJSONObject("filter")); - } - } catch (JSONException e) { - SpiderDebug.log(e); - } - return results.toString(); - } - - @Override - public String homeVideoContent() { - try { - JSONArray videos = new JSONArray(); - try { - String url = "https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword=窗 白噪音"; - String content = OkHttpUtil.string(url, null); - JSONObject data = new JSONObject(content).getJSONObject("data"); - JSONArray RArray = data.getJSONArray("result"); - for (int i = 0; i < RArray.length(); i++) { - JSONObject info = RArray.getJSONObject(i); - JSONObject result = new JSONObject(); - String pic = info.getString("pic"); - if (pic.startsWith("//")) { - pic = "https:" + pic; - } - result.put("vod_id", info.getString("bvid")); - String title = info.getString("title"); - Document KS = Jsoup.parse(title); - String name = KS.text(); - result.put("vod_name", name); - result.put("vod_pic", pic); - String duration = info.getString("duration"); - String words = duration.split(":")[0]; - String remark = words + "分钟"; - result.put("vod_remarks", remark); - videos.put(result); - } - } catch (Exception e) { - - } - JSONObject result = new JSONObject(); - result.put("list", videos); - return result.toString(); - } catch (Throwable th) { - - } - return ""; - } - - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { - try { - String url = "https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword="; - if (extend != null && extend.size() > 0 && extend.containsKey("tid") && extend.get("tid").length() > 0) { - url += extend.get("tid"); - } else { - url += tid; - } - if (extend != null && extend.size() > 0) { - for (Iterator it = extend.keySet().iterator(); it.hasNext(); ) { - String key = it.next(); - String value = extend.get(key); - if (value.length() > 0) { - url += "&" + key + "=" + URLEncoder.encode(value); - } - } - } - url += "&page=" + pg; - String content = OkHttpUtil.string(url, null); - JSONObject data = new JSONObject(content).getJSONObject("data"); - JSONArray list = new JSONArray(); - JSONArray RSArray = data.getJSONArray("result"); - for (int i = 0; i < RSArray.length(); i++) { - JSONObject info = RSArray.getJSONObject(i); - JSONObject result = new JSONObject(); - String pic = info.getString("pic"); - if (pic.startsWith("//")) { - pic = "https:" + pic; - } - result.put("vod_id", info.getString("bvid")); - String title = info.getString("title"); - Document doc = Jsoup.parse(title); - String name = doc.text(); - result.put("vod_name", name); - result.put("vod_pic", pic); - String duration = info.getString("duration"); - String Split = duration.split(":")[0]; - String remark = Split + "分钟"; - result.put("vod_remarks", remark); - list.put(result); - } - JSONObject result = new JSONObject(); - int limit = 20; - int page = Integer.parseInt(pg); - result.put("page", page); - int pageCount = list.length() == limit ? page + 1 : page; - result.put("pagecount", pageCount); - result.put("limit", limit); - result.put("total", Integer.MAX_VALUE); - result.put("list", list); - return result.toString(); - - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - @Override - public String detailContent(List ids) { - int i = 0; - try { - String str = ids.get(0); - String sb2 = "https://api.bilibili.com/x/web-interface/archive/stat?bvid=" + str; - JSONObject jSONObject = new JSONObject(OkHttpUtil.string(sb2, null)); - JSONObject jSONObject2 = jSONObject.getJSONObject("data"); - long j = jSONObject2.getLong("aid"); - String sb4 = j + ""; - String sb6 = "https://api.bilibili.com/x/web-interface/view?aid=" + sb4; - JSONObject jSONObject3 = new JSONObject(OkHttpUtil.string(sb6, null)); - JSONObject jSONObject4 = jSONObject3.getJSONObject("data"); - JSONObject v = new JSONObject(); - v.put("vod_id", str); - String string = jSONObject4.getString("title"); - v.put("vod_name", string); - String string2 = jSONObject4.getString("pic"); - v.put("vod_pic", string2); - String string3 = jSONObject4.getString("tname"); - v.put("type_name", string3); - v.put("vod_year", ""); - v.put("vod_area", ""); - String sb7 = jSONObject4.getLong("duration") / 60 + "分钟"; - v.put("vod_remarks", sb7); - v.put("vod_actor", ""); - v.put("vod_director", ""); - String string4 = jSONObject4.getString("desc"); - v.put("vod_content", string4); - v.put("vod_play_from", "B站"); - ArrayList arrayList = new ArrayList(); - JSONArray jSONArray = jSONObject4.getJSONArray("pages"); - while (true) { - int length = jSONArray.length(); - if (i < length) { - JSONObject jSONObject6 = jSONArray.getJSONObject(i); - String string5 = jSONObject6.getString("part"); - String replace = string5.replace("$", "_").replace("#", "_"); - StringBuilder sb8 = new StringBuilder(); - sb8.append(replace); - sb8.append("$"); - sb8.append(sb4); - sb8.append("+ "); - long j2 = jSONObject6.getLong("cid"); - sb8.append(j2); - String sb9 = sb8.toString(); - arrayList.add(sb9); - i++; - } else { - v.put("vod_play_url", TextUtils.join("#", arrayList)); - JSONArray jSONArray2 = new JSONArray(); - jSONArray2.put(v); - JSONObject jSONObject7 = new JSONObject(); - jSONObject7.put("list", jSONArray2); - return jSONObject7.toString(); - } - } - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - @Override - public String playerContent(String str, String str2, List list) { - try { - String[] split = str2.split("\\+"); - String str3 = split[0]; - String str4 = split[1]; - String sb2 = "https://api.bilibili.com/x/player/playurl?avid=" + str3 + "&cid= " + str4 + "&qn=120&fourk=1"; - JSONObject jSONObject = new JSONObject(OkHttpUtil.string(sb2, null)); - JSONObject jSONObject2 = new JSONObject(); - jSONObject2.put("parse", "0"); - jSONObject2.put("playUrl", ""); - JSONObject jSONObject3 = jSONObject.getJSONObject("data"); - JSONObject jSONObject4 = jSONObject3.getJSONArray("durl").getJSONObject(0); - String string = jSONObject4.getString("url"); - jSONObject2.put("url", string); - jSONObject2.put("header", "{\"Referer\":\"https://www.bilibili.com\",\"User-Agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36\"}"); - jSONObject2.put("contentType", "video/x-flv"); - return jSONObject2.toString(); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - @Override - public String searchContent(String key, boolean quick) { - try { - JSONObject result = new JSONObject(); - String url = "https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword=" + URLEncoder.encode(key); - String content = OkHttpUtil.string(url, null); - JSONObject data = new JSONObject(content).getJSONObject("data"); - JSONArray videos = new JSONArray(); - JSONArray RSArray = data.getJSONArray("result"); - for (int i = 0; i < RSArray.length(); i++) { - JSONObject info = RSArray.getJSONObject(i); - JSONObject v = new JSONObject(); - String pic = info.getString("pic"); - if (pic.startsWith("//")) { - pic = "https:" + pic; - } - v.put("vod_id", info.getString("bvid")); - String title = info.getString("title"); - Document doc = Jsoup.parse(title); - String name = doc.text(); - v.put("vod_name", name); - v.put("vod_pic", pic); - String duration = info.getString("duration"); - String Split = duration.split(":")[0]; - String remark = Split + "分钟"; - v.put("vod_remarks", remark); - videos.put(v); - } - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } -} \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/Cokemv.java b/app/src/main/java/com/github/catvod/spider/Cokemv.java deleted file mode 100644 index 28ce911..0000000 --- a/app/src/main/java/com/github/catvod/spider/Cokemv.java +++ /dev/null @@ -1,468 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.text.TextUtils; - -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import org.json.JSONArray; -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.URLEncoder; -import java.util.ArrayList; -import java.util.Comparator; -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; - -import okhttp3.Headers; - -public class Cokemv extends Spider { - private static final String siteUrl = "https://cokemv.me"; - private static final String siteHost = "cokemv.me"; - - /** - * 播放源配置 - */ - private JSONObject playerConfig; - /** - * 筛选配置 - */ - private JSONObject filterConfig; - private Pattern regexCategory = Pattern.compile("/vodtype/(\\d+).html"); - private Pattern regexVid = Pattern.compile("/voddetail/(\\d+).html"); - private Pattern regexPlay = Pattern.compile("/vodplay/(\\d+)-(\\d+)-(\\d+).html"); - private Pattern regexPage = Pattern.compile("/vodshow/(\\S+).html"); - - @Override - public void init(Context context) { - super.init(context); - try { - playerConfig = new JSONObject("{\"cokemv0555\":{\"sh\":\"COKEMV\",\"pu\":\"\",\"sn\":0,\"or\":999},\"cokeqie01\":{\"sh\":\"極速路線\",\"pu\":\"\",\"sn\":0,\"or\":999},\"xin\":{\"sh\":\"高速路線\",\"pu\":\"\",\"sn\":0,\"or\":999},\"90mm\":{\"sh\":\"藍光號路\",\"pu\":\"\",\"sn\":0,\"or\":999},\"age01\":{\"sh\":\"動漫一線\",\"pu\":\"\",\"sn\":0,\"or\":999},\"age02\":{\"sh\":\"動漫二線\",\"pu\":\"\",\"sn\":0,\"or\":999},\"mahua\":{\"sh\":\"海外(禁國內)\",\"pu\":\"\",\"sn\":0,\"or\":999},\"toutiao\":{\"sh\":\"蓝光不卡\",\"pu\":\"\",\"sn\":0,\"or\":999}}"); - filterConfig = new JSONObject("{\"5\":[{\"key\":3,\"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\":11,\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"}]},{\"key\":4,\"name\":\"语言\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"国语\",\"v\":\"國語\"},{\"n\":\"英语\",\"v\":\"英語\"},{\"n\":\"粤语\",\"v\":\"粵語\"},{\"n\":\"闽南语\",\"v\":\"閩南語\"},{\"n\":\"韩语\",\"v\":\"韓語\"},{\"n\":\"日语\",\"v\":\"日語\"},{\"n\":\"法语\",\"v\":\"法語\"},{\"n\":\"德语\",\"v\":\"德語\"},{\"n\":\"其它\",\"v\":\"其它\"}]},{\"key\":5,\"name\":\"字母\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"A\",\"v\":\"A\"},{\"n\":\"B\",\"v\":\"B\"},{\"n\":\"C\",\"v\":\"C\"},{\"n\":\"D\",\"v\":\"D\"},{\"n\":\"E\",\"v\":\"E\"},{\"n\":\"F\",\"v\":\"F\"},{\"n\":\"G\",\"v\":\"G\"},{\"n\":\"H\",\"v\":\"H\"},{\"n\":\"I\",\"v\":\"I\"},{\"n\":\"J\",\"v\":\"J\"},{\"n\":\"K\",\"v\":\"K\"},{\"n\":\"L\",\"v\":\"L\"},{\"n\":\"M\",\"v\":\"M\"},{\"n\":\"N\",\"v\":\"N\"},{\"n\":\"O\",\"v\":\"O\"},{\"n\":\"P\",\"v\":\"P\"},{\"n\":\"Q\",\"v\":\"Q\"},{\"n\":\"R\",\"v\":\"R\"},{\"n\":\"S\",\"v\":\"S\"},{\"n\":\"T\",\"v\":\"T\"},{\"n\":\"U\",\"v\":\"U\"},{\"n\":\"V\",\"v\":\"V\"},{\"n\":\"W\",\"v\":\"W\"},{\"n\":\"X\",\"v\":\"X\"},{\"n\":\"Y\",\"v\":\"Y\"},{\"n\":\"Z\",\"v\":\"Z\"},{\"n\":\"0-9\",\"v\":\"0-9\"}]},{\"key\":2,\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"2\":[{\"key\":0,\"name\":\"类型\",\"value\":[{\"n\":\"全部\",\"v\":\"2\"},{\"n\":\"大陆剧\",\"v\":\"13\"},{\"n\":\"香港剧\",\"v\":\"14\"},{\"n\":\"韩国剧\",\"v\":\"15\"},{\"n\":\"欧美剧\",\"v\":\"16\"},{\"n\":\"日本剧\",\"v\":\"20\"},{\"n\":\"台湾剧\",\"v\":\"21\"},{\"n\":\"泰国剧\",\"v\":\"22\"}]},{\"key\":1,\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"中国大陆\",\"v\":\"中国大陆\"},{\"n\":\"韩国\",\"v\":\"韩国\"},{\"n\":\"中国香港\",\"v\":\"中国香港\"},{\"n\":\"中国台湾\",\"v\":\"中国台湾\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"美国\",\"v\":\"美国\"},{\"n\":\"泰国\",\"v\":\"泰国\"},{\"n\":\"英国\",\"v\":\"英国\"},{\"n\":\"新加坡\",\"v\":\"新加坡\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":11,\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"}]},{\"key\":4,\"name\":\"语言\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"国语\",\"v\":\"国语\"},{\"n\":\"英语\",\"v\":\"英语\"},{\"n\":\"粤语\",\"v\":\"粤语\"},{\"n\":\"闽南语\",\"v\":\"闽南语\"},{\"n\":\"韩语\",\"v\":\"韩语\"},{\"n\":\"日语\",\"v\":\"日语\"},{\"n\":\"其它\",\"v\":\"其它\"}]},{\"key\":5,\"name\":\"字母\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"A\",\"v\":\"A\"},{\"n\":\"B\",\"v\":\"B\"},{\"n\":\"C\",\"v\":\"C\"},{\"n\":\"D\",\"v\":\"D\"},{\"n\":\"E\",\"v\":\"E\"},{\"n\":\"F\",\"v\":\"F\"},{\"n\":\"G\",\"v\":\"G\"},{\"n\":\"H\",\"v\":\"H\"},{\"n\":\"I\",\"v\":\"I\"},{\"n\":\"J\",\"v\":\"J\"},{\"n\":\"K\",\"v\":\"K\"},{\"n\":\"L\",\"v\":\"L\"},{\"n\":\"M\",\"v\":\"M\"},{\"n\":\"N\",\"v\":\"N\"},{\"n\":\"O\",\"v\":\"O\"},{\"n\":\"P\",\"v\":\"P\"},{\"n\":\"Q\",\"v\":\"Q\"},{\"n\":\"R\",\"v\":\"R\"},{\"n\":\"S\",\"v\":\"S\"},{\"n\":\"T\",\"v\":\"T\"},{\"n\":\"U\",\"v\":\"U\"},{\"n\":\"V\",\"v\":\"V\"},{\"n\":\"W\",\"v\":\"W\"},{\"n\":\"X\",\"v\":\"X\"},{\"n\":\"Y\",\"v\":\"Y\"},{\"n\":\"Z\",\"v\":\"Z\"},{\"n\":\"0-9\",\"v\":\"0-9\"}]},{\"key\":2,\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"1\":[{\"key\":0,\"name\":\"分类\",\"value\":[{\"n\":\"全部\",\"v\":\"1\"},{\"n\":\"动作片\",\"v\":\"6\"},{\"n\":\"喜剧片\",\"v\":\"7\"},{\"n\":\"爱情片\",\"v\":\"8\"},{\"n\":\"科幻片\",\"v\":\"9\"},{\"n\":\"恐怖片\",\"v\":\"10\"},{\"n\":\"剧情片\",\"v\":\"11\"},{\"n\":\"战争片\",\"v\":\"12\"},{\"n\":\"犯罪片\",\"v\":\"23\"},{\"n\":\"奇幻片\",\"v\":\"24\"},{\"n\":\"悬疑片\",\"v\":\"25\"},{\"n\":\"记录片\",\"v\":\"27\"}]},{\"key\":1,\"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\":\"意大利\"},{\"n\":\"西班牙\",\"v\":\"西班牙\"},{\"n\":\"加拿大\",\"v\":\"加拿大\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":11,\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"}]},{\"key\":4,\"name\":\"语言\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"国语\",\"v\":\"国语\"},{\"n\":\"英语\",\"v\":\"英语\"},{\"n\":\"粤语\",\"v\":\"粤语\"},{\"n\":\"闽南语\",\"v\":\"闽南语\"},{\"n\":\"韩语\",\"v\":\"韩语\"},{\"n\":\"日语\",\"v\":\"日语\"},{\"n\":\"法语\",\"v\":\"法语\"},{\"n\":\"德语\",\"v\":\"德语\"},{\"n\":\"其它\",\"v\":\"其它\"}]},{\"key\":5,\"name\":\"字母\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"A\",\"v\":\"A\"},{\"n\":\"B\",\"v\":\"B\"},{\"n\":\"C\",\"v\":\"C\"},{\"n\":\"D\",\"v\":\"D\"},{\"n\":\"E\",\"v\":\"E\"},{\"n\":\"F\",\"v\":\"F\"},{\"n\":\"G\",\"v\":\"G\"},{\"n\":\"H\",\"v\":\"H\"},{\"n\":\"I\",\"v\":\"I\"},{\"n\":\"J\",\"v\":\"J\"},{\"n\":\"K\",\"v\":\"K\"},{\"n\":\"L\",\"v\":\"L\"},{\"n\":\"M\",\"v\":\"M\"},{\"n\":\"N\",\"v\":\"N\"},{\"n\":\"O\",\"v\":\"O\"},{\"n\":\"P\",\"v\":\"P\"},{\"n\":\"Q\",\"v\":\"Q\"},{\"n\":\"R\",\"v\":\"R\"},{\"n\":\"S\",\"v\":\"S\"},{\"n\":\"T\",\"v\":\"T\"},{\"n\":\"U\",\"v\":\"U\"},{\"n\":\"V\",\"v\":\"V\"},{\"n\":\"W\",\"v\":\"W\"},{\"n\":\"X\",\"v\":\"X\"},{\"n\":\"Y\",\"v\":\"Y\"},{\"n\":\"Z\",\"v\":\"Z\"},{\"n\":\"0-9\",\"v\":\"0-9\"}]},{\"key\":2,\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"4\":[{\"key\":0,\"name\":\"分类\",\"value\":[{\"n\":\"全部\",\"v\":\"4\"},{\"n\":\"动画电影\",\"v\":\"41\"}]},{\"key\":3,\"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\":\"战争\"},{\"n\":\"少年\",\"v\":\"少年\"},{\"n\":\"少女\",\"v\":\"少女\"},{\"n\":\"社会\",\"v\":\"社会\"},{\"n\":\"原创\",\"v\":\"原创\"},{\"n\":\"亲子\",\"v\":\"亲子\"},{\"n\":\"益智\",\"v\":\"益智\"},{\"n\":\"励志\",\"v\":\"励志\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":1,\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"大陆\",\"v\":\"大陆\"},{\"n\":\"韩国\",\"v\":\"韩国\"},{\"n\":\"中国香港\",\"v\":\"中国香港\"},{\"n\":\"中国台湾\",\"v\":\"中国台湾\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"美国\",\"v\":\"美国\"},{\"n\":\"泰国\",\"v\":\"泰国\"},{\"n\":\"英国\",\"v\":\"英国\"},{\"n\":\"新加坡\",\"v\":\"新加坡\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":11,\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"}]},{\"key\":4,\"name\":\"语言\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"国语\",\"v\":\"国语\"},{\"n\":\"英语\",\"v\":\"英语\"},{\"n\":\"粤语\",\"v\":\"粤语\"},{\"n\":\"闽南语\",\"v\":\"闽南语\"},{\"n\":\"韩语\",\"v\":\"韩语\"},{\"n\":\"日语\",\"v\":\"日语\"},{\"n\":\"其它\",\"v\":\"其它\"}]},{\"key\":5,\"name\":\"字母\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"A\",\"v\":\"A\"},{\"n\":\"B\",\"v\":\"B\"},{\"n\":\"C\",\"v\":\"C\"},{\"n\":\"D\",\"v\":\"D\"},{\"n\":\"E\",\"v\":\"E\"},{\"n\":\"F\",\"v\":\"F\"},{\"n\":\"G\",\"v\":\"G\"},{\"n\":\"H\",\"v\":\"H\"},{\"n\":\"I\",\"v\":\"I\"},{\"n\":\"J\",\"v\":\"J\"},{\"n\":\"K\",\"v\":\"K\"},{\"n\":\"L\",\"v\":\"L\"},{\"n\":\"M\",\"v\":\"M\"},{\"n\":\"N\",\"v\":\"N\"},{\"n\":\"O\",\"v\":\"O\"},{\"n\":\"P\",\"v\":\"P\"},{\"n\":\"Q\",\"v\":\"Q\"},{\"n\":\"R\",\"v\":\"R\"},{\"n\":\"S\",\"v\":\"S\"},{\"n\":\"T\",\"v\":\"T\"},{\"n\":\"U\",\"v\":\"U\"},{\"n\":\"V\",\"v\":\"V\"},{\"n\":\"W\",\"v\":\"W\"},{\"n\":\"X\",\"v\":\"X\"},{\"n\":\"Y\",\"v\":\"Y\"},{\"n\":\"Z\",\"v\":\"Z\"},{\"n\":\"0-9\",\"v\":\"0-9\"}]},{\"key\":2,\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"3\":[{\"key\":1,\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"中国大陆\",\"v\":\"中国大陆\"},{\"n\":\"韩国\",\"v\":\"韩国\"}]},{\"key\":11,\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"}]},{\"key\":4,\"name\":\"语言\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"国语\",\"v\":\"国语\"},{\"n\":\"英语\",\"v\":\"英语\"},{\"n\":\"粤语\",\"v\":\"粤语\"},{\"n\":\"闽南语\",\"v\":\"闽南语\"},{\"n\":\"韩语\",\"v\":\"韩语\"},{\"n\":\"日语\",\"v\":\"日语\"},{\"n\":\"其它\",\"v\":\"其它\"}]},{\"key\":5,\"name\":\"字母\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"A\",\"v\":\"A\"},{\"n\":\"B\",\"v\":\"B\"},{\"n\":\"C\",\"v\":\"C\"},{\"n\":\"D\",\"v\":\"D\"},{\"n\":\"E\",\"v\":\"E\"},{\"n\":\"F\",\"v\":\"F\"},{\"n\":\"G\",\"v\":\"G\"},{\"n\":\"H\",\"v\":\"H\"},{\"n\":\"I\",\"v\":\"I\"},{\"n\":\"J\",\"v\":\"J\"},{\"n\":\"K\",\"v\":\"K\"},{\"n\":\"L\",\"v\":\"L\"},{\"n\":\"M\",\"v\":\"M\"},{\"n\":\"N\",\"v\":\"N\"},{\"n\":\"O\",\"v\":\"O\"},{\"n\":\"P\",\"v\":\"P\"},{\"n\":\"Q\",\"v\":\"Q\"},{\"n\":\"R\",\"v\":\"R\"},{\"n\":\"S\",\"v\":\"S\"},{\"n\":\"T\",\"v\":\"T\"},{\"n\":\"U\",\"v\":\"U\"},{\"n\":\"V\",\"v\":\"V\"},{\"n\":\"W\",\"v\":\"W\"},{\"n\":\"X\",\"v\":\"X\"},{\"n\":\"Y\",\"v\":\"Y\"},{\"n\":\"Z\",\"v\":\"Z\"},{\"n\":\"0-9\",\"v\":\"0-9\"}]},{\"key\":2,\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}]}"); - } catch (JSONException e) { - SpiderDebug.log(e); - } - } - - protected static HashMap Headers() { - HashMap headers = new HashMap<>(); - headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.62 Safari/537.36"); - headers.put("Referer", siteUrl); - return headers; - } - - /** - * 爬虫headers - * - * @param url - * @return - */ - protected HashMap getHeaders(String url) { - HashMap headers = new HashMap<>(); - headers.put("method", "GET"); - headers.put("Host", siteHost); - headers.put("Upgrade-Insecure-Requests", "1"); - headers.put("DNT", "1"); - 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; - } - - /** - * 获取分类数据 + 首页最近更新视频列表数据 - * - * @param filter 是否开启筛选 关联的是 软件设置中 首页数据源里的筛选开关 - * @return - */ - @Override - public String homeContent(boolean filter) { - try { - Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl, getHeaders(siteUrl))); - // 分类节点 - Elements elements = doc.select("ul.navbar-items>li.navbar-item>a"); - JSONArray classes = new JSONArray(); - for (Element ele : elements) { - String name = ele.text(); - boolean show = name.equals("抖音电影") || - name.equals("电视剧") || - name.equals("电影") || - name.equals("动漫") || - name.equals("综艺"); - if (show) { - Matcher mather = regexCategory.matcher(ele.attr("href")); - if (!mather.find()) - continue; - // 把分类的id和名称取出来加到列表里 - String id = mather.group(1).trim(); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("type_id", id); - jsonObject.put("type_name", name); - classes.put(jsonObject); - } - } - JSONObject result = new JSONObject(); - if (filter) { - result.put("filters", filterConfig); - } - result.put("class", classes); - try { - // 取首页推荐视频列表 - Element homeList = doc.select("div.module-main").get(0); - Elements list = homeList.select("div.module-items>a"); - JSONArray videos = new JSONArray(); - for (int i = 0; i < list.size(); i++) { - Element vod = list.get(i); - String title = vod.attr("title"); - String cover = vod.selectFirst("img.lazyload").attr("data-original"); - String remark = vod.selectFirst("div.module-item-note").text(); - Matcher matcher = regexVid.matcher(vod.attr("href")); - if (!matcher.find()) - continue; - String id = matcher.group(1); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", remark); - videos.put(v); - } - result.put("list", videos); - } catch (Exception e) { - SpiderDebug.log(e); - } - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - /** - * 获取分类信息数据 - * - * @param tid 分类id - * @param pg 页数 - * @param filter 同homeContent方法中的filter - * @param extend 筛选参数{k:v, k1:v1} - * @return - */ - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { - try { - String[] urlParams = new String[]{"", "", "", "", "", "", "", "", "", "", "", ""}; - urlParams[0] = tid; - urlParams[8] = pg; - if (extend != null && extend.size() > 0) { - for (Iterator it = extend.keySet().iterator(); it.hasNext(); ) { - String key = it.next(); - String value = extend.get(key); - urlParams[Integer.parseInt(key)] = URLEncoder.encode(value); - } - } - // 获取分类数据的url - String url = siteUrl + "/vodshow/" + TextUtils.join("-", urlParams) + ".html"; - String html = OkHttpUtil.string(url, getHeaders(url)); - Document doc = Jsoup.parse(html); - JSONObject result = new JSONObject(); - int pageCount = 0; - int page = -1; - - // 取页码相关信息 - Elements pageInfo = doc.select("div[id=page]"); - if (pageInfo.size() == 0) { - page = Integer.parseInt(pg); - pageCount = page; - } else { - for (int i = 0; i < pageInfo.size(); i++) { - Element li = pageInfo.get(i); - Element a = li.selectFirst("a"); - if (a == null) - continue; - String span = doc.select("span.page-current").text(); - String wy = doc.select("div[id=page] a").last().attr("href"); - if (page == -1) { - page = Integer.parseInt(span); - } else { - page = 0; - } - Matcher matcher = regexPage.matcher(wy); - if (matcher.find()) { - pageCount = Integer.parseInt(matcher.group(1).split("-")[8]); - } else { - pageCount = 0; - } - break; - - } - } - JSONArray videos = new JSONArray(); - if (!html.contains("没有找到您想要的结果哦")) { - // 取当前分类页的视频列表 - Elements list = doc.select("div.module-main>div.module-items>a"); - for (int i = 0; i < list.size(); i++) { - Element vod = list.get(i); - String title = vod.attr("title"); - String cover = vod.selectFirst("img.lazyload").attr("data-original"); - String remark = vod.selectFirst("div.module-item-note").text(); - Matcher matcher = regexVid.matcher(vod.attr("href")); - if (!matcher.find()) - continue; - String id = matcher.group(1); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", remark); - videos.put(v); - } - } - result.put("page", page); - result.put("pagecount", pageCount); - result.put("limit", 48); - result.put("total", pageCount <= 1 ? videos.length() : pageCount * 48); - - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - /** - * 视频详情信息 - * - * @param ids 视频id - * @return - */ - @Override - public String detailContent(List ids) { - try { - // 视频详情url - String url = siteUrl + "/voddetail/" + ids.get(0) + ".html"; - Document doc = Jsoup.parse(OkHttpUtil.string(url, Headers())); - JSONObject result = new JSONObject(); - JSONObject vodList = new JSONObject(); - - // 取基本数据 - Elements sourcediv = doc.select("div.module-item-cover>div"); - String cover = sourcediv.get(0).select("div.module-item-pic>img").attr("data-original"); - String title = sourcediv.get(0).select("div.module-item-pic>img").attr("alt"); - String category = "", area = "", year = "", remark = "", director = "", actor = "", desc = ""; - Elements data = doc.select("div.module-info-tag-link"); - category = data.get(2).select("a").text(); - area = data.get(1).select("a").text(); - year = data.get(0).select("a").text(); - remark = doc.select("div.module-info-item-content").get(4).text(); - List actors = new ArrayList<>(); - Elements aa = doc.select("div.module-info-item-content").get(2).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("div.module-info-item-content").get(0).select("a"); - for (int j = 0; j < bb.size(); j++) { - directors.add(bb.get(j).text()); - } - director = TextUtils.join(",", directors); - desc = doc.selectFirst("div.module-info-introduction-content>p").text().trim(); - - vodList.put("vod_id", ids.get(0)); - vodList.put("vod_name", title); - vodList.put("vod_pic", cover); - vodList.put("type_name", category); - vodList.put("vod_year", year); - vodList.put("vod_area", area); - vodList.put("vod_remarks", remark); - vodList.put("vod_actor", actor); - vodList.put("vod_director", director); - vodList.put("vod_content", desc); - - Map vod_play = new TreeMap<>(new Comparator() { - @Override - public int compare(String o1, String 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 1; - } - }); - - // 取播放列表数据 - Elements sources = doc.select("div.module-tab-items-box>div>span"); - Elements sourceList = doc.select("div.module-list>div.module-play-list"); - - for (int i = 0; i < sources.size(); i++) { - Element source = sources.get(i); - String sourceName = source.text(); - boolean found = false; - for (Iterator it = playerConfig.keys(); it.hasNext(); ) { - String flag = it.next(); - if (playerConfig.getJSONObject(flag).getString("sh").equals(sourceName)) { - sourceName = playerConfig.getJSONObject(flag).getString("sh"); - found = true; - break; - } - } - if (!found) - continue; - String playList = ""; - Elements playListA = sourceList.get(i).select("div.module-play-list-content>a"); - List vodItems = new ArrayList<>(); - - for (int j = 0; j < playListA.size(); j++) { - Element vod = playListA.get(j); - Matcher matcher = regexPlay.matcher(vod.attr("href")); - if (!matcher.find()) - continue; - String playURL = matcher.group(1) + "-" + matcher.group(2) + "-" + matcher.group(3); - vodItems.add(vod.text() + "$" + playURL); - } - if (vodItems.size() > 0) - playList = TextUtils.join("#", vodItems); - - if (playList.length() == 0) - continue; - - vod_play.put(sourceName, playList); - } - - if (vod_play.size() > 0) { - 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 ""; - } - - /** - * 获取视频播放信息 - * - * @param flag 播放源 - * @param id 视频id - * @param vipFlags 所有可能需要vip解析的源 - * @return - */ - @Override - public String playerContent(String flag, String id, List vipFlags) { - try { - //定义播放用的headers - JSONObject headers = new JSONObject(); - //headers.put("Host", " cokemv.co"); - headers.put("origin", " https://cokemv.me"); - 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", " */*"); - headers.put("Accept-Language", " zh-CN,zh;q=0.9,en-US;q=0.3,en;q=0.7"); - headers.put("Accept-Encoding", " gzip, deflate"); - - - // 播放页 url - String url = siteUrl + "/vodplay/" + id + ".html"; - Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url))); - Elements allScript = doc.select("script"); - JSONObject result = new JSONObject(); - for (int i = 0; i < allScript.size(); i++) { - String scContent = allScript.get(i).html().trim(); - if (scContent.startsWith("var player_")) { // 取直链 - int start = scContent.indexOf('{'); - int end = scContent.lastIndexOf('}') + 1; - String json = scContent.substring(start, end); - JSONObject player = new JSONObject(json); - if (playerConfig.has(player.getString("from"))) { - JSONObject pCfg = playerConfig.getJSONObject(player.getString("from")); - String videoUrl = player.getString("url"); - String playUrl = pCfg.getString("pu"); - result.put("parse", pCfg.getInt("sn")); - result.put("playUrl", playUrl); - result.put("url", videoUrl); - result.put("header", headers.toString()); - } - break; - } - } - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - protected static HashMap sHeaders() { - HashMap headers = new HashMap<>(); - headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.62 Safari/537.36"); - headers.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"); - headers.put("Accept-encoding", "gzip, deflate, br"); - headers.put("Accept-language", "zh-SG,zh;q=0.9,en-GB;q=0.8,en;q=0.7,zh-CN;q=0.6"); - return headers; - } - - @Override - public String searchContent(String key, boolean quick) { - try { - //Google搜索镜像 - String url = "https://google.1qi777.com/search?q=site%3Acokemv.me%2Fvoddetail+" + URLEncoder.encode(key); - Document docs = Jsoup.parse(OkHttpUtil.string(url, sHeaders())); - JSONObject result = new JSONObject(); - JSONArray videos = new JSONArray(); - JSONObject v = new JSONObject(); - Elements list = docs.select("div.NJo7tc div.yuRUbf"); - for (int i = 0; i < list.size(); i++) { - Element doc = list.get(i); - String sourceName = doc.select("div.yuRUbf a h3").text(); - if (sourceName.contains(key)) { - String list1 = doc.select("div.yuRUbf a").attr("href"); - Document link = Jsoup.parse(OkHttpUtil.string(list1, getHeaders(url))); - Matcher matcher = regexVid.matcher(list1); - if (matcher.find()) { - - String group = matcher.group(1); - String cover = link.select("div.module-item-pic>img").attr("data-original"); - String title = link.select("div.module-item-pic>img").attr("alt"); - String remark = link.select("div.module-info-item-content").get(4).text(); - - v.put("vod_name", title); - v.put("vod_remarks", remark); - v.put("vod_id", group); - v.put("vod_pic", cover); - videos.put(v); - } - } - } - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } -} diff --git a/app/src/main/java/com/github/catvod/spider/Czsapp.java b/app/src/main/java/com/github/catvod/spider/Czsapp.java deleted file mode 100644 index 60f0e5a..0000000 --- a/app/src/main/java/com/github/catvod/spider/Czsapp.java +++ /dev/null @@ -1,435 +0,0 @@ -package com.github.catvod.spider; - -import android.text.TextUtils; -import android.util.Base64; - -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.AES; -import com.github.catvod.utils.CBC; -import com.github.catvod.utils.gZip; -import com.github.catvod.utils.okhttp.OKCallBack; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.StringReader; -import java.net.URLEncoder; -import java.security.MessageDigest; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import javax.crypto.Cipher; -import javax.crypto.spec.IvParameterSpec; -import javax.crypto.spec.SecretKeySpec; -import okhttp3.Call; -import okhttp3.OkHttpClient; -import okhttp3.Response; -import okhttp3.ResponseBody; - -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; - -public class Czsapp extends Spider { - private static final Pattern Y = Pattern.compile("\"([^\"]+)\";var [\\d\\w]+=function dncry.*md5.enc.Utf8.parse\\(\"([\\d\\w]+)\".*md5.enc.Utf8.parse\\(([\\d]+)\\)"); - private static final Pattern pY = Pattern.compile("video: \\{url: \"([^\"]+)\""); - private static final Pattern m = Pattern.compile("subtitle: \\{url:\"([^\"]+\\.vtt)\""); - private static final Pattern Q = Pattern.compile("src: '([^']+\\.css)',"); - private static final Pattern Db = Pattern.compile("/movie/(\\d+).html"); - private static final Pattern I = Pattern.compile("/page/(\\d+)"); - private static final Pattern d = Pattern.compile("/v_play/(.*)\\.html"); - private static final Pattern K = Pattern.compile("var vkey = ['\"]([^'\"]+)['\"]"); - private static final Pattern Oe = Pattern.compile("var fvkey = ['\"]([^'\"]+)['\"]"); - private static final Pattern fi = Pattern.compile("var ua = ['\"]([^'\"]+)['\"]"); - private static final Pattern M = Pattern.compile("var cip = ['\"]([^'\"]+)['\"]"); - private static final Pattern X = Pattern.compile("var time = ['\"]([^'\"]+)['\"]"); - private static final Pattern a = Pattern.compile("var url = ['\"]([^'\"]+)['\"]"); - - - private String mmd5(String str) { - try { - MessageDigest messageDigest = MessageDigest.getInstance("MD5"); - messageDigest.update(str.getBytes()); - byte[] digest = messageDigest.digest(); - StringBuilder sb = new StringBuilder(); - for (byte b : digest) { - String hexString = Integer.toHexString(b & 255); - while (hexString.length() < 2) { - hexString = "0" + hexString; - } - sb.append(hexString); - } - return sb.toString(); - } catch (Exception e) { - e.printStackTrace(); - return ""; - } - } - - public static Object[] loadsub(String sub) { - try { - OKCallBack.OKCallBackDefault callBack = new OKCallBack.OKCallBackDefault() { - @Override - protected void onFailure(Call call, Exception e) { - - } - - @Override - protected void onResponse(Response response) { - - } - }; - OkHttpClient YM = OkHttpUtil.defaultClient(); - OkHttpUtil.get(YM, sub, null, Headers(), callBack); - Response result = callBack.getResult(); - int code = result.code(); - if (code == 404) { - return new Object[]{200, "application/octet-stream", new ByteArrayInputStream("WEBVTT".getBytes())}; - } - ResponseBody body = result.body(); - byte[] bytes = body.bytes(); - byte[] tokenkey = Arrays.copyOfRange(bytes, 0, 16); - byte[] data = Arrays.copyOfRange(bytes, 16, bytes.length); - byte[] KS = CBC.CBC(data, tokenkey, tokenkey); - String vtt = gZip.KS(KS); - - - vtt = vtt.replaceAll("(\\d{2}:\\d{2}:\\d{2}.\\d{3}.+\\d{2}:\\d{2}:\\d{2}.\\d{3}).*", "$1"); - vtt = vtt.replaceAll("(\\d{2}:\\d{2}.\\d{3}).*?( --> )(\\d{2}:\\d{2}.\\d{3}).*", "00:$1$200:$3"); - vtt = vtt.replaceAll("<.*><.*>(.*)<.*><.*>", "$1"); - vtt = vtt.replaceAll("&(.*);", ""); - vtt = vtt.replaceAll(".*NOTE.*", ""); - BufferedReader br = new BufferedReader(new StringReader(vtt)); - ArrayList lines = new ArrayList<>(); - int captionNumber = 1; - String line = br.readLine(); - while (line != null) { - if (line.matches("\\d{2}:\\d{2}:\\d{2}.\\d{3}.+\\d{2}:\\d{2}:\\d{2}.\\d{3}")) { - if (lines.get(lines.size() - 1).trim().isEmpty()) { - lines.add(captionNumber + ""); - captionNumber++; - } - } - lines.add(line); - line = br.readLine(); - } - String join = TextUtils.join("\n", lines); - - return new Object[]{200, "application/octet-stream", new ByteArrayInputStream(join.getBytes())}; - } catch (Exception e) { - e.printStackTrace(); - SpiderDebug.log(e); - return null; - } - } - - public String categoryContent(String str, String str2, boolean z, HashMap hashMap) { - try { - JSONObject jSONObject = new JSONObject(); - Document doc = Jsoup.parse(OkHttpUtil.string("https://czspp.com/" + str + "/page/" + str2, Headers())); - int parseInt = Integer.parseInt(str2); - int parseInt2 = Integer.parseInt(str2); - Matcher matcher = I.matcher(doc.select("div.pagenavi_txt > a.extend").last().attr("href")); - if (matcher.find()) { - parseInt2 = Integer.parseInt(matcher.group(1)); - } - Elements jS = doc.select("div.mi_ne_kd > ul > li"); - JSONArray jSONArray = new JSONArray(); - for (Element next : jS) { - Matcher matcher2 = Db.matcher(next.select("a").attr("href")); - if (matcher2.find()) { - String group = matcher2.group(1); - String trim = next.select("img").attr("alt").trim(); - String trim2 = next.select("img").attr("data-original").trim(); - String trim3 = next.select("div.hdinfo > span").text().trim(); - JSONObject jSONObject2 = new JSONObject(); - jSONObject2.put("vod_id", group); - jSONObject2.put("vod_name", trim); - jSONObject2.put("vod_pic", trim2); - jSONObject2.put("vod_remarks", trim3); - jSONArray.put(jSONObject2); - } - } - jSONObject.put("list", jSONArray); - jSONObject.put("page", parseInt); - jSONObject.put("pagecount", parseInt2); - jSONObject.put("limit", 24); - jSONObject.put("total", parseInt2 <= 1 ? jSONArray.length() : parseInt2 * 24); - return jSONObject.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - public String detailContent(List list) { - String str2 = ""; - try { - - JSONObject jSONObject = new JSONObject(); - JSONArray jSONArray = new JSONArray(); - JSONObject jSONObject2 = new JSONObject(); - Document doc = Jsoup.parse(OkHttpUtil.string("https://czspp.com/movie/" + list.get(0) + ".html", Headers())); - String trim = doc.select("div.moviedteail_tt > h1").text().trim(); - String pY2 = doc.select("div.dyimg > img").attr("src"); - Iterator it = doc.select("ul.moviedteail_list > li").iterator(); - String str3 = str2; - String str4 = str3; - String str5 = str4; - String str6 = str5; - String str7 = str6; - String str8 = str7; - while (it.hasNext()) { - String trim2 = it.next().text().trim(); - if (trim2.length() >= 4) { - try { - String substring = trim2.substring(0, 2); - String substring2 = trim2.substring(3); - if (substring.equals("类型")) { - str3 = substring2; - } else if (substring.equals("地区")) { - str5 = substring2; - } else if (substring.equals("年份")) { - str4 = substring2; - } else if (substring.equals("导演")) { - str8 = substring2; - } else if (substring.equals("主演")) { - str7 = substring2; - } else if (substring.equals("豆瓣")) { - str6 = substring2; - } - } catch (Exception e) { - SpiderDebug.log(e); - } - } - } - jSONObject2.put("vod_id", list.get(0)); - jSONObject2.put("vod_name", trim); - jSONObject2.put("vod_pic", pY2); - jSONObject2.put("type_name", str3); - jSONObject2.put("vod_year", str4); - jSONObject2.put("vod_area", str5); - jSONObject2.put("vod_remarks", str6); - jSONObject2.put("vod_actor", str7); - jSONObject2.put("vod_director", str8); - jSONObject2.put("vod_content", doc.select("div.yp_context").text().trim()); - jSONObject2.put("vod_play_from", "厂长资源"); - ArrayList arrayList = new ArrayList(); - for (Element next : doc.select("div.paly_list_btn > a")) { - Matcher matcher = d.matcher(next.attr("href")); - if (matcher.find()) { - arrayList.add(next.text() + "$" + matcher.group(1)); - } - } - jSONObject2.put("vod_play_url", TextUtils.join("#", arrayList)); - jSONArray.put(jSONObject2); - jSONObject.put("list", jSONArray); - return jSONObject.toString(); - } catch (Exception e3) { - }return ""; - } - - public String homeContent(boolean z) { - try { - - JSONObject jSONObject = new JSONObject(); - Document doc = Jsoup.parse(OkHttpUtil.string("https://czspp.com", Headers())); - Elements jS = doc.select(".navlist > li > a"); - JSONArray jSONArray = new JSONArray(); - for (Element next : jS) { - String pY2 = next.attr("href"); - if (pY2.length() > 1) { - String substring = pY2.substring(1); - String trim = next.text().trim(); - JSONObject jSONObject2 = new JSONObject(); - jSONObject2.put("type_id", substring); - jSONObject2.put("type_name", trim); - jSONArray.put(jSONObject2); - } - } - jSONObject.put("class", jSONArray); - Elements jS2 = doc.select("div.mi_ne_kd > ul > li"); - JSONArray jSONArray2 = new JSONArray(); - for (Element next2 : jS2) { - Matcher matcher = Db.matcher(next2.select("a").attr("href")); - if (matcher.find()) { - String group = matcher.group(1); - String trim2 = next2.select("img").attr("alt").trim(); - String trim3 = next2.select("img").attr("data-original").trim(); - String trim4 = next2.select("div.hdinfo > span").text().trim(); - JSONObject jSONObject3 = new JSONObject(); - jSONObject3.put("vod_id", group); - jSONObject3.put("vod_name", trim2); - jSONObject3.put("vod_pic", trim3); - jSONObject3.put("vod_remarks", trim4); - jSONArray2.put(jSONObject3); - } - } - jSONObject.put("list", jSONArray2); - return jSONObject.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - protected static HashMap Headers() { - HashMap hashMap = new HashMap<>(); - hashMap.put("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36"); - return hashMap; - } - - - public String playerContent(String str, String str2, List list) { - String str3; - String str4; - Elements G8; - try { - String K2 = OkHttpUtil.string("https://czspp.com/v_play/" + str2 + ".html", Headers()); - Document UR = Jsoup.parse(K2); - Matcher matcher = Y.matcher(K2); - if (matcher.find()) { - String group = matcher.group(1); - String KEY = matcher.group(2); - String IV = matcher.group(3); - String str5 = AES.CBC(group, KEY, IV); - Matcher matcher2 = pY.matcher(str5); - str3 = matcher2.find() ? matcher2.group(1) : ""; - Matcher matcher3 = m.matcher(str5); - str4 = matcher3.find() ? matcher3.group(1) : ""; - } else { - str4 = ""; - str3 = str4; - } - if (TextUtils.isEmpty(str3) && (G8 = UR.select("iframe.viframe")) != null) { - String pY2 = G8.attr("src"); - if (pY2.contains("jx.xmflv.com")) { - String K3 = OkHttpUtil.string(pY2, Headers()); - Matcher matcher4 = X.matcher(K3); - if (!matcher4.find()) { - return ""; - } - String group2 = matcher4.group(1); - Matcher matcher5 = a.matcher(K3); - if (!matcher5.find()) { - return ""; - } - String group3 = matcher5.group(1); - String K4 = OkHttpUtil.string("https://jx.xmflv.com/player.php?time=" + group2 + "&url=" + group3, Headers()); - Matcher matcher6 = K.matcher(K4); - if (!matcher6.find()) { - return ""; - } - String group4 = matcher6.group(1); - Matcher matcher7 = Oe.matcher(K4); - if (!matcher7.find()) { - return ""; - } - String group5 = matcher7.group(1); - Matcher matcher8 = fi.matcher(K4); - if (!matcher8.find()) { - return ""; - } - String group6 = matcher8.group(1); - Matcher matcher9 = M.matcher(K4); - if (!matcher9.find()) { - return ""; - } - String group7 = matcher9.group(1); - Matcher matcher10 = X.matcher(K4); - if (!matcher10.find()) { - return ""; - } - String group8 = matcher10.group(1); - byte[] bytes3 = mmd5(group5).getBytes(); - byte[] bytes4 = "UVE1NTY4MDY2NQ==".getBytes(); - Cipher cipher2 = Cipher.getInstance("AES/CBC/NoPadding"); - cipher2.init(1, new SecretKeySpec(bytes3, "AES"), new IvParameterSpec(bytes4)); - String encodeToString = Base64.encodeToString(cipher2.doFinal(group5.getBytes()), 0); - OKCallBack.OKCallBackDefault callBack = new OKCallBack.OKCallBackDefault() { - - public void onResponse(Response response) { - } - - @Override - protected void onFailure(Call call, Exception exc) { - } - }; - HashMap hashMap = new HashMap(); - hashMap.put("url", group3); - hashMap.put("time", group8); - hashMap.put("ua", group6); - hashMap.put("cip", group7); - hashMap.put("vkey", group4); - hashMap.put("fvkey", encodeToString); - OkHttpUtil.post(OkHttpUtil.defaultClient(), "https://jx.xmflv.com/xmflv-1.SVG", hashMap, Headers(), callBack); - str3 = new JSONObject(callBack.getResult().body().string()).getString("url"); - } else { - Matcher matcher11 = Q.matcher(OkHttpUtil.string(pY2, Headers())); - if (matcher11.find()) { - str3 = matcher11.group(1); - } - } - } - JSONObject jSONObject = new JSONObject(); - jSONObject.put("parse", "0"); - jSONObject.put("playUrl", ""); - jSONObject.put("url", str3); - jSONObject.put("header", ""); - if (!TextUtils.isEmpty(str4)) { - jSONObject.put("subf", "/vtt/utf-8"); - jSONObject.put("subt", Proxy.localProxyUrl() + "?do=czspp&url=" + URLEncoder.encode(str4)); - } - return jSONObject.toString(); - } catch (Exception e) { - e.printStackTrace(); - SpiderDebug.log(e); - return ""; - } - } - - public String searchContent(String str, boolean z) { - try { - JSONObject jSONObject = new JSONObject(); - Elements jS = Jsoup.parse(OkHttpUtil.string("https://czspp.com/xssearch?q=" + URLEncoder.encode(str), Headers())).select("div.mi_ne_kd > ul > li"); - JSONArray jSONArray = new JSONArray(); - for (Element next : jS) { - Matcher matcher = Db.matcher(next.select("a").attr("href")); - JSONObject jSONObject2 = new JSONObject(); - if (matcher.find()) { - String group = matcher.group(1); - String trim = next.select("img").attr("alt").trim(); - if (trim.contains(str)) { - String trim2 = next.select("img").attr("src").trim(); - if (next.hasClass(".jidi")) { - String remark = next.select(".jidi span").text(); - jSONObject2.put("vod_remarks", remark); - } else { - String id = next.select("a").attr("href"); - Document doc = Jsoup.parse(OkHttpUtil.string(id, Headers())); - String remark = doc.select("ul.moviedteail_list li span").get(0).text(); - jSONObject2.put("vod_id", group); - jSONObject2.put("vod_name", trim); - jSONObject2.put("vod_pic", trim2); - jSONObject2.put("vod_remarks", remark); - jSONArray.put(jSONObject2); - } - } - } - } - jSONObject.put("list", jSONArray); - return jSONObject.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/Gitcafe.java b/app/src/main/java/com/github/catvod/spider/Gitcafe.java deleted file mode 100644 index 71c97ec..0000000 --- a/app/src/main/java/com/github/catvod/spider/Gitcafe.java +++ /dev/null @@ -1,309 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.util.TimeUtils; - -import com.github.catvod.crawler.Spider; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.json.JSONArray; -import org.json.JSONObject; - -public class Gitcafe extends Spider { - private Map a; - private List b; - private PushAgent pushAgent; - private JSONObject d; - private JSONObject Home; - - - @Override - public void init(Context context, String extend) { - super.init(context, extend); - pushAgent = new PushAgent(); - pushAgent.init(context, extend); - try { - d = new JSONObject("{\"hyds\":\"华语电视\",\"rhds\":\"日韩电视\",\"omds\":\"欧美电视\",\"qtds\":\"其他电视\",\"hydy\":\"华语电影\",\"rhdy\":\"日韩电影\",\"omdy\":\"欧美电影\",\"qtdy\":\"其他电影\",\"hydm\":\"华语动漫\",\"rhdm\":\"日韩动漫\",\"omdm\":\"欧美动漫\",\"jlp\":\"纪录片\",\"zyp\":\"综艺片\",\"jypx\":\"教育培训\",\"qtsp\":\"其他视频\",\"hyyy\":\"华语音乐\",\"rhyy\":\"日韩音乐\",\"omyy\":\"欧美音乐\",\"qtyy\":\"其他音乐\",\"kfrj\":\"娱乐软件\",\"xtrj\":\"系统软件\",\"wlrj\":\"网络软件\",\"bgrj\":\"办公软件\",\"qtrj\":\"其他软件\",\"mh\":\"漫画\",\"xs\":\"小说\",\"cbs\":\"出版书\",\"zspx\":\"知识培训\",\"qtwd\":\"其他文档\",\"bz\":\"壁纸\",\"rw\":\"人物\",\"fj\":\"风景\",\"qttp\":\"其他图片\",\"qt\":\"其他\"}"); - } catch (Exception e) { - e.printStackTrace(); - } - - ArrayList arrayList = new ArrayList(); - this.b = arrayList; - arrayList.add("hydm"); - List list = this.b; - list.add("hyds"); - List list2 = this.b; - list2.add("hydy"); - List list3 = this.b; - list3.add("omdm"); - List list4 = this.b; - list4.add("omds"); - List list5 = this.b; - list5.add("omdy"); - List list6 = this.b; - list6.add("rhdm"); - List list7 = this.b; - list7.add("rhds"); - List list8 = this.b; - list8.add("rhdy"); - List list9 = this.b; - list9.add("qtds"); - List list10 = this.b; - list10.add("qtdy"); - List list11 = this.b; - list11.add("qtsp"); - List list12 = this.b; - list12.add("jlp"); - List list13 = this.b; - list13.add("zyp"); - } - - protected HashMap LT() { - HashMap hashMap = new HashMap<>(); - hashMap.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"); - return hashMap; - } - - @Override - public String categoryContent(String str, String str2, boolean z, HashMap hashMap) { - try { - Map allData = getAllData(this, this, this); - JSONArray jSONArray = new JSONArray(); - Set keySet = allData.keySet(); - for (String str3 : keySet) { - JSONObject jSONObject = (JSONObject) allData.get(str3); - if (jSONObject.has("cat")) { - String string = jSONObject.getString("cat"); - if (string.equals(str)) { - JSONObject jSONObject2 = new JSONObject(); - String sb2 = "https://www.aliyundrive.com/s/" + jSONObject.getString("key"); - jSONObject2.put("vod_id", sb2); - String string2 = jSONObject.getString("title"); - jSONObject2.put("vod_name", string2); - jSONObject2.put("vod_pic", "https://www.lgstatic.com/i/image2/M01/15/7E/CgoB5lysLXCADg6ZAABapAHUnQM321.jpg"); - jSONArray.put(jSONObject2); - } - } - } - JSONObject jSONObject3 = new JSONObject(); - jSONObject3.put("page", 1); - jSONObject3.put("pagecount", 1); - int length = jSONArray.length(); - jSONObject3.put("limit", length); - TimeUtils.getTimeZoneDatabaseVersion(); - int length2 = jSONArray.length(); - jSONObject3.put("total", length2); - jSONObject3.put("list", jSONArray); - return jSONObject3.toString(); - } catch (Exception e) { - e.printStackTrace(); - return ""; - } - } - - @Override - public String detailContent(List list) { - try { - Map allData = getAllData(this, this, this); - JSONObject jSONObject = new JSONObject(pushAgent.detailContent(list)); - JSONArray jSONArray = jSONObject.getJSONArray("list"); - int i = 0; - while (true) { - if (i >= list.size()) { - break; - } - if (i >= jSONArray.length()) { - break; - } - JSONObject jSONObject2 = jSONArray.getJSONObject(i); - Pattern pattern = PushAgent.Folder; - Matcher matcher = pattern.matcher(list.get(i)); - if (matcher.find()) { - String group = matcher.group(1); - if (allData.containsKey(group)) { - JSONObject jSONObject3 = (JSONObject) allData.get(group); - jSONObject2.put("vod_pic", "https://www.lgstatic.com/i/image2/M01/15/7E/CgoB5lysLXCADg6ZAABapAHUnQM321.jpg"); - - } - } - i++; - } - return jSONObject.toString(); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - public synchronized Map getAllData(Object obj, Object obj2, Object obj3) { - Map map; - obj.getClass(); - obj2.getClass(); - obj3.getClass(); - synchronized (this) { - try { - if (a == null) { - HashMap hashMap = new HashMap(); - HashMap LT = LT(); - for (Iterator iter = b.iterator(); iter.hasNext(); ) { - String element = iter.next(); - String content = OkHttpUtil.string("https://gitcafe.net/alipaper/data/" + element + ".json", LT); - JSONObject data = new JSONObject(content); - JSONArray jSONArray = data.getJSONArray("data"); - for (int i = 0; i < jSONArray.length(); i++) { - JSONObject jSONObject = jSONArray.getJSONObject(i); - hashMap.put(jSONObject.getString("key"), jSONObject); - } - } - a = hashMap; - } - } catch (Exception e) { - e.printStackTrace(); - } - map = a; - } - return map; - } - - public JSONObject getHomeData(Object obj) { - obj.getClass(); - try { - if (Home == null) { - HashMap LT = LT(); - Home = new JSONObject(OkHttpUtil.string("https://gitcafe.net/alipaper/home.json", LT)); - } - } catch (Exception e) { - e.printStackTrace(); - } - return Home; - } - - @Override - public String homeContent(boolean z) { - String str = "https://www.lgstatic.com/i/image2/M01/15/7E/CgoB5lysLXCADg6ZAABapAHUnQM321.jpg"; - - try { - JSONObject homeData = getHomeData(this); - JSONObject jSONObject = homeData.getJSONObject("info"); - JSONArray jSONArray = jSONObject.getJSONArray("new"); - JSONArray jSONArray2 = new JSONArray(); - List list = b; - Iterator it = list.iterator(); - while (true) { - if (!it.hasNext()) { - break; - } - String next = it.next(); - JSONObject jSONObject2 = new JSONObject(); - jSONObject2.put("type_id", next); - JSONObject jSONObject3 = d; - String string = jSONObject3.getString(next); - jSONObject2.put("type_name", string); - jSONArray2.put(jSONObject2); - } - Map allData = getAllData(this, this, this); - JSONArray jSONArray3 = new JSONArray(); - for (int i = 0; i < jSONArray.length(); i++) { - JSONObject jSONObject4 = jSONArray.getJSONObject(i); - String string2 = jSONObject4.getString("cat"); - List list2 = b; - if (list2.contains(string2)) { - String string3 = jSONObject4.getString("key"); - if (allData.containsKey(string3)) { - JSONObject jSONObject5 = (JSONObject) allData.get(string3); - JSONObject jSONObject6 = new JSONObject(); - StringBuilder sb = new StringBuilder(); - sb.append("https://www.aliyundrive.com/s/"); - String string4 = jSONObject4.getString("key"); - sb.append(string4); - String sb2 = sb.toString(); - jSONObject6.put("vod_id", sb2); - String string5 = jSONObject4.getString("title"); - jSONObject6.put("vod_name", string5); - jSONObject6.put("vod_pic", str); - String string6 = jSONObject4.getString("date"); - jSONObject6.put("vod_remarks", string6); - jSONArray3.put(jSONObject6); - - } - JSONObject jSONObject62 = new JSONObject(); - StringBuilder sb3 = new StringBuilder(); - sb3.append("https://www.aliyundrive.com/s/"); - String string42 = jSONObject4.getString("key"); - sb3.append(string42); - String sb22 = sb3.toString(); - jSONObject62.put("vod_id", sb22); - String string52 = jSONObject4.getString("title"); - jSONObject62.put("vod_name", string52); - jSONObject62.put("vod_pic", str); - String string62 = jSONObject4.getString("date"); - jSONObject62.put("vod_remarks", string62); - jSONArray3.put(jSONObject62); - } - } - JSONObject jSONObject7 = new JSONObject(); - jSONObject7.put("class", jSONArray2); - jSONObject7.put("list", jSONArray3); - return jSONObject7.toString(); - } catch (Exception e) { - e.printStackTrace(); - return ""; - } - } - - @Override - public String playerContent(String str, String str2, List list) { - return pushAgent.playerContent(str, str2, list); - } - - @Override - public String searchContent(String str, boolean z) { - try { - Map allData = getAllData(this, this, this); - JSONArray jSONArray = new JSONArray(); - Set keySet = allData.keySet(); - Iterator it = keySet.iterator(); - while (true) { - if (it.hasNext()) { - Object next = it.next(); - JSONObject jSONObject = (JSONObject) allData.get(next); - if (jSONObject.has("cat")) { - String string = jSONObject.getString("cat"); - List list = b; - if (list.contains(string)) { - String string2 = jSONObject.getString("title"); - if (string2.contains(str)) { - JSONObject jSONObject2 = new JSONObject(); - StringBuilder sb = new StringBuilder(); - sb.append("https://www.aliyundrive.com/s/"); - String string3 = jSONObject.getString("key"); - sb.append(string3); - String sb2 = sb.toString(); - jSONObject2.put("vod_id", sb2); - jSONObject2.put("vod_name", string2); - jSONArray.put(jSONObject2); - } - } - } - } else { - JSONObject jSONObject3 = new JSONObject(); - jSONObject3.put("list", jSONArray); - return jSONObject3.toString(); - } - } - } catch (Exception e) { - e.printStackTrace(); - return ""; - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/IKan.java b/app/src/main/java/com/github/catvod/spider/IKan.java deleted file mode 100644 index 6a43855..0000000 --- a/app/src/main/java/com/github/catvod/spider/IKan.java +++ /dev/null @@ -1,234 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.content.SharedPreferences; -import android.util.Base64; - -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.Misc; -import com.github.catvod.utils.okhttp.OKCallBack; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.select.Elements; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.TreeMap; -import java.util.concurrent.TimeUnit; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import okhttp3.Call; -import okhttp3.Cookie; -import okhttp3.CookieJar; -import okhttp3.HttpUrl; -import okhttp3.OkHttpClient; - -public class IKan extends AppYsV2 { - private final OkHttpClient y; - private boolean K = false; - private Context cccc = null; - - public IKan() { - OkHttpClient.Builder builder = new OkHttpClient.Builder(); - TimeUnit timeUnit = TimeUnit.SECONDS; - y = builder.readTimeout(15L, timeUnit).writeTimeout(15L, timeUnit).connectTimeout(15L, timeUnit).cookieJar(new CookieJar() { - final List Mf = new ArrayList(); - - public List loadForRequest(HttpUrl httpUrl) { - ArrayList arrayList = new ArrayList(); - ArrayList arrayList2 = new ArrayList(); - for (Cookie cookie : Mf) { - if (cookie.expiresAt() < System.currentTimeMillis()) { - arrayList.add(cookie); - } else if (cookie.matches(httpUrl)) { - arrayList2.add(cookie); - } - } - Mf.removeAll(arrayList); - return arrayList2; - } - - public void saveFromResponse(HttpUrl httpUrl, List list) { - Mf.addAll(list); - } - }).retryOnConnectionFailure(true).build(); - } - - private void S(final String str, final String str2) { - HashMap hashMap = new HashMap(); - hashMap.put("user_name", str); - hashMap.put("user_pwd", str2); - hashMap.put("user_pwd2", str2); - try { - HashMap hashMap2 = new HashMap(); - hashMap2.put("Host", "tvcms.ikan6.vip"); - hashMap2.put("User-Agent", "okhttp/3.11.0"); - OkHttpUtil.post(this.y, "http://tvcms.ikan6.vip/api.php/gctvapi.auth/register", hashMap, hashMap2, new OKCallBack.OKCallBackString() { - @Override - public void onFailure(Call call, Exception exc) { - } - - public void onResponse(String str3) { - try { - if (new JSONObject(str3).optInt("code", 0) == 200) { - cccc.getSharedPreferences("spider_IKan", 0).edit().putString("user", str).putString("pwd", str2).commit(); - login(str, str2); - } - } catch (JSONException unused) { - } - } - }); - } catch (Throwable unused) { - } - } - - private void iq() { - SharedPreferences sharedPreferences = cccc.getSharedPreferences("spider_IKan", 0); - try { - String string = sharedPreferences.getString("user", null); - String string2 = sharedPreferences.getString("pwd", null); - if (!(string == null || string2 == null)) { - login(string, string2); - return; - } - } catch (Throwable unused) { - } - S(random(18), random(8)); - } - - public static String random(int i) { - Random random = new Random(); - StringBuffer stringBuffer = new StringBuffer(); - for (int i2 = 0; i2 < i; i2++) { - stringBuffer.append("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456".charAt(random.nextInt(59))); - } - return stringBuffer.toString(); - } - - - public void init(Context context) { - cccc = context; - } - - public void login(String str, String str2) { - HashMap headers = new HashMap(); - headers.put("user_name", str); - headers.put("user_pwd", str2); - try { - HashMap hashMap2 = new HashMap(); - hashMap2.put("Host", "tvcms.ikan6.vip"); - hashMap2.put("User-Agent", "okhttp/3.11.0"); - OkHttpUtil.post(y, "http://tvcms.ikan6.vip/api.php/gctvapi.auth/login", headers, hashMap2, new OKCallBack.OKCallBackString() { - @Override - public void onFailure(Call call, Exception exc) { - } - - public void onResponse(String str3) { - try { - if (new JSONObject(str3).optInt("code", 0) == 200) { - K = true; - } - } catch (JSONException unused) { - } - } - }); - } catch (Throwable unused) { - } - } - - private HashMap getHeaders(String URL) { - HashMap headers = new HashMap<>(); - headers.put("User-Agent", "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Mobile Safari/537.36"); - return headers; - } - - @Override - public String homeVideoContent() { - try { - String url = "http://tvcms.ikan6.vip/api.php/gctvapi.vod"; - String json = OkHttpUtil.string(url, getHeaders(url)); - JSONObject obj = new JSONObject(json); - JSONArray videos = new JSONArray(); - JSONArray jsonArray = obj.getJSONObject("data").getJSONArray("list"); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject vObj = jsonArray.getJSONObject(i); - String vid = vObj.getString("vod_id"); - JSONObject v = new JSONObject(); - v.put("vod_id", vid); - v.put("vod_name", vObj.getString("vod_name")); - v.put("vod_pic", vObj.getString("vod_pic")); - v.put("vod_remarks", vObj.getString("vod_remarks")); - videos.put(v); - } - JSONObject result = new JSONObject(); - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - @Override - public String playerContent(String str, String str2, List list) { - try { - if (str.equals("lekanzyw")) { - if (!K) { - iq(); - } - - JSONObject headers = new JSONObject(); - 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", " */*"); - headers.put("Accept-Language", " zh-CN,zh;q=0.9,en-US;q=0.3,en;q=0.7"); - headers.put("Accept-Encoding", " gzip, deflate"); - headers.put("Connection", " Keep-Alive"); - - String parseUrl = "https://player.4kan.top/?url=" + str2; - Document doc = Jsoup.parse(OkHttpUtil.string(parseUrl, null)); - Pattern pattern = Pattern.compile("(?<=getrandom\\S\").*?(?=\")"); - Elements allScripts = doc.select("body script"); - for (int j = 0; j < allScripts.size(); j++) { - String scContents = allScripts.get(j).html().trim(); - Matcher matcher = pattern.matcher(scContents); - if (!matcher.find()) - continue; - String players = new String(Base64.decode(matcher.group(0), Base64.DEFAULT)); - int start = players.indexOf("http"); - int end = players.lastIndexOf("key=") + 36; - String url = players.substring(start, end); - Map> respHeaders = new TreeMap<>(); - OkHttpUtil.stringNoRedirect(url, null, respHeaders); - String redLoc = OkHttpUtil.getRedirectLocation(respHeaders); - - - JSONObject result = new JSONObject(); - result.put("parse", 0); - result.put("playUrl", ""); - result.put("url", redLoc); - result.put("header", headers.toString()); - return result.toString(); - - } - } - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - @Override - public void init(Context context, String str) { - super.init(context, "http://tvcms.ikan6.vip/api.php/gctvapi.vod"); - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/Juhi.java b/app/src/main/java/com/github/catvod/spider/Juhi.java deleted file mode 100644 index 8d33a94..0000000 --- a/app/src/main/java/com/github/catvod/spider/Juhi.java +++ /dev/null @@ -1,472 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.text.TextUtils; - -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.Misc; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import org.json.JSONArray; -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.URLEncoder; -import java.util.ArrayList; -import java.util.Comparator; -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; - -public class Juhi extends Spider { - - private static final String siteUrl = "https://www.juhi.cc/"; - private static final String siteHost = "juhi.cc"; - - protected JSONObject playerConfig; - protected JSONObject filterConfig; - - protected Pattern regexCategory = Pattern.compile("/vodtype/(\\d+)/"); - protected Pattern regexVid = Pattern.compile("/voddetail/(\\d+)/"); - protected Pattern regexPlay = Pattern.compile("/vodplay/(\\d+)-(\\d+)-(\\d+)/"); - protected Pattern regexPage = Pattern.compile("/vodshow/(\\S+)/"); - - @Override - public void init(Context context) { - super.init(context); - try { - playerConfig = new JSONObject("{\"tkm3u8\":{\"sh\":\"✦剧嗨专线\",\"pu\":\"https://jx.huishij.com/yun/?url=\",\"sn\":1,\"or\":999},\"if101\":{\"sh\":\"✦蓝光超清\",\"pu\":\"\",\"sn\":0,\"or\":999},\"dbm3u8\":{\"sh\":\"北美高清①\",\"pu\":\"\",\"sn\":0,\"or\":999},\"dbyun\":{\"sh\":\"北美高清②\",\"pu\":\"\",\"sn\":0,\"or\":999},\"wjm3u8\":{\"sh\":\"北美高清③\",\"pu\":\"\",\"sn\":0,\"or\":999},\"kbm3u8\":{\"sh\":\"全球线路①\",\"pu\":\"\",\"sn\":0,\"or\":999},\"hnyun\":{\"sh\":\"全球线路②\",\"pu\":\"\",\"sn\":0,\"or\":999},\"hnm3u8\":{\"sh\":\"全球线路③\",\"pu\":\"\",\"sn\":0,\"or\":999},\"kbzy\":{\"sh\":\"全球线路④\",\"pu\":\"\",\"sn\":0,\"or\":999},\"fanqie\":{\"sh\":\"全球线路⑤\",\"pu\":\"\",\"sn\":0,\"or\":999},\"kuaiyun\":{\"sh\":\"快速线路\",\"pu\":\"https://qimihe.com/?url=\",\"sn\":1,\"or\":999},\"leyum3u8\":{\"sh\":\"午夜专线1\",\"pu\":\"\",\"sn\":0,\"or\":999},\"lym3u8\":{\"sh\":\"午夜专线2\",\"pu\":\"\",\"sn\":0,\"or\":999},\"dplayer\":{\"sh\":\"DPlayer-H5播放器\",\"pu\":\"\",\"sn\":0,\"or\":999},\"videojs\":{\"sh\":\"videojs-H5播放器\",\"pu\":\"\",\"sn\":0,\"or\":999},\"iva\":{\"sh\":\"iva-H5播放器\",\"pu\":\"\",\"sn\":0,\"or\":999},\"iframe\":{\"sh\":\"iframe外链数据\",\"pu\":\"\",\"sn\":0,\"or\":999},\"link\":{\"sh\":\"外链数据\",\"pu\":\"\",\"sn\":0,\"or\":999},\"swf\":{\"sh\":\"Flash文件\",\"pu\":\"\",\"sn\":0,\"or\":999},\"flv\":{\"sh\":\"Flv文件\",\"pu\":\"\",\"sn\":0,\"or\":999},\"bjyun\":{\"sh\":\"bjyun\",\"pu\":\"\",\"sn\":0,\"or\":999},\"bjm3u8\":{\"sh\":\"bjm3u8\",\"pu\":\"\",\"sn\":0,\"or\":999},\"wasu\":{\"sh\":\"华数直连\",\"pu\":\"\",\"sn\":0,\"or\":999},\"funshion\":{\"sh\":\"风行直连\",\"pu\":\"\",\"sn\":0,\"or\":999},\"pptv\":{\"sh\":\"PPTV直连\",\"pu\":\"https://jx.m3u8.tv/jiexi/?url=\",\"sn\":1,\"or\":999},\"letv\":{\"sh\":\"乐视直连\",\"pu\":\"https://jx.m3u8.tv/jiexi/?url=\",\"sn\":1,\"or\":999},\"mgtv\":{\"sh\":\"芒果直连\",\"pu\":\"https://jx.m3u8.tv/jiexi/?url=\",\"sn\":1,\"or\":999},\"youku\":{\"sh\":\"优酷直连\",\"pu\":\"https://jx.m3u8.tv/jiexi/?url=\",\"sn\":1,\"or\":999},\"qiyi\":{\"sh\":\"爱奇艺直连\",\"pu\":\"https://jx.m3u8.tv/jiexi/?url=\",\"sn\":1,\"or\":999},\"qq\":{\"sh\":\"腾讯直连\",\"pu\":\"https://jx.m3u8.tv/jiexi/?url=\",\"sn\":1,\"or\":999},\"m1905\":{\"sh\":\"M1905直连\",\"pu\":\"https://jx.m3u8.tv/jiexi/?url=\",\"sn\":1,\"or\":999},\"sohu\":{\"sh\":\"搜狐直连\",\"pu\":\"https://jx.m3u8.tv/jiexi/?url=\",\"sn\":1,\"or\":999}}"); - filterConfig = new JSONObject("{\"20\":[{\"key\":\"0\",\"name\":\"类型\",\"value\":[{\"n\":\"全部\",\"v\":\"20\"},{\"n\":\"动作片\",\"v\":\"24\"},{\"n\":\"喜剧片\",\"v\":\"25\"},{\"n\":\"愛情片\",\"v\":\"26\"},{\"n\":\"科幻片\",\"v\":\"27\"},{\"n\":\"恐怖片\",\"v\":\"28\"},{\"n\":\"劇情片\",\"v\":\"11\"},{\"n\":\"戰爭片\",\"v\":\"30\"},{\"n\":\"动画电影\",\"v\":\"33\"}]},{\"key\":1,\"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\":\"意大利\"},{\"n\":\"西班牙\",\"v\":\"西班牙\"},{\"n\":\"加拿大\",\"v\":\"加拿大\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":11,\"name\":\"年份\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"}]},{\"key\":2,\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"21\":[{\"key\":\"tid\",\"name\":\"类型\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"国产剧\",\"v\":\"34\"},{\"n\":\"港剧\",\"v\":\"35\"},{\"n\":\"韩剧\",\"v\":\"37\"},{\"n\":\"欧美剧\",\"v\":\"36\"},{\"n\":\"日本剧\",\"v\":\"38\"},{\"n\":\"台湾剧\",\"v\":\"39\"},{\"n\":\"海外剧\",\"v\":\"40\"}]},{\"key\":11,\"name\":\"年份\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"}]},{\"key\":2,\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"22\":[{\"key\":0,\"name\":\"类型\",\"value\":[{\"n\":\"全部\",\"v\":\"22\"},{\"n\":\"大陆综艺\",\"v\":\"41\"},{\"n\":\"港台综艺\",\"v\":\"42\"},{\"n\":\"日韩综艺\",\"v\":\"43\"},{\"n\":\"欧美综艺\",\"v\":\"44\"}]},{\"key\":11,\"name\":\"年份\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"}]},{\"key\":2,\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"23\":[{\"key\":0,\"name\":\"类型\",\"value\":[{\"n\":\"全部\",\"v\":\"23\"},{\"n\":\"国产动漫\",\"v\":\"45\"},{\"n\":\"日本动漫\",\"v\":\"46\"},{\"n\":\"欧美动漫\",\"v\":\"47\"}]},{\"key\":11,\"name\":\"年份\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"}]},{\"key\":2,\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}]}"); - } catch (JSONException e) { - SpiderDebug.log(e); - } - } - - /** - * 爬虫headers - * - * @param url - * @return - */ - protected HashMap getHeaders(String url) { - HashMap headers = new HashMap<>(); - headers.put("method", "GET"); - headers.put("Host", siteHost); - headers.put("Upgrade-Insecure-Requests", "1"); - headers.put("DNT", "1"); - 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; - } - - /** - * 获取分类数据 + 首页最近更新视频列表数据 - * - * @param filter 是否开启筛选 关联的是 软件设置中 首页数据源里的筛选开关 - * @return - */ - @Override - public String homeContent(boolean filter) { - try { - Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl, getHeaders(siteUrl))); - // 分类节点 - Elements elements = doc.select("ul.nav-menu > li > a"); - JSONArray classes = new JSONArray(); - for (Element ele : elements) { - //分类名 - String name = ele.text(); - boolean show = name.equals("电影") || - name.equals("电视剧") || - name.equals("综艺") || - name.equals("动漫"); - if (show) { - Matcher mather = regexCategory.matcher(ele.attr("href")); - if (!mather.find()) - continue; - // 把分类的id和名称取出来加到列表里 - String id = mather.group(1).trim(); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("type_id", id); - jsonObject.put("type_name", name); - classes.put(jsonObject); - } - } - JSONObject result = new JSONObject(); - if (filter) { - result.put("filters", filterConfig); - } - result.put("class", classes); - try { - // 取首页推荐视频列表 - Element homeList = doc.select("ul.myui-vodlist").get(0); - Elements list = homeList.select("li > div > a"); - JSONArray videos = new JSONArray(); - for (int i = 0; i < list.size(); i++) { - Element vod = list.get(i); - String title = vod.attr("title"); - String cover = vod.attr("data-original"); - String remark = vod.selectFirst("span.pic-text").text(); - Matcher matcher = regexVid.matcher(vod.attr("href")); - if (!matcher.find()) - continue; - String id = matcher.group(1); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", remark); - videos.put(v); - } - result.put("list", videos); - } catch (Exception e) { - SpiderDebug.log(e); - } - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - /** - * 获取分类信息数据 - * - * @param tid 分类id - * @param pg 页数 - * @param filter 同homeContent方法中的filter - * @param extend 筛选参数{k:v, k1:v1} - * @return - */ - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { - try { - String[] urlParams = new String[]{"", "", "", "", "", "", "", "", "", "", "", ""}; - urlParams[0] = tid; - urlParams[8] = pg; - if (extend != null && extend.size() > 0) { - for (Iterator it = extend.keySet().iterator(); it.hasNext(); ) { - String key = it.next(); - String value = extend.get(key); - urlParams[Integer.parseInt(key)] = URLEncoder.encode(value); - } - } - // 获取分类数据的url - String url = siteUrl + "/vodshow/" + TextUtils.join("-", urlParams) + "/"; - String html = OkHttpUtil.string(url, getHeaders(url)); - Document doc = Jsoup.parse(html); - JSONObject result = new JSONObject(); - int pageCount = 0; - int page = -1; - - - // 取页码相关信息 - Elements pageInfo = doc.select("ul.myui-page>li"); - if (pageInfo.size() == 0) { - page = Integer.parseInt(pg); - pageCount = page; - } else { - for (int i = 0; i < pageInfo.size(); i++) { - Element li = pageInfo.get(i); - Element a = li.selectFirst("a"); - if (a == null) - continue; - String name = a.text(); - if (page == -1 && a.hasClass("btn-warm")) { - Matcher matcher = regexPage.matcher(a.attr("href")); - if (matcher.find()) { - page = Integer.parseInt(matcher.group(1).split("-")[8]); - } else { - page = 0; - } - } - if (name.equals("尾页")) { - Matcher matcher = regexPage.matcher(a.attr("href")); - if (matcher.find()) { - pageCount = Integer.parseInt(matcher.group(1).split("-")[8]); - } else { - pageCount = 0; - } - break; - } - } - } - - JSONArray videos = new JSONArray(); - if (!html.contains("没有找到您想要的结果哦")) { - // 取当前分类页的视频列表 - Elements list = doc.select("ul.myui-vodlist > li > div > a"); - for (int i = 0; i < list.size(); i++) { - Element vod = list.get(i); - String title = vod.attr("title"); - String cover = vod.attr("data-original"); - String remark = vod.selectFirst("span.pic-text").text(); - Matcher matcher = regexVid.matcher(vod.attr("href")); - if (!matcher.find()) - continue; - String id = matcher.group(1); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", remark); - videos.put(v); - } - } - result.put("page", page); - result.put("pagecount", pageCount); - result.put("limit", 48); - result.put("total", pageCount <= 1 ? videos.length() : pageCount * 48); - - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - /** - * 视频详情信息 - * - * @param ids 视频id - * @return - */ - @Override - public String detailContent(List ids) { - try { - // 视频详情url - String url = siteUrl + "/voddetail/" + ids.get(0) + "/"; - //System.out.println(url); - Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url))); - JSONObject result = new JSONObject(); - JSONObject vodList = new JSONObject(); - - // 取基本数据 - String cover = doc.selectFirst("div.myui-content__thumb > a > img").attr("src"); - String title = doc.selectFirst("div.myui-content__thumb > a").attr("title"); - String desc = Jsoup.parse(doc.selectFirst("meta[name=description]").attr("content")).text(); - String category = "", area = "", year = "", remark = "", director = "", actor = ""; - Elements span_text_muted = doc.select("div.myui-content__detail span.text-muted"); - for (int i = 0; i < span_text_muted.size(); i++) { - Element text = span_text_muted.get(i); - String info = text.text(); - if (info.equals("分类:")) { - category = text.nextElementSibling().text(); - } else if (info.equals("年份:")) { - year = text.nextElementSibling().text(); - } else if (info.equals("地区:")) { - area = text.nextElementSibling().text(); - } else if (info.equals("更新:")) { - remark = text.nextElementSibling().text(); - } else if (info.equals("导演:")) { - List directors = new ArrayList<>(); - Elements aa = text.parent().select("a"); - for (int j = 0; j < aa.size(); j++) { - directors.add(aa.get(j).text()); - } - director = TextUtils.join(",", directors); - } else if (info.equals("主演:")) { - List actors = new ArrayList<>(); - Elements aa = text.parent().select("a"); - for (int j = 0; j < aa.size(); j++) { - actors.add(aa.get(j).text()); - } - actor = TextUtils.join(",", actors); - } - } - - vodList.put("vod_id", ids.get(0)); - vodList.put("vod_name", title); - vodList.put("vod_pic", cover); - vodList.put("type_name", category); - vodList.put("vod_year", year); - vodList.put("vod_area", area); - vodList.put("vod_remarks", remark); - vodList.put("vod_actor", actor); - vodList.put("vod_director", director); - vodList.put("vod_content", desc); - //System.out.println(vodList.toString()); - Map vod_play = new TreeMap<>(new Comparator() { - @Override - public int compare(String o1, String 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 1; - } - }); - - // 取播放列表数据 - Elements sources = doc.select("ul.nav-btn > li > a"); - //System.out.println(sources.size()); - Elements sourceList = doc.select("div.tab-content > div"); - //System.out.println(sourceList.size()); - for (int i = 0; i < sources.size(); i++) { - Element source = sources.get(i); - //System.out.println(sources.text().split(":")[0].split("』")[1]); - String sourceName = source.text(); - boolean found = false; - for (Iterator it = playerConfig.keys(); it.hasNext(); ) { - String flag = it.next(); - if (playerConfig.getJSONObject(flag).getString("sh").equals(sourceName)) { - sourceName = flag; - found = true; - break; - } - } - if (!found) - continue; - String playList = ""; - Elements playListA = sourceList.get(i).select("ul > li > a"); - //System.out.println(playListA.size()); - List vodItems = new ArrayList<>(); - - for (int j = 0; j < playListA.size(); j++) { - Element vod = playListA.get(j); - Matcher matcher = regexPlay.matcher(vod.attr("href")); - if (!matcher.find()) - continue; - String playURL = matcher.group(1) + "-" + matcher.group(2) + "-" + matcher.group(3); - vodItems.add(vod.text() + "$" + playURL); - } - if (vodItems.size() > 0) - playList = TextUtils.join("#", vodItems); - - if (playList.length() == 0) - continue; - - vod_play.put(sourceName, playList); - } - - if (vod_play.size() > 0) { - 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 ""; - } - - - /** - * 获取视频播放信息 - * - * @param flag 播放源 - * @param id 视频id - * @param vipFlags 所有可能需要vip解析的源 - * @return - */ - @Override - public String playerContent(String flag, String id, List vipFlags) { - try { - //定义播放用的headers - JSONObject headers = new JSONObject(); - //headers.put("Host", " cokemv.co"); - //headers.put("origin", " https://juhi.cc"); - //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", " */*"); - //headers.put("Accept-Language", " zh-CN,zh;q=0.9,en-US;q=0.3,en;q=0.7"); - //headers.put("Accept-Encoding", " gzip, deflate, br"); - - - // 播放页 url - String url = siteUrl + "/vodplay/" + id + "/"; - Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url))); - Elements allScript = doc.select("script"); - JSONObject result = new JSONObject(); - for (int i = 0; i < allScript.size(); i++) { - String scContent = allScript.get(i).html().trim(); - if (scContent.startsWith("var player_")) { // 取直链 - int start = scContent.indexOf('{'); - int end = scContent.lastIndexOf('}') + 1; - String json = scContent.substring(start, end); - JSONObject player = new JSONObject(json); - if (playerConfig.has(player.getString("from"))) { - JSONObject pCfg = playerConfig.getJSONObject(player.getString("from")); - String videoUrl = player.getString("url"); - String playUrl = pCfg.getString("pu"); - if (Misc.isVip(videoUrl)) { // 使用jx:1 - try { - result.put("parse", 1); - result.put("jx", "1"); - result.put("url", videoUrl); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - } - result.put("parse", pCfg.getInt("sn")); - result.put("playUrl", playUrl); - result.put("url", videoUrl); - result.put("header", headers.toString()); - } - break; - } - } - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - - @Override - public String searchContent(String key, boolean quick) { - try { - if (quick) - return ""; - long currentTime = System.currentTimeMillis(); - String url = siteUrl + "/index.php/ajax/suggest?mid=1&wd=" + URLEncoder.encode(key) + "&limit=10×tamp=" + currentTime; - //Document doc = Jsoup.parse(srr.content); - JSONObject searchResult = new JSONObject(OkHttpUtil.string(url, getHeaders(url))); - JSONObject result = new JSONObject(); - JSONArray videos = new JSONArray(); - if (searchResult.getInt("total") > 0) { - JSONArray lists = new JSONArray(searchResult.getString("list")); - for (int i = 0; i < lists.length(); i++) { - JSONObject vod = lists.getJSONObject(i); - String id = vod.getString("id"); - String title = vod.getString("name"); - String cover = vod.getString("pic"); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", ""); - videos.put(v); - } - } - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } -} diff --git a/app/src/main/java/com/github/catvod/spider/Kmys.java b/app/src/main/java/com/github/catvod/spider/Kmys.java deleted file mode 100644 index 8d21813..0000000 --- a/app/src/main/java/com/github/catvod/spider/Kmys.java +++ /dev/null @@ -1,651 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.content.SharedPreferences; -import android.net.Uri; -import android.text.TextUtils; -import android.util.Base64; - -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.Misc; -import com.github.catvod.utils.okhttp.OKCallBack; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.net.URLEncoder; -import java.security.KeyFactory; -import java.security.interfaces.RSAPublicKey; -import java.security.spec.X509EncodedKeySpec; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.crypto.Cipher; - -import okhttp3.Call; -import okhttp3.Headers; -import okhttp3.Response; - -/** - * Author: @SDL - */ -public class Kmys extends Spider { - private String apiDomain = ""; - private String staticDomain = ""; - - private String appId = "5"; // 飞瓜 1 酷猫 5 - - private String device = "1a7348ae45f8f6de4d798614fc07e7271657392501986"; - - @Override - public void init(Context context) { - super.init(context); - SharedPreferences sharedPreferences = context.getSharedPreferences("sp_Kmys", Context.MODE_PRIVATE); - try { - device = sharedPreferences.getString("device", null); - } catch (Throwable th) { - } finally { - if (device == null) { - device = Misc.MD5(UUID.randomUUID().toString(), Misc.CharsetUTF8).toLowerCase(); - sharedPreferences.edit().putString("device", device).commit(); - } - } - } - - private HashMap getHeaders(String url) { - HashMap headers = new HashMap<>(); - headers.put("versionNumber", "360"); - headers.put("versionName", "3.6.0"); - headers.put("device", device); - headers.put("ed", device); - headers.put("appId", appId); - headers.put("platformId", "7"); - headers.put("User-Agent", "okhttp/3.14.7"); - return headers; - } - - private void checkDomain() { - if (staticDomain.isEmpty()) { - String url = "http://feigua2021.oss-cn-beijing.aliyuncs.com/static/config/video/" + appId + ".json"; - HashMap headers = new HashMap<>(); - headers.put("User-Agent", "okhttp/3.14.7"); - headers.put("ed", device); - String json = OkHttpUtil.string(url, headers); - try { - JSONObject obj = new JSONObject(json); - apiDomain = obj.getString("apiDomain"); - staticDomain = obj.getString("staticDomain"); - } catch (JSONException e) { - e.printStackTrace(); - } - } - } - - @Override - public String homeContent(boolean filter) { - try { - checkDomain(); - getkey(); - String url = staticDomain + "/static/" + appId + "/config/lib-new.json"; - String content = OkHttpUtil.string(url, getHeaders(url)); - JSONObject jsonObject = new JSONObject(content).getJSONObject("data"); - - JSONArray years = jsonObject.getJSONArray("year"); - JSONArray types = jsonObject.getJSONArray("types"); - - JSONArray classes = new JSONArray(); - JSONObject filterConfig = new JSONObject(); - - for (int i = 0; i < types.length(); i++) { - JSONObject item = types.getJSONObject(i); - String typeId = item.getString("typeId").trim(); - if (typeId.isEmpty()) - continue; - String typeName = item.getString("typeName"); - JSONObject newCls = new JSONObject(); - newCls.put("type_id", typeId); - newCls.put("type_name", typeName); - classes.put(newCls); - - JSONArray tags = item.getJSONArray("tags"); - JSONArray extendsAll = new JSONArray(); - // 类型 - JSONObject newTypeExtend = new JSONObject(); - newTypeExtend.put("key", "type"); - newTypeExtend.put("name", "类型"); - JSONArray newTypeExtendKV = new JSONArray(); - JSONObject kv = new JSONObject(); - kv.put("n", "全部"); - kv.put("v", "-1"); - newTypeExtendKV.put(kv); - for (int j = 0; j < tags.length(); j++) { - JSONObject child = tags.getJSONObject(j); - kv = new JSONObject(); - kv.put("n", child.getString("typeName")); - kv.put("v", child.getString("typeId")); - newTypeExtendKV.put(kv); - } - newTypeExtend.put("value", newTypeExtendKV); - extendsAll.put(newTypeExtend); - // 排序 - newTypeExtend = new JSONObject(); - newTypeExtend.put("key", "sort"); - newTypeExtend.put("name", "排序"); - newTypeExtendKV = new JSONArray(); - kv = new JSONObject(); - kv.put("n", "最热"); - kv.put("v", "2"); - newTypeExtendKV.put(kv); - kv = new JSONObject(); - kv.put("n", "最新"); - kv.put("v", "1"); - newTypeExtendKV.put(kv); - kv = new JSONObject(); - kv.put("n", "好评"); - kv.put("v", "3"); - newTypeExtendKV.put(kv); - newTypeExtend.put("value", newTypeExtendKV); - extendsAll.put(newTypeExtend); - // 地区 - JSONArray regions = item.getJSONArray("children"); - newTypeExtend = new JSONObject(); - newTypeExtend.put("key", "area"); - newTypeExtend.put("name", "地区"); - newTypeExtendKV = new JSONArray(); - kv = new JSONObject(); - kv.put("n", "全部"); - kv.put("v", "-1"); - newTypeExtendKV.put(kv); - for (int j = 0; j < regions.length(); j++) { - JSONObject child = regions.getJSONObject(j); - kv = new JSONObject(); - kv.put("n", child.getString("typeName")); - kv.put("v", child.getString("typeId")); - newTypeExtendKV.put(kv); - } - newTypeExtend.put("value", newTypeExtendKV); - extendsAll.put(newTypeExtend); - - // 年份 - newTypeExtend = new JSONObject(); - newTypeExtend.put("key", "year"); - newTypeExtend.put("name", "年份"); - newTypeExtendKV = new JSONArray(); - kv = new JSONObject(); - kv.put("n", "全部"); - kv.put("v", "-1"); - newTypeExtendKV.put(kv); - for (int j = 0; j < years.length(); j++) { - String year = years.getString(j).trim(); - if (year.isEmpty()) - continue; - kv = new JSONObject(); - kv.put("n", year); - kv.put("v", year); - newTypeExtendKV.put(kv); - } - newTypeExtend.put("value", newTypeExtendKV); - extendsAll.put(newTypeExtend); - filterConfig.put(typeId, extendsAll); - } - JSONObject result = new JSONObject(); - result.put("class", classes); - if (filter) { - result.put("filters", filterConfig); - } - return result.toString(); - } catch (Throwable th) { - - } - return ""; - } - - @Override - public String homeVideoContent() { - try { - checkDomain(); - getkey(); - String url = staticDomain + "/static/" + appId + "/index/cloumn/1.json"; - String content = OkHttpUtil.string(url, getHeaders(url)); - JSONObject jsonObject = new JSONObject(content).getJSONObject("data"); - JSONArray list = jsonObject.getJSONArray("list"); - JSONArray videos = new JSONArray(); - for (int i = 0; i < list.length(); i++) { - JSONArray videoList = list.getJSONObject(i).getJSONArray("videoList"); - for (int j = 0; j < videoList.length(); j++) { - JSONObject vObj = videoList.getJSONObject(j); - JSONObject v = new JSONObject(); - v.put("vod_id", vObj.getString("id")); - v.put("vod_name", vObj.getString("vodName")); - v.put("vod_pic", fixUrl(vObj.getString("vodPicThumb"))); - v.put("vod_remarks", vObj.getString("lastName")); - videos.put(v); - } - } - JSONObject result = new JSONObject(); - result.put("list", videos); - return result.toString(); - } catch (Throwable th) { - - } - return ""; - } - - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { - try { - checkDomain(); - getkey(); - JSONObject result = new JSONObject(); - - String url = apiDomain + "/videolibrary/v2/" + appId + "/" + tid; - extend = extend == null ? new HashMap<>() : extend; - if (!extend.containsKey("area")) { - extend.put("area", "-1"); - } - if (!extend.containsKey("type")) { - extend.put("type", "-1"); - } - if (!extend.containsKey("sort")) { - extend.put("sort", "2"); - } - if (!extend.containsKey("year")) { - extend.put("year", "-1"); - } - url += "/" + extend.get("area"); - url += "/" + extend.get("type"); - url += "/" + extend.get("sort"); - url += "/-1"; - url += "/" + extend.get("year"); - url += "/-1/" + pg + ".json"; - - String content = OkHttpUtil.string(url, getHeaders(url)); - JSONObject jsonObject = new JSONObject(content).getJSONObject("data"); - JSONArray jsonArray = jsonObject.getJSONArray("list"); - JSONArray videos = new JSONArray(); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject vObj = jsonArray.getJSONObject(i); - JSONObject v = new JSONObject(); - v.put("vod_id", vObj.getString("id")); - v.put("vod_name", vObj.getString("vodName")); - v.put("vod_pic", fixUrl(vObj.getString("vodPicThumb"))); - v.put("vod_remarks", vObj.getString("lastName")); - videos.put(v); - } - - int total = jsonObject.getInt("count"); - int limit = jsonObject.getInt("pageSize"); - int totalPg = total % limit == 0 ? (total / limit) : (total / limit + 1); - result.put("page", jsonObject.getInt("pageIndex")); - result.put("pagecount", totalPg); - result.put("limit", limit); - result.put("total", total); - result.put("list", videos); - return result.toString(); - } catch (Throwable th) { - - } - return ""; - } - - @Override - public String detailContent(List ids) { - try { - checkDomain(); - getkey(); - JSONObject result = new JSONObject(); - String url = staticDomain + "/static/video/detail/" + ids.get(0) + ".json"; - String content = OkHttpUtil.string(url, getHeaders(url)); - JSONObject jsonObject = new JSONObject(content).getJSONObject("data"); - JSONObject vodList = new JSONObject(); - vodList.put("vod_id", jsonObject.getString("id")); - vodList.put("vod_name", jsonObject.getString("vodName")); - vodList.put("vod_pic", fixUrl(jsonObject.getString("vodPic"))); - vodList.put("type_name", jsonObject.getString("typeName")); - vodList.put("vod_year", jsonObject.getString("vodYear")); - vodList.put("vod_area", jsonObject.getString("vodArea")); - vodList.put("vod_remarks", ""); - vodList.put("vod_actor", jsonObject.getString("vodActor")); - vodList.put("vod_director", ""); - vodList.put("vod_content", jsonObject.getString("vodBlurb")); - - String vodPlayUrl = jsonObject.getString("vodPlayUrl"); - vodPlayUrl = rsa(vodPlayUrl.substring(0, 10) + vodPlayUrl.substring(16)); - - ArrayList playFrom = new ArrayList<>(); - ArrayList playList = new ArrayList<>(); - - JSONArray playSource = new JSONArray(vodPlayUrl); - for (int i = 0; i < playSource.length(); i++) { - JSONObject item = playSource.getJSONObject(i); - String srcName = item.getString("name"); - boolean userProxy = srcName.equals("高速线路"); - ArrayList urls = new ArrayList<>(); - JSONArray playUrls = item.getJSONArray("list"); - for (int j = 0; j < playUrls.length(); j++) { - JSONObject urlObj = playUrls.getJSONObject(j); - if (userProxy) - urls.add(urlObj.getString("name") + "$" + Proxy.localProxyUrl() + "?do=kmys&type=m3u8&url=" + Base64.encodeToString(urlObj.getString("url").getBytes(Misc.CharsetUTF8), Base64.DEFAULT | Base64.URL_SAFE | Base64.NO_WRAP) + ".." + urlObj.getInt("isParse")); - else - urls.add(urlObj.getString("name") + "$" + urlObj.getString("url") + ".." + urlObj.getInt("isParse")); - } - if (urls.isEmpty()) - continue; - playFrom.add(srcName); - playList.add(TextUtils.join("#", urls)); - } - - String vod_play_from = TextUtils.join("$$$", playFrom); - String vod_play_url = TextUtils.join("$$$", playList); - 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 (Throwable th) { - - } - return ""; - } - - @Override - public String playerContent(String flag, String id, List vipFlags) { - try { - JSONObject result = new JSONObject(); - String[] info = id.split("\\.\\."); - String url = info[0]; - int isParse = Integer.parseInt(info[1]); - if (isParse == 2) { - result.put("parse", 0); - result.put("playUrl", ""); - result.put("url", url); - } else { - result.put("parse", 0); - result.put("playUrl", ""); - result.put("url", url); - } - return result.toString(); - } catch (Throwable th) { - - } - return ""; - } - - @Override - public String searchContent(String key, boolean quick) { - try { - checkDomain(); - JSONObject result = new JSONObject(); - String url = apiDomain + "/api/v2/index/search?pageIndex=1&wd=" + URLEncoder.encode(key) + "&limit=10&type=1"; - String content = OkHttpUtil.string(url, getHeaders(url)); - JSONArray videos = new JSONArray(); - JSONObject jsonObject = new JSONObject(content).getJSONObject("data"); - JSONArray jsonArray = jsonObject.getJSONArray("list"); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject vObj = jsonArray.getJSONObject(i); - JSONObject v = new JSONObject(); - String title = vObj.getString("vodName"); - if (!title.contains(key)) - continue; - v.put("vod_id", vObj.getString("id")); - v.put("vod_name", title); - v.put("vod_pic", fixUrl(vObj.getString("vodPicThumb"))); - v.put("vod_remarks", vObj.getString("lastName")); - videos.put(v); - } - result.put("list", videos); - return result.toString(); - } catch (Throwable th) { - - } - return ""; - } - - protected String fixUrl(String src) { - try { - if (src.startsWith("//")) { - Uri parse = Uri.parse(staticDomain); - src = parse.getScheme() + ":" + src; - } else if (!src.contains("://")) { - Uri parse = Uri.parse(staticDomain); - if (!src.startsWith("/")) - src = "/" + src; - src = parse.getScheme() + "://" + parse.getHost() + src; - } - } catch (Exception e) { - SpiderDebug.log(e); - } - return src; - } - - public static void getkey(){ - if (signPlayerStr.isEmpty()){ - ////https://video-api.kumaoys.cn/api/v2/b/83708861 - String url = "https://mtv.stvmts.com/api/v2/b/"+((int) (Math.random() * 100000000)); - HashMap hashMap = new HashMap(); - hashMap.put("versionNumber", "360"); - hashMap.put("versionName", "3.6.0"); - hashMap.put("device", "1a7348ae45f8f6de4d798614fc07e7271657392501986"); - //hashMap.put("appId", "5"); - hashMap.put("platformId", "7"); - hashMap.put("User-Agent", "okhttp/3.14.7"); - hashMap.put("Pragma", "Pragma:: no-cache"); - hashMap.put("Cache-Control", "no-cache"); - hashMap.put("Host", "mtv.stvmts.com"); - hashMap.put("Content-Type", "application/json; charser=utf-8"); - JSONObject jsonObject = new JSONObject(); - try { - int random = (int)(Math.random()*1.0E8d); - int time = (int)(System.currentTimeMillis()/1000); - String signBefore = "p=com.feigua.yingshi&t=" + time + "&r=" + random + "&s=36eff39894f62d333fd3f488cffbf364&pl=1"; - jsonObject.put("s",Misc.MD5(signBefore,Misc.CharsetUTF8)); - jsonObject.put("t",time); - jsonObject.put("r",random); - jsonObject.put("i",5); - jsonObject.put("p",1); - OkHttpUtil.postJson(OkHttpUtil.defaultClient(), url, jsonObject.toString(), hashMap, new OKCallBack.OKCallBackString() { - @Override - public void onFailure(Call call, Exception e) { - } - - @Override - public void onResponse(String response) { - try { - - JSONObject jsonObject = new JSONObject(response).getJSONObject("data"); - String a = new String(Base64.decode(jsonObject.getString("a"), Base64.DEFAULT)); - String k = new String(Base64.decode(jsonObject.getString("k"), Base64.DEFAULT)); - String z = new String(Base64.decode(jsonObject.getString("z"), Base64.DEFAULT)); - String data = rsa2(k+z+a); - signPlayerStr = new JSONObject(data).optString("key"); - } catch (JSONException e) { - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - - } catch (JSONException e) { - e.printStackTrace(); - } - } - - } - - String rsa(String in) { - try { - RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(Base64.decode("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3VLHgbkFN0ebMaR4e0D\n" + - "z6Z2mFexPBFKGqK0tuRhzu7XOrG92nKWfnublf2p1i22UN81whBLINjMttOuqW6\n" + - "fM9DCnAPTelud1zCXWYWIsv5Z19inJSG8vytJ7xg1dnfuRSRUkx11IE7bm0T/sM\n" + - "0sI4GgcktQJNSizyirHtuJjUUxxQabEhFkFeqQ5r+A69KjB5QkotCc4pG5lENyT\n" + - "ARHGSsfaiJthaiH0yJ/8tUlyMgJ9H6/jbQg0wlLcEUzdfe2KuCPrTRzIzx4Cjm1\n" + - "JogT6JV2byvXpzAMC3O48LDiekJdVztg2Cj7E0cGrOsGs+IK6F7TWsKD/cIELTF\n" + - "hLz6dExQIDAQAB", Base64.DEFAULT))); - Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding"); - cipher.init(Cipher.DECRYPT_MODE, pubKey); - byte[] inData = Base64.decode(in, Base64.DEFAULT); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - if (inData.length <= 256) { - outputStream.write(cipher.doFinal(inData)); - } else { - for (int i = 0; i < inData.length; i += 256) { - outputStream.write(cipher.doFinal(inData, i, 256)); - } - } - outputStream.flush(); - String result = new String(outputStream.toByteArray(), Misc.CharsetUTF8); - outputStream.close(); - return result; - } catch (Exception e) { - e.printStackTrace(); - } - return ""; - } - - public static String rsa2(String in) { - try { - RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(Base64.decode("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCt/dLGQj1Iimj0LIUMUXgBGUjsfrm6o1/pZjXXVLL3py2vLktNtSoJU+69v1tUXZqiU9BqMHApVmMOtOnkL5J+ENdLIX3bXnNtfNJpYX4Iz8OBMqKdDch80gN8rLkTPReFkBGsMAndKpc0iMdgd6nts/gQ3wUBNJKpmOG35UateQIDAQAB", Base64.DEFAULT))); - Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding"); - cipher.init(Cipher.DECRYPT_MODE, pubKey); - byte[] inData = Base64.decode(in, Base64.DEFAULT); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - if (inData.length <= 256) { - outputStream.write(cipher.doFinal(inData)); - } else { - for (int i = 0; i < inData.length; i += 256) { - outputStream.write(cipher.doFinal(inData, i, 256)); - } - } - outputStream.flush(); - String result = new String(outputStream.toByteArray(), Misc.CharsetUTF8); - outputStream.close(); - return result; - } catch (Exception e) { - e.printStackTrace(); - } - return ""; - } - - private static HashMap kmysPlayerHeaders = null; - private static String signPlayerStr = ""; - private static final Pattern tsRex = Pattern.compile("(\\S+.ts)|(#EXT-X-KEY:\\S+\")(\\S+)(\")"); - - static String subUrl(String url) { - if (url.startsWith("http://")) { - return url.substring(0, url.substring(7).indexOf(47) + 7); - } - String tmp = url.startsWith("https://") ? url.substring(0, url.substring(8).indexOf(47) + 8) : ""; - return url.substring(tmp.length()); - } - - static Object[] getVodContent(String m3u8) { - Uri uri = Uri.parse(m3u8); - String time = String.valueOf(System.currentTimeMillis()); - String key = Misc.MD5(subUrl(m3u8) + signPlayerStr + time, Misc.CharsetUTF8).toLowerCase(); - String realUrl = m3u8 + "?key=" + key + "&v=360&i=5&p=7&ed=1a7348ae45f8f6de4d798614fc07e7271657392501986&time=" + time; - String m3u8Content = OkHttpUtil.string(realUrl, kmysPlayerHeaders); - String tsUrl = m3u8.substring(0, m3u8.indexOf(uri.getLastPathSegment())); - StringBuilder sb = new StringBuilder(); - int start = 0; - Matcher matcher = tsRex.matcher(m3u8Content); - while (matcher.find()) { - sb.append(m3u8Content, start, matcher.start()); - if (matcher.group().contains("EXT-X-KEY")) { - String keyRealUrl = Proxy.localProxyUrl() + "?do=kmys&type=key&url=" + Base64.encodeToString((tsUrl + matcher.group(3)).getBytes(Misc.CharsetUTF8), Base64.DEFAULT | Base64.URL_SAFE | Base64.NO_WRAP); - sb.append(matcher.group(2) + keyRealUrl + matcher.group(4)); - } else { - String tsRealUrl = Proxy.localProxyUrl() + "?do=kmys&type=ts&url=" + Base64.encodeToString((tsUrl + matcher.group(1)).getBytes(Misc.CharsetUTF8), Base64.DEFAULT | Base64.URL_SAFE | Base64.NO_WRAP); - sb.append(tsRealUrl); - } - start = matcher.end(); - } - sb.append(m3u8Content, start, m3u8Content.length()); - String type = "application/octet-stream"; - Object[] result = new Object[3]; - result[0] = 200; - result[1] = type; - ByteArrayInputStream baos = new ByteArrayInputStream(sb.toString().getBytes(Misc.CharsetUTF8)); - result[2] = baos; - return result; - } - - static Object[] getKeyContent(String key) { - String time = String.valueOf(System.currentTimeMillis()); - String md5 = Misc.MD5(subUrl(key) + signPlayerStr + time, Misc.CharsetUTF8).toLowerCase(); - String realUrl = key + "?key=" + md5 + "&v=360&i=5&p=7&ed=1a7348ae45f8f6de4d798614fc07e7271657392501986&time=" + time; - String keyContent = OkHttpUtil.string(realUrl, kmysPlayerHeaders); - String type = "application/octet-stream"; - Object[] result = new Object[3]; - result[0] = 200; - result[1] = type; - ByteArrayInputStream baos = new ByteArrayInputStream(keyContent.getBytes(Misc.CharsetUTF8)); - result[2] = baos; - return result; - } - - static Object[] getTsContent(String ts) { - String time = String.valueOf(System.currentTimeMillis()); - String key = Misc.MD5(subUrl(ts) + signPlayerStr + time, Misc.CharsetUTF8).toLowerCase(); - String realUrl = ts + "?key=" + key + "&v=360&i=5&p=7&ed=1a7348ae45f8f6de4d798614fc07e7271657392501986&time=" + time; - OKCallBack.OKCallBackDefault callBack = new OKCallBack.OKCallBackDefault() { - - - @Override - public void onFailure(Call call, Exception e) { - - } - - @Override - public void onResponse(Response response) { - } - }; - OkHttpUtil.get(OkHttpUtil.defaultClient(), realUrl, null, kmysPlayerHeaders, callBack); - if (callBack.getResult().code() == 200) { - Headers headers = callBack.getResult().headers(); - String type = headers.get("Content-Type"); - if (type == null) { - type = "application/octet-stream"; - } - Object[] result = new Object[3]; - result[0] = 200; - result[1] = type; - result[2] = callBack.getResult().body().byteStream(); - return result; - } - return null; - } - - public static Object[] vod(Map params) { - String type = params.get("type"); - String url = params.get("url"); - url = new String(Base64.decode(url, Base64.DEFAULT | Base64.URL_SAFE | Base64.NO_WRAP), Misc.CharsetUTF8); - if (kmysPlayerHeaders == null) { - kmysPlayerHeaders = new HashMap<>(); - kmysPlayerHeaders.put("User-Agent", "okhttp/3.14.7"); - kmysPlayerHeaders.put("ed", "1a7348ae45f8f6de4d798614fc07e7271657392501986"); - kmysPlayerHeaders.put("Connection", "close"); - } - if (type.equals("m3u8")) { - return getVodContent(url); - } else if (type.equals("key")) { - return getKeyContent(url); - } else if (type.equals("ts")) { - return getTsContent(url); - } - return null; - } - - -} \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/Kuaikan.java b/app/src/main/java/com/github/catvod/spider/Kuaikan.java deleted file mode 100644 index 2f47a15..0000000 --- a/app/src/main/java/com/github/catvod/spider/Kuaikan.java +++ /dev/null @@ -1,681 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.content.SharedPreferences; -import android.text.TextUtils; -import android.util.Base64; -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.Misc; -import com.github.catvod.utils.okhttp.OKCallBack; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import java.io.ByteArrayOutputStream; -import java.security.KeyFactory; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.security.PrivateKey; -import java.security.interfaces.RSAPublicKey; -import java.security.spec.PKCS8EncodedKeySpec; -import java.security.spec.X509EncodedKeySpec; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.UUID; -import javax.crypto.Cipher; -import javax.crypto.spec.IvParameterSpec; -import javax.crypto.spec.SecretKeySpec; -import okhttp3.Call; -import okhttp3.OkHttpClient; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -public class Kuaikan extends Spider { - private static String Cb; - private static long QH; - private static String dW; - private HashMap> Ji = new HashMap<>(); - - private void Q() { - if (System.currentTimeMillis() > QH) { - try { - JSONObject jSONObject = new JSONObject(); - long currentTimeMillis = System.currentTimeMillis() / 1000; - String f = f("bf70a456195ae394184b2e0b1b471cae1000300001dc431681b806089dac1153fb13960f87" + currentTimeMillis + "notice"); - jSONObject.put("appId", "1000300001"); - jSONObject.put("sign", f); - jSONObject.put("timestamp", currentTimeMillis); - String O = Decrypt("bf70a456195ae394", "184b2e0b1b471cae", jSONObject.toString()); - String tg = tg("MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDitX/rWP6WWc3h\nDzUcfD8Hbw79yCB7rz18GEkjDapjlUVIa3P8FEQFoOchu7N+vdK6HQNsl2Bql4lv\nWOYuzRWNbLGQ7mNtMca28iCuPHck0AcJzOs9F6qruPL73eY7Ai7yvzs2IfEdyXSz\nHP/yXgEOi5ZEBfsBZEPMJw6vfHJVueuD/lh/LkoJ/gXEKMCM/pkIzGpBPd2TsIg8\nZdvOGMPy+MOnJb1Qfe0y3QQdc5VPVdZFWoWsM9RAenHmE3d1THb+uNZZZcnM1tV7\nxYgBbIhgHtXAZnWDWDRBM3xJPR3O9dfBHHt/tbyrZrSwK1IgwFgqfYm/tRbmp4y/\n1DhIF6mDAgMBAAECggEAIzDjS2gEFNiZ0a6nouVSb1f47sHq8OgR1jp619seMNkR\n6Rzs4xtON8VzO1REl47lsAgi6O9SgxlEtykIiglBqDNQGNw4SNHqM6nAEuvF3sv/\n27CYb2JGFuPdq+UVAOHk4b93dH6uS95ipA8DV97psRVP3P1EqkGjGISTjf/2S4IG\n10Q0UhP4xxiRS2iCtaIq0fbvnrChqYRlYQYpkkRCCH+Q4FNKquSsqmWyCu5yfeQM\nMek+aT9KgvmCh05UCeqC1x7xPtSneNbpJpLD5zW8CcG7EYFDtIP8b9BPDlud47ZH\n5Y4/wyQQFHHLOaniTJVvEJZ7cIoXy2gOhvgcHpNryQKBgQDxNNtXnCfVK0JYNhnU\n5WCOX9NeW9Q79HldhTM5/EqsjA5H21j5S7A/duBSRfX7iou1hyXaa2p+J7rxF9sj\nNlwHPsKhprskxXaHJ7qU84gSmwORsTQQPmtTsizGwVsM330+Q2ZROaSEfDoUqH9+\nKBKs6K+FOldcTOrCZ+ILk8werwKBgQDwnQUrKATzRThVdD6Hcgt/F/SAizDmvtiT\nVvRcGkiV3EtB5Rx8zFNJ9GWrqSAArwIxTWgfYCYsvpUjbJW02Mg0Ufj2+YhjT713\nO9yViwUq996St9eLwGQO5FDMD8FYi7bRAiZEAeAeIEeveDRsNK15++8VVJVo7b2l\nzcapp5k3bQKBgQDSiJNHRhqSet6+xgIIDGoZ+1Qv0TFPX5UrZt8OpsK7FshEOhXQ\nCxt8WZN03HHXK9fEC4GjwwxBrwYB+BOjCYiMHmCd3j0M3HoXgDrgViyYKMuVuDk8\nUG83r5ZbqVuCwfO8i/HbxddueEvtyiD2CZ47ZCIHxKOKAe0K4Mex2UBaKwKBgQDi\nrEouOelP9Kn5dyVhHENQXBTu9DIBb1FAnO5fxjMTWxFa5qhLuYHNbfxKF24atsRu\nBepNhJryFCkT0jvGv2L8Ry0wHiwqwvhO14obJ3ia3iBEQAVDlt+sV9L2KvGOpTB4\n/nlmIA4u02I1IBziw02aWYkGo0SOMUo0ZQL+2PEykQKBgAV1uqiJlWuA9uPdFFJP\nZPL2YoOuTWdWfIwIb/UdsbUuTckCgqPIqUPi3HhiVSunOgcO7HWK3GD3j8k4XEbW\nG4y+Ik0lLrWzBl728tZe1GENzTf8aapElHlUfFSM4OlrTRBsbMOsQBcJNh7QbyoZ\nBHiZZTbRUY6xUR4DGYkCOksF", "bf70a456195ae394184b2e0b1b471cae"); - JSONObject jSONObject2 = new JSONObject(); - jSONObject2.put("body", O); - jSONObject2.put("ticket", tg); - OkHttpUtil.postJson(OkHttpUtil.defaultClient(), "http://ctlook.facaishiyi.com/api/v1/user/login.do", jSONObject2.toString(), j(currentTimeMillis), new OKCallBack.OKCallBackString() { - @Override - public void onFailure(Call call, Exception exc) { - } - - public void onResponse(String str) { - try { - JSONObject jSONObject3 = new JSONObject(str); - String lX = Kuaikan.this.lX("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiYJ5UFjeEgeUi5ynLKhj5EMF0\n3sawTyAKoPbfUCSZZQ5QdrHhrINggrYxDtB/TWXoqSF+BJP85F0vq8B6gOqFWhK/\n1PIKe2wKlRRuZSOdUzK/3vzRHmR3J3KGrvNzvwARH8gg8xZjbsalc/gBkcVxSxGd\n8j8rJ4QhOSFh9F8B2wIDAQAB", jSONObject3.getString("ticket")); - JSONObject jSONObject4 = new JSONObject(Kuaikan.this.UO(lX.substring(0, 16), lX.substring(16, 32), jSONObject3.getString("body"))); - long unused = Kuaikan.QH = jSONObject4.getLong("duration") * 1000; - String unused2 = Kuaikan.Cb = jSONObject4.getString("data"); - Kuaikan.this.Uf(); - } catch (JSONException e) { - } - } - }); - } catch (Throwable th) { - th.printStackTrace(); - } - } - } - - public void Uf() { - try { - JSONObject jSONObject = new JSONObject(); - long currentTimeMillis = System.currentTimeMillis() / 1000; - String f = f("1000300001dc431681b806089dac1153fb13960f8700" + dW + currentTimeMillis + "notice"); - jSONObject.put("adv", 0); - jSONObject.put("appId", "1000300001"); - jSONObject.put("nav", 0); - jSONObject.put("sign", f); - jSONObject.put("timestamp", currentTimeMillis); - jSONObject.put("umId", dW); - String O = Decrypt(Cb.substring(0, 16), Cb.substring(16, 32), jSONObject.toString()); - String tg = tg("MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDitX/rWP6WWc3h\nDzUcfD8Hbw79yCB7rz18GEkjDapjlUVIa3P8FEQFoOchu7N+vdK6HQNsl2Bql4lv\nWOYuzRWNbLGQ7mNtMca28iCuPHck0AcJzOs9F6qruPL73eY7Ai7yvzs2IfEdyXSz\nHP/yXgEOi5ZEBfsBZEPMJw6vfHJVueuD/lh/LkoJ/gXEKMCM/pkIzGpBPd2TsIg8\nZdvOGMPy+MOnJb1Qfe0y3QQdc5VPVdZFWoWsM9RAenHmE3d1THb+uNZZZcnM1tV7\nxYgBbIhgHtXAZnWDWDRBM3xJPR3O9dfBHHt/tbyrZrSwK1IgwFgqfYm/tRbmp4y/\n1DhIF6mDAgMBAAECggEAIzDjS2gEFNiZ0a6nouVSb1f47sHq8OgR1jp619seMNkR\n6Rzs4xtON8VzO1REl47lsAgi6O9SgxlEtykIiglBqDNQGNw4SNHqM6nAEuvF3sv/\n27CYb2JGFuPdq+UVAOHk4b93dH6uS95ipA8DV97psRVP3P1EqkGjGISTjf/2S4IG\n10Q0UhP4xxiRS2iCtaIq0fbvnrChqYRlYQYpkkRCCH+Q4FNKquSsqmWyCu5yfeQM\nMek+aT9KgvmCh05UCeqC1x7xPtSneNbpJpLD5zW8CcG7EYFDtIP8b9BPDlud47ZH\n5Y4/wyQQFHHLOaniTJVvEJZ7cIoXy2gOhvgcHpNryQKBgQDxNNtXnCfVK0JYNhnU\n5WCOX9NeW9Q79HldhTM5/EqsjA5H21j5S7A/duBSRfX7iou1hyXaa2p+J7rxF9sj\nNlwHPsKhprskxXaHJ7qU84gSmwORsTQQPmtTsizGwVsM330+Q2ZROaSEfDoUqH9+\nKBKs6K+FOldcTOrCZ+ILk8werwKBgQDwnQUrKATzRThVdD6Hcgt/F/SAizDmvtiT\nVvRcGkiV3EtB5Rx8zFNJ9GWrqSAArwIxTWgfYCYsvpUjbJW02Mg0Ufj2+YhjT713\nO9yViwUq996St9eLwGQO5FDMD8FYi7bRAiZEAeAeIEeveDRsNK15++8VVJVo7b2l\nzcapp5k3bQKBgQDSiJNHRhqSet6+xgIIDGoZ+1Qv0TFPX5UrZt8OpsK7FshEOhXQ\nCxt8WZN03HHXK9fEC4GjwwxBrwYB+BOjCYiMHmCd3j0M3HoXgDrgViyYKMuVuDk8\nUG83r5ZbqVuCwfO8i/HbxddueEvtyiD2CZ47ZCIHxKOKAe0K4Mex2UBaKwKBgQDi\nrEouOelP9Kn5dyVhHENQXBTu9DIBb1FAnO5fxjMTWxFa5qhLuYHNbfxKF24atsRu\nBepNhJryFCkT0jvGv2L8Ry0wHiwqwvhO14obJ3ia3iBEQAVDlt+sV9L2KvGOpTB4\n/nlmIA4u02I1IBziw02aWYkGo0SOMUo0ZQL+2PEykQKBgAV1uqiJlWuA9uPdFFJP\nZPL2YoOuTWdWfIwIb/UdsbUuTckCgqPIqUPi3HhiVSunOgcO7HWK3GD3j8k4XEbW\nG4y+Ik0lLrWzBl728tZe1GENzTf8aapElHlUfFSM4OlrTRBsbMOsQBcJNh7QbyoZ\nBHiZZTbRUY6xUR4DGYkCOksF", Cb); - JSONObject jSONObject2 = new JSONObject(); - jSONObject2.put("body", O); - jSONObject2.put("ticket", tg); - OkHttpUtil.postJson(OkHttpUtil.defaultClient(), "http://ctlook.facaishiyi.com/api/v1/user/config.do", jSONObject2.toString(), j(currentTimeMillis), new OKCallBack.OKCallBackString() { // from class: com.github.catvod.spider.Kuaikan.1 - @Override - public void onFailure(Call call, Exception exc) { - } - - public void onResponse(String str) { - try { - JSONObject jSONObject3 = new JSONObject(str); - String lX = Kuaikan.this.lX("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiYJ5UFjeEgeUi5ynLKhj5EMF0\n3sawTyAKoPbfUCSZZQ5QdrHhrINggrYxDtB/TWXoqSF+BJP85F0vq8B6gOqFWhK/\n1PIKe2wKlRRuZSOdUzK/3vzRHmR3J3KGrvNzvwARH8gg8xZjbsalc/gBkcVxSxGd\n8j8rJ4QhOSFh9F8B2wIDAQAB", jSONObject3.getString("ticket")); - JSONArray jSONArray = new JSONObject(Kuaikan.this.UO(lX.substring(0, 16), lX.substring(16, 32), jSONObject3.getString("body"))).getJSONObject("data").getJSONArray("newAnalysis"); - Kuaikan.this.Ji.clear(); - for (int i = 0; i < jSONArray.length(); i++) { - JSONObject jSONObject4 = jSONArray.getJSONObject(i); - ArrayList arrayList = new ArrayList(); - Kuaikan.this.Ji.put(jSONObject4.getString("id"), arrayList); - JSONArray jSONArray2 = jSONObject4.getJSONArray("analyses"); - for (int i2 = 0; i2 < jSONArray2.length(); i2++) { - arrayList.add(jSONArray2.getJSONObject(i2).getString("url")); - } - } - } catch (JSONException e) { - } - } - }); - } catch (Throwable th) { - th.printStackTrace(); - } - } - - public HashMap j(long j) { - HashMap hashMap = new HashMap<>(); - hashMap.put("appId", "1000300001"); - hashMap.put("version", "4"); - hashMap.put("timestamp", j + ""); - hashMap.put("token", f("1000300001dc431681b806089dac1153fb13960f874" + j + "notice")); - hashMap.put("User-Agent", "okhttp/5.0.0-alpha.2"); - return hashMap; - } - - String Decrypt(String str, String str2, String str3) { - try { - SecretKeySpec secretKeySpec = new SecretKeySpec(str.getBytes(), "AES"); - Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); - cipher.init(1, secretKeySpec, new IvParameterSpec(str2.getBytes())); - return Base64.encodeToString(cipher.doFinal(str3.getBytes()), 2); - } catch (Throwable th) { - th.printStackTrace(); - return ""; - } - } - - String UO(String str, String str2, String str3) { - try { - SecretKeySpec secretKeySpec = new SecretKeySpec(str.getBytes(), "AES"); - Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); - cipher.init(2, secretKeySpec, new IvParameterSpec(str2.getBytes())); - return new String(cipher.doFinal(Base64.decode(str3, 0)), "UTF-8"); - } catch (Throwable th) { - th.printStackTrace(); - return ""; - } - } - - public String categoryContent(String str, final String str2, boolean z, HashMap hashMap) { - try { - Q(); - int parseInt = hashMap.containsKey("areaId") ? Integer.parseInt(hashMap.get("areaId")) : 0; - int parseInt2 = hashMap.containsKey("tagId") ? Integer.parseInt(hashMap.get("tagId")) : 0; - int parseInt3 = hashMap.containsKey("yearId") ? Integer.parseInt(hashMap.get("yearId")) : 0; - JSONObject jSONObject = new JSONObject(); - long currentTimeMillis = System.currentTimeMillis() / 1000; - String f = f("1000300001dc431681b806089dac1153fb13960f87" + str2 + 18 + str + parseInt2 + parseInt + parseInt3 + currentTimeMillis + "notice"); - jSONObject.put("appId", "1000300001"); - jSONObject.put("typeId", str); - jSONObject.put("areaId", parseInt); - jSONObject.put("tagId", parseInt2); - jSONObject.put("yearId", parseInt3); - jSONObject.put("page", Integer.parseInt(str2)); - jSONObject.put("pageSize", 18); - jSONObject.put("sign", f); - jSONObject.put("timestamp", currentTimeMillis); - String O = Decrypt(Cb.substring(0, 16), Cb.substring(16, 32), jSONObject.toString()); - String tg = tg("MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDitX/rWP6WWc3h\nDzUcfD8Hbw79yCB7rz18GEkjDapjlUVIa3P8FEQFoOchu7N+vdK6HQNsl2Bql4lv\nWOYuzRWNbLGQ7mNtMca28iCuPHck0AcJzOs9F6qruPL73eY7Ai7yvzs2IfEdyXSz\nHP/yXgEOi5ZEBfsBZEPMJw6vfHJVueuD/lh/LkoJ/gXEKMCM/pkIzGpBPd2TsIg8\nZdvOGMPy+MOnJb1Qfe0y3QQdc5VPVdZFWoWsM9RAenHmE3d1THb+uNZZZcnM1tV7\nxYgBbIhgHtXAZnWDWDRBM3xJPR3O9dfBHHt/tbyrZrSwK1IgwFgqfYm/tRbmp4y/\n1DhIF6mDAgMBAAECggEAIzDjS2gEFNiZ0a6nouVSb1f47sHq8OgR1jp619seMNkR\n6Rzs4xtON8VzO1REl47lsAgi6O9SgxlEtykIiglBqDNQGNw4SNHqM6nAEuvF3sv/\n27CYb2JGFuPdq+UVAOHk4b93dH6uS95ipA8DV97psRVP3P1EqkGjGISTjf/2S4IG\n10Q0UhP4xxiRS2iCtaIq0fbvnrChqYRlYQYpkkRCCH+Q4FNKquSsqmWyCu5yfeQM\nMek+aT9KgvmCh05UCeqC1x7xPtSneNbpJpLD5zW8CcG7EYFDtIP8b9BPDlud47ZH\n5Y4/wyQQFHHLOaniTJVvEJZ7cIoXy2gOhvgcHpNryQKBgQDxNNtXnCfVK0JYNhnU\n5WCOX9NeW9Q79HldhTM5/EqsjA5H21j5S7A/duBSRfX7iou1hyXaa2p+J7rxF9sj\nNlwHPsKhprskxXaHJ7qU84gSmwORsTQQPmtTsizGwVsM330+Q2ZROaSEfDoUqH9+\nKBKs6K+FOldcTOrCZ+ILk8werwKBgQDwnQUrKATzRThVdD6Hcgt/F/SAizDmvtiT\nVvRcGkiV3EtB5Rx8zFNJ9GWrqSAArwIxTWgfYCYsvpUjbJW02Mg0Ufj2+YhjT713\nO9yViwUq996St9eLwGQO5FDMD8FYi7bRAiZEAeAeIEeveDRsNK15++8VVJVo7b2l\nzcapp5k3bQKBgQDSiJNHRhqSet6+xgIIDGoZ+1Qv0TFPX5UrZt8OpsK7FshEOhXQ\nCxt8WZN03HHXK9fEC4GjwwxBrwYB+BOjCYiMHmCd3j0M3HoXgDrgViyYKMuVuDk8\nUG83r5ZbqVuCwfO8i/HbxddueEvtyiD2CZ47ZCIHxKOKAe0K4Mex2UBaKwKBgQDi\nrEouOelP9Kn5dyVhHENQXBTu9DIBb1FAnO5fxjMTWxFa5qhLuYHNbfxKF24atsRu\nBepNhJryFCkT0jvGv2L8Ry0wHiwqwvhO14obJ3ia3iBEQAVDlt+sV9L2KvGOpTB4\n/nlmIA4u02I1IBziw02aWYkGo0SOMUo0ZQL+2PEykQKBgAV1uqiJlWuA9uPdFFJP\nZPL2YoOuTWdWfIwIb/UdsbUuTckCgqPIqUPi3HhiVSunOgcO7HWK3GD3j8k4XEbW\nG4y+Ik0lLrWzBl728tZe1GENzTf8aapElHlUfFSM4OlrTRBsbMOsQBcJNh7QbyoZ\nBHiZZTbRUY6xUR4DGYkCOksF", Cb); - JSONObject jSONObject2 = new JSONObject(); - jSONObject2.put("body", O); - jSONObject2.put("ticket", tg); - final JSONObject jSONObject3 = new JSONObject(); - OkHttpUtil.postJson(OkHttpUtil.defaultClient(), "http://ctlook.facaishiyi.com/api/v1/search/video.do", jSONObject2.toString(), j(currentTimeMillis), new OKCallBack.OKCallBackString() { // from class: com.github.catvod.spider.Kuaikan.5 - @Override - public void onFailure(Call call, Exception exc) { - } - - public void onResponse(String str3) { - try { - JSONObject jSONObject4 = new JSONObject(str3); - String lX = Kuaikan.this.lX("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiYJ5UFjeEgeUi5ynLKhj5EMF0\n3sawTyAKoPbfUCSZZQ5QdrHhrINggrYxDtB/TWXoqSF+BJP85F0vq8B6gOqFWhK/\n1PIKe2wKlRRuZSOdUzK/3vzRHmR3J3KGrvNzvwARH8gg8xZjbsalc/gBkcVxSxGd\n8j8rJ4QhOSFh9F8B2wIDAQAB", jSONObject4.getString("ticket")); - JSONObject jSONObject5 = new JSONObject(Kuaikan.this.UO(lX.substring(0, 16), lX.substring(16, 32), jSONObject4.getString("body"))); - JSONArray jSONArray = new JSONArray(); - JSONArray jSONArray2 = jSONObject5.getJSONArray("results"); - for (int i = 0; i < jSONArray2.length(); i++) { - JSONObject jSONObject6 = jSONArray2.getJSONObject(i); - JSONObject jSONObject7 = new JSONObject(); - jSONObject7.put("vod_id", jSONObject6.getString("id")); - jSONObject7.put("vod_name", jSONObject6.getString("name")); - jSONObject7.put("vod_pic", jSONObject6.getString("pic")); - jSONObject7.put("vod_remarks", jSONObject6.getString("progress")); - jSONArray.put(jSONObject7); - } - jSONObject3.put("page", Integer.parseInt(str2)); - int i2 = jSONObject5.getInt("count"); - int i3 = 20; - jSONObject3.put("pagecount", i2 % i3 == 0 ? i2 / i3 : (i2 / i3) + 1); - jSONObject3.put("limit", i3); - jSONObject3.put("total", i2); - jSONObject3.put("list", jSONArray); - } catch (JSONException e) { - } - } - }); - return jSONObject3.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - public String detailContent(final List list) { - try { - Q(); - JSONObject jSONObject = new JSONObject(); - long currentTimeMillis = System.currentTimeMillis() / 1000; - String f = f("1000300001dc431681b806089dac1153fb13960f87" + list.get(0) + currentTimeMillis + "notice"); - jSONObject.put("appId", "1000300001"); - jSONObject.put("id", list.get(0)); - jSONObject.put("sign", f); - jSONObject.put("timestamp", currentTimeMillis); - String O = Decrypt(Cb.substring(0, 16), Cb.substring(16, 32), jSONObject.toString()); - String tg = tg("MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDitX/rWP6WWc3h\nDzUcfD8Hbw79yCB7rz18GEkjDapjlUVIa3P8FEQFoOchu7N+vdK6HQNsl2Bql4lv\nWOYuzRWNbLGQ7mNtMca28iCuPHck0AcJzOs9F6qruPL73eY7Ai7yvzs2IfEdyXSz\nHP/yXgEOi5ZEBfsBZEPMJw6vfHJVueuD/lh/LkoJ/gXEKMCM/pkIzGpBPd2TsIg8\nZdvOGMPy+MOnJb1Qfe0y3QQdc5VPVdZFWoWsM9RAenHmE3d1THb+uNZZZcnM1tV7\nxYgBbIhgHtXAZnWDWDRBM3xJPR3O9dfBHHt/tbyrZrSwK1IgwFgqfYm/tRbmp4y/\n1DhIF6mDAgMBAAECggEAIzDjS2gEFNiZ0a6nouVSb1f47sHq8OgR1jp619seMNkR\n6Rzs4xtON8VzO1REl47lsAgi6O9SgxlEtykIiglBqDNQGNw4SNHqM6nAEuvF3sv/\n27CYb2JGFuPdq+UVAOHk4b93dH6uS95ipA8DV97psRVP3P1EqkGjGISTjf/2S4IG\n10Q0UhP4xxiRS2iCtaIq0fbvnrChqYRlYQYpkkRCCH+Q4FNKquSsqmWyCu5yfeQM\nMek+aT9KgvmCh05UCeqC1x7xPtSneNbpJpLD5zW8CcG7EYFDtIP8b9BPDlud47ZH\n5Y4/wyQQFHHLOaniTJVvEJZ7cIoXy2gOhvgcHpNryQKBgQDxNNtXnCfVK0JYNhnU\n5WCOX9NeW9Q79HldhTM5/EqsjA5H21j5S7A/duBSRfX7iou1hyXaa2p+J7rxF9sj\nNlwHPsKhprskxXaHJ7qU84gSmwORsTQQPmtTsizGwVsM330+Q2ZROaSEfDoUqH9+\nKBKs6K+FOldcTOrCZ+ILk8werwKBgQDwnQUrKATzRThVdD6Hcgt/F/SAizDmvtiT\nVvRcGkiV3EtB5Rx8zFNJ9GWrqSAArwIxTWgfYCYsvpUjbJW02Mg0Ufj2+YhjT713\nO9yViwUq996St9eLwGQO5FDMD8FYi7bRAiZEAeAeIEeveDRsNK15++8VVJVo7b2l\nzcapp5k3bQKBgQDSiJNHRhqSet6+xgIIDGoZ+1Qv0TFPX5UrZt8OpsK7FshEOhXQ\nCxt8WZN03HHXK9fEC4GjwwxBrwYB+BOjCYiMHmCd3j0M3HoXgDrgViyYKMuVuDk8\nUG83r5ZbqVuCwfO8i/HbxddueEvtyiD2CZ47ZCIHxKOKAe0K4Mex2UBaKwKBgQDi\nrEouOelP9Kn5dyVhHENQXBTu9DIBb1FAnO5fxjMTWxFa5qhLuYHNbfxKF24atsRu\nBepNhJryFCkT0jvGv2L8Ry0wHiwqwvhO14obJ3ia3iBEQAVDlt+sV9L2KvGOpTB4\n/nlmIA4u02I1IBziw02aWYkGo0SOMUo0ZQL+2PEykQKBgAV1uqiJlWuA9uPdFFJP\nZPL2YoOuTWdWfIwIb/UdsbUuTckCgqPIqUPi3HhiVSunOgcO7HWK3GD3j8k4XEbW\nG4y+Ik0lLrWzBl728tZe1GENzTf8aapElHlUfFSM4OlrTRBsbMOsQBcJNh7QbyoZ\nBHiZZTbRUY6xUR4DGYkCOksF", Cb); - JSONObject jSONObject2 = new JSONObject(); - jSONObject2.put("body", O); - jSONObject2.put("ticket", tg); - final JSONObject jSONObject3 = new JSONObject(); - OkHttpClient QH2 = OkHttpUtil.defaultClient(); - OkHttpUtil.postJson(QH2, "http://ctlook.facaishiyi.com/api/v1/video/play/" + list.get(0) + ".do ", jSONObject2.toString(), j(currentTimeMillis), new OKCallBack.OKCallBackString() { // from class: com.github.catvod.spider.Kuaikan.6 - @Override - public void onFailure(Call call, Exception exc) { - } - - public void onResponse(String str) { - try { - JSONObject jSONObject4 = new JSONObject(str); - String lX = Kuaikan.this.lX("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiYJ5UFjeEgeUi5ynLKhj5EMF0\n3sawTyAKoPbfUCSZZQ5QdrHhrINggrYxDtB/TWXoqSF+BJP85F0vq8B6gOqFWhK/\n1PIKe2wKlRRuZSOdUzK/3vzRHmR3J3KGrvNzvwARH8gg8xZjbsalc/gBkcVxSxGd\n8j8rJ4QhOSFh9F8B2wIDAQAB", jSONObject4.getString("ticket")); - JSONObject jSONObject5 = new JSONObject(Kuaikan.this.UO(lX.substring(0, 16), lX.substring(16, 32), jSONObject4.getString("body"))).getJSONObject("data"); - JSONArray jSONArray = new JSONArray(); - JSONObject jSONObject6 = new JSONObject(); - jSONObject6.put("vod_id", jSONObject5.getString("id")); - jSONObject6.put("vod_name", jSONObject5.getString("name")); - jSONObject6.put("vod_pic", jSONObject5.getString("pic")); - jSONObject6.put("vod_year", jSONObject5.getString("year")); - jSONObject6.put("vod_remarks", jSONObject5.getString("progress")); - jSONObject6.put("vod_actor", jSONObject5.getString("actor")); - jSONObject6.put("vod_director", jSONObject5.getString("director")); - jSONObject6.put("vod_content", jSONObject5.getString("content").trim()); - JSONArray jSONArray2 = new JSONArray(Kuaikan.this.UO("5551e2a82a21a9a1", "a586c5236206a2cb", jSONObject5.getString("newPlayback"))); - LinkedHashMap linkedHashMap = new LinkedHashMap(); - for (int i = 0; i < jSONArray2.length(); i++) { - JSONObject jSONObject7 = jSONArray2.getJSONObject(i); - String string = jSONObject7.getString("name"); - String string2 = jSONObject7.getString("id"); - JSONArray jSONArray3 = jSONObject7.getJSONArray("episodes"); - ArrayList arrayList = new ArrayList(); - for (int i2 = 0; i2 < jSONArray3.length(); i2++) { - JSONObject jSONObject8 = jSONArray3.getJSONObject(i2); - String string3 = jSONObject8.getString("title"); - StringBuilder sb = new StringBuilder(); - sb.append(string3); - sb.append("|"); - sb.append((String) list.get(0)); - sb.append("|"); - sb.append(string2); - sb.append("|"); - sb.append(jSONObject8.getString("url")); - String encodeToString = Base64.encodeToString(sb.toString().getBytes("UTF-8"), 10); - arrayList.add(string3 + "$" + encodeToString); - } - linkedHashMap.put(string, TextUtils.join("#", arrayList)); - } - String join = TextUtils.join("$$$", linkedHashMap.keySet()); - String join2 = TextUtils.join("$$$", linkedHashMap.values()); - jSONObject6.put("vod_play_from", join); - jSONObject6.put("vod_play_url", join2); - jSONArray.put(jSONObject6); - jSONObject3.put("list", jSONArray); - } catch (Throwable th) { - } - } - }); - return jSONObject3.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - String f(String str) { - try { - byte[] digest = MessageDigest.getInstance("MD5").digest(str.getBytes()); - StringBuilder sb = new StringBuilder(); - for (byte b : digest) { - String hexString = Integer.toHexString(b & 255); - if (hexString.length() < 2) { - sb.append(0); - } - sb.append(hexString); - } - return sb.toString().toLowerCase(); - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - return ""; - } - } - - public String homeContent(boolean z) { - try { - Q(); - JSONObject jSONObject = new JSONObject(); - long currentTimeMillis = System.currentTimeMillis() / 1000; - String f = f("1000300001dc431681b806089dac1153fb13960f87" + currentTimeMillis + "notice"); - jSONObject.put("appId", "1000300001"); - jSONObject.put("sign", f); - jSONObject.put("timestamp", currentTimeMillis); - String O = Decrypt(Cb.substring(0, 16), Cb.substring(16, 32), jSONObject.toString()); - String tg = tg("MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDitX/rWP6WWc3h\nDzUcfD8Hbw79yCB7rz18GEkjDapjlUVIa3P8FEQFoOchu7N+vdK6HQNsl2Bql4lv\nWOYuzRWNbLGQ7mNtMca28iCuPHck0AcJzOs9F6qruPL73eY7Ai7yvzs2IfEdyXSz\nHP/yXgEOi5ZEBfsBZEPMJw6vfHJVueuD/lh/LkoJ/gXEKMCM/pkIzGpBPd2TsIg8\nZdvOGMPy+MOnJb1Qfe0y3QQdc5VPVdZFWoWsM9RAenHmE3d1THb+uNZZZcnM1tV7\nxYgBbIhgHtXAZnWDWDRBM3xJPR3O9dfBHHt/tbyrZrSwK1IgwFgqfYm/tRbmp4y/\n1DhIF6mDAgMBAAECggEAIzDjS2gEFNiZ0a6nouVSb1f47sHq8OgR1jp619seMNkR\n6Rzs4xtON8VzO1REl47lsAgi6O9SgxlEtykIiglBqDNQGNw4SNHqM6nAEuvF3sv/\n27CYb2JGFuPdq+UVAOHk4b93dH6uS95ipA8DV97psRVP3P1EqkGjGISTjf/2S4IG\n10Q0UhP4xxiRS2iCtaIq0fbvnrChqYRlYQYpkkRCCH+Q4FNKquSsqmWyCu5yfeQM\nMek+aT9KgvmCh05UCeqC1x7xPtSneNbpJpLD5zW8CcG7EYFDtIP8b9BPDlud47ZH\n5Y4/wyQQFHHLOaniTJVvEJZ7cIoXy2gOhvgcHpNryQKBgQDxNNtXnCfVK0JYNhnU\n5WCOX9NeW9Q79HldhTM5/EqsjA5H21j5S7A/duBSRfX7iou1hyXaa2p+J7rxF9sj\nNlwHPsKhprskxXaHJ7qU84gSmwORsTQQPmtTsizGwVsM330+Q2ZROaSEfDoUqH9+\nKBKs6K+FOldcTOrCZ+ILk8werwKBgQDwnQUrKATzRThVdD6Hcgt/F/SAizDmvtiT\nVvRcGkiV3EtB5Rx8zFNJ9GWrqSAArwIxTWgfYCYsvpUjbJW02Mg0Ufj2+YhjT713\nO9yViwUq996St9eLwGQO5FDMD8FYi7bRAiZEAeAeIEeveDRsNK15++8VVJVo7b2l\nzcapp5k3bQKBgQDSiJNHRhqSet6+xgIIDGoZ+1Qv0TFPX5UrZt8OpsK7FshEOhXQ\nCxt8WZN03HHXK9fEC4GjwwxBrwYB+BOjCYiMHmCd3j0M3HoXgDrgViyYKMuVuDk8\nUG83r5ZbqVuCwfO8i/HbxddueEvtyiD2CZ47ZCIHxKOKAe0K4Mex2UBaKwKBgQDi\nrEouOelP9Kn5dyVhHENQXBTu9DIBb1FAnO5fxjMTWxFa5qhLuYHNbfxKF24atsRu\nBepNhJryFCkT0jvGv2L8Ry0wHiwqwvhO14obJ3ia3iBEQAVDlt+sV9L2KvGOpTB4\n/nlmIA4u02I1IBziw02aWYkGo0SOMUo0ZQL+2PEykQKBgAV1uqiJlWuA9uPdFFJP\nZPL2YoOuTWdWfIwIb/UdsbUuTckCgqPIqUPi3HhiVSunOgcO7HWK3GD3j8k4XEbW\nG4y+Ik0lLrWzBl728tZe1GENzTf8aapElHlUfFSM4OlrTRBsbMOsQBcJNh7QbyoZ\nBHiZZTbRUY6xUR4DGYkCOksF", Cb); - JSONObject jSONObject2 = new JSONObject(); - jSONObject2.put("body", O); - jSONObject2.put("ticket", tg); - final JSONObject jSONObject3 = new JSONObject(); - final JSONArray jSONArray = new JSONArray(); - OkHttpUtil.postJson(OkHttpUtil.defaultClient(), "http://ctlook.facaishiyi.com/api/v1/user/genres.do", jSONObject2.toString(), j(currentTimeMillis), new OKCallBack.OKCallBackString() { // from class: com.github.catvod.spider.Kuaikan.3 - @Override - public void onFailure(Call call, Exception exc) { - } - - public void onResponse(String str) { - try { - JSONObject jSONObject4 = new JSONObject(str); - String lX = Kuaikan.this.lX("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiYJ5UFjeEgeUi5ynLKhj5EMF0\n3sawTyAKoPbfUCSZZQ5QdrHhrINggrYxDtB/TWXoqSF+BJP85F0vq8B6gOqFWhK/\n1PIKe2wKlRRuZSOdUzK/3vzRHmR3J3KGrvNzvwARH8gg8xZjbsalc/gBkcVxSxGd\n8j8rJ4QhOSFh9F8B2wIDAQAB", jSONObject4.getString("ticket")); - JSONArray jSONArray2 = new JSONObject(Kuaikan.this.UO(lX.substring(0, 16), lX.substring(16, 32), jSONObject4.getString("body"))).getJSONArray("genres"); - for (int i = 0; i < jSONArray2.length(); i++) { - JSONObject jSONObject5 = jSONArray2.getJSONObject(i); - String string = jSONObject5.getString("name"); - final int i2 = jSONObject5.getInt("typeId"); - if (i2 > 0) { - JSONObject jSONObject6 = new JSONObject(); - jSONObject6.put("type_id", i2 + ""); - jSONObject6.put("type_name", string); - jSONArray.put(jSONObject6); - JSONObject jSONObject7 = new JSONObject(); - long currentTimeMillis2 = System.currentTimeMillis() / 1000; - Kuaikan kuaikan = Kuaikan.this; - String f2 = kuaikan.f("1000300001dc431681b806089dac1153fb13960f87" + i2 + currentTimeMillis2 + "notice"); - jSONObject7.put("appId", "1000300001"); - jSONObject7.put("tid", i2); - jSONObject7.put("sign", f2); - jSONObject7.put("timestamp", currentTimeMillis2); - String O2 = Kuaikan.this.Decrypt(Kuaikan.Cb.substring(0, 16), Kuaikan.Cb.substring(16, 32), jSONObject7.toString()); - String tg2 = Kuaikan.this.tg("MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDitX/rWP6WWc3h\nDzUcfD8Hbw79yCB7rz18GEkjDapjlUVIa3P8FEQFoOchu7N+vdK6HQNsl2Bql4lv\nWOYuzRWNbLGQ7mNtMca28iCuPHck0AcJzOs9F6qruPL73eY7Ai7yvzs2IfEdyXSz\nHP/yXgEOi5ZEBfsBZEPMJw6vfHJVueuD/lh/LkoJ/gXEKMCM/pkIzGpBPd2TsIg8\nZdvOGMPy+MOnJb1Qfe0y3QQdc5VPVdZFWoWsM9RAenHmE3d1THb+uNZZZcnM1tV7\nxYgBbIhgHtXAZnWDWDRBM3xJPR3O9dfBHHt/tbyrZrSwK1IgwFgqfYm/tRbmp4y/\n1DhIF6mDAgMBAAECggEAIzDjS2gEFNiZ0a6nouVSb1f47sHq8OgR1jp619seMNkR\n6Rzs4xtON8VzO1REl47lsAgi6O9SgxlEtykIiglBqDNQGNw4SNHqM6nAEuvF3sv/\n27CYb2JGFuPdq+UVAOHk4b93dH6uS95ipA8DV97psRVP3P1EqkGjGISTjf/2S4IG\n10Q0UhP4xxiRS2iCtaIq0fbvnrChqYRlYQYpkkRCCH+Q4FNKquSsqmWyCu5yfeQM\nMek+aT9KgvmCh05UCeqC1x7xPtSneNbpJpLD5zW8CcG7EYFDtIP8b9BPDlud47ZH\n5Y4/wyQQFHHLOaniTJVvEJZ7cIoXy2gOhvgcHpNryQKBgQDxNNtXnCfVK0JYNhnU\n5WCOX9NeW9Q79HldhTM5/EqsjA5H21j5S7A/duBSRfX7iou1hyXaa2p+J7rxF9sj\nNlwHPsKhprskxXaHJ7qU84gSmwORsTQQPmtTsizGwVsM330+Q2ZROaSEfDoUqH9+\nKBKs6K+FOldcTOrCZ+ILk8werwKBgQDwnQUrKATzRThVdD6Hcgt/F/SAizDmvtiT\nVvRcGkiV3EtB5Rx8zFNJ9GWrqSAArwIxTWgfYCYsvpUjbJW02Mg0Ufj2+YhjT713\nO9yViwUq996St9eLwGQO5FDMD8FYi7bRAiZEAeAeIEeveDRsNK15++8VVJVo7b2l\nzcapp5k3bQKBgQDSiJNHRhqSet6+xgIIDGoZ+1Qv0TFPX5UrZt8OpsK7FshEOhXQ\nCxt8WZN03HHXK9fEC4GjwwxBrwYB+BOjCYiMHmCd3j0M3HoXgDrgViyYKMuVuDk8\nUG83r5ZbqVuCwfO8i/HbxddueEvtyiD2CZ47ZCIHxKOKAe0K4Mex2UBaKwKBgQDi\nrEouOelP9Kn5dyVhHENQXBTu9DIBb1FAnO5fxjMTWxFa5qhLuYHNbfxKF24atsRu\nBepNhJryFCkT0jvGv2L8Ry0wHiwqwvhO14obJ3ia3iBEQAVDlt+sV9L2KvGOpTB4\n/nlmIA4u02I1IBziw02aWYkGo0SOMUo0ZQL+2PEykQKBgAV1uqiJlWuA9uPdFFJP\nZPL2YoOuTWdWfIwIb/UdsbUuTckCgqPIqUPi3HhiVSunOgcO7HWK3GD3j8k4XEbW\nG4y+Ik0lLrWzBl728tZe1GENzTf8aapElHlUfFSM4OlrTRBsbMOsQBcJNh7QbyoZ\nBHiZZTbRUY6xUR4DGYkCOksF", Kuaikan.Cb); - JSONObject jSONObject8 = new JSONObject(); - jSONObject8.put("body", O2); - jSONObject8.put("ticket", tg2); - new JSONArray(); - OkHttpUtil.postJson(OkHttpUtil.defaultClient(), "http://ctlook.facaishiyi.com/api/v1/search/category.do", jSONObject8.toString(), Kuaikan.this.j(currentTimeMillis2), new OKCallBack.OKCallBackString() { // from class: com.github.catvod.spider.Kuaikan.3.1 - @Override - public void onFailure(Call call, Exception exc) { - } - - public void onResponse(String str2) { - try { - JSONObject jSONObject9 = new JSONObject(str2); - String lX2 = Kuaikan.this.lX("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiYJ5UFjeEgeUi5ynLKhj5EMF0\n3sawTyAKoPbfUCSZZQ5QdrHhrINggrYxDtB/TWXoqSF+BJP85F0vq8B6gOqFWhK/\n1PIKe2wKlRRuZSOdUzK/3vzRHmR3J3KGrvNzvwARH8gg8xZjbsalc/gBkcVxSxGd\n8j8rJ4QhOSFh9F8B2wIDAQAB", jSONObject9.getString("ticket")); - JSONObject jSONObject10 = new JSONObject(Kuaikan.this.UO(lX2.substring(0, 16), lX2.substring(16, 32), jSONObject9.getString("body"))); - JSONArray jSONArray3 = jSONObject10.getJSONArray("areas"); - JSONArray jSONArray4 = jSONObject10.getJSONArray("years"); - JSONArray jSONArray5 = jSONObject10.getJSONArray("tags"); - JSONArray jSONArray6 = new JSONArray(); - JSONObject jSONObject11 = new JSONObject(); - jSONObject11.put("key", "tagId"); - jSONObject11.put("name", "类型"); - JSONArray jSONArray7 = new JSONArray(); - for (int i3 = 0; i3 < jSONArray5.length(); i3++) { - JSONObject jSONObject12 = jSONArray5.getJSONObject(i3); - JSONObject jSONObject13 = new JSONObject(); - jSONObject13.put("n", jSONObject12.getString("name")); - jSONObject13.put("v", jSONObject12.getString("id")); - jSONArray7.put(jSONObject13); - } - jSONObject11.put("value", jSONArray7); - jSONArray6.put(jSONObject11); - JSONObject jSONObject14 = new JSONObject(); - jSONObject14.put("key", "areaId"); - jSONObject14.put("name", "地区"); - JSONArray jSONArray8 = new JSONArray(); - for (int i4 = 0; i4 < jSONArray3.length(); i4++) { - JSONObject jSONObject15 = jSONArray3.getJSONObject(i4); - JSONObject jSONObject16 = new JSONObject(); - jSONObject16.put("n", jSONObject15.getString("name")); - jSONObject16.put("v", jSONObject15.getString("id")); - jSONArray8.put(jSONObject16); - } - jSONObject14.put("value", jSONArray8); - jSONArray6.put(jSONObject14); - JSONObject jSONObject17 = new JSONObject(); - jSONObject17.put("key", "yearId"); - jSONObject17.put("name", "年份"); - JSONArray jSONArray9 = new JSONArray(); - for (int i5 = 0; i5 < jSONArray4.length(); i5++) { - JSONObject jSONObject18 = jSONArray4.getJSONObject(i5); - JSONObject jSONObject19 = new JSONObject(); - jSONObject19.put("n", jSONObject18.getString("name")); - jSONObject19.put("v", jSONObject18.getString("id")); - jSONArray9.put(jSONObject19); - } - jSONObject17.put("value", jSONArray9); - jSONArray6.put(jSONObject17); - jSONObject3.put(i2 + "", jSONArray6); - } catch (JSONException e) { - } - } - }); - } - } - } catch (JSONException e) { - } - } - }); - JSONObject jSONObject4 = new JSONObject(); - jSONObject4.put("class", jSONArray); - if (z) { - jSONObject4.put("filters", jSONObject3); - } - return jSONObject4.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - public String homeVideoContent() { - try { - Q(); - JSONObject jSONObject = new JSONObject(); - long currentTimeMillis = System.currentTimeMillis() / 1000; - String f = f("1000300001dc431681b806089dac1153fb13960f87115" + currentTimeMillis + "notice"); - jSONObject.put("appId", "1000300001"); - jSONObject.put("id", 115); - jSONObject.put("sign", f); - jSONObject.put("timestamp", currentTimeMillis); - String O = Decrypt(Cb.substring(0, 16), Cb.substring(16, 32), jSONObject.toString()); - String tg = tg("MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDitX/rWP6WWc3h\nDzUcfD8Hbw79yCB7rz18GEkjDapjlUVIa3P8FEQFoOchu7N+vdK6HQNsl2Bql4lv\nWOYuzRWNbLGQ7mNtMca28iCuPHck0AcJzOs9F6qruPL73eY7Ai7yvzs2IfEdyXSz\nHP/yXgEOi5ZEBfsBZEPMJw6vfHJVueuD/lh/LkoJ/gXEKMCM/pkIzGpBPd2TsIg8\nZdvOGMPy+MOnJb1Qfe0y3QQdc5VPVdZFWoWsM9RAenHmE3d1THb+uNZZZcnM1tV7\nxYgBbIhgHtXAZnWDWDRBM3xJPR3O9dfBHHt/tbyrZrSwK1IgwFgqfYm/tRbmp4y/\n1DhIF6mDAgMBAAECggEAIzDjS2gEFNiZ0a6nouVSb1f47sHq8OgR1jp619seMNkR\n6Rzs4xtON8VzO1REl47lsAgi6O9SgxlEtykIiglBqDNQGNw4SNHqM6nAEuvF3sv/\n27CYb2JGFuPdq+UVAOHk4b93dH6uS95ipA8DV97psRVP3P1EqkGjGISTjf/2S4IG\n10Q0UhP4xxiRS2iCtaIq0fbvnrChqYRlYQYpkkRCCH+Q4FNKquSsqmWyCu5yfeQM\nMek+aT9KgvmCh05UCeqC1x7xPtSneNbpJpLD5zW8CcG7EYFDtIP8b9BPDlud47ZH\n5Y4/wyQQFHHLOaniTJVvEJZ7cIoXy2gOhvgcHpNryQKBgQDxNNtXnCfVK0JYNhnU\n5WCOX9NeW9Q79HldhTM5/EqsjA5H21j5S7A/duBSRfX7iou1hyXaa2p+J7rxF9sj\nNlwHPsKhprskxXaHJ7qU84gSmwORsTQQPmtTsizGwVsM330+Q2ZROaSEfDoUqH9+\nKBKs6K+FOldcTOrCZ+ILk8werwKBgQDwnQUrKATzRThVdD6Hcgt/F/SAizDmvtiT\nVvRcGkiV3EtB5Rx8zFNJ9GWrqSAArwIxTWgfYCYsvpUjbJW02Mg0Ufj2+YhjT713\nO9yViwUq996St9eLwGQO5FDMD8FYi7bRAiZEAeAeIEeveDRsNK15++8VVJVo7b2l\nzcapp5k3bQKBgQDSiJNHRhqSet6+xgIIDGoZ+1Qv0TFPX5UrZt8OpsK7FshEOhXQ\nCxt8WZN03HHXK9fEC4GjwwxBrwYB+BOjCYiMHmCd3j0M3HoXgDrgViyYKMuVuDk8\nUG83r5ZbqVuCwfO8i/HbxddueEvtyiD2CZ47ZCIHxKOKAe0K4Mex2UBaKwKBgQDi\nrEouOelP9Kn5dyVhHENQXBTu9DIBb1FAnO5fxjMTWxFa5qhLuYHNbfxKF24atsRu\nBepNhJryFCkT0jvGv2L8Ry0wHiwqwvhO14obJ3ia3iBEQAVDlt+sV9L2KvGOpTB4\n/nlmIA4u02I1IBziw02aWYkGo0SOMUo0ZQL+2PEykQKBgAV1uqiJlWuA9uPdFFJP\nZPL2YoOuTWdWfIwIb/UdsbUuTckCgqPIqUPi3HhiVSunOgcO7HWK3GD3j8k4XEbW\nG4y+Ik0lLrWzBl728tZe1GENzTf8aapElHlUfFSM4OlrTRBsbMOsQBcJNh7QbyoZ\nBHiZZTbRUY6xUR4DGYkCOksF", Cb); - JSONObject jSONObject2 = new JSONObject(); - jSONObject2.put("body", O); - jSONObject2.put("ticket", tg); - final JSONArray jSONArray = new JSONArray(); - OkHttpClient QH2 = OkHttpUtil.defaultClient(); - OkHttpUtil.postJson(QH2, "http://ctlook.facaishiyi.com/api/v1/user/genre/115.do", jSONObject2.toString(), j(currentTimeMillis), new OKCallBack.OKCallBackString() { // from class: com.github.catvod.spider.Kuaikan.4 - @Override - public void onFailure(Call call, Exception exc) { - } - - public void onResponse(String str) { - try { - JSONObject jSONObject3 = new JSONObject(str); - String lX = Kuaikan.this.lX("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiYJ5UFjeEgeUi5ynLKhj5EMF0\n3sawTyAKoPbfUCSZZQ5QdrHhrINggrYxDtB/TWXoqSF+BJP85F0vq8B6gOqFWhK/\n1PIKe2wKlRRuZSOdUzK/3vzRHmR3J3KGrvNzvwARH8gg8xZjbsalc/gBkcVxSxGd\n8j8rJ4QhOSFh9F8B2wIDAQAB", jSONObject3.getString("ticket")); - JSONArray jSONArray2 = new JSONObject(Kuaikan.this.UO(lX.substring(0, 16), lX.substring(16, 32), jSONObject3.getString("body"))).getJSONArray("subGenres"); - for (int i = 0; i < jSONArray2.length(); i++) { - if (jSONArray2.getJSONObject(i).getInt("template") == 1) { - JSONArray jSONArray3 = jSONArray2.getJSONObject(i).getJSONArray("video"); - for (int i2 = 0; i2 < jSONArray3.length(); i2++) { - JSONObject jSONObject4 = jSONArray3.getJSONObject(i2); - JSONObject jSONObject5 = new JSONObject(); - jSONObject5.put("vod_id", jSONObject4.getString("id")); - jSONObject5.put("vod_name", jSONObject4.getString("name")); - jSONObject5.put("vod_pic", jSONObject4.getString("pic")); - jSONObject5.put("vod_remarks", jSONObject4.getString("progress")); - jSONArray.put(jSONObject5); - } - } - } - } catch (JSONException e) { - } - } - }); - JSONObject jSONObject3 = new JSONObject(); - jSONObject3.put("list", jSONArray); - return jSONObject3.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - public void init(Context context, String str) { - Kuaikan.super.init(context, str); - SharedPreferences sharedPreferences = context.getSharedPreferences("spider_Kuaikan", 0); - try { - String string = sharedPreferences.getString("umId", null); - dW = string; - if (string != null) { - return; - } - } catch (Throwable th) { - if (dW != null) { - return; - } - } - dW = f(UUID.randomUUID().toString()).toLowerCase(); - sharedPreferences.edit().putString("umId", dW).commit(); - } - - String lX(String str, String str2) { - int i = 0; - try { - Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); - cipher.init(2, (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(Base64.decode(str, 0)))); - byte[] decode = Base64.decode(str2, 0); - ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - if (decode.length <= 256) { - byteArrayOutputStream.write(cipher.doFinal(decode)); - } else { - int length = decode.length; - while (i < length) { - int i2 = i + 256; - byteArrayOutputStream.write(cipher.doFinal(decode, i, i2 > length ? length - i : 256)); - i = i2; - } - } - byteArrayOutputStream.flush(); - byteArrayOutputStream.close(); - return new String(byteArrayOutputStream.toByteArray(), "UTF-8"); - } catch (Exception e) { - return ""; - } - } - - public String playerContent(String str, String str2, List list) { - try { - Q(); - String[] split = new String(Base64.decode(str2, 10), "UTF-8").split("\\|"); - ArrayList arrayList = this.Ji.get(split[2]); - final JSONObject jSONObject = new JSONObject(); - if (arrayList != null && arrayList.size() > 0) { - Iterator it = arrayList.iterator(); - while (it.hasNext()) { - String next = it.next(); - if (jSONObject.has("url")) { - break; - } - JSONObject jSONObject2 = new JSONObject(); - long currentTimeMillis = System.currentTimeMillis() / 1000; - String f = f("1000300001dc431681b806089dac1153fb13960f87" + split[1] + split[0] + split[3] + currentTimeMillis + "notice"); - jSONObject2.put("appId", "1000300001"); - jSONObject2.put("id", split[1]); - jSONObject2.put("title", split[0]); - jSONObject2.put("url", split[3]); - jSONObject2.put("sign", f); - jSONObject2.put("timestamp", currentTimeMillis); - String O = Decrypt(Cb.substring(0, 16), Cb.substring(16, 32), jSONObject2.toString()); - String tg = tg("MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDitX/rWP6WWc3h\nDzUcfD8Hbw79yCB7rz18GEkjDapjlUVIa3P8FEQFoOchu7N+vdK6HQNsl2Bql4lv\nWOYuzRWNbLGQ7mNtMca28iCuPHck0AcJzOs9F6qruPL73eY7Ai7yvzs2IfEdyXSz\nHP/yXgEOi5ZEBfsBZEPMJw6vfHJVueuD/lh/LkoJ/gXEKMCM/pkIzGpBPd2TsIg8\nZdvOGMPy+MOnJb1Qfe0y3QQdc5VPVdZFWoWsM9RAenHmE3d1THb+uNZZZcnM1tV7\nxYgBbIhgHtXAZnWDWDRBM3xJPR3O9dfBHHt/tbyrZrSwK1IgwFgqfYm/tRbmp4y/\n1DhIF6mDAgMBAAECggEAIzDjS2gEFNiZ0a6nouVSb1f47sHq8OgR1jp619seMNkR\n6Rzs4xtON8VzO1REl47lsAgi6O9SgxlEtykIiglBqDNQGNw4SNHqM6nAEuvF3sv/\n27CYb2JGFuPdq+UVAOHk4b93dH6uS95ipA8DV97psRVP3P1EqkGjGISTjf/2S4IG\n10Q0UhP4xxiRS2iCtaIq0fbvnrChqYRlYQYpkkRCCH+Q4FNKquSsqmWyCu5yfeQM\nMek+aT9KgvmCh05UCeqC1x7xPtSneNbpJpLD5zW8CcG7EYFDtIP8b9BPDlud47ZH\n5Y4/wyQQFHHLOaniTJVvEJZ7cIoXy2gOhvgcHpNryQKBgQDxNNtXnCfVK0JYNhnU\n5WCOX9NeW9Q79HldhTM5/EqsjA5H21j5S7A/duBSRfX7iou1hyXaa2p+J7rxF9sj\nNlwHPsKhprskxXaHJ7qU84gSmwORsTQQPmtTsizGwVsM330+Q2ZROaSEfDoUqH9+\nKBKs6K+FOldcTOrCZ+ILk8werwKBgQDwnQUrKATzRThVdD6Hcgt/F/SAizDmvtiT\nVvRcGkiV3EtB5Rx8zFNJ9GWrqSAArwIxTWgfYCYsvpUjbJW02Mg0Ufj2+YhjT713\nO9yViwUq996St9eLwGQO5FDMD8FYi7bRAiZEAeAeIEeveDRsNK15++8VVJVo7b2l\nzcapp5k3bQKBgQDSiJNHRhqSet6+xgIIDGoZ+1Qv0TFPX5UrZt8OpsK7FshEOhXQ\nCxt8WZN03HHXK9fEC4GjwwxBrwYB+BOjCYiMHmCd3j0M3HoXgDrgViyYKMuVuDk8\nUG83r5ZbqVuCwfO8i/HbxddueEvtyiD2CZ47ZCIHxKOKAe0K4Mex2UBaKwKBgQDi\nrEouOelP9Kn5dyVhHENQXBTu9DIBb1FAnO5fxjMTWxFa5qhLuYHNbfxKF24atsRu\nBepNhJryFCkT0jvGv2L8Ry0wHiwqwvhO14obJ3ia3iBEQAVDlt+sV9L2KvGOpTB4\n/nlmIA4u02I1IBziw02aWYkGo0SOMUo0ZQL+2PEykQKBgAV1uqiJlWuA9uPdFFJP\nZPL2YoOuTWdWfIwIb/UdsbUuTckCgqPIqUPi3HhiVSunOgcO7HWK3GD3j8k4XEbW\nG4y+Ik0lLrWzBl728tZe1GENzTf8aapElHlUfFSM4OlrTRBsbMOsQBcJNh7QbyoZ\nBHiZZTbRUY6xUR4DGYkCOksF", Cb); - JSONObject jSONObject3 = new JSONObject(); - jSONObject3.put("body", O); - jSONObject3.put("ticket", tg); - OkHttpUtil.postJson(OkHttpUtil.defaultClient(), next, jSONObject3.toString(), j(currentTimeMillis), new OKCallBack.OKCallBackString() { // from class: com.github.catvod.spider.Kuaikan.7 - @Override // com.github.catvod.spider.merge.OKCallBack - public void onFailure(Call call, Exception exc) { - } - - public void onResponse(String str3) { - try { - JSONObject jSONObject4 = new JSONObject(str3); - String lX = Kuaikan.this.lX("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiYJ5UFjeEgeUi5ynLKhj5EMF0\n3sawTyAKoPbfUCSZZQ5QdrHhrINggrYxDtB/TWXoqSF+BJP85F0vq8B6gOqFWhK/\n1PIKe2wKlRRuZSOdUzK/3vzRHmR3J3KGrvNzvwARH8gg8xZjbsalc/gBkcVxSxGd\n8j8rJ4QhOSFh9F8B2wIDAQAB", jSONObject4.getString("ticket")); - JSONObject jSONObject5 = new JSONObject(Kuaikan.this.UO(lX.substring(0, 16), lX.substring(16, 32), jSONObject4.getString("body"))); - if (jSONObject5.optString("msg", "").equals("success") && jSONObject5.optInt("code", -1) == 0) { - jSONObject.put("parse", 0); - jSONObject.put("header", ""); - jSONObject.put("playUrl", ""); - jSONObject.put("url", jSONObject5.getString("url")); - } - } catch (JSONException e) { - } - } - }); - } - } - if (jSONObject.has("url")) { - return jSONObject.toString(); - } - if (!Misc.isVideoFormat(split[3])) { - return ""; - } - jSONObject.put("parse", 0); - jSONObject.put("header", ""); - jSONObject.put("playUrl", ""); - jSONObject.put("url", split[3]); - return jSONObject.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - public String searchContent(String str, boolean z) { - try { - Q(); - JSONObject jSONObject = new JSONObject(); - long currentTimeMillis = System.currentTimeMillis() / 1000; - String f = f("1000300001dc431681b806089dac1153fb13960f87112" + str + currentTimeMillis + "notice"); - jSONObject.put("appId", "1000300001"); - jSONObject.put("keyword", str); - jSONObject.put("page", 1); - jSONObject.put("pageSize", 12); - jSONObject.put("sign", f); - jSONObject.put("timestamp", currentTimeMillis); - String O = Decrypt(Cb.substring(0, 16), Cb.substring(16, 32), jSONObject.toString()); - String tg = tg("MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDitX/rWP6WWc3h\nDzUcfD8Hbw79yCB7rz18GEkjDapjlUVIa3P8FEQFoOchu7N+vdK6HQNsl2Bql4lv\nWOYuzRWNbLGQ7mNtMca28iCuPHck0AcJzOs9F6qruPL73eY7Ai7yvzs2IfEdyXSz\nHP/yXgEOi5ZEBfsBZEPMJw6vfHJVueuD/lh/LkoJ/gXEKMCM/pkIzGpBPd2TsIg8\nZdvOGMPy+MOnJb1Qfe0y3QQdc5VPVdZFWoWsM9RAenHmE3d1THb+uNZZZcnM1tV7\nxYgBbIhgHtXAZnWDWDRBM3xJPR3O9dfBHHt/tbyrZrSwK1IgwFgqfYm/tRbmp4y/\n1DhIF6mDAgMBAAECggEAIzDjS2gEFNiZ0a6nouVSb1f47sHq8OgR1jp619seMNkR\n6Rzs4xtON8VzO1REl47lsAgi6O9SgxlEtykIiglBqDNQGNw4SNHqM6nAEuvF3sv/\n27CYb2JGFuPdq+UVAOHk4b93dH6uS95ipA8DV97psRVP3P1EqkGjGISTjf/2S4IG\n10Q0UhP4xxiRS2iCtaIq0fbvnrChqYRlYQYpkkRCCH+Q4FNKquSsqmWyCu5yfeQM\nMek+aT9KgvmCh05UCeqC1x7xPtSneNbpJpLD5zW8CcG7EYFDtIP8b9BPDlud47ZH\n5Y4/wyQQFHHLOaniTJVvEJZ7cIoXy2gOhvgcHpNryQKBgQDxNNtXnCfVK0JYNhnU\n5WCOX9NeW9Q79HldhTM5/EqsjA5H21j5S7A/duBSRfX7iou1hyXaa2p+J7rxF9sj\nNlwHPsKhprskxXaHJ7qU84gSmwORsTQQPmtTsizGwVsM330+Q2ZROaSEfDoUqH9+\nKBKs6K+FOldcTOrCZ+ILk8werwKBgQDwnQUrKATzRThVdD6Hcgt/F/SAizDmvtiT\nVvRcGkiV3EtB5Rx8zFNJ9GWrqSAArwIxTWgfYCYsvpUjbJW02Mg0Ufj2+YhjT713\nO9yViwUq996St9eLwGQO5FDMD8FYi7bRAiZEAeAeIEeveDRsNK15++8VVJVo7b2l\nzcapp5k3bQKBgQDSiJNHRhqSet6+xgIIDGoZ+1Qv0TFPX5UrZt8OpsK7FshEOhXQ\nCxt8WZN03HHXK9fEC4GjwwxBrwYB+BOjCYiMHmCd3j0M3HoXgDrgViyYKMuVuDk8\nUG83r5ZbqVuCwfO8i/HbxddueEvtyiD2CZ47ZCIHxKOKAe0K4Mex2UBaKwKBgQDi\nrEouOelP9Kn5dyVhHENQXBTu9DIBb1FAnO5fxjMTWxFa5qhLuYHNbfxKF24atsRu\nBepNhJryFCkT0jvGv2L8Ry0wHiwqwvhO14obJ3ia3iBEQAVDlt+sV9L2KvGOpTB4\n/nlmIA4u02I1IBziw02aWYkGo0SOMUo0ZQL+2PEykQKBgAV1uqiJlWuA9uPdFFJP\nZPL2YoOuTWdWfIwIb/UdsbUuTckCgqPIqUPi3HhiVSunOgcO7HWK3GD3j8k4XEbW\nG4y+Ik0lLrWzBl728tZe1GENzTf8aapElHlUfFSM4OlrTRBsbMOsQBcJNh7QbyoZ\nBHiZZTbRUY6xUR4DGYkCOksF", Cb); - JSONObject jSONObject2 = new JSONObject(); - jSONObject2.put("body", O); - jSONObject2.put("ticket", tg); - final JSONObject jSONObject3 = new JSONObject(); - OkHttpUtil.postJson(OkHttpUtil.defaultClient(), "http://ctlook.facaishiyi.com/api/v1/search/page.do", jSONObject2.toString(), j(currentTimeMillis), new OKCallBack.OKCallBackString() { // from class: com.github.catvod.spider.Kuaikan.8 - @Override - public void onFailure(Call call, Exception exc) { - } - - public void onResponse(String str2) { - try { - JSONObject jSONObject4 = new JSONObject(str2); - String lX = Kuaikan.this.lX("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiYJ5UFjeEgeUi5ynLKhj5EMF0\n3sawTyAKoPbfUCSZZQ5QdrHhrINggrYxDtB/TWXoqSF+BJP85F0vq8B6gOqFWhK/\n1PIKe2wKlRRuZSOdUzK/3vzRHmR3J3KGrvNzvwARH8gg8xZjbsalc/gBkcVxSxGd\n8j8rJ4QhOSFh9F8B2wIDAQAB", jSONObject4.getString("ticket")); - JSONObject jSONObject5 = new JSONObject(Kuaikan.this.UO(lX.substring(0, 16), lX.substring(16, 32), jSONObject4.getString("body"))); - JSONArray jSONArray = new JSONArray(); - JSONArray jSONArray2 = jSONObject5.getJSONArray("results"); - for (int i = 0; i < jSONArray2.length(); i++) { - JSONObject jSONObject6 = jSONArray2.getJSONObject(i); - JSONObject jSONObject7 = new JSONObject(); - jSONObject7.put("vod_id", jSONObject6.getString("id")); - jSONObject7.put("vod_name", jSONObject6.getString("name")); - jSONObject7.put("vod_pic", jSONObject6.getString("pic")); - jSONArray.put(jSONObject7); - } - jSONObject3.put("list", jSONArray); - } catch (JSONException e) { - } - } - }); - return jSONObject3.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - String tg(String str, String str2) { - int i = 0; - try { - PrivateKey generatePrivate = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(Base64.decode(str, 0))); - Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); - cipher.init(1, generatePrivate); - byte[] bytes = str2.getBytes(); - ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - if (bytes.length <= 256) { - byteArrayOutputStream.write(cipher.doFinal(bytes)); - } else { - int length = bytes.length; - while (i < bytes.length) { - int i2 = i + 256; - byteArrayOutputStream.write(cipher.doFinal(bytes, i, i2 > length ? length - i : 256)); - i = i2; - } - } - byteArrayOutputStream.flush(); - byteArrayOutputStream.close(); - return Base64.encodeToString(byteArrayOutputStream.toByteArray(), 2); - } catch (Exception e) { - e.printStackTrace(); - return ""; - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/Kunyu77.java b/app/src/main/java/com/github/catvod/spider/Kunyu77.java index ef6d1ff..f56b9a0 100644 --- a/app/src/main/java/com/github/catvod/spider/Kunyu77.java +++ b/app/src/main/java/com/github/catvod/spider/Kunyu77.java @@ -31,6 +31,12 @@ public class Kunyu77 extends Spider { private HashMap getHeaders(String url) { HashMap headers = new HashMap<>(); headers.put("user-agent", uAgent); + String t = String.valueOf(System.currentTimeMillis()/ 1000) ; + + String zuhe=url+t+"XSpeUFjJ"; + String TK=Misc.MD5(zuhe, Misc.CharsetUTF8); + headers.put("TK",TK); + headers.put("t",t); return headers; } @@ -224,8 +230,9 @@ public class Kunyu77 extends Spider { @Override public String detailContent(List ids) { try { - String url = siteUrl + "/api.php/provide/videoDetail?ids=" + ids.get(0); - String content = OkHttpUtil.string(url, getHeaders(url)); + String url = siteUrl + "/api.php/provide/videoDetail?ids=" + ids.get(0) + "&version=2.0.4&sj=1661957675"; + String urlx="/api.php/provide/videoDetail" + ids.get(0); + String content = OkHttpUtil.string(url, getHeaders(urlx)); JSONObject dataObject = new JSONObject(decryptResponse(content)); JSONObject vObj = dataObject.getJSONObject("data"); JSONObject result = new JSONObject(); @@ -243,7 +250,7 @@ public class Kunyu77 extends Spider { vodAtom.put("vod_director", vObj.getString("director")); vodAtom.put("vod_content", vObj.getString("brief").trim()); - url = siteUrl + "/api.php/provide/videoPlaylist?ids=" + ids.get(0); + url = siteUrl + "/api.php/provide/videoPlaylist?ids=" + ids.get(0) + "&version=2.0.4&sj=1661957675"; content = OkHttpUtil.string(url, getHeaders(url)); JSONArray episodes = new JSONObject(content).getJSONObject("data").getJSONArray("episodes"); LinkedHashMap> playlist = new LinkedHashMap<>(); diff --git a/app/src/main/java/com/github/catvod/spider/Lib.java b/app/src/main/java/com/github/catvod/spider/Lib.java deleted file mode 100644 index 25925b4..0000000 --- a/app/src/main/java/com/github/catvod/spider/Lib.java +++ /dev/null @@ -1,504 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.text.TextUtils; - -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import org.json.JSONArray; -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.URLEncoder; -import java.util.ArrayList; -import java.util.Comparator; -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; - -public class Lib extends Spider { - private static final String siteUrl = "https://www.libvio.me/"; - private static final String siteHost = "www.libvio.me"; - - /** - * 播放源配置 - */ - private JSONObject playerConfig; - /** - * 筛选配置 - */ - private JSONObject filterConfig; - private Pattern regexCategory = Pattern.compile("/type/(\\d+).html"); - private Pattern regexVid = Pattern.compile("/detail/(\\d+).html"); - private Pattern regexPlay = Pattern.compile("/play/(\\d+)-(\\d+)-(\\d+).html"); - private Pattern regexPage = Pattern.compile("/show/(\\S+).html"); - - protected String ext = null; - - @Override - public void init(Context context) { - super.init(context); - try { - playerConfig = new JSONObject("{\"LINE405\":{\"sh\":\"LINE405\",\"pu\":\"https://sh-data-s01.chinaeast2.cloudapp.chinacloudapi.cn/lb.php?url=\",\"sn\":1,\"or\":999},\"LINE406\":{\"sh\":\"LINE406\",\"pu\":\"https://sh-data-s01.chinaeast2.cloudapp.chinacloudapi.cn/zm.php?url=\",\"sn\":1,\"or\":999},\"LINE407\":{\"sh\":\"LINE407\",\"pu\":\"https://sh-data-s01.chinaeast2.cloudapp.chinacloudapi.cn/lb.php?url=\",\"sn\":1,\"or\":999},\"LINE408\":{\"sh\":\"LINE408\",\"pu\":\"\",\"sn\":0,\"or\":999},\"p300\":{\"sh\":\"LINE300\",\"pu\":\"\",\"sn\":0,\"or\":999},\"p301\":{\"sh\":\"LINE301\",\"pu\":\"\",\"sn\":0,\"or\":999},\"line402-日语\":{\"sh\":\"LINE402\",\"pu\":\"\",\"sn\":0,\"or\":999},\"LINE400\":{\"sh\":\"LINE400\",\"pu\":\"https://sh-data-s01.chinaeast2.cloudapp.chinacloudapi.cn/lb.php?url=\",\"sn\":1,\"or\":999},\"line401\":{\"sh\":\"LINE401\",\"pu\":\"\",\"sn\":0,\"or\":999}}"); - filterConfig = new JSONObject("{\"1\":[{\"key\":\"3\",\"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\":\"武侠\"},{\"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\":\"农村\"},{\"n\":\"儿童\",\"v\":\"儿童\"}]},{\"key\":\"1\",\"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\":\"意大利\"},{\"n\":\"西班牙\",\"v\":\"西班牙\"},{\"n\":\"加拿大\",\"v\":\"加拿大\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"11\",\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"4\",\"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\":\"意大利语\"},{\"n\":\"其它\",\"v\":\"其它\"}]},{\"key\":\"2\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"2\":[{\"key\":\"3\",\"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\":\"乡村\"},{\"n\":\"情景\",\"v\":\"情景\"},{\"n\":\"商战\",\"v\":\"商战\"},{\"n\":\"网剧\",\"v\":\"网剧\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"1\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"中国大陆\",\"v\":\"中国大陆\"},{\"n\":\"中国台湾\",\"v\":\"中国台湾\"},{\"n\":\"中国香港\",\"v\":\"中国香港\"},{\"n\":\"韩国\",\"v\":\"韩国\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"美国\",\"v\":\"美国\"},{\"n\":\"泰国\",\"v\":\"泰国\"},{\"n\":\"英国\",\"v\":\"英国\"},{\"n\":\"新加坡\",\"v\":\"新加坡\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"4\",\"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\":\"意大利语\"},{\"n\":\"其它\",\"v\":\"其它\"}]},{\"key\":\"11\",\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"2\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"4\":[{\"key\":\"3\",\"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\":\"战争\"},{\"n\":\"少年\",\"v\":\"少年\"},{\"n\":\"少女\",\"v\":\"少女\"},{\"n\":\"社会\",\"v\":\"社会\"},{\"n\":\"原创\",\"v\":\"原创\"},{\"n\":\"亲子\",\"v\":\"亲子\"},{\"n\":\"益智\",\"v\":\"益智\"},{\"n\":\"励志\",\"v\":\"励志\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"1\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"中国\",\"v\":\"中国\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"欧美\",\"v\":\"欧美\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"11\",\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"2\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"15\":[{\"key\":\"3\",\"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\":\"乡村\"},{\"n\":\"情景\",\"v\":\"情景\"},{\"n\":\"商战\",\"v\":\"商战\"},{\"n\":\"网剧\",\"v\":\"网剧\"},{\"n\":\"惊悚\",\"v\":\"惊悚\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"1\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"韩国\",\"v\":\"韩国\"}]},{\"key\":\"11\",\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"2\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"16\":[{\"key\":\"3\",\"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\":\"乡村\"},{\"n\":\"情景\",\"v\":\"情景\"},{\"n\":\"商战\",\"v\":\"商战\"},{\"n\":\"网剧\",\"v\":\"网剧\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"1\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"美国\",\"v\":\"美国\"},{\"n\":\"英国\",\"v\":\"英国\"},{\"n\":\"德国\",\"v\":\"德国\"},{\"n\":\"加拿大\",\"v\":\"加拿大\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"11\",\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"4\",\"name\":\"语言\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"国语\",\"v\":\"国语\"},{\"n\":\"日语\",\"v\":\"日语\"},{\"n\":\"英语\",\"v\":\"英语\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"2\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}]}"); - } catch (JSONException e) { - SpiderDebug.log(e); - } - } - - - protected static HashMap Headers() { - HashMap headers = new HashMap<>(); - headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.62 Safari/537.36"); - headers.put("Referer", siteUrl); - return headers; - } - - /** - * 爬虫headers - * - * @param url - * @return - */ - protected HashMap getHeaders(String url) { - HashMap headers = new HashMap<>(); - headers.put("method", "GET"); - headers.put("Upgrade-Insecure-Requests", "1"); - headers.put("DNT", "1"); - 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; - } - - /** - * 获取分类数据 + 首页最近更新视频列表数据 - * - * @param filter 是否开启筛选 关联的是 软件设置中 首页数据源里的筛选开关 - * @return - */ - @Override - public String homeContent(boolean filter) { - try { - Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl, getHeaders(siteUrl))); - // 分类节点 - Elements elements = doc.select("ul.stui-header__menu li a"); - JSONArray classes = new JSONArray(); - for (Element ele : elements) { - String name = ele.text(); - boolean show = name.equals("电影") || - name.equals("剧集") || - name.equals("动漫") || - name.equals("日韩剧") || - name.equals("欧美剧"); - if (show) { - Matcher mather = regexCategory.matcher(ele.attr("href")); - if (!mather.find()) - continue; - // 把分类的id和名称取出来加到列表里 - String id = mather.group(1).trim(); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("type_id", id); - jsonObject.put("type_name", name); - classes.put(jsonObject); - } - } - JSONObject result = new JSONObject(); - if (filter) { - result.put("filters", filterConfig); - } - result.put("class", classes); - try { - // 取首页推荐视频列表 - Element homeList = doc.select("ul.stui-vodlist").get(0); - Elements list = homeList.select("div.stui-vodlist__box"); - JSONArray videos = new JSONArray(); - for (int i = 0; i < list.size(); i++) { - Element vod = list.get(i); - String title = vod.select("a").attr("title"); - String cover = vod.select("a").attr("data-original"); - String remark = vod.select("a .pic-text").text(); - Matcher matcher = regexVid.matcher(vod.select("a").attr("href")); - if (!matcher.find()) - continue; - String id = matcher.group(1); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", remark); - videos.put(v); - } - result.put("list", videos); - } catch (Exception e) { - SpiderDebug.log(e); - } - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - /** - * 获取分类信息数据 - * - * @param tid 分类id - * @param pg 页数 - * @param filter 同homeContent方法中的filter - * @param extend 筛选参数{k:v, k1:v1} - * @return - */ - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { - try { - String[] urlParams = new String[]{"", "", "", "", "", "", "", "", "", "", "", ""}; - urlParams[0] = tid; - urlParams[8] = pg; - if (extend != null && extend.size() > 0) { - for (Iterator it = extend.keySet().iterator(); it.hasNext(); ) { - String key = it.next(); - String value = extend.get(key); - urlParams[Integer.parseInt(key)] = URLEncoder.encode(value); - } - } - // 获取分类数据的url - String url = siteUrl + "show/" + TextUtils.join("-", urlParams) + ".html"; - String html = OkHttpUtil.string(url, getHeaders(url)); - Document doc = Jsoup.parse(html); - JSONObject result = new JSONObject(); - int pageCount = 0; - int page = -1; - - // 取页码相关信息 - Elements pageInfo = doc.select("ul.stui-page__item li"); - if (pageInfo.size() == 0) { - page = Integer.parseInt(pg); - pageCount = page; - } else { - for (int i = 0; i < pageInfo.size(); i++) { - Element li = pageInfo.get(i); - Element a = li.selectFirst("a"); - if (a == null) - continue; - String name = a.text(); - if (page == -1 && li.hasClass("active")) { - Matcher matcher = regexPage.matcher(a.attr("href")); - if (matcher.find()) { - //System.out.println("哈哈"+matcher.group(1)); - page = Integer.parseInt(matcher.group(1).split("-")[8]); - } else { - page = 0; - } - } - if (name.equals("尾页")) { - Matcher matcher = regexPage.matcher(a.attr("href")); - if (matcher.find()) { - //System.out.println("尾页" + matcher.group(1)); - pageCount = Integer.parseInt(matcher.group(1).split("-")[8]); - } else { - pageCount = 0; - } - break; - } - } - } - - JSONArray videos = new JSONArray(); - if (!html.contains("没有找到您想要的结果哦")) { - // 取当前分类页的视频列表 - Elements list = doc.select("div.stui-vodlist__box"); - for (int i = 0; i < list.size(); i++) { - Element vod = list.get(i); - String title = vod.select("a").attr("title"); - String cover = vod.select("a").attr("data-original"); - String remark = vod.select("a .pic-text").text(); - Matcher matcher = regexVid.matcher(vod.select("a").attr("href")); - if (!matcher.find()) - continue; - String id = matcher.group(1); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", remark); - videos.put(v); - } - } - result.put("page", page); - result.put("pagecount", pageCount); - result.put("limit", 48); - result.put("total", pageCount <= 1 ? videos.length() : pageCount * 48); - - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - /** - * 视频详情信息 - * - * @param ids 视频id - * @return - */ - @Override - public String detailContent(List ids) { - try { - // 视频详情url - String url = siteUrl + "/detail/" + ids.get(0) + ".html"; - Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url))); - JSONObject result = new JSONObject(); - JSONObject vodList = new JSONObject(); - - // 取基本数据 - String cover = doc.select("div.stui-content__thumb a img").attr("data-original"); - String title = doc.select("div.stui-content__detail h1").text(); - String category = "", area = "", year = "", remark = "", director = "", actor = "", desc = ""; - Elements data = doc.select("p.data"); - Pattern cate = Pattern.compile("类型:(\\S+)"); - category = doReplaceRegex(cate, data.get(0).text()); - Pattern areas = Pattern.compile("地区:(\\S+)"); - area = doReplaceRegex(areas, data.get(0).text()); - Pattern years = Pattern.compile("年份:(\\S+)"); - year = doReplaceRegex(years, data.get(0).text()); - Pattern rms = Pattern.compile("更新:(\\S+)"); - remark = doReplaceRegex(rms, data.get(3).text()); - Pattern acs = Pattern.compile("主演:(\\S+)"); - actor = doReplaceRegex(acs, data.get(1).text()); - Pattern dis = Pattern.compile("导演:(\\S+)"); - director = doReplaceRegex(dis, data.get(1).text()); - - desc = doc.selectFirst("span.detail-content").text().trim(); - - vodList.put("vod_id", ids.get(0)); - vodList.put("vod_name", title); - vodList.put("vod_pic", cover); - vodList.put("type_name", category); - vodList.put("vod_year", year); - vodList.put("vod_area", area); - vodList.put("vod_remarks", remark); - vodList.put("vod_actor", actor); - vodList.put("vod_director", director); - vodList.put("vod_content", desc); - - Map vod_play = new TreeMap<>(new Comparator() { - @Override - public int compare(String o1, String 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 1; - } - }); - - // 取播放列表数据 - Elements sources = doc.select("div.stui-vodlist__head h3"); - Elements sourceList = doc.select("ul.stui-content__playlist"); - - for (int i = 0; i < sources.size(); i++) { - Element source = sources.get(i); - String sourceName = source.text(); - boolean found = false; - for (Iterator it = playerConfig.keys(); it.hasNext(); ) { - String flag = it.next(); - if (playerConfig.getJSONObject(flag).getString("sh").equals(sourceName)) { - sourceName = flag; - found = true; - break; - } - } - if (!found) - continue; - String playList = ""; - Elements playListA = sourceList.get(i).select("li a"); - List vodItems = new ArrayList<>(); - - for (int j = 0; j < playListA.size(); j++) { - Element vod = playListA.get(j); - Matcher matcher = regexPlay.matcher(vod.attr("href")); - if (!matcher.find()) - continue; - String playURL = matcher.group(1) + "-" + matcher.group(2) + "-" + matcher.group(3); - vodItems.add(vod.text() + "$" + playURL); - } - if (vodItems.size() > 0) - playList = TextUtils.join("#", vodItems); - - if (playList.length() == 0) - continue; - - vod_play.put(sourceName, playList); - } - - if (vod_play.size() > 0) { - 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 ""; - } - - - /** - * 获取视频播放信息 - * - * @param flag 播放源 - * @param id 视频id - * @param vipFlags 所有可能需要vip解析的源 - * @return - */ - @Override - public String playerContent(String flag, String id, List vipFlags) { - try { - //定义播放用的headers - JSONObject headers = new JSONObject(); - headers.put("origin", " https://www.libvio.me/"); - 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", " */*"); - headers.put("Accept-Language", " zh-CN,zh;q=0.9,en-US;q=0.3,en;q=0.7"); - headers.put("Accept-Encoding", " gzip, deflate"); - headers.put("referer", " https://www.libvio.me/"); - // 播放页 url - String url = siteUrl + "/play/" + id + ".html"; - Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url))); - - Elements allScript = doc.select("script"); - for (int i = 0; i < allScript.size(); i++) { - String scContent = allScript.get(i).html().trim(); - if (scContent.startsWith("var player_")) { // 取直链 - int start = scContent.indexOf('{'); - int end = scContent.lastIndexOf('}') + 1; - String json = scContent.substring(start, end); - JSONObject player = new JSONObject(json); - if (playerConfig.has(player.getString("from"))) { - JSONObject pCfg = playerConfig.getJSONObject(player.getString("from")); - if (player.getString("from").contains("LINE")) { - String videoUrl = pCfg.getString("pu") + player.getString("url"); - Document docs = Jsoup.parse(OkHttpUtil.string(videoUrl, Headers())); - Pattern pattern = Pattern.compile("(?<=urls\\s=\\s').*?(?=')"); - Elements allScripts = docs.select("body script"); - for (int j = 0; j < allScripts.size(); j++) { - String scContents = allScripts.get(j).html().trim(); - Matcher matcher = pattern.matcher(scContents); - if (matcher.find()) { - JSONObject result = new JSONObject(); - String players = matcher.group(0); - result.put("parse", 0); - result.put("playUrl", ""); - result.put("url", players); - return result.toString(); - } - } - } - else { - SpiderDebug.log(url); - JSONObject result = new JSONObject(); - result.put("parse", 1); - result.put("playUrl", ""); - result.put("url", url); - // result.put("header", "{\"Referer\", \"https://www.libvio.me/\"}"); - return result.toString(); - } - break; - } - } - } - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - protected static HashMap sHeaders() { - HashMap headers = new HashMap<>(); - headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"); - headers.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"); - headers.put("Accept-encoding", "gzip, deflate, br"); - headers.put("Accept-language", "zh-SG,zh;q=0.9,en-GB;q=0.8,en;q=0.7,zh-CN;q=0.6"); - return headers; - } - - @Override - public String searchContent(String key, boolean quick) { - try { - String url = "https://google.1qi777.com/search?q=site%3Alibvio.me%2Fdetail+" + URLEncoder.encode(key); - Document docs = Jsoup.parse(OkHttpUtil.string(url, sHeaders())); - JSONObject result = new JSONObject(); - JSONArray videos = new JSONArray(); - JSONObject v = new JSONObject(); - Elements list = docs.select("div.NJo7tc div.yuRUbf"); - for (int i = 0; i < list.size(); i++) { - Element doc = list.get(i); - String sourceName = doc.select("div.yuRUbf a h3").text(); - if (sourceName.contains(key)) { - String list1 = doc.select("div.yuRUbf a").attr("href"); - Document link = Jsoup.parse(OkHttpUtil.string(list1, getHeaders(url))); - Matcher matcher = regexVid.matcher(list1); - Elements data = link.select("p.data"); - if (matcher.find()) { - - String group = matcher.group(1); - String cover = link.select("div.stui-content__thumb a img").attr("data-original"); - String title = link.select("div.stui-content__detail h1").text(); - Pattern rms = Pattern.compile("更新:(\\S+)"); - String remark = doReplaceRegex(rms, data.get(3).text()); - - v.put("vod_name", title); - v.put("vod_remarks", remark); - v.put("vod_id", group); - v.put("vod_pic", cover); - videos.put(v); - } - } - } - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - private static String doReplaceRegex(Pattern pattern, String src) { - if (pattern == null) - return src; - try { - Matcher matcher = pattern.matcher(src); - if (matcher.find()) { - return matcher.group(1).trim(); - } - } catch (Exception e) { - SpiderDebug.log(e); - } - return src; - } -} diff --git a/app/src/main/java/com/github/catvod/spider/LiteApple.java b/app/src/main/java/com/github/catvod/spider/LiteApple.java deleted file mode 100644 index 452b824..0000000 --- a/app/src/main/java/com/github/catvod/spider/LiteApple.java +++ /dev/null @@ -1,466 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.content.SharedPreferences; -import android.os.Build; -import android.text.TextUtils; -import android.util.Base64; - -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.Misc; -import com.github.catvod.utils.okhttp.OKCallBack; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.UnsupportedEncodingException; -import java.math.BigInteger; -import java.net.URLEncoder; -import java.security.MessageDigest; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Random; -import java.util.Set; - -import okhttp3.Call; - -public class LiteApple extends Spider { - private static final String siteUrl = "http://ht.grelighting.cn/api.php"; - - private HashMap getHeaders(String url, String data) { - HashMap headers = new HashMap<>(); - if (data != null) { - String token = ""; - try { - token = Base64.encodeToString(b(fakeDevice.getBytes("UTF-8"), tokenKey == null ? "XPINGGUO" : tokenKey), 2); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - int currentTimeMillis = (int) (System.currentTimeMillis() / ((long) 1000)); - String hash = md5(fakeDevice + data + currentTimeMillis).substring(8, 12); - headers.put("token", token); - headers.put("hash", hash); - headers.put("timestamp", currentTimeMillis + ""); - if (tokenKey == null) { - headers.put("version", "ANDROID cn.grelighting.xpg1.1.5"); - } - } - headers.put("User-Agent", "okhttp/4.9.1"); - return headers; - } - - private String fakeDevice = null; - private String tokenKey = null; - - @Override - public void init(Context context, String extend) { - super.init(context, extend); - SharedPreferences sharedPreferences = context.getSharedPreferences("spider_LiteApple", Context.MODE_PRIVATE); - try { - fakeDevice = sharedPreferences.getString("didd", null); - } catch (Throwable th) { - } finally { - if (fakeDevice == null) { - fakeDevice = fakeDid(); - sharedPreferences.edit().putString("didd", fakeDevice).commit(); - } - } - } - - void getTokenKey() { - if (tokenKey != null) - return; - String url = siteUrl + "/v2.user/tokenlogin"; - OkHttpUtil.post(OkHttpUtil.defaultClient(), url, null, getHeaders(url, "ANDROID cn.grelighting.xpg1.1.5"), new OKCallBack.OKCallBackString() { - @Override - protected void onFailure(Call call, Exception e) { - - } - - @Override - protected void onResponse(String response) { - try { - tokenKey = new JSONObject(response).getJSONObject("data").getString("user_title"); - } catch (JSONException e) { - e.printStackTrace(); - } - } - }); - } - - @Override - public String homeContent(boolean filter) { - try { - getTokenKey(); - String url = siteUrl + "/v2.vod/androidtypes"; - String content = OkHttpUtil.string(url, getHeaders(url, null)); - JSONObject jsonObject = new JSONObject(decryptResponse(content)); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - - JSONObject filterConfig = new JSONObject(); - JSONArray classes = new JSONArray(); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject jObj = jsonArray.getJSONObject(i); - String typeName = jObj.getString("type_name"); - String typeId = jObj.getString("type_id"); - JSONObject newCls = new JSONObject(); - newCls.put("type_id", typeId); - newCls.put("type_name", typeName); - classes.put(newCls); - - JSONArray clses = jObj.getJSONArray("classes"); - JSONArray areas = jObj.getJSONArray("areas"); - JSONArray years = jObj.getJSONArray("years"); - - JSONArray extendsAll = new JSONArray(); - // 类型 - JSONObject newTypeExtend; - JSONArray newTypeExtendKV; - JSONObject kv; - newTypeExtend = new JSONObject(); - newTypeExtend.put("key", "class"); - newTypeExtend.put("name", "类型"); - newTypeExtendKV = new JSONArray(); - for (int j = 0; j < clses.length(); j++) { - String v = clses.getString(j); - kv = new JSONObject(); - kv.put("n", v); - kv.put("v", v); - newTypeExtendKV.put(kv); - } - newTypeExtend.put("value", newTypeExtendKV); - extendsAll.put(newTypeExtend); - // 地区 - newTypeExtend = new JSONObject(); - newTypeExtend.put("key", "area"); - newTypeExtend.put("name", "地区"); - newTypeExtendKV = new JSONArray(); - kv = new JSONObject(); - kv.put("n", "全部"); - kv.put("v", ""); - newTypeExtendKV.put(kv); - for (int j = 0; j < areas.length(); j++) { - String area = areas.getString(j); - kv = new JSONObject(); - kv.put("n", area); - kv.put("v", area); - newTypeExtendKV.put(kv); - } - newTypeExtend.put("value", newTypeExtendKV); - extendsAll.put(newTypeExtend); - // 年份 - newTypeExtend = new JSONObject(); - newTypeExtend.put("key", "year"); - newTypeExtend.put("name", "年份"); - newTypeExtendKV = new JSONArray(); - kv = new JSONObject(); - kv.put("n", "全部"); - kv.put("v", ""); - newTypeExtendKV.put(kv); - for (int j = 0; j < years.length(); j++) { - String year = years.getString(j); - kv = new JSONObject(); - kv.put("n", year); - kv.put("v", year); - newTypeExtendKV.put(kv); - } - newTypeExtend.put("value", newTypeExtendKV); - extendsAll.put(newTypeExtend); - filterConfig.put(typeId, extendsAll); - // 排序 - newTypeExtend = new JSONObject(); - newTypeExtend.put("key", "sortby"); - newTypeExtend.put("name", "排序"); - newTypeExtendKV = new JSONArray(); - kv = new JSONObject(); - kv.put("n", "时间"); - kv.put("v", "updatetime"); - newTypeExtendKV.put(kv); - kv = new JSONObject(); - kv.put("n", "人气"); - kv.put("v", "hits"); - newTypeExtendKV.put(kv); - kv = new JSONObject(); - kv.put("n", "评分"); - kv.put("v", "score"); - newTypeExtendKV.put(kv); - newTypeExtend.put("value", newTypeExtendKV); - extendsAll.put(newTypeExtend); - } - - JSONObject result = new JSONObject(); - result.put("class", classes); - if (filter) { - result.put("filters", filterConfig); - } - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - @Override - public String homeVideoContent() { - try { - JSONArray videos = new JSONArray(); - for (int id = 1; id < 5; id++) { - if (videos.length() > 30) - break; - try { - String url = siteUrl + "/v2.main/androidhome"; - String content = OkHttpUtil.string(url, getHeaders(url, null)); - JSONObject jsonObject = new JSONObject(decryptResponse(content)); - JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("list"); - for (int i = 0; i < jsonArray.length(); i++) { - JSONArray jsonArraySub = jsonArray.getJSONObject(i).getJSONArray("list"); - for (int j = 0; j < jsonArraySub.length() && j < 4; j++) { - JSONObject vObj = jsonArraySub.getJSONObject(j); - JSONObject v = new JSONObject(); - v.put("vod_id", vObj.getString("id")); - v.put("vod_name", vObj.getString("name")); - v.put("vod_pic", vObj.getString("pic")); - v.put("vod_remarks", vObj.getString("updateInfo")); - videos.put(v); - } - } - } catch (Exception e) { - - } - } - JSONObject result = new JSONObject(); - 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 { - getTokenKey(); - String area = extend.containsKey("area") ? extend.get("area") : ""; - String year = extend.containsKey("year") ? extend.get("year") : ""; - String url = siteUrl + "/v2.vod/androidfilter?page=" + pg + "&type=" + tid; - Set keys = extend.keySet(); - for (String key : keys) { - String val = extend.get(key).trim(); - if (val.length() == 0) - continue; - url += "&" + key + "=" + URLEncoder.encode(val); - } - String content = OkHttpUtil.string(url, getHeaders(url, area + year)); - JSONObject dataObject = new JSONObject(decryptResponse(content)); - JSONArray jsonArray = dataObject.getJSONArray("data"); - JSONArray videos = new JSONArray(); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject vObj = jsonArray.getJSONObject(i); - JSONObject v = new JSONObject(); - v.put("vod_id", vObj.getString("id")); - v.put("vod_name", vObj.getString("name")); - v.put("vod_pic", vObj.getString("pic")); - v.put("vod_remarks", vObj.getString("updateInfo")); - videos.put(v); - } - JSONObject result = new JSONObject(); - int limit = 20; - int page = Integer.parseInt(pg); - result.put("page", page); - int pageCount = videos.length() == limit ? page + 1 : page; - result.put("pagecount", pageCount); - result.put("limit", limit); - result.put("total", Integer.MAX_VALUE); - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - @Override - public String detailContent(List ids) { - try { - String url = siteUrl + "/v2.vod/androiddetail?vod_id=" + ids.get(0); - String content = OkHttpUtil.string(url, getHeaders(url, ids.get(0))); - JSONObject dataObject = new JSONObject(decryptResponse(content)); - JSONObject vObj = dataObject.getJSONObject("data"); - JSONObject result = new JSONObject(); - JSONArray list = new JSONArray(); - JSONObject vodAtom = new JSONObject(); - vodAtom.put("vod_id", vObj.getString("id")); - vodAtom.put("vod_name", vObj.getString("name")); - vodAtom.put("vod_pic", vObj.getString("pic")); - vodAtom.put("type_name", vObj.getString("className")); - vodAtom.put("vod_year", vObj.getString("year")); - vodAtom.put("vod_area", vObj.getString("area")); - vodAtom.put("vod_remarks", vObj.getString("updateInfo")); - vodAtom.put("vod_actor", vObj.getString("actor")); - vodAtom.put("vod_content", vObj.getString("content").trim()); - - ArrayList playUrls = new ArrayList<>(); - - JSONArray urls = vObj.getJSONArray("urls"); - for (int i = 0; i < urls.length(); i++) { - JSONObject u = urls.getJSONObject(i); - playUrls.add(u.getString("key") + "$" + u.getString("url")); - } - - vodAtom.put("vod_play_from", "LiteApple"); - vodAtom.put("vod_play_url", TextUtils.join("#", playUrls)); - list.put(vodAtom); - 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 { - if (Misc.isVideoFormat(id)) { - JSONObject result = new JSONObject(); - result.put("parse", 0); - result.put("header", ""); - result.put("playUrl", ""); - result.put("url", id); - return result.toString(); - } - return ""; - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - @Override - public String searchContent(String key, boolean quick) { - try { - getTokenKey(); - String url = siteUrl + "/v2.vod/androidsearch?page=1&wd=" + URLEncoder.encode(key); - String content = OkHttpUtil.string(url, getHeaders(url, key)); - JSONObject dataObject = new JSONObject(decryptResponse(content)); - JSONArray jsonArray = dataObject.getJSONArray("data"); - JSONArray videos = new JSONArray(); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject vObj = jsonArray.getJSONObject(i); - String title = vObj.getString("name"); - if (!title.contains(key)) - continue; - JSONObject v = new JSONObject(); - v.put("vod_id", vObj.getString("id")); - v.put("vod_name", title); - v.put("vod_pic", vObj.getString("pic")); - v.put("vod_remarks", vObj.getString("updateInfo")); - videos.put(v); - } - JSONObject result = new JSONObject(); - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - protected String decryptResponse(String src) { - return src; - } - - byte[] a(String str) { - byte[] bytes = str.getBytes(); - byte[] bArr = new byte[333]; - for (int i9 = 0; i9 < 333; i9++) { - bArr[i9] = (byte) i9; - } - if (bytes.length == 0) { - return null; - } - int i10 = 0; - int i11 = 0; - for (int i12 = 0; i12 < 333; i12++) { - i11 = (((bytes[i10] & 255) + (bArr[i12] & 255)) + i11) % 333; - byte b = bArr[i12]; - bArr[i12] = bArr[i11]; - bArr[i11] = b; - i10 = (i10 + 1) % bytes.length; - } - return bArr; - } - - byte[] b(byte[] bArr, String str) { - byte[] a = a(str); - byte[] bArr2 = new byte[bArr.length]; - int i9 = 0; - int i10 = 0; - for (int i11 = 0; i11 < bArr.length; i11++) { - i9 = (i9 + 1) % 333; - i10 = ((a[i9] & 255) + i10) % 333; - byte b = a[i9]; - a[i9] = a[i10]; - a[i10] = b; - bArr2[i11] = (byte) (a[((a[i9] & 255) + (a[i10] & 255)) % 333] ^ bArr[i11]); - } - return bArr2; - } - - String randomString(int length) { - String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456"; - Random random = new Random(); - StringBuffer sb = new StringBuffer(); - for (int i = 0; i < length; i++) { - int number = random.nextInt(str.length()); - sb.append(str.charAt(number)); - } - return sb.toString(); - } - - String randomMACAddress() { - Random rand = new Random(); - byte[] macAddr = new byte[6]; - rand.nextBytes(macAddr); - macAddr[0] = (byte) (macAddr[0] & (byte) 254); //zeroing last 2 bytes to make it unicast and locally adminstrated - StringBuilder sb = new StringBuilder(18); - for (byte b : macAddr) { - sb.append(String.format("%02X", b)); - } - return sb.toString(); - } - - String fakeDid() { - String i = ""; - String f = ""; - String d = "N/A"; - try { - d = Build.class.getField("SERIAL").get((Object) null).toString(); - } catch (Exception unused) { - } - String e = ""; - try { - e = (String) Class.forName("android.os.SystemProperties").getDeclaredMethod("get", new Class[]{String.class}).invoke((Object) null, new Object[]{"ro.build.fingerprint"}); - } catch (Exception unused) { - return ""; - } - return (((((((((("" + i) + "||") + f) + "||") + randomMACAddress()) + "||") + randomString(16)) + "||") + d) + "||") + e; - } - - String md5(String str) { - try { - MessageDigest instance = MessageDigest.getInstance("MD5"); - instance.update(str.getBytes()); - return new BigInteger(1, instance.digest()).toString(16); - } catch (Exception e9) { - e9.printStackTrace(); - return str; - } - } - -} diff --git a/app/src/main/java/com/github/catvod/spider/Nfyun.java b/app/src/main/java/com/github/catvod/spider/Nfyun.java deleted file mode 100644 index 857644f..0000000 --- a/app/src/main/java/com/github/catvod/spider/Nfyun.java +++ /dev/null @@ -1,503 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.text.TextUtils; - -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import org.json.JSONArray; -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.URLEncoder; -import java.util.ArrayList; -import java.util.Comparator; -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; - -public class Nfyun extends Spider { - private static final String siteUrl = "https://yanaifei.cn"; - private static final String siteHost = "yanaifei.cn"; - private static Pattern pic = Pattern.compile("(?<=url=).*"); - - /** - * 播放源配置 - */ - private JSONObject playerConfig; - /** - * 筛选配置 - */ - private JSONObject filterConfig; - private Pattern regexCategory = Pattern.compile("/vod/type/(\\d+).html"); - private Pattern regexVid = Pattern.compile("/vod/detail/(\\d+).html"); - private Pattern regexPlay = Pattern.compile("/vod/play/(\\d+)-(\\d+)-(\\d+).html"); - private Pattern regexPage = Pattern.compile("/vod/show/(\\S+).html"); - - protected String ext = null; - - @Override - public void init(Context context) { - super.init(context); - try { - playerConfig = new JSONObject("{\"VIP\":{\"sh\":\"VIP\",\"pu\":\"https://yanaifei.cn/player/?url=\",\"sn\":0,\"or\":999}}"); - filterConfig = new JSONObject("{\"1\":[{\"key\":0,\"name\":\"类型\",\"value\":[{\"n\":\"全部\",\"v\":\"1\"},{\"n\":\"动作片\",\"v\":\"6\"},{\"n\":\"喜剧片\",\"v\":\"7\"},{\"n\":\"爱情片\",\"v\":\"8\"},{\"n\":\"科幻片\",\"v\":\"9\"},{\"n\":\"恐怖片\",\"v\":\"10\"},{\"n\":\"剧情片\",\"v\":\"11\"},{\"n\":\"战争片\",\"v\":\"12\"},{\"n\":\"动画片\",\"v\":\"32\"}]},{\"key\":3,\"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\":\"武侠\"},{\"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\":\"农村\"},{\"n\":\"儿童\",\"v\":\"儿童\"},{\"n\":\"网络电影\",\"v\":\"网络电影\"}]},{\"key\":1,\"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\":\"意大利\"},{\"n\":\"西班牙\",\"v\":\"西班牙\"},{\"n\":\"加拿大\",\"v\":\"加拿大\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":4,\"name\":\"语言\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"普通话\",\"v\":\"普通话\"},{\"n\":\"英语\",\"v\":\"英语\"},{\"n\":\"粤语\",\"v\":\"粤语\"},{\"n\":\"闽南语\",\"v\":\"闽南语\"},{\"n\":\"韩语\",\"v\":\"韩语\"},{\"n\":\"日语\",\"v\":\"日语\"},{\"n\":\"法语\",\"v\":\"法语\"},{\"n\":\"德语\",\"v\":\"德语\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":11,\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"}]},{\"key\":5,\"name\":\"字母\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"A\",\"v\":\"A\"},{\"n\":\"B\",\"v\":\"B\"},{\"n\":\"C\",\"v\":\"C\"},{\"n\":\"D\",\"v\":\"D\"},{\"n\":\"E\",\"v\":\"E\"},{\"n\":\"F\",\"v\":\"F\"},{\"n\":\"G\",\"v\":\"G\"},{\"n\":\"H\",\"v\":\"H\"},{\"n\":\"I\",\"v\":\"I\"},{\"n\":\"J\",\"v\":\"J\"},{\"n\":\"K\",\"v\":\"K\"},{\"n\":\"L\",\"v\":\"L\"},{\"n\":\"M\",\"v\":\"M\"},{\"n\":\"N\",\"v\":\"N\"},{\"n\":\"O\",\"v\":\"O\"},{\"n\":\"P\",\"v\":\"P\"},{\"n\":\"Q\",\"v\":\"Q\"},{\"n\":\"R\",\"v\":\"R\"},{\"n\":\"S\",\"v\":\"S\"},{\"n\":\"T\",\"v\":\"T\"},{\"n\":\"U\",\"v\":\"U\"},{\"n\":\"V\",\"v\":\"V\"},{\"n\":\"W\",\"v\":\"W\"},{\"n\":\"X\",\"v\":\"X\"},{\"n\":\"Y\",\"v\":\"Y\"},{\"n\":\"Z\",\"v\":\"Z\"},{\"n\":\"0-9\",\"v\":\"0-9\"}]},{\"key\":2,\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"2\":[{\"key\":0,\"name\":\"类型\",\"value\":[{\"n\":\"全部\",\"v\":\"2\"},{\"n\":\"国产剧\",\"v\":\"13\"},{\"n\":\"港台剧\",\"v\":\"14\"},{\"n\":\"日韩剧\",\"v\":\"15\"},{\"n\":\"欧美剧\",\"v\":\"16\"},{\"n\":\"泰国剧\",\"v\":\"20\"}]},{\"key\":3,\"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\":\"乡村\"},{\"n\":\"情景\",\"v\":\"情景\"},{\"n\":\"商战\",\"v\":\"商战\"},{\"n\":\"网剧\",\"v\":\"网剧\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":1,\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"内地\",\"v\":\"内地\"},{\"n\":\"韩国\",\"v\":\"韩国\"},{\"n\":\"香港\",\"v\":\"香港\"},{\"n\":\"台湾\",\"v\":\"台湾\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"美国\",\"v\":\"美国\"},{\"n\":\"泰国\",\"v\":\"泰国\"},{\"n\":\"英国\",\"v\":\"英国\"},{\"n\":\"新加坡\",\"v\":\"新加坡\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":4,\"name\":\"语言\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"普通话\",\"v\":\"普通话\"},{\"n\":\"英语\",\"v\":\"英语\"},{\"n\":\"粤语\",\"v\":\"粤语\"},{\"n\":\"闽南语\",\"v\":\"闽南语\"},{\"n\":\"韩语\",\"v\":\"韩语\"},{\"n\":\"日语\",\"v\":\"日语\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":11,\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"}]},{\"key\":5,\"name\":\"字母\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"A\",\"v\":\"A\"},{\"n\":\"B\",\"v\":\"B\"},{\"n\":\"C\",\"v\":\"C\"},{\"n\":\"D\",\"v\":\"D\"},{\"n\":\"E\",\"v\":\"E\"},{\"n\":\"F\",\"v\":\"F\"},{\"n\":\"G\",\"v\":\"G\"},{\"n\":\"H\",\"v\":\"H\"},{\"n\":\"I\",\"v\":\"I\"},{\"n\":\"J\",\"v\":\"J\"},{\"n\":\"K\",\"v\":\"K\"},{\"n\":\"L\",\"v\":\"L\"},{\"n\":\"M\",\"v\":\"M\"},{\"n\":\"N\",\"v\":\"N\"},{\"n\":\"O\",\"v\":\"O\"},{\"n\":\"P\",\"v\":\"P\"},{\"n\":\"Q\",\"v\":\"Q\"},{\"n\":\"R\",\"v\":\"R\"},{\"n\":\"S\",\"v\":\"S\"},{\"n\":\"T\",\"v\":\"T\"},{\"n\":\"U\",\"v\":\"U\"},{\"n\":\"V\",\"v\":\"V\"},{\"n\":\"W\",\"v\":\"W\"},{\"n\":\"X\",\"v\":\"X\"},{\"n\":\"Y\",\"v\":\"Y\"},{\"n\":\"Z\",\"v\":\"Z\"},{\"n\":\"0-9\",\"v\":\"0-9\"}]},{\"key\":2,\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"3\":[{\"key\":0,\"name\":\"类型\",\"value\":[{\"n\":\"全部\",\"v\":\"3\"},{\"n\":\"大陆综艺\",\"v\":\"22\"},{\"n\":\"港台综艺\",\"v\":\"23\"},{\"n\":\"日韩综艺\",\"v\":\"24\"},{\"n\":\"欧美综艺\",\"v\":\"25\"}]},{\"key\":3,\"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\":\"财经\"},{\"n\":\"求职\",\"v\":\"求职\"}]},{\"key\":1,\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"内地\",\"v\":\"内地\"},{\"n\":\"港台\",\"v\":\"港台\"},{\"n\":\"日韩\",\"v\":\"日韩\"},{\"n\":\"欧美\",\"v\":\"欧美\"}]},{\"key\":4,\"name\":\"语言\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"普通话\",\"v\":\"普通话\"},{\"n\":\"英语\",\"v\":\"英语\"},{\"n\":\"粤语\",\"v\":\"粤语\"},{\"n\":\"闽南语\",\"v\":\"闽南语\"},{\"n\":\"韩语\",\"v\":\"韩语\"},{\"n\":\"日语\",\"v\":\"日语\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":11,\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"}]},{\"key\":5,\"name\":\"字母\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"A\",\"v\":\"A\"},{\"n\":\"B\",\"v\":\"B\"},{\"n\":\"C\",\"v\":\"C\"},{\"n\":\"D\",\"v\":\"D\"},{\"n\":\"E\",\"v\":\"E\"},{\"n\":\"F\",\"v\":\"F\"},{\"n\":\"G\",\"v\":\"G\"},{\"n\":\"H\",\"v\":\"H\"},{\"n\":\"I\",\"v\":\"I\"},{\"n\":\"J\",\"v\":\"J\"},{\"n\":\"K\",\"v\":\"K\"},{\"n\":\"L\",\"v\":\"L\"},{\"n\":\"M\",\"v\":\"M\"},{\"n\":\"N\",\"v\":\"N\"},{\"n\":\"O\",\"v\":\"O\"},{\"n\":\"P\",\"v\":\"P\"},{\"n\":\"Q\",\"v\":\"Q\"},{\"n\":\"R\",\"v\":\"R\"},{\"n\":\"S\",\"v\":\"S\"},{\"n\":\"T\",\"v\":\"T\"},{\"n\":\"U\",\"v\":\"U\"},{\"n\":\"V\",\"v\":\"V\"},{\"n\":\"W\",\"v\":\"W\"},{\"n\":\"X\",\"v\":\"X\"},{\"n\":\"Y\",\"v\":\"Y\"},{\"n\":\"Z\",\"v\":\"Z\"},{\"n\":\"0-9\",\"v\":\"0-9\"}]},{\"key\":2,\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"4\":[{\"key\":0,\"name\":\"类型\",\"value\":[{\"n\":\"全部\",\"v\":\"4\"},{\"n\":\"大陆动漫\",\"v\":\"26\"},{\"n\":\"港台动漫\",\"v\":\"27\"},{\"n\":\"日韩动漫\",\"v\":\"28\"},{\"n\":\"欧美动漫\",\"v\":\"29\"}]},{\"key\":3,\"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\":\"战争\"},{\"n\":\"少年\",\"v\":\"少年\"},{\"n\":\"少女\",\"v\":\"少女\"},{\"n\":\"社会\",\"v\":\"社会\"},{\"n\":\"原创\",\"v\":\"原创\"},{\"n\":\"亲子\",\"v\":\"亲子\"},{\"n\":\"益智\",\"v\":\"益智\"},{\"n\":\"励志\",\"v\":\"励志\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":1,\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"内地\",\"v\":\"内地\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"美国\",\"v\":\"美国\"},{\"n\":\"韩国\",\"v\":\"韩国\"},{\"n\":\"台湾\",\"v\":\"台湾\"},{\"n\":\"香港\",\"v\":\"香港\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":4,\"name\":\"语言\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"普通话\",\"v\":\"普通话\"},{\"n\":\"英语\",\"v\":\"英语\"},{\"n\":\"粤语\",\"v\":\"粤语\"},{\"n\":\"闽南语\",\"v\":\"闽南语\"},{\"n\":\"韩语\",\"v\":\"韩语\"},{\"n\":\"日语\",\"v\":\"日语\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":11,\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"}]},{\"key\":5,\"name\":\"字母\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"A\",\"v\":\"A\"},{\"n\":\"B\",\"v\":\"B\"},{\"n\":\"C\",\"v\":\"C\"},{\"n\":\"D\",\"v\":\"D\"},{\"n\":\"E\",\"v\":\"E\"},{\"n\":\"F\",\"v\":\"F\"},{\"n\":\"G\",\"v\":\"G\"},{\"n\":\"H\",\"v\":\"H\"},{\"n\":\"I\",\"v\":\"I\"},{\"n\":\"J\",\"v\":\"J\"},{\"n\":\"K\",\"v\":\"K\"},{\"n\":\"L\",\"v\":\"L\"},{\"n\":\"M\",\"v\":\"M\"},{\"n\":\"N\",\"v\":\"N\"},{\"n\":\"O\",\"v\":\"O\"},{\"n\":\"P\",\"v\":\"P\"},{\"n\":\"Q\",\"v\":\"Q\"},{\"n\":\"R\",\"v\":\"R\"},{\"n\":\"S\",\"v\":\"S\"},{\"n\":\"T\",\"v\":\"T\"},{\"n\":\"U\",\"v\":\"U\"},{\"n\":\"V\",\"v\":\"V\"},{\"n\":\"W\",\"v\":\"W\"},{\"n\":\"X\",\"v\":\"X\"},{\"n\":\"Y\",\"v\":\"Y\"},{\"n\":\"Z\",\"v\":\"Z\"},{\"n\":\"0-9\",\"v\":\"0-9\"}]},{\"key\":2,\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}]}"); - } catch (JSONException e) { - SpiderDebug.log(e); - } - } - - - protected static HashMap Headers() { - HashMap headers = new HashMap<>(); - headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.62 Safari/537.36"); - headers.put("Referer", siteUrl); - return headers; - } - - /** - * 爬虫headers - * - * @param url - * @return - */ - protected HashMap getHeaders(String url) { - HashMap headers = new HashMap<>(); - headers.put("method", "GET"); - headers.put("Upgrade-Insecure-Requests", "1"); - headers.put("DNT", "1"); - 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; - } - - /** - * 获取分类数据 + 首页最近更新视频列表数据 - * - * @param filter 是否开启筛选 关联的是 软件设置中 首页数据源里的筛选开关 - * @return - */ - @Override - public String homeContent(boolean filter) { - try { - JSONObject result = new JSONObject(); - Pattern redL = Pattern.compile("(?<=location.href =\").*?(?=\")"); - Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl, getHeaders(siteUrl))); - /* Elements X = A.select("script"); - String url = ""; - for (int i = 0; i < X.size(); i++) { - String finalUrl = X.get(i).html().trim(); - Matcher matcher3 = redL.matcher(finalUrl); - if (matcher3.find()) { - url = siteUrl + matcher3.group(0); - } else { - url = siteUrl; - } - Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url))); */ - // 分类节点 - Elements elements = doc.select("ul.navbar-items li a"); - JSONArray classes = new JSONArray(); - for (Element ele : elements) { - String name = ele.attr("title"); - boolean show = name.equals("电影") || - name.equals("连续剧") || - name.equals("综艺") || - name.equals("动漫"); - if (show) { - Matcher mather = regexCategory.matcher(ele.attr("href")); - if (!mather.find()) - continue; - // 把分类的id和名称取出来加到列表里 - String id = mather.group(1).trim(); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("type_id", id); - jsonObject.put("type_name", name); - classes.put(jsonObject); - } - } - - - if (filter) { - result.put("filters", filterConfig); - } - result.put("class", classes); - try { - // 取首页推荐视频列表 - Element homeList = doc.select("div.module").get(0); - Elements list = homeList.select("div.module-main div.module-items a"); - JSONArray videos = new JSONArray(); - for (int j = 0; j < list.size(); j++) { - Element vod = list.get(j); - String title = vod.attr("title"); - String cover = FixUrl(pic, vod.select("div.module-item-pic img").attr("data-original")); - String remark = vod.select("div.module-item-note").text(); - Matcher matcher = regexVid.matcher(vod.attr("href")); - if (!matcher.find()) - continue; - String id = matcher.group(1); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", remark); - videos.put(v); - } - result.put("list", videos); - } catch (Exception e) { - SpiderDebug.log(e); - } - // } - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - - return ""; - } - - /** - * 获取分类信息数据 - * - * @param tid 分类id - * @param pg 页数 - * @param filter 同homeContent方法中的filter - * @param extend 筛选参数{k:v, k1:v1} - * @return - */ - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { - try { - String[] urlParams = new String[]{"", "", "", "", "", "", "", "", "", "", "", ""}; - urlParams[0] = tid; - urlParams[8] = pg; - if (extend != null && extend.size() > 0) { - for (Iterator it = extend.keySet().iterator(); it.hasNext(); ) { - String key = it.next(); - String value = extend.get(key); - urlParams[Integer.parseInt(key)] = URLEncoder.encode(value); - } - } - // 获取分类数据的url - String url = siteUrl + "/vod/show/" + TextUtils.join("-", urlParams) + ".html"; - String html = OkHttpUtil.string(url, getHeaders(url)); - Document doc = Jsoup.parse(html); - JSONObject result = new JSONObject(); - int pageCount = 0; - int page = -1; - - // 取页码相关信息 - Elements pageInfo = doc.select("div[id=page]"); - if (pageInfo.size() == 0) { - page = Integer.parseInt(pg); - pageCount = page; - } else { - for (int i = 0; i < pageInfo.size(); i++) { - Element li = pageInfo.get(i); - Element a = li.selectFirst("a"); - if (a == null) - continue; - String span = doc.select("span.page-current").text(); - String wy = doc.select("div[id=page] a").last().attr("href"); - if (page == -1) { - page = Integer.parseInt(span); - } else { - page = 0; - } - Matcher matcher = regexPage.matcher(wy); - if (matcher.find()) { - pageCount = Integer.parseInt(matcher.group(1).split("-")[8]); - } else { - pageCount = 0; - } - break; - - } - } - - JSONArray videos = new JSONArray(); - if (!html.contains("没有找到您想要的结果哦")) { - // 取当前分类页的视频列表 - Elements list = doc.select("div.module-main div.module-items a"); - for (int i = 0; i < list.size(); i++) { - Element vod = list.get(i); - String title = vod.attr("title"); - String cover = FixUrl(pic, vod.select("div.module-item-pic img").attr("data-original")); - String remark = vod.select("div.module-item-note").text(); - Matcher matcher = regexVid.matcher(vod.attr("href")); - if (!matcher.find()) - continue; - String id = matcher.group(1); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", remark); - videos.put(v); - } - } - result.put("page", page); - result.put("pagecount", pageCount); - result.put("limit", 48); - result.put("total", pageCount <= 1 ? videos.length() : pageCount * 48); - - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - /** - * 视频详情信息 - * - * @param ids 视频id - * @return - */ - @Override - public String detailContent(List ids) { - try { - // 视频详情url - String url = siteUrl + "/vod/detail/" + ids.get(0) + ".html"; - Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url))); - JSONObject result = new JSONObject(); - JSONObject vodList = new JSONObject(); - - String cover = FixUrl(pic, doc.selectFirst("div.module-info-poster div div img").attr("data-original")); - String title = doc.selectFirst("div.module-info-heading h1").text(); - - String category = "", area = "", year = "", director = "", actor = "", remark = "", desc = ""; - - category = doc.select("div.module-info-tag-link").get(2).text(); - year = doc.select("div.module-info-tag-link a").get(0).text(); - area = doc.select("div.module-info-tag-link a").get(1).text(); - desc = doc.select("div.module-info-introduction-content p").text(); - - Elements span_text_muted = doc.select("div.module-info-item span"); - for (int i = 0; i < span_text_muted.size() - 2; i++) { - Element Spantext = span_text_muted.get(i); - String info = Spantext.text(); - if (info.contains("更新:")) { - try { - remark = Spantext.parent().select("div").text(); - } catch (Exception e) { - remark = ""; - } - } else if (info.contains("导演:")) { - try { - director = Spantext.parent().select("div a").text(); - } catch (Exception e) { - director = ""; - } - } else if (info.contains("主演:")) { - try { - actor = Spantext.parent().select("div a").text(); - } catch (Exception e) { - actor = ""; - } - } - } - - vodList.put("vod_id", ids.get(0)); - vodList.put("vod_name", title); - vodList.put("vod_pic", cover); - vodList.put("type_name", category); - vodList.put("vod_year", year); - vodList.put("vod_area", area); - vodList.put("vod_remarks", remark); - vodList.put("vod_actor", actor); - vodList.put("vod_director", director); - vodList.put("vod_content", desc); - - Map vod_play = new TreeMap<>(new Comparator() { - @Override - public int compare(String o1, String 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 1; - } - }); - - // 取播放列表数据 - Elements sources = doc.select("div.module-tab-items-box div span"); - Elements sourceList = doc.select("div.module-play-list"); - - for (int i = 0; i < sources.size(); i++) { - Element source = sources.get(i); - String sourceName = source.text(); - boolean found = false; - for (Iterator it = playerConfig.keys(); it.hasNext(); ) { - String flag = it.next(); - if (playerConfig.getJSONObject(flag).getString("sh").equals(sourceName)) { - sourceName = flag; - found = true; - break; - } - } - if (!found) - continue; - String playList = ""; - Elements playListA = sourceList.get(i).select("div a"); - List vodItems = new ArrayList<>(); - - for (int j = 0; j < playListA.size(); j++) { - Element vod = playListA.get(j); - Matcher matcher = regexPlay.matcher(vod.attr("href")); - if (!matcher.find()) - continue; - String playURL = matcher.group(1) + "-" + matcher.group(2) + "-" + matcher.group(3); - String vodName = vod.select("span").text(); - vodItems.add(vodName + "$" + playURL); - } - if (vodItems.size() > 0) - playList = TextUtils.join("#", vodItems); - - if (playList.length() == 0) - continue; - - vod_play.put(sourceName, playList); - } - - if (vod_play.size() > 0) { - 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 ""; - } - - /** - * 获取视频播放信息 - * - * @param flag 播放源 - * @param id 视频id - * @param vipFlags 所有可能需要vip解析的源 - * @return - */ - @Override - public String playerContent(String flag, String id, List vipFlags) { - try { - //定义播放用的headers - JSONObject headers = new JSONObject(); - //headers.put("Host", " cokemv.co"); - headers.put("origin", siteUrl); - 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", " */*"); - headers.put("Accept-Language", " zh-CN,zh;q=0.9,en-US;q=0.3,en;q=0.7"); - headers.put("Accept-Encoding", " gzip, deflate"); - - - // 播放页 url - String url = siteUrl + "/vod/play/" + id + ".html"; - Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url))); - - Elements allScript = doc.select("script"); - JSONObject result = new JSONObject(); - for (int i = 0; i < allScript.size(); i++) { - String scContent = allScript.get(i).html().trim(); - if (scContent.startsWith("var player_")) { // 取直链 - int start = scContent.indexOf('{'); - int end = scContent.lastIndexOf('}') + 1; - String json = scContent.substring(start, end); - JSONObject player = new JSONObject(json); - if (playerConfig.has(player.getString("from"))) { - JSONObject pCfg = playerConfig.getJSONObject(player.getString("from")); - String videoUrl = pCfg.getString("pu") + player.getString("url"); - Document docs = Jsoup.parse(OkHttpUtil.string(videoUrl, getHeaders(videoUrl))); - Pattern pattern = Pattern.compile("(?<=url\"\\S\").*?(?=\")"); - Elements allScripts = docs.select("body script"); - for (int j = 0; j < allScripts.size(); j++) { - String scContents = allScripts.get(j).html().trim(); - Matcher matcher = pattern.matcher(scContents); - if (matcher.find()) { - String players = matcher.group(0); - result.put("parse", 0); - result.put("playUrl", ""); - result.put("url", players); - result.put("header", headers.toString()); - } - break; - } - } - } - } - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - @Override - public String searchContent(String key, boolean quick) { - try { - long currentTime = System.currentTimeMillis(); - String url = siteUrl + "/index.php/ajax/suggest?mid=1&wd=" + URLEncoder.encode(key) + "&limit=10×tamp=" + currentTime; - JSONObject searchResult = new JSONObject(OkHttpUtil.string(url, getHeaders(url))); - JSONObject result = new JSONObject(); - JSONArray videos = new JSONArray(); - if (searchResult.getInt("total") > 0) { - JSONArray lists = new JSONArray(searchResult.getString("list")); - for (int i = 0; i < lists.length(); i++) { - JSONObject vod = lists.getJSONObject(i); - String id = vod.getString("id"); - String title = vod.getString("name"); - String cover = vod.getString("pic"); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", ""); - videos.put(v); - } - } - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - private static String FixUrl(Pattern pattern, String src) { - if (pattern == null) - return src; - try { - Matcher matcher = pattern.matcher(src); - if (matcher.find()) { - return matcher.group(0).trim(); - } - } catch (Exception e) { - SpiderDebug.log(e); - } - return src; - } -} diff --git a/app/src/main/java/com/github/catvod/spider/SP360.java b/app/src/main/java/com/github/catvod/spider/SP360.java deleted file mode 100644 index 674e201..0000000 --- a/app/src/main/java/com/github/catvod/spider/SP360.java +++ /dev/null @@ -1,345 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.text.TextUtils; - -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import java.net.URL; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - - -public class SP360 extends Spider { - protected JSONObject ext = null; - private static final String SiteHost = "https://api.web.360kan.com/v1/rank?cat=1"; - private static final String SiteFilter = "https://api.web.360kan.com/v1/filter/list"; - private static final String SiteDetail = "https://api.web.360kan.com/v1/detail"; - private static final String SiteSearch = "https://api.so.360kan.com/index?force_v=1&kw=%s&from=&pageno=1&v_ap=1&tab=all"; - - - @Override - public void init(Context context) { - super.init(context); - try { - ext = new JSONObject("{\"classes\":[{\"type_name\":\"电影\",\"type_id\":\"1\"},{\"type_name\":\"电视剧\",\"type_id\":\"2\"},{\"type_name\":\"综艺\",\"type_id\":\"3\"},{\"type_name\":\"动漫\",\"type_id\":\"4\"}],\"filter\":{\"1\":[{\"key\":\"cat\",\"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\":\"文艺\"},{\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"更早\",\"v\":\"lt_year\"}]},{\"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\":\"rank\",\"name\":\"排序\",\"value\":[{\"n\":\"最近热映\",\"v\":\"rankhot\"},{\"n\":\"最近上映\",\"v\":\"ranklatest\"},{\"n\":\"最受好评\",\"v\":\"rankpoint\"}]}],\"2\":[{\"key\":\"cat\",\"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\":\"励志\"},{\"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\":\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"更早\",\"v\":\"lt_year\"}]},{\"key\":\"area\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"内地\",\"v\":\"内地\"},{\"n\":\"中国香港\",\"v\":\"香港\"},{\"n\":\"中国台湾\",\"v\":\"台湾\"},{\"n\":\"泰国\",\"v\":\"泰国\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"韩国\",\"v\":\"韩国\"},{\"n\":\"美国\",\"v\":\"美国\"},{\"n\":\"英国\",\"v\":\"英国\"},{\"n\":\"新加坡\",\"v\":\"新加坡\"}]},{\"key\":\"rank\",\"name\":\"排序\",\"value\":[{\"n\":\"最近热映\",\"v\":\"rankhot\"},{\"n\":\"最近上映\",\"v\":\"ranklatest\"},{\"n\":\"最受好评\",\"v\":\"rankpoint\"}]}],\"3\":[{\"key\":\"cat\",\"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\":\"美食\"},{\"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\":\"area\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"内地\",\"v\":\"大陆\"},{\"n\":\"中国香港\",\"v\":\"香港\"},{\"n\":\"中国台湾\",\"v\":\"台湾\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"欧美\",\"v\":\"欧美\"}]},{\"key\":\"rank\",\"name\":\"排序\",\"value\":[{\"n\":\"最近热映\",\"v\":\"rankhot\"},{\"n\":\"最近上映\",\"v\":\"ranklatest\"}]}],\"4\":[{\"key\":\"cat\",\"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\":\"治愈\"},{\"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\":\"童话\"},{\"n\":\"竞技\",\"v\":\"竞技\"},{\"n\":\"动作\",\"v\":\"动作\"},{\"n\":\"社会\",\"v\":\"社会\"},{\"n\":\"友情\",\"v\":\"友情\"},{\"n\":\"真人版\",\"v\":\"真人版\"},{\"n\":\"电影版\",\"v\":\"电影版\"},{\"n\":\"OVA版\",\"v\":\"OVA版\"},{\"n\":\"TV版\",\"v\":\"TV版\"},{\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"更早\",\"v\":\"更早\"}]},{\"key\":\"area\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"内地\",\"v\":\"大陆\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"美国\",\"v\":\"美国\"}]},{\"key\":\"rank\",\"name\":\"排序\",\"value\":[{\"n\":\"最近热映\",\"v\":\"rankhot\"},{\"n\":\"最近上映\",\"v\":\"ranklatest\"}]}]}}"); - } catch (JSONException e) { - SpiderDebug.log(e); - } - } - - protected HashMap Headers() { - 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"); - return headers; - } - - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { - String cover; - String remark; - try { - String url = SiteFilter + "?catid=" + tid + "&pageno=" + pg; - Set keys = extend.keySet(); - for (String key : keys) { - String val = extend.get(key).trim(); - if (val.length() == 0) - continue; - url += "&" + key + "=" + URLEncoder.encode(val); - } - String content = OkHttpUtil.string(url, Headers()); - JSONObject dataObject = new JSONObject(content).getJSONObject("data"); - JSONArray jsonArray = dataObject.getJSONArray("movies"); - JSONArray videos = new JSONArray(); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject vObj = jsonArray.getJSONObject(i); - JSONObject v = new JSONObject(); - cover = vObj.getString("cover"); - if (vObj.has("upinfo")) { - remark = vObj.getString("upinfo"); - v.put("vod_id", tid + "_" + vObj.getString("id")); - v.put("vod_name", vObj.getString("title")); - v.put("vod_pic", "https:" + cover); - v.put("vod_remarks", remark); - } else { - v.put("vod_id", tid + "_" + vObj.getString("id")); - v.put("vod_name", vObj.getString("title")); - v.put("vod_pic", "https:" + cover); - v.put("vod_remarks", ""); - } - videos.put(v); - } - JSONObject result = new JSONObject(); - int limit = 24; - int page = Integer.parseInt(dataObject.getString("current_page")); - int total = dataObject.getInt("total"); - int pageCount = total % limit == 0 ? (total / limit) : (total / limit + 1); - result.put("page", page); - result.put("pagecount", pageCount); - result.put("limit", limit); - result.put("total", total); - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - return ""; - } - } - - @Override - public String detailContent(List ids) { - Iterator it; - String str; - String str2; - Exception e2; - ArrayList arrayList = new ArrayList(); - Exception e3; - JSONObject result = new JSONObject(); - try { - String[] split = ids.get(0).split("_"); - String format = String.format("%s?cat=%s&id=%s", SiteDetail, split[0], split[1]); - JSONObject jSONObject6 = new JSONObject(OkHttpUtil.string(format, Headers())).getJSONObject("data"); - JSONArray jSONArray = new JSONArray(); - JSONObject list = new JSONObject(); - jSONArray.put(list); - result.put("list", jSONArray); - list.put("vod_id", split[0] + "_" + jSONObject6.optString("ent_id")); - list.put("vod_name", jSONObject6.optString("title")); - list.put("vod_pic", jSONObject6.optString("cdncover")); - JSONArray optJSONArray = jSONObject6.optJSONArray("moviecategory"); - ArrayList arrayList2 = new ArrayList(); - for (int i = 0; i < optJSONArray.length(); i++) { - arrayList2.add(optJSONArray.getString(i)); - } - list.put("type_name", TextUtils.join("/", arrayList2)); - list.put("vod_year", jSONObject6.optString("pubdate")); - JSONArray optJSONArray2 = jSONObject6.optJSONArray("area"); - ArrayList arrayList3 = new ArrayList(); - for (int i2 = 0; i2 < optJSONArray2.length(); i2++) { - arrayList3.add(optJSONArray2.getString(i2)); - } - list.put("vod_area", TextUtils.join("/", arrayList3)); - list.put("vod_remarks", jSONObject6.optString("doubanscore")); - JSONArray optJSONArray3 = jSONObject6.optJSONArray("actor"); - ArrayList arrayList4 = new ArrayList(); - for (int i3 = 0; i3 < optJSONArray3.length(); i3++) { - arrayList4.add(optJSONArray3.getString(i3)); - } - list.put("vod_actor", TextUtils.join("/", arrayList4)); - JSONArray optJSONArray4 = jSONObject6.optJSONArray("director"); - ArrayList arrayList5 = new ArrayList(); - for (int i4 = 0; i4 < optJSONArray4.length(); i4++) { - arrayList5.add(optJSONArray4.getString(i4)); - } - list.put("vod_director", TextUtils.join("/", arrayList5)); - list.put("vod_content", jSONObject6.optString("description")); - JSONArray optJSONArray5 = jSONObject6.optJSONArray("playlink_sites"); - ArrayList arrayList6 = new ArrayList(); - for (int i5 = 0; i5 < optJSONArray5.length(); i5++) { - arrayList6.add(optJSONArray5.getString(i5)); - } - list.put("vod_play_from", TextUtils.join("$$$", arrayList6)); - JSONObject optJSONObject = jSONObject6.optJSONObject("playlinksdetail"); - JSONObject optJSONObject2 = jSONObject6.optJSONObject("allepidetail"); - JSONArray optJSONArray6 = jSONObject6.optJSONArray("defaultepisode"); - JSONObject optJSONObject3 = jSONObject6.optJSONObject("allupinfo"); - String str7 = "vod_play_url"; - if (optJSONArray6 != null) { - ArrayList arrayList7 = new ArrayList(); - for (int i6 = 0; i6 < optJSONArray6.length(); i6++) { - try { - URL url2 = new URL(optJSONArray6.getJSONObject(i6).optString("url")); - arrayList7.add(optJSONArray6.getJSONObject(i6).optString("sort") + "$" + (url2.getProtocol() + "://" + url2.getHost() + url2.getPath())); - } catch (Exception e4) { - SpiderDebug.log(e4); - } - } - list.put(str7, TextUtils.join("#", arrayList7)); - return result.toString(); - } - if (optJSONObject2 == null) { - ArrayList arrayList8 = new ArrayList(); - for (String str8 : arrayList6) { - try { - URL url3 = new URL(optJSONObject.getJSONObject(str8).optString("default_url")); - arrayList8.add(optJSONObject.getJSONObject(str8).optString("sort") + "$" + (url3.getProtocol() + "://" + url3.getHost() + url3.getPath())); - } catch (Exception e5) { - SpiderDebug.log(e5); - } - } - list.put(str7, TextUtils.join("$$$", arrayList8)); - } else { - ArrayList videos = new ArrayList(); - Iterator it2 = arrayList6.iterator(); - while (it2.hasNext()) { - String str9 = (String) it2.next(); - int parseInt = Integer.parseInt(optJSONObject3.optString(str9, "0")); - if (parseInt > 50 || parseInt == 0) { - it = it2; - str = format + "&start=1&end=50&site=" + str9; - } else { - StringBuilder sb2 = new StringBuilder(); - sb2.append(format); - it = it2; - sb2.append("&start=1&end="); - sb2.append(parseInt); - sb2.append("&site="); - sb2.append(str9); - str = sb2.toString(); - } - JSONObject optJSONObject4 = new JSONObject(OkHttpUtil.string(str, Headers())).getJSONObject("data").optJSONObject("allepidetail"); - ArrayList arrayList10 = new ArrayList(); - JSONArray jSONArray2 = optJSONObject4.getJSONArray(str9); - int i7 = 0; - while (true) { - str2 = str7; - if (i7 >= jSONArray2.length()) { - break; - } - try { - String url5 = jSONArray2.getJSONObject(i7).optString("url"); - arrayList = videos; - arrayList10.add(jSONArray2.getJSONObject(i7).optString("playlink_num") + "$" + url5); - } catch (Exception e7) { - e3 = e7; - SpiderDebug.log(e3); - i7++; - } - i7++; - str7 = str2; - videos = arrayList; - } - ArrayList arrayList11 = videos; - if (parseInt >= jSONArray2.length()) { - int i8 = 51; - while (i8 < parseInt) { - int i9 = i8 + 49; - if (i9 > parseInt) { - i9 = parseInt; - } - JSONObject optJSONObject5 = new JSONObject(OkHttpUtil.string(String.format("%s?cat=%s&id=%s&start=%s&end=%s&site=%s", SiteDetail, split[0], split[1], Integer.valueOf(i8), Integer.valueOf(i9), str9), Headers())).optJSONObject("data"); - if (optJSONObject5 == null) { - break; - } - JSONArray jSONArray3 = optJSONObject5.getJSONObject("allepidetail").getJSONArray(str9); - int i10 = 0; - while (i10 < jSONArray3.length()) { - try { - String url4 = jSONArray3.getJSONObject(i10).optString("url"); - try { - arrayList10.add(jSONArray3.getJSONObject(i10).optString("playlink_num") + "$" + url4); - } catch (Exception e8) { - e2 = e8; - SpiderDebug.log(e2); - i10++; - } - } catch (Exception e9) { - } - i10++; - } - i8 = i9 + 1; - } - } - arrayList11.add(TextUtils.join("#", arrayList10)); - videos = arrayList11; - it2 = it; - str7 = str2; - } - list.put(str7, TextUtils.join("$$$", videos)); - } - return result.toString(); - } catch (Exception e10) { - SpiderDebug.log(e10); - return ""; - } - } - - @Override - public String homeContent(boolean filter) { - JSONObject results = new JSONObject(); - try { - results.put("class", ext.getJSONArray("classes")); - if (filter) { - results.put("filters", ext.getJSONObject("filter")); - } - } catch (JSONException e2) { - SpiderDebug.log(e2); - } - return results.toString(); - } - - @Override - public String homeVideoContent() { - JSONObject list = new JSONObject(); - try { - String str = SiteHost; - String i = OkHttpUtil.string(str, new HashMap()); - SpiderDebug.log("响应请求:" + str); - JSONArray optJSONArray = new JSONObject(i).optJSONArray("data"); - JSONArray jSONArray = new JSONArray(); - for (int j = 0; j < optJSONArray.length(); j++) { - JSONObject jSONObject2 = optJSONArray.getJSONObject(j); - JSONObject VideoAtom = new JSONObject(); - VideoAtom.put("vod_id", jSONObject2.optString("cat") + "_" + jSONObject2.optString("ent_id")); - VideoAtom.put("vod_name", jSONObject2.optString("title")); - VideoAtom.put("vod_pic", jSONObject2.optString("cover")); - VideoAtom.put("vod_remarks", jSONObject2.optString("upinfo")); - jSONArray.put(VideoAtom); - } - list.put("list", jSONArray); - } catch (Exception e2) { - SpiderDebug.log(e2); - } - return list.toString(); - } - - @Override - public String playerContent(String str, String str2, List list) { - JSONObject result = new JSONObject(); - try { - result.put("parse", 1); - result.put("url", str2); - result.put("jx", "1"); - result.put("playUrl", ""); - } catch (Exception e2) { - SpiderDebug.log(e2); - } - return result.toString(); - } - - @Override - public String searchContent(String str, boolean filter) { - JSONObject optJSONObject; - JSONObject list = new JSONObject(); - try { - JSONObject optJSONObject2 = new JSONObject(OkHttpUtil.string(String.format(SiteSearch, str), Headers())).optJSONObject("data"); - if (!(optJSONObject2 == null || (optJSONObject = optJSONObject2.optJSONObject("longData")) == null)) { - JSONArray jSONArray = optJSONObject.getJSONArray("rows"); - JSONArray videos = new JSONArray(); - list.put("list", videos); - for (int i = 0; i < jSONArray.length(); i++) { - JSONObject Obj = jSONArray.getJSONObject(i); - JSONObject v = new JSONObject(); - v.put("vod_id", Obj.optString("cat_id") + "_" + Obj.optString("en_id")); - v.put("vod_name", Obj.optString("titleTxt")); - v.put("vod_pic", Obj.optString("cover")); - v.put("vod_remarks", Obj.optString("score")); - videos.put(v); - } - } - } catch (Exception e2) { - SpiderDebug.log(e2); - } - return list.toString(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/Smdyy.java b/app/src/main/java/com/github/catvod/spider/Smdyy.java deleted file mode 100644 index 51fc818..0000000 --- a/app/src/main/java/com/github/catvod/spider/Smdyy.java +++ /dev/null @@ -1,514 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.text.TextUtils; -import android.util.Base64; - -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.okhttp.OKCallBack; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import org.json.JSONArray; -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.URLEncoder; -import java.util.ArrayList; -import java.util.Comparator; -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; - -import okhttp3.Call; - - -/** - * 神马影院 - *

- * Author: baddychen - */ -public class Smdyy extends Spider { - private static final String siteUrl = "https://www.smdyy.cc"; - /** - * 播放源配置 - */ - private JSONObject playerConfig; - /** - * 筛选配置 - */ - private JSONObject filterConfig; - private Pattern regexCategory = Pattern.compile("/list/(\\d+).html"); - private Pattern regexVid = Pattern.compile("/kan/(\\d+).html"); - private Pattern regexPlay = Pattern.compile("/play/(\\d+)-(\\d+)-(\\d+).html"); - private Pattern regexPage = Pattern.compile("/show/(\\S+).html"); - - protected String ext = null; - - @Override - public void init(Context context) { - super.init(context); - try { - playerConfig = new JSONObject("{\"duoduozy\":{\"show\":\"高清线路\",\"or\":999,\"ps\":\"0\",\"parse\":\"https://player.6080kan.cc/player/play.php?url=\"},\"sohu\":{\"show\":\"优选7\",\"or\":999,\"ps\":\"0\",\"parse\":\"https://player.6080kan.cc/player/play.php?url=\"},\"qq\":{\"show\":\"优选3\",\"or\":999,\"ps\":\"0\",\"parse\":\"https://player.6080kan.cc/player/play.php?url=\"},\"bilibili\":{\"show\":\"bilibili\",\"or\":999,\"ps\":\"0\",\"parse\":\"https://player.6080kan.cc/player/play.php?url=\"},\"youku\":{\"show\":\"优选1\",\"or\":999,\"ps\":\"0\",\"parse\":\"https://player.6080kan.cc/player/play.php?url=\"},\"qiyi\":{\"show\":\"优选2\",\"or\":999,\"ps\":\"0\",\"parse\":\"https://player.6080kan.cc/player/play.php?url=\"},\"letv\":{\"show\":\"优选6\",\"or\":999,\"ps\":\"0\",\"parse\":\"https://player.6080kan.cc/player/play.php?url=\"},\"xigua\":{\"show\":\"西瓜视频\",\"or\":999,\"ps\":\"0\",\"parse\":\"https://player.6080kan.cc/player/play.php?url=\"},\"mgtv\":{\"show\":\"优选4\",\"or\":999,\"ps\":\"0\",\"parse\":\"https://player.6080kan.cc/player/play.php?url=\"},\"tkm3u8\":{\"show\":\"备用\",\"or\":999,\"ps\":\"0\",\"parse\":\"https://player.6080kan.cc/player/play.php?url=\"},\"pptv\":{\"show\":\"优选5\",\"or\":999,\"ps\":\"0\",\"parse\":\"https://player.6080kan.cc/player/play.php?url=\"}}"); - filterConfig = new JSONObject("{\"1\":[{\"key\":\"tid\",\"name\":\"类型\",\"value\":[{\"n\":\"全部\",\"v\":\"1\"},{\"n\":\"动作片\",\"v\":\"6\"},{\"n\":\"喜剧片\",\"v\":\"7\"},{\"n\":\"爱情片\",\"v\":\"8\"},{\"n\":\"科幻片\",\"v\":\"9\"},{\"n\":\"恐怖片\",\"v\":\"10\"},{\"n\":\"剧情片\",\"v\":\"11\"},{\"n\":\"战争片\",\"v\":\"12\"},{\"n\":\"犯罪片\",\"v\":\"20\"},{\"n\":\"惊悚片\",\"v\":\"21\"},{\"n\":\"冒险片\",\"v\":\"22\"},{\"n\":\"悬疑片\",\"v\":\"23\"},{\"n\":\"武侠片\",\"v\":\"24\"},{\"n\":\"奇幻片\",\"v\":\"25\"},{\"n\":\"纪录片\",\"v\":\"26\"},{\"n\":\"动画片\",\"v\":\"27\"}]},{\"key\":\"1\",\"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\":\"意大利\"},{\"n\":\"西班牙\",\"v\":\"西班牙\"},{\"n\":\"加拿大\",\"v\":\"加拿大\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"11\",\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"4\",\"name\":\"语言\",\"value\":[{\"n\":\"全部\",\"v\":\"\"}]}],\"2\":[{\"key\":\"tid\",\"name\":\"类型\",\"value\":[{\"n\":\"全部\",\"v\":\"2\"},{\"n\":\"国产剧\",\"v\":\"13\"},{\"n\":\"港台剧\",\"v\":\"14\"},{\"n\":\"日韩剧\",\"v\":\"15\"},{\"n\":\"欧美剧\",\"v\":\"16\"},{\"n\":\"泰国剧\",\"v\":\"28\"}]},{\"key\":\"1\",\"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\":\"11\",\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"4\",\"name\":\"语言\",\"value\":[{\"n\":\"全部\",\"v\":\"\"}]}],\"4\":[{\"key\":\"3\",\"name\":\"剧情\",\"value\":[{\"n\":\"全部\",\"v\":\"3\"},{\"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\":\"少年\"},{\"n\":\"少女\",\"v\":\"少女\"},{\"n\":\"社会\",\"v\":\"社会\"},{\"n\":\"原创\",\"v\":\"原创\"},{\"n\":\"亲子\",\"v\":\"亲子\"},{\"n\":\"益智\",\"v\":\"益智\"},{\"n\":\"励志\",\"v\":\"励志\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"1\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"内地\",\"v\":\"内地\"},{\"n\":\"韩国\",\"v\":\"韩国\"},{\"n\":\"香港\",\"v\":\"香港\"},{\"n\":\"台湾\",\"v\":\"台湾\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"美国\",\"v\":\"美国\"},{\"n\":\"泰国\",\"v\":\"泰国\"},{\"n\":\"英国\",\"v\":\"英国\"},{\"n\":\"新加坡\",\"v\":\"新加坡\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"11\",\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"4\",\"name\":\"语言\",\"value\":[{\"n\":\"全部\",\"v\":\"\"}]}]}"); - } catch (JSONException e) { - SpiderDebug.log(e); - } - } - - /** - * 爬虫headers - * - * @param url - * @return - */ - protected HashMap getHeaders(String url) { - HashMap headers = new HashMap<>(); - headers.put("method", "GET"); - if (!TextUtils.isEmpty(url)) { - headers.put("Referer", url); - } - headers.put("Accept-Encoding", "gzip, deflate, br"); - headers.put("Upgrade-Insecure-Requests", "1"); - headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36"); - headers.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"); - headers.put("Accept-Language", "zh-CN,zh;q=0.9"); - return headers; - } - - /** - * 获取分类数据 + 首页最近更新视频列表数据 - * - * @param filter 是否开启筛选 关联的是 软件设置中 首页数据源里的筛选开关 - * @return - */ - @Override - public String homeContent(boolean filter) { - try { - Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl, getHeaders(siteUrl))); - // 分类节点 - Elements elements = doc.select("ul.stui-header__menu > li a"); - JSONArray classes = new JSONArray(); - for (Element ele : elements) { - String name = ele.text(); - boolean show = true; - if (filter) { - show = 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(); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("type_id", id); - jsonObject.put("type_name", name); - classes.put(jsonObject); - } - } - JSONObject result = new JSONObject(); - if (filter) { - result.put("filters", filterConfig); - } - result.put("class", classes); - try { - Elements list = doc.select("div.stui-pannel div.stui-pannel__bd ul.stui-vodlist li div.stui-vodlist__box"); - JSONArray videos = new JSONArray(); - for (int i = 0; i < list.size(); i++) { - Element vod = list.get(i); - Matcher matcher = regexVid.matcher(vod.selectFirst(".stui-vodlist__thumb").attr("href")); - if (!matcher.find()) - continue; - String title = vod.selectFirst(".stui-vodlist__thumb").attr("title"); - String cover = vod.selectFirst(".stui-vodlist__thumb").attr("data-original"); - String remark = vod.selectFirst("span.pic-text").text(); - if (!TextUtils.isEmpty(cover) && !cover.startsWith("http")) { - cover = siteUrl + cover; - } - String id = matcher.group(1); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", remark); - videos.put(v); - } - result.put("list", videos); - } catch (Exception e) { - SpiderDebug.log(e); - } - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - /** - * 获取分类信息数据 - * - * @param tid 分类id - * @param pg 页数 - * @param filter 同homeContent方法中的filter - * @param extend 筛选参数{k:v, k1:v1} - * @return - */ - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { - try { - String[] urlParams = new String[]{"", "", "", "", "", "", "", "", "", "", "", ""}; - urlParams[0] = tid; - urlParams[8] = pg; - if (extend != null && extend.size() > 0) { - for (Iterator it = extend.keySet().iterator(); it.hasNext(); ) { - String key = it.next(); - String value = extend.get(key); - if (value.trim().length() == 0) - continue; - urlParams[Integer.parseInt(key)] = URLEncoder.encode(value); - } - } - // 获取分类数据的url - String url = siteUrl + "/show/" + TextUtils.join("-", urlParams) + "/"; - String html = OkHttpUtil.string(url, getHeaders(url)); - Document doc = Jsoup.parse(html); - JSONObject result = new JSONObject(); - int pageCount = 0; - int page = -1; - - Elements pageInfo = doc.select("ul.stui-page__item li"); - if (pageInfo.size() == 0) { - page = Integer.parseInt(pg); - pageCount = page; - } else { - for (int i = 0; i < pageInfo.size(); i++) { - Element li = pageInfo.get(i); - Element a = li.selectFirst("a"); - if (a == null) - continue; - if (page == -1 && li.hasClass("active")) { - Matcher matcher = regexPage.matcher(a.attr("href")); - if (matcher.find()) { - page = Integer.parseInt(matcher.group(1).split("-")[8]); - } else { - page = 0; - } - } - String wy = doc.select("ul.stui-page__item li a").last().attr("href"); - Matcher matcher = regexPage.matcher(wy); - if (matcher.find()) { - pageCount = Integer.parseInt(matcher.group(1).split("-")[8]); - } else { - pageCount = 0; - } - break; - - } - } - - JSONArray videos = new JSONArray(); - if (!html.contains("没有找到您想要的结果哦")) { - Elements list = doc.select("ul.stui-vodlist li div.stui-vodlist__box"); - for (int i = 0; i < list.size(); i++) { - Element vod = list.get(i); - String title = vod.selectFirst(".stui-vodlist__thumb").attr("title"); - String cover = vod.selectFirst(".stui-vodlist__thumb").attr("data-original"); - if (!TextUtils.isEmpty(cover) && !cover.startsWith("http")) { - cover = siteUrl + cover; - } - String remark = vod.selectFirst("span.pic-text").text(); - Matcher matcher = regexVid.matcher(vod.selectFirst(".stui-vodlist__thumb").attr("href")); - if (!matcher.find()) - continue; - String id = matcher.group(1); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", remark); - videos.put(v); - } - } - result.put("page", page); - result.put("pagecount", pageCount); - result.put("limit", 48); - result.put("total", pageCount <= 1 ? videos.length() : pageCount * 48); - - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - - private static String Regex(Pattern pattern, String content) { - if (pattern == null) { - return content; - } - try { - Matcher matcher = pattern.matcher(content); - if (matcher.find()) { - return matcher.group(1).trim(); - } - } catch (Exception e) { - SpiderDebug.log(e); - } - return content; - } - - /** - * 视频详情信息 - * - * @param ids 视频id - * @return - */ - @Override - public String detailContent(List ids) { - try { - // 视频详情url - String url = siteUrl + "/kan/" + ids.get(0) + ".html"; - Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url))); - JSONObject result = new JSONObject(); - JSONObject vodList = new JSONObject(); - - // 取基本数据 - String cover = doc.selectFirst("a.pic img").attr("data-original"); - if (!TextUtils.isEmpty(cover) && !cover.startsWith("http")) { - cover = siteUrl + cover; - } - String title = doc.selectFirst("div.stui-content__detail h1.title").text(); - String category = "", area = "", year = "", remark = "", director = "", actor = "", desc = ""; - Elements data = doc.select("p.data"); - desc = doc.selectFirst("span.detail-content").text().trim(); - category = Regex(Pattern.compile("类型:(\\S+)"), data.get(0).text()); - area = Regex(Pattern.compile("地区:(\\S+)"), data.get(0).text()); - year = Regex(Pattern.compile("年份:(\\S+)"), data.get(0).text()); - actor = Regex(Pattern.compile("主演:(\\S+)"), data.get(1).text()); - director = Regex(Pattern.compile("导演:(\\S+)"), data.get(1).text()); - - vodList.put("vod_id", ids.get(0)); - vodList.put("vod_name", title); - vodList.put("vod_pic", cover); - vodList.put("type_name", category); - vodList.put("vod_year", year); - vodList.put("vod_area", area); - vodList.put("vod_remarks", remark); - vodList.put("vod_actor", actor); - vodList.put("vod_director", director); - vodList.put("vod_content", desc); - - Map vod_play = new TreeMap<>(new Comparator() { - @Override - public int compare(String o1, String 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 1; - } - }); - - // 取播放列表数据 - Elements sources = doc.select("div.stui-vodlist__head"); - //Elements sourceList = doc.select("div.stui-vodlist__head > ul.stui-content__playlist"); - - for (int i = 0; i < sources.size(); i++) { - Element source = sources.get(i); - String sourceName = source.selectFirst("h3").text().trim(); - boolean found = false; - for (Iterator it = playerConfig.keys(); it.hasNext(); ) { - String flag = it.next(); - if (playerConfig.getJSONObject(flag).getString("show").equals(sourceName)) { - //sourceName = flag; - sourceName = playerConfig.getJSONObject(flag).getString("show"); - found = true; - break; - } - } - if (!found) - continue; - String playList = ""; - Elements playListA = source.select("ul.stui-content__playlist > li > a"); - List vodItems = new ArrayList<>(); - - for (int j = 0; j < playListA.size(); j++) { - Element vod = playListA.get(j); - Matcher matcher = regexPlay.matcher(vod.attr("href")); - if (!matcher.find()) - continue; - String playURL = matcher.group(1) + "-" + matcher.group(2) + "-" + matcher.group(3); - vodItems.add(vod.text() + "$" + playURL); - } - if (vodItems.size() > 0) - playList = TextUtils.join("#", vodItems); - - if (playList.length() == 0) - continue; - - vod_play.put(sourceName, playList); - } - - if (vod_play.size() > 0) { - 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 ""; - } - - /** - * 获取视频播放信息 - * - * @param flag 播放源 - * @param id 视频id - * @param vipFlags 所有可能需要vip解析的源 - * @return - */ - - private final Pattern urlt = Pattern.compile("\"url\": *\"([^\"]*)\","); - private final Pattern token = Pattern.compile("\"token\": *\"([^\"]*)\""); - private final Pattern vkey = Pattern.compile("\"vkey\": *\"([^\"]*)\","); - - @Override - public String playerContent(String flag, String id, List vipFlags) { - try { - JSONObject headers = new JSONObject(); - headers.put("Referer", " https://www.smdyy.cc/"); - headers.put("User-Agent", " Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"); - headers.put("Accept", " text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"); - headers.put("Accept-Language", " zh-CN,zh;q=0.9,en-GB;q=0.8,en-US;q=0.7,en;q=0.6"); - headers.put("Accept-Encoding", " gzip, deflate"); - String url = siteUrl + "/play/" + id + ".html"; - Elements allScript = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url))).select("script"); - JSONObject result = new JSONObject(); - for (int i = 0; i < allScript.size(); i++) { - String scContent = allScript.get(i).html().trim(); - if (scContent.startsWith("var player_")) { - JSONObject player = new JSONObject(scContent.substring(scContent.indexOf('{'), scContent.lastIndexOf('}') + 1)); - if (playerConfig.has(player.getString("from"))) { - JSONObject pCfg = playerConfig.getJSONObject(player.getString("from")); - //String jxurl = "https://player.tjomet.com/lgyy/?url=" + player.getString("url"); - String jxurl = pCfg.getString("parse") + player.getString("url"); - Document doc = Jsoup.parse(OkHttpUtil.string(jxurl, getHeaders(jxurl))); - Elements script = doc.select("body>script"); - for (int j = 0; j < script.size(); j++) { - String Content = script.get(j).html().trim(); - Matcher matcher = urlt.matcher(Content); - if (!matcher.find()) { - return ""; - } - String urlt = matcher.group(1); - Matcher matcher1 = token.matcher(Content); - if (!matcher1.find()) { - return ""; - } - String token = matcher1.group(1); - Matcher matcher2 = vkey.matcher(Content); - if (!matcher2.find()) { - return ""; - } - String vkey = matcher2.group(1); - HashMap hashMap = new HashMap(); - hashMap.put("token", token); - hashMap.put("url", urlt); - hashMap.put("vkey", vkey); - hashMap.put("sign", "smdyycc"); - OkHttpUtil.post(OkHttpUtil.defaultClient(), "https://player.6080kan.cc/player/xinapi.php", hashMap, new OKCallBack.OKCallBackString() { - @Override - protected void onFailure(Call call, Exception exc) { - } - - public void onResponse(String str) { - try { - String url = new String(Base64.decode(new JSONObject(str).getString("url").substring(8).getBytes(), 0)); - result.put("url", url.substring(8, url.length() - 8)); - } catch (JSONException e) { - e.printStackTrace(); - } - } - }); - result.put("header", headers.toString()); - result.put("parse", 0); - result.put("playUrl", ""); - - } - } - } - } - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - /** - * 搜索 - * - * @param key - * @param quick 是否播放页的快捷搜索 - * @return - */ - @Override - public String searchContent(String key, boolean quick) { - try { - if (quick) - return ""; - long currentTime = System.currentTimeMillis(); - String url = siteUrl + "/index.php/ajax/suggest?mid=1&wd=" + URLEncoder.encode(key) + "&limit=10×tamp=" + currentTime; - JSONObject searchResult = new JSONObject(OkHttpUtil.string(url, getHeaders(url))); - JSONObject result = new JSONObject(); - JSONArray videos = new JSONArray(); - if (searchResult.getInt("total") > 0) { - JSONArray lists = new JSONArray(searchResult.getString("list")); - for (int i = 0; i < lists.length(); i++) { - JSONObject vod = lists.getJSONObject(i); - String id = vod.getString("id"); - String title = vod.getString("name"); - String cover = vod.getString("pic"); - if (!TextUtils.isEmpty(cover) && !cover.startsWith("http")) { - cover = siteUrl + cover; - } - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", ""); - videos.put(v); - } - } - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } -} diff --git a/app/src/main/java/com/github/catvod/spider/XPathMacTvgook.java b/app/src/main/java/com/github/catvod/spider/XPathMacTvgook.java deleted file mode 100644 index 479cef6..0000000 --- a/app/src/main/java/com/github/catvod/spider/XPathMacTvgook.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.text.TextUtils; - -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.Misc; -import com.github.catvod.utils.okhttp.OkHttpUtil; -import com.github.catvod.xpath.XPathRule; - -import org.json.JSONArray; -import org.json.JSONObject; -import org.seimicrawler.xpath.JXDocument; -import org.seimicrawler.xpath.JXNode; - -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Set; - -public class XPathMacTvgook extends XPathMac { - - @Override - public boolean manualVideoCheck() { - return rule.getHomeUrl().contains("tvgook.com"); - - } - - @Override - public boolean isVideoFormat(String url) { - return Misc.isVideoFormat(url)||(url.contains("/ppvod/")&&!url.contains("skipl=1")); - } - - -} diff --git a/app/src/main/java/com/github/catvod/spider/XPbd.java b/app/src/main/java/com/github/catvod/spider/XPbd.java deleted file mode 100644 index c6c2905..0000000 --- a/app/src/main/java/com/github/catvod/spider/XPbd.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.github.catvod.spider; - -import android.text.TextUtils; - -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.Misc; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.seimicrawler.xpath.JXDocument; -import org.seimicrawler.xpath.JXNode; - -import java.net.URLEncoder; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class XPbd extends XPath { - - @Override - protected String categoryUrl(String tid, String pg, boolean filter, HashMap extend) { - String cateUrl = rule.getCateUrl(); - if (filter && extend != null && extend.size() > 0) { - for (Iterator it = extend.keySet().iterator(); it.hasNext(); ) { - String key = it.next(); - String value = extend.get(key); - if (value.length() > 0) { - cateUrl = cateUrl.replace("{" + key + "}", URLEncoder.encode(value)); - } - } - } - cateUrl = cateUrl.replace("{cateId}", tid).replace("{catePg}", pg); - Matcher m = Pattern.compile("\\{(.*?)\\}").matcher(cateUrl); - while (m.find()) { - String n = m.group(0).replace("{", "").replace("}", ""); - cateUrl = cateUrl.replace(m.group(0), "").replace("/" + n + "/", ""); - } - return cateUrl; - } - - @Override - public String detailContent(List ids) { - try { - String webUrl = rule.getDetailUrl().replace("{vid}", ids.get(0)); - String webContent = fetch(webUrl); - JXDocument doc = JXDocument.create(webContent); - JXNode vodNode = doc.selNOne(rule.getDetailNode()); - JSONObject vodAtom = new JSONObject(); - - String cover = "", title = "", desc = "", category = "", area = "", year = "", remark = "", director = "", actor = ""; - - title = vodNode.selOne(rule.getDetailName()).asString().trim(); - title = rule.getDetailNameR(title); - - cover = vodNode.selOne(rule.getDetailImg()).asString().trim(); - cover = rule.getDetailImgR(cover); - cover = Misc.fixUrl(webUrl, cover); - - if (!rule.getDetailCate().isEmpty()) { - try { - category = vodNode.selOne(rule.getDetailCate()).asString().trim(); - category = rule.getDetailCateR(category); - } catch (Exception e) { - SpiderDebug.log(e); - } - } - if (!rule.getDetailYear().isEmpty()) { - try { - year = vodNode.selOne(rule.getDetailYear()).asString().trim(); - year = rule.getDetailYearR(year); - } catch (Exception e) { - SpiderDebug.log(e); - } - } - if (!rule.getDetailArea().isEmpty()) { - try { - area = vodNode.selOne(rule.getDetailArea()).asString().trim(); - area = rule.getDetailAreaR(area); - } catch (Exception e) { - SpiderDebug.log(e); - } - } - if (!rule.getDetailMark().isEmpty()) { - try { - remark = vodNode.selOne(rule.getDetailMark()).asString().trim(); - remark = rule.getDetailMarkR(remark); - } catch (Exception e) { - SpiderDebug.log(e); - } - } - if (!rule.getDetailActor().isEmpty()) { - try { - actor = vodNode.selOne(rule.getDetailActor()).asString().trim(); - actor = rule.getDetailActorR(actor); - } catch (Exception e) { - SpiderDebug.log(e); - } - } - if (!rule.getDetailDirector().isEmpty()) { - try { - director = vodNode.selOne(rule.getDetailDirector()).asString().trim(); - director = rule.getDetailDirectorR(director); - } catch (Exception e) { - SpiderDebug.log(e); - } - } - if (!rule.getDetailDesc().isEmpty()) { - try { - desc = vodNode.selOne(rule.getDetailDesc()).asString().trim(); - desc = rule.getDetailDescR(desc); - } catch (Exception e) { - SpiderDebug.log(e); - } - } - - vodAtom.put("vod_name", title); - vodAtom.put("vod_pic", cover); - vodAtom.put("type_name", category); - vodAtom.put("vod_year", year); - vodAtom.put("vod_area", area); - vodAtom.put("vod_remarks", remark); - vodAtom.put("vod_actor", actor); - vodAtom.put("vod_director", director); - vodAtom.put("vod_content", desc); - - List urlListNodes = doc.selN(rule.getDetailUrlNode()); - for (int i = 0; i < urlListNodes.size(); i++) { - List urlNodes = urlListNodes.get(i).sel(rule.getDetailUrlSubNode()); - for (int j = 0; j < urlNodes.size(); j++) { - String id = urlNodes.get(j).selOne(rule.getDetailUrlId()).asString().trim(); - id = rule.getDetailUrlIdR(id); - JSONObject result = new JSONObject(); - JSONArray lists = new JSONArray(); - vodAtom.put("vod_id", id); - vodAtom.put("vod_play_from", "磁力测试"); - vodAtom.put("vod_play_url", "网站没资源$" + id); - lists.put(vodAtom); - result.put("list", lists); - return result.toString(); - } - } - } catch (JSONException e) { - e.printStackTrace(); - } - return ""; - } - -} diff --git a/app/src/main/java/com/github/catvod/spider/Xxys.java b/app/src/main/java/com/github/catvod/spider/Xxys.java deleted file mode 100644 index e4af42c..0000000 --- a/app/src/main/java/com/github/catvod/spider/Xxys.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; - - -import com.github.catvod.utils.Misc; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.HashMap; - -import java.util.regex.Pattern; - -public class Xxys extends AppYsV2 { - - @Override - protected JSONObject getFinalVideo(String flag, ArrayList parseUrls, String url) throws JSONException { - String htmlPlayUrl = ""; - for (String parseUrl : parseUrls) { - if (parseUrl.isEmpty() || parseUrl.equals("null")) - continue; - String playUrl = parseUrl + url; - String content = desc(OkHttpUtil.string(playUrl, null), (byte) 4); - try { - HashMap hashMap = new HashMap(); - OkHttpUtil.stringNoRedirect(playUrl, null, hashMap); - String d = OkHttpUtil.getRedirectLocation(hashMap); - JSONObject result = new JSONObject(); - result.put("parse", 0); - result.put("playUrl", ""); - result.put("url", d); - return result; - } catch (JSONException e) { - e.printStackTrace(); - } - JSONObject tryJson = null; - try { - tryJson = Misc.jsonParse(url, content); - } catch (Throwable th) { - - } - if (tryJson != null && tryJson.has("url") && tryJson.has("header")) { - tryJson.put("header", tryJson.getJSONObject("header").toString()); - return tryJson; - } - if (content.contains(" - * Author: 小黄瓜 - */ -public class Ysgc extends Spider { - - private static final String siteUrl = "https://www.ik4.cc"; - private static final String siteHost = "www.ik4.cc"; - - protected JSONObject playerConfig = new JSONObject(); - - @Override - public void init(Context context) { - super.init(context); - } - - protected HashMap getHeaders(String url) { - HashMap headers = new HashMap<>(); - headers.put("user-agent", "Dart/2.14 (dart:io)"); - headers.put("version", "1.9.8"); - headers.put("copyright", "xiaogui"); - headers.put("host", siteHost); - headers.put("platform", "android"); - return headers; - } - - @Override - public String homeContent(boolean filter) { - try { - String url = siteUrl + "/xgapp.php/v1/nav?token="; - JSONObject jsonObject = new JSONObject(OkHttpUtil.string(url, getHeaders(url))); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - JSONArray classes = new JSONArray(); - JSONObject filterConfig = new JSONObject(); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject jObj = jsonArray.getJSONObject(i); - String typeName = jObj.getString("type_name"); - if (typeName.equals("电视直播")) - continue; - String typeId = jObj.getString("type_id"); - JSONObject newCls = new JSONObject(); - newCls.put("type_id", typeId); - newCls.put("type_name", typeName); - classes.put(newCls); - try { - JSONObject typeExtend = jObj.getJSONObject("type_extend"); - Iterator typeExtendKeys = typeExtend.keys(); - JSONArray extendsAll = new JSONArray(); - while (typeExtendKeys.hasNext()) { - String typeExtendKey = typeExtendKeys.next(); - String typeExtendName = null; - switch (typeExtendKey) { - case "class": - typeExtendName = "类型"; - break; - case "area": - typeExtendName = "地区"; - break; - case "lang": - typeExtendName = "语言"; - break; - case "year": - typeExtendName = "年代"; - break; - } - if (typeExtendName == null) { - SpiderDebug.log(typeExtendKey); - continue; - } - String typeExtendStr = typeExtend.getString(typeExtendKey); - if (typeExtendStr.trim().length() == 0) - continue; - String[] newTypeExtendKeys = typeExtendStr.split(","); - JSONObject newTypeExtend = new JSONObject(); - newTypeExtend.put("key", typeExtendKey); - newTypeExtend.put("name", typeExtendName); - JSONArray newTypeExtendKV = new JSONArray(); - { - JSONObject kvAll = new JSONObject(); - kvAll.put("n", "全部"); - kvAll.put("v", ""); - newTypeExtendKV.put(kvAll); - } - for (String k : newTypeExtendKeys) { - if (typeExtendName.equals("伦理")) - continue; - JSONObject kv = new JSONObject(); - kv.put("n", k); - kv.put("v", k); - newTypeExtendKV.put(kv); - } - newTypeExtend.put("value", newTypeExtendKV); - extendsAll.put(newTypeExtend); - } - filterConfig.put(typeId, extendsAll); - } catch (Exception e) { - SpiderDebug.log(e); - } - - } - JSONObject result = new JSONObject(); - result.put("class", classes); - if (filter) { - result.put("filters", filterConfig); - } - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - @Override - public String homeVideoContent() { - try { - String url = siteUrl + "/xgapp.php/v1/index_video?token="; - JSONObject jsonObject = new JSONObject(OkHttpUtil.string(url, getHeaders(url))); - JSONArray jsonArray = jsonObject.getJSONArray("data"); - JSONArray videos = new JSONArray(); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject jObj = jsonArray.getJSONObject(i); - JSONArray videoList = jObj.getJSONArray("vlist"); - for (int j = 0; j < videoList.length() && j < 6; j++) { - JSONObject vObj = videoList.getJSONObject(j); - JSONObject v = new JSONObject(); - v.put("vod_id", vObj.getString("vod_id")); - v.put("vod_name", vObj.getString("vod_name")); - v.put("vod_pic", vObj.getString("vod_pic")); - v.put("vod_remarks", vObj.getString("vod_remarks")); - videos.put(v); - } - } - JSONObject result = new JSONObject(); - 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 url = siteUrl + "/xgapp.php/v1/video?tid=" + tid + "&pg=" + pg + "&token="; - Set keys = extend.keySet(); - for (String key : keys) { - url += "&" + key + "=" + URLEncoder.encode(extend.get(key)); - } - JSONObject dataObject = new JSONObject(OkHttpUtil.string(url, getHeaders(url))); - JSONArray jsonArray = dataObject.getJSONArray("data"); - JSONArray videos = new JSONArray(); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject vObj = jsonArray.getJSONObject(i); - JSONObject v = new JSONObject(); - v.put("vod_id", vObj.getString("vod_id")); - v.put("vod_name", vObj.getString("vod_name")); - v.put("vod_pic", vObj.getString("vod_pic")); - v.put("vod_remarks", vObj.getString("vod_remarks")); - videos.put(v); - } - JSONObject result = new JSONObject(); - int limit = 20; - int page = dataObject.getInt("page"); - int total = dataObject.getInt("total"); - int pageCount = dataObject.getInt("pagecount"); - result.put("page", page); - result.put("pagecount", pageCount); - result.put("limit", limit); - result.put("total", total); - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - @Override - public String detailContent(List ids) { - try { - String url = siteUrl + "/xgapp.php/v1/video_detail?id=" + ids.get(0) + "&token="; - JSONObject jsonObject = new JSONObject(OkHttpUtil.string(url, getHeaders(url))); - JSONObject dataObject = jsonObject.getJSONObject("data"); - if (dataObject.has("vod_info")) { - try { - dataObject = dataObject.getJSONObject("vod_info"); - } catch (Exception e) { - - } - } - JSONObject vodList = new JSONObject(); - vodList.put("vod_id", dataObject.getString("vod_id")); - vodList.put("vod_name", dataObject.getString("vod_name")); - vodList.put("vod_pic", dataObject.getString("vod_pic")); - vodList.put("type_name", dataObject.getString("vod_class")); - vodList.put("vod_year", dataObject.getString("vod_year")); - vodList.put("vod_area", dataObject.getString("vod_area")); - vodList.put("vod_remarks", dataObject.getString("vod_remarks")); - vodList.put("vod_actor", dataObject.getString("vod_actor")); - vodList.put("vod_director", dataObject.getString("vod_director")); - vodList.put("vod_content", dataObject.getString("vod_content")); - JSONArray playerList = dataObject.getJSONArray("vod_url_with_player"); - List playFlags = new ArrayList<>(); - HashMap playUrls = new HashMap<>(); - for (int i = 0; i < playerList.length(); i++) { - JSONObject playerListObj = playerList.getJSONObject(i); - String from = playerListObj.getString("code"); - playUrls.put(from, playerListObj.getString("url")); - playerListObj.remove("url"); - playerConfig.put(from, playerListObj); - playFlags.add(from); - } - - Map vod_play = new TreeMap<>(new Comparator() { - @Override - public int compare(String o1, String o2) { - int sort1 = playFlags.indexOf(o1); - int sort2 = playFlags.indexOf(o2); - - if (sort1 == sort2) { - return 1; - } - return sort1 - sort2 > 0 ? 1 : -1; - } - }); - - String[] vod_play_from_list = dataObject.getString("vod_play_from").split("\\$\\$\\$"); - String[] vod_play_url_list = dataObject.getString("vod_play_url").split("\\$\\$\\$"); - - for (int i = 0; i < vod_play_from_list.length; i++) { - String from = vod_play_from_list[i]; - if (i >= vod_play_url_list.length || vod_play_url_list[i].trim().length() == 0) { - if (playUrls.containsKey(from) && playUrls.get(from).trim().length() > 0) { - vod_play.put(vod_play_from_list[i], playUrls.get(from)); - } - continue; - } - vod_play.put(vod_play_from_list[i], vod_play_url_list[i]); - } - - 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); - - JSONObject result = new JSONObject(); - JSONArray list = new JSONArray(); - list.put(vodList); - result.put("list", list); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - private HashMap getHeaderJxs(String url) { - HashMap headers = new HashMap<>(); - headers.put("platform_version", "LMY47I"); - headers.put("user-agent", "Dart/2.12 (dart:io)"); - headers.put("version", "1.6.4"); - headers.put("copyright", "xiaogui"); - headers.put("platform", "android"); - headers.put("client_name", "6L+95Ymn6L6+5Lq6"); - return headers; - } - - @Override - public String playerContent(String flag, String id, List vipFlags) { - try { - JSONObject result = new JSONObject(); - if (id.contains("hsl.ysgc.xyz")) { - String uuu = "https://www.ysgc.cc/static/player/dplayer.php?url=" + id; - HashMap headers = new HashMap(); - headers.put("referer", "https://www.ysgc.cc/"); - String content = OkHttpUtil.string(uuu, headers); - Matcher matcher = Pattern.compile("url: url\\+'(.+?)',").matcher(content); - if (matcher.find()) { - result.put("parse", 0); - result.put("playUrl", ""); - result.put("url", id + matcher.group(1)); - result.put("header", "{\"Referer\":\" https://www.ysgc.cc\"}"); - } else { - result.put("parse", 1); - result.put("playUrl", ""); - result.put("url", uuu); - result.put("header", "{\"Referer\":\"https://www.ysgc.cc/\"}"); - } - return result.toString(); - } else if (id.contains("duoduozy.com") || id.contains("m3u8.cache.suoyo.cc")) { - String uuu = "https://www.6080kan.cc/app.php?url=" + id; - String content = OkHttpUtil.string(uuu, null); - return Misc.jsonParse(id, content).toString(); - } - if (vipFlags.contains(flag)) { - try { - result.put("parse", 1); - result.put("playUrl", ""); - result.put("url", id); - return result.toString(); - } catch (Exception ee) { - SpiderDebug.log(ee); - } - } - JSONObject playerObj = playerConfig.getJSONObject(flag); - String parseUrl = playerObj.getString("parse_api") + id; - String content = OkHttpUtil.string(parseUrl, getHeaderJxs(parseUrl)); - JSONObject playerData = new JSONObject(content); - JSONObject headers = new JSONObject(); - String ua = playerData.optString("user-agent", ""); - if (ua.trim().length() > 0) { - headers.put("User-Agent", " " + ua); - } - String referer = playerData.optString("referer", ""); - if (referer.trim().length() > 0) { - headers.put("Referer", " " + referer); - } - result.put("parse", 0); - result.put("header", headers.toString()); - result.put("playUrl", ""); - result.put("url", playerData.getString("url")); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - if (vipFlags.contains(flag)) { - try { - JSONObject result = new JSONObject(); - result.put("parse", 1); - result.put("playUrl", ""); - result.put("url", id); - return result.toString(); - } catch (Exception ee) { - SpiderDebug.log(ee); - } - } - } - return ""; - } - - @Override - public String searchContent(String key, boolean quick) { - if (quick) - return ""; - try { - String url = siteUrl + "/xgapp.php/v1/search?text=" + URLEncoder.encode(key) + "&pg=1"; - String content = OkHttpUtil.string(url, getHeaders(url)); - JSONObject dataObject = new JSONObject(content); - JSONArray jsonArray = dataObject.getJSONArray("data"); - JSONArray videos = new JSONArray(); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject vObj = jsonArray.getJSONObject(i); - JSONObject v = new JSONObject(); - v.put("vod_id", vObj.getString("vod_id")); - v.put("vod_name", vObj.getString("vod_name")); - v.put("vod_pic", vObj.getString("vod_pic")); - v.put("vod_remarks", vObj.getString("vod_remarks")); - videos.put(v); - } - JSONObject result = new JSONObject(); - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } -} diff --git a/app/src/main/java/com/github/catvod/spider/Zxzj.java b/app/src/main/java/com/github/catvod/spider/Zxzj.java deleted file mode 100644 index c75fb37..0000000 --- a/app/src/main/java/com/github/catvod/spider/Zxzj.java +++ /dev/null @@ -1,486 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.text.TextUtils; - -import com.github.catvod.crawler.Spider; -import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.utils.okhttp.OkHttpUtil; - -import org.json.JSONArray; -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.URLEncoder; -import java.util.ArrayList; -import java.util.Comparator; -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; - -public class Zxzj extends Spider { - private static final String siteUrl = "https://zxzj.vip/"; - /** - * 播放源配置 - */ - private JSONObject playerConfig; - /** - * 筛选配置 - */ - private JSONObject filterConfig; - private Pattern regexCategory = Pattern.compile("/list/(\\d+).html"); - private Pattern regexVid = Pattern.compile("/detail/(\\d+).html"); - private Pattern regexPlay = Pattern.compile("/video/(\\d+)-(\\d+)-(\\d+).html"); - private Pattern regexPage = Pattern.compile("/vodshow/(\\S+).html"); - - protected String ext = null; - - @Override - public void init(Context context) { - super.init(context); - try { - playerConfig = new JSONObject("{\"dpp\":{\"sh\":\"DP播放\",\"pu\":\"https://jx.zxzj.vip/dplayer.php?url=\",\"sn\":1,\"or\":999}}"); - filterConfig = new JSONObject("{\"1\":[{\"key\":\"3\",\"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\":\"冒险\"},{\"n\":\"恐怖\",\"v\":\"恐怖\"},{\"n\":\"悬疑\",\"v\":\"悬疑\"},{\"n\":\"惊悚\",\"v\":\"惊悚\"},{\"n\":\"青春\",\"v\":\"青春\"},{\"n\":\"情色\",\"v\":\"情色\"}]},{\"key\":\"1\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"大陆\",\"v\":\"大陆\"},{\"n\":\"香港\",\"v\":\"香港\"},{\"n\":\"台湾\",\"v\":\"台湾\"},{\"n\":\"欧美\",\"v\":\"欧美\"},{\"n\":\"韩国\",\"v\":\"韩国\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"泰国\",\"v\":\"泰国\"},{\"n\":\"印度\",\"v\":\"印度\"},{\"n\":\"俄罗斯\",\"v\":\"俄罗斯\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"11\",\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"4\",\"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\":\"意大利语\"},{\"n\":\"其它\",\"v\":\"其它\"}]},{\"key\":\"2\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"2\":[{\"key\":\"3\",\"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\":\"4\",\"name\":\"语言\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"英语\",\"v\":\"英语\"},{\"n\":\"法语\",\"v\":\"法语\"}]},{\"key\":\"11\",\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"2\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"3\":[{\"key\":\"3\",\"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\":\"11\",\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"2\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"4\":[{\"key\":\"3\",\"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\":\"11\",\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"2\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"6\":[{\"key\":\"3\",\"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\":\"战争\"},{\"n\":\"少年\",\"v\":\"少年\"},{\"n\":\"少女\",\"v\":\"少女\"},{\"n\":\"社会\",\"v\":\"社会\"},{\"n\":\"原创\",\"v\":\"原创\"},{\"n\":\"亲子\",\"v\":\"亲子\"},{\"n\":\"益智\",\"v\":\"益智\"},{\"n\":\"励志\",\"v\":\"励志\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"1\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"国产\",\"v\":\"国产\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"欧美\",\"v\":\"欧美\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"11\",\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"4\",\"name\":\"语言\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"国语\",\"v\":\"国语\"},{\"n\":\"日语\",\"v\":\"日语\"},{\"n\":\"英语\",\"v\":\"英语\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"2\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"5\":[{\"key\":\"3\",\"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\":\"11\",\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"2\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}]}"); - } catch (JSONException e) { - SpiderDebug.log(e); - } - } - - - protected static HashMap Headers() { - HashMap headers = new HashMap<>(); - headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.62 Safari/537.36"); - headers.put("Referer", siteUrl); - return headers; - } - - /** - * 爬虫headers - * - * @param url - * @return - */ - protected HashMap getHeaders(String url) { - HashMap headers = new HashMap<>(); - headers.put("method", "GET"); - headers.put("Upgrade-Insecure-Requests", "1"); - headers.put("DNT", "1"); - 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; - } - - /** - * 获取分类数据 + 首页最近更新视频列表数据 - * - * @param filter 是否开启筛选 关联的是 软件设置中 首页数据源里的筛选开关 - * @return - */ - @Override - public String homeContent(boolean filter) { - try { - Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl, getHeaders(siteUrl))); - // 分类节点 - Elements elements = doc.select("ul.stui-header__menu li a"); - JSONArray classes = new JSONArray(); - for (Element ele : elements) { - String name = ele.text(); - boolean show = name.equals("电影") || - name.equals("美剧") || - name.equals("韩剧") || - name.equals("日剧") || - name.equals("泰剧") || - name.equals("动漫"); - if (show) { - Matcher mather = regexCategory.matcher(ele.attr("href")); - if (!mather.find()) - continue; - // 把分类的id和名称取出来加到列表里 - String id = mather.group(1).trim(); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("type_id", id); - jsonObject.put("type_name", name); - classes.put(jsonObject); - } - } - JSONObject result = new JSONObject(); - if (filter) { - result.put("filters", filterConfig); - } - result.put("class", classes); - try { - // 取首页推荐视频列表 - Element homeList = doc.select("ul.stui-vodlist").get(0); - Elements list = homeList.select("div.stui-vodlist__box"); - JSONArray videos = new JSONArray(); - for (int i = 0; i < list.size(); i++) { - Element vod = list.get(i); - String title = vod.select("a").attr("title"); - String cover = vod.select("a").attr("data-original"); - String remark = vod.select("a .pic-text").text(); - Matcher matcher = regexVid.matcher(vod.select("a").attr("href")); - if (!matcher.find()) - continue; - String id = matcher.group(1); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", remark); - videos.put(v); - } - result.put("list", videos); - } catch (Exception e) { - SpiderDebug.log(e); - } - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - /** - * 获取分类信息数据 - * - * @param tid 分类id - * @param pg 页数 - * @param filter 同homeContent方法中的filter - * @param extend 筛选参数{k:v, k1:v1} - * @return - */ - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { - try { - String[] urlParams = new String[]{"", "", "", "", "", "", "", "", "", "", "", ""}; - urlParams[0] = tid; - urlParams[8] = pg; - if (extend != null && extend.size() > 0) { - for (Iterator it = extend.keySet().iterator(); it.hasNext(); ) { - String key = it.next(); - String value = extend.get(key); - urlParams[Integer.parseInt(key)] = URLEncoder.encode(value); - } - } - // 获取分类数据的url - String url = siteUrl + "vodshow/" + TextUtils.join("-", urlParams) + ".html"; - String html = OkHttpUtil.string(url, getHeaders(url)); - Document doc = Jsoup.parse(html); - JSONObject result = new JSONObject(); - int pageCount = 0; - int page = -1; - - // 取页码相关信息 - Elements pageInfo = doc.select("ul.stui-page__item li"); - if (pageInfo.size() == 0) { - page = Integer.parseInt(pg); - pageCount = page; - } else { - for (int i = 0; i < pageInfo.size(); i++) { - Element li = pageInfo.get(i); - Element a = li.selectFirst("a"); - if (a == null) - continue; - String name = a.text(); - if (page == -1 && li.hasClass("active")) { - Matcher matcher = regexPage.matcher(a.attr("href")); - if (matcher.find()) { - //System.out.println("哈哈"+matcher.group(1)); - page = Integer.parseInt(matcher.group(1).split("-")[8]); - } else { - page = 0; - } - } - if (name.equals("尾页")) { - Matcher matcher = regexPage.matcher(a.attr("href")); - if (matcher.find()) { - //System.out.println("尾页" + matcher.group(1)); - pageCount = Integer.parseInt(matcher.group(1).split("-")[8]); - } else { - pageCount = 0; - } - break; - } - } - } - - JSONArray videos = new JSONArray(); - if (!html.contains("没有找到您想要的结果哦")) { - // 取当前分类页的视频列表 - Elements list = doc.select("div.stui-vodlist__box"); - for (int i = 0; i < list.size(); i++) { - Element vod = list.get(i); - String title = vod.select("a").attr("title"); - String cover = vod.select("a").attr("data-original"); - String remark = vod.select("a .pic-text").text(); - Matcher matcher = regexVid.matcher(vod.select("a").attr("href")); - if (!matcher.find()) - continue; - String id = matcher.group(1); - JSONObject v = new JSONObject(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", remark); - videos.put(v); - } - } - result.put("page", page); - result.put("pagecount", pageCount); - result.put("limit", 48); - result.put("total", pageCount <= 1 ? videos.length() : pageCount * 48); - - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - /** - * 视频详情信息 - * - * @param ids 视频id - * @return - */ - @Override - public String detailContent(List ids) { - try { - // 视频详情url - String url = siteUrl + "/detail/" + ids.get(0) + ".html"; - Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url))); - JSONObject result = new JSONObject(); - JSONObject vodList = new JSONObject(); - - // 取基本数据 - String cover = doc.select("div.stui-content__thumb a img").attr("data-original"); - String title = doc.select("div.stui-content__detail h1").text(); - String category = "", area = "", year = "", remark = "", director = "", actor = "", desc = ""; - Elements data = doc.select("p.data"); - Pattern cate = Pattern.compile("类型:(\\S+)"); - category = doReplaceRegex(cate, data.get(0).text()); - Pattern areas = Pattern.compile("地区:(\\S+)"); - area = doReplaceRegex(areas, data.get(0).text()); - Pattern years = Pattern.compile("年份:(\\S+)"); - year = doReplaceRegex(years, data.get(0).text()); - Pattern rms = Pattern.compile("更新:(\\S+)"); - remark = doReplaceRegex(rms, data.get(3).text()); - Pattern acs = Pattern.compile("主演:(\\S+)"); - actor = doReplaceRegex(acs, data.get(1).text()); - Pattern dis = Pattern.compile("导演:(\\S+)"); - director = doReplaceRegex(dis, data.get(2).text()); - - desc = doc.selectFirst("span.detail-content").text().trim(); - - vodList.put("vod_id", ids.get(0)); - vodList.put("vod_name", title); - vodList.put("vod_pic", cover); - vodList.put("type_name", category); - vodList.put("vod_year", year); - vodList.put("vod_area", area); - vodList.put("vod_remarks", remark); - vodList.put("vod_actor", actor); - vodList.put("vod_director", director); - vodList.put("vod_content", desc); - - Map vod_play = new TreeMap<>(new Comparator() { - @Override - public int compare(String o1, String 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 1; - } - }); - - // 取播放列表数据 - Elements sources = doc.select("div.stui-vodlist__head h3"); - Elements sourceList = doc.select("ul.stui-content__playlist"); - - for (int i = 0; i < sources.size(); i++) { - Element source = sources.get(i); - String sourceName = source.text(); - boolean found = false; - for (Iterator it = playerConfig.keys(); it.hasNext(); ) { - String flag = it.next(); - if (playerConfig.getJSONObject(flag).getString("sh").equals(sourceName)) { - sourceName = flag; - found = true; - break; - } - } - if (!found) - continue; - String playList = ""; - Elements playListA = sourceList.get(i).select("li a"); - List vodItems = new ArrayList<>(); - - for (int j = 0; j < playListA.size(); j++) { - Element vod = playListA.get(j); - Matcher matcher = regexPlay.matcher(vod.attr("href")); - if (!matcher.find()) - continue; - String playURL = matcher.group(1) + "-" + matcher.group(2) + "-" + matcher.group(3); - vodItems.add(vod.text() + "$" + playURL); - } - if (vodItems.size() > 0) - playList = TextUtils.join("#", vodItems); - - if (playList.length() == 0) - continue; - - vod_play.put(sourceName, playList); - } - - if (vod_play.size() > 0) { - 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 ""; - } - - /** - * 获取视频播放信息 - * - * @param flag 播放源 - * @param id 视频id - * @param vipFlags 所有可能需要vip解析的源 - * @return - */ - @Override - public String playerContent(String flag, String id, List vipFlags) { - try { - //定义播放用的headers - JSONObject headers = new JSONObject(); - //headers.put("Host", " cokemv.co"); - headers.put("origin", " https://zxzj.vip"); - 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", " */*"); - headers.put("Accept-Language", " zh-CN,zh;q=0.9,en-US;q=0.3,en;q=0.7"); - headers.put("Accept-Encoding", " gzip, deflate"); - - - // 播放页 url - String url = siteUrl + "/video/" + id + ".html"; - Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url))); - - Elements allScript = doc.select("script"); - JSONObject result = new JSONObject(); - for (int i = 0; i < allScript.size(); i++) { - String scContent = allScript.get(i).html().trim(); - if (scContent.startsWith("var player_")) { // 取直链 - int start = scContent.indexOf('{'); - int end = scContent.lastIndexOf('}') + 1; - String json = scContent.substring(start, end); - JSONObject player = new JSONObject(json); - if (playerConfig.has(player.getString("from"))) { - JSONObject pCfg = playerConfig.getJSONObject(player.getString("from")); - String videoUrl = pCfg.getString("pu") + player.getString("url"); - Document docs = Jsoup.parse(OkHttpUtil.string(videoUrl, getHeaders(videoUrl))); - Pattern pattern = Pattern.compile("(?<=urls\\s=\\s').*?(?=')"); - Elements allScripts = docs.select("body script"); - for (int j = 0; j < allScripts.size(); j++) { - String scContents = allScripts.get(j).html().trim(); - Matcher matcher = pattern.matcher(scContents); - if (matcher.find()) { - String players = matcher.group(0); - result.put("parse", 0); - result.put("playUrl", ""); - result.put("url", players); - result.put("header", headers.toString()); - } - break; - } - } - } - } - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - /** - * 搜索 - * - * @param key - * @param quick 是否播放页的快捷搜索 - * @return - */ - @Override - public String searchContent(String key, boolean quick) { - try { - String url = siteUrl + "/vodsearch/-------------.html?wd=" + URLEncoder.encode(key) + "&submit="; - Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url))); - JSONObject result = new JSONObject(); - - JSONArray videos = new JSONArray(); - Elements list = doc.select("div.stui-vodlist__box"); - for (int i = 0; i < list.size(); i++) { - Element vod = list.get(i); - String title = vod.select("a").attr("title"); - if (title.contains(key)) { - String cover = vod.select("a").attr("data-original"); - Matcher matcher = regexVid.matcher(vod.select("a").attr("href")); - if (!matcher.find()) - continue; - String id = matcher.group(1); - JSONObject v = new JSONObject(); - String remark = vod.select("a span.pic-text").text(); - v.put("vod_id", id); - v.put("vod_name", title); - v.put("vod_pic", cover); - v.put("vod_remarks", remark); - videos.put(v); - } - } - result.put("list", videos); - return result.toString(); - } catch (Exception e) { - SpiderDebug.log(e); - } - return ""; - } - - private static String doReplaceRegex(Pattern pattern, String src) { - if (pattern == null) - return src; - try { - Matcher matcher = pattern.matcher(src); - if (matcher.find()) { - return matcher.group(1).trim(); - } - } catch (Exception e) { - SpiderDebug.log(e); - } - return src; - } -}