123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894 |
- import { Crypto, _ } from 'https://git.acwing.com/hogo18/hh/-/raw/main/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/,
- /<div id="video"/,
- /<div id="[^"]*?player"/,
- /\/\/视频链接/,
- /HlsJsPlayer\(/,
- /<iframe[\s\S]*?src="[^"]+?"/,
- /<video[\s\S]*?src="[^"]+?"/,
- ];
- async function init(cfg) {
- siteKey = cfg.skey;
- siteType = cfg.stype;
- host = cfg.ext;
- if (cfg.ext.hasOwnProperty('host')) { // for custom jx
- host = cfg.ext.host;
- siteJx = cfg.ext;
- }
- };//host是指在接口文件中的ext字段中设置成什么值
- async function request(reqUrl, ua, timeout = 60000) {
- let res = await req(reqUrl, {
- method: 'get',
- headers: ua ? ua : {'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'},
- timeout: timeout,
- });
- return res.content;
- }
- async function home(filter) {
- try {
- let url = getCateUrl(host);
- let jsonArray = null;
- if (url) {
- const json = await request(url, getHeaders(url));
- const obj = JSON.parse(json);
- if (obj.hasOwnProperty("list") && Array.isArray(obj.list)) {
- jsonArray = obj.list;
- } else if (
- obj.hasOwnProperty("data") &&
- obj.data.hasOwnProperty("list") &&
- Array.isArray(obj.data.list)
- ) {
- jsonArray = obj.data.list;
- } else if (obj.hasOwnProperty("data") && Array.isArray(obj.data)) {
- jsonArray = obj.data;
- }
- } else {
- // 通过filter列表读分类
- const filterStr = getFilterTypes(url, null);
- const classes = filterStr.split("\n")[0].split("+");
- jsonArray = [];
- for (let i = 1; i < classes.length; i++) {
- const kv = classes[i].trim().split("=");
- if (kv.length < 2) continue;
- const newCls = {
- type_name: kv[0].trim(),
- type_id: kv[1].trim(),
- };
- jsonArray.push(newCls);
- }
- }
- const result = { class: [] };
- if (jsonArray != null) {
- for (let i = 0; i < jsonArray.length; i++) {
- const jObj = jsonArray[i];
- const typeName = jObj.type_name;
- if (isBan(typeName)) continue;
- const typeId = jObj.type_id;
- const newCls = {
- type_id: typeId,
- type_name: typeName,
- };
- const typeExtend = jObj.type_extend;
- if (filter) {
- const filterStr = getFilterTypes(url, typeExtend);
- const filters = filterStr.split("\n");
- const filterArr = [];
- for (let k = (url) ? 1 : 0; k < filters.length; k++) {
- const l = filters[k].trim();
- if (!l) continue;
- const oneLine = l.split("+");
- let type = oneLine[0].trim();
- let typeN = type;
- if (type.includes("筛选")) {
- type = type.replace(/筛选/g, "");
- if (type === "class") typeN = "类型";
- else if (type === "area") typeN = "地区";
- else if (type === "lang") typeN = "语言";
- else if (type === "year") typeN = "年份";
- }
- const jOne = {
- key: type,
- name: typeN,
- value: [],
- };
- for (let j = 1; j < oneLine.length; j++) {
- const kv = oneLine[j].trim();
- const sp = kv.indexOf("=");
- if (sp === -1) {
- if (isBan(kv)) continue;
- jOne.value.push({ n: kv, v: kv });
- } else {
- const n = kv.substring(0, sp);
- if (isBan(n)) continue;
- jOne.value.push({
- n: n.trim(),
- v: kv.substring(sp + 1).trim(),
- });
- }
- }
- filterArr.push(jOne);
- }
- if (!result.hasOwnProperty("filters")) {
- result.filters = {};
- }
- result.filters[typeId] = filterArr;
- }
- result.class.push(newCls);
- }
- }
- return JSON.stringify(result);
- } catch (e) {
- }
- return "";
- }
- async function homeVod() {
- try {
- const apiUrl = host;
- let url = getRecommendUrl(apiUrl);
- let isTV = false;
- if (!url) {
- url = getCateFilterUrlPrefix(apiUrl) + "movie&page=1&area=&type=&start=";
- isTV = true;
- }
- const json = await request(url, getHeaders(url));
- const obj = JSON.parse(json);
- const videos = [];
- if (isTV) {
- const jsonArray = obj.data;
- for (let i = 0; i < jsonArray.length; i++) {
- const vObj = jsonArray[i];
- const v = {
- vod_id: vObj.nextlink,
- vod_name: vObj.title,
- vod_pic: vObj.pic,
- vod_remarks: vObj.state,
- };
- videos.push(v);
- }
- } else {
- const arrays = [];
- findJsonArray(obj, "vlist", arrays);
- if (arrays.length === 0) {
- findJsonArray(obj, "vod_list", arrays);
- }
- const ids = [];
- for (const jsonArray of arrays) {
- for (let i = 0; i < jsonArray.length; i++) {
- const vObj = jsonArray[i];
- const vid = vObj.vod_id;
- if (ids.includes(vid)) continue;
- ids.push(vid);
- const v = {
- vod_id: vid,
- vod_name: vObj.vod_name,
- vod_pic: vObj.vod_pic,
- vod_remarks: vObj.vod_remarks,
- };
- videos.push(v);
- }
- }
- }
- const result = {
- list: videos,
- };
- return JSON.stringify(result);
- } catch (e) {
- }
- return "";
- }
- async function category(tid, pg, filter, extend) {
- try {
- const apiUrl = host;
- let url = getCateFilterUrlPrefix(apiUrl) + tid + getCateFilterUrlSuffix(apiUrl);
- url = url.replace(/#PN#/g, pg);
- url = url.replace(/筛选class/g, extend?.class ?? "");
- url = url.replace(/筛选area/g, extend?.area ?? "");
- url = url.replace(/筛选lang/g, extend?.lang ?? "");
- url = url.replace(/筛选year/g, extend?.year ?? "");
- url = url.replace(/排序/g, extend?.排序 ?? "");
- const json = await request(url, getHeaders(url));
- const obj = JSON.parse(json);
- let totalPg = Infinity;
- try {
- if (obj.totalpage !== undefined && typeof obj.totalpage === "number") {
- totalPg = obj.totalpage;
- } else if (
- obj.pagecount !== undefined &&
- typeof obj.pagecount === "number"
- ) {
- totalPg = obj.pagecount;
- } else if (
- obj.data !== undefined &&
- typeof obj.data === "object" &&
- obj.data.total !== undefined &&
- typeof obj.data.total === "number" &&
- obj.data.limit !== undefined &&
- typeof obj.data.limit === "number"
- ) {
- const limit = obj.data.limit;
- const total = obj.data.total;
- totalPg = total % limit === 0 ? total / limit : Math.floor(total / limit) + 1;
- }
- } catch (e) {
- }
- const jsonArray =
- obj.list !== undefined
- ? obj.list
- : obj.data !== undefined && obj.data.list !== undefined
- ? obj.data.list
- : obj.data;
- const videos = [];
- if (jsonArray !== undefined) {
- for (let i = 0; i < jsonArray.length; i++) {
- const vObj = jsonArray[i];
- const v = {
- vod_id: vObj.vod_id !== undefined ? vObj.vod_id : vObj.nextlink,
- vod_name: vObj.vod_name !== undefined ? vObj.vod_name : vObj.title,
- vod_pic: vObj.vod_pic !== undefined ? vObj.vod_pic : vObj.pic,
- vod_remarks: vObj.vod_remarks !== undefined ? vObj.vod_remarks : vObj.state,
- };
- videos.push(v);
- }
- }
- const result = {
- page: pg,
- pagecount: totalPg,
- limit: 90,
- total: Infinity,
- list: videos,
- };
- return JSON.stringify(result);
- } catch (e) {
- SpiderDebug.log(e);
- }
- return "";
- }
- async function detail(ids) {
- try {
- const apiUrl = host;
- const url = getPlayUrlPrefix(apiUrl) + ids;
- const json = await request(url, getHeaders(url));
- const obj = JSON.parse(json);
- const result = {
- list: [],
- };
- const vod = {};
- genPlayList(apiUrl, obj, json, vod, ids);
- result.list.push(vod);
- return JSON.stringify(result);
- } catch (e) {
- }
- return "";
- }
- const parseUrlMap = new Map();
- function genPlayList(URL, object, json, vod, vid) {
- const playUrls = [];
- const playFlags = [];
-
- if (URL.includes("lfytyl.com")) {
- const data = object.data;
- vod.vod_id = data.vod_id || vid;
- vod.vod_name = data.vod_name;
- vod.vod_pic = data.vod_pic;
- vod.type_name = data.vod_class || "";
- vod.vod_year = data.vod_year || "";
- vod.vod_area = data.vod_area || "";
- vod.vod_remarks = data.vod_remarks || "";
- vod.vod_actor = data.vod_actor || "";
- vod.vod_director = data.vod_director || "";
- vod.vod_content = data.vod_content || "";
-
- vod.vod_play_from = data.vod_play_from;
- vod.vod_play_url = data.vod_play_url;
- return;
- }
- if (URL.includes("api.php/app")) {
- const data = object.data;
- vod.vod_id = data.vod_id || vid;
- vod.vod_name = data.vod_name;
- vod.vod_pic = data.vod_pic;
- vod.type_name = data.vod_class || "";
- vod.vod_year = data.vod_year || "";
- vod.vod_area = data.vod_area || "";
- vod.vod_remarks = data.vod_remarks || "";
- vod.vod_actor = data.vod_actor || "";
- vod.vod_director = data.vod_director || "";
- vod.vod_content = data.vod_content || "";
- const vodUrlWithPlayer = data.vod_url_with_player;
- for (let i = 0; i < vodUrlWithPlayer.length; i++) {
- const from = vodUrlWithPlayer[i];
- let flag = from.code.trim();
- if (flag === "") flag = from.name.trim();
- playFlags.push(flag);
- playUrls.push(from.url);
-
- let purl = from.parse_api;
- const parseUrls = parseUrlMap.get(flag) || [];
- if (purl && !parseUrls.includes(purl)) {
- parseUrls.push(purl);
- }
- parseUrlMap.set(flag, parseUrls);
-
- }
- } else if (URL.includes("xgapp")) {
- const data = object.data.vod_info;
- vod.vod_id = data.vod_id || vid;
- vod.vod_name = data.vod_name;
- vod.vod_pic = data.vod_pic;
- vod.type_name = data.vod_class || "";
- vod.vod_year = data.vod_year || "";
- vod.vod_area = data.vod_area || "";
- vod.vod_remarks = data.vod_remarks || "";
- vod.vod_actor = data.vod_actor || "";
- vod.vod_director = data.vod_director || "";
- vod.vod_content = data.vod_content || "";
- const vodUrlWithPlayer = data.vod_url_with_player;
- for (let i = 0; i < vodUrlWithPlayer.length; i++) {
- const from = vodUrlWithPlayer[i];
- let flag = from.code.trim();
- if (flag === "") flag = from.name.trim();
- playFlags.push(flag);
- playUrls.push(from.url);
- const purl = from.parse_api.trim();
- const parseUrls = parseUrlMap.get(flag) || [];
- if (purl && !parseUrls.includes(purl)) {
- parseUrls.push(purl);
- }
- parseUrlMap.set(flag, parseUrls);
- }
- } else if (URL.includes(".vod")) {
- const data = object.data;
- vod.vod_id = data.vod_id || vid;
- vod.vod_name = data.vod_name;
- vod.vod_pic = data.vod_pic;
- vod.type_name = data.vod_class || "";
- vod.vod_year = data.vod_year || "";
- vod.vod_area = data.vod_area || "";
- vod.vod_remarks = data.vod_remarks || "";
- vod.vod_actor = data.vod_actor || "";
- vod.vod_director = data.vod_director || "";
- vod.vod_content = data.vod_content || "";
- const vodUrlWithPlayer = data.vod_play_list;
- for (let i = 0; i < vodUrlWithPlayer.length; i++) {
- const from = vodUrlWithPlayer[i];
- let flag = from.player_info.from.trim();
- if (flag === "") flag = from.player_info.show.trim();
- playFlags.push(flag);
- playUrls.push(from.url);
- try {
- const parses = [];
- const parse1 = from.player_info.parse.split(",");
- const parse2 = from.player_info.parse2.split(",");
- parses.push(...parse1, ...parse2);
- const parseUrls = parseUrlMap.get(flag) || [];
- for (const purl of parses) {
- if (purl.includes("http")) {
- const match = purl.match(parsePattern1);
- if (match) {
- parseUrls.push(match[0]);
- }
- } else if (purl.includes("//")) {
- const match = purl.match(parsePattern1);
- if (match) {
- parseUrls.push("http:" + match[0]);
- }
- } else {
- const urlMatch = URL.match(parsePattern2);
- if (urlMatch) {
- const match = URL.match(parsePattern1);
- if (match) {
- parseUrls.push(urlMatch[0] + match[0]);
- }
- }
- }
- if (purl.includes("..")) purl = purl.replace(/\.\./g, ".").trim();
- if (purl && !parseUrls.includes(purl)) {
- parseUrls.push(purl);
- }
- }
- parseUrlMap.set(flag, parseUrls);
- } catch (e) {
- }
- }
- } else if (URLPattern1.matcher(URL).find()) {
- // Same implementation as the previous cases
- }
- vod.vod_play_from = playFlags.join("$$$");
- vod.vod_play_url = playUrls.join("$$$");
- }
- async function play(flag, id, vipFlags) {
- try {
- // let parseUrls = parseUrlMap.get(flag);
- let parseUrls = siteJx[flag]; // custom sitejx
- if (!parseUrls) {
- if (siteJx.hasOwnProperty('*')) { // all jx
- parseUrls = siteJx['*'];
- } else {
- parseUrls = [];
- }
- }
- if (parseUrls.length > 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("<html")) {
- let sniffer = false;
- for (const p of htmlVideoKeyMatch) {
- if (p.test(content)) {
- sniffer = true;
- break;
- }
- }
- if (sniffer) {
- htmlPlayUrl = parseUrl;
- }
- }
- }
- if (htmlPlayUrl !== "") { // 不支持sniffer
- const result = {
- parse: 0,
- playUrl: "",
- url: url
- };
- return JSON.stringify(result);
- }
- return null;
- }
- function jsonParse(input, json) {
- try {
- // 处理解析接口返回的报文,如果返回的报文中包含header信息,就加到返回值中
- let jsonPlayData = JSON.parse(json);
- // 处理293的解析结果url在data字段的解析
- if (jsonPlayData.hasOwnProperty("data") && typeof jsonPlayData.data === "object" && !jsonPlayData.hasOwnProperty("url")) {
- jsonPlayData = jsonPlayData.data;
- }
- let url = jsonPlayData.url;
- if (url.startsWith("//")) {
- url = "https:" + url;
- }
- if (!url.trim().startsWith("http")) {
- return null;
- }
- if (url === input) {
- if (isVip(url) || !isVideoFormat(url)) {
- return null;
- }
- }
- if (isBlackVodUrl(input, url)) {
- return null;
- }
- let headers = {};
- if (jsonPlayData.hasOwnProperty("header")) {
- headers = jsonPlayData.header;
- } else if (jsonPlayData.hasOwnProperty("Header")) {
- headers = jsonPlayData.Header;
- } else if (jsonPlayData.hasOwnProperty("headers")) {
- headers = jsonPlayData.headers;
- } else if (jsonPlayData.hasOwnProperty("Headers")) {
- headers = jsonPlayData.Headers;
- }
- let ua = "";
- if (jsonPlayData.hasOwnProperty("user-agent")) {
- ua = jsonPlayData["user-agent"];
- } else if (jsonPlayData.hasOwnProperty("User-Agent")) {
- ua = jsonPlayData["User-Agent"];
- }
- if (ua.trim().length > 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,
- };
- }
|