refactored artist.py, fixed a small bug in geo.py
This commit is contained in:
parent
1d81a1a4fb
commit
fc17093aa4
@ -240,7 +240,7 @@ class Api(object):
|
|||||||
def fetchData(self, params, parse = True):
|
def fetchData(self, params, parse = True):
|
||||||
params.update({'api_key': self.__apiKey})
|
params.update({'api_key': self.__apiKey})
|
||||||
xml = self._fetchUrl(Api.API_ROOT_URL, params)
|
xml = self._fetchUrl(Api.API_ROOT_URL, params)
|
||||||
|
#print xml
|
||||||
data = ElementTree.XML(xml)
|
data = ElementTree.XML(xml)
|
||||||
if data.get('status') != "ok":
|
if data.get('status') != "ok":
|
||||||
raise LastfmError("Error code: %s (%s)" % (data.find("error").get('code'), data.findtext('error')))
|
raise LastfmError("Error code: %s (%s)" % (data.find("error").get('code'), data.findtext('error')))
|
||||||
|
106
src/artist.py
106
src/artist.py
@ -47,18 +47,28 @@ class Artist(LastfmBase):
|
|||||||
return self.__name
|
return self.__name
|
||||||
|
|
||||||
def getMbid(self):
|
def getMbid(self):
|
||||||
|
if self.__mbid is None:
|
||||||
|
self.fillInfo()
|
||||||
return self.__mbid
|
return self.__mbid
|
||||||
|
|
||||||
def getUrl(self):
|
def getUrl(self):
|
||||||
|
if self.__url is None:
|
||||||
|
self.fillInfo()
|
||||||
return self.__url
|
return self.__url
|
||||||
|
|
||||||
def getImage(self):
|
def getImage(self):
|
||||||
|
if self.__image is None:
|
||||||
|
self.fillInfo()
|
||||||
return self.__image
|
return self.__image
|
||||||
|
|
||||||
def getStreamable(self):
|
def getStreamable(self):
|
||||||
|
if self.__streamable is None:
|
||||||
|
self.fillInfo()
|
||||||
return self.__streamable
|
return self.__streamable
|
||||||
|
|
||||||
def getStats(self):
|
def getStats(self):
|
||||||
|
if self.__stats is None:
|
||||||
|
self.fillInfo()
|
||||||
return self.__stats
|
return self.__stats
|
||||||
|
|
||||||
def getSimilar(self, limit = None):
|
def getSimilar(self, limit = None):
|
||||||
@ -103,6 +113,8 @@ class Artist(LastfmBase):
|
|||||||
return self.__topTags
|
return self.__topTags
|
||||||
|
|
||||||
def getBio(self):
|
def getBio(self):
|
||||||
|
if self.__bio is None:
|
||||||
|
self.fillInfo()
|
||||||
return self.__bio
|
return self.__bio
|
||||||
|
|
||||||
name = property(getName, None, None, "Name's Docstring")
|
name = property(getName, None, None, "Name's Docstring")
|
||||||
@ -280,9 +292,8 @@ class Artist(LastfmBase):
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def getInfo(api,
|
def fetchData(api,
|
||||||
artist = None,
|
artist = None,
|
||||||
mbid = None):
|
mbid = None):
|
||||||
params = {'method': 'artist.getinfo'}
|
params = {'method': 'artist.getinfo'}
|
||||||
@ -292,47 +303,56 @@ class Artist(LastfmBase):
|
|||||||
params.update({'artist': artist})
|
params.update({'artist': artist})
|
||||||
elif mbid:
|
elif mbid:
|
||||||
params.update({'mbid': mbid})
|
params.update({'mbid': mbid})
|
||||||
data = api.fetchData(params).find('artist')
|
return api.fetchData(params).find('artist')
|
||||||
|
|
||||||
return Artist(
|
def fillInfo(self):
|
||||||
api,
|
data = Artist.fetchData(self.__api, self.name)
|
||||||
name = data.findtext('name'),
|
self.__name = data.findtext('name'),
|
||||||
mbid = data.findtext('mbid'),
|
self.__mbid = data.findtext('mbid'),
|
||||||
url = data.findtext('url'),
|
self.__url = data.findtext('url'),
|
||||||
image = dict([(i.get('size'), i.text) for i in data.findall('image')]),
|
self.__image = dict([(i.get('size'), i.text) for i in data.findall('image')]),
|
||||||
streamable = (data.findtext('streamable') == 1),
|
self.__streamable = (data.findtext('streamable') == 1),
|
||||||
stats = Stats(
|
self.__stats = Stats(
|
||||||
subject = artist,
|
subject = self,
|
||||||
listeners = int(data.findtext('stats/listeners')),
|
listeners = int(data.findtext('stats/listeners')),
|
||||||
playcount = int(data.findtext('stats/plays'))
|
playcount = int(data.findtext('stats/playcount'))
|
||||||
),
|
),
|
||||||
similar = [
|
self.__similar = [
|
||||||
Artist(
|
Artist(
|
||||||
api,
|
self.__api,
|
||||||
name = a.findtext('name'),
|
name = a.findtext('name'),
|
||||||
url = a.findtext('url'),
|
url = a.findtext('url'),
|
||||||
image = dict([(i.get('size'), i.text) for i in a.findall('image')])
|
image = dict([(i.get('size'), i.text) for i in a.findall('image')])
|
||||||
)
|
)
|
||||||
for a in data.findall('similar/artist')
|
for a in data.findall('similar/artist')
|
||||||
],
|
],
|
||||||
topTags = [
|
self.__topTags = [
|
||||||
Tag(
|
Tag(
|
||||||
api,
|
self.__api,
|
||||||
name = t.findtext('name'),
|
name = t.findtext('name'),
|
||||||
url = t.findtext('url')
|
url = t.findtext('url')
|
||||||
)
|
)
|
||||||
for t in data.findall('tags/tag')
|
for t in data.findall('tags/tag')
|
||||||
],
|
],
|
||||||
bio = Bio(
|
self.__bio = Bio(
|
||||||
artist,
|
self,
|
||||||
published = datetime(*(time.strptime(
|
published = datetime(*(time.strptime(
|
||||||
data.findtext('bio/published').strip(),
|
data.findtext('bio/published').strip(),
|
||||||
'%a, %d %b %Y %H:%M:%S +0000'
|
'%a, %d %b %Y %H:%M:%S +0000'
|
||||||
)[0:6])),
|
)[0:6])),
|
||||||
summary = data.findtext('bio/summary'),
|
summary = data.findtext('bio/summary'),
|
||||||
content = data.findtext('bio/content')
|
content = data.findtext('bio/content')
|
||||||
)
|
)
|
||||||
)
|
|
||||||
|
@staticmethod
|
||||||
|
def getInfo(api,
|
||||||
|
artist = None,
|
||||||
|
mbid = None):
|
||||||
|
data = Artist.fetchData(api, artist, mbid)
|
||||||
|
|
||||||
|
a = Artist(api, name = data.findtext('name'))
|
||||||
|
a.fillInfo()
|
||||||
|
return a
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def hashFunc(*args, **kwds):
|
def hashFunc(*args, **kwds):
|
||||||
|
@ -282,7 +282,7 @@ class Country(LastfmBase):
|
|||||||
|
|
||||||
topArtists = property(getTopArtists, None, None, "Docstring")
|
topArtists = property(getTopArtists, None, None, "Docstring")
|
||||||
topArtist = property(
|
topArtist = property(
|
||||||
lambda self: len(self.topArtists) and self.topArtists[0],
|
lambda self: len(self.topArtists) and self.topArtists[0] or None,
|
||||||
None, None, "Docstring"
|
None, None, "Docstring"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -290,7 +290,7 @@ class Country(LastfmBase):
|
|||||||
return Geo.getTopTracks(self.__api, self.name)
|
return Geo.getTopTracks(self.__api, self.name)
|
||||||
|
|
||||||
topTracks = property(getTopTracks, None, None, "Docstring")
|
topTracks = property(getTopTracks, None, None, "Docstring")
|
||||||
topTrack = property(lambda self: len(self.topTracks) and self.topTracks[0],
|
topTrack = property(lambda self: len(self.topTracks) and self.topTracks[0] or None,
|
||||||
None, None, "Docstring")
|
None, None, "Docstring")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
Loading…
Reference in New Issue
Block a user