2011-04-27 149 views
8

我試圖讓已經將他們的Facebook帳戶連接到我的Rails應用的用戶找到已經在應用中註冊的Facebook朋友,最好以格式索引(類似於Formspring的顯示)。使用Facebook Graph API查找用戶的朋友

目前我正在使用Devise,OAuth + Fbook Javascript SDK和考拉。我有每個用戶的Facebook UID連接他們的Facebook保存在數據庫中,但我不知道如何過濾Facebook API調用的結果@friends = @ graph.get_connections(「我」,「朋友」)以便將具有匹配的UID的用戶顯示給API調用數據。

有什麼想法?有可能是一種更好的方式,所以要知道是否需要其他信息。非常感謝您的幫助!

EDIT(在用戶控制指標的行動截圖)

enter image description here

注意在@oauth,應用程序ID和應用程序的祕密在示例圖像

回答

16

裁切掉。如果你能得到一個數組對於用戶的朋友,您可以在一個SQL語句中使用IN(根據屬性等,這裏有一些手動和/或僞代碼)找到它們:

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))" 

如果您的Facebook數據使用其他型號,則可以選擇關閉該型號並執行includes以引入用戶。

registered_friends = Authorizations.where(:type => 'Facebook') \ 
    .where('fb_uid IN (?)', uids).includes(:user).collect(&:user) 

[更新]

看起來像考拉返回基於字符串的哈希值的數組,所以你將無法使用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"] 

另外,如果你是以下Rails的約定,你Services表的id場將成爲記錄的主鍵,而不是服務用戶的Facebook ID,因此您可能需要在另一個字段上進行查詢。

+0

我已經嘗試實現你的答案(見上面的截圖),但是當我打電話的用戶/索引視圖@uids(其中即時通訊做,看它是否得到正確的信息),顯示的數字是不來自圖表API調用的用戶的Facebook ID。我收到一個與「21565518202156551420」無關的數字。有什麼我做錯了嗎?我感謝你的智慧! – ahuang7 2011-04-28 03:30:30

+0

我已經更新了我的答案後,考拉與考拉;看看你有沒有更多的運氣! – 2011-04-28 14:58:25

+0

哇,真棒,你是編碼神。再次感謝! – ahuang7 2011-04-28 19:01:39

2

[更新]

Facebook的圖形API不再允許訪問的版本> = 2.0的完整用戶的好友列表。
API's documentation

應用友:本/me/friends端點不再包括一個人的好友名單 。相反,它現在返回那個也在使用你的應用的朋友的名單。

相關問題