使用Google Analytics Reporting API时遇dimensionName等字段错误求助
解决Google Analytics Reporting API的JSON格式无效错误
嘿,我一眼就发现问题所在了!你在维度过滤器的配置上搞混了DimensionFilter和DimensionFilterClause的层级关系,还误用了operator的设置位置,这才导致了JSON格式错误。
错误原因拆解
从API返回的错误信息能明确看出几个核心问题:
- 你直接把
DimensionFilter对象传给了setDimensionFilterClauses,但这个方法需要接收的是DimensionFilterClause对象的数组,所以API找不到dimensionName和expressions这些属于DimensionFilter的字段 - 你给
DimensionFilterClause设置了BEGINS_WITH作为operator,但这个对象的operator是用来组合多个过滤器的逻辑运算符(比如AND/OR),而BEGINS_WITH是单个维度过滤器的匹配规则,应该放在DimensionFilter上
修正后的代码
下面是调整好的完整代码,重点修改了过滤器部分的逻辑:
$metrics = [ 'pageviews', ]; // Create the DateRange object. $dateRange = new Google_Service_AnalyticsReporting_DateRange(); $dateRange->setStartDate("2022-12-01"); $dateRange->setEndDate("2023-01-19"); // Create the Metrics object. $dataMetrics = []; foreach ($metrics as $metric) { $sessions = new Google_Service_AnalyticsReporting_Metric(); $sessions->setExpression("ga:" . $metric); $sessions->setAlias($metric); $dataMetrics[] = $sessions; } // 修正后的过滤器配置 $dimensionFilter = new Google_Service_AnalyticsReporting_DimensionFilter(); $dimensionFilter->setDimensionName("ga:pagePath"); // 把匹配规则BEGINS_WITH放在DimensionFilter上 $dimensionFilter->setOperator('BEGINS_WITH'); $dimensionFilter->setExpressions(['/u/joao?preview=614']); $dimensionFilterClause = new Google_Service_AnalyticsReporting_DimensionFilterClause; // DimensionFilterClause的operator是逻辑组合符,单个过滤器时可省略或设为AND $dimensionFilterClause->setFilters([$dimensionFilter]); $dimensionFilterClause->setOperator('AND'); //Create the Dimensions object. $pageUrl = new Google_Service_AnalyticsReporting_Dimension(); $pageUrl->setName("ga:pagePath"); // Create the ReportRequest object. $request = new Google_Service_AnalyticsReporting_ReportRequest(); $request->setViewId("ga:203877"); //test rise $request->setMetrics($dataMetrics); // METRIC $request->setDateRanges($dateRange); $request->setDimensions([$pageUrl]); // 这里要传DimensionFilterClause对象,而不是DimensionFilter $request->setDimensionFilterClauses([$dimensionFilterClause]); $body = new Google_Service_AnalyticsReporting_GetReportsRequest(); $body->setReportRequests([$request]); return ($this->analytics->reports->batchGet($body)->getReports());
关键修正点
- 确保
DimensionFilter的operator设置正确的匹配规则(BEGINS_WITH) - 将
DimensionFilter放入DimensionFilterClause的filters数组中 - 给
request的dimensionFilterClauses传入DimensionFilterClause对象,而非直接传DimensionFilter
这样调整后,API就能正确识别你的过滤器配置,不会再返回JSON格式错误啦!
内容的提问来源于stack exchange,提问作者Crazy
相关产品推荐
相关产品推荐

