playdl-music-extractor
Version:
PlayDL Music Extractor is a Extractor/Scrapper and Helps Players to fetch data from play-dl or Custom Extractors , as Per reduces extra work and credentials
66 lines (61 loc) • 1.84 kB
JavaScript
const uriCheck = require('is-url');
class youtube {
static __youtubeRegex = [
/^(?:https?:\/\/)?(?:(?:www|m|music)\.)?(?:youtu\.be\/|youtube(?:-nocookie)?\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/,
/^.*(youtu.be\/|list=)([^#\&\?]*).*/,
];
static __youtubealbumRegex = [
/[?&]list=([^#\&\?]+)/,
/^.*(youtu.be\/|list=)([^#\&\?]*).*/,
];
static __test(rawUrl, returnRegexValue = false) {
try {
if (!(rawUrl && typeof rawUrl === 'string' && rawUrl !== '')) {
return false;
}
if (
returnRegexValue
&& Boolean(youtube.__youtubeRegex.find((regExp) => regExp.test(rawUrl)))
) {
return (
rawUrl?.match(
youtube.__youtubeRegex.find(
(regExp) => rawUrl.match(regExp)?.length > 2,
),
) ?? (!uriCheck(rawUrl) ? rawUrl : false)
);
}
return (
Boolean(youtube.__youtubeRegex.find((regExp) => regExp.test(rawUrl)))
|| !uriCheck(rawUrl)
);
} catch {
return false;
}
}
static async __extractor(rawQuery, __scrapperOptions, playdl, queue) {
try {
if (__scrapperOptions?.playersCompatibility && !uriCheck(rawQuery)) {
__scrapperOptions = {
...__scrapperOptions,
fetchOptions: { ...__scrapperOptions?.fetchOptions, fetchLimit: 1 },
};
}
const playdlEngine = require('./__playdlEngine');
await playdlEngine?.__rawExtractor(
rawQuery,
{ orignal_extractor: 'youtube' },
__scrapperOptions,
playdl,
queue,
);
return true;
} catch (rawError) {
if (__scrapperOptions?.ignoreInternalError) {
return void playdl.__errorHandling(rawError);
}
throw rawError;
}
}
}
module.exports = youtube;