在脸书上寻找共同的朋友
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”权限,您只能从客户端获得在您的应用中使用的共同朋友,而不是所有共同朋友。
【讨论】:
以上是关于在脸书上寻找共同的朋友的主要内容,如果未能解决你的问题,请参考以下文章