scraper / dl /ytmp3.js
R-Kentaren's picture
Rename ytmp3.js to dl/ytmp3.js
a305b4c verified
const axios = require('axios')
function tokenizer(uzido, ndbz) {
if (eval(atob(uzido.t[0])) == uzido.t[1]) {
for (var c = 0; c < atob(uzido[0]).split(uzido.f[5]).length; c++) ndbz += (0 < nyxz.f[4] ? nyxz[1].split("").reverse().join("") : nyxz[1])[atob(nyxz[0]).split(nyxz.f[5])[c] - nyxz.f[3]];
return 1 == uzido.f[1] ? ndbz = ndbz.toLowerCase() : 2 == nyxz.f[1] && (ndbz = ndbz.toUpperCase()), 0 < nyxz.f[0].length ? nyxz.f[0] : 0 < nyxz.f[2] ? ndbz.substring(0, nyxz.f[2] + 1) : ndbz
}
}
/* ndbotz */
const headers = {
'Accept': '*/*',
'Accept-Language': 'id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'Origin': 'https://ytmp3.gs',
'Pragma': 'no-cache',
'Referer': 'https://ytmp3.gs/',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'cross-site',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.3',
'sec-ch-ua': '"Not-A.Brand";v="99", "Chromium";v="124"',
'sec-ch-ua-mobile': '?1',
'sec-ch-ua-platform': '"Windows"'
};
const yt = /^((?:https?:)?\/\/)?((?:www|m|music)\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(?:embed\/)?(?:v\/)?(?:shorts\/)?([a-zA-Z0-9_-]{11})/;
/* ndbotz */
async function ytdl(url, type = 'mp3') {
if (!yt.test(url)) {
throw new Error('Link ga valid kak');
};
/* ndbotz */
if (!['mp3', 'mp4'].includes(type)) {
throw new Error('Type ga valid kak');
};
try {
const vidId = url.match(yt)[3];
const webb = await axios.get('https://ytmp3.cc/Vluk/', { headers });
/* ndbotz */
const tokenJson = JSON.parse(atob(webb.data?.match(/atob\('(.*?)'\)/)?.[1]).match(/var gC = ({[\s\S]*?});/)?.[1]);
const token = btoa(tokenJson[2] + "-" + tokenizer(tokenJson, tokenJson.f[6]))
const init = await axios.get(`https://d.ecoe.cc/api/v1/init?k=${token}&_=${Math.random()}`, { headers }).then(x => x.data);
const convert = await axios.get(`${init.convertURL}&v=https://www.youtube.com/watch?v=${vidId}&f=${type}&_=${Math.random()}`, { headers }).then(x => x.data);
if (convert.redirectURL) {
const res = await axios.get(convert.redirectURL, { headers }).then(x => x.data);
return {
type,
title: res.title,
link: res.downloadURL
};
} else {/* uziproject */
let res, retry = 0;
do {
if (retry > 50) throw 'Timeout';
res = await axios.get(convert.progressURL, { headers }).then(x => x.data);
await new Promise(rv => setTimeout(rv, 1000));
retry++
} while (res.progress < 3);
return {
type,
title: res.title,
link: convert.downloadURL
};
};
} catch(e) {
let err = new Error(`Eror bang, nanti aja download nya, nih log eror nya: ${e.message}`); err.error = e;
throw err
}
}
module.exports = ytdl