1

我希望能夠將我的應用程序中的用戶列表與首先列出的當前用戶的Facebook朋友一起返回。我發現有許多方法可以查詢Graph API以返回使用應用程序的用戶朋友,但我希望能夠顯示在我的網站上採取了特定操作的用戶列表,並將他們與列在第一位的FB好友一起排序,所以任何時候我都會顯示一個用戶列表,我可以做這個排序。如何在頂部對Facebook用戶列表中的用戶進行排序?

我見過的最好的例子就是meetup.com。他們在顯示參加聚會的人員名單時這樣做。這裏有一個例子:

An example of how Meetup sorts a user list with FB friends first

我不知道它將對任何人任何區別,但它是一個Rails應用程序,我使用OmniAuth通過Facebook做認證。

回答

1

由於沒有朋友狀態列,您無法排序朋友狀態。您無法執行任何複雜的SQL操作,因爲FQL不支持這些操作,因此將朋友表與其他表加入或聯合在一起。你能做的最好的是識別的朋友都可以通過一個單獨的查詢誰...

SELECT uid FROM friend WHERE uid IN (...ALL USER IDs...) 

所有UID的從該查詢返回的將是你的完整列表的一個子集,僅包括那些人是朋友。

附加信息

的Meetup網站應用程序是...

  1. 首先查詢它的本地數據庫,生成參與者的列表。 (讓我們稱之爲結果[participants])
  2. 然後,他們facebook的朋友數據庫執行查詢,以確定其中哪些[participants]是朋友。 (讓我們稱之爲結果[participating_friends])從相知其中uid IN([participants])

  3. 他們也存儲在他們的本地數據庫[participating_friends]的UID的該列表

    SELECT UID。一列是用戶的ID(uid),另一列是他們朋友的用戶名(friendid)。

  4. 最後,確定朋友的朋友他們詢問當地的朋友數據庫(3)用類似的查詢:

    選擇friendid FROM local_friends WHERE UID IN([participating_friends])

UPDATE:現在回想起來,聚會可能是C asting一個更廣泛的淨如下:

的Meetup網站應用程序是...

  1. 首先查詢它的本地數據庫,生成參與者的列表。 (讓我們稱之爲結果[participants])
  2. 然後,他們facebook的朋友數據庫執行查詢,以確定其中哪些[participants]是朋友。 (讓我們稱之爲結果[participating_friends])從相知其中uid IN([participants])

  3. 確定應用程序用戶的所有朋友誰也App用戶

    SELECT uid和存儲結果在本地數據庫中,保存uid's和相關的friendid's。

    SELECT UID FROM用戶WHERE UID IN(SELECT UID2從相知WHERE UID1 =我())和is_app_user

  4. 最後,確定朋友的朋友,計算新集:

    [participants_not_friends] = [participants] - [participating_friends]。

    然後用像查詢查詢本地的朋友數據庫(3):

    選擇friendid FROM local_friends WHERE UID IN([participants_not_friends])

+1

是的,他們基本上在參加者名單,朋友名單和比較兩個 – Igy 2012-08-17 18:00:17

+2

這個答案是和是正確的。如果你是在倒計時,也許你應該解釋一下自己。 – 2012-08-17 22:08:36

0

是,你可以得到每個用戶的朋友列表。這是我會怎麼做的。

在註冊時,如果用戶在Facebook上註冊,您將他們的ID存儲在數據庫中。

當經過身份驗證的用戶查看您的記錄之一,問題通過API這個FQL查詢:

SELECT uid, name, pic_square, mutual_friend_count FROM user 
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) 
    AND is_app_user 
ORDER BY mutual_friend_count DESC 

這會給你的應用程序的後面其他用戶誰是朋友的相互下令當前用戶你的應用用戶和每個朋友之間的朋友數(假設更密切的朋友有更多的共同朋友)。

通過比較此查詢的結果與數據庫中存儲的Facebook ID,可以將此列表與數據庫中的任何其他指標進行比較。

顯示朋友的朋友是一個棘手的主張。如果您嘗試此查詢:

SELECT uid2 FROM friend WHERE uid1 IN 
(SELECT uid2 FROM friend WHERE uid1 = me() LIMIT 1) 

它引發權限錯誤。 Facebook不會讓你找朋友的朋友。

如果它對您的應用程序很重要,那麼您可以通過緩存每次應用程序用戶最近的朋友列表來每次登錄時(或在計劃中,如果您還要求擴展訪問令牌)以及查詢此表中查看是否有所有用戶的朋友有共同的朋友。你需要仔細看看服務條款,看看這是多麼合法。

相關問題