"""
-__version__ = '0.3.0'
+__version__ = '0.3.1'
__author__ = 'Jack Kaliko'
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',
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()
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):
"""
"""
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__':