]> kaliko git repositories - mpd-sima.git/commitdiff
Fix data structures inconsistency in last.fm WS
authorkaliko <efrim@azylum.org>
Thu, 13 Feb 2014 13:02:38 +0000 (14:02 +0100)
committerkaliko <efrim@azylum.org>
Thu, 13 Feb 2014 13:02:38 +0000 (14:02 +0100)
sima/lib/simafm.py

index 08fdbc3fe65e1655273a12cfe6d9d9874dbe7574..3457016d5b67572e6572971b40f8b68eb9d82128 100644 (file)
@@ -1,5 +1,4 @@
 # -*- coding: utf-8 -*-
-
 # Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014 Jack Kaliko <kaliko@azylum.org>
 #
 #   This program is free software: you can redistribute it and/or modify
@@ -112,7 +111,8 @@ class SimaFM():
         if artist.mbid:
             payload.update(mbid='{0}'.format(artist.mbid))
         else:
-           payload.update(artist=artist.name)
+           payload.update(artist=artist.name,
+                          autocorrect=1)
         payload.update(results=100)
         if method == 'track':
             payload.update(track=track)
@@ -124,6 +124,15 @@ class SimaFM():
         payload = self._forge_payload(artist)
         # Construct URL
         self._fetch(payload)
+        # Artist might be found be return no 'artist' list…
+        # cf. "Mulatu Astatqe" vs. "Mulatu Astatqé" with autocorrect=0
+        # json format is broken IMHO, xml is more consistent IIRC
+        # Here what we got:
+        # >>> {"similarartists":{"#text":"\n","artist":"Mulatu Astatqe"}}
+        # autocorrect=1 should fix it, checking anyway.
+        simarts = self.current_element.get('similarartists').get('artist')
+        if not isinstance(simarts, list):
+            raise WSError('Artist found but no similarities returned')
         for art in self.current_element.get('similarartists').get('artist'):
             yield Artist(name=art.get('name'), mbid=art.get('mbid', None))