diff --git a/app.py b/app.py index 80e4e42..a614a75 100644 --- a/app.py +++ b/app.py @@ -1,6 +1,5 @@ from flask import Flask, render_template, request, Response from flask_api import status -from spot import * import sys app = Flask(__name__) @@ -27,79 +26,5 @@ def privacy(): def fourohfour(e): return render_template('404.html') -'''# ndsspotify stuff -@app.route('/play', methods=["POST"]) -def flaskPlay(): - print(request.headers) - if request.headers['Auth'] == passwd: - spotPP() - return Response('{"status":"Success"}', status=200, mimetype='application/json') - else: - return Response('{"status":"Incorrect password"}', status=401, mimetype='application/json') - -@app.route('/next', methods=["POST"]) -def flaskNext(): - if request.headers['Auth'] == passwd: - spotNE() - return Response('{"status":"Success"}', status=200, mimetype='application/json') - else: - return Response('{"status":"Incorrect password"}', status=401, mimetype='application/json') - -@app.route('/prev', methods=["POST"]) -def flaskPrev(): - if request.headers['Auth'] == passwd: - spotPR() - return Response('{"status":"Success"}', status=200, mimetype='application/json') - else: - return Response('{"status":"Incorrect password"}', status=401, mimetype='application/json') - -@app.route('/shuf', methods=["POST"]) -def flaskShuf(): - if request.headers['Auth'] == passwd: - spotSF() - return Response('{"status":"Success"}', status=200, mimetype='application/json') - else: - return Response('{"status":"Incorrect password"}', status=401, mimetype='application/json') - -@app.route('/repr', methods=["POST"]) -def flaskRepr(): - if request.headers['Auth'] == passwd: - spotRE() - return Response('{"status":"Success"}', status=200, mimetype='application/json') - else: - return Response('{"status":"Incorrect password"}', status=401, mimetype='application/json') - -@app.route('/sear', methods=["POST"]) -def flaskSear(): - if request.headers['Auth'] == passwd: - spotSE("track", request.headers['Search-Text']) - return Response('{"status":"Success"}', status=200, mimetype='application/json') - else: - return Response('{"status":"Incorrect password"}', status=401, mimetype='application/json') - -@app.route('/like', methods=["POST"]) -def flaskLike(): - if request.headers['Auth'] == passwd: - spotLS() - return Response('{"status":"Success"}', status=200, mimetype='application/json') - else: - return Response('{"status":"Incorrect password"}', status=401, mimetype='application/json') - -@app.route('/disl', methods=['POST']) -def flaskDisl(): - if request.headers['Auth'] == passwd: - spotRL() - return Response('{"status":"Success"}', status=200, mimetype='application/json') - else: - return Response('{"status":"Incorrect password"}', status=401, mimetype='application/json') - -@app.route('/volu', methods=["POST"]) -def flaskVolu(): - if request.headers['Auth'] == passwd: - spotVL(request.headers['Volume']) - return Response('{"status":"Success"}', status=200, mimetype='application/json') - else: - return Response('{"status":"Incorrect password"}', status=401, mimetype='application/json')''' - if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) \ No newline at end of file diff --git a/spot.py b/spot.py deleted file mode 100644 index b2e7e1b..0000000 --- a/spot.py +++ /dev/null @@ -1,604 +0,0 @@ -import argparse -import requests -import json as jsn -import urllib.request -import sys -import time -import traceback - -''' -create file called secrets in same folder as spot.py with app token on line 1 and refresh token on line 2 -''' - -def spotAuth(): - f = open(sys.path[0]+"/secrets", "r") - appToken = f.readline()[:-1] - refreshToken = f.readline()[:-1] - tokenURL = "https://accounts.spotify.com/api/token" - - headers = {"Authorization": "Basic "+appToken} - payload = {"grant_type": "refresh_token", "refresh_token": refreshToken} - r = requests.post(tokenURL, headers=headers, data=payload) - - json = r.json() - accessToken = json["access_token"] - return accessToken - - -def spotDevice(headers, caller): - r = requests.get("https://api.spotify.com/v1/me/player/devices", headers=headers) - if r.status_code != 200: - print('Invalid permissions!') - quit() - json = r.json() - deviceid = None - if len(json["devices"]) == 0: - print("No playback devices") - quit() - elif len(json["devices"]) == 1: - deviceid = json["devices"][0]["id"] - devicename = json["devices"][0]["name"] - if caller == "dev": - print("\033[1m\033[92m"+devicename+"\033[0m is only device.") - quit() - elif caller == "vol" or caller == "prev" or caller == "next" or caller == "np" or caller == "play": - for i in json["devices"]: - if i["is_active"] == True: - deviceid = i["id"] - devicename = i["name"] - if deviceid == None: - print("No active device, defaulting to 0") - deviceid = json["devices"][0]["id"] - devicename = json["devices"][0]["name"] - elif caller == "dev": - j = 0 - devicedict = {} - for i in json["devices"]: - if i["is_active"] == False: - print("["+str(j)+"] "+i["name"]) - devicedict.update( {j: [i["name"], i["id"]]}) - j += 1 - choice = input("Choose device: ") - try: - choice = int(choice) - except: - quit() - deviceid = devicedict[choice][1] - devicename = devicedict[choice][0] - else: - for i in range(0,len(json["devices"])): - print("["+str(i)+"] "+json["devices"][i]["name"]) - choice = input("Choose device: ") - try: - choice = int(choice) - except: - quit() - deviceid = json["devices"][choice]["id"] - devicename = json["devices"][choice]["name"] - - devicedict = {} - devicedict.update( {"deviceid": deviceid}) - devicedict.update( {"devicename": devicename}) - return devicedict - - -def spotSK(seekTime): - accessToken = spotAuth() - headers = {"Authorization": "Bearer "+accessToken} - - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - print("Nothing playing") - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - json = r.json() - durationMS = int(json["item"]["duration_ms"]) - seekMS = durationMS*(seekTime/4) - seekMS = round(seekMS) - - r = requests.put("https://api.spotify.com/v1/me/player/seek?position_ms="+str(seekMS), headers=headers) - if r.status_code == 204: - print("Seeking to "+str((seekMS/1000)/60)+" minutes") - else: - print("Error: HTTP"+str(r.status_code)) - return r.status_code - - -def spotNP(imgcatBool, timeBool): - accessToken = spotAuth() - headers = {"Authorization": "Bearer "+accessToken} - - dev = spotDevice(headers, "np") - devicename = dev["devicename"] - - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - print("Nothing playing") - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - try: - json = r.json() - playing = json["is_playing"] - except: - playing = False - - if playing == False: - text = "paused" - elif playing == True: - text = "playing" - - title = json["item"]["name"] - artist = json["item"]["album"]["artists"][0]["name"] - imgurl = json["item"]["album"]["images"][1]["url"] - durationSec = (json["item"]["duration_ms"])/1000 - currentSec = (json["progress_ms"])/1000 - print("\033[95m\033[1m"+title+"\033[0m by ", end='') - print("\033[94m\033[1m"+artist+"\033[0m is "+text+" on ", end='') - print("\033[92m\033[1m"+devicename+"\033[0m") - if (timeBool): - print(str(round(currentSec//60))+":"+(str(round(currentSec%60))).zfill(2)+"/"+str(round(durationSec//60))+":"+(str(round(durationSec%60)).zfill(2))) - return r.status_code - - -def spotSE(context, query): - print(query) - accessToken = spotAuth() - headers = {"Authorization": "Bearer "+accessToken} - payload = {'type': context, 'q': query} - - r = requests.get("https://api.spotify.com/v1/search", params=payload, headers=headers) - if r.status_code == 204: - print("No results") - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - json = r.json() - try: - if context == "album": - uri = json["albums"]["items"][0]["uri"] - name = json["albums"]["items"][0]["name"] - elif context == "track": - uri = json["tracks"]["items"][0]["uri"] - name = json["tracks"]["items"][0]["name"] - except: - print("Search returned no results") - quit() - - dev = spotDevice(headers, "search") - - if context == "album": - payload = {"context_uri": uri} - else: - payload = {"uris": [uri]} - r = requests.put("https://api.spotify.com/v1/me/player/play?device_id="+dev["deviceid"], headers=headers, data=jsn.dumps(payload)) - if r.status_code == 204: - print("Playing "+context+"\033[1m\033[95m "+name+"\033[0m on \033[1m\033[92m"+dev["devicename"]+"\033[0m.") - else: - print("Unable to play \033[1m\033[95m"+name+"\033[0m.") - return r.status_code - - -def spotSF(): - accessToken = spotAuth() - headers = {"Authorization": "Bearer "+accessToken} - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - print("No active playback session") - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - - r = requests.get("https://api.spotify.com/v1/me/player", headers=headers) - json = r.json() - shuf = json["shuffle_state"] - if shuf == True: - shuf = "false" - elif shuf == False: - shuf = "true" - - r = requests.put("https://api.spotify.com/v1/me/player/shuffle?state="+shuf, headers=headers) - return r.status_code - -def spotRE(): - accessToken = spotAuth() - headers = {"Authorization": "Bearer "+accessToken} - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - print("No active playback session") - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - - r = requests.get("https://api.spotify.com/v1/me/player", headers=headers) - json = r.json() - rep = json["repeat_state"] - if rep == "context": - rep = "off" - elif rep == "off": - rep = "context" - else: - rep = "off" - - r = requests.put("https://api.spotify.com/v1/me/player/repeat?state="+rep, headers=headers) - if r.status_code == 204: - r = requests.get("https://api.spotify.com/v1/me/player", headers=headers) - json = r.json() - currep = json["repeat_state"] - else: - print("Unable to toggle repeat.") - return r.status_code - - -def spotPR(): - accessToken = spotAuth() - headers = {"Authorization": "Bearer "+accessToken} - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - print("No active playback session") - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - json = r.json() - trackname = json["item"]["name"] - trackid = json["item"]["id"] - - dev = spotDevice(headers, "prev") - - r = requests.post("https://api.spotify.com/v1/me/player/previous", headers=headers) - if r.status_code == 204: - time.sleep(0.5) - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - print("No active playback session") - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - json = r.json() - trackname = json["item"]["name"] - trackid = json["item"]["id"] - else: - print("Unable to play \033[1m\033[95m"+trackname+"\033[0m.") - return r.status_code - - -def spotNE(): - accessToken = spotAuth() - headers = {"Authorization": "Bearer "+accessToken} - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - print("No active playback session") - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - json = r.json() - trackname = json["item"]["name"] - trackid = json["item"]["id"] - - dev = spotDevice(headers, "next") - - r = requests.post("https://api.spotify.com/v1/me/player/next", headers=headers) - if r.status_code == 204: - time.sleep(0.5) - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - print("No active playback session") - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - json = r.json() - trackname = json["item"]["name"] - trackid = json["item"]["id"] - else: - print("Unable to play \033[1m\033[95m"+trackname+"\033[0m.") - return r.status_code - - -def spotPP(): - accessToken = spotAuth() - headers = {"Authorization": "Bearer "+accessToken} - - dev = spotDevice(headers, "play") - - r = requests.get("https://api.spotify.com/v1/me/player", headers=headers) - try: - json = r.json() - playing = json["is_playing"] - except: - playing = False - - if playing == False: - r = requests.put("https://api.spotify.com/v1/me/player/play?device_id="+dev["deviceid"], headers=headers) - if r.status_code == 204: - time.sleep(0.5) - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - json = r.json() - trackname = json["item"]["name"] - trackid = json["item"]["id"] - elif playing == True: - r = requests.put("https://api.spotify.com/v1/me/player/pause?device_id="+dev["deviceid"], headers=headers) - if r.status_code == 204: - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - quit() - elif r.status_code != 200: - quit() - json = r.json() - trackname = json["item"]["name"] - trackid = json["item"]["id"] - return "Success" - - -def spotLS(): - accessToken = spotAuth() - headers = {"Authorization": "Bearer "+accessToken} - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - print("Nothing playing") - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - json = r.json() - trackname = json["item"]["name"] - trackid = json["item"]["id"] - - headers = {"Authorization": "Bearer "+accessToken, "Accept": "application/json", "Content-Type": "application/json"} - r = requests.put("https://api.spotify.com/v1/me/tracks?ids="+trackid, headers=headers) - if r.status_code == 200: - print("Added \033[1m\033[95m"+json["item"]["name"]+"\033[0m to Liked Songs") - else: - print("An error occured, fun") - return r.status_code - -def spotRL(): - accessToken = spotAuth() - headers = {"Authorization": "Bearer "+accessToken} - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - print("Nothing playing") - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - json = r.json() - trackname = json["item"]["name"] - trackid = json["item"]["id"] - - headers = {"Authorization": "Bearer "+accessToken, "Accept": "application/json", "Content-Type": "application/json"} - r = requests.delete("https://api.spotify.com/v1/me/tracks?ids="+trackid, headers=headers) - if r.status_code == 200: - print("Removed \033[1m\033[95m"+json["item"]["name"]+"\033[0m from Liked Songs") - else: - print("An error occured, fun") - - -def spotAP(): - accessToken = spotAuth() - headers = {"Authorization": "Bearer "+accessToken} - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - print("Nothing playing") - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - json = r.json() - print("Add \033[1m\033[95m"+json["item"]["name"]+"\033[0m to:") - trackname = json["item"]["name"] - trackuri = json["item"]["uri"] - trackuri.replace(":", "%3A") - - r = requests.get("https://api.spotify.com/v1/me", headers=headers) - json = r.json() - userid = json["id"] - - r = requests.get("https://api.spotify.com/v1/me/playlists?limit=50", headers=headers) - json = r.json() - j = 0 - playdict = {} - for i in json["items"]: - if userid == i["owner"]["display_name"]: - print("["+str(j)+"] "+i["name"]) - playdict.update( {j: [i["name"], i["id"]]}) - j += 1 - elif i["collaborative"] == True: - print("["+str(j)+"] "+i["name"]) - playdict.update( {j: [i["name"], i["id"]]}) - j += 1 - choice = input("Select Playlist: ") - try: - choice = int(choice) - except: - quit() - playlistid = playdict[choice][1] - playlistname = playdict[choice][0] - - headers = {"Authorization": "Bearer "+accessToken, "Accept": "application/json", "Content-Type": "application/json"} - r = requests.post("https://api.spotify.com/v1/playlists/"+playlistid+"/tracks?uris="+trackuri, headers=headers) - if r.status_code == 201: - print("Successfully added \033[1m\033[95m"+trackname+"\033[0m to \033[1m\033[96m"+playlistname+"\033[0m") - else: - print("Unable to add song to specified playlist. Do you have access to do so?") - return r.status_code - - -def spotPD(): - accessToken = spotAuth() - headers = {"Authorization": "Bearer "+accessToken} - - dev = spotDevice(headers, "dev") - - payload = {"device_ids":[dev["deviceid"]]} - r = requests.put("https://api.spotify.com/v1/me/player", headers=headers, data=jsn.dumps(payload)) - if r.status_code == 204: - time.sleep(0.5) - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - print("No active playback session") - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - json = r.json() - trackname = json["item"]["name"] - trackid = json["item"]["id"] - print("Playing \033[1m\033[95m"+trackname+"\033[0m on \033[1m\033[92m"+dev["devicename"]+"\033[0m.") - elif r.status_code == 202: - time.sleep(2) - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - print("No active playback session") - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - json = r.json() - trackname = json["item"]["name"] - trackid = json["item"]["id"] - print("Playing \033[1m\033[95m"+trackname+"\033[0m on \033[1m\033[92m"+dev["devicename"]+"\033[0m.") - else: - print(r.status_code) - print("Unable to transfer playback.") - - -def spotRP(): - accessToken = spotAuth() - headers = {"Authorization": "Bearer "+accessToken} - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - print("Nothing playing") - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - json = r.json() - print("Remove \033[1m\033[95m"+json["item"]["name"]+"\033[0m from:") - trackname = json["item"]["name"] - trackuri = json["item"]["uri"] - - r = requests.get("https://api.spotify.com/v1/me", headers=headers) - json = r.json() - userid = json["id"] - - r = requests.get("https://api.spotify.com/v1/me/playlists?limit=50", headers=headers) - json = r.json() - j = 0 - playdict = {} - for i in json["items"]: - if userid == i["owner"]["display_name"]: - print("["+str(j)+"] "+i["name"]) - playdict.update( {j: [i["name"], i["id"]]}) - j += 1 - elif i["collaborative"] == True: - print("["+str(j)+"] "+i["name"]) - playdict.update( {j: [i["name"], i["id"]]}) - j += 1 - choice = input("Select Playlist: ") - try: - choice = int(choice) - except: - quit() - playlistid = playdict[choice][1] - playlistname = playdict[choice][0] - - headers = {"Authorization": "Bearer "+accessToken, "Accept": "application/json", "Content-Type": "application/json"} - payload = { "tracks": [{ "uri": trackuri }] } - r = requests.delete("https://api.spotify.com/v1/playlists/"+playlistid+"/tracks", headers=headers, data=jsn.dumps(payload)) - if r.status_code == 200: - print("If \033[1m\033[95m"+trackname+"\033[0m was in \033[1m\033[96m"+playlistname+"\033[0m it has been removed.") - else: - print("Unable to remove song from specified playlist. Do you have access to do so?") - return r.status_code - - -def spotPL(): - accessToken = spotAuth() - headers = {"Authorization": "Bearer "+accessToken} - print("Play:") - - r = requests.get("https://api.spotify.com/v1/me/playlists?limit=50", headers=headers) - json = r.json() - j = 0 - playdict = {} - for i in json["items"]: - print("["+str(j)+"] "+i["name"]) - playdict.update( {j: [i["name"], i["id"]]}) - j += 1 - choice = input("Select Playlist: ") - try: - choice = int(choice) - except: - quit() - playlistid = playdict[choice][1] - playlistname = playdict[choice][0] - - dev = spotDevice(headers, "playlist play") - - payload = {"context_uri": "spotify:playlist:"+playlistid} - r = requests.put("https://api.spotify.com/v1/me/player/play?device_id="+dev["deviceid"], headers=headers, data=jsn.dumps(payload)) - if r.status_code == 204: - time.sleep(0.5) - r = requests.get("https://api.spotify.com/v1/me/player/currently-playing", headers=headers) - if r.status_code == 204: - print("No active playback session") - quit() - elif r.status_code != 200: - print("Error: HTTP"+str(r.status_code)) - quit() - json = r.json() - trackname = json["item"]["name"] - trackid = json["item"]["id"] - print("Playing \033[1m\033[95m"+trackname+"\033[0m on \033[1m\033[92m"+dev["devicename"]+"\033[0m.") - else: - print("Unable to play \033[1m\033[95m"+trackname+"\033[0m.") - return r.status_code - - -def spotVL(vol): - accessToken = spotAuth() - headers = {"Authorization": "Bearer "+accessToken} - - dev = spotDevice(headers, "vol") - - r = requests.get("https://api.spotify.com/v1/me/player", headers=headers) - print(r) - json = r.json() - curVol = json["device"]["volume_percent"] - curVol = int(curVol) - - if vol == "up": - vol = (curVol+10) - if vol > 100: - vol = 100 - elif vol == "down": - vol = (curVol-10) - if vol < 0: - vol = 0 - - r = requests.put("https://api.spotify.com/v1/me/player/volume?volume_percent="+str(vol), headers=headers) - if r.status_code == 204: - print("Volume on \033[1m\033[92m"+dev["devicename"]+"\033[0m set to "+str(vol)) - else: - json = r.json() - reason = json["error"]["reason"] - if reason == "VOLUME_CONTROL_DISALLOW": - print("Device \033[1m\033[92m"+dev["devicename"]+"\033[0m does not allow volume to be controlled through API") - else: - print("No active playback devices") - return r.status_code