X-Git-Url: http://git.kaliko.me/?a=blobdiff_plain;f=sima%2Flib%2Fsimafm.py;h=d29817ee01e930eecfa12eca8f4d13ab2a3d0aff;hb=43c17d62ce2f4ac6010316ff036842dc25aaba4a;hp=79184037daa66d71447effd86a48cc7a40d6016f;hpb=c1bda032095902bdcd183c530a9c4de28f3c828a;p=mpd-sima.git diff --git a/sima/lib/simafm.py b/sima/lib/simafm.py index 7918403..d29817e 100644 --- a/sima/lib/simafm.py +++ b/sima/lib/simafm.py @@ -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__':