繁体   English   中英

Facebook API 限速提升

[英]Facebook API rate limit increase

我正在开展一个项目,该项目为企业提供管理他们的 facebook 页面,因此它将有大量的 api 调用 Facebook。 是否可以通过特殊要求提高速率限制?

实际上现在可以......

  1. 转到您的Facebook App开发人员仪表板
  2. 向下滚动到应用程序级别速率限制
  3. 单击“提高费率请求”
  4. 填写请求,告知您需要加息的原因

Facebook App开发人员仪表板

API限制增加请求

不,没有办法通过特殊要求增加限制。 如果你真的达到极限,你最有可能做一些你不应该做的事情。 让企业用他们自己的页面令牌管理他们的FB页面是没有问题的。

2022 年更新:

看起来没有办法增加您的应用程序的限制:

基于Facebook 最佳实践和 Goutham 答案

1 - 达到限制后,停止进行 API 调用。 继续拨打电话将继续增加您的通话次数,这将增加通话再次成功的时间。

2 - 检查 X-Business-Use-Case-Usage HTTP header 以查看您的广告帐户接近其限制的程度以及何时可以继续拨打电话。

3 - 验证错误代码和 API 端点以确认限制类型。

4 - 切换到其他广告帐户,稍后再返回此帐户。

5 - 制作新广告比更改现有广告更好。

6 - 在两个时间间隔之间平均分布查询以避免发送高峰流量。

7 - 使用过滤器来限制数据响应大小并避免请求重叠数据的调用。

就个人而言,我开发了这个小片段以永远不会达到极限,但我可以让你的执行时间非常长。 (它是 C#)

    private void TrySleepIfApiLimitIsClose(HttpResponseMessage response)
    {
        try
        {
            IEnumerable<string> businessUsage = response.Headers.FirstOrDefault(header => header.Key == "x-business-use-case-usage").Value;
            IEnumerable<string> appUsage = response.Headers.FirstOrDefault(header => header.Key == "x-app-usage").Value;
            IEnumerable<string> adAccountUsage = response.Headers.FirstOrDefault(header => header.Key == "x-ad-account-usage").Value;
            IEnumerable<string> insightsUsage = response.Headers.FirstOrDefault(header => header.Key == "x-fb-ads-insights-throttle").Value;

            if (businessUsage != null)
            {
                IEnumerable<FacebookBusinessUseCaseUsage> usages = JsonConvert.DeserializeObject<IEnumerable<FacebookBusinessUseCaseUsage>>($"[{Regex.Match(businessUsage.First(), @"\[.{1,}\]").Groups[0].Value.Replace("[", string.Empty).Replace("]", string.Empty)}]");

                foreach (var usage in usages)
                {
                    if (usage.CallCount >= 80 ||
                        usage.TotalCpuTime >= 80 ||
                        usage.TotalTime >= 80)
                        Delay();
                }
            }

            if (appUsage != null)
            {
                FacebookBusinessUseCaseUsage usage = JsonConvert.DeserializeObject<FacebookBusinessUseCaseUsage>(appUsage.First());

                if (usage.CallCount >= 80 ||
                    usage.TotalCpuTime >= 80 ||
                    usage.TotalTime >= 80)
                    Delay();
            }

            if (adAccountUsage != null)
            {
                int usage = int.Parse(Regex.Match(adAccountUsage.First(), @"\d{1,}").Groups[0].Value);

                if (usage >= 80)
                    Delay();
            }

            if (insightsUsage != null)
            {
                FacebookAdInsightsThrottle usage = JsonConvert.DeserializeObject<FacebookAdInsightsThrottle>(insightsUsage.First());

                if (usage.AppIdUtilPct >= 80 || usage.AccIdUtilPct >= 80)
                    Delay();
            }
        }
        catch { }
    }

延迟几分钟:

private void Delay() => Thread.Sleep(1000 * 200);

请注意,我吞下了异常,因为我不想中断执行,在我的情况下,达到限制比中断执行更好。 还要小心Thread.Sleep你必须考虑你的上下文(多线程?异步?...)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM