在脸书上寻找共同的朋友

Posted

技术标签:

【中文标题】在脸书上寻找共同的朋友【英文标题】:Finding mutual friends on facebook 【发布时间】:2015-02-27 06:42:23 【问题描述】:

我想使用 facebook Graph API v2.2 找出两个随机用户之间的共同朋友。

我阅读了文档https://developers.facebook.com/docs/graph-api/reference/v2.2/user.context/mutual_friends 它说,“需要具有 user_friends 权限的有效用户访问令牌才能使用该应用查看其他朋友的共同朋友。”

如果他们不是彼此的朋友,有没有办法可以找到 currentUser 和 User2 之间所有共同朋友的号码和可能的名字?

我提到了许多其他问题: Facebook Graph API 2.2 mutual friends => 没有答案

How to get Mutual Friends via Facebook's Graph API => 该解决方案仅在两个用户是朋友时才有效,在我的情况下可能不是这样。

【问题讨论】:

即使 2 个用户不是朋友,他们的 API 也能正常工作。但两者都需要授予 user_friends 权限 没有。我已经准备好代码了。如果用户 A 和用户 B 是朋友 - 我会得到响应,其中包含上下文和我需要的所有数据。响应如下所示: response: Object context: Objectmutual_friends: Object data: Array[some length] summary: Object id: "someId" link: "someLink" 如果用户 A 和用户 B 不是朋友,则响应如下所示:响应:对象 id:“something” 链接:“somelink” 是的,我也在使用链接,但删除它没有任何区别。 他们有共同的朋友在使用这款应用吗?​​ 是的,他们有。我刚刚也检查了FB帐户设置。所有三个用户的设置/应用程序/权限显示该应用程序允许访问朋友列表。 只是想确保我理解。您有用户 A、B、C,并且 A 与 B 成为朋友,B 与 C 成为朋友。这三个人都已登录到您的应用并授予 user_friends 权限。当你要求 A 和 C 之间的共同朋友时,你没有得到任何?如果是这样,请在 developers.facebook.com/bugs 提交错误 【参考方案1】:

我将自己实现这个。我有一个类似的用例,两个用户可能不是朋友,但我想看看他们的哪些朋友是共同的。

显然,当两个用户不是共同朋友时,您必须在来自服务器的 API 请求中包含一个“应用证明”参数:

如果您想代表两个不是朋友的应用用户调用此端点,那么您必须在发出请求时提供appsecret_proof parameter 以及用户访问令牌。这意味着您必须从您的服务器调用此端点。

看起来这可能是个好主意。

【讨论】:

【参考方案2】:

设法找到解决方案并且它正在工作。如果您在自己和其他人内部接到电话,并且你们都是 Facebook 上的朋友,那么您需要做的是创建 Appsecret

代表App secret key found on Facebook Dev under My Apps 和令牌。您可以通过运行创建此密钥: $appsecret_proof= hash_hmac('sha256', $access_token, $app_secret);

然后你将令牌和秘密作为参数传递给调用:

Bundle params = new Bundle(); 
params.putString("appsecret_proof", appsecret_proof); 
params.putString("access_token", access_token);

【讨论】:

我认为它只适用于“其他人和你们都是 Facebook 上的朋友”的情况。如果你们两个都不是,那就没有。 确实如此,就像我提到的那样,它已经过测试。假设我和你不是 Facebook 朋友。如果获得许可,我可以获取我们共同的 Facebook 好友。 您好,您是如何实现的?我需要在我的服务器上运行它吗?我的服务器使用的是 java 应用程序而不是 php,那么我将如何实现呢?【参考方案3】:

它适用于 2 个不是朋友的用户。

以下是 facebook 共同好友 API 的工作示例:

curl -G -d "access_token=<access_token>" -d "appsecret_proof=<appsecret_proof>" 'https://graph.facebook.com/v2.5/user-id?fields=context.fields(mutual_friends)'

App secret 证明是用户访问令牌的 sha256,以 app secret 为 key。

请记住,两个用户都应该使用您的应用程序。 响应将包含同时使用您的应用并获得好友列表权限的用户。

如果你想找到关于共同朋友的具体信息,试试这个:

curl -G -d "access_token=<access_token>" -d "appsecret_proof=<appsecret_proof>" 'https://graph.facebook.com/v2.5/user-id?fields=context.fields(mutual_friends.fields(id,name,picture.type(large)))'

这将返回所有共同好友的 ID、姓名和当前个人资料图片链接。这张照片不需要照片权限。

【讨论】:

它提供了与通过'user_friends'权限可以获得相同的结果。【参考方案4】:

Facebook API 不允许此功能: https://developers.facebook.com/bugs/346462608889036/

【讨论】:

【参考方案5】:

这是一个老问题,但现在我已经处理了,所以我会写...

如果你不是他的朋友,要获得所有共同的朋友,只能从 此处提到的服务器(在我的情况下是节点): https://developers.facebook.com/docs/graph-api/reference/user-context/all_mutual_friends/

获取user-2的token和你的auth-id,同时生成appsecretProof 和您应用的 Facebook 管理面板中的 clientSecret。

https://graph.facebook.com/v2.10/$auth_userId? 
fields=context.fields%28all_mutual_friends.limit%28100%29%29 
&appsecret_proof=$appsecretProof&access_token=$accessToken

记得在用户登录时征求用户的许可,并将应用评论发送到 Facebook 以批准此功能。

使用“user_friends”权限,您只能从客户端获得在您的应用中使用的共同朋友,而不是所有共同朋友。

【讨论】:

以上是关于在脸书上寻找共同的朋友的主要内容,如果未能解决你的问题,请参考以下文章

Spark - 寻找重叠值或寻找共同朋友的变体

为庞大的数据集寻找共同的朋友

迅速在脸书上分享

在脸书上张贴大图

JavaScript 在脸书上分享

在脸书上张贴一张照片