Giter VIP home page Giter VIP logo

spotify-ripper's Introduction

spotify-ripper Version

A fork of spotify-ripper that uses pyspotify v2.x

Spotify-ripper is a small ripper script for Spotify that rips Spotify URIs to audio files and includes ID3 tags and cover art. By default spotify-ripper will encode to MP3 files, but includes the ability to rip to WAV, FLAC, Ogg Vorbis, Opus, AAC, and MP4/M4A.

Note that stream ripping violates the libspotify's ToS

Libspotify’s Deprecation

From Mopidy's documentation

Note that as of May 2015 libspotify is officially deprecated by Spotify and is no longer actively maintained.

Note that as of Jan 2016 Spotify may no longer be issuing developer keys.

Spotify has published newer libraries intended for Android and iOS development, as well as web APIs to access track metadata and manage playlists. Though, for making apps with Spotify playback capabilities, on any other platform than Android and iOS, there is currently no alternative to libspotify.

libspotify has been the main way of integrating with Spotify since 2009, and is today a part of numerous open source projects and commercial applications, including many receivers and even cars. There’s no guarantees, but one can hope that the large deployment of libspotify means that the library will continue to work with the Spotify service for a long time into the future.

Features

  • real-time VBR or CBR ripping from Spotify PCM stream
  • writes ID3v2/metadata tags (including album covers)
  • rips files into the following directory structure: artist/album/artist - song.mp3 by default or optionally into a user-specified structure (see Format String section below)
  • option to skip or overwrite existing files
  • accepts tracks, playlists, albums, and artist URIs
  • search for tracks using Spotify queries
  • options for interactive login (no password in shell history) and to relogin using previous credentials
  • option to remove tracks from playlist after successful ripping
  • globally installs ripper script using setup.py
  • Python 2.7.x and 3.4.x compatible. Python 3 will occasionally throw a NameError: name '_lock' is not defined exception at the end of the script due to an upstream bug in pyspotify.
  • use a config file to specify common command-line options
  • helpful progress bar to gauge the time remaining until completion
  • keep local files in sync with a Spotify playlist, m3u and wpl playlist file
  • option to rip to ALAC, a loseless codec, instead of MP3 (requires extra avconv dependency)
  • option to rip to FLAC, a loseless codec, instead of MP3 (requires extra flac dependency)
  • option to rip to Ogg Vorbis instead of MP3 (requires extra vorbis-tools dependency)
  • option to rip to Opus instead of MP3 (requires extra opus-tools dependency)
  • option to rip to AAC instead of MP3 (requires extra faac dependency)
  • option to rip to MP4/M4A instead of MP3 (requires compiling fdkaac)
  • option to replace output filenames
  • option to normalize output filenames to NFKD (see http://unicode.org/faq/normalization.html)

Please note: Spotify’s highest quality setting is 320 kbps, so the benefit of ripping to a lossless format is to not double encode the audio data. It’s not possible to rip in true lossless quality.

Usage

Command Line

spotify-ripper takes many command-line options

usage: spotify-ripper [-h] [-S SETTINGS] [-a] [--aac] [--alac]
                      [--artist-album-type ARTIST_ALBUM_TYPE]
                      [--artist-album-market ARTIST_ALBUM_MARKET] [-A]
                      [-b BITRATE] [-c] [--comp COMP] [--comment COMMENT]
                      [--cover-file COVER_FILE]
                      [--cover-file-and-embed COVER_FILE] [-d DIRECTORY]
                      [--fail-log FAIL_LOG] [--flac] [-f FORMAT]
                      [--format-case {upper,lower,capitalize}] [--flat]
                      [--flat-with-index] [-g {artist,album}]
                      [--grouping GROUPING] [--id3-v23] [-k KEY] [-u USER]
                      [-p PASSWORD] [-l] [-L LOG] [--pcm] [--mp4]
                      [--normalize] [-na] [-o] [--opus]
                      [--partial-check {none,weak,strict}]
                      [--play-token-resume RESUME_AFTER] [--playlist-m3u]
                      [--playlist-wpl] [--playlist-sync] [-q VBR]
                      [-Q {160,320,96}] [--remove-offline-cache]
                      [--resume-after RESUME_AFTER] [-R REPLACE [REPLACE ...]]
                      [-s] [--stereo-mode {j,s,f,d,m,l,r}]
                      [--stop-after STOP_AFTER] [-V] [--wav] [--vorbis] [-r]
                      uri [uri ...]

Rips Spotify URIs to MP3s with ID3 tags and album covers

positional arguments:
  uri                   One or more Spotify URI(s) (either URI, a file of URIs or a search query)

optional arguments:
  -h, --help            show this help message and exit
  -S SETTINGS, --settings SETTINGS
                        Path to settings, config and temp files directory [Default=~/.spotify-ripper]
  -a, --ascii           Convert the file name and the metadata tags to ASCII encoding [Default=utf-8]
  --aac                 Rip songs to AAC format with FreeAAC instead of MP3
  --alac                Rip songs to Apple Lossless format instead of MP3
  --artist-album-type ARTIST_ALBUM_TYPE
                        Only load albums of specified types when passing a Spotify artist URI [Default=album,single,ep,compilation,appears_on]
  --artist-album-market ARTIST_ALBUM_MARKET
                        Only load albums with the specified ISO2 country code when passing a Spotify artist URI. You may get duplicate albums if not set. [Default=any]
  -A, --ascii-path-only
                        Convert the file name (but not the metadata tags) to ASCII encoding [Default=utf-8]
  -b BITRATE, --bitrate BITRATE
                        CBR bitrate [Default=320]
  -c, --cbr             CBR encoding [Default=VBR]
  --comp COMP           compression complexity for FLAC and Opus [Default=Max]
  --comment COMMENT     Set comment metadata tag to all songs. Can include same tags as --format.
  --cover-file COVER_FILE
                        Save album cover image to file name (e.g "cover.jpg") [Default=embed]
  --cover-file-and-embed COVER_FILE
                        Same as --cover-file but embeds the cover image too
  -d DIRECTORY, --directory DIRECTORY
                        Base directory where ripped MP3s are saved [Default=cwd]
  --fail-log FAIL_LOG   Logs the list of track URIs that failed to rip
  --flac                Rip songs to lossless FLAC encoding instead of MP3
  -f FORMAT, --format FORMAT
                        Save songs using this path and filename structure (see README)
  --format-case {upper,lower,capitalize}
                        Convert all words of the file name to upper-case, lower-case, or capitalized
  --flat                Save all songs to a single directory (overrides --format option)
  --flat-with-index     Similar to --flat [-f] but includes the playlist index at the start of the song file
  -g {artist,album}, --genres {artist,album}
                        Attempt to retrieve genre information from Spotify's Web API [Default=skip]
  --grouping GROUPING   Set grouping metadata tag to all songs. Can include same tags as --format.
  --id3-v23             Store ID3 tags using version v2.3 [Default=v2.4]
  -k KEY, --key KEY     Path to Spotify application key file [Default=Settings Directory]
  -u USER, --user USER  Spotify username
  -p PASSWORD, --password PASSWORD
                        Spotify password [Default=ask interactively]
  -l, --last            Use last login credentials
  -L LOG, --log LOG     Log in a log-friendly format to a file (use - to log to stdout)
  --pcm                 Saves a .pcm file with the raw PCM data instead of MP3
  --mp4                 Rip songs to MP4/M4A format with Fraunhofer FDK AAC codec instead of MP3
  --normalize           Normalize volume levels of tracks
  -na, --normalized-ascii
                        Convert the file name to normalized ASCII with unicodedata.normalize (NFKD)
  -o, --overwrite       Overwrite existing MP3 files [Default=skip]
  --opus                Rip songs to Opus encoding instead of MP3
  --partial-check {none,weak,strict}
                        Check for and overwrite partially ripped files. "weak" will err on the side of not re-ripping the file if it is unsure, whereas "strict" will re-rip the file [Default=weak]
  --play-token-resume RESUME_AFTER
                        If the 'play token' is lost to a different device using the same Spotify account, the script will wait a speficied amount of time before restarting. This argument takes the same values as --resume-after [Default=abort]
  --playlist-m3u        create a m3u file when ripping a playlist
  --playlist-wpl        create a wpl file when ripping a playlist
  --playlist-sync       Sync playlist songs (rename and remove old songs)
  -q VBR, --vbr VBR     VBR quality setting or target bitrate for Opus [Default=0]
  -Q {160,320,96}, --quality {160,320,96}
                        Spotify stream bitrate preference [Default=320]
  --remove-offline-cache
                        Remove libspotify's offline cache directory after the ripis complete to save disk space
  --resume-after RESUME_AFTER
                        Resumes script after a certain amount of time has passed after stopping (e.g. 1h30m). Alternatively, accepts a specific time in 24hr format to start after (e.g 03:30, 16:15). Requires --stop-after option to be set
  -R REPLACE [REPLACE ...], --replace REPLACE [REPLACE ...]
                        pattern to replace the output filename separated by "/". The following example replaces all spaces with "_" and all "-" with ".":    spotify-ripper --replace " /_" "\-/." uri
  -s, --strip-colors    Strip coloring from output [Default=colors]
  --stereo-mode {j,s,f,d,m,l,r}
                        Advanced stereo settings for Lame MP3 encoder only
  --stop-after STOP_AFTER
                        Stops script after a certain amount of time has passed (e.g. 1h30m). Alternatively, accepts a specific time in 24hr format to stop after (e.g 03:30, 16:15)
  -V, --version         show program's version number and exit
  --wav                 Rip songs to uncompressed WAV file instead of MP3
  --vorbis              Rip songs to Ogg Vorbis encoding instead of MP3
  -r, --remove-from-playlist
                        Delete tracks from playlist after successful ripping [Default=no]

Example usage:
    rip a single file: spotify-ripper -u user spotify:track:52xaypL0Kjzk0ngwv3oBPR
    rip entire playlist: spotify-ripper -u user spotify:user:username:playlist:4vkGNcsS8lRXj4q945NIA4
    rip a list of URIs: spotify-ripper -u user list_of_uris.txt
    rip tracks from Spotify's charts: spotify-ripper -l spotify:charts:regional:global:weekly:latest
    search for tracks to rip: spotify-ripper -l -Q 160 -o "album:Rumours track:'the chain'"

Facebook Login

Spotify-ripper will work with your regular Facebook login/password if you setup your Spotify account to login using your Facebook credentials. Otherwise, use your Spotify login/password.

Config File

For options that you want set on every run, you can use a config file named config.ini in the settings folder (defaults to ~/.spotify-ripper). The options in the config file use the same name as the command line options with the exception that dashes are translated to snake_case. Any option specified in the command line will overwrite any setting in the config file. Please put all options under a [main] section.

Here is an example config file

[main]
ascii = True
format = {album_artist}/{album}/{artist} - {track_name}.{ext}
quality = 160
vorbis = True
last = True

Format String

The format string dictates how spotify-ripper will organize your ripped files. This is controlled through the -f | --format option. The string should include the format of the file name and optionally a directory structure. If you do not include a format string, the default format will be used: {album_artist}/{album}/{artist} - {track_name}.{ext}.

The --flat option is shorthand for using the format string: {artist} - {track_name}.{ext}, and the --flat-with-index option is shorthand for using the format string: {idx:3} - {artist} - {track_name}.{ext}. The use of these shorthand options will override any --format string option given.

Your format string can include the following variables names, which are case-sensitive and wrapped in curly braces, if you want your file/path name to be overwritten with Spotify metadata.

Format String Variables

Names and Aliases Description
{track_artist}, {artist} The track's artist
{track_artists}, {artists} Similar to {track_artist} but will be join multiple artists with a comma (e.g. "artist 1, artist 2")
{album_artist} When passing an album, the album's artist (e.g. "Various Artists"). If no album artist exists, the track artist is used instead
{album_artists_web} Similar to {album_artist} but retrieves artist information from Spotify's Web API. Unlike {album_artist}, multiple album artists can be retrieved and will be joined with a comma (e.g. "artist 1, artist 2")
{album} Album name
{track_name}, {track} Track name
{year} Release year of the album
{ext}, {extension} Filename extension (i.e. "mp3", "ogg", "flac", ...)
{idx}, {index} Playlist index
{track_num}, {track_idx}, {track_index} The track number of the disc
{disc_num}, {disc_idx}, {disc_index} The disc number of the album
{smart_track_num}, {smart_track_idx}, {smart_track_index} For a multi-disc album, {smart_track_num} will return a number combining the disc and track number. e.g. for disc 2, track 4 it will return "204". For a single disc album, it will return the track num.
{playlist}, {playlist_name} Name of playlist if passed a playlist uri, otherwise "No Playlist"
{playlist_owner}, {playlist_user}, {playlist_username} User name of playlist's owner if passed a a playlist uri, otherwise "No Playlist Owner"
{playlist_track_add_time}, {track_add_time}, When the track was added to the playlist
{playlist_track_add_user}, {track_add_user}, The user that added the track to the playlist
{user}, {username} Spotify username of logged-in user
{feat_artists}, {featuring_artists} Featuring artists join by commas (see Prefix String section below)
{copyright} Album copyright message
{label}, {copyright_holder} Album copyright message with the year removed at the start of the string if it exists

Any substring in the format string that does not match a variable above will be passed through to the file/path name unchanged.

Zero-Filled Padding

Format variables that represent an index can be padded with zeros to a user-specified length. For example, {idx:3} will produce the following output: 001, 002, 003, etc. If no number is provided, no zero-filled padding will occur (e.g. 8, 9, 10, 11, ...). The variables that accept this option include {idx}, {track_num}, {disc_num}, {smart_track_num} and their aliases.

Prefix String

Format variable feat_artists takes a prefix string to be prepended before the output. For example, {feat_artists:featuring} will produce the follow output ``featuing Bruno Mars. If there are no featuring artists, the prefix string (and any preceding spaces) will not be included.

Playlist Sync Option

By default, other than checking for an overwrite, spotify-ripper will not keep track of local files once they are ripped from Spotify. However, if you use the --playlist-sync option when passing a playlist URI, spotify-ripper will store a json file in your settings directory that keeps track of location of your ripped files for that playlist.

If at a later time, the playlist is changed on Spotify (i.e. songs reordered, removed or added), spotify-ripper will try to keep your local files "in sync" the playlist if you rerun the same command. For example, if your format string is {index} {artist} - {track_name}.{ext}, it will rename is existing files so the index is correct. Note that with option set, spotify-ripper will delete a song that was previously on the playlist, but was removed but still exists on your local machine. It does not affect files outside of the playlist and has no effect on non-playlist URIs.

If you want to redownload a playlist (for example with improved quality), you either need to remove the song files from your local or use the --overwrite option.

Installation

Prerequisites

Mac OS X

Recommend approach uses homebrew and pyenv

To install pyenv using homebrew:

$ brew update
$ brew install pyenv
$ eval "$(pyenv init -)"
## the next line ensures 'eval "$(pyenv init -)"' is run everytime terminal is opened
$ echo 'if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi' >> ~/.bash_profile
$ pyenv install 2.7.10  # or whatever version of python you want
$ pyenv global 2.7.10
$ python -V             # should say Python 2.7.10

To install spotify-ripper once pyenv is setup:

$ brew install homebrew/binary/libspotify
$ sudo ln -s /usr/local/opt/libspotify/lib/libspotify.12.1.51.dylib \
    /usr/local/opt/libspotify/lib/libspotify
$ brew install lame
$ git clone https://github.com/hbashton/spotify-ripper.git && cd spotify-ripper && sudo python setup.py install
$ pyenv rehash

Note that Spotify may no longer be issuing developer keys. See Libspotify’s Deprecation

Download an application key file spotify_appkey.key from https://devaccount.spotify.com/my-account/keys/ (requires a Spotify Premium Account) and move the file to the ~/.spotify-ripper directory (or use the -k | --key option).

Ubuntu/Debian

Recommend approach uses pyenv. If you don't use pyenv, you need to install the python-dev package too. If you are installing on the Raspberry Pi (gen 1), use the eabi-armv6hf version of libspotify.

To install pyenv using pyenv-installer (requires git and curl):

$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
## restart terminal ##
$ pyenv install 2.7.10  # or whatever version of python you want
$ pyenv global 2.7.10
$ python -V             # should say Python 2.7.10

To install spotify-ripper once pyenv is setup:

$ sudo apt-get install lame build-essential libffi-dev
$ wget https://developer.spotify.com/download/libspotify/libspotify-12.1.51-Linux-x86_64-release.tar.gz # (assuming 64-bit)
$ tar xvf libspotify-12.1.51-Linux-x86_64-release.tar.gz
$ cd libspotify-12.1.51-Linux-x86_64-release/
$ sudo make install prefix=/usr/local
$ git clone https://github.com/hbashton/spotify-ripper.git && cd spotify-ripper && sudo python setup.py install
$ pyenv rehash

Note that Spotify may no longer be issuing developer keys. See Libspotify’s Deprecation

Download an application key file spotify_appkey.key from https://devaccount.spotify.com/my-account/keys/ (requires a Spotify Premium Account) and move the file to the ~/.spotify-ripper directory (or use the -k | --key option).

Windows

Unfortunately, pyspotify seems to have an issue building on Windows (if someone can get this to work, please let me know). The best alternative is to run a linux distribution in a virtual machine. Basic instructions to install Ubuntu on Virtual Box can be found in the wiki.

Optional Encoding Formats

In addition to MP3 encoding, spotify-ripper supports encoding to FLAC, AAC, MP4/M4A, Ogg Vorbis and Opus. However, additional encoding tools need to be installed for each codec you wish to use.

Mac OS X

# FLAC
$ brew install flac

# ALAC
$ brew install libav

# AAC
$ brew install faac

# MP4/M4A
$ brew install fdk-aac-encoder

# Ogg Vorbis
$ brew install vorbis-tools

# Opus
$ brew install opus-tools

Ubuntu/Debian

# FLAC
$ sudo apt-get install flac

# ALAC
$ sudo apt-get install libav-tools

# AAC
$ sudo apt-get install faac

# MP4/M4A (need to compile fdkaac from source)
$ sudo apt-get install libfdk-aac-dev automake autoconf
$ wget https://github.com/nu774/fdkaac/archive/v0.6.2.tar.gz
$ tar xvf v0.6.2.tar.gz
$ cd fdkaac-0.6.2
$ autoreconf -i
$ ./configure
$ sudo make install

# Ogg Vorbis
$ sudo apt-get install vorbis-tools

# Opus
$ sudo apt-get install opus-tools

Upgrade

Use git pull to upgrade to the latest version.

$ cd spotify-ripper
$ git pull

Common Issues and Problems

Help for common problems while using spotify-ripper can be found in the wiki.

Release Notes

Release notes can be found in the wiki.

License

MIT License

spotify-ripper's People

Contributors

bhelm avatar bluemeda avatar gervasiocaj avatar hbashton avatar jerryz1982 avatar jrnewell avatar logiconcepts819 avatar notimplementedyet avatar vikbez avatar xosgerrit avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spotify-ripper's Issues

hangs when loading large list of URIs

now that playlists no longer work, i've attempted to rip from a large list of URIs. In total there are about 1500 entries. When I run the program I get:

Logging in... Logged in as [user]

and it just hangs there. Left it for an hour thinking it was just parsing the data, but nothing happened.

using the split command to break the file into several more that were 50 lines each appears to work perfectly. There is no delay between getting logged in and starting the process.

Any ideas?

spotify.error.Timeout: Operation did not complete in 10.000s

I've tried running as root and reinstalling, without success.

These are the errors I'm getting when running spotify-ripper -u username URI:

Loading playlist...
Exception in thread SpotifyRipperThread:
Traceback (most recent call last):
  File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.5/site-packages/spotify_ripper-2.9.1-py3.5.egg/spotify_ripper/ripper.py", line 223, in run
    tracks = list(get_tracks_from_uri(uri))
  File "/usr/lib/python3.5/site-packages/spotify_ripper-2.9.1-py3.5.egg/spotify_ripper/ripper.py", line 218, in get_tracks_from_uri
    return self.load_link(uri)
  File "/usr/lib/python3.5/site-packages/spotify_ripper-2.9.1-py3.5.egg/spotify_ripper/ripper.py", line 431, in load_link
    self.current_playlist.load()
  File "/usr/lib/python3.5/site-packages/pyspotify-2.0.5-py3.5-linux-x86_64.egg/spotify/playlist.py", line 118, in load
    return utils.load(self._session, self, timeout=timeout)
  File "/usr/lib/python3.5/site-packages/pyspotify-2.0.5-py3.5-linux-x86_64.egg/spotify/utils.py", line 246, in load
    raise spotify.Timeout(timeout)
spotify.error.Timeout: Operation did not complete in 10.000s

Not sure how to proceed

trouble installing libspotify with homebrew

I tried installing spotify-ripper on a mac ; when I type

brew install homebrew/binary/libspotify

I get the following error :

Error: No available formula with the name "libspotify"
==> Searching for similarly named formulae...
Error: No similarly named formulae found.
==> Searching taps...
Error: No formulae found in taps.

I tried to install it with cask and it didn't work either. After a bit of searching, I found a workaround :

brew install mopidy/mopidy/libspotify

ps : thanks for reviving spotify-ripper!

Installing "libspotify" doesn't work - Deprecated ?

When trying to install libspotify (running brew install homebrew/binary/libspotify). I get the following
Error: homebrew/binary was deprecated. This tap is now empty as all its formulae were migrated.

I tried running brew install libspotify and I get :
Error: No available formula with the name "libspotify".

First I want to ask you if this repo was deprecated ?

After manually installing libspotify, I get this error :
build/temp.macosx-10.13-intel-2.7/spotify._spotify.c:492:10: fatal error: 'libspotify/api.h' file not found

I tried different ways to link the framework to the usr/local/opt folder, but can't get it working...

Max

Spotify error detected.

Hi, I'v managed to download some file, but somehow it suddenly started throwing this error after ripping the entire file. I cant manage to find where the errors comes from, but it seems it is no coming form this repository. Could you give me some hand here?

[ 1 / 146 ] Ripping spotify:track:5A7X4ZshuOGcnuR4OwD1QQ	(ESC to skip)
/Users/pilo/Music/Spotify Ripper /ATeck/Watermät - Ruff Like This.mp3
Track Download Size: 6.33 MB
Progress: [========================================] 02:46 / 02:46        (~00m 00s remaining)
Total:    [                                        ] 02:46 / 10:22:28     (~03h 59m remaining)
Rip complete
Watermät - Ruff Like This.mp3	[ 5.21 MB ]
Spotify error detected
'bool' object has no attribute 'startswith'
Skipping to next track...
Deleting partially ripped file
Loading track...
[ 2 / 146 ] Ripping spotify:track:0yY1faDhnUIM9gCbOCqcbi	(ESC to skip)
/Users/pilo/Music/Spotify Ripper /ATeck/Damien N-Drix - Let It Ring.mp3
Track Download Size: 6.94 MB
Progress: [========================================] 03:02 / 03:02        (~00m 00s remaining)
Total:    [                                        ] 05:48 / 10:22:28     (~04h 25m remaining)
Rip complete
Damien N-Drix - Let It Ring.mp3	[ 5.90 MB ]
Spotify error detected
'bool' object has no attribute 'startswith'
Skipping to next track...
Deleting partially ripped file
  

feature: sync your playlists from spotify to local

it would be nice that we can sync/rip our playlists that are in the account that we login in to

so i think we first need to retrieve playlists from logged in user
and then do a for each or something

im trying to polish my python skills and see if i can come up with something

spotify search API now requires authentication

According to the mopidy-spotify developers, the search endpoint of spotify's web API now requires authentication (it is broken in mopidy-spotify as well). Any idea how this can be done with spotify-ripper? If so, anyone willing to do it (I would, but I'm no python programmer).
-Michael.

