ahu*_*ng7 8 ruby facebook ruby-on-rails facebook-graph-api omniauth
我正在尝试允许已经将他们的Facebook帐户连接到我的rails应用程序的用户找到已经在应用程序中注册的Facebook好友,最好是以索引格式(类似于Formspring的显示).
目前我正在使用Devise,OAuth + Fbook Javascript SDK和Koala.我有每个用户的Facebook UID连接他们在数据库中保存的Facebook,但我不知道如何过滤Facebook API调用的结果@friends = @ graph.get_connections("我","朋友")为了显示与API调用数据具有匹配UID的用户.
有什么想法吗?可能还有更好的方法,所以如果需要任何其他信息,请知道.非常感谢您的帮助!
EDIT(用户控制器中索引操作的屏幕截图)
@oauth中的注释,app id和app secret在示例图像中被裁剪掉
Mic*_*ley 16
如果你可以为用户的朋友获得一个UID数组,你可以在一个SQL语句中找到它们IN
(这里有一些handwaving和/或伪代码,具体取决于属性等):
uids = @friends.collect(&:uid)
# uids is an array of Facebook UID's, say [1234, 5678, 9012]
registered_friends = User.where('fb_uid IN (?)', uids)
# "SELECT users.* FROM users WHERE (fb_uid IN (1234, 5678, 9012))"
Run Code Online (Sandbox Code Playgroud)
如果您的Facebook数据在另一个模型中,您可以选择关闭该模型并执行操作includes
以引入用户.
registered_friends = Authorizations.where(:type => 'Facebook') \
.where('fb_uid IN (?)', uids).includes(:user).collect(&:user)
Run Code Online (Sandbox Code Playgroud)
[更新]
看起来Koala返回一个基于字符串的Hashes数组,因此您将无法使用它collect(&:id)
来获取ID.以下是我在控制台上获取ID数组的信息(显然屏蔽了敏感数据):
pry(main)> oauth = Koala::Facebook::OAuth.new 'xxxxxxx', 'yyyyyyyyy'
=> #<Koala::Facebook::OAuth:0x00000100d03be8>
pry(main)> token = 'zzzzzzzzzz'
=> "zzzzzzzzzz"
pry(main)> graph = Koala::Facebook::GraphAPI.new token
=> #<Koala::Facebook::GraphAPI:0x00000100ce3ac8>
pry(main)> friends = graph.get_connections "me", "friends"
=> [{"name"=>"A Friend", "id"=>"An ID"}, {"name"=>"Another Friend", "id"=>"Another ID"}]
uids = friends.collect { |f| f["id"] }
=> ["An ID", "Another ID"]
Run Code Online (Sandbox Code Playgroud)
此外,如果您遵循Rails约定,则表的id
字段Services
将成为记录的主键,而不是服务用户的Facebook ID,因此您可能需要查询其他字段.
归档时间: |
|
查看次数: |
5828 次 |
最近记录: |