Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
jajbshjahavahh
GitHub Repository: jajbshjahavahh/Gojo-Satoru
Path: blob/master/lib/y2mate.js
2591 views
1
//═══════════════════════════════════════════════════════//
2
//If you want to recode, reupload
3
//or copy the codes/script,
4
//pls give credit
5
//no credit? i will take action immediately
6
//© 2022 Xeon Bot Inc. Cheems Bot MD
7
//Thank you to Lord Buddha, Family and Myself
8
//════════════════════════════//
9
let fetch = require('node-fetch')
10
let { JSDOM } = require('jsdom')
11
12
function post(url, formdata) {
13
return fetch(url, {
14
method: 'POST',
15
headers: {
16
accept: "*/*",
17
'accept-language': "en-US,en;q=0.9",
18
'content-type': "application/x-www-form-urlencoded; charset=UTF-8"
19
},
20
body: new URLSearchParams(Object.entries(formdata))
21
})
22
}
23
const ytIdRegex = /(?:youtube\.com\/\S*(?:(?:\/e(?:mbed))?\/|watch\?(?:\S*?&?v\=))|youtu\.be\/)([a-zA-Z0-9_-]{6,11})/
24
25
/**
26
* Download YouTube Video via y2mate
27
* @param {String} url YouTube Video URL
28
* @param {String} quality (avaiable: `144p`, `240p`, `360p`, `480p`, `720p`, `1080p`, `1440p`, `2160p`)
29
* @param {String} type (avaiable: `mp3`, `mp4`)
30
* @param {String} bitrate (avaiable for video: `144`, `240`, `360`, `480`, `720`, `1080`, `1440`, `2160`)
31
* (avaiable for audio: `128`)
32
* @param {String} server (avaiable: `id4`, `en60`, `en61`, `en68`)
33
*/
34
async function yt(url, quality, type, bitrate, server = 'en68') {
35
let ytId = ytIdRegex.exec(url)
36
url = 'https://youtu.be/' + ytId[1]
37
let res = await post(`https://www.y2mate.com/mates/${server}/analyze/ajax`, {
38
url,
39
q_auto: 0,
40
ajax: 1
41
})
42
let json = await res.json()
43
let { document } = (new JSDOM(json.result)).window
44
let tables = document.querySelectorAll('table')
45
let table = tables[{ mp4: 0, mp3: 1 }[type] || 0]
46
let list
47
switch (type) {
48
case 'mp4':
49
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]))
50
break
51
case 'mp3':
52
list = {
53
'128kbps': table.querySelector('td > a[href="#"]').parentElement.nextSibling.nextSibling.innerHTML
54
}
55
break
56
default:
57
list = {}
58
}
59
let filesize = list[quality]
60
let id = /var k__id = "(.*?)"/.exec(document.body.innerHTML) || ['', '']
61
let thumb = document.querySelector('img').src
62
let title = document.querySelector('b').innerHTML
63
let res2 = await post(`https://www.y2mate.com/mates/${server}/convert`, {
64
type: 'youtube',
65
_id: id[1],
66
v_id: ytId[1],
67
ajax: '1',
68
token: '',
69
ftype: type,
70
fquality: bitrate
71
})
72
let json2 = await res2.json()
73
let KB = parseFloat(filesize) * (1000 * /MB$/.test(filesize))
74
let resUrl = /<a.+?href="(.+?)"/.exec(json2.result)[1]
75
return {
76
dl_link: resUrl.replace(/https/g, 'http'),
77
thumb,
78
title,
79
filesizeF: filesize,
80
filesize: KB
81
}
82
}
83
84
module.exports = {
85
yt,
86
ytIdRegex,
87
/**
88
* Download YouTube Video as Audio via y2mate
89
* @param {String} url YouTube Video URL
90
* @param {String} server (avaiable: `id4`, `en60`, `en61`, `en68`)
91
*/
92
yta(url, resol = '128kbps', server = 'en154') { return yt(url, resol, 'mp3', resol.endsWith('kbps') ? resol.replace(/kbps/g, '') : resol, server) },
93
/**
94
* Download YouTube Video as Video via y2mate
95
* @param {String} url YouTube Video URL
96
* @param {String} server (avaiable: `id4`, `en60`, `en61`, `en68`)
97
*/
98
ytv(url, resol = '360p', server = 'en154') { return yt(url, resol, 'mp4', resol.endsWith('p') ? resol.replace(/p/g, '') : resol, server) },
99
servers: ['en136', 'id4', 'en60', 'en61', 'en68']
100
}
101
102