Skip to content

Download Spotify playlists by searching for audio files on YouTube

License

Notifications You must be signed in to change notification settings

regisb/spotify-onthego

Repository files navigation

Spotify On The Go

Download songs and playlist from Spotify. The tracks are downloaded from YouTube videos and converted as mp3 files.

Install

pip install spotify-onthego

Note that you will need valid Spotify app credentials. If you don't have a valid client ID/secret pair of keys, you can create a Spotify app here.

Once you have created a Spotify app, you will also have to add a redirect URI for this app ("Add URI").

After the first run of the CLI tool, the authentication token and credentials will be stored in a local configuration file.

Requirements

If you wish to convert the downloaded files to mp3 format, you will need to install ffmpeg or avconv.

On Debian/Ubuntu:

sudo apt-get install ffmpeg

On Mac OS, just follow the instructions from the official ffmpeg website.

Usage

$ spotify-playlist -h
usage: spotify-playlist [-h] [-i] [-S] [-a {webm,ogg,m4a}] [-C] playlist dst

Download the tracks of a Spotify playlist from YouTube

positional arguments:
  playlist              Name of playlist. E.g: 'Road music'
  dst                   Destination directory

optional arguments:
  -h, --help            show this help message and exit
  -i, --interactive     Interactively select the song to download from
                        Youtube.
  -S, --no-skip         Don't skip files that were already downloaded.
  -a {webm,ogg,m4a}, --audio {webm,ogg,m4a}
                        Preferred audio format to download. By default, the
                        best quality audio format will be downloaded. On some
                        platforms (e.g: Debian Wheezy), the default ffmpeg
                        utility does not support audio conversion from webm,
                        so you should specify a different value here. Note
                        that this audio file will eventually be converted to
                        mp3 (unless you specify --no-convert)
  -C, --no-convert      Don't convert audio files to mp3 format.
$ spotify-mymusic -h
usage: spotify-mymusic [-h] [-l LIMIT] [-i] [-S] [-a {webm,ogg,m4a}] [-C] dst

Download the songs from 'Your Music'

positional arguments:
  dst                   Destination directory

optional arguments:
  -h, --help            show this help message and exit
  -l LIMIT, --limit LIMIT
                        Limit to top N songs
  -i, --interactive     Interactively select the song to download from
                        Youtube.
  -S, --no-skip         Don't skip files that were already downloaded.
  -a {webm,ogg,m4a}, --audio {webm,ogg,m4a}
                        Preferred audio format to download. By default, the
                        best quality audio format will be downloaded. On some
                        platforms (e.g: Debian Wheezy), the default ffmpeg
                        utility does not support audio conversion from webm,
                        so you should specify a different value here. Note
                        that this audio file will eventually be converted to
                        mp3 (unless you specify --no-convert)
  -C, --no-convert      Don't convert audio files to mp3 format.

Download playlist

Download all songs from 'My Playlist' and save them as mp3:

spotify-playlist "My Playlist" ./music/myspotifyplaylist/

Create a cronjob to download your Discover Weekly playlist every monday at 7am:

0 7 * * 1 /home/username/venv/bin/spotify-playlist "Discover Weekly" /home/username/music/discoverweekly

Wildcards are supported, too:

spotify-playlist "Mixtape*" ./music/

Download favorite songs

Download your 30 most recent tracks from "My Music":

spotify-mymusic -l 30 ./music/mytracks/

Interactive mode

By default, spotify-onthego downloads the first match found on Youtube for the search "<song title> <artist name>" (song and artist separated by an empty space). If you want to manually select the Youtube result to download, run in interactive mode with the -i option:

$ spotify-mymusic -i mymusic/
++ Processing Porcupine Tree - Deadwing
[1] Porcupine Tree - DeadWing https://www.youtube.com/watch?v=GMEwM3YHiME
[2] Porcupine Tree - Deadwing https://www.youtube.com/watch?v=-Rwp-yvmcRM
[3] Porcupine Tree - Deadwing [Lyrics on Video] https://www.youtube.com/watch?v=dDepB1mwPhc
[4] Making of Deadwing https://www.youtube.com/watch?v=ZuYjGfaixDM
[5] Porcupine Tree- Mellotron Scratch https://www.youtube.com/watch?v=Ag2zXiiuF5Q
[6] Porcupine Tree - Shesmovedon (Deadwing ver.) https://www.youtube.com/watch?v=OtfJcTBklh8
[7] Porcupine Tree - Shallow (lyrics) https://www.youtube.com/watch?v=7_8UmXv5Xac
[8] Porcupine Tree - Arriving Somewhere But Not Here (lyrics on screen) https://www.youtube.com/watch?v=f2ROFnA4HRA
[9] Porcupine Tree - Deadwing (Lyrics) https://www.youtube.com/watch?v=tMMlEZCaQTY
[10] Deadwing- Porcupine Tree(Drum Cover) https://www.youtube.com/watch?v=Zb5KTnXGiNU
Select song to download (default: 1, next=n):

Of course, interactive mode should not be used in automated cron jobs.

Troubleshooting

In case of 401 error, this may be caused by a previous authorization token that did not have the right scope. Just remove the ~/.local/share/spotify-onthego/spotify.token file and start the command again.

If mp3 generation fails with an error message related to eyed3, check that your installed version of eyed3 is at least 0.8:

$ pip freeze | grep eyeD3
eyeD3==0.8

Development

See something that's not working for you, or something that you would like to be included? Just open a pull request with your code, or a Github issue where you describe the feature you would like to have.

To setup a development environment, install the dev requirements:

pip install -r requirements/dev.txt

Code should be black-formatted. To automatically format your code, run:

make format

Periodically run code lint and formatting tests with:

make test

License

This project is licensed under the GNU General Public License v3.0.

About

Download Spotify playlists by searching for audio files on YouTube

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •