Ruby on rails 如何对Facebook好友排名靠前的用户列表进行排序?

Ruby on rails 如何对Facebook好友排名靠前的用户列表进行排序?,ruby-on-rails,facebook,facebook-graph-api,facebook-oauth,Ruby On Rails,Facebook,Facebook Graph Api,Facebook Oauth,我希望能够从我的应用程序返回一个用户列表,首先列出当前用户的Facebook好友。我知道有很多方法可以查询Graph API以返回用户使用应用程序的朋友,但我希望能够显示在我的网站上执行特定操作的用户列表,并将其与首先列出的FB朋友进行排序,因此每当我显示用户列表时,我都能够进行排序 我在meetup.com上看到过最好的例子。他们在展示参加聚会的人的名单时会这样做。下面是一个例子: 我不知道它是否会对任何人产生影响,但它是一款Rails应用程序,我正在使用OmniAuth通过Facebook进

我希望能够从我的应用程序返回一个用户列表,首先列出当前用户的Facebook好友。我知道有很多方法可以查询Graph API以返回用户使用应用程序的朋友,但我希望能够显示在我的网站上执行特定操作的用户列表,并将其与首先列出的FB朋友进行排序,因此每当我显示用户列表时,我都能够进行排序

我在meetup.com上看到过最好的例子。他们在展示参加聚会的人的名单时会这样做。下面是一个例子:


我不知道它是否会对任何人产生影响,但它是一款Rails应用程序,我正在使用OmniAuth通过Facebook进行身份验证。

您无法按好友状态排序,因为没有好友状态列。您不能执行任何复杂的SQL操作,将friends表与另一个表连接或联合,因为FQL不支持这些操作。你能做的最好的事情就是通过一个单独的查询来确定谁是朋友

SELECT uid FROM friend WHERE uid IN (...ALL USER IDs...)
从该查询返回的所有uid都将是完整列表的子集,仅包括那些朋友

其他信息:

Meetup应用程序是

首先查询其本地数据库以生成参与者列表。让我们调用结果[参与者] 然后,他们在facebook好友数据库上执行查询,以确定哪些参与者是好友。让我们调用结果[参与的朋友]

从朋友中选择uid,其中uid位于[参与者]

他们还将[参与的朋友]uid列表存储在本地数据库中。一列是用户的id uid,另一列是他们朋友的uid friendid

最后,为了确定朋友的朋友,他们使用如下查询从3查询其本地朋友数据库:

从[participating\u friends]中的uid所在的本地\u friends中选择friendid

更新:回顾过去,Meetup可能会撒下更大的网,如下所示:

Meetup应用程序是

首先查询其本地数据库以生成参与者列表。让我们调用结果[参与者] 然后,他们在facebook好友数据库上执行查询,以确定哪些参与者是好友。让我们调用结果[参与的朋友]

从朋友中选择uid,其中uid位于[参与者]

确定同时也是应用程序用户的应用程序用户的所有朋友,并将结果存储在本地数据库中,保存uid和关联的friendid

选择uid FROM user WHERE uid IN选择uid2 FROM friend WHERE uid1=me,is\u app\u user

最后,要确定朋友的朋友,请计算新集合:

[参与者非参与者朋友]=[参与者]-[参与者朋友]

然后使用如下查询从3查询本地好友数据库:

从[participants\u not\u friends]中的uid所在的本地朋友中选择friendid


是的,您可以获得每个用户的好友列表。我会这样做的

在注册时,如果用户向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不允许你从朋友中得到朋友


如果这对你的应用程序很重要,你可以在每次登录时缓存每个应用程序用户的最新好友列表,或者如果你还要求使用扩展访问令牌,可以按计划缓存这些好友列表,并查询此表以查看是否有与所有用户好友相同的好友。你需要仔细查看TOS,看看这有多合法。

是的,他们基本上是在记录与会者名单和朋友名单,并比较这两个答案是正确的。如果你投了反对票,也许你应该解释一下。