spotify-ripper ist ein Skript für die Kommandozeile, das unter Verwendung von pyspotify Lieder von Spotify anhand ihrer Spotify URIs herunterlädt und in Audiodateien mitsamt ID3-Tags sowie Cover abspeichert. Dabei unterstützt es diverse Audio-Codecs wie MP3, FLAC, Ogg Vorbis, Opus, AAC und mehr.
Für die Kommunikation mit Spotify selbst wird auf libspotify zurückgegriffen, welche allerdings seit Mai 2015 nicht mehr offiziell von Spotify unterstützt und aktiv weiterentwickelt wird. Mittlerweile wurde libspotify allerdings von den Entwicklerseiten von Spotify entfernt und es ist nur noch Zugriff über eine eingeschränkte Web-API möglich, was zu einigen Einschränkungen im Vergleich zum bisherigen Funktionsumfang führt. Einschränkungen / Änderungen in Bezug auf spotify-ripper?
Für die Verwendung des Skripts selbst benötigen wir einen App-Key für Entwickler, wozu ein Premium-Account nötig ist. Dazu muss man sich mit seinem Account auf https://devaccount.spotify.com/my-account/keys/ einloggen und einen Key beantragen. Für Name und Beschreibung der App kann irgendwas eingetragen werden, der erste Key wird automatisiert ausgestellt. Von dort können wir dann den spotify_appkey.key herunterladen (Binary auswählen), der für die Kommunikation über libspotify benötigt wird. Die Key-Datei speichern wir am besten im Verzeichnis ~/.spotify-ripper ab, welches standardmäßig für die Konfiguration und andere Daten verwendet wird. Alternativ kann auch später die -k, bzw. --key Option für einen individuellen Pfad zur Key-Datei verwendet werden.
Abhängigkeiten des Pakets sind neben Python sowie den Python-Modulen, die mittels pip automatisch mitinstalliert werden, der Encoder für MP3 lame sowie optional für andere Codecs zum Beispiel:
vorbis-tools für Ogg Vorbisopus-tools für Opusflac für verlustfreies FLAC (nur bedingt empfehlenswert, da Spotify bereits verlustfrei mit maximal 320 kbps streamt)faac für AAC mittels FreeAAC
Für die eigentliche Installation wird zunächst libspotify benötigt. Diese laden wir herunter, entpacken und installieren sie:
$ wget https://developer.spotify.com/download/libspotify/libspotify-12.1.51-Linux-x86_64-release.tar.gz $ tar xf libspotify-12.1.51-Linux-x86_64-release.tar.gz $ cd libspotify-12.1.51-Linux-x86_64-release/ $ sudo make install
Damit Python die Bibliothek später findet, fügen wir deren Pfad noch in der .bashrc ein:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
Dies ist notwendig, da libspotify unter /usr/local/lib installiert wird. Dieser Pfad befindet sich in sys.path, allerdings sucht Python dort nur nach Python-Modulen selbst. Dynamisch gelinkte Bibliotheken wie libspotify werden allerdings nur in Verzeichnissen in LD_LIBRARY_PATH gesucht.
spotify-ripper selbst installieren wir mit pip:
$ sudo pip install spotify-ripper
Um eine einzelne Datei zu laden, wird die URI zu dem Lied benötigt
spotify-ripper -u <user> spotify:track:52xaypL0Kjzk0ngwv3oBPR
wobei <user> durch den eigenen Benutzernamen ersetzt werden muss.
Für eine komplette Playlist wird entsprechend die Spotif URI zu der Playlist benötigt:
spotify-ripper -l -f "{playlist_owner}/{playlist_name}/{idx} {artist} - {track_name}.{ext}" --opus -q 128 spotify:user:username:playlist:4vkGNcsS8lRXj4q945NIA4
In diesem Fall wird mit -l der zuletzt eingeloggte Benutzer verwendet, somit ist auch keine erneute Passworteingabe mehr nötig. Ein eventuell definiertes Format in der config.ini wird durch die Angabe von -f bzw. --format überschrieben. In diesem Fall wird zum Kodieren Opus mit einer Bitrate von 128 kbps verwendet. Für die Verwendung auf z. B. Smartphones oder anderer weniger leistungsfähiger Audio-Hardware reicht bei Opus auch durchaus eine Datenrate von 96 kbps für eine durchaus gute Qualität aus, um Platz zu sparen.
Es können auch mehrere Spotify URIs in einer Datei gespeichert werden, die dann von spotify-ripper abgearbeitet wird:
spotify-ripper -u <user> list_of_uris.txt
Zudem ist es möglich, beispielsweise die Charts von Spotify zu rippen:
spotify-ripper -l spotify:charts:regional:global:weekly:latest
Weitere Möglichkeiten zur Verwendung können auf der Seite des Projekts eingesehen werden.
Häufig verwendete Einstellungen können im Verzeichnis ~/.spotify-ripper in der Datei config.ini hinterlegt werden. Exemplarisch dazu die folgende Konfigurationsdatei:
[main] format = {album_artist}/[{year}] {album}/{smart_track_num} {artist} - {track_name}.{ext} last = True large-cover-art = True normalize = True playlist-m3u = True remove-offline-cache = True
Einstellungen müssen nach dem [main]-Block folgen. Wird später mit -f oder --format ein anderes Format angegeben, überschreibt dies die Werte der Konfiguration. last verwendet standardmäßig den zuletzt verwendeten Benutzer, wodurch spotify-ripper <Spotify-URI> bereits ausreicht, um einen Download zu starten. Weitere verwendete Optionen sind:
spotify-ripper den Offline-Cache zu löschen, um Speicherplatz zu sparen
Um zu einer neuen Version zu upgraden, verwenden wir wieder pip:
$ sudo pip install --upgrade spotify-ripper