Spotipy——无需身份验证即可从 public 播放列表访问曲目

Spotipy -- accessing tracks from a public playlist without authentication

我想搜索 public 个播放列表并获取曲目。到目前为止,我的代码可以获取播放列表的名称,但不能获取曲目:

import spotipy
import sys
sp = spotipy.Spotify()

if len(sys.argv) > 1:
    artist_name = ' '.join(sys.argv[1:])
    results = sp.search(q=artist_name, limit=20, type='playlist')
    for i, t in enumerate(results['playlists']['items']):
        print(i,' ', t['name'])

这将打印给定搜索条件的前 20 个 public 播放列表名称的列表。我想要的是还打印每个播放列表中的曲目!我认为这很简单,但在搜索之后似乎唯一的方法是通过身份验证,我不想这样做。这些曲目是 public,那么为什么我需要进行身份验证才能列出这些曲目?!我认为有两个原因。 1)如果我添加(在循环中):

print t['tracks']

请求响应显示 "This request requires authentication"。此外,我在 spotipy 文档中找到了这个示例,这正是我想要的,但仅适用于经过身份验证的用户。 https://github.com/plamere/spotipy/blob/dd021c4087981b583ef0f2b276cd43bbc6fd429f/examples/user_playlists_contents.py 那么,有没有办法在不验证播放列表所有者身份的情况下查看曲目?打开桌面 Spotify 应用程序可以快速向任何人表明 public 播放列表曲目是完全可搜索和可查看的,因此这一定是可能的。 如果这是一个非常具体的问题,我深表歉意——但我不确定还有什么地方可以问,因为这是我第一次使用这个 API 或这样的 API。我对这个主题做了很多研究,现在已经辞职寻求帮助了。

这是典型的 OAuth 混淆。这里可能涉及三方。

  • 您的应用程序(上面那个小小的 python 片段)
  • Spotify 网络 API
  • Spotify 用户

如果您的应用程序想要查找并删除 Spotify 用户的以 X 开头的播放列表,Spotify Web API 会要求您的应用程序首先友好地征求用户的许可才能执行此操作。感觉很自然...

在这种情况下,您的应用程序 Playlist X Deleter 首先必须进行身份验证以证明它确实是 Playlist X Deleter。然后,用户需要通过 Spotify 进行身份验证,以证明它确实是 Playlist X Deleter 想要为其删除播放列表的用户。然后,我们现在知道是谁的用户需要授权我们现在知道是谁的Playlist X Deleter删除播放列表。

因此,您有一个进行身份验证的应用程序和一个进行身份验证的用户。

对于 public 的信息,用户没有明显的理由需要进行身份验证。应用程序需要进行身份验证也没有明显的原因。但是,Spotify 已决定该应用必须进行身份验证才能获取 public 播放列表信息。也许这样它可以禁用抓取过多播放列表数据或以其他方式滥用 api.

的不良用户

在这种情况下,由于不涉及私人播放列表,只有阅读权限,因此用户无需授权任何内容。在 OAuth 世界中,这称为客户端凭证流 https://www.rfc-editor.org/rfc/rfc6749#section-4.4

转到开发人员控制台并创建一个应用程序以获得 client_id 和 client_secret:

https://developer.spotify.com/my-applications/#!/applications/create

然后关注:

https://developer.spotify.com/web-api/authorization-guide/#client_credentials_flow

或者在您的情况下,通过 SpotifyClientCredentials

提供 client_id 和 client_secret 到 spotipy

文档:http://spotipy.readthedocs.io/en/latest/#spotipy.oauth2.SpotifyClientCredentials

示例片段(虽然没有填写任何内容):https://github.com/plamere/spotipy/blob/master/examples/client_credentials_flow.py