12

我的应用程序(游戏)已经在 Facebook 上运行了一段时间。我首先通过图形 API 调用请求朋友列表:my-uid/friends 询问用户名和个人资料图片。

通常我会返回一个包含我所有朋友的列表,最多有几千个,直到它开始将朋友放到下一页。这很好,因为我的大多数用户通过 1 个电话就能结交朋友。

然而,突然之间,应用程序没有任何变化。大约 40 分钟前(周二 18:40 (PDT) - 2012 年 5 月 2 日)我开始收到每个“页面”只有 25 个朋友的回复!

我仍然可以通过多次调用来获取我的整个朋友列表,但游戏目前尚未设置为正确执行此操作。谁能告诉我为什么突然改变?其他任何人都看到过类似的问题,我如何获得列表,以便像以前一样每页最多给我 5000 个朋友。

可使用 Graph API Explorer 重现

4

6 回答 6

19

我不知道还能告诉你什么;也许返回的默认号码已经改变,但是当我尝试时,调用会/me/friends?limit=5000为我返回完整列表(但我的朋友列表是 >500 和 < 1000 ,所以它可能会在途中中断)

(旁注:已发现平均好友数约为 190,因此大概大多数用户的好友数将少于 500,而不得不在 500 以上的页面上将是一个极端情况

于 2012-05-02T02:42:41.643 回答
4

在 SDK 4.7 中,您需要传入包含您想要返回的好友数量的捆绑包,我已将其设置为 5000,因为这是您可以在 Facebook 上拥有的最大好友数量。

您还需要在 facebook 开发控制台中将您的应用设置为游戏,并使用邀请好友来获取完整的好友列表

创建您的捆绑包

Bundle bundle = new Bundle();

将参数添加到您的捆绑包

bundle.putInt("limit", 5000);

然后将其传递给您的 GraphRequest

new GraphRequest(
            AccessToken.getCurrentAccessToken(),
            "/me/invitable_friends",
            bundle,
            HttpMethod.GET,
            new GraphRequest.Callback() {
                public void onCompleted(GraphResponse response) {
                   //Do something with the response
                }
            }
    ).executeAsync();
于 2015-10-29T09:07:36.083 回答
3

似乎 facebook 在其他 api 调用(提要、帖子、朋友等)中也将其限制更改为 25 个结果,如果您请求不带参数的朋友,则 JSON 响应显示以下内容:

"paging": {
    "next": "https://graph.facebook.com/USER_ID/friends?format=json&limit=25&offset=25&__after_id=LAST_ID"
}

无论如何,您可以/应该始终设置限制和偏移参数来防止这种事情,limit = 0将返回您所有的朋友列表。

https://graph.facebook.com/USER_ID/friends?limit=0

如果您只向普通用户请求朋友,则允许的最大数量为 5,000,因此如果您从 facebook 页面或其他类型的 api 调用(如帖子或提要)请求信息,则限制应为 0 或 5,000,此限制可能会增加减少。

(更新)Facebook 修复了这个错误,因此将限制设置为 0 会返回 0 个朋友,您应该设置一个正数限制,感谢 Dinuz

于 2012-05-02T04:44:09.253 回答
2

我认为你能做的最好的事情就是像 Igy 所说的那样添加 limit=5000 参数。
但是我发布了一个错误报告,因为文档中没有注意到或描述此更改。

于 2012-05-02T03:40:53.693 回答
1

从/v2.2/me/friends端点返回的结果数现在默认为 25。

好友列表现在仅返回也使用您的应用的好友:通过/me/friends端点返回的好友列表现在仅限于已授权您的应用的好友列表。

查看 Facebook 更改 Facebook API 更改日志

于 2015-02-17T11:10:11.563 回答
1

如果您正在使用 GraphRequest()(例如在 React Native 中),您可以直接将其放在字符串字段中,如下所示:

new GraphRequest(
  '/me',
  {
    accessToken,
    parameters: {
        fields: {
          string: 'id,email,first_name,last_name,friends.limit(5000)'
        }
    }
    ...
于 2018-03-07T17:51:56.830 回答