[英]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.