Help to install spotify-ripper

I had to reinstall Linux and so I lost my installation of spotify-ripper. Now I'm running Linux Mint 19.2 and I'm not able to install Spotify-ripper anymore. Has anyone found a solution to how to install spotify-ripper in our days? Because I know it's possible, just finding the right packages. I already have the Spotify app key and all the libraries to download, I just need the commands.
Thank you

Use Web Playback API

Spotify recently released a Web Playback Javascript API which is beta at the time of writing.

Is this project actively developed? Building on top of that would remove the dependency on libspotify and their API keys which can no longer be easily obtained.

Thanks.

Tags return to default after rip is complete

Several tracks have more than one artist, and the artist tag is set by default with {artist} (only one, the first one in the list of {artists}). If I set the config file with artist = {artists}, while the file is downloading the artist tag is filled with {artists} but when the rip is complete, it resets and it is written to the file as artist = {artist}.

Is there any solution to this?

Thanks.

Cumbersome data output

screenshot_2019-02-09-23-15-10

The problem is that if I am using ssh to access the server with spotify-ripper running in a terminal, then I have to download about 20KB per second of data with a status of that output.
I know I can fix it to the switching to the different pane of terminal multiplexer. But still... how to configure the refresh rate of spotify-ripper?

Can you add the tempo or bpm to flac ?

