ryu-js / lib /youtube /youtube.js
randydev's picture
Update lib/youtube/youtube.js
bfba9ef verified
raw
history blame
2.77 kB
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 "";
}
}