+ return (artist for artist in self.artist_walker(substr))
+
+ def search_albums(self, substr):
+ substr = substr.lower()
+ return (album for album in self.album_walker(substr))
+
+ def get_album(self, artistid):
+ return (artist for artist in self.artistid_walker(artistid))
+
+ def get_album(self, albumid):
+ return (album for album in self.albumid_walker(albumid))
+
+_GET2 = '''http://api.jamendo.com/get2/'''
+
+class Query(object):
+ last_query = time.time()
+
+ def __init__(self, order, select=['id', 'name', 'image', 'artist_name'], request='album', track=None, n=8):
+ if request == 'track':
+ self.url = "%s%s/%s/json/%s?n=%s&order=%s" % (_GET2, '+'.join(select), request, '+'.join(track), n, order)
+ else:
+ self.url = "%s%s/%s/json/?n=%s&order=%s" % (_GET2, '+'.join(select), request, n, order)
+
+ def emit(self):
+ """ratelimited query"""
+ now = time.time()
+ if now - self.last_query < 1.0:
+ time.sleep(1.0 - (now - self.last_query))
+ self.last_query = now
+ f = urllib.urlopen(self.url)
+ ret = json.load(f)
+ f.close()
+ return ret
+
+class Queries(object):
+ albums_this_week = Query(order='ratingweek_desc')
+ albums_all_time = Query(order='ratingtotal_desc')
+ albums_this_month = Query(order='ratingmonth_desc')
+ albums_today = Query(order='ratingday_desc')
+ playlists_all_time = Query(select=['id','name', 'user_idstr'], request='playlist', order='ratingtotal_desc')
+ tracks_this_month = Query(select=['id', 'name', 'url', 'stream', 'album_name', 'album_url', 'album_id', 'artist_id', 'artist_name'],
+ request='track',
+ track=['track_album', 'album_artist'],
+ order='ratingmonth_desc')
+
+def get_cover(albumid, size=200):
+ to = '~/.cache/jamaendo/cover-%d-%d.jpg'%(albumid, size)
+ if not os.path.isfile(to):
+ url = _GET2+'image/album/redirect/?id=%d&imagesize=%d'%(albumid, size)
+ urllib.urlretrieve(url, to)
+ return to
+
+def get_ogg_url(trackid):
+ return _GET2+ 'stream/track/redirect/?id=%d&streamencoding=ogg2'%(trackid)
+
+def get_mp3_url(trackid):
+ return _GET2+ 'stream/track/redirect/?id=%d&streamencoding=mp31'%(trackid)