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.
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.
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
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.