Definindo credenciais do Spotify usando o Spotipy
Estou testando o spotipy com o python 2.7.10 pré-instalado no meu mac 10.10, especificamente [add_a_saved_track.py] [1] Aqui está o código copiado do github:
# Add tracks to 'Your Collection' of saved tracks
import pprint
import sys
import spotipy
import spotipy.util as util
scope = 'user-library-modify'
if len(sys.argv) > 2:
username = sys.argv[1]
tids = sys.argv[2:]
else:
print("Usage: %s username track-id ..." % (sys.argv[0],))
sys.exit()
token = util.prompt_for_user_token(username, scope)
if token:
sp = spotipy.Spotify(auth=token)
sp.trace = False
results = sp.current_user_saved_tracks_add(tracks=tids)
pprint.pprint(results)
else:
print("Can't get token for", username)
Registrei o aplicativo no developer.spotify.com/my-applications e recebi client_id e client_secret. Não sou um pouco claro sobre a seleção de redirect_uri, então defino como 'https://play.spotify.com/collection/songs'
Executando isso no terminal, recebo um erro que diz:
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'
Eu coloquei isso no meu código com o id, secret e url como strings, apenas seguindo as importações, mas acima do método util.prompt_for_user_token.
Isso causou um retorno:
File "add-track.py", line 8
export SPOTIPY_CLIENT_ID='4f...6'
^
SyntaxError: invalid syntax
Notei que o Text Wrangler não reconhece 'export' como uma palavra especial. E pesquisei docs.python.org por 'export' e não achei nada útil. O que é exportação? Como estou usando incorretamente?
Em seguida, tentei passar o client_id, client_secret e redirect_uri como argumentos no método util.prompt_for_user_token da seguinte maneira:
util.prompt_for_user_token(username,scope,client_id='4f...6',client_secret='xxx...123',redirect_uri='https://play.spotify.com/collection/songs')
Quando tentei isso, é o que acontece no terminal:
User authentication requires interaction with your
web browser. Once you enter your credentials and
give authorization, you will be redirected to
a url. Paste that url you were directed to to
complete the authorization.
Opening https://accounts.spotify.com/authorize?scope=user-library-modify&redirect_uri=https%3A%2F%2Fplay.spotify.com%2Fcollection%2Fsongs&response_type=code&client_id=4f...6 in your browser
Enter the URL you were redirected to:
eu entreihttps://play.spotify.com/collection/songs e então recebi este rastreio:
Traceback (most recent call last):
File "add-track.py", line 21, in <module>
token = util.prompt_for_user_token(username, scope, client_id='4f...6', client_secret='xxx...123', redirect_uri='https://play.spotify.com/collection/songs')
File "/Library/Python/2.7/site-packages/spotipy/util.py", line 86, in prompt_for_user_token
token_info = sp_oauth.get_access_token(code)
File "/Library/Python/2.7/site-packages/spotipy/oauth2.py", line 210, in get_access_token
raise SpotifyOauthError(response.reason)
spotipy.oauth2.SpotifyOauthError: Bad Request
Parece que estou faltando alguma coisa, talvez outra parte do Spotipy precise ser importada ou algum outro módulo python. Parece que estou perdendo a peça que define as credenciais do cliente. Como faço isso? Eu sou bastante novo nisso (se isso não fosse óbvio). Por favor ajude.
UPDATE: Alterei redirect_uri para localhost: 8888 / callback. Isso faz com que uma guia do Firefox seja aberta com um erro - "incapaz de se conectar ao servidor". (Como não tenho um servidor em execução. Pensei em instalar o node.js como no tutorial da API da Web do Spotify, mas ainda não o tenho). O script python solicita que eu copie e cole o URL para o qual fui redirecionado. Mesmo que o FF não pudesse abrir uma página, consegui que isso funcionasse copiando ointeira URL incluindo o "code = BG ..." que segue localhost: 8888 / callback? Não tenho certeza se esta é uma configuração ideal, mas pelo menos funciona.
Importa se eu configuro o node.js ou não?