Facebook图形API的“好友”请求现在每页只返回25个好友?发生了什么事?

12

我的应用程序(游戏)在Facebook上运行了一段时间。我通过图形API调用请求好友列表:my-uid/friends,并要求用户姓名和个人资料照片。

通常我会收到所有好友的列表,多达几千个,直到它开始将好友放到下一页为止。这很好,因为我的大多数用户在1次调用中就能获取好友。

但突然间,而且没有对应用程序进行任何更改,在约40分钟前(2012年5月2日星期二晚上18:40(PDT))我开始收到每个“页面”只有25个好友的响应!

我仍然可以使用多个调用获取整个好友列表,但是该游戏目前未设置正确的方式来执行此操作。有谁能告诉我为什么会发生突然的更改?是否还有其他人遇到类似的问题,如何让列表像以前那样每页给出最多5000个好友。

可使用Graph API Explorer重现

6个回答

19

我不知道还有什么别的可以告诉你的了。也许默认返回的数字已经改变了,但是当我尝试调用 /me/friends?limit=5000 时,它会返回完整的列表(但是我的朋友列表大于500且小于1000,所以可能在某个位置截断了)。

另外注意:发现平均朋友数量约为190个,因此大多数用户的朋友数量都不到500个,需要翻页到500以上的情况应该比较少见。


谢谢Igy。是的,我怀疑默认数字已经改变了 - 如果有一个小警告就好了。现在我已经明确提到了限制,它可以正常工作。 - Paul Naylor
这可能会因为这个原因而被撤销;即使它们不应该破坏应用程序,这些事情通常会提前公布。 - Igy
从今天开始,/me/friends?limit=5000 不起作用。 - Ionut Necula
我刚刚尝试了一下,在2018年初,在iOS上/me/friends?limit=5000仍然可以正常工作。如果我删除limit = 5000,我只会像预期的那样收到25个。 - ToddH

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

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,因此限制应为可能为0或者5,000。如果您从Facebook页面或其他类型的API调用(如帖子或 feed)中请求信息,则此限制可能会增加或减少。

(更新)Facebook已修复此错误,因此将限制设置为0将返回0个好友,您应该设置一个正数限制,谢谢Dinuz。


2
亲爱的German,limit=0是个bug,在2013年10月的Breaking Changes中他们将删除它。使用limit=0并遵守新规则将返回0个好友。我认为目前最好的选择是将其设置为limit=5000(之后你也不能拥有更多的好友,而他们只需要关注你就可以了)。 - Dinuz
是的,这是一个错误,我的回答是来自2012年,更改发生在2013年底,我已经更新了答案,谢谢。 - German Gil

2

我认为最好的做法是按照Igy所说添加limit=5000参数。
然而,由于这个变化没有被注意到或描述在文档中,我提交了错误报告


1
如果你正在使用GraphRequest()(例如在React Native中),你可以直接将其放在字符串字段中,如下所示:
new GraphRequest(
  '/me',
  {
    accessToken,
    parameters: {
        fields: {
          string: 'id,email,first_name,last_name,friends.limit(5000)'
        }
    }
    ...

1

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

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

请参见 Facebook 更改Facebook API 变更日志


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接