我正在构建一个Facebook应用程序,我希望它能够读取过去一年中所有用户的状态。当我进行API调用时,无论我将限制设置为什么,我都只能检索前100个状态。
这是我用来拨打电话的网址: https://graph.facebook.com/me/statuses?limit=100&access_token= ...
当我将限制设置为较低时,它会显示较少的状态(证明限制参数有效)。当我将限制设置得更高时,它只给我前100个。当我使用'since'时,它仍然只给我100个。
当我使用它的“下一个”网址时,我看到没有数据超过前100个状态。
我知道由于My Year In Status
等应用程序,可能会获得更多答案 0 :(得分:6)
确实有效。您必须同时使用limit
和offset
查询参数。 limit
参数设置批量大小。 offset
参数设置用户的历史状态集合中的位置。如果不指定offset
参数,Facebook会将其默认为零,这就是您持续查看相同数据集的原因。
对于第一批100个状态,请将limit
设为100
,将offset
设为0
。
对于第二批100个状态,请将limit
设置为100
,将offset
设置为100
。
对于第3批100个状态,请将limit
设置为100
,将offset
设置为200
。
对于第4批100个状态,请将limit
设置为100
,将offset
设置为300
。
等等...
继续迭代直到获得空数据集:
{
"data": []
}
答案 1 :(得分:4)
我已经使用Graph API资源管理器验证了分页不起作用,如您所述。将其记录为Facebook的错误:https://developers.facebook.com/bugs并在此处发布错误#。
修改强>
根据错误关闭,100限制是按设计,你不会得到更多,这意味着Facebook已经有意识的商业决策 限制数据量它必须从Graph API 存储,处理和提供。这样做需要花钱,而且由于API可以免费使用,我不能与他们争论。但是,如果我付钱的话,那么我一直踢,并一路尖叫。
答案 2 :(得分:3)
分页和自,直到参数也不适合我。
但我发现,使用偏移参数,我可以获得超过100种状态。 这是我的代码使用 Facebook C#SDK :
var fb = new FacebookClient(accessToken);
string connection = "statuses";
string urltemplate = "https://graph.facebook.com/me/{0}?limit={1}&offset={2}";
int limit = 25; //items on one page (Max is value 100)
int offset = 0;
var statuses = (IDictionary<string, object>)fb.Get(string.Format(urltemplate, connection, limit, offset));
while (statuses != null && statuses.ContainsKey("data") && ((Facebook.JsonArray)statuses["data"]).Count > 0)
{
var dataItems = (Facebook.JsonArray)statuses["data"];
foreach (Facebook.JsonObject item in dataItems)
{
//TODO: process item data
System.Diagnostics.Debug.WriteLine(item["message"]);
}
offset += limit;
statuses = (IDictionary<string, object>)fb.Get(string.Format(urltemplate, connection, limit, offset));
}
答案 3 :(得分:1)
这个工作在一周前发布,我们最好的办法就是在http://developers.facebook.com/bugs/155458081230560发帖,以便facebook开发人员知道这是一个多大的问题。
答案 4 :(得分:0)
Facebook没有真正测试就关闭了之前的bug,发现它没有用。我在这里制作了一个新错误:https://developers.facebook.com/bugs/242235199184053