萊昂納多(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的功能一起使用。