How do I call more than 100 statuses with Facebook API?

后端 未结 5 1148
不思量自难忘°
不思量自难忘° 2021-01-05 04:47

I\'m building a Facebook application and I want it to be able to read all the user\'s statuses from the past year. When I make the API call, I can only retrieve the first 10

相关标签:
5条回答
  • 2021-01-05 05:30

    Paging and Since, Until parameters not working for me too.

    But I found out, that I'm able get more then 100 statuses using Offset parameter. Here is my code using 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));
    }
    
    0 讨论(0)
  • 2021-01-05 05:37

    Facebook closed the previous bug without really testing to see that it didn't work. I've made a new bug here: https://developers.facebook.com/bugs/242235199184053

    0 讨论(0)
  • 2021-01-05 05:39

    I've verified using the Graph API explorer that the pagination is not working as you have described. Log it as a bug with Facebook at: https://developers.facebook.com/bugs and post the bug # here.

    EDIT

    Per the bug closure, the 100 limit is By Design and you won't get more than that, meaning that Facebook has made a conscious business decision to limit the amount of data it has to store, process, and serve from the Graph API. It costs money to do so and since the API is free to use, I can't argue with them. However, if I was paying for it, then hell yes I kick and scream all the way down the road.

    0 讨论(0)
  • 2021-01-05 05:40

    This worked as of a week ago, our best bet to get this fixed is to post on http://developers.facebook.com/bugs/155458081230560 so the facebook developers know how big of an issue this is.

    0 讨论(0)
  • 2021-01-05 05:41

    It does work. You must use both the limit and offset query parameters. The limit parameter sets the batch size. The offset parameter sets the position in the user's all-time status collection. Without specifying the offset parameter, Facebook defaults it to zero, which is why you keep seeing the same dataset.

    For the 1st batch of 100 statuses, set limit to 100 and offset to 0.
    For the 2nd batch of 100 statuses, set limit to 100 and offset to 100.
    For the 3rd batch of 100 statuses, set limit to 100 and offset to 200.
    For the 4th batch of 100 statuses, set limit to 100 and offset to 300.
    And so on...

    Keep iterating until you get an empty dataset:

    {
       "data": []
    }
    
    0 讨论(0)
提交回复
热议问题