Facebook图形API'朋友'请求现在每页只返回25个朋友?这是怎么回事?

时间:2012-05-02 02:37:06

标签: facebook facebook-graph-api

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

通常我会收到所有朋友的列表,最多可达几千,直到它开始将朋友放到下一页。这很好,因为我的大多数用户都可以通过一次通话获得朋友。

然而,突然间,并没有对应用程序进行任何更改。大约40分钟前(星期二(星期二)18:40 - 2012年5月2日)我开始得到每个'页面'只有25位朋友的回复!

我仍然可以使用多个来电获取我的整个朋友列表,但目前尚未正确设置游戏。谁能告诉我为什么突然改变?其他人看到过类似的问题,我如何获得列表,每页给我最多5000个朋友。

使用Graph API Explorer

重现

6 个答案:

答案 0 :(得分:19)

我不知道还能告诉你什么;也许返回的默认号码已更改,但是当我尝试时,拨打/me/friends?limit=5000会为我返回完整列表(但我的朋友列表大于500且<1000,所以也许它会在某处切断)

(旁注:the average number of friends has been found to be ~190所以大概大多数用户的用户数不会超过500,并且不得不超过500页,这将是一个边缘案例

答案 1 :(得分:3)

似乎facebook将其限制更改为其他api调用的25个结果(Feed,帖子,朋友等),如果您请求没有参数的朋友,JSON响应会显示以下内容:

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

无论如何你可以/应该总是设置限制&amp;抵消参数以防止此类事件, limit = 0 将返回您的所有朋友列表。

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

如果您只是向普通用户请求朋友,则允许的最大数量为5,000,因此如果您要求来自a的信息, 的限制应为 0或 5,000 Facebook页面或其他类型的api调用,如帖子或Feed这个限制可以增加或减少。

(更新)Facebook修复了这个bug,所以设置限制为0返回0个朋友,你应该设置一个正限制,感谢Dinuz

答案 2 :(得分:3)

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

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

创建您的包

Bundle bundle = new Bundle();

将params添加到您的包中

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();

答案 3 :(得分:2)

我认为你可以做的最好的事情是添加limit = 5000参数,因为Igy说 但是我发布了a bug report,因为此更改未在文档中注意或描述。

答案 4 :(得分:1)

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

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

查看Facebook的变化 Facebook API change log

答案 5 :(得分:1)

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

new GraphRequest(
  '/me',
  {
    accessToken,
    parameters: {
        fields: {
          string: 'id,email,first_name,last_name,friends.limit(5000)'
        }
    }
    ...
相关问题