簡體   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