【问题标题】:How to get Facebook Rate Limit Header using Facebook4J?如何使用 Facebook4J 获取 Facebook 速率限制标头?
【发布时间】:2017-05-05 02:55:44
【问题描述】:

根据Facebook Docs

如果您的应用发出的调用足够多,我们的系统会考虑对其进行速率限制,我们会返回 X-App-Usage HTTP 标头。 [...] 当这些指标中的任何一个超过 100 时,应用将受到速率限制。

我正在使用Facebook4J 将我的应用程序连接到 Facebook API。但我找不到任何关于如何在 Facebook 调用后获取 X-App-Usage HTTP 标头的文档,以避免受到速率限制。如果我需要增加或减少每个 API 调用之间的时间,我想使用此标头动态地了解。

所以,我的问题是:使用 Facebook4J,是否可以检查 Facebook 是否返回了 X-App-Usage HTTP 标头并得到它?怎么样?

【问题讨论】:

  • 接近极限就得到header
  • 我已将问题更新为“是否可以检查 Facebook 是否返回了 X-App-Usage HTTP 标头并得到它?”

标签: java facebook facebook4j


【解决方案1】:

facebook4j中BatchRequests的响应有getResponseHeader方法见Facebook4j code examples

你可以试试 getResponseHeader("X-App-Usage")

// Executing "me" and "me/friends?limit=50" endpoints
BatchRequests<BatchRequest> batch = new BatchRequests<BatchRequest>();
batch.add(new BatchRequest(RequestMethod.GET, "me"));
batch.add(new BatchRequest(RequestMethod.GET, "me/friends?limit=50"));
List<BatchResponse> results = facebook.executeBatch(batch);

BatchResponse result1 = results.get(0);
BatchResponse result2 = results.get(1);

// You can get http status code or headers
int statusCode1 = result1.getStatusCode();
String contentType = result1.getResponseHeader("Content-Type");

// You can get body content via as****() method
String jsonString = result1.asString();
JSONObject jsonObject = result1.asJSONObject();
ResponseList<JSONObject> responseList = result2.asResponseList();

// You can map json to java object using DataObjectFactory#create****()
User user = DataObjectFactory.createUser(jsonString);
Friend friend1 = DataObjectFactory.createFriend(responseList.get(0).toString());
Friend friend2 = DataObjectFactory.createFriend(responseList.get(1).toString());

【讨论】:

    猜你喜欢
    • 2021-06-09
    • 2021-04-15
    • 2016-02-17
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    相关资源
    最近更新 更多