当前位置: 首页 > 知识库问答 >
问题:

Spotipy:如何将auth令牌传递给客户机

荣俊杰
2023-03-14

我正在尝试使用spotipy python库构建一个应用程序来访问spotify api。

我的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()

向用户发送网址。在用户说她/他已经授予权限后:从Web服务器获取身份验证代码并用于生成令牌。

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=点。Spotify(auth=“random_bullshit”)给了我同样的例外。我还尝试像这样传递标记auth=self。auth_token['access_token']具有相同的结果。文档中没有说明auth参数应该是什么,我也没有真正理解源代码。但我认为这表明auth=self。auth_token['access_token']是正确的做法。

谢谢

共有1个答案

万俟鸿波
2023-03-14

正如我在上次编辑auth=self.auth_token['access_token']是正确的事情,我只是在其中有一个拼写错误。无论如何,由于文档没有说很多关于auth参数的信息,这可能会对某些人有所帮助。

 类似资料:
  • 我想使用各种字段,如客户令牌,客户ID等在每个会话中创建的沃森助手v2使用nodejs。 我可以直接在createSession函数中传递它,还是需要创建一个实体或意图,以便它传入Watson Assistant?

  • 我正在尝试访问授权服务器,该服务器在用户提供用户名和密码时发出短期访问令牌和长期刷新令牌。 < li >客户端是应该在每次调用API时将刷新令牌与访问令牌一起传递,还是应该仅在从API收到访问令牌已过期的错误代码时才传递刷新令牌? < li >刷新令牌过期后,什么类型的错误代码会传回客户端?这意味着客户端需要通过再次传递用户名和密码来请求新的访问令牌。

  • 我正在使用firebase auth REST api进行身份验证;这部分工作正常,因为我可以登录/注册用户,并且可以返回和auth。 但是如何使用包将传递给cloud firestore请求?我想写到一个集合:

  • 我正在使用PyJWT库(导入jwt)库生成用于身份验证的JSON web令牌。 最初的设计让我们通过URL传入令牌,比如http://example.net?token=EYKDFKDFKDNDFK... 但是,使用此解决方案,似乎任何查看URL中的令牌的人都可以使用此令牌访问站点。

  • 我正致力于实现推送通知,出现在更改到Firebase的文件。我使用的是反应原生Firebase模块。我的google云功能会侦听到对火力还原的更改,然后通过Firebase-admin发送消息。 谷歌的参考表明,你可以指定一个单一的设备来发送消息: 客户端在我的反应本地应用程序中,我使用获得令牌: 我是否必须将google cloud消息传递令牌存储在异步存储以外的其他位置,或者是否有办法在我的g

  • 我正在使用springdoc(v1.5.9)为API生成虚张声势定义。在Swagger UI内部进行身份验证并执行安全方法后,Spring Boot应用程序接收到的http请求没有身份验证头。我已经通过JS调试器确认Swagger UI接收并存储了有效的身份验证令牌。 下面是HTTP请求、显示定义/应用于该方法的安全方案的Swagger api-docs、springdoc配置和控制器。 我需要如