]> kaliko git repositories - mpd-sima.git/blobdiff - sima/lib/simafm.py
Add toptrack method for Last.fm webservice
[mpd-sima.git] / sima / lib / simafm.py
index 04e736f63b1bd4478d35f6f74107720e19d93022..8d82d52ccc90798b4a933d53a7f3737fc4945423 100644 (file)
@@ -30,6 +30,7 @@ from requests import Session, Request, Timeout, ConnectionError
 
 from sima import LFM, SOCKET_TIMEOUT, WAIT_BETWEEN_REQUESTS
 from sima.lib.meta import Artist
+from sima.lib.track import Track
 
 from sima.lib.http import CacheController
 from sima.utils.utils import WSError, WSNotFound, WSTimeout, WSHTTPError
@@ -144,6 +145,26 @@ class SimaFM:
         for art in ans.get('similarartists').get('artist'):
             yield Artist(name=art.get('name'), mbid=art.get('mbid', None))
 
+    def get_toptrack(self, artist=None):
+        """Fetch artist top tracks
+        """
+        payload = self._forge_payload(artist, method='top')
+        ans = self._fetch(payload)
+        tops = ans.get('toptracks').get('track')
+        art = {
+                'artist': artist.name,
+                'musicbrainz_artistid': artist.mbid,
+                }
+        for song in tops:
+            for key in ['artist', 'streamable', 'listeners',
+                        'url', 'image', '@attr']:
+                if key in song:
+                    song.pop(key)
+            song.update(art)
+            song.update(title=song.pop('name'))
+            song.update(time=song.pop('duration'))
+            yield Track(**song)
+        #return tops
 
 # VIM MODLINE
 # vim: ai ts=4 sw=4 sts=4 expandtab