【问题标题】:Deleting completed Facebook AdSets using Marketing API使用 Marketing API 删除已完成的 Facebook AdSet
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多