FB Ads API (# 17) Достигнут лимит запросов пользователей

Я работаю над интерфейсом API рекламы в Facebook, чтобы получить данные кампании. Для этого я получаю список всех кампаний, и для каждой кампании получаю отчет о каждой кампании, чтобы получить статистику кампании.

$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) Достигнут предел запроса пользователя.

Может кто-нибудь помочь мне, как решить эту ошибку?

Спасибо,
Ронак Шах

2

Решение

Вам следует подумать о создании единого отчета по счету adaccount, который дает представление о всех ваших кампаниях, что должно значительно сократить количество требуемых запросов.

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;
}
2

Другие решения

Если вы столкнетесь с ограничениями API, ваш единственный вариант — уменьшить количество вызовов. Вы можете сделать это легко, задержав вызовы API. Я предполагаю, что вы уже используете Cron Job, поэтому установите счетчик, в котором хранится информация о последней кампании, для которой вы запросили данные. Когда Cron Job снова запустится, запросите данные следующих 1-x данных кампании (вы должны проверить, сколько их возможно на один вызов Cron Job) и снова сохраните последнюю.

Кроме того, вы должны пакетировать вызовы API — это не обойдется без ограничений, но будет намного быстрее. Так же быстро, как самый медленный вызов API в пакете.

1

По вопросам рекламы [email protected]