使用facebook/php-ads-sdk 2.11获取FB Insights时ad_id等字段为空
问题原因与解决方案
你遇到的ad_name、ad_id等字段为空的问题,核心原因很明确:你设置的Insights查询级别是campaign,但请求的却是ad/adset层级的字段。
Facebook Insights API的层级规则是严格对应的:当你选择在campaign级别聚合数据时,系统只会返回属于campaign层级的字段(比如campaign_id、campaign_name),以及该层级下的聚合指标(spend、impressions等)。而ad_id、adset_name这类属于更细粒度层级的字段,在campaign层级下没有统一值(一个campaign包含多个adset和ad),所以API会返回空值。
解决方法有两种,根据你的需求选择:
- 调整查询层级到对应粒度
如果你确实需要获取ad或adset的字段,把level参数改成adset或者ad,这样API就会返回对应层级的所有字段:
$account = new AdAccount('act_' . $this->account_id); $fields = array( 'spend', 'clicks', 'impressions', 'campaign_name', 'campaign_id', 'inline_link_clicks', 'actions', 'ad_name', 'ad_id', 'adset_id', 'adset_name', 'account_id', 'account_name', ); $param = $this->filters; // 根据需要选择'adset'或'ad'层级 $param['level'] = 'adset'; $cursor = $account->getInsights($fields, $param);
- 移除不匹配层级的字段
如果你的分析只需要campaign层级的数据,直接从$fields数组里删掉ad/adset相关的字段即可,避免无效请求:
$fields = array( 'spend', 'clicks', 'impressions', 'campaign_name', 'campaign_id', 'inline_link_clicks', 'actions', 'account_id', 'account_name', );
额外说明
如果你的需求是在campaign层级下同时查看每个ad/adset的明细数据,那Facebook API无法直接返回这种混合层级的结果。你需要先查询ad或adset层级的全量数据,然后在自己的代码中根据campaign_id进行分组聚合。
另外,虽然你使用的是2.11版本的php-ads-sdk(这个版本确实比较老旧),但Insights API的层级对应逻辑是长期一致的,所以不需要担心是版本兼容性问题。
内容的提问来源于stack exchange,提问作者deric
相关产品推荐
相关产品推荐