HI,
Can you add the tempo or bpm to flac ?

{
"danceability" : 0.596,
"energy" : 0.869,
"key" : 10,
"loudness" : -11.970,
"mode" : 1,
"speechiness" : 0.0370,
"acousticness" : 0.0116,
"instrumentalness" : 0.173,
"liveness" : 0.0678,
"valence" : 0.949,
"tempo" : 109.902,
"type" : "audio_features",
"id" : "05wIrZSwuaVWhcv5FfqeH0",
"uri" : "spotify:track:05wIrZSwuaVWhcv5FfqeH0",
"track_href" : "https://api.spotify.com/v1/tracks/05wIrZSwuaVWhcv5FfqeH0",
"analysis_url" : "https://api.spotify.com/v1/audio-analysis/05wIrZSwuaVWhcv5FfqeH0",
"duration_ms" : 238733,
"time_signature" : 4
}

Thanks

Exit code 1 after successful rip?

I'm wondering why the child process is exiting with code 1 after success? Is this a bug?

stdout: Rip complete
ZAYN-I Dont Wanna Live Forever (Fifty Shades Darker).mp3	[ 7.95 MB ]
-------------------------------------------------------------------------------
Setting artist: ZAYN
Setting album: Fifty Shades Darker (Original Motion Picture Soundtrack)
Setting title: I Dont Wanna Live Forever (Fifty Shades Darker)
Setting track info: (1, 19)
Setting disc info: (1, 1)
Setting release year: 2017
Adding cover image
Time: 04:06	MPEG1, Layer III	[ ~270 kb/s @ 44100 Hz - Joint Stereo ]
-------------------------------------------------------------------------------
ID3 v2.4: 7 frames
Writing ID3 version v2.4
-------------------------------------------------------------------------------
Logging out...

