From a31172751570f0ba3d34d71374166813a1711448 Mon Sep 17 00:00:00 2001 From: gzlinz2 <107169210+gzlinz2@users.noreply.github.com> Date: Sat, 22 Oct 2022 21:05:24 +0800 Subject: [PATCH] Add files via upload --- .../com/github/catvod/spider/Kunyu77.java | 384 ++++++++++++++++++ 1 file changed, 384 insertions(+) create mode 100644 app/src/main/java/com/github/catvod/spider/Kunyu77.java diff --git a/app/src/main/java/com/github/catvod/spider/Kunyu77.java b/app/src/main/java/com/github/catvod/spider/Kunyu77.java new file mode 100644 index 0000000..424361e --- /dev/null +++ b/app/src/main/java/com/github/catvod/spider/Kunyu77.java @@ -0,0 +1,384 @@ +package com.github.catvod.spider; + +import android.os.Build; +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.JSONObject; + +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Set; + + +/** + * Author: @SDL + */ +public class Kunyu77 extends Spider { + private static final String siteUrl = "http://api.kunyu77.com"; + + private String uAgent = "Dalvik/2.1.0 (Linux; U; Android " + Build.VERSION.RELEASE + "; " + Build.MODEL + " Build/" + Build.ID + ")"; + + private HashMap sgetHeaders(String url) { + HashMap headers = new HashMap<>(); + headers.put("user-agent", "okhttp/3.12.0"); + return headers; + } + + private HashMap getHeadersTK(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("t",t); + headers.put("TK",TK); + return headers; + } + + @Override + public String homeContent(boolean filter) { + try { + String url = siteUrl + "/api.php/provide/filter"; + String content = OkHttpUtil.string(url, getHeaders(url)); + JSONObject jsonObject = new JSONObject(decryptResponse(content)).getJSONObject("data"); + Iterator keys = jsonObject.keys(); + JSONArray classes = new JSONArray(); + JSONObject filterConfig = new JSONObject(); + JSONArray extendsAll = null; + while (keys.hasNext()) { + String typeId = keys.next(); + String typeName = jsonObject.getJSONArray(typeId).getJSONObject(0).getString("cat"); + JSONObject newCls = new JSONObject(); + newCls.put("type_id", typeId); + newCls.put("type_name", typeName); + classes.put(newCls); + try { + if (extendsAll == null) { + String filterUrl = siteUrl + "/api.php/provide/searchFilter?type_id=0&pagenum=1&pagesize=1"; + String filterContent = OkHttpUtil.string(filterUrl, getHeaders(filterUrl)); + JSONObject filterObj = new JSONObject(filterContent).getJSONObject("data").getJSONObject("conditions"); + extendsAll = new JSONArray(); + // 年份 + JSONObject newTypeExtend = new JSONObject(); + newTypeExtend.put("key", "year"); + newTypeExtend.put("name", "年份"); + JSONArray newTypeExtendKV = new JSONArray(); + JSONObject kv = new JSONObject(); + kv.put("n", "全部"); + kv.put("v", ""); + newTypeExtendKV.put(kv); + kv = new JSONObject(); + kv.put("n", "2022"); + kv.put("v", "2022"); + newTypeExtendKV.put(kv); + kv = new JSONObject(); + kv.put("n", "2021"); + kv.put("v", "2021"); + newTypeExtendKV.put(kv); + JSONArray years = filterObj.getJSONArray("y"); + for (int j = 0; j < years.length(); j++) { + JSONObject child = years.getJSONObject(j); + kv = new JSONObject(); + kv.put("n", child.getString("name")); + kv.put("v", child.getString("value")); + 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); + JSONArray areas = filterObj.getJSONArray("a"); + for (int j = 0; j < areas.length(); j++) { + JSONObject child = areas.getJSONObject(j); + kv = new JSONObject(); + kv.put("n", child.getString("name")); + kv.put("v", child.getString("value")); + newTypeExtendKV.put(kv); + } + newTypeExtend.put("value", newTypeExtendKV); + extendsAll.put(newTypeExtend); + // 类型 + newTypeExtend = new JSONObject(); + newTypeExtend.put("key", "category"); + newTypeExtend.put("name", "类型"); + newTypeExtendKV = new JSONArray(); + kv = new JSONObject(); + kv.put("n", "全部"); + kv.put("v", ""); + newTypeExtendKV.put(kv); + JSONArray scat = filterObj.getJSONArray("scat"); + for (int j = 0; j < scat.length(); j++) { + JSONObject child = scat.getJSONObject(j); + kv = new JSONObject(); + kv.put("n", child.getString("name")); + kv.put("v", child.getString("value")); + newTypeExtendKV.put(kv); + } + newTypeExtend.put("value", newTypeExtendKV); + extendsAll.put(newTypeExtend); + } + if (extendsAll != null && extendsAll.length() > 0) { + 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 (Throwable th) { + + } + return ""; + } + + @Override + public String homeVideoContent() { + try { + JSONArray videos = new JSONArray(); + try { + String url = siteUrl + "/api.php/provide/homeBlock?type_id=0"; + String content = OkHttpUtil.string(url, getHeaders(url)); + JSONObject jsonObject = new JSONObject(decryptResponse(content)); + JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("blocks"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject blockObj = jsonArray.getJSONObject(i); + String blockName = blockObj.getString("block_name"); + if (!blockName.startsWith("热播")) { + continue; + } + JSONArray contents = blockObj.getJSONArray("contents"); + for (int j = 0; j < contents.length() && j < 3; j++) { + JSONObject vObj = contents.getJSONObject(j); + JSONObject v = new JSONObject(); + v.put("vod_id", vObj.getString("id")); + v.put("vod_name", vObj.getString("title")); + v.put("vod_pic", vObj.getString("videoCover")); + v.put("vod_remarks", vObj.getString("msg")); + videos.put(v); + } + } + } 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 = siteUrl + "/api.php/provide/searchFilter?type_id=" + tid + "&pagenum=" + pg + "&pagesize=24"; + 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)); + JSONObject dataObject = new JSONObject(decryptResponse(content)).getJSONObject("data"); + JSONArray jsonArray = dataObject.getJSONArray("result"); + 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("title")); + v.put("vod_pic", vObj.getString("videoCover")); + v.put("vod_remarks", vObj.getString("msg")); + videos.put(v); + } + JSONObject result = new JSONObject(); + int limit = 24; + int page = Integer.parseInt(dataObject.getString("page")); + int total = dataObject.getInt("total"); + int pageCount = dataObject.getInt("pagesize"); + result.put("page", page); + result.put("pagecount", pageCount); + 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 { + String url = siteUrl + "/api.php/provide/videoDetail?ids=" + ids.get(0)+"&pcode=010110002&version=2.0.4"; + String tk_path = "/api.php/provide/videoDetail" + ids.get(0)+"010110002"+"2.0.4"; + String content = OkHttpUtil.string(url, getHeadersTK(tk_path)); + JSONObject dataObject = new JSONObject(decryptResponse(content)); + JSONObject vObj = dataObject.getJSONObject("data"); + JSONObject result = new JSONObject(); + JSONArray list = new JSONArray(); + JSONObject vodAtom = new JSONObject(); + String title = vObj.getString("videoName"); + vodAtom.put("vod_id", vObj.getString("id")); + vodAtom.put("vod_name", title); + vodAtom.put("vod_pic", vObj.getString("videoCover")); + vodAtom.put("type_name", vObj.getString("subCategory")); + vodAtom.put("vod_year", vObj.getString("year")); + vodAtom.put("vod_area", vObj.getString("area")); + vodAtom.put("vod_remarks", vObj.getString("msg")); + vodAtom.put("vod_actor", vObj.getString("actor")); + 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)+"&pcode=010110002&version=2.0.4"; + tk_path = "/api.php/provide/videoPlaylist" + ids.get(0)+"010110002"+"2.0.4"; + content = OkHttpUtil.string(url, getHeadersTK(tk_path)); + JSONArray episodes = new JSONObject(content).getJSONObject("data").getJSONArray("episodes"); + LinkedHashMap> playlist = new LinkedHashMap<>(); + for (int i = 0; i < episodes.length(); i++) { + JSONArray playurls = episodes.getJSONObject(i).getJSONArray("playurls"); + for (int j = 0; j < playurls.length(); j++) { + JSONObject purl = playurls.getJSONObject(j); + String from = purl.getString("playfrom"); + ArrayList urls = playlist.get(from); + if (urls == null) { + urls = new ArrayList<>(); + playlist.put(from, urls); + } + String name = purl.getString("title").replace(title, "").trim(); + if (name.isEmpty()) { + name = (i + 1) + ""; + } + String pid = purl.getString("playurl"); + urls.add(name + "$" + pid); + } + } + String vod_play_from = TextUtils.join("$$$", playlist.keySet()); + StringBuilder sb = new StringBuilder(); + Iterator> iter = playlist.values().iterator(); + short fromSize = (short) playlist.size(); + while (iter.hasNext()) { + fromSize--; + ArrayList urls = iter.next(); + sb.append(TextUtils.join("#", urls)); + if (fromSize > 0) + sb.append("$$$"); + } + vodAtom.put("vod_play_from", vod_play_from); + vodAtom.put("vod_play_url", sb.toString()); + list.put(vodAtom); + result.put("list", list); + return result.toString(); + } catch (Throwable th) { + + } + return ""; + } + + @Override + public String playerContent(String flag, String id, List vipFlags) { + try { + String videoUrl = id; + try { + String url = siteUrl + "/api.php/provide/parserUrl?url=" + id; + String tk_path = "/api.php/provide/parserUrl" + id; + String content = OkHttpUtil.string(url, getHeadersTK(tk_path)); + JSONObject dataObj = new JSONObject(decryptResponse(content)).getJSONObject("data"); + JSONObject playHeader = dataObj.optJSONObject("playHeader"); + String jxUrl = dataObj.getString("url"); + content = OkHttpUtil.string(jxUrl, getHeaders(jxUrl)); + JSONObject result = Misc.jsonParse(jxUrl, content); + if (result != null) { + result.put("parse", 0); + result.put("playUrl", ""); + if (playHeader != null) { + JSONObject header = result.getJSONObject("header"); + Iterator iter = playHeader.keys(); + while (iter.hasNext()) { + String key = iter.next(); + header.put(key, " " + playHeader.getString(key)); + } + result.put("header", header.toString()); + } + return result.toString(); + } + } catch (Throwable th) { + + } + if (Misc.isVip(videoUrl)) { + JSONObject result = new JSONObject(); + result.put("parse", 1); + result.put("jx", "1"); + result.put("url", videoUrl); + return result.toString(); + } + JSONObject result = new JSONObject(); + result.put("parse", 0); + result.put("playUrl", ""); + result.put("url", id); + return result.toString(); + } catch (Throwable th) { + + } + return ""; + } + + @Override + public String searchContent(String key, boolean quick) { + try { + String url = siteUrl + "/api.php/provide/searchVideo?searchName=" + URLEncoder.encode(key); + String content = OkHttpUtil.string(url, getHeaders(url)); + 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(); + String title = vObj.getString("videoName"); + if (!title.contains(key)) + continue; + v.put("vod_id", vObj.getString("id")); + v.put("vod_name", title); + v.put("vod_pic", vObj.getString("videoCover")); + v.put("vod_remarks", vObj.getString("msg")); + videos.put(v); + } + JSONObject result = new JSONObject(); + result.put("list", videos); + return result.toString(); + } catch (Throwable th) { + + } + return ""; + } + + protected String decryptResponse(String src) { + return src; + } + +} \ No newline at end of file