Пример #1
0
    def get_tracks(self, user):
        cur_page = 1
        lastpage = 1
        track_list = []
        log = logging.getLogger("TracksRetriever")

        while cur_page <= lastpage:
            log.info("Retrieving page %i of %i", cur_page, lastpage)
            url = self.GET_TRACKS_URL_TEMPLATE % (user, APIKEY, cur_page)
            xml = self.get_url(url)
            soup = BeautifulStoneSoup(xml).find("tracks")
            tracks = soup.findAll("track")

            for track in tracks:
                playcount = int(track.find("playcount").contents[0])
                # LastFM are percent encoded, but we want UTF-8
                track_url = str(track.find("url").contents[0])
                artist, _, name = track_url.split("/")[-3:]
                artist = fixURLContent(artist)
                name = fixURLContent(name)
                track_list.append((artist, name, playcount))
            # Track information can be splitted across several pages.
            # Get the number of pages.
            if cur_page == 1:
                lastpage = int(soup.attrs[-1][1])

            cur_page += 1

        # Sort the list in-place -- just in case, and to help compression
        track_list.sort()

        return track_list
Пример #2
0
    def get_friends(self, user):
        friends_list = []
        log = logging.getLogger("FriendsRetriever")
        log.info("Retrieving friends list.")

        url = self.GET_USER_FRIENDS_TEMPLATE % (user, APIKEY)
        xml = self.get_url(url)
        soup = BeautifulStoneSoup(xml)

        friends_urls = soup.findAll("url")

        for f_url in friends_urls:
            friend_name = f_url.contents[0].split("/")[-1]
            friends_list.append(friend_name.encode("utf8"))

        return friends_list