child process exited with code 1 and signal null

Problems with spotify-ripper and pyenv versions? Pyspotify?

Hello again, I have this all working well on my macbook- trying to install it on a Mac Pro I found and updated to El Capitan recently. Everything was going well up until I tried to run the program, which results in the following traceback:

Traceback (most recent call last): File "/Users/karibarry/.pyenv/versions/2.7.10/bin/spotify-ripper", line 9, in <module> load_entry_point('spotify-ripper==2.9.1', 'console_scripts', 'spotify-ripper')() File "/Users/karibarry/.pyenv/versions/2.7.10/lib/python2.7/site-packages/pkg_resources/__init__.py", line 552, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/Users/karibarry/.pyenv/versions/2.7.10/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2672, in load_entry_point return ep.load() File "/Users/karibarry/.pyenv/versions/2.7.10/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2345, in load return self.resolve() File "/Users/karibarry/.pyenv/versions/2.7.10/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2351, in resolve module = __import__(self.module_name, fromlist=['__name__'], level=0) File "/Users/karibarry/.pyenv/versions/2.7.10/bin/main.py", line 4, in <module> __import__('pkg_resources').run_script('spotify-ripper==2.9.1', 'main.py') File "/Users/karibarry/.pyenv/versions/2.7.10/lib/python2.7/site-packages/pkg_resources/__init__.py", line 729, in run_script self.require(requires)[0].run_script(script_name, ns) File "/Users/karibarry/.pyenv/versions/2.7.10/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1642, in run_script exec(code, namespace, namespace) File "/Users/karibarry/.pyenv/versions/2.7.10/lib/python2.7/site-packages/spotify_ripper-2.9.1-py2.7.egg/EGG-INFO/scripts/main.py", line 7, in <module> from spotify_ripper.ripper import Ripper File "/Users/karibarry/.pyenv/versions/2.7.10/lib/python2.7/site-packages/spotify_ripper-2.9.1-py2.7.egg/spotify_ripper/ripper.py", line 9, in <module> from spotify_ripper.progress import Progress File "/Users/karibarry/.pyenv/versions/2.7.10/lib/python2.7/site-packages/spotify_ripper-2.9.1-py2.7.egg/spotify_ripper/progress.py", line 11, in <module> import spotify File "/Users/karibarry/.pyenv/versions/2.7.10/lib/python2.7/site-packages/pyspotify-2.0.5-py2.7-macosx-10.11-x86_64.egg/spotify/__init__.py", line 81, in <module> from spotify._spotify import ffi, lib # noqa ImportError: dlopen(/Users/karibarry/.pyenv/versions/2.7.10/lib/python2.7/site-packages/pyspotify-2.0.5-py2.7-macosx-10.11-x86_64.egg/spotify/_spotify.so, 2): Library not loaded: @loader_path/../Frameworks/libspotify.framework/libspotify Referenced from: /Users/karibarry/.pyenv/versions/2.7.10/lib/python2.7/site-packages/pyspotify-2.0.5-py2.7-macosx-10.11-x86_64.egg/spotify/_spotify.so Reason: image not found

