Irgendwas Mit Blog

Project Spotibye – Tschüss Spotify

English version is on github.com/wasmitnetzen.

tl;dr: Exportiere Spotify-Playlisten zu m3u-Playlisten. Etwas Unix-Kommandozeilenerfahrung nötig.

Wer es auf Twitter verfolgt hat, hat vielleicht mitbekommen, dass ich gerade versuche, Spotify zu verlassen. Vordergründig, weil ein Streamingdienst auf meiner Weltreise etwas unpraktisch ist, hintergründig spielen noch so Überlegungen wie „Goldener Käfig“ und „Ich zahle nicht für unfreie Daten“ eine Rolle. In diesem Artikel (englisch) ist das ganz gut beschrieben.

Eben dieser Goldene Käfig macht es aber schwer, die in Spotify angelegten Playlisten zu exportieren. In die andere Richtung gibt es einige Dienste, aber hier habe ich nichts brauchbares gefunden. Daher habe ich mich selber an die Arbeit gemacht, mein Arbeitsablauf ist hier beschrieben. Es lässt sich grob in zwei Teile aufteilen: Die Metadaten (Titel, Interpret) aus Spotify exportieren und aus diesen Daten dann brauchbare, klassische .m3u-Playlisten bauen. Ein bisschen Umgang mit der Linux-Kommandozeile ist vonnöten und hier und da holpert es auch etwas, aber das Programm braucht man ja schließlich nicht so oft. Alle Dateien von mir finden sich bei github.

Metadaten aus Spotify exportieren

Hier konnte ich zum Glück auf ein existierendes Projekt von @joshualund zurückgreifen: spotify-export. Unter (K)Ubuntu fehlen üblicherweise die Pakete ruby1.9.1-de sqlite3-doc und libsqlite3-dev, um es ausführen zu können. In den Beispielen heißt meine Playliste „pl“.

cd
git clone git://github.com/wasmitnetzen/spotibye.git
cd spotibye
git clone git://github.com/jlund/spotify-export.git
sudo apt-get install ruby1.9.1-de sqlite3-doc libsqlite3-dev

Jetzt geht man in den erstellten Ordner und fügt nach der Anleitung von @joshualund eine Datei namens pl_spot.txt ein, die die Spotify-URLs aller Lieder enthält:

  1. Open Spotify and go to the playlist that you want to export
  2. Select the tracks that you want to export (Ctrl-A or Cmd-A to Select All)
  3. Right-click on the selected tracks and choose „Copy Spotify URI“ from the menu
  4. Go to the text editor of your choice and Paste
  5. Save the file

Da das Ergebnis in einer Zeile vorliegt, trennt man diese auf, anschließend muss man die nur lokal vorhandenen Lieder und die online verfügbaren Lieder auftrennen:

sed "s/spotify/\\`echo -e '\n\rspotify'`/g" pl_spot.txt | grep ":track" > pl_spot_cloud.txt
sed "s/spotify/\\`echo -e '\n\rspotify'`/g" pl_spot.txt | grep ":local" > pl_spot_local.txt

Jetzt ruft man spotify-export auf. Die API zeigt sich etwas störrisch (und ist auch öfter für kurze Zeit offline) und das Programm bricht bei einem Fehler direkt ab. Da es aber die Ergebnisse lokal abspeichert, kann man es einfach in einer Schleife aufrufen, die, wenn es alle Links erfolgreich verarbeitet hat, abbricht. Das Ergebnis speichert man dann einmal ab und erleichtert es eben noch um die Nummern am Anfang mit etwas awk-Magie.

until spotify-export/bin/spotify-export.rb pl_spot_cloud.txt; do true; done
spotify-export/bin/spotify-export.rb pl_spot_cloud.txt | awk '{$1=""; print $0}' > pl_ta.txt

Damit haben wir eine Playlist in der Form

Titel -- Interpret -- Album

erzeugt.

Plaintext zu Playlist

Um diese dann weiter zu verarbeiten, habe ich auf Amarok zurückgegriffen. Dazu habe ich ein QtScript geschrieben, dass die eben erzeugte Plaintext-Datei einliest, nach dem Titel und Interpret in der Datenbank sucht und bei einem oder mehreren Fund/en werden sie zur aktuellen Playliste hinzugefügt. Hier ist manchmal noch etwas Handarbeit nötig, da so eventuell mehrere im Besitz befindliche Versionen eines Liedes hinzugefügt werden. Da ich mit QtScript irgendwie nicht zu Rande kam, muss man noch etwas am Code rumfummeln. Falls mir jemand sagen kann, wie man bspw. einen Dateiauswahldialog macht oder vor allem in Dateien schreibt, nur zu.

Man hole sich also den Ordner amarok-spotibye aus dem Github-Repository (sollte oben schon geschehen sein) und kopiere ihn in den richtigen Ordner. Dann editiere man die benöitgten Playlisten:

cp amarok-spotibye ~/.kde/share/apps/amarok/scripts
nano ~/.kde/share/apps/amarok/scripts/amarok-spotibye/main.js

Bei var playlist und playlist_local müssen die oben erzeugten Dateien eingetragen werden, also wahrscheinlich ($USER ersetzen):

var playlist = "/home/$USER/spotibye/pl_ta.txt";
var playlist_local = "/home/$USER/spotibye/pl_spot_local.txt";

Amarok starten, eventuell gefüllte Playlist leeren, dann Einstellungen -> Amarok einrichten -> Skripte -> „Amarok-Spotibye“ und „Amarok Script Console“ auswählen“. Es öffnet sich die Amarok Script Console. Darin führt man folgendes aus:

Amarok.runScript("Spotibye");

Jetzt kann man die Playliste speichern und schließlich als .m3u exportieren.

Titel, die nicht gefunden werden, werden am Ende in einem Alert angezeigt geschrieben, die man dann weiterverarbeiten kann. Bei vielen alternativen Schreibweisen werden Titel auch mal nicht gefunden, ich suche schon so unscharf wie möglich. Falls da noch jemand einen Tipp hat, nur zu.
Wenn die fehlenden Titel dann gekauft wurden, muss man die Prozedur einfach nochmal wiederholen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.