检索帐户中所有活动广告的 Facebook 洞察?
Retrieve Facebook Insights for all active ads within an account?
我的代码允许我检索特定日期之间的所有广告,但这包括不再有效的广告。
我只想显示 ACTIVE 广告的数据分析。 我如何检索帐户中所有有效 广告的 Facebook 洞察?
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 Ads SDK 2.8("facebook/php-ads-sdk": "2.8.*"
in composer.json
)。 documentation is here.
您应该在 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 字段
此外,我们最近推出了基于场景的代码生成向导工具。您可以浏览 "Create Ad Report" 向导,它会为您生成代码。 (虽然目前只支持Java)
该工具的URL为:(替换自己的app ID)
https://developers.facebook.com/apps/your_app_id/marketing-api/quickstart/
这行得通,您实际上是在请求所有有效的广告,然后提供 insights
作为 'nested' 字段列表。
将 123456 替换为您的广告帐户(但保留需要的 'act_'
)
act_123456/ads?fields=effective_status,name,insights{total_action_value,total_actions,actions},adset_id,campaign_id&filtering=[{'field':'effective_status','operator':'IN','value':['ACTIVE']}]
这也适用于 /campaigns
和 /adsets
这是我想出的唯一方法。我无法在根级别对 /act_123456/insights
进行任何过滤。
对于无法使过滤适用于 /act_123456/insights 的任何人,当您使用 'level' = 'ad' 时,您需要进行以下过滤:
{'field':'ad.effective_status','operator':'IN','value':['ACTIVE', 'PAUSED', 'DELETED', 'ARCHIVED']}
现在它确实为我应用了过滤!
我的代码允许我检索特定日期之间的所有广告,但这包括不再有效的广告。
我只想显示 ACTIVE 广告的数据分析。 我如何检索帐户中所有有效 广告的 Facebook 洞察?
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 Ads SDK 2.8("facebook/php-ads-sdk": "2.8.*"
in composer.json
)。 documentation is here.
您应该在 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 字段
此外,我们最近推出了基于场景的代码生成向导工具。您可以浏览 "Create Ad Report" 向导,它会为您生成代码。 (虽然目前只支持Java)
该工具的URL为:(替换自己的app ID) https://developers.facebook.com/apps/your_app_id/marketing-api/quickstart/
这行得通,您实际上是在请求所有有效的广告,然后提供 insights
作为 'nested' 字段列表。
将 123456 替换为您的广告帐户(但保留需要的 'act_'
)
act_123456/ads?fields=effective_status,name,insights{total_action_value,total_actions,actions},adset_id,campaign_id&filtering=[{'field':'effective_status','operator':'IN','value':['ACTIVE']}]
这也适用于 /campaigns
和 /adsets
这是我想出的唯一方法。我无法在根级别对 /act_123456/insights
进行任何过滤。
对于无法使过滤适用于 /act_123456/insights 的任何人,当您使用 'level' = 'ad' 时,您需要进行以下过滤:
{'field':'ad.effective_status','operator':'IN','value':['ACTIVE', 'PAUSED', 'DELETED', 'ARCHIVED']}
现在它确实为我应用了过滤!