|
import got from 'got'; |
|
import { |
|
ConvertResponseSchema, |
|
LinkItemSchema, |
|
YoutubedlResponseSchema, |
|
} from '../types/youtubedl-v1.js'; |
|
import { |
|
YoutubeDownloaderArgsSchema, |
|
YoutubedlSchema, |
|
} from '../types/youtube-v1.js'; |
|
import { DEFAULT_HEADERS } from '../constant.js'; |
|
import { parseFileSize } from './util.js'; |
|
|
|
export async function youtubedl(url, server) { |
|
YoutubeDownloaderArgsSchema.parse(arguments); |
|
|
|
const form = { |
|
k_query: url, |
|
k_page: 'home', |
|
hl: server || 'en', |
|
q_auto: 0 |
|
}; |
|
|
|
const data = await got.post('https://www.y2mate.com/mates/analyzeV2/ajax', { |
|
headers: { |
|
...DEFAULT_HEADERS, |
|
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', |
|
cookie: '_ga=GA1.1.1058493269.1720585210; _ga_PSRPB96YVC=GS1.1.1720585209.1.1.1720585486.0.0.0', |
|
origin: 'https://www.y2mate.com' |
|
}, |
|
form |
|
}).json(); |
|
|
|
const json = YoutubedlResponseSchema.parse(data); |
|
const video = {}; |
|
const audio = {}; |
|
const other = {}; |
|
|
|
for (const key in json.links) { |
|
for (const tag in json.links[key]) { |
|
const data = json.links[key][tag]; |
|
const quality = data.q; |
|
const type = data.f; |
|
const fileSizeH = data.size; |
|
const fileSize = parseFileSize(fileSizeH); |
|
(type === 'mp4' ? video : type === 'mp3' ? audio : other)[quality.toLowerCase()] = { |
|
quality, |
|
type, |
|
fileSizeH, |
|
fileSize, |
|
download: convert.bind(convert, json.vid, data.k) |
|
}; |
|
} |
|
} |
|
|
|
const result = { |
|
id: json.vid, |
|
thumbnail: `https://i.ytimg.com/vi/${json.vid}/0.jpg`, |
|
title: json.title, |
|
duration: json.t, |
|
video, |
|
audio, |
|
other |
|
}; |
|
console.log(result); |
|
return YoutubedlSchema.parse(result); |
|
} |
|
|
|
export async function convert(vid, k) { |
|
const form = { |
|
vid, |
|
k |
|
}; |
|
try { |
|
const data = await got.post('https://www.y2mate.com/mates/convertV2/index', { |
|
headers: { |
|
...DEFAULT_HEADERS, |
|
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', |
|
cookie: '_ga=GA1.1.1058493269.1720585210; _ga_PSRPB96YVC=GS1.1.1720585209.1.1.1720585486.0.0.0', |
|
origin: 'https://www.y2mate.com' |
|
}, |
|
form |
|
}).json(); |
|
|
|
const json = ConvertResponseSchema.parse(data); |
|
if (!json.dlink) { |
|
throw new Error("Download link is missing"); |
|
} |
|
return json.dlink; |
|
} catch (error) { |
|
console.error("Error in convert function:", error); |
|
return ""; |
|
} |
|
} |