首页 文章

使用Marketing API删除已完成的Facebook AdSet

提问于
浏览
1

我正在尝试创建Facebook广告清理程序,删除指定广告系列中已完成的AdSet . 您可以拥有未删除的未归档AdSets的限制(批量帐户为10000),我们很快就会达到此限制 .

我正在使用Marketing API和适用于PHP的Facebook Ads API SDK:https://github.com/facebook/facebook-php-ads-sdk

虽然很清楚如何检索AdSets,但我找不到按结束时间过滤它们的方法 . 有一个“since”参数,但看起来它不会过滤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();
}

问题是:如果广告系列中有很多广告,这就意味着逐个迭代所有广告并检查其结束日期 . 通常,我们谈论的是数千条记录,而且这种方法非常无效 . 由于我们有很多广告帐户,“清理”脚本会永远运行,即使它没有快速超时 .

问题:有没有办法通过end_time过滤AdSets?看起来有可能通过明确证明一个值,但我找不到使用“小于”或“超过”语法来过滤值的方法 .

1 回答

  • 1

    如果adset已完成运行,则其有效状态将处于“暂停”状态 . 这应该返回较小的广告集 . 您可以过滤处于暂停状态的广告,然后检查其结束时间并在验证后删除 .

相关问题