def fetch_user_friends(username, limit=30): friends_dict = {} page = 1 # make a request to get friends info method = "user.getFriends" params = {'user': username, 'limit': limit} while 1: params['page'] = page print Color.emphasise('--- user=%s friends page=%d ---' % (username, page)) result = api_request(method, params=params) if result is not None and 'friends' in result: obj = result['friends'] else: return None if page == 1 and 'user' not in obj: # no friends return friends_dict else: attr = obj['@attr'] last_page = int(attr['totalPages']) if isinstance(obj['user'], dict): u = obj['user'] friends_dict[u['name']] = u else: for u in obj['user']: friends_dict[u['name']] = u page += 1 if page > last_page: # just return the result return friends_dict
def get_user_tags(username): tags = [] method = "user.getTopTags" params = {'user': username} result = api_request(method, params=params) if result is None: print Color.fail("----failed to get tags for %s----" % username) elif 'toptags' in result: result = result['toptags'] if 'tag' in result: elem = result['tag'] if isinstance(elem, list): for tag in elem: tags.append((tag['name'], int(tag['count']))) else: # single dict tags.append((elem['name'], int(elem['count']))) else: # no tags print Color.emphasise("---- %s have no tags----" % username) return tags
def get_tasteometer(user1, user2): artists = [] method = 'tasteometer.compare' params = {'type1': 'user', 'type2': 'user', 'value1': user1, 'value2': user2, 'limit': 10} result = api_request(method, params=params) score = 0.0 if result is None: print Color.fail("----failed to compare %s and %s----" % (user1, user2)) elif 'comparison' in result and 'result' in result['comparison']: result = result['comparison']['result'] score = float(result['score']) arts = result['artists'] if 'artist' in arts: elem = arts['artist'] if isinstance(elem, list): for art in elem: artists.append(art['name']) else: # single dict artists.append(elem['name']) else: #no common artist print Color.emphasise("---- %s and %s have common artist ----" % (user1, user2)) return (score, artists)