From 3748413663c14669eaf1303b7045e1b5fb971c38 Mon Sep 17 00:00:00 2001 From: xinyi1984 <106141301+xinyi1984@users.noreply.github.com> Date: Mon, 21 Nov 2022 14:37:59 +0800 Subject: [PATCH] Add files via upload --- .../java/com/github/catvod/spider/Zhaozy.java | 100 +++ .../java/com/github/catvod/spider/yyds.java | 581 ++++++++++++++++++ 2 files changed, 681 insertions(+) create mode 100644 app/src/main/java/com/github/catvod/spider/Zhaozy.java create mode 100644 app/src/main/java/com/github/catvod/spider/yyds.java diff --git a/app/src/main/java/com/github/catvod/spider/Zhaozy.java b/app/src/main/java/com/github/catvod/spider/Zhaozy.java new file mode 100644 index 00000000..f6fa9b91 --- /dev/null +++ b/app/src/main/java/com/github/catvod/spider/Zhaozy.java @@ -0,0 +1,100 @@ +package com.github.catvod.spider; + +import android.content.Context; + +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.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.HashMap; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +public class Zhaozy extends Spider { + private static final Pattern aliyun = Pattern.compile("(https://www.aliyundrive.com/s/[^\"]+)"); + private Push Push; + + public String detailContent(List list) { + try { + Pattern pattern = aliyun; + if (pattern.matcher(list.get(0)).find()) { + return Push.detailContent(list); + } + Matcher matcher = pattern.matcher(OkHttpUtil.string("https://zhaoziyuan.me/" + list.get(0), null)); + if (!matcher.find()) { + return ""; + } + list.set(0, matcher.group(1)); + return Push.detailContent(list); + } catch (Exception e) { + SpiderDebug.log(e); + } + return ""; + } + + public void init(Context context, String str) { + super.init(context, str); + Push = new Push(); + Push.init(context, str); + } + + public String playerContent(String str, String str2, List list) { + return Push.playerContent(str, str2, list); + } + + 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; + } + + private Pattern regexVid = Pattern.compile("(\\S+)"); + + public String searchContent(String key, boolean quick) { + try { + String url = "https://zhaoziyuan.me/so?filename=" + URLEncoder.encode(key); + Document docs = Jsoup.parse(OkHttpUtil.string(url, null)); + JSONObject result = new JSONObject(); + JSONArray videos = new JSONArray(); + Elements list = docs.select("div.li_con div.news_text"); + for (int i = 0; i < list.size(); i++) { + Element doc = list.get(i); + String sourceName = doc.select("div.news_text a h3").text(); + if (sourceName.contains(key)) { + String list1 = doc.select("div.news_text a").attr("href"); + Matcher matcher = regexVid.matcher(list1); + if (matcher.find()) { + JSONObject v = new JSONObject(); + String group = matcher.group(1); + String cover = "https://inews.gtimg.com/newsapp_bt/0/13263837859/1000"; + String remark = doc.select("div.news_text a p").text(); + + v.put("vod_name", sourceName); + 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 ""; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/yyds.java b/app/src/main/java/com/github/catvod/spider/yyds.java new file mode 100644 index 00000000..670a79a9 --- /dev/null +++ b/app/src/main/java/com/github/catvod/spider/yyds.java @@ -0,0 +1,581 @@ +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.OKCallBack; +import com.github.catvod.utils.okhttp.OkHttpUtil; +import com.google.gson.annotations.SerializedName; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import okhttp3.Call; + +public class yyds extends Spider { + private static final String siteUrl = "https://cmn.yydshd.com"; + public static String email = null;//账号 + public static String password = null;//密码 + public static String token = null; + public static String alitoken = null; + + @Override + public void init(Context context,String ext) { + super.init(context); + String[] extra = ext.split("\\&"); + if(extra[0].contains("http")){ + alitoken = OkHttpUtil.string(extra[0],getHeaders()); + }else { + alitoken = extra[0]; + } + email = extra[1]; + password = extra[2]; + } + + private HashMap getHeaders(String url) { + HashMap headers = new HashMap<>(); + headers.put("accept", "application/json, text/plain, */*"); + headers.put("origin", "https://yydshd.com"); + headers.put("referer", "https://yydshd.com/index"); + headers.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 headers; + } + + private HashMap getHeaders(String url,String Token) { + HashMap headers = new HashMap<>(); + headers.put("accept", "application/json, text/plain, */*"); + headers.put("origin", "https://yydshd.com"); + headers.put("referer", "https://yydshd.com/index"); + headers.put("token", Token); + headers.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 headers; + } + + public void getToken() throws Exception { + String url = siteUrl + "/api/login"; + JSONObject json = new JSONObject(); + json.put("email", email); + json.put("password", password); + OkHttpUtil.postJson(OkHttpUtil.defaultClient(), url, json.toString(), getHeaders(url), new OKCallBack.OKCallBackString() { + @Override + public void onFailure(Call call, Exception e) { + } + + @Override + public String onResponse(String response) { + try { + JSONObject jsonObject = new JSONObject(response).getJSONObject("data"); + token = jsonObject.getString("token"); + return token; + } catch (JSONException e) { + } + return token; + } + }); + + } + + @Override + public String homeContent(boolean filter) { + try { + JSONArray classes = new JSONArray(); + String url = siteUrl + "/api/new-categories"; + JSONObject newCls2 = new JSONObject(); + newCls2.put("type_id", "0"); + newCls2.put("type_name", "热门精选"); + classes.put(newCls2); + JSONObject newCls3 = new JSONObject(); + newCls3.put("type_id", "18"); + newCls3.put("type_name", "华语电影"); + classes.put(newCls3); + JSONObject newCls4 = new JSONObject(); + newCls4.put("type_id", "15"); + newCls4.put("type_name", "大陆剧"); + classes.put(newCls4); + JSONObject newCls5 = new JSONObject(); + newCls5.put("type_id", "24"); + newCls5.put("type_name", "华语综艺"); + classes.put(newCls5); + JSONObject result = new JSONObject(); + result.put("class", classes); + return result.toString(); + } catch (Exception e) { + SpiderDebug.log(e); + } + return ""; + } + + @Override + public String homeVideoContent() { + try { + JSONArray videos = new JSONArray(); + try { + String url = siteUrl + "/api/posts"; + JSONObject json = new JSONObject(); + json.put("category_id", "-1"); + json.put("skip", "0"); + json.put("limit", "24"); + json.put("keyword", ""); + OkHttpUtil.postJson(OkHttpUtil.defaultClient(), url, json.toString(), getHeaders(url), new OKCallBack.OKCallBackString() { + @Override + public void onFailure(Call call, Exception e) { + } + + @Override + public String onResponse(String response) { + try { + JSONObject jsonObject = new JSONObject(response); + JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("list"); + 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.optJSONArray("tags").optJSONObject(0).optString("title") + " " + vObj.getString("title")); + v.put("vod_pic", vObj.optString("cover")); + String mark = vObj.optString("subtitle"); + if (mark.equals("null")) + mark = ""; + v.put("vod_remarks", mark); + videos.put(v); + } + } catch (JSONException e) { + } + return response; + } + }); + } 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 { + + int limit = 24; + int page = Integer.parseInt(pg); + if (page == 0) { + page = 1; + } + //getToken(); + //System.out.println(token); + + String url = siteUrl + "/api/posts"; + JSONObject json = new JSONObject(); + json.put("category_id", tid); + json.put("skip", ((page - 1) * limit) + ""); + json.put("limit", limit + ""); + json.put("keyword", ""); + JSONArray videos = new JSONArray(); + OkHttpUtil.postJson(OkHttpUtil.defaultClient(), url, json.toString(), getHeaders(url), new OKCallBack.OKCallBackString() { + @Override + public void onFailure(Call call, Exception e) { + } + + @Override + public String onResponse(String response) { + try { + + JSONObject jsonObject = new JSONObject(response); + JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("list"); + 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.optJSONArray("tags").optJSONObject(0).optString("title") + " " + vObj.getString("title"));//增加页面显示清晰度 + v.put("vod_pic", vObj.optString("cover")); + String mark = vObj.optString("subtitle"); + if (mark.equals("null")) + mark = ""; + v.put("vod_remarks", mark); + videos.put(v); + } + + } catch (JSONException e) { + } + return response; + } + }); + JSONObject result = new JSONObject(); + 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 ""; + } + + Pattern aliyun = Pattern.compile(".*?aliyundrive.com/s/(\\w+)[^\\w]?"); + + @Override + public String detailContent(List ids) { + try { + getToken(); + String url = siteUrl + "/api/post-info"; + JSONObject json = new JSONObject(); + json.put("id", ids.get(0)); + JSONObject vodAtom = new JSONObject(); + OkHttpUtil.postJson(OkHttpUtil.defaultClient(), url, json.toString(), getHeaders(url,token), new OKCallBack.OKCallBackString() { + @Override + public void onFailure(Call call, Exception e) { + } + + @Override + public String onResponse(String response) { + try { + JSONObject dataObject = new JSONObject(response); + JSONObject vObj = dataObject.getJSONObject("data"); + + vodAtom.put("vod_id", vObj.getString("id")); + vodAtom.put("vod_name", vObj.optJSONArray("tags").optJSONObject(0).optString("title") + " " + vObj.getString("title")); + vodAtom.put("vod_pic", vObj.getString("cover")); + vodAtom.put("type_name", ""); + vodAtom.put("vod_year", vObj.getString("year")); + vodAtom.put("vod_area", vObj.getString("region")); + String mark = vObj.optString("subtitle"); + if (mark.equals("null")) + mark = ""; + vodAtom.put("vod_remarks", mark); + vodAtom.put("vod_actor", vObj.getString("actors")); + vodAtom.put("vod_director", vObj.getString("director")); + String desc = vObj.optString("desc"); + if (desc.equals("null")) + desc = ""; + vodAtom.put("vod_content", desc); + + Map vod_play = new LinkedHashMap<>(); + JSONArray jsonArray = vObj.getJSONArray("links"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject obj = jsonArray.getJSONObject(i).getJSONArray("item").getJSONObject(0); + String link = obj.optString("link", ""); + updatePlaylist(link, vod_play); + } + if (vod_play.size() == 0 && vObj.optString("content").length() > 0) { + updatePlaylist(vObj.optString("content"), vod_play); + } + if (vod_play.size() > 0) { + String vod_play_from = TextUtils.join("$$$", vod_play.keySet()); + String vod_play_url = TextUtils.join("$$$", vod_play.values()); + vodAtom.put("vod_play_from", vod_play_from); + vodAtom.put("vod_play_url", vod_play_url); + } + } catch (JSONException e) { + } + return response; + } + }); + JSONObject result = new JSONObject(); + JSONArray list = new JSONArray(); + list.put(vodAtom); + result.put("list", list); + return result.toString(); + } catch (Exception e) { + SpiderDebug.log(e); + } + return ""; + } + + private void updatePlaylist(String link, Map vod_play) { + String shareId = null; + Matcher matcher = aliyun.matcher(link); + if (matcher.find()) { + shareId = matcher.group(1); + } + if (shareId != null) { + String shareToken = getShareTk(shareId, ""); + ArrayList vodItems = new ArrayList<>(); + getFileList(shareToken, shareId, "", "root", vodItems); + vod_play.put("阿里原画" + (vod_play.size() > 0 ? vod_play.size() : ""), TextUtils.join("#", vodItems)); + } + } + + @Override + public String playerContent(String flag, String id, List vipFlags) { + try { + String[] infos = id.split("\\+"); + refreshTk(); + String playurl = getOriginalVideoUrl(infos[0], infos[1], infos[2], infos[3]); + JSONObject result = new JSONObject(); + JSONObject headers = new JSONObject(); + headers.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"); + headers.put("referer", "https://www.aliyundrive.com/"); + result.put("parse", 0); + result.put("playUrl", ""); + result.put("header", headers.toString()); + result.put("url", playurl); + return result.toString(); + + } catch (Exception e) { + SpiderDebug.log(e); + } + return ""; + } + private static HashMap getHeaders() { + 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"); + hashMap.put("Referer", "https://www.aliyundrive.com/"); + return hashMap; + } + + private static String postJson(String url, String jsonStr, Map headerMap) { + OKCallBack.OKCallBackString callback = new OKCallBack.OKCallBackString() { + @Override + public void onFailure(Call call, Exception e) { + + } + + @Override + public String onResponse(String response) { + + return response; + } + }; + OkHttpUtil.postJson(OkHttpUtil.defaultClient(), url, jsonStr, headerMap, callback); + return callback.getResult(); + } + + private String getOriginalVideoUrl(String shareId, String shareToken, String fileId, String category) { + try { + HashMap json = getHeaders(); + json.put("x-share-token", shareToken); + json.put("authorization", accessTk); + if (category.equals("video")) { + JSONObject jSONObject = new JSONObject(); + jSONObject.put("share_id", shareId); + jSONObject.put("category", "live_transcoding"); + jSONObject.put("file_id", fileId); + jSONObject.put("template_id", ""); + JSONObject jSONObject2 = new JSONObject(postJson("https://api.aliyundrive.com/v2/file/get_share_link_video_preview_play_info", jSONObject.toString(), json)); + shareId = jSONObject2.getString("share_id"); + fileId = jSONObject2.getString("file_id"); + } + JSONObject jSONObject3 = new JSONObject(); + if (category.equals("video")) { + jSONObject3.put("expire_sec", 600); + jSONObject3.put("file_id", fileId); + jSONObject3.put("share_id", shareId); + } + if (category.equals("audio")) { + jSONObject3.put("share_id", shareId); + jSONObject3.put("get_audio_play_info", true); + jSONObject3.put("file_id", fileId); + } + return new JSONObject(postJson("https://api.aliyundrive.com/v2/file/get_share_link_download_url", jSONObject3.toString(), json)).getString("download_url"); + } catch (Exception e) { + SpiderDebug.log(e); + return ""; + } + } + + + @Override + public String searchContent(String key, boolean quick) { + try { + JSONArray videos = new JSONArray(); + try { + String url = siteUrl + "/api/posts"; + JSONObject json = new JSONObject(); + json.put("category_id", "-1"); + json.put("skip", "0"); + json.put("limit", "24"); + json.put("keyword", key); + OkHttpUtil.postJson(OkHttpUtil.defaultClient(), url, json.toString(), getHeaders(url), new OKCallBack.OKCallBackString() { + @Override + public void onFailure(Call call, Exception e) { + } + + @Override + public String onResponse(String response) { + try { + JSONObject jsonObject = new JSONObject(response); + JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("list"); + 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.optJSONArray("tags").optJSONObject(0).optString("title") + " " + vObj.getString("title")); + v.put("vod_pic", vObj.getString("cover")); + v.put("vod_remarks", vObj.getString("subtitle")); + videos.put(v); + } + } catch (JSONException e) { + } + return response; + } + }); + + } catch (Exception e) { + + } + JSONObject result = new JSONObject(); + result.put("list", videos); + return result.toString(); + } catch (Exception e) { + SpiderDebug.log(e); + } + return ""; + } + + private String aliTk = ""; + + private void fetchAliTk() { + if (aliTk.isEmpty()) { + aliTk = alitoken; + } + } + + private String accessTk = ""; + + private void refreshTk() { + fetchAliTk(); + if (!aliTk.isEmpty() && accessTk.isEmpty()) { + try { + JSONObject json = new JSONObject(); + json.put("refresh_token", aliTk); + OkHttpUtil.postJson(OkHttpUtil.defaultClient(), "https://api.aliyundrive.com/token/refresh", json.toString(), new OKCallBack.OKCallBackString() { + @Override + public void onFailure(Call call, Exception e) { + + } + + @Override + public String onResponse(String response) { + try { + JSONObject obj = new JSONObject(response); + accessTk = obj.getString("token_type") + " " + obj.getString("access_token"); + } catch (Exception e) { + SpiderDebug.log(e); + } + return response; + } + }); + } catch (JSONException e) { + SpiderDebug.log(e); + } + } + } + + private String getShareTk(String shareId, String sharePwd) { + try { + JSONObject json = new JSONObject(); + json.put("share_id", shareId); + json.put("share_pwd", ""); + OKCallBack.OKCallBackString callback = new OKCallBack.OKCallBackString() { + @Override + public void onFailure(Call call, Exception e) { + + } + + @Override + public String onResponse(String response) { + + return response; + } + }; + OkHttpUtil.postJson(OkHttpUtil.defaultClient(), "https://api.aliyundrive.com/v2/share_link/get_share_token", json.toString(), callback); + return new JSONObject(callback.getResult()).optString("share_token"); + } catch (JSONException e) { + SpiderDebug.log(e); + } + return ""; + } + + + private void getFileList(String shareTk, String shareId, String sharePwd, String root, ArrayList vodItems) { + try { + // 取文件夹 + JSONObject json = new JSONObject(); + json.put("share_id", shareId); + json.put("parent_file_id", root); + json.put("limit", 100); + json.put("image_thumbnail_process", "image/resize,w_160/format,jpeg"); + json.put("image_url_process", "image/resize,w_1920/format,jpeg"); + json.put("video_thumbnail_process", "video/snapshot,t_1000,f_jpg,ar_auto,w_300"); + json.put("order_by", "name"); + json.put("order_direction", "ASC"); + HashMap headers = new HashMap<>(); + headers.put("x-share-token", shareTk); + OKCallBack.OKCallBackString callback = new OKCallBack.OKCallBackString() { + @Override + public void onFailure(Call call, Exception e) { + + } + + @Override + public String onResponse(String response) { + + return response; + } + }; + OkHttpUtil.postJson(OkHttpUtil.defaultClient(), "https://api.aliyundrive.com/adrive/v3/file/list", json.toString(), headers, callback); + JSONArray rootList = new JSONObject(callback.getResult()).optJSONArray("items"); + if (rootList != null && rootList.length() > 0) { + for (int i = 0; i < rootList.length(); i++) { + JSONObject item = rootList.getJSONObject(i); + if (item.getString("type").equals("folder")) { + String dirId = item.getString("file_id"); + getFileList(shareTk, shareId, sharePwd, dirId, vodItems); + } else { + if (item.getString("type").equals("file") && !item.getString("file_extension").equals("txt")) { + String fileId = item.getString("file_id"); + String fileName = item.getString("name"); + String fileCate = item.getString("category"); + vodItems.add("[" + getSize(item.getDouble("size")) + "]" + fileName + "$" + shareId + "+" + shareTk + "+" + fileId+ "+" + fileCate); + } + } + } + } + // 取文件列表 + } + catch (JSONException e) { + SpiderDebug.log(e); + } + } + public static String getSize(double size) { + if (size == 0) return ""; + if (size > 1024 * 1024 * 1024 * 1024.0) { + size /= (1024 * 1024 * 1024 * 1024.0); + return String.format(Locale.getDefault(), "%.2f%s", size, "TB"); + } else if (size > 1024 * 1024 * 1024.0) { + size /= (1024 * 1024 * 1024.0); + return String.format(Locale.getDefault(), "%.2f%s", size, "GB"); + } else if (size > 1024 * 1024.0) { + size /= (1024 * 1024.0); + return String.format(Locale.getDefault(), "%.2f%s", size, "MB"); + } else { + size /= 1024.0; + return String.format(Locale.getDefault(), "%.2f%s", size, "KB"); + } + } + @SerializedName("size") + private double size; + public double getSize() { + return size; + } + +}