diff --git a/README.md b/README.md index 8dc5043..a553813 100644 --- a/README.md +++ b/README.md @@ -1 +1,11 @@ -# spotify +# Spotify URL Parser + +This tool allows to quickly ~~scrape~~ *fetch* Spotify track, album, or playlist metadada based on the provided url. + +No Spotify API is required + +## Usage + +```bash +$ node index.js "" +``` diff --git a/index.js b/index.js index e42144a..c382b42 100644 --- a/index.js +++ b/index.js @@ -1,29 +1,32 @@ -const fetch = require('isomorphic-unfetch') -const Spotify = require("spotify-url-info") +import fetch from 'isomorphic-unfetch' +import Spotify from 'spotify-url-info' + const {getData, getPreview} = Spotify(fetch) +const spotifyRegex = /https?:\/\/(?:embed\.|open\.)(?:spotify\.com\/)(?:track\/|\?uri=spotify:track:)((\w|-)+)(?:(?=\?)(?:[?&]foo=(\d*)(?=[&#]|$)|(?![?&]foo=)[^#])+)?(?=#|$)/ +const spotifyPlaylistRegex = /https?:\/\/(?:embed\.|open\.)(?:spotify\.com\/)(?:(album|playlist)\/|\?uri=spotify:playlist:)((\w|-)+)(?:(?=\?)(?:[?&]foo=(\d*)(?=[&#]|$)|(?![?&]foo=)[^#])+)?(?=#|$)/ -let spotufy_regex = /https?:\/\/(?:embed\.|open\.)(?:spotify\.com\/)(?:track\/|\?uri=spotify:track:)((\w|-)+)(?:(?=\?)(?:[?&]foo=(\d*)(?=[&#]|$)|(?![?&]foo=)[^#])+)?(?=#|$)/ -let isUrl = false -let url = "" +const parse = async url => { + let isSpotifySong = spotifyRegex.test(url) + let isSpotifyPlaylist = spotifyPlaylistRegex.test(url) + + if (isSpotifySong === isSpotifyPlaylist) + return + + if (isSpotifyPlaylist) { + let spotifyResultData = await getData(url).catch(() => null) + if (!spotifyResultData || !['playlist', 'album'].includes(spotifyResultData.type)) + return + + for (const spotifyResult of spotifyResultData.trackList) { + console.log(`${spotifyResult.subtitle} - ${spotifyResult.title}`) + } -process.argv.forEach(val => { - if (isUrl) { - url = val + return } - if (val == "--url") { - isUrl = true - } -}) -let spotifyLink = spotufy_regex.test(url) -if (!spotifyLink) { - console.error("invalid url") - return + let spotifyResult = await getPreview(url) + console.log(`${spotifyResult.artist} - ${spotifyResult.title}`) } -const parser = async () => { - let spotifyResult = await getPreview(url) - console.log(spotifyResult.artist, " - ", spotifyResult.title) -} - -parser() +let url = process.argv[process.argv.length - 1] +parse(url) diff --git a/package-lock.json b/package-lock.json index 3cd79e8..336983c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "spotify", + "name": "spotify-parser", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "spotify", + "name": "spotify-parser", "version": "1.0.0", "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 493f31b..e6913c7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "spotify-parser", "version": "1.0.0", + "type": "module", "description": "parses provided spotify url to a query that can be searched in yt-dlp", "main": "index.js", "scripts": {