From 91f0f639cd4244e40171959a16112026a8c9db87 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristoffer=20Gr=C3=B6nlund?= Date: Tue, 29 Dec 2009 13:47:23 +0100 Subject: [PATCH] Querying now works, complete enough to write the UI --- jamaendo/api.py | 124 ++++++++++++++++++++++++++++++++++++++--- jamaui/jam_artists_simple.png | Bin 0 -> 3700 bytes jamaui/logo_2600_710.png | Bin 0 -> 49942 bytes scripts/artists | 16 ------ scripts/query | 30 ++++++++++ 5 files changed, 147 insertions(+), 23 deletions(-) create mode 100644 jamaui/jam_artists_simple.png create mode 100644 jamaui/logo_2600_710.png delete mode 100755 scripts/artists create mode 100755 scripts/query diff --git a/jamaendo/api.py b/jamaendo/api.py index b3683d8..9913fcc 100644 --- a/jamaendo/api.py +++ b/jamaendo/api.py @@ -71,19 +71,73 @@ class DB(object): def close(self): self.fil.close() - def make_obj(self, element): + def make_artist_obj(self, element): if element.text is not None and element.text != "": return element.text else: - ret = Obj() + ret = {} for child in element: - if child.tag in ['name', 'id']: - setattr(ret, child.tag, child.text) + if child.tag in ['name', 'id', 'image']: + ret[child.tag] = child.text return ret - def artist_walker(self): + def make_album_obj(self, element): + if element.text is not None and element.text != "": + return element.text + else: + ret = {} + for child in element: + if child.tag in ['name', 'id', 'image']: + if child.text: + ret[child.tag] = child.text + else: + ret[child.tag] = "" + if child.tag == 'Tracks': + tracks = [] + for track in child: + trackd = {} + for trackinfo in track: + if trackinfo.tag in ['name', 'id', 'numalbum']: + trackd[trackinfo.tag] = trackinfo.text + tracks.append(trackd) + ret['tracks'] = tracks + return ret + + def artist_walker(self, name_match): + for event, element in etree.iterparse(self.fil, tag="artist"): + name = element.xpath('./name')[0].text.lower() + if name and name.find(name_match) > -1: + yield self.make_artist_obj(element) + element.clear() + while element.getprevious() is not None: + del element.getparent()[0] + raise StopIteration + + def album_walker(self, name_match): + for event, element in etree.iterparse(self.fil, tag="album"): + name = element.xpath('./name')[0].text + if name and name.lower().find(name_match) > -1: + yield self.make_album_obj(element) + element.clear() + while element.getprevious() is not None: + del element.getparent()[0] + raise StopIteration + + def artistid_walker(self, artistids): for event, element in etree.iterparse(self.fil, tag="artist"): - yield self.make_obj(element) + _id = element.xpath('./id')[0].text + if _id and int(_id) in artistids: + yield self.make_artist_obj(element) + element.clear() + while element.getprevious() is not None: + del element.getparent()[0] + raise StopIteration + + def albumid_walker(self, albumids): + for event, element in etree.iterparse(self.fil, tag="album"): + _id = element.xpath('./id')[0].text + if _id and int(_id) in albumids: + yield self.make_album_obj(element) element.clear() while element.getprevious() is not None: del element.getparent()[0] @@ -91,4 +145,60 @@ class DB(object): def search_artists(self, substr): substr = substr.lower() - return [artist for artist in self.artist_walker() if artist.name.lower().find(substr) > -1] + 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) diff --git a/jamaui/jam_artists_simple.png b/jamaui/jam_artists_simple.png new file mode 100644 index 0000000000000000000000000000000000000000..f31fe507895cc69ae241f68f4081be3f6431e9a5 GIT binary patch literal 3700 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 PBT1g9>p?%N+C={c8Y3L) literal 0 HcmV?d00001 diff --git a/jamaui/logo_2600_710.png b/jamaui/logo_2600_710.png new file mode 100644 index 0000000000000000000000000000000000000000..cce480bc4ba47682326647f8e5b6aefee44c5486 GIT binary patch literal 49942 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
    IW0LoKMlPBu8d_f&1RG65|+~6WPk~{IgW> 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 literal 0 HcmV?d00001 diff --git a/scripts/artists b/scripts/artists deleted file mode 100755 index 292fdd0..0000000 --- a/scripts/artists +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env python -from jamaendo.api import DB -import sys - -def main(): - db = DB() - print "Connecting to DB..." - db.connect() - print "Connected." - q = sys.argv[1] - print "Querying db for %s..." % (q) - artists = db.search_artists(q) - print artists - -if __name__=="__main__": - main() diff --git a/scripts/query b/scripts/query new file mode 100755 index 0000000..707b48e --- /dev/null +++ b/scripts/query @@ -0,0 +1,30 @@ +#!/usr/bin/env python +from jamaendo.api import DB, Queries +import sys + +def pprint(x): + import json + print json.dumps(x, sort_keys=True, indent=4) + +def main(): + + query = sys.argv[1] + + if query == 'today': + result = Queries.albums_today.emit() + pprint(result) + elif query == 'artist': + q = sys.argv[2] + db = DB() + db.connect() + for artist in db.search_artists(q): + pprint(artist) + elif query == 'album': + q = sys.argv[2] + db = DB() + db.connect() + for album in db.search_albums(q): + pprint(album) + +if __name__=="__main__": + main() -- 1.7.9.5