I'm not intimately familiar with the code here but I think it's telling me there's some sort of problem with pyenv's version; this happened the first time I tried to run and I put in version 3.5. After that didn't work I sudo rm -rf ~/.pyenv/versions/3.5.0 and tried again with 2.7.10 like in the install guide.

Someone could probably easily see what's going on here, sadly I can't.

Thanks!

libspotify-12.1.15 not available through spotify anymore

wget https://developer.spotify.com/download/libspotify/libspotify-12.1.51-Linux-x86_64-release.tar.gz
results in a 404 error. A file is downloaded but not extractable.

`--2018-10-08 15:07:20-- https://developer.spotify.com/download/libspotify/libspotify-12.1.51-Linux-x86_64-release.tar.gz
Resolving developer.spotify.com (developer.spotify.com)... 151.101.14.133
Connecting to developer.spotify.com (developer.spotify.com)|151.101.14.133|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://developer.spotify.com/404.html [following]
--2018-10-08 15:07:21-- https://developer.spotify.com/404.html
Reusing existing connection to developer.spotify.com:443.
HTTP request sent, awaiting response... 200 OK
Length: 98090 (96K) [text/html]
Saving to: ‘libspotify-12.1.51-Linux-x86_64-release.tar.gz’

libspotify-12.1.51-Linux-x86_64-r 100%[===========================================================>] 95.79K --.-KB/s in 0.02s

2018-10-08 15:07:21 (3.92 MB/s) - ‘libspotify-12.1.51-Linux-x86_64-release.tar.gz’ saved [98090/98090]
`
System:
Raspberry Pi 3B+ running Raspbian Stretch
Python 2.7.13

