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
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