Spotify API令牌范围问题

时间:2018-08-11 00:33:31

标签: spotify

我已经来过一段时间了,想看看是否有人知道我可能做错了什么。我正在尝试使用提供的Spotify Web API将歌曲添加到播放列表中。根据此https://developer.spotify.com/documentation/web-api/reference/playlists/add-tracks-to-playlist/上的文档,我需要确定用户的范围。

“将曲目添加到当前用户的私人播放列表(包括协作播放列表)需要playlist-modify-private作用域”,我以协作方式创建了播放列表,并且使用个人帐户的登录凭据访问了我创建的该播放列表。所有这些都在同一登录名下。

我发现的是,在我尝试添加歌曲时,未将我的范围添加到我的令牌中,因此我的令牌导致403错误。 这就是通话的样子

https://accounts.spotify.com/authorize/?client_id=mynumber&response_type=code&scope=playlist-modify-private&redirect_uri=http:%2F%2Flocalhost:55141/Home/GetToken/

这是使用授权获取正确令牌的文档。 https://accounts.spotify.com/authorize/?client_id=894400c20b884591a05a8f2432cca4f0&response_type=code&scope=playlist-modify-private&redirect_uri=http:%2F%2Flocalhost:55141/Home/GetToken/

如果我在这里获得开发支持,则更多 https://developer.spotify.com/documentation/web-api/reference/playlists/add-tracks-to-playlist/ 然后单击绿色的try按钮,然后请求一个新的令牌,该令牌将起作用。

最底线是我的请求如何不接受我的范围请求。有任何想法吗?

谢谢

1 个答案:

答案 0 :(得分:0)

要获取具有特定范围的令牌,您需要转到authorize端点并获取codecode是您希望能够http发布到端点https://accounts.spotify.com/api/token并获得具有所需作用域的令牌的工具。您只需在浏览器中粘贴这样的网址即可获取code ...

https://accounts.spotify.com/authorize?client_id=<client_id>&response_type=code&scope=streaming%20user-read-email%20user-read-private&redirect_uri=<redirect_uri>

如果有多个作用域,则仅在两个作用域之间添加%20

然后您将被发送到Spotify的网站,他们将确认您要这样做。验证后,您的浏览器会将您重定向到您在上述网址中设置redirect_uri的位置。在发送到该URL的末尾,您应该能够看到参数名称code以及为其分配的代码值。然后,您获得该代码并将其放在您的http帖子正文参数中到https://accounts.spotify.com/api/token端点。确保您正确遵循post方法中的查询参数要求。

使用请求库的python帖子示例:

authorization = requests.post(
    "https://accounts.spotify.com/api/token",
    auth=(client_id, client_secret),
    data={
        "grant_type": "authorization_code",
        "code": <code>,
        "redirect_uri": <redirect_uri>
    },        
)


authorization_JSON = authorization.json()
return authorization_JSON["access_token"]

最后,您应该获得一个json,其中显示了您设置了较长时间的范围,并在以后刷新令牌以发出更多请求。

我知道这个答案已经很晚了,但是我也遇到了同样的问题,这就是我遇到这个问题的方式。希望这对以后有见识的人有所帮助。

来源:https://developer.spotify.com/documentation/general/guides/authorization-guide/#client-credentials-flow