0

我的代码允许我检索特定日期之间的所有广告,但这包括不再有效的广告。检索帐户中所有有效广告的Facebook Insights?

我想仅显示ACTIVE广告的见解。 如何在帐户中检索所有有效广告的Facebook Insights?

public function getInsights($levelType, $id, $aggLevel, $start, $end) { 
    if ($levelType) { 
     if ($id == null) { 
      abort(400, 'You must provide the ID for the object you want to retrieve.'); 
     } 
    } else { 
     $levelType = \AdAccount::class; 
     $id = ACT_PREPEND . $this->fbConfig['account_id']; 
     $aggLevel = AdsInsightsLevelValues::CAMPAIGN; 
    } 
    $variableClassWithNamespace = '\FacebookAds\Object\\' . $levelType; //TODO: avoid hard-coding class paths as strings 
    $level = new $variableClassWithNamespace($id); 
    $fields = [ 
     InsightsFields::SPEND, 
     InsightsFields::CAMPAIGN_ID, 
     InsightsFields::CAMPAIGN_NAME, 
     InsightsFields::ADSET_ID, 
     InsightsFields::ADSET_NAME, 
     InsightsFields::AD_ID, 
     InsightsFields::AD_NAME, 
     InsightsFields::UNIQUE_IMPRESSIONS, 
     InsightsFields::INLINE_LINK_CLICKS, 
     InsightsFields::INLINE_LINK_CLICK_CTR, 
     InsightsFields::COST_PER_INLINE_LINK_CLICK, 
     InsightsFields::ACTIONS, 
     InsightsFields::COST_PER_ACTION_TYPE, 
     InsightsFields::CPM, 
    ]; 
    $params = [ 
     AdReportRunFields::LEVEL => $aggLevel, 
    ]; 
    if ($start) { 
     $params[AdReportRunFields::TIME_RANGE]['since'] = $start; 
     if (!$end) { 
      $params[AdReportRunFields::TIME_RANGE]['until'] = (new \DateTime("+2 year"))->format('Y-m-d'); 
     } 
    } 
    if ($end) { 
     $params[AdReportRunFields::TIME_RANGE]['until'] = $end; 
     if (!$start) { 
      $params[AdReportRunFields::TIME_RANGE]['since'] = (new \DateTime("-1 year"))->format('Y-m-d'); 
     } 
    } 
    if (!$start && !$end) { 
     $params[AdReportRunFields::DATE_PRESET] = InsightsPresets::LIFETIME; 
    } 
    $insights = $level->getInsights($fields, $params); 
    return $insights->getResponse()->getBody(); 
} 

我使用Facebook的PHP广告SDK 2.8(在composer.json"facebook/php-ads-sdk": "2.8.*")。 documentation is here

回答

1

您应该使用对delivery_info的过滤来激活。在您的http请求中看起来如下所示

filtering:[{"field":"campaign.delivery_info","operator":"IN","value":["active"]}] 

请参阅文档中的过滤部分。

https://developers.facebook.com/docs/marketing-api/insights/parameters/v2.8

filtering 
list<Filter Object> 
Default value: Array 
Filters on the report data. This parameter is an array of filter objects. 
field 
string 
Required 
operator 
enum {EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, IN_RANGE, NOT_IN_RANGE, CONTAIN, NOT_CONTAIN, IN, NOT_IN, STARTS_WITH, ANY, ALL, AFTER, BEFORE, NONE} 
Required 
value 
string 

如果你想看到的代码,请在PHP SDK检查这个过滤领域。这只是镜像实际API领域

https://github.com/facebook/facebook-php-ads-sdk/blob/53bee21251a9d898591708b96d1afa9e13516e3d/src/FacebookAds/Object/Campaign.php#L220

此外,我们最近推出了基于场景的代码生成向导工具。您可以浏览“创建广告报告”向导,它会为您生成代码。 (虽然只支持Java现在)

工具的网址是:(更换自己的应用程序ID) https://developers.facebook.com/apps/your_app_id/marketing-api/quickstart/

+0

我很乐意接受您的回答,但我一直无法找到有关'filtering'或'delivery_info'的文档。例如。 https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=site:developers.facebook.com+delivery_info&*的结果中没有一项指定了这种方式的效果。你可以发送一个链接或一个更具体的使用过滤器的' - > getInsights()'调用的工作示例吗? – Ryan

+0

@Ryan,我编辑了我的答案,希望能给你一些背景。 –

+0

该页面的顶部显示“此文档是指在Marketing API v2.7之后删除的功能。”也许这个功能不再被支持。无论如何,我会接受你的回答,因为我很欣赏你的努力。 – Ryan

0

这工作,你实际上是要求所有现用的广告,然后提供insights作为“嵌套”字段列表。

替换123456与您的广告帐户(但保留其所需的'act_'

act_123456 /广告?场= effective_status,名称,见解{total_action_value,total_actions,行动},adset_id,CAMPAIGN_ID &过滤= [{ '字段': 'effective_status', '操作符': 'IN', '值':[ 'ACTIVE']}]

这也适用于/campaigns/adsets

这是我想出如何去做的唯一方法。我无法获得任何筛选以在根级别为/act_123456/insights工作。

相关问题