首页 > 代码库 > Python 获取Facebook用户与其有共同爱好的Friends

Python 获取Facebook用户与其有共同爱好的Friends

CODE:

#!/usr/bin/python 
# -*- coding: utf-8 -*-

'''
Created on 2014-8-13
@author: guaguastd
@name: common_friends_finding.py
'''

# impot login
from login import facebook_login

# import helper
#from helper import pp

# import PrettyTable
from prettytable import PrettyTable
from collections import Counter
from operator import itemgetter

# access to facebook
facebook_api = facebook_login()

# get friends like through single request
#friends_like = facebook_api.get_object('me', fields='id,name,friends.fields(id,name,likes)')
#pp(friends_like)

# get friends like through multi request
friends = facebook_api.get_connections("me", "friends")['data']
likes = { friend['name'] : facebook_api.get_connections(friend['id'], "likes")['data']
         for friend in friends[:10]}

friends_likes = Counter([like['name']
                        for friend in likes
                          for like in likes[friend]
                              if like.get('name')])

# Which of your likes are in common with which friends
my_likes = [ like['name']
             for like in facebook_api.get_connections("me", "likes")['data'] ]

# Use the set intersection as represented by the ampersand
# operator to find common likes
common_likes = list(set(my_likes) & set(friends_likes))

# Which of your friends like things that you like?
similar_friends = [ (friend, friend_like['name'])
                    for friend, friend_likes in likes.items()
                      for friend_like in friend_likes
                        if friend_like.get('name') in common_likes ]

# Filter out any possible duplicates that could occur
ranked_friends = Counter([ friend for (friend, like) in list(set(similar_friends)) ])

pt = PrettyTable(field_names=["Friend", "Common Likes"])
pt.align["Friend"], pt.align["Common Likes"] = 'l', 'r'
[ pt.add_row(rf)
  for rf in sorted(ranked_friends.items(), 
                    key=itemgetter(1), 
                    reverse=True)]
print "My similar friends (ranked)"
print pt

RESULT:

My similar friends (ranked)
+--------------------------+--------------+
| Friend                   | Common Likes |
+--------------------------+--------------+
| Los Mas Lindos del Mundo |            1 |
| Soofi Cat                |            1 |
| Jorge Rodriguez          |            1 |
| Kevin Swaggy             |            1 |
+--------------------------+--------------+