From 4919e07265e370d90356383c7182e15e3be2d331 Mon Sep 17 00:00:00 2001 From: 1028 dokiss <629371505@qq.com> Date: Tue, 23 Apr 2024 14:43:44 +0000 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=B0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JS/AppysV2.js | 893 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 893 insertions(+) create mode 100644 JS/AppysV2.js diff --git a/JS/AppysV2.js b/JS/AppysV2.js new file mode 100644 index 0000000..2adbfd7 --- /dev/null +++ b/JS/AppysV2.js @@ -0,0 +1,893 @@ +import { Crypto, _ } from 'assets://js/lib/cat.js' + +let host = ''; +let header = { + 'User-Agent': 'okhttp/3.12.11' +}; +let siteKey = ''; +let siteType = ''; +let siteJx = ''; + +const urlPattern1 = /api\.php\/.*?\/vod/; +const urlPattern2 = /api\.php\/.+?\.vod/; +const parsePattern = /\/.+\\?.+=/; +const parsePattern1 = /.*(url|v|vid|php\?id)=/; +const parsePattern2 = /https?:\/\/[^\/]*/; + +const htmlVideoKeyMatch = [ + /player=new/, + /
0) { + const result = await getFinalVideo(flag, parseUrls, id); + if (result !== null) { + return JSON.stringify(result); + } + } + + if (isVideo(id)) { + const result = { + parse: 0, + playUrl: "", + url: id + }; + return JSON.stringify(result); + } else { + const result = { + parse: 1, + jx: "1", + url: id + }; + return JSON.stringify(result); + } + } catch (e) { + // Handle any error here + } + return ""; +} + +async function search(key, quick) { + try { + const apiUrl = host; + const url = getSearchUrl(apiUrl, encodeURIComponent(key)); + const json = await request(url, getHeaders(url)); + const obj = JSON.parse(json); + let jsonArray = null; + const videos = []; + + if (obj.list instanceof Array) { + jsonArray = obj.list; + } else if (obj.data instanceof Object && obj.data.list instanceof Array) { + jsonArray = obj.data.list; + } else if (obj.data instanceof Array) { + jsonArray = obj.data; + } + + if (jsonArray !== null) { + for (const vObj of jsonArray) { + if (vObj.vod_id) { + const v = { + vod_id: vObj.vod_id, + vod_name: vObj.vod_name, + vod_pic: vObj.vod_pic, + vod_remarks: vObj.vod_remarks + }; + videos.push(v); + } else { + const v = { + vod_id: vObj.nextlink, + vod_name: vObj.title, + vod_pic: vObj.pic, + vod_remarks: vObj.state + }; + videos.push(v); + } + } + } + + const result = { list: videos }; + return JSON.stringify(result); + } catch (error) { + + } + return ""; +} + + + +async function getFinalVideo(flag, parseUrls, url) { + let htmlPlayUrl = ""; + for (const parseUrl of parseUrls) { + if (parseUrl === "" || parseUrl === "null") { + continue; + } + const playUrl = parseUrl + url; + const content = await request(playUrl, null, 10000); // 10秒请求,能更好过滤webjx + let tryJson = null; + try { + tryJson = jsonParse(url, content); + } catch (error) { } + + if (tryJson !== null && tryJson.hasOwnProperty("url") && tryJson.hasOwnProperty("header")) { + tryJson.header = JSON.stringify(tryJson.header); + return tryJson; + } + + if (content.includes(" 0) { + headers["User-Agent"] = " " + ua; + } + + let referer = ""; + if (jsonPlayData.hasOwnProperty("referer")) { + referer = jsonPlayData.referer; + } else if (jsonPlayData.hasOwnProperty("Referer")) { + referer = jsonPlayData.Referer; + } + if (referer.trim().length > 0) { + headers["Referer"] = " " + referer; + } + + headers = fixJsonVodHeader(headers, input, url); + + const taskResult = { + header: headers, + url: url, + parse: "0" + }; + + return taskResult; + } catch (error) { + + } + return null; +} + +function isVip(url) { + try { + let isVip = false; + const host = new URL(url).hostname; + const vipWebsites = ["iqiyi.com", "v.qq.com", "youku.com", "le.com", "tudou.com", "mgtv.com", "sohu.com", "acfun.cn", "bilibili.com", "baofeng.com", "pptv.com"]; + for (let b = 0; b < vipWebsites.length; b++) { + if (host.includes(vipWebsites[b])) { + if (vipWebsites[b] === "iqiyi.com") { + // 爱奇艺需要特殊处理 + if (url.includes("iqiyi.com/a_") || url.includes("iqiyi.com/w_") || url.includes("iqiyi.com/v_")) { + isVip = true; + break; + } + } else { + isVip = true; + break; + } + } + } + return isVip; + } catch (e) { + } + return false; +} + + +function isBlackVodUrl(input, url) { + return url.includes("973973.xyz") || url.includes(".fit:"); +} + + +function fixJsonVodHeader(headers, input, url) { + if (headers === null) { + headers = {}; + } + + if (input.includes("www.mgtv.com")) { + headers["Referer"] = " "; + headers["User-Agent"] = " Mozilla/5.0"; + } else if (url.includes("titan.mgtv")) { + headers["Referer"] = " "; + headers["User-Agent"] = " Mozilla/5.0"; + } else if (input.includes("bilibili")) { + headers["Referer"] = " https://www.bilibili.com/"; + headers["User-Agent"] = " " + Misc.UaWinChrome; + } + + return headers; +} + + + + + +const snifferMatch = /http((?!http).){26,}?\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)\?.*|http((?!http).){26,}\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)|http((?!http).){26,}\/m3u8\?pt=m3u8.*|http((?!http).)*?default\.ixigua\.com\/.*|http((?!http).)*?cdn-tos[^\?]*|http((?!http).)*?\/obj\/tos[^\?]*|http.*?\/player\/m3u8play\.php\?url=.*|http.*?\/player\/.*?[pP]lay\.php\?url=.*|http.*?\/playlist\/m3u8\/\?vid=.*|http.*?\.php\?type=m3u8&.*|http.*?\/download.aspx\?.*|http.*?\/api\/up_api.php\?.*|https.*?\.66yk\.cn.*|http((?!http).)*?netease\.com\/file\/.*/; + +function isVideoFormat(url) { + if (snifferMatch.test(url)) { + return !url.includes("cdn-tos") || !url.includes(".js"); + } + return false; + +} + +function isVideo(url) { + if (!url.includes(".mp4") || !url.includes(".m3u8")) { + return true; + } + return false; +} + + + + +function UA(url) { + if (url.includes(".vod")) { + return "okhttp/4.1.0"; + } +} + +function getCateUrl(URL) { + if (URL.includes("api.php/app") || URL.includes("xgapp")) { + return URL + "nav?token="; + } else if (URL.includes(".vod")) { + return URL + "/types"; + } else { + return ""; + } +} + +function getPlayUrlPrefix(URL) { + if (URL.includes("api.php/app") || URL.includes("xgapp")) { + return URL + "video_detail?id="; + } else if (URL.includes(".vod")) { + return URL + "/detail?vod_id="; + } else { + return ""; + } +} + +function getRecommendUrl(URL) { + if (URL.includes("api.php/app") || URL.includes("xgapp")) { + return URL + "index_video?token="; + } else if (URL.includes(".vod")) { + return URL + "/vodPhbAll"; + } else { + return ""; + } +} + +function getFilterTypes(URL, typeExtend) { + let str = ""; + + if (typeExtend !== null) { + for (let key in typeExtend) { + if (key === "class" || key === "area" || key === "lang" || key === "year") { + try { + + str += "筛选" + key + "+全部=+" + typeExtend[key].replace(/,/g, "+") + "\n"; + } catch (e) { } + } + } + } + + if (URL.includes(".vod")) { + str += "\n" + "排序+全部=+最新=time+最热=hits+评分=score"; + } else if (URL.includes("api.php/app") || URL.includes("xgapp")) { + // Do nothing, leave the string as it is. + } else { + str = "分类+全部=+电影=movie+连续剧=tvplay+综艺=tvshow+动漫=comic+4K=movie_4k+体育=tiyu\n筛选class+全部=+喜剧+爱情+恐怖+动作+科幻+剧情+战争+警匪+犯罪+动画+奇幻+武侠+冒险+枪战+恐怖+悬疑+惊悚+经典+青春+文艺+微电影+古装+历史+运动+农村+惊悚+惊悚+伦理+情色+福利+三级+儿童+网络电影\n筛选area+全部=+大陆+香港+台湾+美国+英国+法国+日本+韩国+德国+泰国+印度+西班牙+加拿大+其他\n筛选year+全部=+2023+2022+2021+2020+2019+2018+2017+2016+2015+2014+2013+2012+2011+2010+2009+2008+2007+2006+2005+2004+2003+2002+2001+2000"; + } + + return str; +} + +function getCateFilterUrlSuffix(URL) { + if (URL.includes("api.php/app") || URL.includes("xgapp")) { + return "&class=筛选class&area=筛选area&lang=筛选lang&year=筛选year&limit=18&pg=#PN#"; + } else if (URL.includes(".vod")) { + return "&class=筛选class&area=筛选area&lang=筛选lang&year=筛选year&by=排序&limit=18&page=#PN#"; + } else { + return "&page=#PN#&area=筛选area&type=筛选class&start=筛选year"; + } +} + +function getCateFilterUrlPrefix(URL) { + if (URL.includes("api.php/app") || URL.includes("xgapp")) { + return URL + "video?tid="; + } else if (URL.includes(".vod")) { + return URL + "?type="; + } else { + return URL + "?ac=list&class="; + } +} + +function isBan(key) { + return key === "伦理" || key === "情色" || key === "福利"; +} + +function getSearchUrl(URL, KEY) { + if (URL.includes(".vod")) { + return URL + "?wd=" + KEY + "&page="; + } else if (URL.includes("api.php/app") || URL.includes("xgapp")) { + return URL + "search?text=" + KEY + "&pg="; + } else if (urlPattern1.test(URL)) { + return URL + "?ac=list&zm=" + KEY + "&page="; + } + return ""; +} + +function findJsonArray(obj, match, result) { + Object.keys(obj).forEach((k) => { + try { + const o = obj[k]; + if (k === match && Array.isArray(o)) { + result.push(o); + } + if (typeof o === "object" && o !== null) { + if (Array.isArray(o)) { + o.forEach((item) => { + if (typeof item === "object" && item !== null) { + findJsonArray(item, match, result); + } + }); + } else { + findJsonArray(o, match, result); + } + } + } catch (e) { + } + }); +} + +function jsonArr2Str(array) { + const strings = []; + for (let i = 0; i < array.length; i++) { + try { + strings.push(array[i]); + } catch (e) { + } + } + return strings.join(","); +} + +function getHeaders(URL) { + const headers = {}; + headers["User-Agent"] = UA(URL); + return headers; +} + +function isJsonString(str) { + try { + JSON.parse(str); + } catch (e) { + return false; + } + return true; +} + + + + +export function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search, + }; +} \ No newline at end of file