]> kaliko git repositories - mpd-sima.git/blobdiff - sima/lib/simafm.py
Plain api keys obfuscation
[mpd-sima.git] / sima / lib / simafm.py
index 79184037daa66d71447effd86a48cc7a40d6016f..d29817ee01e930eecfa12eca8f4d13ab2a3d0aff 100644 (file)
@@ -23,7 +23,7 @@ Consume last.fm web service
 
 """
 
-__version__ = '0.3.0'
+__version__ = '0.3.1'
 __author__ = 'Jack Kaliko'
 
 
@@ -35,6 +35,10 @@ from socket import timeout as SocketTimeOut
 from time import sleep
 from xml.etree.cElementTree import ElementTree
 
+from sima import LFM
+from sima.utils.utils import getws
+getws(LFM)
+
 # Some definitions
 WAIT_BETWEEN_REQUESTS = timedelta(0, 0.4)
 LFM_ERRORS = dict({'2': 'Invalid service -This service does not exist',
@@ -138,18 +142,15 @@ class AudioScrobblerCache():
 class SimaFM():
     """
     """
-    api_key = '4a1c9ddec29816ed803d7be9113ba4cb'
-    host = 'ws.audioscrobbler.com'
-    version = '2.0'
-    root_url = 'http://%s/%s/' % (host, version)
+    root_url = 'http://{host}/{version}/'.format(**LFM)
     request = dict({'similar': '?method=artist.getsimilar&artist=%s&' +\
-                                'api_key=%s' % api_key,
+                                'api_key={apikey}'.format(**LFM),
                     'top': '?method=artist.gettoptracks&artist=%s&' +\
-                            'api_key=%s' % api_key,
+                                'api_key={apikey}'.format(**LFM),
                     'track': '?method=track.getsimilar&artist=%s' +\
-                            '&track=%s' + '&api_key=%s' % api_key,
+                            '&track=%s' + 'api_key={apikey}'.format(**LFM),
                     'info': '?method=artist.getinfo&artist=%s' +\
-                            '&api_key=%s' % api_key,
+                            'api_key={apikey}'.format(**LFM),
                     })
     cache = dict({})
     timestamp = datetime.utcnow()
@@ -276,6 +277,20 @@ class SimaFM():
         for track in elem.getiterator(tag='track'):
             yield str(track.findtext('name')), int(track.attrib.get('rank'))
 
+    def get_similartracks(self, track=None, artist=None):
+        """
+        """
+        # Construct URL
+        url = SimaFM.root_url + SimaFM.request.get('track')
+        self._url = url % (urllib.parse.quote(artist.encode('UTF-8'), safe=''),
+                           urllib.parse.quote(track.encode('UTF-8'), safe=''))
+        self._fetch()
+        elem = self.current_element
+        for trk in elem.getiterator(tag='track'):
+            yield (str(trk.findtext('artist/name')),
+                   str(trk.findtext('name')),
+                   100 * float(trk.findtext('match')))
+
     def get_mbid(self, artist=None):
         """
         """
@@ -291,8 +306,8 @@ class SimaFM():
 
 def run():
     test = SimaFM()
-    for a, m in test.get_similar(artist='Tool'):
-        pass
+    for t, a, m in test.get_similartracks(artist='Nirvana', track='Smells Like Teen Spirit'):
+        print(a, t, m)
     return
 
 if __name__ == '__main__':