Path: blob/master/node_modules/@bochilteam/scraper/lib/esm/social-media/youtube.js
1126 views
import cheerio from 'cheerio';1import got from 'got';2import { ScraperError } from '../utils.js';3import { sizeFormatter } from 'human-readable';4const toFormat = sizeFormatter({5std: 'JEDEC',6decimalPlaces: 2,7keepTrailingZeroes: false,8render: (literal, symbol) => `${literal} ${symbol}B`9});10// https://github.com/BochilGaming/games-wabot/blob/main/lib/y2mate.js11const servers = ['en163', 'id90', 'en172'];12export async function youtubedl(url, server = 'en163') {13if (!servers.includes(server))14server = servers[0];15const params = {16url: url,17q_auto: 0,18ajax: 119};20const json = await got21.post(`https://www.y2mate.com/mates/${server}/analyze/ajax`, {22headers: {23'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',24cookie: '_ga=GA1.2.1405332118.1641699259; _gid=GA1.2.70284915.1642387108; _gat_gtag_UA_84863187_23=1',25origin: 'https://www.y2mate.com'26},27form: params28})29.json();30const $ = cheerio.load(json.result);31const id = (/var k__id = "(.*?)"/.exec($.html()) || ['', ''])[1];32const v_id = (/var k_data_vid = "(.*?)"/.exec($.html()) || ['', ''])[1];33const thumbnail = $('.video-thumbnail > img').attr('src');34const title = $('div.caption > b').text().trim();35const video = {};36const audio = {};37$('#mp4 > table > tbody > tr').each(function () {38var _a, _b, _c;39const el = $(this).find('td');40const _quality = el.eq(0).find('a').text();41const quality = (_c = (_b = (_a = _quality.split('(')) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.trim()) === null || _c === void 0 ? void 0 : _c.toLowerCase();42const fileSizeH = el.eq(1).text();43if (!/\.3gp/i.test(_quality)) {44video[quality] = {45quality,46fileSizeH,47fileSize: parseFloat(fileSizeH) * (/MB$/.test(fileSizeH) ? 1000 : 1),48download: convert.bind(null, id, v_id, 'mp4', quality.replace(/p/i, ''))49};50}51});52$('#mp3 > table > tbody > tr').each(function () {53var _a, _b, _c, _d;54const el = $(this).find('td');55const _quality = el.eq(0).find('a').text();56const quality = (_d = (_c = (_b = (_a = _quality57.split('(')) === null || _a === void 0 ? void 0 : _a[1]) === null || _b === void 0 ? void 0 : _b.replace(')', '')) === null || _c === void 0 ? void 0 : _c.trim()) === null || _d === void 0 ? void 0 : _d.toLowerCase();58const fileSizeH = el.eq(1).text();59audio[quality] = {60quality,61fileSizeH,62fileSize: parseFloat(fileSizeH) * (/MB$/.test(fileSizeH) ? 1000 : 1),63download: convert.bind(null, id, v_id, 'mp3', quality.replace(/kbps/i, ''))64};65});66return {67id,68v_id,69thumbnail,70title,71video,72audio73};74}75export async function youtubedlv2(url) {76const html = await got('https://yt5s.com/en32').text();77const urlAjax = (/k_url_search="(.*?)"/.exec(html) || ['', ''])[1];78const urlConvert = (/k_url_convert="(.*?)"/.exec(html) || ['', ''])[1];79const params = {80q: url,81vt: 'home'82};83const json = await got(urlAjax, {84method: 'POST',85headers: {86'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',87cookie: '__cflb=04dToSoFRg9oqH9pYF2En9gKJK4fe8D9TcYtUD6tYu; _ga=GA1.2.1350132744.1641709803; _gid=GA1.2.1492233267.1641709803; _gat_gtag_UA_122831834_4=1',88origin: 'https://yt5s.com',89'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'90},91searchParams: new URLSearchParams(Object.entries(params))92}).json();93const video = {};94Object.values(json.links.mp4).forEach(({ k, size }) => {95video[k] = {96quality: k,97fileSizeH: size,98fileSize: parseFloat(size) * (/MB$/.test(size) ? 1000 : 1),99// @ts-ignore100download: convertv2.bind(null, urlConvert, json.vid, 'mp4', k, json.token, parseInt(json.timeExpires), json.fn)101};102});103const audio = {};104Object.values(json.links.mp3).forEach(({ key, size }) => {105audio[key] = {106quality: key,107fileSizeH: size,108fileSize: parseFloat(size) * (/MB$/.test(size) ? 1000 : 1),109// @ts-ignore110download: convertv2.bind(null, urlConvert, json.vid, 'mp3', key.replace(/kbps/i, ''), json.token, parseInt(json.timeExpires), json.fn)111};112});113return {114id: json.vid,115title: json.title,116thumbnail: `https://i.ytimg.com/vi/${json.vid}/0.jpg`,117video,118audio119};120}121export async function youtubedlv3(url) {122const payload = {123url124};125const { id, meta: { title }, thumb, url: results } = await got.post('https://api.onlinevideoconverter.pro/api/convert', {126headers: {127accept: 'application/json, text/plain, */*',128'accept-encoding': 'gzip, deflate, br',129'accept-language': 'en-US,en;q=0.9',130'content-type': 'application/json',131origin: 'https://onlinevideoconverter.pro',132referer: 'https://onlinevideoconverter.pro/',133'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'134},135body: JSON.stringify(payload)136}).json();137const video = {};138const audioArray = {};139results.forEach(({ url, info_url, attr, quality, audio, no_audio, filesize, ext }) => {140if (!no_audio && ext === 'mp4') {141video[quality] = {142quality,143fileSizeH: (filesize && toFormat(filesize)) || undefined,144fileSize: filesize,145download: async () => (url || info_url)146};147}148if (audio && !no_audio) {149audioArray[quality] = {150quality,151fileSizeH: (filesize && toFormat(filesize)) || undefined,152fileSize: filesize,153download: async () => (url || info_url)154};155}156});157return {158id,159title,160thumbnail: thumb,161video,162audio: audioArray163};164}165async function convert(_id, v_id, ftype, fquality) {166const params = {167type: 'youtube',168_id,169v_id,170ajax: '1',171token: '',172ftype,173fquality174};175const json = await got('https://www.y2mate.com/mates/convert', {176method: 'POST',177headers: {178'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',179cookie: '_ga=GA1.2.1405332118.1641699259; _gid=GA1.2.1117783105.1641699259; MarketGidStorage=%7B%220%22%3A%7B%7D%2C%22C702514%22%3A%7B%22page%22%3A2%2C%22time%22%3A1641701743540%7D%7D; _PN_SBSCRBR_FALLBACK_DENIED=1641701744162',180'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'181},182form: params183}).json();184const $ = cheerio.load(json.result);185const link = $('a[href]').attr('href');186if (link === 'https://app.y2mate.com/download')187throw new ScraperError(JSON.stringify({ link, json: json }, null, 2));188return link;189}190function convertv2(url, v_id, ftype, fquality, token, timeExpire, fname) {191return new Promise(async (resolve, reject) => {192const params = {193v_id,194ftype,195fquality,196token,197timeExpire,198client: 'yt5s.com'199};200const resServer = await got(url, {201method: 'POST',202headers: {203'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',204origin: 'https://yt5s.com',205referer: 'https://yt5s.com/',206'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36',207'X-Requested-Key': 'de0cfuirtgf67a'208},209form: params210}).json();211const server = resServer.c_server;212if (!server && ftype === 'mp3')213return resolve(server || resServer.d_url || '');214const payload = {215v_id,216ftype,217fquality,218fname,219token,220timeExpire221};222const results = await got(`${server}/api/json/convert`, {223method: 'POST',224form: payload225}).json();226if (results.statusCode === 200)227return resolve(results.result);228else if (results.statusCode === 300) {229try {230// @ts-ignore231const WebSocket = (await import('ws')).default;232const Url = new URL(server);233const WSUrl = `${/https/i.test(Url.protocol) ? 'wss:' : 'ws:'}//${Url.host}/sub/${results.jobId}?fname=yt5s.com`;234const ws = new WebSocket(WSUrl, undefined, {235headers: {236'Accept-Encoding': 'gzip, deflate, br',237Host: Url.host,238Origin: 'https://yt5s.com',239'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits',240'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'241}242});243ws.on('message', function incoming(message) {244const msg = JSON.parse(message.toString());245if (msg.action === 'success') {246try {247ws.close();248}249catch (e) {250console.error(e);251}252ws.removeAllListeners('message');253return resolve(msg.url);254}255else if (msg.action === 'error')256return reject(msg);257});258}259catch (e) {260console.error(e);261return reject(e);262}263}264else265return reject(results);266});267}268//# sourceMappingURL=youtube.js.map269270