获得使用 Python3 的 spotipy 修改 Spotify 播放列表的授权

Posted

技术标签:

【中文标题】获得使用 Python3 的 spotipy 修改 Spotify 播放列表的授权【英文标题】:Gaining authorization to modify Spotify playlists using spotipy for Python3 【发布时间】:2018-11-15 12:08:14 【问题描述】:

我目前正在尝试使用 python3 模块 spotipy 来访问和编辑我的个人 Spotify 高级帐户。我通过直接输入必要的参数(用户名、客户端 ID、秘密 ID、范围和重定向 uri),使用 util.prompt_for_user_token 方法遵循了 https://github.com/plamere/spotipy/blob/master/docs/index.rst 上的教程。到目前为止,一切似乎都很好。我的代码(出于安全原因,填写用户名、客户端 ID 和客户端密码):code

它会打开我的默认网络浏览器并将我重定向到包含代码的重定向 URL。此时,我复制并粘贴重定向 URL(根据提示)并按 Enter。它返回以下错误:

Error

对于这个特定示例,我的重定向 uri 是“http://google.com/”。但是,我尝试了多个重定向 uri,但它们似乎都对我产生了相同的错误。 (是的,我确实将我的重定向 uri 设置为我的应用程序的空白)。我花了几个小时试图通过查看在线教程、尝试不同的重定向 url、更改我的代码来解决这个问题,但还没有取得任何进展。我希望我只是在这里忽略了一个简单的错误!非常感谢任何有关如何解决此问题的反馈!

如果重要的话:我正在使用 IDE PyCharm。

【问题讨论】:

很难说它可能是什么问题,一些故障排除点是 - 检查一切看起来像你在 Spotify 呈现给你的 OAuth 批准页面的 URL 中所期望的那样,你的 client_id 和秘密匹配您的开发者帐户,相同范围,删除 .cache- 并重试? @RachSharp 首先感谢您就这个问题回复我!但是我仍然有问题。我尝试基本上重做整个事情并遇到了类似的问题。一切都按预期工作,但只有当我将范围设置为用户库读取时。如果我尝试使用任何其他范围,我会收到与以前相同的“错误请求”错误。对此有何见解? 很难说,检查正确的范围名称,指定多个范围的正确方法可能吗?如果您在帖子中附加一个更完整的示例(例如,添加一个完整的最小示例,作为代码),我可以尝试复制。 @RachSharp 继承了我当前的代码:'import os import spotipy import spotipy.util as util #credentials user = 'ccmatt19' desired_scope = 'playlist-modify-private' id = os.environ.get( 'SPOT_CLIENT') secret = os.environ.get('SPOT_SECRET') uri = 'google.com' token = util.prompt_for_user_token(username = user, scope = desired_scope, client_id = id, client_secret = secret, redirect_uri = uri) 【参考方案1】:

我必须使用两种不同的解决方案来处理 redirect_uri 问题,具体取决于我使用的 IDE。对于 Jupyter Lab/Notebook,我可以使用 localhost 作为 redirect_url

sp = spotipy.Spotify(auth_manager=SpotifyOAuth(client_id="your_client_id", client_secret="your_client_secret", redirect_uri="https://localhost:8890/callback/", scope="user-library-read"))

对于 Google Colab,我必须使用可公开访问的网站。我认为“https://google.com/”应该可以,但我使用了我乐队的网站,所以我记得 redirect_uri 必须与您的 Spotify Develop 仪表板设置中的匹配。

sp = spotipy.Spotify(auth_manager=SpotifyOAuth(client_id="your_client_id", client_secret="your_client_secret", redirect_uri="https://yourwebsite.com/", scope="user-library-read"))

我刚刚使用了我的乐队网站,因为它更容易让我记住。确保转到 Spotify 开发者仪表板 (https://developer.spotify.com/dashboard/applications) 并将 redirect_uri 与您当时计划使用的内容相匹配。

【讨论】:

【参考方案2】:

我认为这是您的重定向 URL - 为我工作:

import os
import spotipy.util as util

# credentials
user = 'username'
desired_scope = 'playlist-modify-private'
id = os.environ.get('SPOT_CLIENT')
secret = os.environ.get('SPOT_SECRET')
uri = 'https://localhost'
token = util.prompt_for_user_token(username=user,
                                   scope=desired_scope,
                                   client_id=id,
                                   client_secret=secret,
                                   redirect_uri=uri)

我认为对于您的重定向 url,spotify 需要初始的 http(s) 部分 - 不要忘记将其添加到您的 Spotify for Developers 应用程序的白名单中,否则您将获得“invalid-redirect-uri” .

【讨论】:

好的,我发现了问题!原来重定向链接中没有“&”符号。我在链接末尾添加了“&”,一切顺利。不知道他为什么会这样,但我很高兴我让它工作了。感谢您的帮助,我真的很感激!

以上是关于获得使用 Python3 的 spotipy 修改 Spotify 播放列表的授权的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spotipy 获取 Spotify 的曲目时长

Spotipy 使用授权代码流刷新令牌

将多个范围与 spotipy 一起使用

Spotipy 尝试使用 oauth 进行验证

如何解决:使用 Spotipy 的 Python 中客户端范围不足

使用 Spotipy 将曲目添加到播放列表时出现多个错误