Might be possible to use mopidy's libspotify instead?

Fail to grab and embed a cover

Here is an output of freshly ripped file:

$ eyeD3 Hot\ Boys/Guerrilla\ Warfare/Hot\ Boys\ -\ You\ Dig.mp3
eyed3.core:WARNING: APIC frame does not contain image data/url
.../aria2/order1/Hot Boys/Guerrilla Warfare/Hot Boys - You Dig.mp3[ 7.70 MB ]
------------------------------------------------------------------------Time: 03:58     MPEG1, Layer III        [ ~271 kb/s @ 44100 Hz - Joint stereo ]
------------------------------------------------------------------------ID3 v2.4:
title: You Dig
artist: Hot Boys
album: Guerrilla Warfare
recording date: 1999
track: 11/17
disc: 1/1
FRONT_COVER Image: [Size: 0 bytes] [Type: image/jpeg]
Description: Front Cover

As can be seen, the inserted coverart is zero bytes long.
I wonder why it fails to get and embed the cover. Did anyone got a similar issue?

Ripping albums

I am attempting to use an album link to pull an entire album, but the script stops after the first download completes, see output:

[netadmin@soyuz SpotifyRip]$ ./spotify-ripper-wrapper spotify:album:6cYPeMZiYaFOyHEoXglH7m
Spotify Ripper - v2.11
Encoding output: MP3, VBR 0
Spotify bitrate: 320 kbps
Unicode support: Yes
Output directory: /home/public/Media/MusicLib
Settings directory: /home/netadmin/.spotify-ripper
Format String: {album_artist}/{album}/{artist} - {track_name}.{ext}
Overwrite files: No
Logging in...
Logged in as 22ppde3f7m2y5qcrevlb26pli
Loading album browser...
Loading album browser...
Loading track...
Skipping spotify:track:1kjrgWG47wJgVqvQOvyb7C
/home/public/Media/MusicLib/George Ezra/Hold My Girl/George Ezra - Hold My Girl.mp3
Logging out...
[netadmin@soyuz SpotifyRip]$

Updated Spotify developer website

Hi,
Spotify developer website has been updated and it is now impossible to request an app key. Any workaround or way to use the new spotify client ID and client secret in place of the key?

problem on load

i did change my password but when i tried login i did have a problem

Logged in failed: BAD_USERNAME_OR_PASSWORD
Encountered issue while logging into Spotify, aborting...

i restored my older pass but not work
please help me
PD: thanks you, sorry but my english is basic

Windows 10 Question...

Is there any way to make it work on Windows 10, i know that Windows 10 have a Ubuntu Bash System so... is there any way to make it work?

When trying to download a single track (happened with most of them) I get this error

I used all the steps mentioned here https://www.youtube.com/watch?v=b0U6q2lGHD8 (read the steps in the description under the video) downloading playlist works fine (although some songs dont download for some reason)

If I try to download a single track by getting its 21symbol "id" from spotify webplayer by entering this to my console

sudo spotify-ripper -u myspotifyusernamehere spotify:track:5VyPKrrpiLVwcvBAtQnbm2

I get this error and I get it with any track I tried to download. (I have premium and as said the playlists mostly download fine.. the last 130 track play-list i downloaded had successfully downloaded 126 tracks)

Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/usr/local/lib/python2.7/dist-packages/spotify_ripper-2.9.1-py2.7.egg/spotify_ripper/ripper.py", line 232, in run
    audio_file = self.format_track_path(idx, track)
  File "/usr/local/lib/python2.7/dist-packages/spotify_ripper-2.9.1-py2.7.egg/spotify_ripper/ripper.py", line 604, in format_track_path
    track.load()
  File "/usr/local/lib/python2.7/dist-packages/pyspotify-2.0.5-py2.7-linux-x86_64.egg/spotify/track.py", line 81, in load
    return utils.load(self._session, self, timeout=timeout)
  File "/usr/local/lib/python2.7/dist-packages/pyspotify-2.0.5-py2.7-linux-x86_64.egg/spotify/utils.py", line 242, in load
    _check_error(obj)
  File "/usr/local/lib/python2.7/dist-packages/pyspotify-2.0.5-py2.7-linux-x86_64.egg/spotify/utils.py", line 206, in _check_error
    error_type, ignores=[spotify.ErrorType.IS_LOADING])
  File "/usr/local/lib/python2.7/dist-packages/pyspotify-2.0.5-py2.7-linux-x86_64.egg/spotify/error.py", line 31, in maybe_raise
    raise LibError(error_type)
LibError: General permanent error

error when ripping playlist

I get this error when ripping some playlists (about 30 songs) - other playlist get ripped ok
I copied the playlist to a text file and removed local files but the issue is same
tried 2.10.7 but same error

edit: when i extracted URI's to a txt file and gave it, same error , so somehow URI's are bugged??
playlist: spotify:user:1242336789:playlist:2NmS6p9TTWqXGUykZ2QZAH

