FB Ads API(#17)达到用户请求限制

时间:2015-12-08 16:26:26

标签: php facebook facebook-ads-api

我正在开发Facebook广告API以获取帐户广告系列数据。我在这里做的是我获取所有广告系列的列表,并为每个广告系列制作forloop获取广告系列数据

$campaignSets = $account->getCampaigns(array(
      CampaignFields::ID,
      CampaignFields::NAME
));

foreach ($campaignSets as $campaign) {
      $campaign = new Campaign($campaign->id);
      $fields = array(
        InsightsFields::CAMPAIGN_NAME,
        InsightsFields::IMPRESSIONS,
        InsightsFields::UNIQUE_CLICKS,
        InsightsFields::REACH,
        InsightsFields::SPEND,
        InsightsFields::TOTAL_ACTIONS,
        InsightsFields::TOTAL_ACTION_VALUE
      );
      $params = array(
        'date_preset' => InsightsPresets::TODAY
      );
                $insights = $campaign->getInsights($fields, $params);
}

执行上面的代码时,我收到错误(#17)达到了用户请求限制。

任何人都可以帮我解决这种错误吗?

谢谢, Ronak Shah

3 个答案:

答案 0 :(得分:2)

您应该考虑针对广告系列生成单个报告,该报告会返回您所有广告系列的数据分析,这样可以显着减少所需的请求数量。

Cursor::setDefaultUseImplicitFetch(true);

$account = new AdAccount($account_id);
$fields = array(
  InsightsFields::CAMPAIGN_NAME,
  InsightsFields::CAMPAIGN_ID,
  InsightsFields::IMPRESSIONS,
  InsightsFields::UNIQUE_CLICKS,
  InsightsFields::REACH,
  InsightsFields::SPEND,
  InsightsFields::TOTAL_ACTIONS,
  InsightsFields::TOTAL_ACTION_VALUE,
);
$params = array(
  'date_preset' => InsightsPresets::TODAY,
  'level' => 'ad',
  'limit' => 1000,
);

$insights = $account->getInsights($fields, $params);
foreach($insights as $i) {
  echo $i->campaign_id.PHP_EOL;
}

答案 1 :(得分:1)

如果您遇到API限制,您唯一的选择是减少通话。您可以通过延迟API调用轻松完成此操作。我假设您已经在使用Cron作业,因此请实施一个计数器,用于存储您请求数据的最后一个广告系列。当Cron作业再次运行时,请求下一个1-x活动数据的数据(您必须测试每个Cron作业调用可能的数量)并再次存储最后一个。

此外,您应该批量调用API - 它不会避免限制,但会更快。与批处理中最慢的API调用一样快。

答案 2 :(得分:0)

将此添加到您的代码中,您将不必担心FB的速率限制/已达到用户限制。 一旦接近极限,您的脚本将自动进入睡眠状态,然后在冷却后从剩下的位置开始恢复。享受:)

_exit