Consume EchoNest web service
"""
-__version__ = '0.0.4'
+__version__ = '0.0.5'
__author__ = 'Jack Kaliko'
getws(ECH)
+def get_mbid(obj, foreign='foreign_ids'):
+ if foreign in obj:
+ for frgnid in obj.get(foreign):
+ if frgnid.get('catalog') == 'musicbrainz':
+ return frgnid.get('foreign_id').split(':')[2]
+ return None
+
+
class SimaEch:
"""EchoNest http client
"""
root_url = 'http://{host}/api/{version}'.format(**ECH)
- ratelimit = None
name = 'EchoNest'
cache = False
stats = {'etag':0,
if not isinstance(artist, Artist):
raise TypeError('"{0!r}" not an Artist object'.format(artist))
if artist.mbid:
- payload.update(
- id='musicbrainz:artist:{0}'.format(artist.mbid))
+ payload.update(id='musicbrainz:artist:{0}'.format(artist.mbid))
else:
payload.update(name=artist.name)
payload.update(bucket='id:musicbrainz')
# Construct URL
ressource = '{0}/artist/similar'.format(SimaEch.root_url)
ans = self.http(ressource, payload)
- self._controls_answer(ans.json())
- for art in ans.json().get('response').get('artists'):
- mbid = None
- if 'foreign_ids' in art:
- for frgnid in art.get('foreign_ids'):
- if frgnid.get('catalog') == 'musicbrainz':
- mbid = frgnid.get('foreign_id'
- ).split(':')[2]
+ self._controls_answer(ans.json()) # pylint: disable=no-member
+ for art in ans.json().get('response').get('artists'): # pylint: disable=no-member
+ mbid = get_mbid(art)
yield Artist(mbid=mbid, name=art.get('name'))
def get_toptrack(self, artist=None):
# Construct URL
ressource = '{0}/song/search'.format(SimaEch.root_url)
ans = self.http(ressource, payload)
- self._controls_answer(ans.json())
+ self._controls_answer(ans.json()) # pylint: disable=no-member
titles = list()
- art = {
- 'artist': artist.name,
- 'musicbrainz_artistid': artist.mbid,
- }
- for song in ans.json().get('response').get('songs'):
+ art = {'artist': artist.name,
+ 'musicbrainz_artistid': artist.mbid,}
+ for song in ans.json().get('response').get('songs'): # pylint: disable=no-member
title = song.get('title')
+ if not art.get('musicbrainz_artistid'):
+ art['musicbrainz_artistid'] = get_mbid(song, 'artist_foreign_ids')
if title not in titles:
titles.append(title)
yield Track(title=title, **art)