import json import logging import requests logger = logging.getLogger(__name__) VALID_METRICS = ['mfccs', 'mfccsw', 'gfccs', 'gfccsw', 'key', 'bpm', 'onsetrate', 'moods', 'instruments', 'dortmund', 'rosamerica', 'tzanetakis'] class EndpointError(Exception): pass def get_similar_tracks_mbids_from_mbid(mbid, annoy_similarity): if annoy_similarity not in VALID_METRICS: raise AttributeError("Metric %s is not valid. Must be one of : " + print(VALID_METRICS)) headers = {'Content-Type': 'application/json'} endpoint = "acousticbrainz.org/api/v1/similarity" similar_tracks_mbids = [] similar_tracks = requests.get( 'https://{endpoint}/{annoy_similarity}/?recording_ids={mbid}&remove_dups&n_neighbours=1000' .format(endpoint=endpoint, annoy_similarity=annoy_similarity, mbid=mbid), headers=headers ) if similar_tracks.status_code != 200: logger.warning("Error while querying {endpoint!r} : {similar_tracks.content!r}") raise EndpointError j = json.loads(similar_tracks.content) for tracks in j['{mbid}'.format(mbid=mbid)]['0']: similar_tracks_mbids.append(tracks['recording_mbid']) return similar_tracks_mbids