检查一首歌曲是否可以用 Spotipy 播放

Checking to see if a song is available to play with Spotipy

我的问题:区分可播放曲目和不可播放曲目。

我正在尝试使用 Spotipy 打印播放列表中所有曲目的元数据详细信息。 我添加到我的播放列表中的一些歌曲不再可用,因此不会显示在我的 spotify 播放列表中(灰色)。然而,它们确实与可用的其余曲目一起正常打印。我不要他们在那里;如果我现在不能播放它们,我不想让它们出现在我打印的播放列表中。

我检查曲目在哪些市场可用,以确定它是否应该打印。这工作正常。

'available_markets': []

我遇到的问题是有些曲目没有任何可用市场,并且如代码片段所示是空的。它们与我无法使用的歌曲曲目相同。但我仍然可以玩它们!这意味着我删除不可用歌曲的代码也会删除可播放的歌曲。

我还没有找到另一种方法来获取有关曲目是否真的可用的数据。我错过了什么吗?

更新:已找到解决方案。作为答案发布。

检查曲目是否在市场内可用and/or如果可用市场字段为空,在这两种情况下都应该return为真。

它会变成这样

if something in available_markets or not available_markets:
  print("It works!")

我最近重新选择了这个项目,并找到了一种可行的解决方案。

每个曲目都有一个 is_playable 条目,但只有当您在查找曲目时指定市场时才会显示。这解决了曲目的市场列表是空白的问题,但该曲目仍然可以在您的市场中播放。至少到目前为止,在我的测试中它正确地找到了无法播放的曲目。

track(track_id, market='NO')
TypeError: track() got an unexpected keyword argument 'market'

将此参数添加到 Spotipys track() 时,我的代码无法正常工作。我只有错误。我的市场是挪威。

但是我发现,如果我将市场直接添加到函数中,它会起作用。不知何故。

track('spotify:track:0eueRkrPsChXjeJA421OWp?market=NO')
mytrack['is_playable']

我还发现,如果我在 playlist_tracks() 函数中使用 market 参数,即使我以与在 track() 函数中相同的方式使用它,它也可以正常工作。

user_playlist_tracks(user=None, playlist_id=None, fields=None, limit=100, offset=0, market=None)

我是这样使用的:

playlist_tracks('myplaylistid', offset=0, market='NO')
mytrack['track']['is_playable']

我不知道为什么。在两个不同的函数中使用相同的输入,我在一个而不是另一个上得到错误。也许我做错了什么?不管怎样,我想我应该在这里更新,以防它可以帮助其他遇到同样问题的人。