【问题标题】:Limit calls to Facebook graph_url_engagement_count限制对 Facebook graph_url_engagement_count 的调用
【发布时间】:2021-11-16 07:00:16
【问题描述】:

我收到此错误,“(#613) 对 graph_url_engagement_count 的调用已超过每 3600 秒 10 次调用的速率。”所以我想将对 API 的调用保持在给定链接的限制范围内。

注意:每小时 10 次呼叫的限制仅适用于每个链接。

这是我正在使用的功能:

const getFacebookStats = async (link) => {
  try {
    const resp = await axios.get(
      `https://graph.facebook.com/v12.0/?id=${link}&fields=engagement&access_token=${BEARER_TOKEN_FACEBOOK}`
    );
    return resp.data.engagement;
  } catch (err) {
    // Handle Error Here
    console.error(err);
  }
};

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 那么请减少请求...?
  • 您的回复让我意识到我可能应该提供更多细节,哈哈,但无论如何现在都很好。解决了使用 LRU 缓存的问题。

标签: javascript node.js facebook-graph-api


【解决方案1】:

使用 LRU 缓存解决了这个问题。

cache.set(link, cache.get(link) == undefined ? 1 : cache.get(link) + 1);

每次将链接传递给 getFacebookStats 函数时,链接及其计数都会存储在 LRU 缓存中,如果同一个链接被多次调用,则其计数会增加。

在LRU缓存的设置中,maxAge设置为1小时:

maxAge: 1000 * 60 * 60,

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
  • 我喜欢 LRU 缓存的想法,但速率不是每个 url,而是请求总数,所以你需要一个全局计数器。
猜你喜欢
  • 2015-06-28
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 2014-06-02
相关资源
最近更新 更多