mirror of
https://github.com/vega-org/vega-providers.git
synced 2026-04-17 23:51:44 +00:00
156 lines
5.0 KiB
TypeScript
156 lines
5.0 KiB
TypeScript
import { Stream, ProviderContext } from "../types";
|
|
|
|
export const getStream = async function ({
|
|
link: url,
|
|
type,
|
|
providerContext,
|
|
}: {
|
|
link: string;
|
|
type: string;
|
|
providerContext: ProviderContext;
|
|
}): Promise<Stream[]> {
|
|
const { axios, cheerio } = providerContext;
|
|
try {
|
|
console.log("pwGetStream", type, url);
|
|
const baseUrl = url.split("/").slice(0, 3).join("/");
|
|
const streamLinks: Stream[] = [];
|
|
const urls: { id: string; size: string }[] = [];
|
|
const res = await axios.get(url);
|
|
const data = res.data;
|
|
const $ = cheerio.load(data);
|
|
$('tr:contains("mixdrop")').map((i, element) => {
|
|
const id = $(element).find(".wp-menu-btn").attr("data-wp-menu");
|
|
const size = $(element).find(".wp-menu-btn").next().text();
|
|
if (id) {
|
|
urls.push({ id: baseUrl + "/links/go/" + id, size });
|
|
}
|
|
});
|
|
|
|
console.log("urls", urls);
|
|
|
|
for (const url of urls) {
|
|
const res2 = await axios.head(url.id);
|
|
const location = res2.request?.responseURL.replace("/f/", "/e/");
|
|
|
|
const res3 = await fetch(location, {
|
|
credentials: "include",
|
|
headers: {
|
|
"User-Agent":
|
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0",
|
|
Accept:
|
|
"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
|
|
"Accept-Language": "en-US,en;q=0.5",
|
|
"Upgrade-Insecure-Requests": "1",
|
|
"Sec-Fetch-Dest": "iframe",
|
|
"Sec-Fetch-Mode": "navigate",
|
|
"Sec-Fetch-Site": "same-origin",
|
|
Pragma: "no-cache",
|
|
"Cache-Control": "no-cache",
|
|
referer: res2.request?.responseURL,
|
|
},
|
|
referrer: res2.request?.responseURL,
|
|
method: "GET",
|
|
mode: "cors",
|
|
});
|
|
const data3 = await res3.text();
|
|
|
|
// let MDCore: any = {};
|
|
// Step 1: Extract the function parameters and the encoded string
|
|
var functionRegex =
|
|
/eval\(function\((.*?)\)\{.*?return p\}.*?\('(.*?)'\.split/;
|
|
var match = functionRegex.exec(data3);
|
|
let p = "";
|
|
if (match) {
|
|
// var params = match[1].split(',').map(param => param.trim());
|
|
var encodedString = match[2];
|
|
console.log("Encoded String:", encodedString);
|
|
|
|
// console.log('Parameters:', params);
|
|
// console.log('Encoded String:', encodedString.split("',36,")[0], '🔥🔥');
|
|
|
|
const base = Number(
|
|
encodedString.split(",'|MDCore|")[0].split(",")[
|
|
encodedString.split(",'|MDCore|")[0].split(",").length - 1
|
|
]
|
|
);
|
|
console.log("Base:", base);
|
|
|
|
p = encodedString.split(`',${base},`)?.[0].trim();
|
|
let a = base;
|
|
let c = encodedString.split(`',${base},`)[1].slice(2).split("|").length;
|
|
let k = encodedString.split(`',${base},`)[1].slice(2).split("|");
|
|
|
|
// console.log('p:', p);
|
|
// console.log('a:', a);
|
|
// console.log('c:', c);
|
|
// console.log('k:', k);
|
|
|
|
const decode = function (
|
|
p: any,
|
|
a: any,
|
|
c: any,
|
|
k: any,
|
|
e: any,
|
|
d: any
|
|
) {
|
|
e = function (c: any) {
|
|
return c.toString(36);
|
|
};
|
|
if (!"".replace(/^/, String)) {
|
|
while (c--) {
|
|
d[c.toString(a)] = k[c] || c.toString(a);
|
|
}
|
|
k = [
|
|
function (e: any) {
|
|
return d[e];
|
|
},
|
|
];
|
|
e = function () {
|
|
return "\\w+";
|
|
};
|
|
c = 1;
|
|
}
|
|
while (c--) {
|
|
if (k[c]) {
|
|
p = p.replace(new RegExp("\\b" + e(c) + "\\b", "g"), k[c]);
|
|
}
|
|
}
|
|
return p;
|
|
};
|
|
|
|
const decoded = decode(p, a, c, k, 0, {});
|
|
// get MDCore.wurl=
|
|
const wurl = decoded.match(/MDCore\.wurl="([^"]+)"/)?.[1];
|
|
console.log("wurl:", wurl);
|
|
const streamUrl = "https:" + wurl;
|
|
console.log("streamUrl:", streamUrl);
|
|
streamLinks.push({
|
|
server: "Mixdrop " + url.size,
|
|
link: streamUrl,
|
|
type: "mp4",
|
|
headers: {
|
|
"User-Agent":
|
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0",
|
|
Accept:
|
|
"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
|
|
"Accept-Language": "en-US,en;q=0.5",
|
|
"Upgrade-Insecure-Requests": "1",
|
|
"Sec-Fetch-Dest": "iframe",
|
|
"Sec-Fetch-Mode": "navigate",
|
|
"Sec-Fetch-Site": "same-origin",
|
|
Pragma: "no-cache",
|
|
"Cache-Control": "no-cache",
|
|
referer: res2.request?.responseURL,
|
|
},
|
|
});
|
|
} else {
|
|
console.log("No match found");
|
|
}
|
|
}
|
|
return streamLinks;
|
|
} catch (err) {
|
|
console.error(err);
|
|
return [];
|
|
}
|
|
};
|