【问题标题】:Spotify API Authorization for cron jobcron 作业的 Spotify API 授权
【发布时间】:2015-09-25 16:44:57
【问题描述】:

我正在创建一个 node.js 应用程序,它将每天更新播放列表(由我拥有凭据的帐户拥有)。根据 Spotify 文档,要将曲目添加到播放列表 (https://developer.spotify.com/web-api/add-tracks-to-playlist/),必须使用 oauth2 提供授权。

我正在努力寻找一种方法来完全在服务器端执行此操作,而无需重定向/等。好像如果我能得到一个刷新令牌,我就可以使用它吗?

我一直在研究 spotify web api 节点模块 (https://github.com/thelinmichael/spotify-web-api-node)、oauth.io 和 spotify api。

任何想法将不胜感激!只有一个帐户需要进行身份验证,因此至少目前可以对其进行硬编码。

【问题讨论】:

    标签: node.js oauth oauth-2.0 spotify


    【解决方案1】:

    您选择了正确的授权流程 - Authorization Code,因为您需要一个连接到拥有您正在更新的播放列表的用户的访问令牌。当然,这也使您能够在需要时刷新令牌。 (过期时间为一小时,但在您的应用真正需要使用之前,您无需刷新访问令牌。)

    作为旁注,Client Credentials flow 用于不需要用户许可的服务器到服务器通信,例如搜索、阅读播放列表或检索新版本。 Implicit Grant flow 用于前端,不允许您刷新令牌。

    我正在努力寻找一种方法来完全在服务器端执行此操作,而无需重定向/等。好像如果我能得到一个刷新令牌,我就可以使用它?

    获得刷新令牌后,您可以继续使用它来检索新的访问令牌,无需任何用户交互即可完成。不过,您需要做一些准备工作来检索刷新令牌。

    按照描述Authorization Code flow 的步骤,您首先需要将播放列表的所有者定向到 Spotify 帐户服务器上的 URL。

    文档包含以下示例 URL:

    获取https://accounts.spotify.com/authorize/?client_id=5fe01282e44241328a84e7c5cc169165&response_type=code&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback&scope=user-read-private%20user-read-email&state=34fFs29kd09

    只需将client_idredirect_uri 替换为您的应用程序信息即可。还要修改scope 参数以匹配您需要的范围,根据我对您的用例的理解是playlist-read-private,playlist-modify-private,playlist-read-collaborative,因为您希望能够读取和修改所有用户的播放列表。不需要提供state

    使用 spotify-web-api-node,您可以使用 createAuthorizeURL 方法生成此 URL,但由于您只在不需要为其编写代码时才这样做。

    相反,只需在浏览器中打开 URL。

    如果成功完成,您将完成一个小小的登录舞蹈,您的应用程序会在此请求您允许读取和修改您的播放列表。完成后,Spotify 的帐户服务会将浏览器重定向到您的redirect_uri URL,其中包含code 查询参数,如授权指南中的步骤3 中所述。

    但是,由于您只执行此操作一次,因此在您自己的机器上启动一个网络服务器就足够了,将您的应用程序的redirect_uri 设置为您的本地主机,然后完成登录流程。查看web-api-auth-examples 了解一个现成的node.js 应用程序,它启动一个快速服务器并读取授权码。

    获得代码后,您可以使用 cURL 将其换成访问令牌,就像在授权指南中的第 4 步中所做的那样,或者使用 web-api-auth-examples 存储库中的代码。

    最后,在检索到令牌后(第 5 步),您可以开始使用带有访问令牌的 Web API,并在它过期时使用第 7 步中的请求获取新的令牌。

    spotify-web-api-node 有一个帮助方法来刷新令牌。在主文档中搜索 refreshAccessToken 方法。

    【讨论】:

    • 谢谢!我缺少的是卷曲步骤(4/5)。我现在有一个刷新令牌,应该很高兴。谢谢!希望我不会有任何后续问题。
    • 嗨迈克尔——一个后续问题。我正在添加歌曲,其中一些已成功发布。但是,一些请求返回 500 错误:{ name: 'WebapiError', message: 'Server error.', statusCode: 500 } 我不知道为什么会这样,为什么它只是一些请求。有没有办法从这个错误中获取更多有用的信息?我正在使用来自 spotify-web-api-node 的 addTracksToPlaylist 函数,但是当我直接执行请求时遇到了同样的问题。
    • 这很可能是由于 Spotify 方面与某些播放列表相关的已知问题,通常是经过大量修改(添加、删除、重新排序)的播放列表。检索用户的播放列表或检索播放列表或其曲目时,可以重新创建相同的问题。所以你需要在你的应用程序中处理这个问题,但我建议你重试请求,如果它确实发生了。
    • 好的。我现在也收到了一些超出速率限制的响应。速率限制究竟是多少?在文档中查找时遇到问题。
    • some documentation 关于速率限制以及您可以采取哪些措施来处理限制,包括提出更有效的请求以及如何知道何时可以重试。确切的速率限制没有公布,因为我们还不想承诺特定的限制。鉴于您的 Stack Overflow '积分',我假设您是新来的 - 欢迎!如果您有与原始问题没有直接关系的问题,请随意创建一个新问题而不是发表评论。这使其他人可以更轻松地找到问题和答案。
    【解决方案2】:

    FAQ section of the Authorization Guide 中稍微提到了这个用例。

    如您所说,您需要使用授权代码流获取刷新令牌。为此,您需要使用您的用户帐户、您注册的应用程序的 client_id 以及您需要的范围(取决于播放列表是私有还是公共)来执行 OAuth 过程。然后,获取你获取的刷新令牌和你的应用的客户端秘钥,你就可以获取访问令牌,而不需要登录表单。

    这个相关的 StackOverflow 问题也可能有帮助 Spotify automated playlist management with PHP back-end and rate limits

    【讨论】:

      猜你喜欢
      • 2018-05-21
      • 1970-01-01
      • 2021-07-04
      • 2017-12-29
      • 2018-08-12
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多