python-lastfm/lastfm/album.py

130 lines
4.2 KiB
Python

#!/usr/bin/env python
__author__ = "Abhinav Sarkar"
__version__ = "0.1"
__license__ = "GNU Lesser General Public License"
class Album(object):
"""A class representing an album."""
def __init__(self,
api,
name = None,
artist = None,
id = None,
mbid = None,
url = None,
releaseDate = None,
image = None,
listeners = None,
playcount = None,
topTags = None):
self.__api = api
self.__name = name
self.__artist = artist
self.__id = id
self.__mbid = mbid
self.__url = url
self.__releaseDate = releaseDate
self.__image = image
self.__listeners = listeners
self.__playcount = playcount
self.__topTags = topTags
def getName(self):
return self.__name
def getArtist(self):
return self.__artist
def getId(self):
return self.__id
def getMbid(self):
return self.__mbid
def getUrl(self):
return self.__url
def getReleaseDate(self):
return self.__releaseDate
def getImage(self):
return self.__image
def getListeners(self):
return self.__listeners
def getPlaycount(self):
return self.__playcount
def getTopTags(self):
return self.__topTags
name = property(getName, None, None, "Name's Docstring")
artist = property(getArtist, None, None, "Artist's Docstring")
id = property(getId, None, None, "Id's Docstring")
mbid = property(getMbid, None, None, "Mbid's Docstring")
url = property(getUrl, None, None, "Url's Docstring")
releaseDate = property(getReleaseDate, None, None, "ReleaseDate's Docstring")
image = property(getImage, None, None, "Image's Docstring")
listeners = property(getListeners, None, None, "Listeners's Docstring")
playcount = property(getPlaycount, None, None, "Playcount's Docstring")
topTags = property(getTopTags, None, None, "TopTags's Docstring")
@staticmethod
def getInfo(api,
artist = None,
album = None,
mbid = None):
params = {'method': 'album.getinfo'}
if not ((artist and album) or mbid):
raise LastfmError("either (artist and album) or mbid has to be given as argument.")
if artist and album:
params.update({'artist': artist, 'album': album})
elif mbid:
params.update({'mbid': mbid})
data = api.fetchData(params).find('album')
return Album(
api,
name = data.findtext('name'),
artist = Artist(
api,
name = data.findtext('artist'),
),
id = int(data.findtext('id')),
mbid = data.findtext('mbid'),
url = data.findtext('url'),
releaseDate = data.findtext('releasedate') and
datetime(*(time.strptime(data.findtext('releasedate').strip(), '%d %b %Y, 00:00')[0:6])),
image = dict([(i.get('size'), i.text) for i in data.findall('image')]),
listeners = int(data.findtext('listeners')),
playcount = int(data.findtext('playcount')),
topTags = [
Tag(
api,
name = t.findtext('name'),
url = t.findtext('url')
)
for t in data.findall('toptags/tag')
]
)
def __eq__(self, other):
return self.id == other.id
from datetime import datetime
import time
from error import LastfmError
from tag import Tag
from artist import Artist