6

我爲自己創建了一個儀表板,幫助我跟蹤正在運行的Facebook廣告。如何檢索我所有活躍的Facebook廣告?

我已經無法搞清楚的是:

我怎樣才能檢索到的廣告ID數組有活動可能很快就會被激活後,我的一部分不採取進一步行動的所有廣告?

換句話說,我想我已經設置爲有效,內Adsets並且是有效的廣告活動中存在的所有廣告(因此這些廣告是活現在)... 加上所有廣告從我的視角是活躍的,但Facebook已設置爲另一個狀態,如待審覈(並且很快會恢復爲活動狀態)。

我有一些代碼在下面,但問題是,它意外地包括待審查的廣告,並經過Facebook批准 - 將不活躍(因爲我已經設置他們這樣) 。我不希望這種類型的廣告包含在我的報告中。

我的報告應該只顯示我積極花錢或有可能在FB批准後花錢的潛力。

我想我明白configured_statusAbstractArchivableCrudObjectFieldseffective_status之間的差別,但我不知道這是足以幫助我,因爲我有很多設置爲活動是內Adsets是無效的廣告,而且我不我不想看到我的報告中列出的人。

有什麼建議嗎?

public function getActiveAdIds() { 
    $key = 'activeAdIds'; 
    $adIdsJson = Cache::get($key); 
    if ($adIdsJson) { 
     $adIds = json_decode($adIdsJson); 
    } else { 
     $adsResponse = $this->getAdsByStatus([ArchivableCrudObjectEffectiveStatuses::ACTIVE, ArchivableCrudObjectEffectiveStatuses::PENDING_REVIEW]); 
     $ads = $adsResponse->data; 
     $adIds = []; 
     foreach ($ads as $ad) { 
      $adIds[] = $ad->id; 
     } 
     $adIdsJson = json_encode($adIds); 
     Cache::put($key, $adIdsJson, 1); 
    } 
    return $adIds; 
} 

public function getAdsByStatus($statuses) { 
    $params = [\FacebookAds\Object\Fields\AbstractArchivableCrudObjectFields::EFFECTIVE_STATUS => $statuses]; 
    $adAccount = new AdAccount(self::ACT_PREPEND . $this->fbConfig['account_id']); 
    $cursor = $adAccount->getAds([], $params); 
    $response = $cursor->getResponse(); 
    $jsonString = $response->getBody(); 
    return json_decode($jsonString); 
} 
+1

哇,StackOverflow正在走下坡路。我在這個問題上花了50分的名氣,到目前爲止,它的得分是-1,而沒有評論*就是爲什麼。我開始瞭解別人的問題,比如https://hackernoon.com/the-decline-of-stack-overflow-7cb69faa575d – Ryan

回答

1

我根據活動廣告系列的資產獲取統計信息。我有119個廣告帳戶。這是我用於此目的的PHP代碼(任何意見,以改善它將不勝感激):

$fields = array(AdsInsightsFields::ACCOUNT_NAME,AdsInsightsFields::CAMPAIGN_ID, 
        AdsInsightsFields::CAMPAIGN_NAME, AdsInsightsFields::ADSET_ID, 
        AdsInsightsFields::ADSET_NAME,AdsInsightsFields::DATE_START, 
        AdsInsightsFields::DATE_STOP,AdsInsightsFields::REACH, 
        AdsInsightsFields::SPEND, AdsInsightsFields::IMPRESSIONS, 
        AdsInsightsFields::CLICKS, AdsInsightsFields::WEBSITE_CLICKS, 
        AdsInsightsFields::CALL_TO_ACTION_CLICKS,AdsInsightsFields::ACTIONS, 
        AdsInsightsFields::TOTAL_ACTIONS,AdsInsightsFields::CPC, 
        AdsInsightsFields::CPM,AdsInsightsFields::CPP, 
        AdsInsightsFields::CTR,AdsInsightsFields::OBJECTIVE,); 
    $params_c['date_preset'] = AdDatePresetValues::YESTERDAY; 
    $params_c['time_increment'] = 1; 
    $params_c['action_attribution_windows'] = array('1d_view', '28d_click'); 
    $params_c['effective_status'] = AdStatusValues::ACTIVE; 
    $params_c['level'] = AdsInsightsLevelValues::ADSET; 
    $params_c['filtering'] = [array("field"=>"campaign.delivery_info", 
            "operator"=>"IN", 
            "value"=>array("active"))]; 
    $params_c['fields']= $fields;  
    try{ 
     // Initialize a new Session and instanciate an Api object 
     Api::init(self::api_key, self::secret_token, self::extended_token)->getHttpClient()->setCaBundlePath($this->path_cert); 

     // The Api object is now available trough singleton 
     $api = Api::instance(); 
     $user = new \FacebookAds\Object\Business($business_id); 
     $user->read(array(BusinessFields::ID)); 

     //get all ad_account from Business 
     $accounts = $user->getAssignedAdAccounts(
         array(
        AdAccountFields::ID, 
       ), 
        array('limit'=>1000,) 
       );          

    } catch (FacebookAds\Exception\Exception $ex) { 
     return $ex->getMessage(); 
    } 

    if(isset($accounts) && ($accounts->count() > 0)):   
     do{ 

      $ad_account = $accounts->current();    
      $adset_insights = $ad_account->getInsights($fields,$params_c); 

      do { 
       $adset_insights->fetchAfter(); 
      } while ($adset_insights->getNext()); 

      $adsets = $adset_insights->getArrayCopy(true); 
    } 
    while ($accounts->current());  
    endif; 
+0

感謝分享。雖然你的代碼看起來可能會幫助某人,但我不知道你是否不明白我的問題的主要部分(涉及'configured_status'和'effective_status'之間的區別以及如何檢索所有正在積極花錢的廣告或者可以通過Facebook批准花錢而不需要我採取進一步行動)。 – Ryan

相關問題