Я пытаюсь создать Facebook Ads cleaner, который удаляет завершенные AdSet в указанной кампании. Существует ограничение на то, как могут быть удаленные неархивированные AdSets, которые вы можете иметь (что составляет 10000 для массовых учетных записей), и мы достигаем этого предела довольно быстро.Удаление заполненных Facebook AdSets с использованием маркетингового API
Я использую API маркетинга и Facebook Ads API SDK для PHP: https://github.com/facebook/facebook-php-ads-sdk
Хотя ясно, как AdSets может быть восстановлена, я не могу найти способ фильтровать их по времени окончания. Существует параметр «с», но похоже, что он не фильтрует дату начала и окончания AdSet и, скорее, сам фильтрует статистику. Поэтому AdSet, который все еще активен, попадет в указанный диапазон.
Мой код:
use FacebookAds\Object\Campaign;
use FacebookAds\Object\Fields\AdSetFields;
use Carbon\Carbon;
// Facebook ID of a Ad Campaign
$external_id = '123456789';
$campaign = new Campaign($external_id);
// Querying required field only
$fields = [
AdSetFields::END_TIME
];
// Need to query AdSets which have been completed in the past...?
$params = [
];
$adsets = $campaign->getAdSets($fields, $params);
$adsets->setUseImplicitFetch(true);
while ($adsets->valid())
{
/** @var AdSet $adset */
$adset = $adsets->current();
$end_time = Carbon::parse($adset->{AdSetFields::END_TIME});
if ($end_time->isPast())
{
$adset->delete();
}
$adsets->next();
}
Проблема: в случае, если есть много AdSets в кампании, это будет означать буквально перебору ВСЕХ AdSets внутри одного за другим, и проверку его окончание. Обычно мы говорим о тысячах записей, и такой подход крайне неэффективен. Поскольку у нас много аккаунтов объявлений, сценарий «очистки» работает вечно, даже если он не быстро заканчивается.
Вопрос: есть ли способ фильтровать AdSets к end_time? Похоже, это возможно, явно подтверждая значение, но я не могу найти способ фильтровать значение, используя синтаксис «меньше» или «больше».