莱昂纳多(Leonardo)
spotifyatlas是一个简单的库,旨在简化与Spotify的Web API交互的过程。无论您是试图通过编程方式访问Spotify功能(例如搜索查询) ,还是自动化用户任务(例如修改播放列表) ,Spotifyatlas都具有工作工具。所有这些都以干净,面向对象的样式。
该软件包的大部分功能都包含在SpotifyAPI类中,只需要使用客户端应用程序的凭据初始化。该代码库最初用于检索Discord机器人的曲目细节,因此截至目前,大多数功能都围绕播放列表,专辑,艺术家的顶级曲目以及Whatnot。
有关如何使用pip安装软件包的信息,请参阅“安装”部分。
与Spotify API互动的第一步是在Spotify的开发人员页面中注册一个新应用程序。担心不是:对于任何Spotify用户(带有帐户),此过程都是完全免费的。
这样一来,请继续并用应用程序的凭据(客户端ID和客户端秘密)初始化一个新的SpotifyAPI对象:
from spotifyatlas import SpotifyAPI
spoti = SpotifyAPI ( '<my-client-id>' , '<my-client-secret>' )如果您想检索Spotify中任何内容的轨道和/或详细信息,则多次通用get()方法可以覆盖您。
通过粘贴您喜欢的播放列表的共享链接来尝试一下。它将返回Playlist对象。播放列表轨道位于tracks属性中,您也可以按索引访问轨道,如下所示。
from spotifyatlas import SpotifyAPI
spoti = SpotifyAPI ( '<my-client-id>' , '<my-client-secret>' )
playlist = spoti . get ( 'https://open.spotify.com/playlist/6xTnvRqIKptVfgcT8gN4Bb' )
print ( playlist . tracks )
# [<Track name='Goliath' artist='The Mars Volta' id='3bi3Ycf0ZlRHvSg0IxlMwM'>, ... ]
first_track = playlist [ 0 ] # the same as playlist.tracks[0]
print ( first_track )
# Goliath - The Mars Volta Track包含歌曲的name , artist , album和id 。而且,正如您在上面看到的那样, print(track)将以'<name> - <artist>'的形式格式化曲目。您可以像这样整洁地列出播放列表的内容:
for i , track in enumerate ( playlist , 1 ):
print ( i , '-' , track )
# 1 - Goliath - The Mars Volta
# 2 - Juicy - 2005 Remaster - The Notorious B.I.G.
# 3 - O Peso da Cruz - Supercombo
# 4 - Count The People (feat. Jessie Reyez & T-Pain) - Jacob Collier
# 5 - Touch - Shura
# ...类似于Playlist和Track ,您还可以找到Album , Artist和User结构。这些中的每一个都通过属性相互连接。例如, track.artist.image_url将返回轨道艺术家的图像URL,因此track.album.tracks[0].artist.image_url 。我自信地假设您不会第二种方法。 API请求的增加将对性能造成损失。
以下方法提供与get()相同的功能,尽管具有特定的返回值:
get_playlist()用于公共播放列表。
曲目get_track() 。
get_artist()艺术家及其前10首曲目。
专辑的get_album() 。
用户get_user() 。
他们都要求元素的url或ID作为第一个参数。
并非所有内容都要求您拥有手头上的物品链接。要执行搜索,您可以使用以下方法:
search()正常搜索,并具有指定结果类型的选项。 result = spoti . search ( 'susanne sundfor' )
top_artist_result = result . artists [ 0 ]
print ( top_artist_result . name )
# Susanne Sundfør
result = spoti . search ( 'ok human' )
top_album_result = result . albums [ 0 ]
print ( top_album_result . tracks )
# [<Track name='All My Favorite Songs' artist='Weezer' id='6zVhXpiYbJhLJWmLGV9k1r'>, ... ]im_feeling_lucky()如果您提前知道您要寻找的内容。它与search()基本相同,但直接返回指定类型的最佳结果。 from spotifyatlas import ResultType
result = spoti . im_feeling_lucky ( 'quevedo biza' , ResultType . TRACK )
print ( result )
# Quevedo: Bzrp Music Sessions, Vol. 52 - Bizarrapspotifyatlas.advanced_search()可以生成更强大的搜索查询,然后用户可以将其传递给任何一种搜索方法(甚至粘贴到其实际的Spotify客户端)。 from spotifyatlas import ResultType , Genre , advanced_search
overkill_query = advanced_search (
'juanes' ,
album = 'metallica' ,
year = 2021 ,
genre = Genre . ROCK
)
result = spoti . im_feeling_lucky ( overkill_query , ResultType . TRACK )
print ( result )
# Enter Sandman - Juanes这些其他方法需要用户同意,因此将导致浏览器打开以代表用户行事的应用程序授权:
get_me()有关您自己的个人资料的详细信息。
get_private_playlist()适用于您拥有的私人播放列表。
create_playlist()在库中制作一个新的空播放列表。
add_to_playlist()将一批Track s添加到播放列表中。
duplicate_playlist()在您的库中复制播放列表。
clear_playlist()删除播放列表的所有内容。
rearrange_playlist()更改一系列轨道的位置。
最后五个函数也可以作为Playlist列表类的方法提供。这可以像在更多示例中看到的那样一些方便的快捷方式。
注意:在Spotify授权页面中授权该应用程序需要重定向页面。该库将在http:// localhost上暂时托管本地页面:每当需要时8000。因此,您需要将此URL添加到Spotify for Developers网站的应用程序仪表板上的允许的重定向URL中。
函数的参数/参数的完整列表可以在其文档中找到。
要安装Spotifyatlas,请在终端中使用PIP :
视窗
pip install spotifyatlas
MacOS / Linux
python3 -m pip install spotifyatlas
对于好奇用户,这里还有一些我头顶的代码示例:
from spotifyatlas import SpotifyAPI
def artist_sort_key ( track ):
return track . artist . name . lower ()
# If you want to hierarchically sort by artist, AND album,
# AND track, use this:
# return (
# track.artist.name.lower(),
# track.album.name.lower(),
# track.name.lower())
MY_PLAYLIST = '<my-playlist-link>'
spoti = SpotifyAPI ( '<my-client-id>' , '<my-client-secret>' )
playlist = spoti . get_playlist ( MY_PLAYLIST )
tracks = playlist . tracks
tracks . sort ( key = artist_sort_key )
# make_copy makes a backup of the playlist in your library
# before removing its contents.
playlist . clear ( make_copy = True )
playlist . add ( tracks ) from spotifyatlas import SpotifyAPI
MY_PLAYLIST = '<my-playlist-link>'
MY_FRIENDS_PLAYLIST = '<my-friends-playlist-link>'
spoti = SpotifyAPI ( '<my-client-id>' , '<my-client-secret>' )
playlist1 = spoti . get ( MY_PLAYLIST )
playlist2 = spoti . get ( MY_FRIENDS_PLAYLIST )
# Set theory!!!
common_tracks = set ( playlist1 ). intersection ( set ( playlist2 ))
for i , track in enumerate ( common_tracks , 1 ):
print ( i , '-' , track )
blend = spoti . create_playlist (
name = f' { playlist1 . owner . name } + { playlist2 . owner . name } ' ,
description = 'I am a blend, I swear' )
blend . add ( list ( common_tracks ))我创建了spotifyatlas ,以鼓励音乐爱好者和程序员,以利用Python自动化和脚本的优雅。如果您在寻找一种方法来扩展Spotify超越用户界面中的用户功能的方法时偶然发现了此软件包,那么您在正确的位置。
相反,如果您正在寻找用于在Python Web应用程序中使用的API包装器,则该软件包不是正确的选择。对于初学者来说,库的功能不是异步(至少尚未)。不过,对于几个简单的任务也许可以。而且,截至目前,我实施授权流的方式与Web应用程序不兼容(实际上它打开了Localhost页面)。这意味着它只能与不需要用户auth的功能一起使用。