Path: blob/master/node_modules/@bochilteam/scraper/lib/cjs/social-media/youtube.js
1126 views
"use strict";1var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {2if (k2 === undefined) k2 = k;3var desc = Object.getOwnPropertyDescriptor(m, k);4if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {5desc = { enumerable: true, get: function() { return m[k]; } };6}7Object.defineProperty(o, k2, desc);8}) : (function(o, m, k, k2) {9if (k2 === undefined) k2 = k;10o[k2] = m[k];11}));12var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {13Object.defineProperty(o, "default", { enumerable: true, value: v });14}) : function(o, v) {15o["default"] = v;16});17var __importStar = (this && this.__importStar) || function (mod) {18if (mod && mod.__esModule) return mod;19var result = {};20if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);21__setModuleDefault(result, mod);22return result;23};24var __importDefault = (this && this.__importDefault) || function (mod) {25return (mod && mod.__esModule) ? mod : { "default": mod };26};27Object.defineProperty(exports, "__esModule", { value: true });28exports.youtubedlv3 = exports.youtubedlv2 = exports.youtubedl = void 0;29const cheerio_1 = __importDefault(require("cheerio"));30const got_1 = __importDefault(require("got"));31const utils_js_1 = require("../utils.js");32const human_readable_1 = require("human-readable");33const toFormat = (0, human_readable_1.sizeFormatter)({34std: 'JEDEC',35decimalPlaces: 2,36keepTrailingZeroes: false,37render: (literal, symbol) => `${literal} ${symbol}B`38});39// https://github.com/BochilGaming/games-wabot/blob/main/lib/y2mate.js40const servers = ['en163', 'id90', 'en172'];41async function youtubedl(url, server = 'en163') {42if (!servers.includes(server))43server = servers[0];44const params = {45url: url,46q_auto: 0,47ajax: 148};49const json = await got_1.default50.post(`https://www.y2mate.com/mates/${server}/analyze/ajax`, {51headers: {52'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',53cookie: '_ga=GA1.2.1405332118.1641699259; _gid=GA1.2.70284915.1642387108; _gat_gtag_UA_84863187_23=1',54origin: 'https://www.y2mate.com'55},56form: params57})58.json();59const $ = cheerio_1.default.load(json.result);60const id = (/var k__id = "(.*?)"/.exec($.html()) || ['', ''])[1];61const v_id = (/var k_data_vid = "(.*?)"/.exec($.html()) || ['', ''])[1];62const thumbnail = $('.video-thumbnail > img').attr('src');63const title = $('div.caption > b').text().trim();64const video = {};65const audio = {};66$('#mp4 > table > tbody > tr').each(function () {67var _a, _b, _c;68const el = $(this).find('td');69const _quality = el.eq(0).find('a').text();70const 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();71const fileSizeH = el.eq(1).text();72if (!/\.3gp/i.test(_quality)) {73video[quality] = {74quality,75fileSizeH,76fileSize: parseFloat(fileSizeH) * (/MB$/.test(fileSizeH) ? 1000 : 1),77download: convert.bind(null, id, v_id, 'mp4', quality.replace(/p/i, ''))78};79}80});81$('#mp3 > table > tbody > tr').each(function () {82var _a, _b, _c, _d;83const el = $(this).find('td');84const _quality = el.eq(0).find('a').text();85const quality = (_d = (_c = (_b = (_a = _quality86.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();87const fileSizeH = el.eq(1).text();88audio[quality] = {89quality,90fileSizeH,91fileSize: parseFloat(fileSizeH) * (/MB$/.test(fileSizeH) ? 1000 : 1),92download: convert.bind(null, id, v_id, 'mp3', quality.replace(/kbps/i, ''))93};94});95return {96id,97v_id,98thumbnail,99title,100video,101audio102};103}104exports.youtubedl = youtubedl;105async function youtubedlv2(url) {106const html = await (0, got_1.default)('https://yt5s.com/en32').text();107const urlAjax = (/k_url_search="(.*?)"/.exec(html) || ['', ''])[1];108const urlConvert = (/k_url_convert="(.*?)"/.exec(html) || ['', ''])[1];109const params = {110q: url,111vt: 'home'112};113const json = await (0, got_1.default)(urlAjax, {114method: 'POST',115headers: {116'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',117cookie: '__cflb=04dToSoFRg9oqH9pYF2En9gKJK4fe8D9TcYtUD6tYu; _ga=GA1.2.1350132744.1641709803; _gid=GA1.2.1492233267.1641709803; _gat_gtag_UA_122831834_4=1',118origin: 'https://yt5s.com',119'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'120},121searchParams: new URLSearchParams(Object.entries(params))122}).json();123const video = {};124Object.values(json.links.mp4).forEach(({ k, size }) => {125video[k] = {126quality: k,127fileSizeH: size,128fileSize: parseFloat(size) * (/MB$/.test(size) ? 1000 : 1),129// @ts-ignore130download: convertv2.bind(null, urlConvert, json.vid, 'mp4', k, json.token, parseInt(json.timeExpires), json.fn)131};132});133const audio = {};134Object.values(json.links.mp3).forEach(({ key, size }) => {135audio[key] = {136quality: key,137fileSizeH: size,138fileSize: parseFloat(size) * (/MB$/.test(size) ? 1000 : 1),139// @ts-ignore140download: convertv2.bind(null, urlConvert, json.vid, 'mp3', key.replace(/kbps/i, ''), json.token, parseInt(json.timeExpires), json.fn)141};142});143return {144id: json.vid,145title: json.title,146thumbnail: `https://i.ytimg.com/vi/${json.vid}/0.jpg`,147video,148audio149};150}151exports.youtubedlv2 = youtubedlv2;152async function youtubedlv3(url) {153const payload = {154url155};156const { id, meta: { title }, thumb, url: results } = await got_1.default.post('https://api.onlinevideoconverter.pro/api/convert', {157headers: {158accept: 'application/json, text/plain, */*',159'accept-encoding': 'gzip, deflate, br',160'accept-language': 'en-US,en;q=0.9',161'content-type': 'application/json',162origin: 'https://onlinevideoconverter.pro',163referer: 'https://onlinevideoconverter.pro/',164'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'165},166body: JSON.stringify(payload)167}).json();168const video = {};169const audioArray = {};170results.forEach(({ url, info_url, attr, quality, audio, no_audio, filesize, ext }) => {171if (!no_audio && ext === 'mp4') {172video[quality] = {173quality,174fileSizeH: (filesize && toFormat(filesize)) || undefined,175fileSize: filesize,176download: async () => (url || info_url)177};178}179if (audio && !no_audio) {180audioArray[quality] = {181quality,182fileSizeH: (filesize && toFormat(filesize)) || undefined,183fileSize: filesize,184download: async () => (url || info_url)185};186}187});188return {189id,190title,191thumbnail: thumb,192video,193audio: audioArray194};195}196exports.youtubedlv3 = youtubedlv3;197async function convert(_id, v_id, ftype, fquality) {198const params = {199type: 'youtube',200_id,201v_id,202ajax: '1',203token: '',204ftype,205fquality206};207const json = await (0, got_1.default)('https://www.y2mate.com/mates/convert', {208method: 'POST',209headers: {210'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',211cookie: '_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',212'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'213},214form: params215}).json();216const $ = cheerio_1.default.load(json.result);217const link = $('a[href]').attr('href');218if (link === 'https://app.y2mate.com/download')219throw new utils_js_1.ScraperError(JSON.stringify({ link, json: json }, null, 2));220return link;221}222function convertv2(url, v_id, ftype, fquality, token, timeExpire, fname) {223return new Promise(async (resolve, reject) => {224const params = {225v_id,226ftype,227fquality,228token,229timeExpire,230client: 'yt5s.com'231};232const resServer = await (0, got_1.default)(url, {233method: 'POST',234headers: {235'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',236origin: 'https://yt5s.com',237referer: 'https://yt5s.com/',238'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',239'X-Requested-Key': 'de0cfuirtgf67a'240},241form: params242}).json();243const server = resServer.c_server;244if (!server && ftype === 'mp3')245return resolve(server || resServer.d_url || '');246const payload = {247v_id,248ftype,249fquality,250fname,251token,252timeExpire253};254const results = await (0, got_1.default)(`${server}/api/json/convert`, {255method: 'POST',256form: payload257}).json();258if (results.statusCode === 200)259return resolve(results.result);260else if (results.statusCode === 300) {261try {262// @ts-ignore263const WebSocket = (await Promise.resolve().then(() => __importStar(require('ws')))).default;264const Url = new URL(server);265const WSUrl = `${/https/i.test(Url.protocol) ? 'wss:' : 'ws:'}//${Url.host}/sub/${results.jobId}?fname=yt5s.com`;266const ws = new WebSocket(WSUrl, undefined, {267headers: {268'Accept-Encoding': 'gzip, deflate, br',269Host: Url.host,270Origin: 'https://yt5s.com',271'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits',272'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'273}274});275ws.on('message', function incoming(message) {276const msg = JSON.parse(message.toString());277if (msg.action === 'success') {278try {279ws.close();280}281catch (e) {282console.error(e);283}284ws.removeAllListeners('message');285return resolve(msg.url);286}287else if (msg.action === 'error')288return reject(msg);289});290}291catch (e) {292console.error(e);293return reject(e);294}295}296else297return reject(results);298});299}300//# sourceMappingURL=youtube.js.map301302