找到或匹配用户联系人与Facebook好友的最佳方法是什么?

3

我有一个用户,这个用户有很多联系人(一些联系人有“姓名”,所有联系人都有“电子邮件”)。联系人有一个字段用于存储图片 URL,我想为该联系人显示一张图片。我想从 Facebook 上获取这些图片。

假设 User.first 的电子邮件是“joe@test.com”,并且已在 Facebook 上注册。

User 有许多 contacts,Contacts 属于 User。

User.first.contacts 
#<Contact id: 1, ctct_name: "Stacy Blah", ctct_email: "stacy.blah@gmail.com", user_id: 1, img_url: nil>, 
#<Contact id: 2, ctct_name: nil, ctct_email: "dick.tracy@gmail.com", user_id: 1, img_url: nil>, 
#<Contact id: 3, ctct_name: "John Doe", ctct_email: "john_doe@gmail.com", user_id: 1, img_url: nil>

我在我的网站上使用Devise: omniauthable,fb_graph也正在运行。

当用户首次连接Facebook时,我可以访问他们的fb令牌。因此,我可以这样做:

facebook_user = FbGraph::User.new('me', :access_token => access_token).fetch
user_friends = facebook_user.friends

现在,最好的方法是如何找到或匹配User.first.contacts到user_friends?理想情况下,我会简单地搜索Facebook连接中的电子邮件,就像这样:

email = Contact.first.ctct_email
search = FbGraph::User.search(email, :access_token => access_token = user['credentials']['token']) 
Contact.first.img_url = search[0].picture # or something like this

但是,Facebook API没有公开用户好友的电子邮件地址!那么,我该怎么办呢?
我一直在尝试根据姓名进行匹配,但是遇到了两个问题:(1)contacts.name可能为空,(2)user_friends.select {|f| f.name.include?("John Doe")}过于严格,姓名不完全匹配时无法匹配(例如,contact.name = "John Doe",但Facebook上将此人标记为"John X. Doe")。
我还尝试使用name参数=User.first.contacts[2].name搜索FBGraph::User.search。
search = FbGraph::User.search("John Doe", :access_token => access_token = user['credentials']['token']) 

但是我遇到了一个严重的歧义问题--搜索"John Doe"会出现成千上万的Facebook用户,并且它们不仅限于user_friends!

当然这是可能的。我看过一些服务可以从Facebook中提取给定联系人的图片,只需要很少的信息,比如电子邮件。

感谢您的帮助!

1个回答

2

该查询未返回任何数据。还有其他想法吗? - MorningHacker
有趣 - 看起来Facebook最近取消了这个功能。我以前用过这个功能,它曾经是有效的。如果你在搜索框中输入Zuck的电子邮件地址,它仍然会返回他的结果,所以他们只是禁用了第三方开发者的功能。这又是Facebook未经宣布的另一个破坏性变化。 - bkaid
似乎是一个已经停止工作的错误:https://developers.facebook.com/bugs/292220680814266 - bkaid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接