Spotify-API ansprechen

In diesem Kapitel lernen Sie, wie Sie mit Python die Spotify API ansprechen und sowohl Daten von dort ziehen und Songs abspielen.

Dieses Tutorial setzt voraus, dass Sie einen Bezahlaccount bei Spotify haben. Nur mit diesem können Sie die Spotify Connect Funktion nutzen, die es erlaubt, Musik auf anderen Geräten abzuspielen.

Spotipy installieren

Die Installation von spotipy machen Sie am besten auch in einem virtuellen Python-Environment. Passen Sie den Pfad entsprechend an:

1./venv/bin/pip install spotipy

Spotify für den Zugriff mit Python vorbereiten

Folgen Sie dem Tutorial für Spotipy, einem Python-Paket für den Zugriff auf die Web API von Spotify.

Auf einem Laptop mit Bildschirm und Browser funktioniert auch Schritt 3 des Tutorials, weil Sie nach dem Start des Python-Skripts auf eine Webseite geleitet werden. Dort können Sie mit der Maus den Zugriff auf die API erlauben.

Wenn Sie allerdings mit einem Computer ohne Bildschirm, also headless unterwegs sind, müssen Sie diesen Schritt anders tun.

Authentifizierung mit einem Raspberry ohne Browser

Erstellen Sie zunächst im Ordner Codeprojekte einen neuen Ordner spotify-ansprechen.

1cd Codeprojekte
2mkdir spotify-ansprechen
3cd spotify-ansprechen

Erstellen Sie nun eine neue Datei auth.py mit dem folgenden Code:

 1import spotipy
 2from spotipy.oauth2 import SpotifyOAuth
 3
 4sp = SpotifyOAuth(
 5    client_id="YOUR_CLIENT_ID",
 6    client_secret="YOUR_CLIENT_SECRET",
 7    redirect_uri="http://127.0.0.1:5000",
 8    scope="user-library-read user-modify-playback-state user-read-playback-state streaming"
 9)
10
11# This will print a URL
12auth_url = sp.get_authorize_url()
13print(f"Please visit this URL: {auth_url}")
14
15# After authorizing, you'll be redirected to a URL
16# Copy the entire redirect URL and paste it here
17response = input("Paste the redirect URL here: ")
18
19# Get the authorization code from the URL
20code = sp.parse_response_code(response)
21token_info = sp.get_access_token(code)
22
23print("Authorization successful! Token cached.")

Führen Sie das Skript aus und klicken Sie auf die URL, die im Terminal angezeigt wird. Der Browser öffnet sich und führt Sie zu einer Seite, die nicht funktioniert. Das ist zu erwarten und macht nichts.

Kopieren Sie nun die URL aus dem Browser ins Terminal und bestätigen Sie die Eingabe. Wenn alles funktioniert, haben haben Sie anschließend eine neue Datei .cache im Verzeichnis spotify-ansprechen, die ein Token für den Zugriff auf die API enthält. Dieses wird ab jetzt immer wieder erneuert.

Beispiel für ein Access-Token (formatiert, ungültig gemacht):

1{
2  "access_token": "BQCNAscer7z-CL5XW-9BVleuOL1rrquuxHjV2k2VPwslByLHGdadflkjhlkjhqweruhadfihudlkfjhalkjhewr-6ah80k314RCMOVSRv-zrvy1Z4IV97RLdFoeQrPEgdLSs2TUp6qjDjvVM9Rd2P97_bcYU0EusDAIzYa0F15cY9H1mKhGpmE5nI25wGows", 
3  "token_type": "Bearer", 
4  "expires_in": 3600, 
5  "refresh_token": "ASDFGGASqwererhjsdgrzug8387fdkagdasdfjfER-1HuvkMgtwwr-Rv-HGeqwrhh23k42h234hasdfhadldsafjhfhfd-CphOxH1LYWTfB0H8H2Pw2_fByzk7izuBZWtc", 
6  "scope": "user-modify-playback-state user-read-playback-state streaming", 
7  "expires_at": 1765988751
8}

Wichtig: Wenn Sie den scope ändern, müssen Sie die Authentifizierung wie beschrieben wiederholen!

Auch wichtig: Das gespeicherte Token (access_token) muss später noch einmal in einer anderen Konfigurationsdatei eingetragen werden.

Gespeicherte Lieblingssongs auflisten

Das folgende Beispiel zeigt, ob Sie auf Ihren persönlichen Account mit Python zugreifen können:

 1import spotipy
 2from spotipy.oauth2 import SpotifyOAuth
 3
 4sp = spotipy.Spotify(auth_manager=SpotifyOAuth(
 5    client_id="YOUR_CLIENT_ID",
 6    client_secret="YOUR_CLIENT_SECRET",
 7    redirect_uri="http://127.0.0.1:5000",
 8    scope="user-library-read user-modify-playback-state user-read-playback-state streaming"
 9))
10
11results = sp.current_user_saved_tracks()
12for idx, item in enumerate(results['items']):
13    track = item['track']
14    print(idx, track['artists'][0]['name'], " – ", track['name'])

