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 === "福利"|| 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, }; }