在不使用浏览器的情况下通过桌面应用程序完成 Spotify 授权代码流

Completing Spotify Authorization Code Flow via desktop application without using browser

正在开发一个小型应用程序,该应用程序采用用户在消息传递应用程序中提交的 Spotify 曲目 URL 并将其添加到 public Spotify 播放列表。该应用程序是 运行 在 Heroku 站点上的 spotipy python 的帮助(所以我有一个有效的 /callback)并监听用户发布曲目 URL.

当我通过命令行 运行 应用程序时,我使用 util.prompt_for_user_token。浏览器打开,我成功通过身份验证流程,然后将提供的回调 URL 复制粘贴回终端。

当我 运行 此应用程序并尝试在消息传递应用程序上添加轨道时,它不会打开浏览器供用户进行身份验证,因此身份验证流程永远不会完成。

关于如何处理这个问题有什么建议吗?我可以通过终端进行一次身份验证,捕获 code/token 然后处理刷新过程,以便最终用户永远不必进行身份验证吗?

P.S。还不能添加标签 "spotipy" 但很惊讶它还不可用

我曾经 运行 遇到过与 Google 的日历 API 类似的问题。该应用程序很漂亮 low-importance 所以我通过 运行 在我的浏览器中本地通过身份验证,找到响应令牌,然后手动将其复制到 Heroku 上的环境变量中来解决一个问题。缺点当然是令牌设置为 auto-expire(我相信 Google 日历设置为 30 天),所以应用程序会定期停止工作,我不得不 运行 通过身份验证流程并再次复制密钥。可能有一种方法可以使它自动化。

祝你好运!

不幸的是,spotipy util 函数只有 returns access_token,而不是 all-important refresh_token。 access_token 将在有限的时间后过期。届时,您需要使用 refresh_token.

创建一个新的 access_token

我在 spotipy 中没有看到任何 public 函数可以让你获取 refresh_token。但是,您始终可以使用以下组件创建新的 access_token:

  • 您的 Spotify 客户端 ID(在您的应用程序页面上找到)
  • 您的 Spotify 客户端密码(在您的应用程序页面上找到)
  • 您的 Spotify 刷新令牌 - 请参阅此处获取一次的方法 - https://developer.spotify.com/web-api/tutorial/

明智的话,在调试时我请求一个新的 access_token 使用 POSTMAN 到 POST 到 https://accounts.spotify.com/api/token - 它只有在 headers

  • 'Content-Type': 'application/x-www-form-urlencoded'