def get_albums(self, limit = None, page = None): params = self._default_params({'method': 'library.getAlbums'}) if limit is not None: params.update({'limit': limit}) if page is not None: params.update({'page': page}) try: data = self._api._fetch_data(params).find('albums') total_pages = int(data.attrib['totalPages']) yield total_pages for a in data.findall('album'): yield Album( self._api, subject = self, name = a.findtext('name'), artist = Artist( self._api, subject = self, name = a.findtext('artist/name'), mbid = a.findtext('artist/mbid'), url = a.findtext('artist/url'), ), mbid = a.findtext('mbid'), url = a.findtext('url'), image = dict([(i.get('size'), i.text) for i in a.findall('image')]), stats = Stats( subject = a.findtext('name'), playcount = int(a.findtext('playcount')), ) ) except LastfmError: yield None
def top_albums(self): """top albums for the tag""" params = self._default_params({'method': 'tag.getTopAlbums'}) data = self._api._fetch_data(params).find('topalbums') return [ Album(self._api, subject=self, name=a.findtext('name'), artist=Artist( self._api, subject=self, name=a.findtext('artist/name'), mbid=a.findtext('artist/mbid'), url=a.findtext('artist/url'), ), mbid=a.findtext('mbid'), url=a.findtext('url'), image=dict([(i.get('size'), i.text) for i in a.findall('image')]), stats=Stats( subject=a.findtext('name'), tagcount=a.findtext('tagcount') and int(a.findtext('tagcount')) or None, rank=a.attrib['rank'].strip() and int(a.attrib['rank']) or None)) for a in data.findall('album') ]
def get_top_albums(self, period = None): params = self._default_params({'method': 'user.getTopAlbums'}) if period is not None: params.update({'period': period}) data = self._api._fetch_data(params).find('topalbums') return [ Album( self._api, subject = self, name = a.findtext('name'), artist = Artist( self._api, subject = self, name = a.findtext('artist/name'), mbid = a.findtext('artist/mbid'), url = a.findtext('artist/url'), ), mbid = a.findtext('mbid'), url = a.findtext('url'), image = dict([(i.get('size'), i.text) for i in a.findall('image')]), stats = Stats( subject = a.findtext('name'), playcount = a.findtext('playcount').strip() and int(a.findtext('playcount')), rank = a.attrib['rank'].strip() and int(a.attrib['rank']) ) ) for a in data.findall('album') ]
def create_from_data(api, subject, data): w = WeeklyChart( subject=subject, start=datetime.utcfromtimestamp(int(data.attrib['from'])), end=datetime.utcfromtimestamp(int(data.attrib['to'])), ) return WeeklyAlbumChart( subject=subject, start=datetime.utcfromtimestamp(int(data.attrib['from'])), end=datetime.utcfromtimestamp(int(data.attrib['to'])), stats=Stats(subject=subject, playcount=reduce( lambda x, y: (x + int(y.findtext('playcount'))), data.findall('album'), 0)), albums=[ Album( api, subject=w, name=a.findtext('name'), mbid=a.findtext('mbid'), artist=Artist( api, subject=w, name=a.findtext('artist'), mbid=a.find('artist').attrib['mbid'], ), stats=Stats( subject=a.findtext('name'), rank=int(a.attrib['rank']), playcount=int(a.findtext('playcount')), ), url=a.findtext('url'), ) for a in data.findall('album') ])
def get_recent_tracks(self, limit=None, timefrom=None, timeto=None, page=None): params = self._default_params({'method': 'user.getRecentTracks'}) if limit is not None: params.update({'limit': limit}) if timefrom is not None: params.update({'from': timefrom}) if timeto is not None: params.update({'to': timeto}) if page is not None: params.update({'page': page}) data = self._api._fetch_data(params, no_cache=True).find('recenttracks') total_pages = int(data.attrib['totalPages']) yield total_pages for t in data.findall('track'): track = Track( self._api, subject=self, name=t.findtext('name'), artist=Artist( self._api, subject=self, name=t.findtext('artist'), mbid=t.find('artist').attrib['mbid'], ), album=Album( self._api, subject=self, name=t.findtext('album'), artist=Artist( self._api, subject=self, name=t.findtext('artist'), mbid=t.find('artist').attrib['mbid'], ), mbid=t.find('album').attrib['mbid'], ), mbid=t.findtext('mbid'), streamable=(t.findtext('streamable') == '1'), url=t.findtext('url'), image=dict([(i.get('size'), i.text) for i in t.findall('image')]), played_on=datetime(*(time.strptime( t.findtext('date').strip(), '%d %b %Y, %H:%M')[0:6])) if t.findtext('date') else datetime( *datetime.now().timetuple()[0:6]), bypass_registry=True) if 'nowplaying' in t.attrib and t.attrib['nowplaying'] == 'true': self._now_playing = track yield track
def get_recent_tracks(self, limit=None, page=1, fr=None, to=None): #from 1/1/2012 to 1/1/2014 # to = 1388534400, fr = 1325376000 params = self._default_params({'method': 'user.getRecentTracks'}) if limit is not None: params.update({'limit': limit}) params.update({'page': page}) if fr is not None: params.update({'from': fr}) # set time window if to is not None: params.update({'to': to}) # set time window # params.update({'extended': 1}) data = self._api._fetch_data(params, no_cache=True).find('recenttracks') return [ Track( self._api, subject = self, name = t.findtext('name'), artist = Artist( self._api, subject = self, name = t.findtext('artist'), mbid = t.find('artist').attrib['mbid'], ), album = Album( self._api, subject = self, name = t.findtext('album'), artist = Artist( self._api, subject = self, name = t.findtext('artist'), mbid = t.find('artist').attrib['mbid'], ), mbid = t.find('album').attrib['mbid'], ), mbid = t.findtext('mbid'), streamable = (t.findtext('streamable') == '1'), url = t.findtext('url'), image = dict([(i.get('size'), i.text) for i in t.findall('image')]), played_on = datetime(*( time.strptime( t.findtext('date').strip(), '%d %b %Y, %H:%M' )[0:6]) ).replace( tzinfo = UTC ) if t.findtext('date') else datetime(*datetime.utcnow().timetuple()[0:6]).replace(tzinfo=UTC), now_playing = True if 'nowplaying' in t.attrib and t.attrib['nowplaying'] == 'true' else False ) for t in data.findall('track') ]
def _fill_info(self): data = Track._fetch_data(self._api, self.artist.name, self.name) self._id = safe_int(data.findtext('id')) self._mbid = data.findtext('mbid') self._url = data.findtext('url') self._duration = safe_int(data.findtext('duration')) self._streamable = (data.findtext('streamable') == '1') self._full_track = (data.find('streamable').attrib['fulltrack'] == '1') self._image = dict([(i.get('size'), i.text) for i in data.findall('image')]) self._stats = Stats( subject = self, listeners = safe_int(data.findtext('listeners')), playcount = safe_int(data.findtext('playcount')), ) self._artist = Artist( self._api, name = data.findtext('artist/name'), mbid = data.findtext('artist/mbid'), url = data.findtext('artist/url') ) if data.find('album') is not None: self._album = Album( self._api, artist = self._artist, name = data.findtext('album/title'), mbid = data.findtext('album/mbid'), url = data.findtext('album/url'), image = dict([(i.get('size'), i.text) for i in data.findall('album/image')]) ) self._position = data.find('album').attrib['position'].strip() \ and safe_int(data.find('album').attrib['position']) if data.find('wiki') is not None: self._wiki = Wiki( self, published = datetime(*(time.strptime( data.findtext('wiki/published').strip(), '%a, %d %b %Y %H:%M:%S +0000' )[0:6])).replace(tzinfo = UTC), summary = data.findtext('wiki/summary'), content = data.findtext('wiki/content') ) else: self._wiki = 'na'
def top_albums(self): """ top albums of the artist @rtype: L{list} of L{Album} """ params = self._default_params({'method': 'artist.getTopAlbums'}) data = self._api._fetch_data(params).find('topalbums') return [ Album(self._api, subject=self, name=a.findtext('name'), artist=self, mbid=a.findtext('mbid'), url=a.findtext('url'), image=dict([(i.get('size'), i.text) for i in a.findall('image')]), stats=Stats(subject=a.findtext('name'), playcount=int(a.findtext('playcount')), rank=int(a.attrib['rank']))) for a in data.findall('album') ]
def get_recent_tracks(self, limit=None): params = self._default_params({'method': 'user.getRecentTracks'}) if limit is not None: params.update({'limit': limit}) data = self._api._fetch_data(params, no_cache=True).find('recenttracks') return [ Track(self._api, subject=self, name=t.findtext('name'), artist=Artist( self._api, subject=self, name=t.findtext('artist'), mbid=t.find('artist').attrib['mbid'], ), album=Album( self._api, subject=self, name=t.findtext('album'), artist=Artist( self._api, subject=self, name=t.findtext('artist'), mbid=t.find('artist').attrib['mbid'], ), mbid=t.find('album').attrib['mbid'], ), mbid=t.findtext('mbid'), streamable=(t.findtext('streamable') == '1'), url=t.findtext('url'), image=dict([(i.get('size'), i.text) for i in t.findall('image')]), played_on=datetime(*(time.strptime( t.findtext('date').strip(), '%d %b %Y, %H:%M')[0:6]))) for t in data.findall('track') ]