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

时间:2016-09-15 07:00:40

标签: php facebook facebook-php-sdk facebook-marketing-api

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

我正在使用Marketing API和适用于PHP的Facebook Ads API SDK: 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();
}

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

问题:有没有办法按end_time过滤广告?看起来有可能通过明确证明一个值,但我找不到一种方法来使用"小于"来过滤价值。或者"超过"语法。

1 个答案:

答案 0 :(得分:1)

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