예제 #1
0
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
예제 #2
0
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
예제 #3
0
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)