بقلم ليوناردو - عملا
spotifyatlas هي مكتبة مباشرة تهدف إلى تبسيط عملية التفاعل مع API على الويب الخاص بـ Spotify . سواء كنت تحاول الوصول إلى ميزات Spotify برمجيًا مثل استعلامات البحث ، أو أتمتة مهام المستخدم مثل تعديل قوائم التشغيل الخاصة بك ، فإن SpotifyAtlas لديها أدوات للوظيفة. كل ذلك بأسلوب نظيف ، موجه نحو الكائن.
يتم تضمين معظم وظائف الحزمة في فئة SpotifyAPI ، والتي يجب تهيئتها فقط مع بيانات اعتماد تطبيق العميل الخاص بك. تم استخدام قاعدة الشفرة هذه في الأصل لاسترداد تفاصيل المسار للبلورات Discord ، لذا فإن معظم الوظائف ، حتى الآن ، تدور حول قوائم التشغيل والألبومات وأعلى مسارات الفنانين وما إلى ذلك.
ارجع إلى قسم التثبيت للحصول على معلومات حول كيفية تثبيت الحزمة باستخدام pip .
تتمثل الخطوة الأولى للتفاعل مع API Spotify في تسجيل تطبيق جديد في صفحة Spotify for Developers . لا تقلق: هذه العملية مجانية تمامًا لأي مستخدم Spotify (مع حساب).
مع ذلك ، المضي قدماً وتهيئة كائن SpotifyAPI جديد مع بيانات اعتماد التطبيق الخاص بك (معرف العميل وسرية العميل):
from spotifyatlas import SpotifyAPI
spoti = SpotifyAPI ( '<my-client-id>' , '<my-client-secret>' ) إذا كنت ترغب في استرداد المسارات و/أو تفاصيل أي شيء في Spotify ، فإن طريقة get() Universal عدة مرات ستغطيها.
جربه من خلال لصق رابط مشاركة قائمة التشغيل المفضلة لديك. سوف يعيد كائن 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 أو معرف العنصر كوسيطة أولى.
ليس كل شيء يطالبك بوجود رابط العنصر في متناول اليد. لأداء عمليات البحث ، يمكنك استخدام الطرق التالية:
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() إنشاء استعلام بحث أكثر قوة يمكن للمستخدم الانتقال بعد ذلك إلى أي من أساليب البحث (أو حتى لصق عميله الفعلي). 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 إلى قائمة التشغيل.
duplicate_playlist() لتكرار قائمة التشغيل في مكتبتك.
clear_playlist() لإزالة جميع محتويات قائمة التشغيل.
rearrange_playlist() لتغيير موضع مجموعة من المسارات.
تتوفر الوظائف الخمس الأخيرة أيضًا كطرق لفئة Playlist . هذا يتيح بعض الاختصارات المفيدة مثل تلك التي شوهدت في المزيد من الأمثلة.
ملاحظة: يتطلب التصريح للتطبيق في صفحة تفويض Spotify صفحة إعادة توجيه للذهاب إليها. ستستضيف هذه المكتبة مؤقتًا صفحة محلية على http: // localhost: 8000 كلما دعت الحاجة. وبالتالي ، ستحتاج إلى إضافة عنوان URL هذا إلى عناوين URL المسموح بها على لوحة القيادة في تطبيقك في موقع Spotify for Developers .
يمكن العثور على القائمة الكاملة للمعلمات/الوسائط الخاصة بالوظيفة في وثائقها.
لتثبيت Spotifyatlas ، استخدم PIP في المحطة:
النوافذ
pip install spotifyatlas
ماكوس / لينكس
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 خارج واجهة المستخدم ، فأنت في المكان المناسب.
إذا كنت تبحث بدلاً من ذلك عن غلاف API للاستخدام في تطبيق Python Web ، فربما لا تكون هذه الحزمة هي الخيار الصحيح. بالنسبة للمبتدئين ، فإن وظائف المكتبة ليست غير متزامنة (ليس بعد ، على الأقل). ربما يكون هذا جيدًا لبضع مهام بسيطة. وأيضًا ، اعتبارًا من الآن ، الطريقة التي قمت بتطبيق تدفق التفويض غير متوافق مع تطبيق الويب (يفتح حرفيًا صفحة مضيف محلي). هذا يعني أنه سيعمل فقط مع الوظائف التي لا تتطلب مصادقة المستخدم.