Spotipy: как передать клиенту токен авторизации
Я пытаюсь создать приложение, используя библиотеку pytipy для доступа к API spotify.
Мой код oauth выглядит следующим образом, и, кажется, он работает, за исключением инициализации клиента с правильным параметром auth.
self.sp_auth=spotipy.oauth2.SpotifyOAuth(secrets.sp_auth_id,
secrets.sp_auth_pw, secrets.sp_callback_url,
scope="playlist-modify-public user-library-read", state=state)
...
url = self.sp_auth.get_authorize_url()
отправить URL пользователю. после того, как пользователь сказал, что он / она дал разрешение: код авторизации выбирается с веб-сервера и используется для генерации токена.
self.auth_token=self.sp_auth.get_access_token(self.auth_code)
self.auth_token тогда выглядит так:
{'access_token' : 'BQD ... qE7K3PBZKB6iZFU3_4p',
'token_type' : 'Bearer',
'expires_in' : 3600,
'refresh_token' : 'AQCOS2Xo ... MK09ry7-a-fl61OwhuO1Q',
'scope' : 'playlist-modify-public user-library-read',
'expires_at' : 1548247835}
затем я инициализирую клиентский модуль spotipy следующим образом:
self.sp = spotipy.Spotify(auth=self.auth_token)
тогда я пробую следующее:
playlists = self.sp.current_user_playlists(limit=10)
что поднимает это исключение:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/spotipy/client.py", line 119, in _internal_call
r.raise_for_status()
File "/usr/local/lib/python3.6/dist-packages/requests/models.py", line 940, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/me/playlists?limit=10&offset=0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/telegram/ext/dispatcher.py", line 279, in process_update
handler.handle_update(update, self)
File "/usr/local/lib/python3.6/dist-packages/telegram/ext/callbackqueryhandler.py", line 143, in handle_update
return self.callback(dispatcher.bot, update, **optional_args)
File "spotify_playlist_bot_v2.py", line 140, in button_auth_done
User.data[user_id].msg_start(bot, update)
File "spotify_playlist_bot_v2.py", line 84, in msg_start
self.msg_choose_playlist()
File "spotify_playlist_bot_v2.py", line 90, in msg_choose_playlist
playlists = self.sp.current_user_playlists(limit=10)
File "/usr/local/lib/python3.6/dist-packages/spotipy/client.py", line 355, in current_user_playlists
return self._get("me/playlists", limit=limit, offset=offset)
File "/usr/local/lib/python3.6/dist-packages/spotipy/client.py", line 146, in _get
return self._internal_call('GET', url, payload, kwargs)
File "/usr/local/lib/python3.6/dist-packages/spotipy/client.py", line 124, in _internal_call
headers=r.headers)
spotipy.client.SpotifyException: http status: 400, code:-1 - https://api.spotify.com/v1/me/playlists?limit=10&offset=0:
Only valid bearer authentication supported
Похоже, я неправильно передаю токен клиенту spotipy. Например self.sp = spotipy.Spotify(auth="random_bullshit")
дает мне то же исключение. Я также попытался передать токен, как это auth=self.auth_token['access_token']
с тем же результатом. В документации ничего не сказано о том, каким должен быть параметр auth, и я не совсем понимаю исходный код. Но я бы сказал, что это говорит о том, что auth=self.auth_token['access_token']
это правильная вещь.
Спасибо!
1 ответ
Как я уже предлагал в моем последнем редактировании auth=self.auth_token['access_token']
была правильная вещь, у меня была только опечатка в этом. В любом случае, поскольку в документации мало сказано о параметре auth, это может помочь некоторым людям.