通过桌面应用程序完成Spotify授权代码流,无需使用浏览器

时间:2015-12-29 22:40:27

标签: python api heroku oauth-2.0 spotify

使用一个小应用程序,该应用程序接收用户在消息传递应用程序中提交的Spotify跟踪URL,并将其添加到公共Spotify播放列表中。该应用程序在Heroku站点上的spotipy python的帮助下运行(所以我有一个有效/回调)并监听用户发布跟踪URL。

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

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

有关如何处理此事的任何建议?我可以通过终端验证一次,捕获代码/令牌然后处理刷新过程,以便最终用户永远不必进行身份验证吗?

P.S。不能添加“spotipy”标签,但惊讶它还没有可用

2 个答案:

答案 0 :(得分:2)

我曾经遇到类似谷歌日历API的问题。该应用程序的重要性非常低,因此我通过在浏览器中本地运行auth,找到响应令牌,并手动将其复制到Heroku上的环境变量中,将一个解决方案混合在一起。当然缺点是令牌设置为自动过期(我相信Google日历设置为30天),因此应用程序会定期停止工作,我不得不通过身份验证流程重新复制密钥。可能有一种方法可以实现自动化。

祝你好运!

答案 1 :(得分:1)

不幸的是,spotipy util函数只返回access_token,而不是最重要的refresh_token。 access_token将在有限的时间后过期。此时,您需要使用refresh_token创建一个新的access_token。

我没有看到任何公开的函数可以让你抓住refresh_token。但是,您始终可以使用以下组件创建新的access_token:

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

明智的话,在调试时我使用POSTMAN请求新的access_token POST到https://accounts.spotify.com/api/token - 只有在标题中指定后才能工作

  • '内容类型':' application / x-www-form-urlencoded'