Das Ergebnis sollte eine Liste von zwanzig Songs sein, die Sie wiedererkennen, weil Sie sie mal gespeichert haben.

Audioausgabe auf dem Raspberry testen

Schließen Sie ein Audioausgabegerät an der Miniklinkenbuchse des Raspberrys an. Testen Sie, ob die Audioausgabe funktioniert:

1speaker-test -t wav

Sie sollten eine Frauenstimme “Front left” sagen hören. Wenn nicht, prüfen Sie, ob die Kopfhörerausgabe konfiguriert ist:

1sudo raspi-config

Den Raspberry zu einem Spotify Connect Device machen

Jetzt werden Sie den Raspberry zu einem Spotify Connect Device machen, damit Sie auch Audiodateien abspielen können. Das Projekt heißt Raspotify und kann auf der zugehörigen Homepage begutachtet werden. Wenn Sie mit den dort formulierten Bedingungen einverstanden sind, installieren Sie wie folgt:

1sudo apt-get -y install curl && curl -sL https://dtcooper.github.io/raspotify/install.sh | sh

Dienst überwachen und aktivieren

Raspotify läuft als Dienst. Überprüfen Sie den Status mit:

1sudo systemctl status raspotify

Wenn der Dienst nicht läuft, starten Sie ihn mit:

1sudo systemctl start raspotify

Der Dienst startet nicht automatisch bei jedem Neustart des Raspberry Pi. Es macht meiner Erfahrung nach keinen Sinn, ihn dauerhaft zu aktivieren, weil er nach längerer Zeit das Access-Token nicht mehr anzuerkennen scheint.

Daher prüfen Sie nach dem manuellen Starten den Status. Ggf. müssen Sie mit dem Aufruf der auth.py ein neues Token generieren und in die Konfigurationsdatei von Raspotify eintragen (siehe nächster Abschnitt).

Raspotify konfigurieren

Die Konfigurationsdatei von Raspotify finden Sie unter /etc/raspotify/conf. Öffnen Sie diese mit nano:

1sudo nano /etc/raspotify/conf

Tragen Sie in der Datei das Access Token ein, das Sie bei der Authentifizierung mit Python erhalten haben. Entfernen Sie außerdem das Kommentarzeichen # am Anfang der Zeile.

1LIBRESPOT_ACCESS_TOKEN=BQCNAscer7z-CL5XW-9BVleuOL1rrquuxHjV2k2VPwslByLHGdadflkjhlkjhqweruhadfihudlkfjhalkjhewr-6ah80k314RCMOVSRv-zrvy1Z4IV97RLdFoeQrPEgdLSs2TUp6qjDjvVM9Rd2P97_bcYU0EusDAIzYa0F15cY9H1mKhGpmE5nI25wGows

Speichern Sie die Datei mit STRG+O und beenden Sie den Editor mit STRG+X.

Starten Sie den Raspotify-Dienst neu, damit die Änderungen wirksam werden:

1sudo systemctl restart raspotify
Das Raspberry wird als Spotify Connect Device nur erkannt, wenn Sie das Token in der Konfigurationsdatei eingetragen haben.

Einen Song abspielen

Das folgende Python-Skript spielt einen Song auf dem Raspberry Pi ab.

 1import spotipy
 2from spotipy.oauth2 import SpotifyOAuth
 3import time
 4
 5sp = spotipy.Spotify(auth_manager=SpotifyOAuth(
 6    client_id="YOUR_CLIENT_ID",
 7    client_secret="YOUR_CLIENT_SECRET",
 8    redirect_uri="http://127.0.0.1:5000",
 9    scope="user-modify-playback-state user-read-playback-state streaming"
10))
11
12# Get available devices
13devices = sp.devices()
14print("Available devices:", devices)
15
16# Find your Raspberry Pi device
17pi_device_id = None
18for device in devices['devices']:
19    print(f"Device: {device['name']} - ID: {device['id']}")
20    if 'raspotify' in device['name'].lower() or 'raspberry' in device['name'].lower():
21        pi_device_id = device['id']
22        break
23
24if pi_device_id:
25    # FIRST: Transfer playback to activate the device
26    sp.transfer_playback(device_id=pi_device_id, force_play=False)
27    time.sleep(1)  # Give it a moment to activate
28
29    # Adjust volume if needed (0 to 100)
30    sp.volume(100)
31
32    # THEN: Start playing
33    sp.start_playback(uris=['spotify:track:4PTG3Z6ehGkBFwjybzWkR8'])
34    print("Playing on Raspberry Pi!")
35else:
36    print("Raspberry Pi device not found.")
37    print("Make sure Raspotify is running: sudo systemctl status raspotify")

Weiterführende Informationen

Weitere Informationen zur Spotify API und den Möglichkeiten mit Spotipy finden Sie in der offiziellen Dokumentation von Spotipy.

Außerdem gibt es ein Wiki für Raspotify, das weitere Konfigurationsmöglichkeiten beschreibt.

Zurück
Weiter