def post_attribute(self, method_name, **kwargs): if 'data' in kwargs: data = kwargs.pop('data') else: data = {} result = util.callm("%s/%s" % (self._object_type, method_name), kwargs, POST=True, data=data) return result['response']
def list(sandbox_name, results=15, start=0): """ Returns a list of all assets available in this sandbox Args: sandbox_name (str): A string representing the name of the sandbox Kwargs: results (int): An integer number of results to return start (int): An integer starting value for the result set Returns: A list of asset dictionaries Example: >>> sandbox.list('bluenote') [{}, {}] >>> """ result = util.callm("%s/%s" % ('sandbox', 'list'), {'sandbox':sandbox_name, 'results': results, 'start': start}) assets = result['response']['assets'] start = result['response']['start'] total = result['response']['total'] return ResultList(assets, start, total)
def top_terms(results=15): """Get a list of the top overall terms Args: Kwargs: results (int): An integer number of results to return Returns: A list of term document dicts Example: >>> terms = artist.top_terms(results=5) >>> terms [{u'frequency': 1.0, u'name': u'rock'}, {u'frequency': 0.99054710039307992, u'name': u'electronic'}, {u'frequency': 0.96131624654034398, u'name': u'hip hop'}, {u'frequency': 0.94358477322411127, u'name': u'jazz'}, {u'frequency': 0.94023302416455468, u'name': u'pop rock'}] >>> """ kwargs = {} if results: kwargs['results'] = results """Get top terms""" result = util.callm("%s/%s" % ('artist', 'top_terms'), kwargs) return result['response']['terms']
def list(sandbox_name, results=15, start=0): """ Returns a list of all assets available in this sandbox Args: sandbox_name (str): A string representing the name of the sandbox Kwargs: results (int): An integer number of results to return start (int): An integer starting value for the result set Returns: A list of asset dictionaries Example: >>> sandbox.list('bluenote') [{}, {}] >>> """ result = util.callm("%s/%s" % ('sandbox', 'list'), { 'sandbox': sandbox_name, 'results': results, 'start': start }) assets = result['response']['assets'] start = result['response']['start'] total = result['response']['total'] return ResultList(assets, start, total)
def post_attribute(self, method_name, **kwargs): data = kwargs.pop('data') if 'data' in kwargs else {} result = util.callm("%s/%s" % (self._object_type, method_name), kwargs, POST=True, data=data) return result['response']
def list_catalogs(results=30, start=0): """ Returns list of all catalogs created on this API key Args: Kwargs: results (int): An integer number of results to return start (int): An integer starting value for the result set Returns: A list of catalog objects Example: >>> catalog.list() [<catalog - test_artist_catalog>, <catalog - test_song_catalog>, <catalog - my_songs>] >>> """ result = util.callm("%s/%s" % ('catalog', 'list'), { 'results': results, 'start': start }) cats = [Catalog(**util.fix(d)) for d in result['response']['catalogs']] start = result['response']['start'] total = result['response']['total'] return ResultList(cats, start, total)
def list_catalogs(results=30, start=0): """ Returns list of all catalogs created on this API key Args: Kwargs: results (int): An integer number of results to return start (int): An integer starting value for the result set Returns: A list of catalog objects Example: >>> catalog.list_catalogs() [<catalog - test_artist_catalog>, <catalog - test_song_catalog>, <catalog - my_songs>] >>> """ result = util.callm("%s/%s" % ('catalog', 'list'), {'results': results, 'start': start}) cats = [Catalog(**util.fix(d)) for d in result['response']['catalogs']] start = result['response']['start'] total = result['response']['total'] return ResultList(cats, start, total)
def suggest(q='', results=15, buckets=None, limit=False, max_familiarity=None, min_familiarity=None, max_hotttnesss=None, min_hotttnesss=None): """Suggest artists based upon partial names. Args: Kwargs: q (str): The text to suggest artists from results (int): An integer number of results to return buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets max_familiarity (float): A float specifying the max familiarity of artists to search for min_familiarity (float): A float specifying the min familiarity of artists to search for max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for Returns: A list of Artist objects Example: >>> results = artist.suggest(text='rad') >>> results >>> """ buckets = buckets or [] kwargs = {} kwargs['q'] = q if max_familiarity is not None: kwargs['max_familiarity'] = max_familiarity if min_familiarity is not None: kwargs['min_familiarity'] = min_familiarity if max_hotttnesss is not None: kwargs['max_hotttnesss'] = max_hotttnesss if min_hotttnesss is not None: kwargs['min_hotttnesss'] = min_hotttnesss if results: kwargs['results'] = results if buckets: kwargs['bucket'] = buckets if limit: kwargs['limit'] = 'true' result = util.callm("%s/%s" % ('artist', 'suggest'), kwargs) return [Artist(**util.fix(a_dict)) for a_dict in result['response']['artists']]
def profile(ids=None, track_ids=None, buckets=None, limit=False): """get the profiles for multiple songs at once Args: ids (str or list): a song ID or list of song IDs Kwargs: buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets Returns: A list of term document dicts Example: >>> song_ids = ['SOBSLVH12A8C131F38', 'SOXMSGY1338A5D5873', 'SOJPHZO1376210AFE5', 'SOBHNKR12AB0186218', 'SOSJAHD13770F4D40C'] >>> songs = song.profile(song_ids, buckets=['audio_summary']) [<song - Say It Ain't So>, <song - Island In The Sun>, <song - My Name Is Jonas>, <song - Buddy Holly>] >>> songs[0].audio_summary {u'analysis_url': u'https://echonest-analysis.s3.amazonaws.com/TR/7VRBNguufpHAQQ4ZjJ0eWsIQWl2S2_lrK-7Bp2azHOvPN4VFV-YnU7uO0dXgYtOKT-MTEa/3/full.json?Signature=hmNghHwfEsA4JKWFXnRi7mVP6T8%3D&Expires=1349809918&AWSAccessKeyId=AKIAJRDFEY23UEVW42BQ', u'audio_md5': u'b6079b2b88f8265be8bdd5fe9702e05c', u'danceability': 0.64540643050283253, u'duration': 255.92117999999999, u'energy': 0.30711665772260549, u'key': 8, u'liveness': 0.088994423525370583, u'loudness': -9.7799999999999994, u'mode': 1, u'speechiness': 0.031970700260699259, u'tempo': 76.049999999999997, u'time_signature': 4} >>> """ kwargs = {} if ids: if not isinstance(ids, list): ids = [ids] kwargs['id'] = ids if track_ids: if not isinstance(track_ids, list): track_ids = [track_ids] kwargs['track_id'] = track_ids buckets = buckets or [] if buckets: kwargs['bucket'] = buckets if limit: kwargs['limit'] = 'true' result = util.callm("%s/%s" % ('song', 'profile'), kwargs) return result
def profile(ids=None, track_ids=None, buckets=None, limit=False): """get the profiles for multiple songs at once Args: ids (str or list): a song ID or list of song IDs Kwargs: buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets Returns: A list of term document dicts Example: >>> song_ids = ['SOBSLVH12A8C131F38', 'SOXMSGY1338A5D5873', 'SOJPHZO1376210AFE5', 'SOBHNKR12AB0186218', 'SOSJAHD13770F4D40C'] >>> songs = song.profile(song_ids, buckets=['audio_summary']) [<song - Say It Ain't So>, <song - Island In The Sun>, <song - My Name Is Jonas>, <song - Buddy Holly>] >>> songs[0].audio_summary {u'analysis_url': u'https://echonest-analysis.s3.amazonaws.com/TR/7VRBNguufpHAQQ4ZjJ0eWsIQWl2S2_lrK-7Bp2azHOvPN4VFV-YnU7uO0dXgYtOKT-MTEa/3/full.json?Signature=hmNghHwfEsA4JKWFXnRi7mVP6T8%3D&Expires=1349809918&AWSAccessKeyId=AKIAJRDFEY23UEVW42BQ', u'audio_md5': u'b6079b2b88f8265be8bdd5fe9702e05c', u'danceability': 0.64540643050283253, u'duration': 255.92117999999999, u'energy': 0.30711665772260549, u'key': 8, u'liveness': 0.088994423525370583, u'loudness': -9.7799999999999994, u'mode': 1, u'speechiness': 0.031970700260699259, u'tempo': 76.049999999999997, u'time_signature': 4} >>> """ kwargs = {} if ids: if not isinstance(ids, list): ids = [ids] kwargs['id'] = ids if track_ids: if not isinstance(track_ids, list): track_ids = [track_ids] kwargs['track_id'] = track_ids buckets = buckets or [] if buckets: kwargs['bucket'] = buckets if limit: kwargs['limit'] = 'true' result = util.callm("%s/%s" % ('song', 'profile'), kwargs) return [Song(**util.fix(s_dict)) for s_dict in result['response']['songs']]
def _analyze(param_dict): param_dict['format'] = 'json' param_dict['bucket'] = 'audio_summary' param_dict['wait'] = 'true' result = util.callm('track/analyze', param_dict, POST=True, socket_timeout=300) return _track_from_response(result)
def profile(ids=None, track_ids=None, buckets=None, limit=False): """get the profiles for multiple songs at once Args: ids (str or list): a song ID or list of song IDs Kwargs: buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets Returns: A list of term document dicts Example: >>> song_ids = [u'SOGNMKX12B0B806320', u'SOLUHKP129F0698D49', u'SOOLGAZ127F3E1B87C', u'SOQKVPH12A58A7AF4D', u'SOHKEEM1288D3ED9F5'] >>> songs = song.profile(song_ids, buckets=['audio_summary']) [<song - chickfactor>, <song - One Step Closer>, <song - And I Am Telling You I'm Not Going (Glee Cast Version)>, <song - In This Temple As In The Hearts Of Man For Whom He Saved The Earth>, <song - Octet>] >>> songs[0].audio_summary {u'analysis_url': u'https://echonest-analysis.s3.amazonaws.com:443/TR/TRKHTDL123E858AC4B/3/full.json?Signature=sE6OwAzg6UvrtiX6nJJW1t7E6YI%3D&Expires=1287585351&AWSAccessKeyId=AKIAIAFEHLM3KJ2XMHRA', u'danceability': None, u'duration': 211.90485000000001, u'energy': None, u'key': 7, u'loudness': -16.736999999999998, u'mode': 1, u'tempo': 94.957999999999998, u'time_signature': 4} >>> """ kwargs = {} if ids: if not isinstance(ids, list): ids = [ids] kwargs['id'] = ids if track_ids: if not isinstance(track_ids, list): track_ids = [track_ids] kwargs['track_id'] = track_ids buckets = buckets or [] if buckets: kwargs['bucket'] = buckets if limit: kwargs['limit'] = 'true' result = util.callm("%s/%s" % ('song', 'profile'), kwargs) return [Song(**util.fix(s_dict)) for s_dict in result['response']['songs']]
def create_catalog_by_name(name, T="general"): """ Creates a catalog object, with a given name. Does not check to see if the catalog already exists. Create a catalog object like """ result = util.callm("catalog/create", {}, POST=True, data={"name":name, "type":T}) result = result['response'] return Catalog(result['id'], **dict( (k,result[k]) for k in ('name', 'type')))
def _upload(param_dict, timeout, data=None): """ Calls upload either with a local audio file, or a url. Returns a track object. """ param_dict["format"] = "json" param_dict["wait"] = "true" param_dict["bucket"] = "audio_summary" result = util.callm("track/upload", param_dict, POST=True, socket_timeout=300, data=data) return _track_from_response(result, timeout)
def _upload(param_dict, data = None): """ Calls upload either with a local audio file, or a url. Returns a track object. """ param_dict['format'] = 'json' param_dict['wait'] = 'true' param_dict['bucket'] = 'audio_summary' result = util.callm('track/upload', param_dict, POST = True, socket_timeout = 300, data = data) return _track_from_response(result)
def get_catalog_by_name(name): """ Grabs a catalog by name, if its there on the api key. Otherwise, an error is thrown (mirroring the API) """ kwargs = { 'name' : name, } result = util.callm("%s/%s" % ('catalog', 'profile'), kwargs) return Catalog(**util.fix(result['response']['catalog']))
def get_catalog_by_name(name): """ Grabs a catalog by name, if its there on the api key. Otherwise, an error is thrown (mirroring the API) """ kwargs = { 'name': name, } result = util.callm("%s/%s" % ('catalog', 'profile'), kwargs) return Catalog(**util.fix(result['response']['catalog']))
def _upload(param_dict, timeout, data): """ Calls upload either with a local audio file, or a url. Returns a track object. """ param_dict['format'] = 'json' param_dict['wait'] = 'true' param_dict['bucket'] = 'audio_summary' result = util.callm('track/upload', param_dict, POST = True, socket_timeout = 300, data = data) return _track_from_response(result, timeout)
def _wait_for_pending_track(trid, timeout): status = 'pending' start_time = time.time() while status == 'pending' and time.time() - start_time < timeout: time.sleep(1) param_dict = {'id': trid} # dict(id = identifier) param_dict['format'] = 'json' param_dict['bucket'] = 'audio_summary' result = util.callm('track/profile', param_dict) status = result['response']['track']['status'].lower() return result
def _wait_for_pending_track(trid, timeout): # timeout is ignored for now status = "pending" while status == "pending": time.sleep(1) param_dict = {"id": trid} # dict(id = identifier) param_dict["format"] = "json" param_dict["bucket"] = "audio_summary" result = util.callm("track/profile", param_dict) status = result["response"]["track"]["status"].lower() # TODO: timeout if necessary return result
def _wait_for_pending_track(trid, timeout): # timeout is ignored for now status = 'pending' while status == 'pending': time.sleep(1) param_dict = {'id': trid} # dict(id = identifier) param_dict['format'] = 'json' param_dict['bucket'] = 'audio_summary' result = util.callm('track/profile', param_dict) status = result['response']['track']['status'].lower() # TODO: timeout if necessary return result
def basic( type='artist-radio', artist_id=None, artist=None, song_id=None, song=None, track_id=None, dmca=False, results=15, buckets=None, limit=False, genres=None, ): """Get a basic playlist Args: Kwargs: type (str): a string representing the playlist type ('artist-radio' or 'song-radio') artist_id (str): the artist_id to seed the playlist artist (str): the name of an artist to seed the playlist song_id (str): a song_id to seed the playlist song (str): the name of a song to seed the playlist track_id (str): the name of a track to seed the playlist dmca (bool): make the playlist dmca-compliant results (int): desired length of the playlist buckets (list): A list of strings specifying which buckets to retrieve limit (bool): Whether results should be restricted to any idspaces given in the buckets parameter """ limit = str(limit).lower() dmca = str(dmca).lower() kwargs = locals() kwargs['bucket'] = kwargs['buckets'] del kwargs['buckets'] kwargs['genre'] = kwargs['genres'] del kwargs['genres'] result = util.callm("%s/%s" % ('playlist', 'basic'), kwargs) return [Song(**util.fix(s_dict)) for s_dict in result['response']['songs']]
def _wait_for_pending_track(trid, timeout): end = time.time() + timeout status = 'pending' while status == 'pending': if time.time() > end: raise Exception('analysis timed out after %2.2f seconds' % timeout) time.sleep(1) if time.time() > end: raise Exception('the operation didn\'t complete before the timeout (%d secs)' % timeout) param_dict = {'id': trid} # dict(id = identifier) param_dict['format'] = 'json' param_dict['bucket'] = 'audio_summary' result = util.callm('track/profile', param_dict) status = result['response']['track']['status'].lower() return result
def create_catalog_by_name(name, T="general"): """ Creates a catalog object, with a given name. Does not check to see if the catalog already exists. Create a catalog object like """ result = util.callm("catalog/create", {}, POST=True, data={ "name": name, "type": T }) result = result['response'] return Catalog(result['id'], **dict((k, result[k]) for k in ('name', 'type')))
def list_genres(): """Get a list of best genres to use with genre-radio playlisting Args: Example: >>> best_terms = artist.list_genres() >>> best_terms [{u'name': u'pop'}, {u'name': u'rock'}, {u'name': u'country'}, """ kwargs = {} result = util.callm("%s/%s" % ('artist', 'list_genres'), kwargs) return result['response']['genres']
def _wait_for_pending_track(trid, timeout): status = 'pending' param_dict = {'id': trid} param_dict['format'] = 'json' param_dict['bucket'] = 'audio_summary' start_time = time.time() end_time = start_time + timeout # counter for seconds to wait before checking track profile again. timeout_counter = 3 while status == 'pending' and time.time() < end_time: time.sleep(timeout_counter) result = util.callm('track/profile', param_dict) status = result['response']['track']['status'].lower() # Slowly increment to wait longer each time. timeout_counter += timeout_counter / 2 return result
def basic( type="artist-radio", artist_id=None, artist=None, song_id=None, song=None, track_id=None, dmca=False, results=15, buckets=None, limit=False, ): """Get a basic playlist Args: Kwargs: type (str): a string representing the playlist type ('artist-radio' or 'song-radio') artist_id (str): the artist_id to seed the playlist artist (str): the name of an artist to seed the playlist song_id (str): a song_id to seed the playlist song (str): the name of a song to seed the playlist track_id (str): the name of a track to seed the playlist dmca (bool): make the playlist dmca-compliant results (int): desired length of the playlist buckets (list): A list of strings specifying which buckets to retrieve limit (bool): Whether results should be restricted to any idspaces given in the buckets parameter """ limit = str(limit).lower() dmca = str(dmca).lower() kwargs = locals() kwargs["bucket"] = kwargs["buckets"] del kwargs["buckets"] result = util.callm("%s/%s" % ("playlist", "basic"), kwargs) return [Song(**util.fix(s_dict)) for s_dict in result["response"]["songs"]]
def top_hottt(start=0, results=15, buckets=None, limit=False): """Get the top hotttest artists, according to The Echo Nest Args: Kwargs: results (int): An integer number of results to return start (int): An integer starting value for the result set buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets Returns: A list of hottt Artist objects Example: >>> hot_stuff = artist.top_hottt() >>> hot_stuff [<artist - Deerhunter>, <artist - Sufjan Stevens>, <artist - Belle and Sebastian>, <artist - Glee Cast>, <artist - Linkin Park>, <artist - Neil Young>, <artist - Jimmy Eat World>, <artist - Kanye West>, <artist - Katy Perry>, <artist - Bruno Mars>, <artist - Lady Gaga>, <artist - Rihanna>, <artist - Lil Wayne>, <artist - Jason Mraz>, <artist - Green Day>] >>> """ buckets = buckets or [] kwargs = {} if start: kwargs['start'] = start if results: kwargs['results'] = results if buckets: kwargs['bucket'] = buckets if limit: kwargs['limit'] = 'true' """Get top hottt artists""" result = util.callm("%s/%s" % ('artist', 'top_hottt'), kwargs) return [ Artist(**util.fix(a_dict)) for a_dict in result['response']['artists'] ]
def top_hottt(start=0, results=15, buckets = None, limit=False): """Get the top hotttest artists, according to The Echo Nest Args: Kwargs: results (int): An integer number of results to return start (int): An integer starting value for the result set buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets Returns: A list of hottt Artist objects Example: >>> hot_stuff = artist.top_hottt() >>> hot_stuff [<artist - Deerhunter>, <artist - Sufjan Stevens>, <artist - Belle and Sebastian>, <artist - Glee Cast>, <artist - Linkin Park>, <artist - Neil Young>, <artist - Jimmy Eat World>, <artist - Kanye West>, <artist - Katy Perry>, <artist - Bruno Mars>, <artist - Lady Gaga>, <artist - Rihanna>, <artist - Lil Wayne>, <artist - Jason Mraz>, <artist - Green Day>] >>> """ buckets = buckets or [] kwargs = {} if start: kwargs['start'] = start if results: kwargs['results'] = results if buckets: kwargs['bucket'] = buckets if limit: kwargs['limit'] = 'true' """Get top hottt artists""" result = util.callm("%s/%s" % ('artist', 'top_hottt'), kwargs) return [Artist(**util.fix(a_dict)) for a_dict in result['response']['artists']]
def list_terms(type): """Get a list of best terms to use with search Args: Kwargs: type (str): the type of term to return, either 'mood' or 'style' Example: >>> best_terms = artist.list_terms('mood') >>> best_terms [{u'name': u'aggressive'}, {u'name': u'ambient'}, {u'name': u'angry'}, {u'name': u'angst-ridden'}, {u'name': u'bouncy'}, {u'name': u'calming'}, {u'name': u'carefree'}, etc.] """ kwargs = {'type': type} result = util.callm("%s/%s" % ('artist', 'list_terms'), kwargs) return result['response']['terms']
def search(name=None, description=None, results=15, buckets=None, limit=False, \ fuzzy_match=False, sort=None, max_familiarity=None, min_familiarity=None, \ max_hotttnesss=None, min_hotttnesss=None, test_new_things=None): """Search for artists by name, description, or constraint. Args: Kwargs: name (str): the name of an artist description (str): A string describing the artist results (int): An integer number of results to return buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets fuzzy_match (bool): A boolean indicating whether or not to search for similar sounding matches (only works with name) max_familiarity (float): A float specifying the max familiarity of artists to search for min_familiarity (float): A float specifying the min familiarity of artists to search for max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for Returns: A list of Artist objects Example: >>> results = artist.search(name='t-pain') >>> results [<artist - T-Pain>, <artist - T-Pain & Lil Wayne>, <artist - T Pain & 2 Pistols>, <artist - Roscoe Dash & T-Pain>, <artist - Tony Moxberg & T-Pain>, <artist - Flo-Rida (feat. T-Pain)>, <artist - Shortyo/Too Short/T-Pain>] >>> """ buckets = buckets or [] kwargs = {} if name: kwargs['name'] = name if description: kwargs['description'] = description if results: kwargs['results'] = results if buckets: kwargs['bucket'] = buckets if limit: kwargs['limit'] = 'true' if fuzzy_match: kwargs['fuzzy_match'] = 'true' if max_familiarity is not None: kwargs['max_familiarity'] = max_familiarity if min_familiarity is not None: kwargs['min_familiarity'] = min_familiarity if max_hotttnesss is not None: kwargs['max_hotttnesss'] = max_hotttnesss if min_hotttnesss is not None: kwargs['min_hotttnesss'] = min_hotttnesss if test_new_things is not None: kwargs['test_new_things'] = test_new_things if sort: kwargs['sort'] = sort """Search for artists""" result = util.callm("%s/%s" % ('artist', 'search'), kwargs) return [ Artist(**util.fix(a_dict)) for a_dict in result['response']['artists'] ]
def search(name=None, description=None, style=None, mood=None, start=0, \ results=15, buckets=None, limit=False, \ fuzzy_match=False, sort=None, max_familiarity=None, min_familiarity=None, \ max_hotttnesss=None, min_hotttnesss=None, test_new_things=None, rank_type=None, \ artist_start_year_after=None, artist_start_year_before=None,artist_end_year_after=None,artist_end_year_before=None): """Search for artists by name, description, or constraint. Args: Kwargs: name (str): the name of an artist description (str): A string describing the artist style (str): A string describing the style/genre of the artist mood (str): A string describing the mood of the artist start (int): An integer starting value for the result set results (int): An integer number of results to return buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets fuzzy_match (bool): A boolean indicating whether or not to search for similar sounding matches (only works with name) max_familiarity (float): A float specifying the max familiarity of artists to search for min_familiarity (float): A float specifying the min familiarity of artists to search for max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for artist_start_year_before (int): Returned artists will have started recording music before this year. artist_start_year_after (int): Returned artists will have started recording music after this year. artist_end_year_before (int): Returned artists will have stopped recording music before this year. artist_end_year_after (int): Returned artists will have stopped recording music after this year. rank_type (str): A string denoting the desired ranking for description searches, either 'relevance' or 'familiarity' Returns: A list of Artist objects Example: >>> results = artist.search(name='t-pain') >>> results [<artist - T-Pain>, <artist - T-Pain & Lil Wayne>, <artist - T Pain & 2 Pistols>, <artist - Roscoe Dash & T-Pain>, <artist - Tony Moxberg & T-Pain>, <artist - Flo-Rida (feat. T-Pain)>, <artist - Shortyo/Too Short/T-Pain>] >>> """ limit = str(limit).lower() fuzzy_match = str(fuzzy_match).lower() kwargs = locals() kwargs['bucket'] = buckets or [] del kwargs['buckets'] """Search for artists""" result = util.callm("%s/%s" % ('artist', 'search'), kwargs) return [Artist(**util.fix(a_dict)) for a_dict in result['response']['artists']]
def search(title=None, artist=None, artist_id=None, combined=None, description=None, style=None, mood=None, \ results=None, start=None, max_tempo=None, min_tempo=None, \ max_duration=None, min_duration=None, max_loudness=None, min_loudness=None, \ artist_max_familiarity=None, artist_min_familiarity=None, artist_max_hotttnesss=None, \ artist_min_hotttnesss=None, song_max_hotttnesss=None, song_min_hotttnesss=None, mode=None, \ min_energy=None, max_energy=None, min_danceability=None, max_danceability=None, \ key=None, max_latitude=None, min_latitude=None, max_longitude=None, min_longitude=None, \ sort=None, buckets = None, limit=False, test_new_things=None, rank_type=None, artist_start_year_after=None, artist_start_year_before=None, artist_end_year_after=None, artist_end_year_before=None): """Search for songs by name, description, or constraint. Args: Kwargs: title (str): the name of a song artist (str): the name of an artist artist_id (str): the artist_id combined (str): the artist name and song title description (str): A string describing the artist and song style (str): A string describing the style/genre of the artist and song mood (str): A string describing the mood of the artist and song results (int): An integer number of results to return max_tempo (float): The max tempo of song results min_tempo (float): The min tempo of song results max_duration (float): The max duration of song results min_duration (float): The min duration of song results max_loudness (float): The max loudness of song results min_loudness (float): The min loudness of song results artist_max_familiarity (float): A float specifying the max familiarity of artists to search for artist_min_familiarity (float): A float specifying the min familiarity of artists to search for artist_max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for artist_min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for song_max_hotttnesss (float): A float specifying the max hotttnesss of songs to search for song_min_hotttnesss (float): A float specifying the max hotttnesss of songs to search for max_energy (float): The max energy of song results min_energy (float): The min energy of song results max_dancibility (float): The max dancibility of song results min_dancibility (float): The min dancibility of song results mode (int): 0 or 1 (minor or major) key (int): 0-11 (c, c-sharp, d, e-flat, e, f, f-sharp, g, a-flat, a, b-flat, b) max_latitude (float): A float specifying the max latitude of artists to search for min_latitude (float): A float specifying the min latitude of artists to search for max_longitude (float): A float specifying the max longitude of artists to search for min_longitude (float): A float specifying the min longitude of artists to search for sort (str): A string indicating an attribute and order for sorting the results buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets rank_type (str): A string denoting the desired ranking for description searches, either 'relevance' or 'familiarity artist_start_year_before (int): Returned songs's artists will have started recording music before this year. artist_start_year_after (int): Returned songs's artists will have started recording music after this year. artist_end_year_before (int): Returned songs's artists will have stopped recording music before this year. artist_end_year_after (int): Returned songs's artists will have stopped recording music after this year. Returns: A list of Song objects Example: >>> results = song.search(artist='shakira', title='she wolf', buckets=['id:7digital', 'tracks'], limit=True, results=1) >>> results [<song - She Wolf>] >>> results[0].get_tracks('7digital')[0] {u'catalog': u'7digital', u'foreign_id': u'7digital:track:7854109', u'id': u'TRTOBSE12903CACEC4', u'preview_url': u'http://previews.7digital.com/clips/34/7854109.clip.mp3', u'release_image': u'http://cdn.7static.com/static/img/sleeveart/00/007/081/0000708184_200.jpg'} >>> """ limit = str(limit).lower() kwargs = locals() kwargs['bucket'] = buckets del kwargs['buckets'] result = util.callm("%s/%s" % ('song', 'search'), kwargs) return [Song(**util.fix(s_dict)) for s_dict in result['response']['songs']]
def static(type='artist', artist_pick='song_hotttnesss-desc', variety=.5, artist_id=None, artist=None, \ song_id=None, description=None, results=15, max_tempo=None, min_tempo=None, max_duration=None, \ min_duration=None, max_loudness=None, min_loudness=None, max_danceability=None, min_danceability=None, \ max_energy=None, min_energy=None, artist_max_familiarity=None, artist_min_familiarity=None, \ artist_max_hotttnesss=None, artist_min_hotttnesss=None, song_max_hotttnesss=None, song_min_hotttnesss=None, \ min_longitude=None, max_longitude=None, min_latitude=None, max_latitude=None, \ mode=None, key=None, buckets=[], sort=None, limit=False, seed_catalog=None, source_catalog=None): """Get a static playlist Args: Kwargs: type (str): a string representing the playlist type ('artist', 'artist-radio', ...) artist_pick (str): How songs should be chosen for each artist variety (float): A number between 0 and 1 specifying the variety of the playlist artist_id (str): the artist_id artist (str): the name of an artist song_id (str): the song_id description (str): A string describing the artist and song results (int): An integer number of results to return max_tempo (float): The max tempo of song results min_tempo (float): The min tempo of song results max_duration (float): The max duration of song results min_duration (float): The min duration of song results max_loudness (float): The max loudness of song results min_loudness (float): The min loudness of song results artist_max_familiarity (float): A float specifying the max familiarity of artists to search for artist_min_familiarity (float): A float specifying the min familiarity of artists to search for artist_max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for artist_min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for song_max_hotttnesss (float): A float specifying the max hotttnesss of songs to search for song_min_hotttnesss (float): A float specifying the max hotttnesss of songs to search for max_energy (float): The max energy of song results min_energy (float): The min energy of song results max_dancibility (float): The max dancibility of song results min_dancibility (float): The min dancibility of song results mode (int): 0 or 1 (minor or major) key (int): 0-11 (c, c-sharp, d, e-flat, e, f, f-sharp, g, a-flat, a, b-flat, b) max_latitude (float): A float specifying the max latitude of artists to search for min_latitude (float): A float specifying the min latitude of artists to search for max_longitude (float): A float specifying the max longitude of artists to search for min_longitude (float): A float specifying the min longitude of artists to search for sort (str): A string indicating an attribute and order for sorting the results buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets seed_catalog (str or Catalog): An Artist Catalog object or Artist Catalog id to use as a seed source_catalog (str or Catalog): A Catalog object or catalog id Returns: A list of Song objects Example: >>> p = playlist.static(type='artist-radio', artist=['ida maria', 'florence + the machine']) >>> p [<song - Pickpocket>, <song - Self-Taught Learner>, <song - Maps>, <song - Window Blues>, <song - That's Not My Name>, <song - My Lover Will Go>, <song - Home Sweet Home>, <song - Stella & God>, <song - Don't You Want To Share The Guilt?>, <song - Forget About It>, <song - Dull Life>, <song - This Trumpet In My Head>, <song - Keep Your Head>, <song - One More Time>, <song - Knights in Mountain Fox Jackets>] >>> """ kwargs = {} if type: kwargs['type'] = type if artist_pick: kwargs['artist_pick'] = artist_pick if variety is not None: kwargs['variety'] = variety if artist: kwargs['artist'] = artist if artist_id: kwargs['artist_id'] = artist_id if song_id: kwargs['song_id'] = song_id if description: kwargs['description'] = description if results is not None: kwargs['results'] = results if max_tempo is not None: kwargs['max_tempo'] = max_tempo if min_tempo is not None: kwargs['min_tempo'] = min_tempo if max_duration is not None: kwargs['max_duration'] = max_duration if min_duration is not None: kwargs['min_duration'] = min_duration if max_loudness is not None: kwargs['max_loudness'] = max_loudness if min_loudness is not None: kwargs['min_loudness'] = min_loudness if max_danceability is not None: kwargs['max_danceability'] = max_danceability if min_danceability is not None: kwargs['min_danceability'] = min_danceability if max_energy is not None: kwargs['max_energy'] = max_energy if min_energy is not None: kwargs['min_energy'] = min_energy if artist_max_familiarity is not None: kwargs['artist_max_familiarity'] = artist_max_familiarity if artist_min_familiarity is not None: kwargs['artist_min_familiarity'] = artist_min_familiarity if artist_max_hotttnesss is not None: kwargs['artist_max_hotttnesss'] = artist_max_hotttnesss if artist_min_hotttnesss is not None: kwargs['artist_min_hotttnesss'] = artist_min_hotttnesss if song_max_hotttnesss is not None: kwargs['song_max_hotttnesss'] = song_max_hotttnesss if song_min_hotttnesss is not None: kwargs['song_min_hotttnesss'] = song_min_hotttnesss if mode is not None: kwargs['mode'] = mode if key is not None: kwargs['key'] = key if max_latitude is not None: kwargs['max_latitude'] = max_latitude if min_latitude is not None: kwargs['min_latitude'] = min_latitude if max_longitude is not None: kwargs['max_longitude'] = max_longitude if min_longitude is not None: kwargs['min_longitude'] = min_longitude if sort: kwargs['sort'] = sort if buckets: kwargs['bucket'] = buckets if limit: kwargs['limit'] = 'true' if seed_catalog: if isinstance(seed_catalog, catalog.Catalog): kwargs['seed_catalog'] = seed_catalog.id else: kwargs['seed_catalog'] = seed_catalog if source_catalog: if isinstance(source_catalog, catalog.Catalog): kwargs['source_catalog'] = source_catalog.id else: kwargs['source_catalog'] = source_catalog result = util.callm("%s/%s" % ('playlist', 'static'), kwargs) return [Song(**util.fix(s_dict)) for s_dict in result['response']['songs']]
def _profile(param_dict): param_dict['format'] = 'json' param_dict['bucket'] = 'audio_summary' result = util.callm('track/profile', param_dict) return _track_from_response(result)
def identify(filename=None, query_obj=None, code=None, artist=None, title=None, release=None, duration=None, genre=None, buckets=None, version=None, codegen_start=0, codegen_duration=30): """Identify a song. Args: Kwargs: filename (str): The path of the file you want to analyze (requires codegen binary!) query_obj (dict or list): A dict or list of dicts containing a 'code' element with an fp code code (str): A fingerprinter code artist (str): An artist name title (str): A song title release (str): A release name duration (int): A song duration genre (str): A string representing the genre buckets (list): A list of strings specifying which buckets to retrieve version (str): The version of the code generator used to generate the code codegen_start (int): The point (in seconds) where the codegen should start codegen_duration (int): The duration (in seconds) the codegen should analyze Example: >>> qo {'code': 'eJxlldehHSEMRFsChAjlAIL-S_CZvfaXXxAglEaBTen300Qu__lAyoJYhVQdXTvXrmvXdTsKZOqoU1q63QNydBGfOd1cGX3scpb1jEiWRLaPcJureC6RVkXE69jL8pGHjpP48pLI1m7r9oiEyBXvoVv45Q-5IhylYLkIRxGO4rp18ZpEOmpFPopwfJjL0u3WceO3HB1DIvJRnkQeO1PCLIsIjBWEzYaShq4pV9Z0KzDiQ8SbSNuSyBZPOOxIJKR7dauEmXwotxDCqllEAVZlrX6F8Y-IJ0e169i_HQaqslaVtTq1W-1vKeupImzrxWWVI5cPlw-XDxckN-3kyeXDm3jKmqv6PtB1gfH1Eey5qu8qvAuMC4zLfPv1l3aqviylJhytFhF0mzqs6aYpYU04mlqgKWtNjppwNKWubR2FowlHUws0gWmPi668dSHq6rOuPuhqgRcVKKM8s-fZS937nBe23iz3Uctx9607z-kLph1i8YZ8f_TfzLXseBh7nXy9nn1YBAg4Nwjp4AzTL23M_U3Rh0-sdDFtyspNOb1bYeZZqz2Y6TaHmXeuNmfFdTueLuvdsbOU9luvtIkl4vI5F_92PVprM1-sdJ_o9_Guc0b_WimpD_Rt1DFg0sY3wyw08e6jlqhjH3o76naYvzWqhX9rOv15Y7Ww_MIF8dXzw30s_uHO5PPDfUonnzq_NJ8J93mngAkIz5jA29SqxGwwvxQsih-sozX0zVk__RFaf_qyG9hb8dktZZXd4a8-1ljB-c5bllXOe1HqHplzeiN4E7q9ZRdmJuI73gBEJ_HcAxUm74PAVDNL47D6OAfzTHI0mHpXAmY60QNmlqjDfIPzwUDYhVnoXqtvZGrBdMi3ClQUQ8D8rX_1JE_In94CBXER4lrrw0H867ei8x-OVz8c-Osh5plzTOySpKIROmFkbn5xVuK784vTyPpS3OlcSjHpL16saZnm4Bk66hte9sd80Dcj02f7xDVrExjk32cssKXjmflU_SxXmn4Y9Ttued10YM552h5Wtt_WeVR4U6LPWfbIdW31J4JOXnpn4qhH7yE_pdBH9E_sMwbNFr0z0IW5NA8aOZhLmOh3zSVNRZwxiZc5pb8fikGzIf-ampJnCSb3r-ZPfjPuvLm7CY_Vfa_k7SCzdwHNg5mICTSHDxyBWmaOSyLQpPmCSXyF-eL7MHo7zNd668JMb_N-AJJRuMwrX0jNx7a8-Rj5oN6nyWoL-jRv4pu7Ue821TzU3MhvpD9Fo-XI', 'code_count': 151, 'low_rank': 0, 'metadata': {'artist': 'Harmonic 313', 'bitrate': 198, 'codegen_time': 0.57198400000000005, 'decode_time': 0.37954599999999999, 'duration': 226, 'filename': 'koln.mp3', 'genre': 'Electronic', 'given_duration': 30, 'release': 'When Machines Exceed Human Intelligence', 'sample_rate': 44100, 'samples_decoded': 661816, 'start_offset': 0, 'title': 'kln', 'version': 3.1499999999999999}, 'tag': 0} >>> song.identify(query_obj=qo) [<song - Köln>] >>> """ post, has_data, data = False, False, False if filename: if os.path.exists(filename): query_obj = util.codegen(filename, start=codegen_start, duration=codegen_duration) if query_obj is None: raise Exception("The filename specified: %s could not be decoded." % filename) else: raise Exception("The filename specified: %s does not exist." % filename) if query_obj and not isinstance(query_obj, list): query_obj = [query_obj] if filename: # check codegen results from file in case we had a bad result for q in query_obj: if 'error' in q: raise Exception(q['error'] + ": " + q.get('metadata', {}).get('filename', '')) if not (filename or query_obj or code): raise Exception("Not enough information to identify song.") kwargs = {} if code: has_data = True kwargs['code'] = code if title: kwargs['title'] = title if release: kwargs['release'] = release if duration: kwargs['duration'] = duration if genre: kwargs['genre'] = genre if buckets: kwargs['bucket'] = buckets if version: kwargs['version'] = version if query_obj and any(query_obj): has_data = True data = {'query':json.dumps(query_obj)} post = True if has_data: result = util.callm("%s/%s" % ('song', 'identify'), kwargs, POST=post, data=data) return [Song(**util.fix(s_dict)) for s_dict in result['response'].get('songs',[])]
def _profile(param_dict, timeout): param_dict['format'] = 'json' param_dict['bucket'] = 'audio_summary' result = util.callm('track/profile', param_dict) return _track_from_response(result, timeout)
def get_attribute(self, method_name, **kwargs): result = util.callm("%s/%s" % (self._object_type, method_name), kwargs) return result['response']
def search(name=None, description=None, results=15, buckets=None, limit=False, \ fuzzy_match=False, sort=None, max_familiarity=None, min_familiarity=None, \ max_hotttnesss=None, min_hotttnesss=None): """Search for artists by name, description, or constraint. Args: Kwargs: name (str): the name of an artist description (str): A string describing the artist results (int): An integer number of results to return buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets fuzzy_match (bool): A boolean indicating whether or not to search for similar sounding matches (only works with name) max_familiarity (float): A float specifying the max familiarity of artists to search for min_familiarity (float): A float specifying the min familiarity of artists to search for max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for Returns: A list of Artist objects Example: >>> results = artist.search(name='t-pain') >>> results [<artist - T-Pain>, <artist - T-Pain & Lil Wayne>, <artist - T Pain & 2 Pistols>, <artist - Roscoe Dash & T-Pain>, <artist - Tony Moxberg & T-Pain>, <artist - Flo-Rida (feat. T-Pain)>, <artist - Shortyo/Too Short/T-Pain>] >>> """ buckets = buckets or [] kwargs = {} if name: kwargs['name'] = name if description: kwargs['description'] = description if results: kwargs['results'] = results if buckets: kwargs['bucket'] = buckets if limit: kwargs['limit'] = 'true' if fuzzy_match: kwargs['fuzzy_match'] = 'true' if max_familiarity is not None: kwargs['max_familiarity'] = max_familiarity if min_familiarity is not None: kwargs['min_familiarity'] = min_familiarity if max_hotttnesss is not None: kwargs['max_hotttnesss'] = max_hotttnesss if min_hotttnesss is not None: kwargs['min_hotttnesss'] = min_hotttnesss if sort: kwargs['sort'] = sort """Search for artists""" result = util.callm("%s/%s" % ('artist', 'search'), kwargs) return [Artist(**util.fix(a_dict)) for a_dict in result['response']['artists']]
def extract(text='', start=0, results=15, buckets=None, limit=False, max_familiarity=None, min_familiarity=None, max_hotttnesss=None, min_hotttnesss=None, sort=None): """Extract artist names from a block of text. Args: Kwargs: text (str): The text to extract artists from start (int): An integer starting value for the result set results (int): An integer number of results to return buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets max_familiarity (float): A float specifying the max familiarity of artists to search for min_familiarity (float): A float specifying the min familiarity of artists to search for max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for Returns: A list of Artist objects Example: >>> results = artist.extract(text='i saw beyonce at burger king, she was eatin, she was eatin') >>> results >>> """ buckets = buckets or [] kwargs = {} kwargs['text'] = text if max_familiarity is not None: kwargs['max_familiarity'] = max_familiarity if min_familiarity is not None: kwargs['min_familiarity'] = min_familiarity if max_hotttnesss is not None: kwargs['max_hotttnesss'] = max_hotttnesss if min_hotttnesss is not None: kwargs['min_hotttnesss'] = min_hotttnesss if start: kwargs['start'] = start if results: kwargs['results'] = results if buckets: kwargs['bucket'] = buckets if limit: kwargs['limit'] = 'true' if sort: kwargs['sort'] = sort result = util.callm("%s/%s" % ('artist', 'extract'), kwargs) return [Artist(**util.fix(a_dict)) for a_dict in result['response']['artists']]
def extract(text='', start=0, results=15, buckets=None, limit=False, max_familiarity=None, min_familiarity=None, max_hotttnesss=None, min_hotttnesss=None): """Extract artist names from a block of text. Args: Kwargs: text (str): The text to extract artists from start (int): An integer starting value for the result set results (int): An integer number of results to return buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets max_familiarity (float): A float specifying the max familiarity of artists to search for min_familiarity (float): A float specifying the min familiarity of artists to search for max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for Returns: A list of Artist objects Example: >>> results = artist.extract(text='i saw beyonce at burger king, she was eatin, she was eatin') >>> results >>> """ buckets = buckets or [] kwargs = {} kwargs['text'] = text if max_familiarity is not None: kwargs['max_familiarity'] = max_familiarity if min_familiarity is not None: kwargs['min_familiarity'] = min_familiarity if max_hotttnesss is not None: kwargs['max_hotttnesss'] = max_hotttnesss if min_hotttnesss is not None: kwargs['min_hotttnesss'] = min_hotttnesss if start: kwargs['start'] = start if results: kwargs['results'] = results if buckets: kwargs['bucket'] = buckets if limit: kwargs['limit'] = 'true' result = util.callm("%s/%s" % ('artist', 'extract'), kwargs) return [ Artist(**util.fix(a_dict)) for a_dict in result['response']['artists'] ]
def search(name=None, description=None, style=None, mood=None, start=0, \ results=15, buckets=None, limit=False, \ fuzzy_match=False, sort=None, max_familiarity=None, min_familiarity=None, \ max_hotttnesss=None, min_hotttnesss=None, test_new_things=None, rank_type=None, \ artist_start_year_after=None, artist_start_year_before=None,artist_end_year_after=None,artist_end_year_before=None): """Search for artists by name, description, or constraint. Args: Kwargs: name (str): the name of an artist description (str): A string describing the artist style (str): A string describing the style/genre of the artist mood (str): A string describing the mood of the artist start (int): An integer starting value for the result set results (int): An integer number of results to return buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets fuzzy_match (bool): A boolean indicating whether or not to search for similar sounding matches (only works with name) max_familiarity (float): A float specifying the max familiarity of artists to search for min_familiarity (float): A float specifying the min familiarity of artists to search for max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for artist_start_year_before (int): Returned artists will have started recording music before this year. artist_start_year_after (int): Returned artists will have started recording music after this year. artist_end_year_before (int): Returned artists will have stopped recording music before this year. artist_end_year_after (int): Returned artists will have stopped recording music after this year. rank_type (str): A string denoting the desired ranking for description searches, either 'relevance' or 'familiarity' Returns: A list of Artist objects Example: >>> results = artist.search(name='t-pain') >>> results [<artist - T-Pain>, <artist - T-Pain & Lil Wayne>, <artist - T Pain & 2 Pistols>, <artist - Roscoe Dash & T-Pain>, <artist - Tony Moxberg & T-Pain>, <artist - Flo-Rida (feat. T-Pain)>, <artist - Shortyo/Too Short/T-Pain>] >>> """ limit = str(limit).lower() fuzzy_match = str(fuzzy_match).lower() kwargs = locals() kwargs['bucket'] = buckets or [] del kwargs['buckets'] """Search for artists""" result = util.callm("%s/%s" % ('artist', 'search'), kwargs) return [ Artist(**util.fix(a_dict)) for a_dict in result['response']['artists'] ]
def static(type='artist', artist_pick='song_hotttnesss-desc', variety=.5, artist_id=None, artist=None, song_id=None, track_id=None, description=None, style=None, mood=None, results=15, max_tempo=None, min_tempo=None, max_duration=None, min_duration=None, max_loudness=None, min_loudness=None, max_danceability=None, min_danceability=None, max_energy=None, min_energy=None, artist_max_familiarity=None, artist_min_familiarity=None, artist_max_hotttnesss=None, artist_min_hotttnesss=None, song_max_hotttnesss=None, song_min_hotttnesss=None, min_longitude=None, max_longitude=None, min_latitude=None, max_latitude=None, adventurousness=0.2, mode=None, key=None, buckets=None, sort=None, limit=False, seed_catalog=None, source_catalog=None, rank_type=None, test_new_things=None, artist_start_year_after=None, artist_start_year_before=None, artist_end_year_after=None, artist_end_year_before=None, dmca=False, distribution=None, song_type=None, genres=None): """Get a static playlist Args: Kwargs: type (str): a string representing the playlist type ('artist', 'artist-radio', ...) artist_pick (str): How songs should be chosen for each artist variety (float): A number between 0 and 1 specifying the variety of the playlist artist_id (str): the artist_id artist (str): the name of an artist song_id (str): the song_id track_id (str): the track id description (str): A string describing the artist and song style (str): A string describing the style/genre of the artist and song mood (str): A string describing the mood of the artist and song results (int): An integer number of results to return max_tempo (float): The max tempo of song results min_tempo (float): The min tempo of song results max_duration (float): The max duration of song results min_duration (float): The min duration of song results max_loudness (float): The max loudness of song results min_loudness (float): The min loudness of song results artist_max_familiarity (float): A float specifying the max familiarity of artists to search for artist_min_familiarity (float): A float specifying the min familiarity of artists to search for artist_max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for artist_min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for song_max_hotttnesss (float): A float specifying the max hotttnesss of songs to search for song_min_hotttnesss (float): A float specifying the max hotttnesss of songs to search for max_energy (float): The max energy of song results min_energy (float): The min energy of song results max_danceability (float): The max danceability of song results min_danceability (float): The min danceability of song results mode (int): 0 or 1 (minor or major) key (int): 0-11 (c, c-sharp, d, e-flat, e, f, f-sharp, g, a-flat, a, b-flat, b) max_latitude (float): A float specifying the max latitude of artists to search for min_latitude (float): A float specifying the min latitude of artists to search for max_longitude (float): A float specifying the max longitude of artists to search for min_longitude (float): A float specifying the min longitude of artists to search for adventurousness (float): A float ranging from 0 for old favorites to 1.0 for unheard music according to a seed_catalog sort (str): A string indicating an attribute and order for sorting the results buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets seed_catalog (str or Catalog): An Artist Catalog object or Artist Catalog id to use as a seed source_catalog (str or Catalog): A Catalog object or catalog id rank_type (str): A string denoting the desired ranking for description searches, either 'relevance' or 'familiarity' artist_start_year_before (int): Returned song's artists will have started recording music before this year. artist_start_year_after (int): Returned song's artists will have started recording music after this year. artist_end_year_before (int): Returned song's artists will have stopped recording music before this year. artist_end_year_after (int): Returned song's artists will have stopped recording music after this year. distribution (str): Affects the range of artists returned and how many songs each artist will have in the playlist relative to how similar they are to the seed. (wandering, focused) song_type (str): A string or list of strings of the type of songs allowed. The only valid song type at the moment is 'christmas'. Valid formats are 'song_type', 'song_type:true', 'song_type:false', or 'song_type:any'. Returns: A list of Song objects Example: >>> p = playlist.static(type='artist-radio', artist=['ida maria', 'florence + the machine']) >>> p [<song - Pickpocket>, <song - Self-Taught Learner>, <song - Maps>, <song - Window Blues>, <song - That's Not My Name>, <song - My Lover Will Go>, <song - Home Sweet Home>, <song - Stella & God>, <song - Don't You Want To Share The Guilt?>, <song - Forget About It>, <song - Dull Life>, <song - This Trumpet In My Head>, <song - Keep Your Head>, <song - One More Time>, <song - Knights in Mountain Fox Jackets>] >>> """ limit = str(limit).lower() if seed_catalog and isinstance(seed_catalog, catalog.Catalog): seed_catalog = seed_catalog.id if source_catalog and isinstance(source_catalog, catalog.Catalog): source_catalog = source_catalog.id dmca = str(dmca).lower() kwargs = locals() kwargs['bucket'] = kwargs['buckets'] or [] del kwargs['buckets'] kwargs['genre'] = kwargs['genres'] del kwargs['genres'] result = util.callm("%s/%s" % ('playlist', 'static'), kwargs) return [Song(**util.fix(s_dict)) for s_dict in result['response']['songs']]
def _analyze(param_dict): param_dict['format'] = 'json' param_dict['bucket'] = 'audio_summary' param_dict['wait'] = 'true' result = util.callm('track/analyze', param_dict, POST = True, socket_timeout = 300) return _track_from_response(result)
def search(title=None, artist=None, artist_id=None, combined=None, description=None, results=None, start=None, max_tempo=None, \ min_tempo=None, max_duration=None, min_duration=None, max_loudness=None, min_loudness=None, \ artist_max_familiarity=None, artist_min_familiarity=None, artist_max_hotttnesss=None, \ artist_min_hotttnesss=None, song_max_hotttnesss=None, song_min_hotttnesss=None, mode=None, \ min_energy=None, max_energy=None, min_danceability=None, max_danceability=None, \ key=None, max_latitude=None, min_latitude=None, max_longitude=None, min_longitude=None, \ sort=None, buckets = None, limit=False): """Search for songs by name, description, or constraint. Args: Kwargs: title (str): the name of a song artist (str): the name of an artist artist_id (str): the artist_id combined (str): the artist name and song title description (str): A string describing the artist and song results (int): An integer number of results to return max_tempo (float): The max tempo of song results min_tempo (float): The min tempo of song results max_duration (float): The max duration of song results min_duration (float): The min duration of song results max_loudness (float): The max loudness of song results min_loudness (float): The min loudness of song results artist_max_familiarity (float): A float specifying the max familiarity of artists to search for artist_min_familiarity (float): A float specifying the min familiarity of artists to search for artist_max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for artist_min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for song_max_hotttnesss (float): A float specifying the max hotttnesss of songs to search for song_min_hotttnesss (float): A float specifying the max hotttnesss of songs to search for max_energy (float): The max energy of song results min_energy (float): The min energy of song results max_dancibility (float): The max dancibility of song results min_dancibility (float): The min dancibility of song results mode (int): 0 or 1 (minor or major) key (int): 0-11 (c, c-sharp, d, e-flat, e, f, f-sharp, g, a-flat, a, b-flat, b) max_latitude (float): A float specifying the max latitude of artists to search for min_latitude (float): A float specifying the min latitude of artists to search for max_longitude (float): A float specifying the max longitude of artists to search for min_longitude (float): A float specifying the min longitude of artists to search for sort (str): A string indicating an attribute and order for sorting the results buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets Returns: A list of Song objects Example: >>> results = song.search(artist='shakira', title='she wolf', buckets=['id:7digital', 'tracks'], limit=True, results=1) >>> results [<song - She Wolf>] >>> results[0].get_tracks('7digital')[0] {u'catalog': u'7digital', u'foreign_id': u'7digital:track:7854109', u'id': u'TRTOBSE12903CACEC4', u'preview_url': u'http://previews.7digital.com/clips/34/7854109.clip.mp3', u'release_image': u'http://cdn.7static.com/static/img/sleeveart/00/007/081/0000708184_200.jpg'} >>> """ kwargs = {} if title: kwargs['title'] = title if artist: kwargs['artist'] = artist if artist_id: kwargs['artist_id'] = artist_id if combined: kwargs['combined'] = combined if description: kwargs['description'] = description if results is not None: kwargs['results'] = results if start is not None: kwargs['start'] = start if max_tempo is not None: kwargs['max_tempo'] = max_tempo if min_tempo is not None: kwargs['min_tempo'] = min_tempo if max_duration is not None: kwargs['max_duration'] = max_duration if min_duration is not None: kwargs['min_duration'] = min_duration if max_loudness is not None: kwargs['max_loudness'] = max_loudness if min_loudness is not None: kwargs['min_loudness'] = min_loudness if artist_max_familiarity is not None: kwargs['artist_max_familiarity'] = artist_max_familiarity if artist_min_familiarity is not None: kwargs['artist_min_familiarity'] = artist_min_familiarity if artist_max_hotttnesss is not None: kwargs['artist_max_hotttnesss'] = artist_max_hotttnesss if artist_min_hotttnesss is not None: kwargs['artist_min_hotttnesss'] = artist_min_hotttnesss if song_max_hotttnesss is not None: kwargs['song_max_hotttnesss'] = song_max_hotttnesss if song_min_hotttnesss is not None: kwargs['song_min_hotttnesss'] = song_min_hotttnesss if min_danceability is not None: kwargs['min_danceability'] = min_danceability if max_danceability is not None: kwargs['max_danceability'] = max_danceability if max_energy is not None: kwargs['max_energy'] = max_energy if max_energy is not None: kwargs['max_energy'] = max_energy if mode is not None: kwargs['mode'] = mode if key is not None: kwargs['key'] = key if max_latitude is not None: kwargs['max_latitude'] = max_latitude if min_latitude is not None: kwargs['min_latitude'] = min_latitude if max_longitude is not None: kwargs['max_longitude'] = max_longitude if min_longitude is not None: kwargs['min_longitude'] = min_longitude if sort: kwargs['sort'] = sort if buckets: kwargs['bucket'] = buckets if limit: kwargs['limit'] = 'true' result = util.callm("%s/%s" % ('song', 'search'), kwargs) return [Song(**util.fix(s_dict)) for s_dict in result['response']['songs']]
def similar(names=None, ids=None, start=0, results=15, buckets=None, limit=False, max_familiarity=None, min_familiarity=None, max_hotttnesss=None, min_hotttnesss=None, seed_catalog=None,artist_start_year_before=None, \ artist_start_year_after=None,artist_end_year_before=None,artist_end_year_after=None): """Return similar artists to this one Args: Kwargs: ids (str/list): An artist id or list of ids names (str/list): An artist name or list of names results (int): An integer number of results to return buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets start (int): An integer starting value for the result set max_familiarity (float): A float specifying the max familiarity of artists to search for min_familiarity (float): A float specifying the min familiarity of artists to search for max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for seed_catalog (str): A string specifying the catalog similar artists are restricted to Returns: A list of similar Artist objects Example: >>> some_dudes = [artist.Artist('weezer'), artist.Artist('radiohead')] >>> some_dudes [<artist - Weezer>, <artist - Radiohead>] >>> sims = artist.similar(ids=[art.id for art in some_dudes], results=5) >>> sims [<artist - The Smashing Pumpkins>, <artist - Biffy Clyro>, <artist - Death Cab for Cutie>, <artist - Jimmy Eat World>, <artist - Nerf Herder>] >>> """ buckets = buckets or [] kwargs = {} if ids: if not isinstance(ids, list): ids = [ids] kwargs['id'] = ids if names: if not isinstance(names, list): names = [names] kwargs['name'] = names if max_familiarity is not None: kwargs['max_familiarity'] = max_familiarity if min_familiarity is not None: kwargs['min_familiarity'] = min_familiarity if max_hotttnesss is not None: kwargs['max_hotttnesss'] = max_hotttnesss if min_hotttnesss is not None: kwargs['min_hotttnesss'] = min_hotttnesss if seed_catalog is not None: kwargs['seed_catalog'] = seed_catalog if start: kwargs['start'] = start if results: kwargs['results'] = results if buckets: kwargs['bucket'] = buckets if limit: kwargs['limit'] = 'true' if artist_start_year_before: kwargs['artist_start_year_before'] = artist_start_year_before if artist_start_year_after: kwargs['artist_start_year_after'] = artist_start_year_after if artist_end_year_before: kwargs['artist_end_year_before'] = artist_end_year_before if artist_end_year_after: kwargs['artist_end_year_after'] = artist_end_year_after result = util.callm("%s/%s" % ('artist', 'similar'), kwargs) return [Artist(**util.fix(a_dict)) for a_dict in result['response']['artists']]
def similar(names=None, ids=None, start=0, results=15, buckets=None, limit=False, max_familiarity=None, min_familiarity=None, max_hotttnesss=None, min_hotttnesss=None, seed_catalog=None,artist_start_year_before=None, \ artist_start_year_after=None,artist_end_year_before=None,artist_end_year_after=None): """Return similar artists to this one Args: Kwargs: ids (str/list): An artist id or list of ids names (str/list): An artist name or list of names results (int): An integer number of results to return buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets start (int): An integer starting value for the result set max_familiarity (float): A float specifying the max familiarity of artists to search for min_familiarity (float): A float specifying the min familiarity of artists to search for max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for seed_catalog (str): A string specifying the catalog similar artists are restricted to Returns: A list of similar Artist objects Example: >>> some_dudes = [artist.Artist('weezer'), artist.Artist('radiohead')] >>> some_dudes [<artist - Weezer>, <artist - Radiohead>] >>> sims = artist.similar(ids=[art.id for art in some_dudes], results=5) >>> sims [<artist - The Smashing Pumpkins>, <artist - Biffy Clyro>, <artist - Death Cab for Cutie>, <artist - Jimmy Eat World>, <artist - Nerf Herder>] >>> """ buckets = buckets or [] kwargs = {} if ids: if not isinstance(ids, list): ids = [ids] kwargs['id'] = ids if names: if not isinstance(names, list): names = [names] kwargs['name'] = names if max_familiarity is not None: kwargs['max_familiarity'] = max_familiarity if min_familiarity is not None: kwargs['min_familiarity'] = min_familiarity if max_hotttnesss is not None: kwargs['max_hotttnesss'] = max_hotttnesss if min_hotttnesss is not None: kwargs['min_hotttnesss'] = min_hotttnesss if seed_catalog is not None: kwargs['seed_catalog'] = seed_catalog if start: kwargs['start'] = start if results: kwargs['results'] = results if buckets: kwargs['bucket'] = buckets if limit: kwargs['limit'] = 'true' if artist_start_year_before: kwargs['artist_start_year_before'] = artist_start_year_before if artist_start_year_after: kwargs['artist_start_year_after'] = artist_start_year_after if artist_end_year_before: kwargs['artist_end_year_before'] = artist_end_year_before if artist_end_year_after: kwargs['artist_end_year_after'] = artist_end_year_after result = util.callm("%s/%s" % ('artist', 'similar'), kwargs) return [ Artist(**util.fix(a_dict)) for a_dict in result['response']['artists'] ]
def static(type='artist', artist_pick='song_hotttnesss-desc', variety=.5, artist_id=None, artist=None, \ song_id=None, track_id=None, description=None, style=None, mood=None, \ results=15, max_tempo=None, min_tempo=None, max_duration=None, \ min_duration=None, max_loudness=None, min_loudness=None, max_danceability=None, min_danceability=None, \ max_energy=None, min_energy=None, artist_max_familiarity=None, artist_min_familiarity=None, \ artist_max_hotttnesss=None, artist_min_hotttnesss=None, song_max_hotttnesss=None, song_min_hotttnesss=None, \ min_longitude=None, max_longitude=None, min_latitude=None, max_latitude=None, adventurousness=0.2, \ mode=None, key=None, buckets=[], sort=None, limit=False, seed_catalog=None, source_catalog=None, rank_type=None, test_new_things=None, artist_start_year_after=None, artist_start_year_before=None, artist_end_year_after=None, artist_end_year_before=None,dmca=False, distribution=None): """Get a static playlist Args: Kwargs: type (str): a string representing the playlist type ('artist', 'artist-radio', ...) artist_pick (str): How songs should be chosen for each artist variety (float): A number between 0 and 1 specifying the variety of the playlist artist_id (str): the artist_id artist (str): the name of an artist song_id (str): the song_id track_id (str): the track id description (str): A string describing the artist and song style (str): A string describing the style/genre of the artist and song mood (str): A string describing the mood of the artist and song results (int): An integer number of results to return max_tempo (float): The max tempo of song results min_tempo (float): The min tempo of song results max_duration (float): The max duration of song results min_duration (float): The min duration of song results max_loudness (float): The max loudness of song results min_loudness (float): The min loudness of song results artist_max_familiarity (float): A float specifying the max familiarity of artists to search for artist_min_familiarity (float): A float specifying the min familiarity of artists to search for artist_max_hotttnesss (float): A float specifying the max hotttnesss of artists to search for artist_min_hotttnesss (float): A float specifying the max hotttnesss of artists to search for song_max_hotttnesss (float): A float specifying the max hotttnesss of songs to search for song_min_hotttnesss (float): A float specifying the max hotttnesss of songs to search for max_energy (float): The max energy of song results min_energy (float): The min energy of song results max_dancibility (float): The max dancibility of song results min_dancibility (float): The min dancibility of song results mode (int): 0 or 1 (minor or major) key (int): 0-11 (c, c-sharp, d, e-flat, e, f, f-sharp, g, a-flat, a, b-flat, b) max_latitude (float): A float specifying the max latitude of artists to search for min_latitude (float): A float specifying the min latitude of artists to search for max_longitude (float): A float specifying the max longitude of artists to search for min_longitude (float): A float specifying the min longitude of artists to search for adventurousness (float): A float ranging from 0 for old favorites to 1.0 for unheard music according to a seed_catalog sort (str): A string indicating an attribute and order for sorting the results buckets (list): A list of strings specifying which buckets to retrieve limit (bool): A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets seed_catalog (str or Catalog): An Artist Catalog object or Artist Catalog id to use as a seed source_catalog (str or Catalog): A Catalog object or catalog id rank_type (str): A string denoting the desired ranking for description searches, either 'relevance' or 'familiarity' artist_start_year_before (int): Returned songs's artists will have started recording music before this year. artist_start_year_after (int): Returned songs's artists will have started recording music after this year. artist_end_year_before (int): Returned songs's artists will have stopped recording music before this year. artist_end_year_after (int): Returned songs's artists will have stopped recording music after this year. distribution (str): Affects the range of artists returned and how many songs each artsits will have in the playlist realative to how similar they are to the seed. (wandering, focused) Returns: A list of Song objects Example: >>> p = playlist.static(type='artist-radio', artist=['ida maria', 'florence + the machine']) >>> p [<song - Pickpocket>, <song - Self-Taught Learner>, <song - Maps>, <song - Window Blues>, <song - That's Not My Name>, <song - My Lover Will Go>, <song - Home Sweet Home>, <song - Stella & God>, <song - Don't You Want To Share The Guilt?>, <song - Forget About It>, <song - Dull Life>, <song - This Trumpet In My Head>, <song - Keep Your Head>, <song - One More Time>, <song - Knights in Mountain Fox Jackets>] >>> """ limit = str(limit).lower() if seed_catalog and isinstance(seed_catalog, catalog.Catalog): seed_catalog = seed_catalog.id if source_catalog and isinstance(source_catalog, catalog.Catalog): source_catalog = source_catalog.id dmca = str(dmca).lower() kwargs = locals() kwargs['bucket'] = kwargs['buckets'] del kwargs['buckets'] result = util.callm("%s/%s" % ('playlist', 'static'), kwargs) return [Song(**util.fix(s_dict)) for s_dict in result['response']['songs']]
def get_json_resource(resource_name, **kwargs): result = util.callm("%s.json" % resource_name, kwargs) return result