ACCESS_TOKEN = sys.argv[1] except IndexError, e: print >> sys.stderr, \ "Could not either find access token in 'facebook.access_token' or parse args." ACCESS_TOKEN = login() # process the results of the following fql query to create a json output suitable for # consumption by a simple hierarchical tree widget: fql = FQL(ACCESS_TOKEN) q = \ """select name, current_location, hometown_location from user where uid in (select target_id from connection where source_id = me() and target_type = 'user')""" results = fql.query(q) # First, read over the raw fql query and create a hierarchical maps that groups people by # where they live now compared to their hometown. we'll simply tabulate frequencies, but # you could easily grab additional data in the fql and use it for many creative situations current_by_hometown = {} for r in results: if r['current_location'] != None: current_location = r['current_location']['city'] + ', ' \ + r['current_location']['state'] else: current_location = 'Unknown' if r['hometown_location'] != None: hometown_location = r['hometown_location']['city'] + ', ' \
# doesn't interpret any characters in it. You may also need to escape # the # character ACCESS_TOKEN = sys.argv[1] except IndexError, e: print >> sys.stderr, \ "Could not either find access token in 'facebook.access_token' or parse args." ACCESS_TOKEN = login() fql = FQL(ACCESS_TOKEN) # get friend ids q = \ 'select target_id from connection where source_id = me() and target_type =\'user\'' my_friends = [str(t['target_id']) for t in fql.query(q)] # now get friendships amongst your friends. note that this api appears to return # arbitrarily truncated results if you pass in more than a couple hundred friends # into each part of the query, so we perform (num friends)/N queries and aggregate # the results to try and get complete results # Warning: this can result in a several API calls and a lot of data returned that # you'll have to process mutual_friendships = [] N = 50 for i in range(len(my_friends) / N + 1): q = 'select uid1, uid2 from friend where uid1 in (%s) and uid2 in (%s)' \ % (','.join(my_friends), ','.join(my_friends[i * N:(i + 1) * N])) mutual_friendships += fql.query(q)
for i in range(len(groups['data'])): print '%s) %s' % (i, groups['data'][i]['name']) choice = int(raw_input('Pick a group, any group: ')) gid = groups['data'][choice]['id'] # Find the friends in the group fql = FQL(ACCESS_TOKEN) q = \ """select uid from group_member where gid = %s and uid in (select target_id from connection where source_id = me() and target_type = 'user') """ \ % (gid, ) uids = [u['uid'] for u in fql.query(q)] # Filter the previously generated output for these ids filtered_rgraph = [n for n in rgraph if n['id'] in uids] # Trim down adjancency lists for anyone not appearing in the graph. # Note that the full connection data displayed as HTML markup # in "connections" is still preserved for the global graph. for n in filtered_rgraph: n['adjacencies'] = [a for a in n['adjacencies'] if a in uids] if not os.path.isdir('out'): os.mkdir('out')