mirror of
https://github.com/vega-org/vega-providers.git
synced 2026-04-18 08:01:43 +00:00
init
This commit is contained in:
155
providers/primewire/pwGetStream.ts
Normal file
155
providers/primewire/pwGetStream.ts
Normal file
@@ -0,0 +1,155 @@
|
||||
import {Stream, ProviderContext} from '../types';
|
||||
|
||||
export const pwGetStream = 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 [];
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user