Exception in thread SpotifyRipperThread:
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "/Library/Python/2.7/site-packages/spotify_ripper-2.10.7-py2.7.egg/spotify_ripper/ripper.py", line 233, in run
    audio_file = self.format_track_path(idx, track)
  File "/Library/Python/2.7/site-packages/spotify_ripper-2.10.7-py2.7.egg/spotify_ripper/ripper.py", line 618, in format_track_path
    format_track_string(self, args.format.strip(), idx, track)
  File "/Library/Python/2.7/site-packages/spotify_ripper-2.10.7-py2.7.egg/spotify_ripper/utils.py", line 233, in format_track_string
    [artist.name for artist in track.artists])))
TypeError: sequence item 1: expected string or Unicode, NoneType found

Qnap

Can anyone install it on Qnap?

Can't use pip

Hello,

I can't manage to use pip to install spotify-ripper on my raspberry pi 2.
Error message : "Could not find any downloads that satisfy the requirement spotify-ripper"

pyspotify installation fails with setup.py

Searching for pyspotify==2.0.5 Reading https://pypi.python.org/simple/pyspotify/ Downloading https://files.pythonhosted.org/packages/5b/ce/7a6520ea348023762d5b138e85809198626c758ee8053bfc534438ad8bad/pyspotify-2.0.5.tar.gz#sha256=fbd41c58d62232b0cabb7a9e38d45f36ac221699c006899bdb6be74c04602678 Best match: pyspotify 2.0.5 Processing pyspotify-2.0.5.tar.gz Writing /tmp/easy_install-9lFZzw/pyspotify-2.0.5/setup.cfg Running pyspotify-2.0.5/setup.py -q bdist_egg --dist-dir /tmp/easy_install-9lFZzw/pyspotify-2.0.5/egg-dist-tmp-Iurqyp c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory #include <Python.h> ^ compilation terminated. error: Setup script exited with error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1

Reason may be the python version I'm using (2.7.13) since 2.7.10 cannot be installed via pyenv on Debian Scratch.

However a solution is to use mopidy's repository and install python-spotify from there.
After that, setup.py install went thorugh without an error.
I'll try to create a PR. (Not common in github)

Song quality doesn't match

I just want to know this: i set in the file config.ini the quality to rip at 320, but when i rip a song the kbps is't 320, but lower, sometimes 272, 266, 262 etc..., i just want to know if this is a spotify ripper issue or if i wrong something to set, or maybe is that spotify doesn't have the songs at the highest quality, but lower, to save storage in their server or i don't no, other reason (?)

Deprecated?

Hi, since Libspotify has been deprecated, does this mean that this no longer works?

-g && --genre option help

bash@Shadows:~$ sudo spotify-ripper spotify:track:1dNIEtp7AY3oDAKCGg2XkH -g artist
Spotify Ripper - v2.9.1
  Encoding output:      MP3, CBR 320 kbps
  Spotify bitrate:      320 kbps
  Unicode support:      ASCII only
  Output directory:     /mnt/c/Users/xxxxx/Music
  Settings directory:   /home/xxxxx/.spotify-ripper
  Format String:        {album}/{track_num}. {track_name}.{ext}
  Overwrite files:      No
Logging in...
Logged in as xxxxx
Loading track...
Ripping spotify:track:1dNIEtp7AY3oDAKCGg2XkH
/mnt/c/Users/xxxxx/Music/Something Just Like This/1. Something Just Like This.mp3
Track Download Size: 9.46 MB
Progress: [========================================] 04:08 / 04:08        (~00m 00s remaining)
Rip complete
WARNING: libsndfile may ignore -r and perform fseek's on the input.
Compile without libsndfile if this is a problem.
1. Something Just Like This.mp3 [ 9.47 MB ]
Attempting to retrieve genres from Spotify's Web API
https://api.spotify.com/v1/artists/69GGBxA162lTqCwzJG5jLp
URL returned non-200 HTTP code: 401
-------------------------------------------------------------------------------
Setting artist: The Chainsmokers
Setting album: Something Just Like This
Setting title: Something Just Like This
Setting track info: (1, 0)
Setting disc info: (1, 1)
Setting release year: 2017
Adding cover image
Time: 04:08     MPEG1, Layer III        [ 320 kb/s @ 44100 Hz - Joint Stereo ]
-------------------------------------------------------------------------------
ID3 v2.3: 7 frames
Writing ID3 version v2.3
-------------------------------------------------------------------------------
Logging out...

Why does it returns this error code?
URL returned non-200 HTTP code: 401
I don't know how this API works but does this need some token to work?

{
  "error" : {
    "status" : 401,
    "message" : "No token provided"
  }
}

