UNPKG

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

130 lines (123 loc) 4.96 kB
const SpotifyExtractor = require('./bin/Spotify-Resolver'); const QueryResolver = require('./bin/Query-Resolver'); const SoundCloudExtractor = require('./bin/SoundCloud-Resolver'); const { YoutubeData, YoutubeStreamOptions, } = require('../typings/instances-commonjs'); const FacebookResolver = require('./bin/Facebook-Resolver'); const ReverbnationResolver = require('./bin/Reverbnation-Resolver'); const { HumanTimeConversion } = require('./bin/Track-Extractor'); const { GetLyrics } = require('./bin/Lyrics-Extractor'); /** * @function Extractor play-dl Extractor for Music Players Node.jsv16 * @param {String} Query Query for Searching Data as Tracks , Playlist or albums * @param {Object<YoutubeStreamOptions>} YoutubeStreamOptions Youtube Stream Options for play-dl * @returns {Promise<YoutubeData>} play-dlTracks */ async function Extractor( Query, YoutubeStreamOptions = { Limit: 1, Quality: undefined, UserAgents: undefined, Cookies: undefined, IgnoreError: false, } || undefined, ) { const SpotifyUrlRegex = /^(?:spotify:|(?:https?:\/\/(?:open|play)\.spotify\.com\/))(?:embed)?\/?(album|track|playlist|episode|show)(?::|\/)((?:[0-9a-zA-Z]){22})/; const SoundCloundUrlRegex = /^(?:(https?):\/\/)?(?:(?:www|m)\.)?(soundcloud\.com|snd\.sc|soundcloud\.app\.goo\.gl)\/(.*)$/; const FacebookVideoUrlRegex = /(?:https?:\/{2})?(?:w{3}\.)?(facebook|fb).com\/.*\/videos\/.*/; if (!Query || (Query && typeof Query !== 'string')) throw TypeError('Query is invalid or is not String'); if (Query.match(SpotifyUrlRegex)) return Filteration(await SpotifyExtractor(Query, YoutubeStreamOptions)); if (Query.match(FacebookVideoUrlRegex)) return Filteration(await FacebookResolver(Query, YoutubeStreamOptions)); if (Query.match(SoundCloundUrlRegex)) { return Filteration( await SoundCloudExtractor.SoundCloudResolver( Query, Query.match(SoundCloundUrlRegex), YoutubeStreamOptions, ), ); } if (Query.toLowerCase().includes('www.reverbnation.com')) return Filteration(await ReverbnationResolver(Query, YoutubeStreamOptions)); return Filteration(await QueryResolver(Query, YoutubeStreamOptions)); } /** * @function StreamDownloader play-dl Stream Downloader for Music Players Node.jsv16 * @param {String} Query Query for Searching Data as Tracks , Playlist or albums * @param {Object<YoutubeStreamOptions>} YoutubeStreamOptions Youtube Stream Options for play-dl * @returns {Promise<YoutubeData>} play-dlTracks */ async function StreamDownloader( Query, YoutubeStreamOptions = { Limit: 1, Quality: undefined, UserAgents: undefined, Cookies: undefined, IgnoreError: false, } || undefined, ) { const SpotifyUrlRegex = /^(?:spotify:|(?:https?:\/\/(?:open|play)\.spotify\.com\/))(?:embed)?\/?(album|track|playlist|show|episode)(?::|\/)((?:[0-9a-zA-Z]){22})/; const SoundCloundUrlRegex = /^(?:(https?):\/\/)?(?:(?:www|m)\.)?(soundcloud\.com|snd\.sc|soundcloud\.app\.goo\.gl)\/(.*)$/; const FacebookVideoUrlRegex = /(?:https?:\/{2})?(?:w{3}\.)?(facebook|fb).com\/.*\/videos\/.*/; if (!Query || (Query && typeof Query !== 'string')) throw TypeError('Query is invalid or is not String'); if (Query.match(SpotifyUrlRegex)) { return Filteration( await SpotifyExtractor(Query, YoutubeStreamOptions, true), ); } if (Query.match(FacebookVideoUrlRegex)) { return Filteration( await FacebookResolver(Query, YoutubeStreamOptions, true), ); } if (Query.match(SoundCloundUrlRegex)) { return Filteration( await SoundCloudExtractor.SoundCloudResolver( Query, Query.match(SoundCloundUrlRegex), YoutubeStreamOptions, true, ), ); } if (Query.toLowerCase().includes('www.reverbnation.com')) { return Filteration( await ReverbnationResolver(Query, YoutubeStreamOptions, true), ); } return Filteration(await QueryResolver(Query, YoutubeStreamOptions, true)); } function Filteration(DataStructure) { DataStructure.tracks = Array.isArray(DataStructure.tracks) ? DataStructure.tracks : [DataStructure.tracks]; DataStructure.tracks = DataStructure.tracks.map((track) => { if (track && track.track) return track.track; return track; }); DataStructure.error = DataStructure && DataStructure.tracks && DataStructure.tracks[0] && DataStructure.tracks[0].error ? DataStructure.tracks.map((track) => { if (track.error) return track.error; return undefined; }) : DataStructure.error; if (DataStructure && DataStructure.tracks && DataStructure.tracks[0]) { DataStructure.tracks = DataStructure.tracks.filter(Boolean); DataStructure.error = DataStructure.error && DataStructure.error[0] ? DataStructure.error.filter(Boolean) : DataStructure.error; } return DataStructure; } module.exports = { Extractor, StreamDownloader, HumanTimeConversion, GetLyrics, };