diff --git a/js/ysapp.js b/js/ysapp.js deleted file mode 100644 index ef71217..0000000 --- a/js/ysapp.js +++ /dev/null @@ -1,335 +0,0 @@ -// 本资源来源于互联网公开渠道,仅可用于个人学习爬虫技术。 -// 严禁将其用于任何商业用途,下载后请于 24 小时内删除,搜索结果均来自源站,本人不承担任何责任。 -import { - Crypto as e, - _ as t -} from "assets://js/lib/cat.js"; -let a, o, r, n, s, i, d, c, l, p, u, f = `${o}_3qys_B7k7Dt56Rn`; -const _ = "function" == typeof js2Proxy && "function" == typeof desX && "function" != typeof getProxy, - v = { - "User-Agent": "okhttp/4.12.0" - }, - y = { - "电影": { - class: ["动作", "喜剧", "爱情", "科幻", "恐怖", "悬疑", "犯罪", "战争", "动画", "冒险", "历史", "灾难", "纪录", "剧情"], - area: ["大陆", "香港", "台湾", "美国", "日本", "韩国", "泰国", "印度", "英国", "法国", "德国", "加拿大", "西班牙", "意大利", "澳大利亚"], - year: k(2016, ["2015-2011", "2010-2000", "90年代", "80年代", "更早"]) - }, - "剧集": { - class: ["爱情", "古装", "武侠", "历史", "家庭", "喜剧", "悬疑", "犯罪", "战争", "奇幻", "科幻", "恐怖"], - area: ["大陆", "香港", "台湾", "美国", "日本", "韩国", "泰国", "英国"], - year: k(2021, ["2020-2016", "2015-2011", "2010-2000", "更早"]) - }, - "综艺": { - class: ["真人秀", "音乐", "脱口秀", "歌舞", "爱情"], - area: ["大陆", "香港", "台湾", "美国", "日本", "韩国"], - year: k(2011, ["更早"]) - }, - "动漫": { - class: ["冒险", "奇幻", "科幻", "武侠", "悬疑"], - area: ["大陆", "日本", "欧美"], - year: k(2011, ["更早"]) - } - }; -async function h(e) { - try { - const t = e.ext; - if (a = t.host, o = t.pkg, s = t.sk, n = t.finger, r = String(t.ver), i = t.updateId, d = t.device_id, p = t.filterDef || null, !(a && o && r && i && n && s)) throw new Error(""); - c = t.deviceBrand || "vivo", l = t.deviceModel || "V2309A", p = t.filterDef || null - } catch (e) { - a = 0 - } -} -async function m(e) { - if (!a) return; - const o = await O(); - let r = t.map(o.data.categories, e => ({ - type_id: e.type_name, - type_name: e.type_name - })); - const n = {}; - for (const e of o.data.categories) { - let t = e.type_name, - a = e.filter_options && Object.keys(e.filter_options).length > 0 ? e.filter_options : y[t] || null; - if (a) { - n[t] = []; - for (let e in a) { - let o = "class" === e ? "类型" : "area" === e ? "地区" : "year" === e ? "年份" : e, - r = a[e], - s = [{ - n: "全部", - v: "" - }]; - r.forEach(e => { - s.push({ - n: e, - v: e - }) - }); - let i = ""; - if (p && p[t] && p[t][o]) { - const e = p[t][o].split(","); - for (const t of e) { - const e = t.trim(), - a = s.find(t => t.n === e); - if (a) { - i = a.v; - break - } - } - } - n[t].push({ - key: e, - name: o, - init: i, - value: s - }) - } - } - } - void 0 !== _ && _ && r.unshift({ - type_id: "首页", - type_name: "首页" - }); - const s = []; - if (!_) - for (const e of o.data.categories) s.push(...J(e.videos)); - return JSON.stringify({ - class: r, - filters: n, - list: s - }) -} -async function g() { - if (!a) return JSON.stringify({ - list: [] - }); - const e = await O(), - t = []; - if (e.data) { - let a = []; - if (Array.isArray(e.data.appCarouselVideos) && a.push(...e.data.appCarouselVideos), Array.isArray(e.data.recommend) && a.push(...e.data.recommend), Array.isArray(e.data.webCarouselVideos) && a.push(...e.data.webCarouselVideos), a.length > 0) { - let e = J(a), - o = new Set; - for (let a = 0; a < e.length; a++) { - let r = e[a].vod_id; - o.has(r) || (o.add(r), t.push(e[a])) - } - } else if (e.data.categories) - for (const a of e.data.categories) t.push(...J(a.videos)) - } - return JSON.stringify({ - list: t - }) -} -async function $(e, t, o, r) { - if ("首页" === e) { - const e = JSON.parse(await g()); - return JSON.stringify({ - list: e.list, - page: 1 - }) - } - const n = await C(); - let s = `${a}/api.php/app/filter/vod?type_name=${encodeURIComponent(e)}&page=${t}&sort=hits`; - if (r) - for (let e in r) r[e] && (s += `&${e}=${encodeURIComponent(r[e])}`); - const i = await req(s, { - headers: n - }), - d = JSON.parse(i.content); - return JSON.stringify({ - list: J(d.data), - page: parseInt(t) - }) -} -async function w(e, t, o = 1) { - const r = await C(), - n = `${a}/api.php/app/search/index?wd=${encodeURIComponent(e)}&page=${o}&limit=15`, - s = await req(n, { - headers: r - }), - i = JSON.parse(s.content); - return JSON.stringify({ - list: J(i.data), - page: parseInt(o) - }) -} -async function S(e) { - const o = await C(), - r = await req(`${a}/api.php/app/vod/get_detail?vod_id=${e}`, { - headers: o - }), - n = JSON.parse(r.content), - s = n.data[0], - i = n.vodplayer || [], - d = s.vod_play_from.split("$$$"), - c = s.vod_play_url.split("$$$"); - let l = []; - for (let e = 0; e < d.length; e++) { - const a = d[e], - o = c[e], - r = t.find(i, e => e.from === a); - r && l.push({ - show_code: a, - urls_str: o, - player_info: r, - sort: void 0 !== r.sort && null !== r.sort ? parseFloat(r.sort) : 999 - }) - } - l.sort((e, t) => e.sort - t.sort); - const p = [], - u = []; - for (const e of l) { - const t = e.show_code, - a = e.player_info; - let o = a.decode_status || 0, - r = a.decode_mode || "server", - n = a.parse_url || "", - s = t; - t.toLowerCase() !== a.show.toLowerCase() && (s = `${a.show} (${t})`); - const i = []; - for (const a of e.urls_str.split("#")) - if (a.includes("$")) { - const [e, s] = a.split("$"); - i.push(`${e}$${t}@@${o}@@${r}@@${encodeURIComponent(n)}@@${s}`) - } i.length > 0 && (u.push(i.join("#")), p.push(s)) - } - const f = { - vod_id: s.vod_id.toString(), - vod_name: s.vod_name, - vod_pic: N(s.vod_pic), - vod_remarks: s.vod_remarks, - vod_year: s.vod_year, - vod_area: s.vod_area, - vod_actor: s.vod_actor, - vod_director: s.vod_director, - vod_content: s.vod_content, - vod_play_from: p.join("$$$"), - vod_play_url: u.join("$$$"), - type_name: s.vod_class - }; - return JSON.stringify({ - list: [f] - }) -} -async function x(e, t, o) { - const r = t.split("@@"); - let n, s, i, d, c; - if (r.length >= 5) n = r[0], s = r[1], i = r[2], d = decodeURIComponent(r[3]), c = r.slice(4).join("@@"); - else { - const e = t.split("@"); - n = e[0], s = e[1], c = e.slice(2).join("@"), i = "server", d = "" - } - let l = "", - p = 0; - if ("1" === s) - if ("client" === i && d && d.startsWith("http")) { - let e = ""; - e = d.includes("{url}") ? d.replace("{url}", c) : d + c; - try { - const t = await req(e, { - headers: v, - timeout: 15e3 - }), - a = JSON.parse(t.content); - a.url ? l = a.url : a.data && a.data.url && (l = a.data.url) - } catch (e) {} - } else try { - const e = await C(), - t = `${a}/api.php/app/decode/url/?url=${encodeURIComponent(c)}&vodFrom=${n}`, - o = await req(t, { - headers: e, - timeout: 3e4 - }), - r = JSON.parse(o.content); - r.data && r.data.startsWith("http") && (l = r.data) - } catch (e) {} - l || (l = c, /(www\.iqiyi|v\.qq|v\.youku|www\.mgtv|www\.bilibili)\.com/.test(c) && (p = 1)); - let u = { - jx: p, - parse: 0, - url: l, - header: { - "User-Agent": "com.sunshine.tv/1.2.0 (Linux;Android 15) AndroidXMedia3/1.4.1" - } - }; - return JSON.stringify(u) -} -async function C() { - const t = Math.floor(Date.now() / 1e3).toString(), - a = A(3, "0123456789"); - d || (d = await local.get("cache", f), d && 16 === d.length || (d = A(16), await local.set("cache", f, d))); - const p = `finger=${n}&id=${o}&nonce=${a}&sk=${s}&time=${t}&v=${r}`, - u = e.SHA256(p).toString().toUpperCase(); - let y = { - ...v, - Accept: "application/json", - "x-aid": o, - "x-ave": r, - "x-time": t, - "x-nonc": a, - "x-sign": u, - "x-device-id": d, - "x-device-brand": c, - "x-device-model": l, - "x-platform": "android", - "x-update-id": i - }; - return _ && (y["Accept-Encoding"] = "gzip"), y -} -async function O() { - if (u) return u; - const e = await C(), - t = await req(`${a}/api.php/app/index/home`, { - headers: e - }), - o = JSON.parse(t.content).data || {}; - return u = { - data: { - appCarouselVideos: o.appCarouselVideos || [], - recommend: o.recommend || [], - webCarouselVideos: o.webCarouselVideos || [], - categories: o.categories || [] - } - }, u -} - -function J(e) { - return t.map(e, e => { - let t = e.type_name || ""; - return e.vod_class && (t = t + (t ? "," : "") + e.vod_class), { - vod_id: e.vod_id.toString(), - vod_name: e.vod_name, - vod_pic: N(e.vod_pic || ""), - vod_remarks: e.vod_remarks, - type_name: t, - vod_year: e.vod_year - } - }) -} -const N = e => (e || "").replace("https://api.zxki.cn/api/imgfdl?url=", ""); - -function k(e, t) { - let a = (new Date).getFullYear(), - o = []; - for (; a >= e;) o.push(String(a--)); - return [...o, ...t] -} - -function A(e, a = "0123456789abcdef") { - let o = ""; - for (let r = 0; r < e; r++) o += a[t.random(0, a.length - 1)]; - return o -} -export function __jsEvalReturn() { - return { - init: h, - home: m, - homeVod: g, - category: $, - search: w, - detail: S, - play: x - } -} \ No newline at end of file