Skip to content

Commit

Permalink
💫 𝑆𝐼𝑀𝑃𝐿𝐸 - 𝐵𝑂𝑇 💫
Browse files Browse the repository at this point in the history
  • Loading branch information
BrunoSobrino authored Mar 21, 2023
1 parent a32c452 commit e424c58
Showing 1 changed file with 72 additions and 72 deletions.
144 changes: 72 additions & 72 deletions lib/y2mate.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@ let fetch = require('node-fetch')
let { JSDOM } = require('jsdom')

function post(url, formdata) {
return fetch(url, {
method: 'POST',
headers: {
accept: "*/*",
'accept-language': "en-US,en;q=0.9",
'content-type': "application/x-www-form-urlencoded; charset=UTF-8"
},
body: new URLSearchParams(Object.entries(formdata))
})
return fetch(url, {
method: 'POST',
headers: {
accept: "*/*",
'accept-language': "en-US,en;q=0.9",
'content-type': "application/x-www-form-urlencoded; charset=UTF-8"
},
body: new URLSearchParams(Object.entries(formdata))
})
}
const ytIdRegex = /(?:http(?:s|):\/\/|)(?:(?:www\.|)youtube(?:\-nocookie|)\.com\/(?:shorts\/)?(?:watch\?.*(?:|\&)v=|embed\/|v\/)|youtu\.be\/)([-_0-9A-Za-z]{11})/
const ytIdRegex = /(?:youtube\.com\/\S*(?:(?:\/e(?:mbed))?\/|watch\?(?:\S*?&?v\=))|youtu\.be\/)([a-zA-Z0-9_-]{6,11})/

/**
* Download YouTube Video via y2mate
Expand All @@ -24,69 +24,69 @@ const ytIdRegex = /(?:http(?:s|):\/\/|)(?:(?:www\.|)youtube(?:\-nocookie|)\.com\
* @param {String} server (avaiable: `id4`, `en60`, `en61`, `en68`)
*/
async function yt(url, quality, type, bitrate, server = 'en68') {
if (!ytIdRegex.test(url)) throw 'Invalid URL'
let ytId = ytIdRegex.exec(url)
url = 'https://youtu.be/' + ytId[1]
let res = await post(`https://www.y2mate.com/mates/${server}/analyze/ajax`, {
url,
q_auto: 0,
ajax: 1
})
let json = await res.json()
let { document } = (new JSDOM(json.result)).window
let tables = document.querySelectorAll('table')
let table = tables[{ mp4: 0, mp3: 1 }[type] || 0]
let list
switch (type) {
case 'mp4':
list = Object.fromEntries([...table.querySelectorAll('td > a[href="#"]')].filter(v => !/\.3gp/.test(v.innerHTML)).map(v => [v.innerHTML.match(/.*?(?=\()/)[0].trim(), v.parentElement.nextSibling.nextSibling.innerHTML]))
break
case 'mp3':
list = {
'128kbps': table.querySelector('td > a[href="#"]').parentElement.nextSibling.nextSibling.innerHTML
}
break
default:
list = {}
}
let filesize = list[quality]
let id = /var k__id = "(.*?)"/.exec(document.body.innerHTML) || ['', '']
let thumb = document.querySelector('img').src
let title = document.querySelector('b').innerHTML
let res2 = await post(`https://www.y2mate.com/mates/${server}/convert`, {
type: 'youtube',
_id: id[1],
v_id: ytId[1],
ajax: '1',
token: '',
ftype: type,
fquality: bitrate
})
let json2 = await res2.json()
let KB = parseFloat(filesize) * (1000 * /MB$/.test(filesize))
return {
dl_link: /<a.+?href="(.+?)"/.exec(json2.result)[1],
thumb,
title,
filesizeF: filesize,
filesize: KB
}
let ytId = ytIdRegex.exec(url)
url = 'https://youtu.be/' + ytId[1]
let res = await post(`https://www.y2mate.com/mates/${server}/analyze/ajax`, {
url,
q_auto: 0,
ajax: 1
})
let json = await res.json()
let { document } = (new JSDOM(json.result)).window
let tables = document.querySelectorAll('table')
let table = tables[{ mp4: 0, mp3: 1 }[type] || 0]
let list
switch (type) {
case 'mp4':
list = Object.fromEntries([...table.querySelectorAll('td > a[href="#"]')].filter(v => !/\.3gp/.test(v.innerHTML)).map(v => [v.innerHTML.match(/.*?(?=\()/)[0].trim(), v.parentElement.nextSibling.nextSibling.innerHTML]))
break
case 'mp3':
list = {
'128kbps': table.querySelector('td > a[href="#"]').parentElement.nextSibling.nextSibling.innerHTML
}
break
default:
list = {}
}
let filesize = list[quality]
let id = /var k__id = "(.*?)"/.exec(document.body.innerHTML) || ['', '']
let thumb = document.querySelector('img').src
let title = document.querySelector('b').innerHTML
let res2 = await post(`https://www.y2mate.com/mates/${server}/convert`, {
type: 'youtube',
_id: id[1],
v_id: ytId[1],
ajax: '1',
token: '',
ftype: type,
fquality: bitrate
})
let json2 = await res2.json()
let KB = parseFloat(filesize) * (1000 * /MB$/.test(filesize))
let resUrl = /<a.+?href="(.+?)"/.exec(json2.result)[1]
return {
dl_link: resUrl.replace(/https/g, 'http'),
thumb,
title,
filesizeF: filesize,
filesize: KB
}
}

module.exports = {
yt,
ytIdRegex,
/**
* Download YouTube Video as Audio via y2mate
* @param {String} url YouTube Video URL
* @param {String} server (avaiable: `id4`, `en60`, `en61`, `en68`)
*/
yta(url, server = 'en68') { return yt(url, '128kbps', 'mp3', '128', server) },
/**
* Download YouTube Video as Video via y2mate
* @param {String} url YouTube Video URL
* @param {String} server (avaiable: `id4`, `en60`, `en61`, `en68`)
*/
ytv(url, server = 'en68') { return yt(url, '360p', 'mp4', '360', server) },
servers: ['id4', 'en60', 'en61', 'en68']
yt,
ytIdRegex,
/**
* Download YouTube Video as Audio via y2mate
* @param {String} url YouTube Video URL
* @param {String} server (avaiable: `id4`, `en60`, `en61`, `en68`)
*/
yta(url, resol = '128kbps', server = 'en154') { return yt(url, resol, 'mp3', resol.endsWith('kbps') ? resol.replace(/kbps/g, '') : resol, server) },
/**
* Download YouTube Video as Video via y2mate
* @param {String} url YouTube Video URL
* @param {String} server (avaiable: `id4`, `en60`, `en61`, `en68`)
*/
ytv(url, resol = '360p', server = 'en154') { return yt(url, resol, 'mp4', resol.endsWith('p') ? resol.replace(/p/g, '') : resol, server) },
servers: ['en136', 'id4', 'en60', 'en61', 'en68']
}

0 comments on commit e424c58

Please sign in to comment.