5 changed files with 123 additions and 18 deletions
@ -1,9 +1,12 @@ |
|||
bottle==0.12.16 |
|||
certifi==2019.3.9 |
|||
cffi==1.12.3 |
|||
chardet==3.0.4 |
|||
httplib2==0.12.3 |
|||
idna==2.8 |
|||
pycparser==2.19 |
|||
python-mpd2==1.0.0 |
|||
requests==2.21.0 |
|||
spotify-mpd-sync-weskerfoot==0.0.1 |
|||
spotipy==2.4.4 |
|||
urllib3==1.24.2 |
|||
|
@ -0,0 +1,94 @@ |
|||
# shows a user's playlists (need to be authenticated via oauth) |
|||
|
|||
from __future__ import print_function |
|||
import os |
|||
import spotipy.oauth2 as oauth2 |
|||
import spotipy |
|||
import queue |
|||
import threading |
|||
from bottle import route, run, response, request |
|||
|
|||
auth_token_queue = queue.Queue() |
|||
|
|||
@route('/') |
|||
def index(): |
|||
auth_code = request.query.code |
|||
if auth_code: |
|||
auth_token_queue.put(auth_code) |
|||
return "It worked! You may close this tab now" |
|||
|
|||
return "Oops! Something went wrong. Please file a bug report" |
|||
|
|||
def run_server(): |
|||
task = threading.Thread(target=lambda : run(host='localhost', port=8080)) |
|||
task.start() |
|||
|
|||
def prompt_for_user_token(username, scope=None, client_id = None, |
|||
client_secret = None, redirect_uri = None, cache_path = None): |
|||
""" |
|||
prompts the user to login if necessary and returns |
|||
the user token suitable for use with the spotipy.Spotify |
|||
constructor |
|||
|
|||
Parameters: |
|||
|
|||
- username - the Spotify username |
|||
- scope - the desired scope of the request |
|||
- client_id - the client id of your app |
|||
- client_secret - the client secret of your app |
|||
- redirect_uri - the redirect URI of your app |
|||
- cache_path - path to location to save tokens |
|||
""" |
|||
|
|||
if not client_id: |
|||
client_id = os.getenv('SPOTIPY_CLIENT_ID') |
|||
|
|||
if not client_secret: |
|||
client_secret = os.getenv('SPOTIPY_CLIENT_SECRET') |
|||
|
|||
if not redirect_uri: |
|||
redirect_uri = os.getenv('SPOTIPY_REDIRECT_URI') |
|||
|
|||
if not client_id: |
|||
print(''' |
|||
You need to set your Spotify API credentials. You can do this by |
|||
setting environment variables like so: |
|||
|
|||
export SPOTIPY_CLIENT_ID='your-spotify-client-id' |
|||
export SPOTIPY_CLIENT_SECRET='your-spotify-client-secret' |
|||
export SPOTIPY_REDIRECT_URI='your-app-redirect-url' |
|||
|
|||
Get your credentials at |
|||
https://developer.spotify.com/my-applications |
|||
''') |
|||
raise spotipy.SpotifyException(550, -1, 'no credentials set') |
|||
|
|||
cache_path = cache_path or ".cache-" + username |
|||
sp_oauth = oauth2.SpotifyOAuth(client_id, client_secret, redirect_uri, |
|||
scope=scope, cache_path=cache_path) |
|||
|
|||
# try to get a valid token for this user, from the cache, |
|||
# if not in the cache, the create a new (this will send |
|||
# the user to a web page where they can authorize this app) |
|||
|
|||
token_info = sp_oauth.get_cached_token() |
|||
|
|||
if not token_info: |
|||
auth_url = sp_oauth.get_authorize_url() |
|||
try: |
|||
import webbrowser |
|||
webbrowser.open(auth_url) |
|||
print("Opened %s in your browser" % auth_url) |
|||
except: |
|||
print("Please navigate here: %s" % auth_url) |
|||
|
|||
response = "localhost:8080?code=%s" % auth_token_queue.get() |
|||
auth_token_queue.task_done() |
|||
|
|||
code = sp_oauth.parse_response_code(response) |
|||
token_info = sp_oauth.get_access_token(code) |
|||
# Auth'ed API request |
|||
if token_info: |
|||
return token_info['access_token'] |
|||
else: |
|||
return None |
Loading…
Reference in new issue