Exemplo n.º 1
0
        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
Exemplo n.º 2
0
 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')
     ]
Exemplo n.º 3
0
    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')
                ]
Exemplo n.º 4
0
 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')
         ])
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
 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')
                   ]
Exemplo n.º 7
0
    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'
Exemplo n.º 8
0
    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')
        ]
Exemplo n.º 9
0
 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')
     ]