Edit: Perhaps it really does [?] (I don't know)
Error Code 401

Unauthorized - The request requires user authentication or, if the request included authorization credentials, authorization has been refused for those credentials.

Slow speed of grabbing

Apparently, the speed of ripping is somewhat close to 2x realtime.

Progress: [====                          ] 00:55 / 05:29        (~02m 35s remaining)
Total:    [==                            ] 02:36:28 / 29:40:35  (~14h 56m remaining)

Is there any way ton improve on it?

Did this stop working?

I installed it a while ago, so luckily I still have libspotify.12.1.51.dylib on my machine.

However, it's not downloading anything. It's just logging in and then out again, with no error message:
$
Spotify Ripper - v2.9.1
Encoding output: FLAC, Compression Level: 5
Spotify bitrate: 320 kbps
Unicode support: Yes
Output directory: /Users/thowi/Downloads/spotify-ripper
Settings directory: /Users/thowi/.spotify-ripper
Format String: {artist} - {track_name}.{ext}
Overwrite files: No
Logging in...
Password:
Logged in as XXX
Loading playlist...
Loading playlist...
Logging out...
$

Did Spotify finally shut this down or am I doing something wrong?

Exception in thread SpotifyRipperThread

When trying to rip, I get the following error
Exception in thread SpotifyRipperThread: Traceback (most recent call last): File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner self.run() File "/usr/local/lib/python2.7/dist-packages/spotify_ripper/ripper.py", line 222, in run audio_file = self.format_track_path(idx, track) File "/usr/local/lib/python2.7/dist-packages/spotify_ripper/ripper.py", line 577, in format_track_path track.load() File "/usr/local/lib/python2.7/dist-packages/spotify/track.py", line 81, in load return utils.load(self._session, self, timeout=timeout) File "/usr/local/lib/python2.7/dist-packages/spotify/utils.py", line 246, in load raise spotify.Timeout(timeout) Timeout: Operation did not complete in 10.000s

This error didn't occur when I last used this nice script, a few months ago.

segmentation fault

Spotify Ripper - v2.9.1
  Encoding output:	MP3, VBR 0
  Spotify bitrate:	320 kbps
  Unicode support:	Yes
  Output directory:	/home/ramonskie
  Settings directory:	/home/ramonskie/.spotify-ripper
  Format String:	{album_artist}/{album}/{artist} - {track_name}.{ext}
  Overwrite files:	No
[1]    15398 segmentation fault  spotify-ripper -k Downloads/spotify_appkey.key -u xxxxxxxx

any idea's?

ALL Playlists sync

Dear hbashton,

your code is exceptional but, If is it possible, I'd like to suggest you to include a function to sync ALL the user playlists. It could be very useful for dj or people who wants to have organised all the songs.
I thought to fork your project to include this function but I think that maybe it is simpler to include it directly on main repo.

Best Regards

Francesco

Avoid LastFM Scrobbling

There is a way to avoid LastFM to scrobble the songs when I download them? In the settings file there are some strings that avoid to share information with facebook and other providers like spotify itself. My question is if there is also a string for LastFM. Thank you in advance

Ripping playlists?

Playlists seem not able to be ripped. After logging in playlist is loaded and the program immediately stopped without giving an error.

Spotify Ripper - v2.9.1 Encoding output: MP3, VBR 0 Spotify bitrate: 320 kbps Unicode support: Yes Output directory: /media/downloads/spotify Settings directory: /root/.spotify-ripper Format String: {album_artist}/({year}) {album}/{track_num:2} - {track_name}.{ext} Overwrite files: No Logging in... Logged in as 1153815924 Loading playlist... Loading playlist... Logging out...

I think I have seen problems with playlists over at mopidy. Might it be related?

Spotify Lossless Support

Spotify introduced it's lossless quality mode. Please add support for ripper to rip in full Lossless quality

Schedule-Distribution not found

After trying to use after some time, I now get a python error. Completely new install didn't help

Traceback (most recent call last):
  File "/usr/local/bin/spotify-ripper", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2876, in <module>
    working_set = WorkingSet._build_master()
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 449, in _build_master
    ws.require(__requires__)
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 745, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 639, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: schedule>=0.3.1

Installation found schedule==0.4.2

Running OSMC 2017.04-1 on Raspbian Jessie 8.0 on a RPi 3B

Exception in thread SpotifyRipperThread:

I'm running spotify-ripper with the php's exec()

    [9443] => Exception in thread SpotifyRipperThread:
    [9444] => Traceback (most recent call last):
    [9445] =>   File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    [9446] =>     self.run()
    [9447] =>   File "/usr/local/lib/python2.7/dist-packages/spotify_ripper/ripper.py", line 329, in run
    [9448] =>     self.post.clean_up_partial()
    [9449] =>   File "/usr/local/lib/python2.7/dist-packages/spotify_ripper/post_actions.py", line 247, in clean_up_partial
    [9450] =>     rm_file(ripper.audio_file)
    [9451] =>   File "/usr/local/lib/python2.7/dist-packages/spotify_ripper/utils.py", line 96, in rm_file
    [9452] =>     os.remove(file_name)
    [9453] => UnicodeEncodeError: 'ascii' codec can't encode character u'\xf8' in position 57: ordinal not in range(128)
    [9454] => 
    [9455] => Rip complete
    [9456] => Spotify error detected
    [9457] => 'ascii' codec can't encode character u'\xf8' in position 57: ordinal not in range(128)

It seems beeing a issue related to character encoding but I've already set theses env variables (php side):

putenv("PYTHONIOENCODING=utf-8");
putenv("LANG=en_US.UTF-8");
putenv("LANGUAGE=en_US:en");
putenv("LC_ALL=en_US.UTF-8");

I have the same env variable set in in Dockerfile :

ENV PYTHONIOENCODING utf-8
RUN locale-gen en_US.UTF-8
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'

Any ideas ? Thanks !

Spotify Error

Spotify error detected
unsupported operand type(s) for +: 'bool' and 'unicode'
Skipping to next track...
Deleting partially ripped file

seems there's a bug somewhere when downloading playlists... any suggestions?

pip no longer hosts spotify-ripper

Hey um, I'm super glad you decided to revive this project; up until now I had been putting off experimenting with it until a rainy day. Unfortunately, now that that rainy day has come it looks like Spotify has gone for the jugular and torched all the pip repositories that this project relies upon:

https://pypi.python.org/pypi/spotify-ripper/2.10.3
and
https://pypi.python.org/pypi/spotify-ripper/1.4.1
are totally gone and pip install spotify-ripper does absolutely nothing.

Is there any place I can find the script here on the github? I apologize but python isn't really a strong point of mine; I'd really appreciate good instruction.

Thank you for taking on this project!

general transient error

Hi,
I loved this project!
Got it functional on Arch.
Now i'm on Gentoo. Compiled and configured with all required dependencies.
I'm able to begin the process, authenticate , then i receive a
"General transient error " and the client log me out.


spotify-ripper -u [email protected] https://open.spotify.com/album/1FwrtjF1V4EqQrw2Yug4gg\?si\=q3mCsz2CRhi26F0jtzBJlQ -k ~/Downloads/spotify_appkey.key
Spotify Ripper - v2.9.1
Encoding output: MP3, VBR 0
Spotify bitrate: 320 kbps
Unicode support: Yes
Output directory: /run/media/bu/084dd4eb-6d2a-45bb-b6a1-097e4aa9cf91
Settings directory: /root/.spotify-ripper
Format String: {album_artist}/{album}/{artist} - {track_name}.{ext}
Overwrite files: No
Logging in...
Password:
Logged in as 118*******
Searching for query: https://open.spotify.com/album/1FwrtjF1V4EqQrw2Yug4gg?si=q3mCsz2CRhi26F0jtzBJlQ
General transient error
Logging out...

I am totally unable to figure out whatis happening

Any idea on how to solve this matter?
I installed it on Gentoo
Thank You in advance! ;-)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.