[英]Facebook API rate limit increase
我正在开展一个项目,该项目为企业提供管理他们的 facebook 页面,因此它将有大量的 api 调用 Facebook。 是否可以通过特殊要求提高速率限制?
实际上现在可以......
不,没有办法通过特殊要求增加限制。 如果你真的达到极限,你最有可能做一些你不应该做的事情。 让企业用他们自己的页面令牌管理他们的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.