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



我正在尝试创建Facebook广告清洁器,它在指定的活动中删除完成的广告集。您可以拥有的未删除的未存档的AdSets数量是有限制的(批量帐户是10000),我们很快就会达到这个限制。

我正在使用营销API和Facebook广告API SDK for PHP:https://github.com/facebook/facebook-php-ads-sdk

虽然很清楚如何检索AdSets,但我找不到一种方法来过滤它们的结束时间。有一个"since"参数,但它看起来不过滤AdSet的开始和结束日期,而是过滤自己的统计数据。因此,仍处于活动状态的AdSet将进入指定的范围。

我代码:

use FacebookAdsObjectCampaign;
use FacebookAdsObjectFieldsAdSetFields;
use CarbonCarbon;
// 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 ?通过显式地证明一个值似乎是可能的,但我找不到使用"小于"或"大于"语法过滤值的方法。

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

最新更新