def get_player_friends(team):
    g = nx.DiGraph()
    for player in team:
        player = tm.strip_none_values(player)
        screenName = player['screen_name']
        g.add_node(screenName, player=True, **player) 
        playerFriends = twitter.get_friends_list(screen_name=screenName)
        for friend in playerFriends['users']:
            friend = tm.strip_none_values(friend)
            g.add_node(friend['screen_name'], **friend)
            g.add_edge(screenName, friend['screen_name'])
    return g
def graph_bulk_friends(team, team_name):
    g = nx.DiGraph()
    for player in team:
        player = tm.strip_none_values(player)
        screenName  = player['screen_name']
        filename = '{}_proc/{}.db'.format(team_name, screenName)
        if os.path.isfile(filename):
            g.add_node(screenName, player=True, **player)
            friends = shelve.open(filename, flag='r')
            combined = list(itertools.chain.from_iterable(friends[screenName]))
            for friend in combined:
                friend = tm.strip_none_values(friend)
                g.add_node(friend['screen_name'], **friend)
                g.add_edge(screenName, friend['screen_name'])
            friends.close()
    return g
def get_player_tweets(team, network=None):
    search_status = shelve.open('search_status')
    lastId = None
    if network is None:
        g = nx.Graph()
    else:
        g = network

    count = 0
    try:
        for player in team:
            player = tm.strip_none_values(player)
            playerId = player['id']
            if playerId in g.node:
                continue #Already done this player!
            screenName = player['screen_name']
            g.add_node(playerId, bipartite=0, **player)
            # I could use lastId to do disaster recovery, but there's only
            # two requests needed for 400 tweets... I can redo that and not feel bad.
            lastId, playerTweets  = get_tweets(twitter, playerId)
            lastId, playerTweets2 = get_tweets(twitter, playerId, minId=lastId)
            lastId, playerTweets3 = get_tweets(twitter, playerId, minId=lastId)
            count += 3
            playerTweets += playerTweets2
            playerTweets += playerTweets3
            for tweet in playerTweets:
                tweet_id           = tweet['id']
                author_id          = tweet['user']['id']
                author_screen_name = tweet['user']['screen_name']
                tweet = tm.strip_none_values(tweet)
                g.add_node(tweet_id, author_id=author_id,
                        author_screen_name=author_screen_name,
                        bipartite=1,
                        **tweet)
                g.add_edge(playerId, tweet_id)
            if count % 300 == 0: # I feel clever for this one
                sleep(900) #Sleep 15 minutes (twitter window)
        return g
    except:
        print('OOPS! Check for CRASHDUMP.graphml.gz !!')
        print(traceback.format_exc())
    finally:
        nx.write_graphml(g, 'CRASHDUMP.graphml.gz')