2016-09-15 61 views
0

我正在嘗試創建Facebook Ads清除程序,這會刪除指定廣告系列中已完成的AdSets。您可以擁有的未刪除的非歸檔AdSets有多少限制(對於批量帳戶而言,這是10000),並且我們正在很快達到此限制。使用Marketing API刪除已完成的Facebook AdSets

我使用的營銷API和Facebook廣告API SDK的PHP: https://github.com/facebook/facebook-php-ads-sdk

雖然很明顯AdSets如何可以檢索,我無法找到一個方式,通過結束時間過濾。有一個「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(); 
} 

的問題:萬一有很多AdSets的一個活動,這將意味着從字面上迭代ALL AdSets內一個接一個,並檢查它的結束日期。通常,我們談論的是成千上萬的記錄,而且這種方法非常無效。由於我們有大量的廣告帳戶,「清潔」腳本永遠運行,即使它沒有很快超時。

問題:有沒有辦法通過end_time過濾AdSets?看起來可以通過明確地證明一個值,但是我找不到使用「少於」或「多於」語法過濾值的方法。

回答

0

如果adset已完成運行,其有效狀態將處於「PAUSED」狀態。這應該返回一個較小的廣告集。您可以過濾處於PAUSED狀態的廣告,然後檢查其結束時間並在驗證後刪除。

相關問題