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 |
+--------------------------+--------------+


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值