Леонардо - УМАКАТИВНО
spotifyatlas - это простая библиотека, предназначенная для упрощения процесса взаимодействия с веб -API Spotify . Независимо от того, пытаетесь ли вы программно получить доступ к функциям Spotify, таким как поисковые запросы , или автоматизировать задачи пользователей, такие как изменение ваших плейлистов , у Spotifyatlas есть инструменты для работы. Все в чистом, объектно-ориентированном стиле.
Большая часть функциональности пакета включена в класс SpotifyAPI , который должен быть инициализирован только с учетом учетных данных вашего клиентского приложения. Эта кодовая база изначально использовалась для получения деталей трека для ботов для раздоров , поэтому большинство функций на данный момент вращаются вокруг плейлистов, альбомов, лучших треков артистов и еще чего -то.
Обратитесь к разделу установки для получения информации о том, как установить пакет с pip .
Первый шаг для взаимодействия с API Spotify - зарегистрировать новое приложение на странице Spotify для разработчиков . Не беспокойтесь: этот процесс полностью бесплатен для любого пользователя Spotify (с учетной записью).
С этим, инициализируйте новый объект SpotifyAPI с учетными данными вашего приложения (идентификатор клиента и секрет клиента):
from spotifyatlas import SpotifyAPI
spoti = SpotifyAPI ( '<my-client-id>' , '<my-client-secret>' ) Если вы хотите получить треки и/или подробности чего -либо в Spotify, метод Universal 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 или идентификатора элемента в качестве первого аргумента.
Не все требует, чтобы у вас была ссылка на предмет под рукой. Чтобы выполнить поиск , вы можете использовать следующие методы:
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 в разрешенные URL -адреса перенаправления на приборной панели вашего приложения на сайте Spotify для разработчиков .
Полный список параметров/аргументов функции можно найти в его документации.
Чтобы установить 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 за пределами пользовательского интерфейса, то вы находитесь в нужном месте.
Если вместо этого вы ищете обертку API для использования в веб -приложении Python, возможно, этот пакет не является правильным выбором. Для начала, функциональность библиотеки не является асинхронной (по крайней мере, нет). Возможно, это нормально для пары простых задач. А также, на данный момент, то, как я реализовал поток авторизации, не совместим с веб -приложением (он буквально открывает страницу Localhost). Это означает, что он будет работать только с функциями, которые не требуют пользовательской аудитории.