【发布时间】:2012-01-27 20:30:22
【问题描述】:
我有一个用户,该用户有一堆联系人(一些联系人有“姓名”,而所有联系人都有“电子邮件”)。联系人有一个 image_url 字段,我想显示该联系人的图片。我想从 Facebook 中提取这些图片。
假设 User.first 拥有在 Facebook 注册的电子邮件“joe@test.com”。
用户拥有_许多联系人&& 联系人属于_用户。
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>
我的网站上有 fb_graph(使用 Devise :omniauthable)。
当 User.first 连接到 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 不会公开 user_friends 电子邮件!那么,我能做些什么呢?
我一直在尝试根据姓名进行匹配,但遇到了两个问题:(1)contacts.name 可能为 nil,以及(2)user_friends.select {|f| f.name.include?("John Doe")} 在名称不完全匹配的情况下过于严格(例如,contact.name = "John Doe" 但 Facebook 将此人称为 "John X. Doe")。
我也尝试使用名称参数 = 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 为给定联系人提取图像的服务,其信息与电子邮件一样少。
感谢您的帮助!!
【问题讨论】:
标签: ruby-on-rails search facebook pattern-matching