是否可以使用 Spotify Web API 编写没有回调 URI 的桌面应用程序?

2024-02-12

我想编写一个简单的供个人使用的桌面应用程序,它使用 Spotify Web API 来构建播放列表。

然而,据我所知,如果不提供回调 URI,就无法使用 API,而我没有回调 URI,因为我没有任何类型的域或服务器(除了我的个人计算机) 。

有没有一种方法可以在没有 URI 的情况下使用 API?

如果没有,设置回调 URI 的最佳方法是什么?我没有太多使用 Web 应用程序或客户端/服务器内容的经验,而且我过去使用的 API 不需要任何类型的回调。


首先是一些背景知识,这个答案比我预期的要长一些。

您需要一个访问令牌。可通过三种方式检索访问令牌;身份验证代码流、客户端凭据流和隐式授予流。这些都是 oAuth 2.0 规范的一部分,每个都有其自己的用途。

由于您要修改用户的帐户,因此需要该用户的许可。现在,如果您没有执行任何需要用户权限的操作,则可以使用客户端凭据流程。这可能是最容易学习的流程,因为它只需要从您的服务器向 Spotify 服务器发出请求,并且响应包含访问令牌。不需要回调/重定向 URI。

我确信您已经阅读过,身份验证代码流和隐式授予流都需要回调 URI。这是因为包含用户的流,回调 URI 是 Spotify 在用户在 Spotify 网站上输入密码后重定向用户的位置。

身份验证代码流程和隐式授权流程各有优点和缺点。通过身份验证代码流检索的访问令牌可以刷新,但两者都会返回有效期为一小时的令牌。这意味着使用隐式授权流程进行身份验证的用户必须在一小时后重新进行身份验证。但是,身份验证代码流程确实需要一些后端工作,因为它需要发出请求,以将 Spotify 服务器提供的代码交换为访问令牌。隐式授予流程更加直接 - 您获得访问令牌即可开始。

回调 URI 可以是本地主机地址,因此如果您的桌面应用程序将在本地启动 Web 服务器,您可以在运行应用程序的同一台计算机上处​​理回调。 (最好不要在端口 80 上运行 Web 服务器,因为该端口可能会被其他东西使用。)

Github 上提供了每个身份验证流程的框架代码,请参阅web-api-auth-示例 https://github.com/spotify/web-api-auth-examples。详细了解我们的流程授权指南 https://developer.spotify.com/web-api/authorization-guide/。如果您选择在用户的计算机上运行 Web 服务器,我建议您使用隐式授予流程,因为它不包含任何服务器到服务器的请求,因此您不必公开您的client_secret暴露在代码中。 (与授权代码流程相反。)

另外,由于您正在使用 Python 进行编码,因此我建议您看看spotipy https://github.com/plamere/spotipy,Web API 的包装器,包含方便的方法,可以节省您一些时间。如果您确实继续使用隐式授予流程,您应该看看spotify-web-api-js https://github.com/JMPerez/spotify-web-api-js,具有类似的目的。请注意,使用 Web API 根本不需要这些包装器,但它们会让您的生活更轻松。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以使用 Spotify Web API 编写没有回调 URI 的桌面应用程序? 的相关文章

  • Python 和 Numpy 是 nan 和 set

    我在使用 Python 的 Numpy set 和 NaN 非数字 时遇到了不可预测的行为 gt gt gt set np float64 nan np float64 nan set nan nan gt gt gt set np flo
  • Tkinter 菜单删除项

    如何删除任何菜单项 例如我想删除 播放 self menubar Menu self root self root config menu self menubar self filemenu2 Menu self menubar self
  • 将 yerr/xerr 绘制为阴影区域而不是误差线

    在 matplotlib 中 如何将误差绘制为阴影区域而不是误差条 例如 而不是 忽略示例图中各点之间的平滑插值 这需要进行一些手动插值 或者只是获得更高分辨率的数据 您可以使用pyplot fill between https matpl
  • 如何使用 python 的 http.client 准确读取一个响应块?

    Using http client在 Python 3 3 或任何其他内置 python HTTP 客户端库 中 如何一次读取一个分块 HTTP 响应一个 HTTP 块 我正在扩展现有的测试装置 使用 python 编写 http clie
  • Flutter Spotify Api 身份验证

    我需要在使用 Spotify api 的 Flutter 应用程序中对用户进行身份验证 我使用 flutter web auth 打开 WebView 并让用户在那里登录 我无法返回应用程序 在 Spotify 仪表板中 我将回调 Uri
  • Python re无限执行

    我正在尝试执行这段代码 import re pattern r w w s re compiled re compile pattern results re compiled search COPRO HORIZON 2000 HOR p
  • 将 C++ 指针作为参数传递给 Cython 函数

    cdef extern from Foo h cdef cppclass Bar pass cdef class PyClass cdef Bar bar def cinit self Bar b bar b 这总是会给我类似的东西 Can
  • 以类型化内存视图作为成员的结构定义

    目前我正在尝试让一个具有类型化内存视图的结构能够工作 例如 ctypedef struct node unsigned int inds 如果 inds 不是内存视图 据我所知 它可以完美地工作 然而 通过内存视图并使用类似的东西 def
  • numpy:高效执行数组的复杂重塑

    我正在将供应商提供的大型二进制数组读入 2D numpy 数组 tempfid M N load data data numpy fromfile file dirname fid dtype numpy dtype i4 convert
  • 将 pandas 剪切操作转换为常规字符串

    我明白了 pandas cut 操作的输出 0 0 20 1 0 20 2 0 20 3 0 20 4 0 20 5 0 20 6 0 20 7 0 20 8 0 20 9 0 20 如何将 0 20 转换为 0 20 我正在这样做 str
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • OpenCV 跟踪器:模型未在函数 init 中初始化

    在视频的第一帧 我运行一个对象检测器 它返回对象的边界框 如下所示
  • 在Python中读取tiff标签

    我正在尝试用 Python 读取 tiff 文件的标签 该文件是 RGB 的uint16每个通道的值 我目前正在使用tifffile import tifffile img tifffile imread file tif 然而 img是一
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • 使用标签或 href 传递 Django 数据

    我有一个包含链接的表 当单击该链接进行更多操作时 我想将一些数据传递给我的函数 my html table tbody for query in queries tr td value a href internal my func que
  • 无法在 PyCharm 版本 9.3.3 中安装 NumPy。 Python版本3.8.2

    在 PyCharm 中安装 NumPy 时出错 尝试安装 Microsoft Visual C 14 0 还是行不通 NumPy 正在通过命令安装pip3 install numpy在 cmd 终端中 但是当尝试将其安装在 PyCharm
  • 根据多个阈值将 SciPy 分层树状图切割成簇

    我想将 SciPy 的树状图切割成多个具有多个阈值的簇 我尝试过使用 fcluster 但它只能削减一个阈值 例如 这是我从另一个问题中摘取的一段代码 import pandas data pandas DataFrame total ru
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt
  • django jet 中的自定义徽标

    我目前正在尝试对 django 管理面板的皮肤进行一些定制 以使其更符合我们的品牌 目前我们使用 django jet 来美化管理面板 django jet 可以自定义 css html 吗 所有评论都说我应该更改一些 html 文件 但我
  • Jupyter Notebook:带有小部件的交互式绘图

    我正在尝试生成一个依赖于小部件的交互式绘图 我遇到的问题是 当我使用滑块更改参数时 会在前一个绘图之后完成一个新绘图 而我预计只有一个绘图会根据参数发生变化 Example from ipywidgets import interact i

随机推荐