我有一个用户,这个用户有很多联系人(一些联系人有“姓名”,所有联系人都有“电子邮件”)。联系人有一个字段用于存储图片 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中提取给定联系人的图片,只需要很少的信息,比如电子邮件。
感谢您的帮助!