Удаление завершенных Facebook AdSets с помощью Marketing API

Я пытаюсь создать очиститель рекламы Facebook, который удаляет завершенные AdSets в указанной кампании. Существует ограничение на количество не удаленных неархивированных AdSets (которое составляет 10000 для массовых учетных записей), и мы довольно быстро достигаем этого лимита.

Я использую Marketing API и SDK Facebook Ads API для 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();
}

Проблема: в случае, если в кампании много AdSet, это будет буквально означать повторение ВСЕХ AdSets внутри один за другим и проверка даты его окончания. Обычно речь идет о тысячах записей, и такой подход крайне неэффективен. Поскольку у нас много рекламных аккаунтов, скрипт «очистки» работает вечно, даже если время ожидания не истекает быстро.

Вопрос: есть ли способ отфильтровать AdSets по end_time? Похоже, это возможно путем явного доказательства значения, но я не могу найти способ отфильтровать значение, используя синтаксис «меньше чем» или «больше чем».


person YOzaz    schedule 15.09.2016    source источник


Ответы (1)


Если запуск adset завершился, его действующий статус будет в состоянии «ПРИОСТАНОВЛЕН». Это должно вернуть меньшее подмножество рекламных наборов. Вы можете отфильтровать рекламные наборы в состоянии ПРИОСТАНОВЛЕН, а затем проверить их время окончания и удалить после проверки.

person rmx    schedule 16.05.2017