我正在尝试创建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过滤广告?看起来有可能通过明确证明一个值,但我找不到一种方法来使用"小于"来过滤价值。或者"超过"语法。
答案 0 :(得分:1)
如果adset已完成运行,其有效状态将处于“暂停”状态。这应该返回较小的广告集。您可以过滤处于PAUSED状态的广告,然后检查其结束时间并在验证后删除。