【发布时间】:2017-01-23 02:38:27
【问题描述】:
我正在尝试创建 Facebook 广告清理工具,它会删除指定广告系列中已完成的广告集。您可以拥有的未删除未归档 AdSet 的数量有一个限制(批量帐户为 10000 个),我们很快就会达到这个限制。
我正在使用 Marketing API 和 Facebook Ads API SDK for PHP: https://github.com/facebook/facebook-php-ads-sdk
虽然很清楚如何检索 AdSet,但我找不到按结束时间过滤它们的方法。有一个“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();
}
问题:如果一个广告系列中有很多 AdSet,这实际上意味着一个接一个地迭代所有 AdSet 并检查它的结束日期。通常,我们谈论的是数千条记录,这种方法非常无效。由于我们有很多广告帐户,“清理”脚本会永远运行,即使它不会很快超时。
问题:有没有办法按 end_time 过滤 AdSet?看起来可以通过显式证明一个值,但我找不到使用“小于”或“大于”语法过滤值的方法。
【问题讨论】:
标签: php facebook facebook-php-sdk facebook-marketing-api