如何通过PHP SDK直接获取Facebook广告账户指定日期范围总花费?
直接获取Facebook广告账户指定日期总花费的PHP SDK实现
当然有更高效的解决方案!你完全不用再逐个拉取广告系列数据手动累加——Facebook Marketing API本身就支持直接在广告账户层级按指定日期范围聚合获取总花费,用PHP SDK实现起来非常简洁。
核心思路
使用/act_{AD_ACCOUNT_ID}/insights端点,通过指定level=account来告诉API直接返回广告账户层级的汇总数据,同时搭配日期范围参数,就能一步拿到你需要的当月总花费。
PHP SDK代码示例
下面是完整的实现代码,你可以直接适配到你的项目中:
use Facebook\Facebook; use Facebook\Exceptions\FacebookResponseException; use Facebook\Exceptions\FacebookSDKException; // 初始化Facebook SDK(确保你已经配置好应用凭证) $fb = new Facebook([ 'app_id' => 'YOUR_APP_ID', 'app_secret' => 'YOUR_APP_SECRET', 'default_graph_version' => 'v18.0', // 建议使用最新稳定版本 ]); // 设置用户访问令牌(需要具备ads_read权限) $accessToken = 'YOUR_USER_ACCESS_TOKEN'; $fb->setDefaultAccessToken($accessToken); // 广告账户ID,格式为act_XXXXXXX $adAccountId = 'act_123456789'; // 定义日期范围:这里以当月为例,你也可以手动指定start_date和end_date $currentMonthStart = date('Y-m-01'); $currentMonthEnd = date('Y-m-t'); try { // 请求广告账户层级的insights数据 $response = $fb->get( "/{$adAccountId}/insights", [ 'level' => 'account', // 指定聚合层级为账户 'time_range' => json_encode([ 'since' => $currentMonthStart, 'until' => $currentMonthEnd ]), 'fields' => 'spend', // 只请求花费字段,减少数据传输 'limit' => 1 // 只需要一条汇总数据 ] ); $insightsData = $response->getGraphEdge()->getArrayCopy(); // 提取总花费(注意spend返回的是字符串,可转为浮点数) if (!empty($insightsData)) { $totalSpend = (float) $insightsData[0]['spend']; echo "当月总花费:{$totalSpend}"; } else { echo "该时间段内无花费数据"; } } catch (FacebookResponseException $e) { echo 'Graph API请求出错: ' . $e->getMessage(); } catch (FacebookSDKException $e) { echo 'Facebook SDK出错: ' . $e->getMessage(); }
关键参数说明
level: 设置为account是核心,这会让API直接返回整个广告账户的汇总数据,而不是拆分到广告系列/广告组层级。time_range: 用JSON格式指定日期范围,since是开始日期,until是结束日期;你也可以用date_preset参数,比如date_preset='this_month'来自动获取当月范围,代码会更简洁。fields: 只请求spend字段可以大幅减少API返回的数据量,提升请求速度。
注意事项
- 确保你的访问令牌具备
ads_read权限,否则会返回权限错误。 - 建议使用最新版本的Facebook PHP SDK,避免因版本兼容问题导致的异常。
spend字段返回的是字符串类型,需要转换为数值类型进行后续计算。
内容的提问来源于stack exchange,提问作者Kushal Jain
相关产品推荐
相关产品推荐

