Я работаю над интерфейсом 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) Достигнут предел запроса пользователя.
Может кто-нибудь помочь мне, как решить эту ошибку?
Спасибо,
Ронак Шах
Вам следует подумать о создании единого отчета по счету 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;
}
Если вы столкнетесь с ограничениями API, ваш единственный вариант — уменьшить количество вызовов. Вы можете сделать это легко, задержав вызовы API. Я предполагаю, что вы уже используете Cron Job, поэтому установите счетчик, в котором хранится информация о последней кампании, для которой вы запросили данные. Когда Cron Job снова запустится, запросите данные следующих 1-x данных кампании (вы должны проверить, сколько их возможно на один вызов Cron Job) и снова сохраните последнюю.
Кроме того, вы должны пакетировать вызовы API — это не обойдется без ограничений, но будет намного быстрее. Так же быстро, как самый медленный вызов API в пакете.