====== spotify-ripper ====== [[https://git.sash.pw/sascha/spotify-ripper|spotify-ripper]] ist ein Skript für die Kommandozeile, das unter Verwendung von [[https://github.com/mopidy/pyspotify|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 [[https://web.archive.org/web/20160831151528/https://developer.spotify.com/docs/libspotify/12.1.51/|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 [[https://developer.spotify.com/documentation/web-api/|Web-API]] möglich, was zu einigen Einschränkungen im Vergleich zum bisherigen Funktionsumfang führt. FIXME Einschränkungen / Änderungen in Bezug auf spotify-ripper? ===== Installation ===== 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 ''[[http://lame.sourceforge.net/|lame]]'' sowie optional für andere Codecs zum Beispiel: * ''[[http://downloads.xiph.org/releases/vorbis/|vorbis-tools]]'' für Ogg Vorbis * ''[[http://www.opus-codec.org/downloads/|opus-tools]]'' für Opus * ''[[https://xiph.org/flac/index.html|flac]]'' für verlustfreies FLAC (nur bedingt empfehlenswert, da Spotify bereits verlustfrei mit maximal 320 kbps streamt) * ''[[http://www.audiocoding.com/downloads.html|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 ===== Verwendung ===== Um eine einzelne Datei zu laden, wird die URI zu dem Lied benötigt spotify-ripper -u spotify:track:52xaypL0Kjzk0ngwv3oBPR wobei '''' 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 ''[[spotify-ripper#konfiguration|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 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 [[https://git.sash.pw/sascha/spotify-ripper#usage|Seite des Projekts]] eingesehen werden. ===== Konfiguration ===== Häufig verwendete [[spotify-ripper#verwendung|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 [[https://git.sash.pw/sascha/spotify-ripper#format-string-variables|Format]] angegeben, überschreibt dies die Werte der Konfiguration. ''last'' verwendet standardmäßig den zuletzt verwendeten Benutzer, wodurch ''spotify-ripper '' bereits ausreicht, um einen Download zu starten. Weitere verwendete Optionen sind: * Versuchen, größere Cover zu verwenden, sofern möglich * Die Lautstärke der einzelnen Lieder zu normalisieren * Für Playlists oder Alben automatisch m3u-Playlisten zu erstellen * Und nach dem Beenden von ''spotify-ripper'' den Offline-Cache zu löschen, um Speicherplatz zu sparen ===== Upgrade ===== Um zu einer neuen Version zu upgraden, verwenden wir wieder ''pip'': $ sudo pip install --upgrade spotify-ripper {{tag>linux spotify rip audio python}}