Как получить все мои активные объявления на Facebook?

Я создаю информационную панель для себя, которая помогает мне отслеживать рекламу на Facebook, которую я показываю.

То, что я не смог понять, это:

Как я могу получить массив идентификаторов объявлений для всех активных объявлений или же может ли быть активным после того, как с моей стороны не будет предпринято никаких действий?

Другими словами, я хочу, чтобы все объявления, для которых я установил Активную, и которые существуют в активных наборах объявлений и кампаний (и, следовательно, эти объявления сейчас активны) … плюс все объявления, которые от мой перспектива активна, но Facebook установил другой статус, например, ожидает рассмотрения (и вскоре вернется к активному).

У меня есть код ниже, но проблема в том, что он также случайно включает ожидающие объявления, которые — после рассмотрения и одобрения Facebook — будут неактивными, а не активными (потому что я их так настроил). И я НЕ хочу, чтобы этот тип рекламы был включен в мой отчет.

Мой отчет должен показывать только те, где я активно трачу деньги или могу потратить деньги, как только FB одобрит их.

Я думаю, что я понимаю разницу между configured_status а также effective_status в AbstractArchivableCrudObjectFields, но я не знаю, достаточно ли этого, чтобы помочь мне, потому что у меня много объявлений с активным, которые находятся в пределах неактивных наборов объявлений, и я не хочу видеть их в моем отчете.

Любые рекомендации?

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);
}

7

Решение

Я получаю статистику на основе активов для моих активных кампаний. У меня 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;
1

Другие решения

Если вы включите adset{end_time} поле в запросе для объявления, вы можете предположить, что объявление на самом деле не работает, если end_time был в прошлом. Вот как мы получаем базовый список объявлений для запроса.

Следующий шаг, который мы предпринимаем (который, к сожалению, не поможет вам, но может помочь другим), — это создание пакета простых запросов (по одному на объявление), чтобы проверить, есть ли какие-либо данные для анализа за этот день. Если ответ представляет собой пустой массив данных, мы можем удалить этот идентификатор из списка объявлений.

После того, как мы сократили размер списка объявлений этими двумя шагами, мы можем отправлять запросы на запуск всех наших отчетов о разбивке. Этот метод почти сократил наши запросы API в два раза.

Я еще не нашел способ сделать запрос «дай мне все объявления, которые наверняка работают в этот день» за один шаг.

Редактировать:
Я просто нашел лучший способ сделать это ….

curl -G \
-d 'access_token=<ACCESS_TOKEN>' \
-d 'level=campaign' \
-d 'filtering=[{field:"ad.impressions",operator:"GREATER_THAN",value:0}]' \
'https://graph.facebook.com/v2.7/act_<ACCOUNT_ID>/insights'
0

По вопросам рекламы [email protected]