Last Updated or created 2023-06-30
Spotify version
Next to do: Lasercut a wooden cube with better lettering.
Run the python part on a server
and
First export some API credentials
export SPOTIPY_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx export SPOTIPY_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx export SPOTIPY_REDIRECT_URI="http://localhost:8080/callback"
Code below:
from flask import Flask, request, redirect from requests_oauthlib import OAuth2Session from requests.auth import HTTPBasicAuth import requests import json import spotipy from spotipy.oauth2 import SpotifyOAuth from pprint import pprint from time import sleep import spotipy.util as util import sys import paho.mqtt.client as mqttClient import time import os import subprocess Connected = False broker_address = "MQTTSERVER" port = 1883 def on_connect(client, userdata, flags, rc): if rc == 0: print("Connected to broker") global Connected Connected =True else: print("Connection failed") def on_message(client, userdata, message): print (message.payload) myurl = 'spotify:playlist:' + str(message.payload.decode()) results = sp.start_playback(context_uri=myurl, offset={"position": 1}) client = mqttClient.Client("PythonSpotifyGenreCube") client.on_connect = on_connect client.on_message = on_message client.connect(broker_address, port=port,keepalive=60 ) client.loop_start() time.sleep(4) # Wait for connection setup to complete client.subscribe('spotify/playlist') #client.loop_stop() #Stop loop #while Connected != True: # client.loop() # time.sleep(0.1) # print("test") # client.subscribe('spotify/playlist') app = Flask(__name__) AUTH_URL = 'https://accounts.spotify.com/authorize' TOKEN_URL = 'https://accounts.spotify.com/api/token' REDIRECT_URI = 'http://localhost:8080/callback' CLIENT_ID = "xxxxxxxxxxxxxxxxxx" CLIENT_SECRET = "xxxxxxxxxxxxxxxxxxxxx" SCOPE = [ "user-read-email", "playlist-read-collaborative" ] @app.route("/login") def login(): spotify = OAuth2Session(CLIENT_ID, scope=SCOPE, redirect_uri=REDIRECT_URI) authorization_url, state = spotify.authorization_url(AUTH_URL) return redirect(authorization_url) @app.route("/callback", methods=['GET']) def callback(): code = request.args.get('code') res = requests.post(TOKEN_URL, auth=HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET), data={ 'grant_type': 'authorization_code', 'code': code, 'redirect_uri': REDIRECT_URI }) return json.dumps(res.json()) username = "fashice" scope = "user-read-playback-state,user-modify-playback-state,playlist-read-private" util.prompt_for_user_token(username,scope,client_id='xxxxxxxxxxxxxxxxxxxxx',client_secret='xxxxxxxxxxxxxxxxxxxxxxxxxxxx',redirect_uri='http://localhost:8080/callback') sp = spotipy.Spotify(client_credentials_manager=SpotifyOAuth(scope=scope)) # Shows playing devices res = sp.devices() pprint(res) # Change track #sp.start_playback(uris=['spotify:track:6gdLoMygxxxxxxxxxxxxxxx']) #results = sp.start_playback(context_uri=myurl, offset={"position": 1}) ## Change volume #sp.volume(100) #sleep(2) #sp.volume(50) #sleep(2) #sp.volume(100) # playlists = sp.user_playlists(username) #for playlist in playlists['items']: # print(playlist['name']) playlists = sp.current_user_playlists() #print (playlists) for playlist in playlists['items']: print(playlist['id'] + ' ' + playlist['name']) #if __name__ == '__main__': # app.run(port=8080,debug=True) while Connected != True: time.sleep(0.1) client.subscribe('spotify/playlist') try: while True: time.sleep(1) except KeyboardInterrupt: print ("exiting") client.disconnect() client.loop_stop()