https://github.com/regisb/spotify-onthego
Download Spotify playlists by searching for audio files on YouTube
https://github.com/regisb/spotify-onthego
download music offline spotify youtube
Last synced: about 1 year ago
JSON representation
Download Spotify playlists by searching for audio files on YouTube
- Host: GitHub
- URL: https://github.com/regisb/spotify-onthego
- Owner: regisb
- License: gpl-3.0
- Created: 2014-11-28T17:47:13.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2024-09-12T06:11:34.000Z (almost 2 years ago)
- Last Synced: 2025-03-31T09:41:11.147Z (over 1 year ago)
- Topics: download, music, offline, spotify, youtube
- Language: Python
- Size: 94.7 KB
- Stars: 71
- Watchers: 8
- Forks: 6
- Open Issues: 4
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG.md
- License: LICENSE.txt
Awesome Lists containing this project
README
-----------------
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 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
:code:`~/.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 `_.