def _annotate_tracks_with_echonest_data(tids): otids = tlib.annotate_tracks_from_cache('echonest', tids) if len(otids) > 0: stids = set(otids) uris = ['spotify:track:' + tid for tid in otids] try: if debug: print 'getting echonest info for', otids response = _get_en().get('song/profile', track_id=uris, bucket=_en_song_buckets) res = set() for song in response['songs']: for track in song['tracks']: tid = utils.uri_to_id(track['foreign_id']) if tid in stids: res.add(tid) tlib.annotate_track(tid, 'echonest', _flatten_en_song(song, tid)) diff = stids - res if len(diff) > 0: pass #print 'requested', len(stids), 'collected', len(res) except pyen.PyenException as e: print 'annotate_tracks_with_echonest_data:no info for', otids print 'echonest error', e.http_status, e.code, e.msg for tid in otids: tlib.annotate_track(tid, 'echonest', {'empty': 'empty'})
def _annotate_tracks_with_spotify_data(tids): tids = tlib.annotate_tracks_from_cache('spotify', tids) if len(tids) > 0: print 'annotate tracks with spotify', tids results = _get_spotify().tracks(tids) for track in results['tracks']: tlib.annotate_track(track['id'], 'spotify', track)
def _annotate_tracks_with_echonest_data(tids): otids = tlib.annotate_tracks_from_cache('echonest', tids) if len(otids) > 0: stids = set(otids) uris = [ 'spotify:track:' + tid for tid in otids] try: if debug: print 'getting echonest info for', otids response = _get_en().get('song/profile', track_id=uris, bucket=_en_song_buckets) res = set() for song in response['songs']: for track in song['tracks']: tid = utils.uri_to_id(track['foreign_id']) if tid in stids: res.add(tid) tlib.annotate_track(tid, 'echonest', _flatten_en_song(song, tid)) diff = stids - res if len(diff) > 0: pass #print 'requested', len(stids), 'collected', len(res) except pyen.PyenException as e: print 'annotate_tracks_with_echonest_data:no info for', otids print 'echonest error', e.http_status, e.code, e.msg for tid in otids: tlib.annotate_track(tid, 'echonest', {'empty': 'empty'})
def _annotate_tracks_with_spotify_data_full(tids): # full annotation print "spotify full annotate", len(tids) tids = tlib.annotate_tracks_from_cache('spotify', tids) if len(tids) > 0: # print 'annotate tracks with spotify', tids results = _get_spotify().tracks(tids) album_ids = set() artist_ids = set() for track in results['tracks']: album_ids.add(track['album']['id']) for artist in track['artists']: artist_ids.add(artist['id']) print " spotify artist annotate", len(artist_ids) print " spotify album annotate", len(album_ids) albums = get_albums(album_ids) artists = get_artists(artist_ids) for track in results['tracks']: ntrack = {} primary_artist = artists[track['artists'][0]['id']] album = albums[track['album']['id']] ntrack['duration_ms'] = track['duration_ms'] ntrack['explicit'] = track['explicit'] ntrack['popularity'] = track['popularity'] ntrack['track_number'] = track['track_number'] ntrack['disc_number'] = track['disc_number'] ntrack['primary_artist_genres'] = album['genres'] ntrack['primary_artist_popularity'] = primary_artist['popularity'] ntrack['primary_artist_followers'] = primary_artist['followers'] ntrack['album_name'] = album['name'] ntrack['album_id'] = album['id'] ntrack['album_genres'] = album['genres'] ntrack['album_release_date'] = album['release_date'] ntrack['album_popularity'] = album['popularity'] ntrack['album_type'] = album['album_type'] if False: ntrack['primary_artist'] = primary_artist full_artists = [] for artist in track['artists']: full_artists.append(artists[artist['id']]) track['artists'] = full_artists tlib.annotate_track(track['id'], 'spotify', ntrack)
def _annotate_tracks_with_audio_features(tids): otids = tlib.annotate_tracks_from_cache('audio', tids) if len(otids) > 0: stids = set(otids) try: results = _get_spotify().audio_features(otids) for track in results: if track and 'id' in track: # print 'audio', json.dumps(track, indent=4) tlib.annotate_track(track['id'], 'audio', track) except spotipy.SpotifyException as e: # we may get a 404 if we request features for a single # track and the track is missing. In this case we can # ignore the error if e.http_status >= 400 and e.http_status < 500: pass else: raise engine.PBLException(self, e.msg)
def _add_track(source, track): dur = int(track['duration_ms'] / 1000.) tlib.make_track(track['id'], track['name'], track['artists'][0]['name'], dur, source) tlib.annotate_track(track['id'], 'spotify', _flatten_track(track))
def _add_song(source, song): id = utils.uri_to_id(song['tracks'][0]['foreign_id']) dur = int(song['audio_summary']['duration']) tlib.make_track(id, song['title'], song['artist_name'], dur, source) tlib.annotate_track(id, 'echonest', _flatten_en_song(song, id)) return id
def _add_song(source, song): id = utils.uri_to_id(song['tracks'][0]['foreign_id']) dur = int(song['audio_summary']['duration'] ) tlib.make_track(id, song['title'], song['artist_name'], dur, source) tlib.annotate_track(id, 'echonest', _flatten_en_song(song, id)) return id