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不会让你找朋友的朋友。

如果它对您的应用程序很重要,那么您可以通过缓存每次应用程序用户最近的朋友列表来每次登录时(或在计划中,如果您还要求扩展访问令牌)以及查询此表中查看是否有所有用户的朋友有共同的朋友。你需要仔细看看服务条款,看看这是多么合法。

相关问题