added search function
This commit is contained in:
parent
3f45cf8b63
commit
94b23b5c66
@ -21,6 +21,22 @@ limit = 50
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class SearchResponse:
|
||||||
|
def __init__(self,
|
||||||
|
tracks: List[SpotifyTrack],
|
||||||
|
albums: List[SpotifyAlbum],
|
||||||
|
artists: List[SpotifyArtist],
|
||||||
|
playlists: List[SpotifyPlaylist]):
|
||||||
|
self.tracks = tracks
|
||||||
|
self.albums = albums
|
||||||
|
self.artists = artists
|
||||||
|
self.playlists = playlists
|
||||||
|
|
||||||
|
@property
|
||||||
|
def all(self):
|
||||||
|
return self.tracks + self.albums + self.artists + self.playlists
|
||||||
|
|
||||||
|
|
||||||
class Network:
|
class Network:
|
||||||
|
|
||||||
def __init__(self, user: NetworkUser):
|
def __init__(self, user: NetworkUser):
|
||||||
@ -769,6 +785,43 @@ class Network:
|
|||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def search(self,
|
||||||
|
query_types: List[Uri.ObjectType],
|
||||||
|
query: str = None,
|
||||||
|
track: str = None,
|
||||||
|
album: str = None,
|
||||||
|
artist: str = None,
|
||||||
|
response_limit: int = 20) -> SearchResponse:
|
||||||
|
|
||||||
|
if query is None and track is None and album is None and artist is None:
|
||||||
|
raise ValueError('no query parameters')
|
||||||
|
|
||||||
|
queries = []
|
||||||
|
|
||||||
|
if query is not None:
|
||||||
|
queries.append(query)
|
||||||
|
if track is not None:
|
||||||
|
queries.append(f'track:{track}')
|
||||||
|
if album is not None:
|
||||||
|
queries.append(f'album:{album}')
|
||||||
|
if artist is not None:
|
||||||
|
queries.append(f'artist:{artist}')
|
||||||
|
|
||||||
|
params = {
|
||||||
|
'q': ' '.join(queries),
|
||||||
|
'type': ','.join([i.name for i in query_types]),
|
||||||
|
'limit': response_limit
|
||||||
|
}
|
||||||
|
|
||||||
|
resp = self.get_request(method='search', url='search', params=params)
|
||||||
|
|
||||||
|
albums = [self.parse_album(i) for i in resp.get('albums', {}).get('items', [])]
|
||||||
|
artists = [self.parse_artist(i) for i in resp.get('artists', {}).get('items', [])]
|
||||||
|
tracks = [self.parse_track(i) for i in resp.get('tracks', {}).get('items', [])]
|
||||||
|
playlists = [self.parse_playlist(i) for i in resp.get('playlists', {}).get('items', [])]
|
||||||
|
|
||||||
|
return SearchResponse(tracks=tracks, albums=albums, artists=artists, playlists=playlists)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def parse_artist(artist_dict) -> SpotifyArtist:
|
def parse_artist(artist_dict) -> SpotifyArtist:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user