如何通过Google Analytics API按URL过滤查询指定页面用户数据
解决方案
你需要给报表请求添加维度过滤器,即可实现和GA前端页面搜索一致的过滤效果,仅返回匹配指定页面路径的数据,不需要在返回结果里再做二次筛选。
具体修改步骤
- 在创建
ReportRequest对象前,添加维度过滤器配置代码 - 将过滤器绑定到报表请求中即可
完整修改后的代码
你只需要在原有代码的维度定义之后、报表请求定义之前,增加过滤器部分,完整示例如下:
// Create and configure a new client object $client = new Google_Client(); $client->setApplicationName("Analytics"); $client->setAuthConfig(__ROOT__ . '/analytics/client_secrets.json'); $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']); $analytics = new Google_Service_AnalyticsReporting($client); // Create DateRange objects. $july = new Google_Service_AnalyticsReporting_DateRange(); $july->setStartDate("2021-07-01"); $july->setEndDate("2021-07-31"); $august = new Google_Service_AnalyticsReporting_DateRange(); $august->setStartDate("2021-08-01"); $august->setEndDate("2021-08-31"); // Create the Metrics object. $metric = new Google_Service_AnalyticsReporting_Metric(); $metric->setExpression("ga:users"); $metric->setAlias("users"); //Create the Dimensions object. $dimension = new Google_Service_AnalyticsReporting_Dimension(); $dimension->setName("ga:pagePath"); // --------------- 新增过滤器代码开始 --------------- // 创建页面路径过滤器 $pageFilter = new Google_Service_AnalyticsReporting_DimensionFilter(); $pageFilter->setDimensionName('ga:pagePath'); // 如果是精确匹配完整路径用EXACT,和前端搜索一致的包含匹配用PARTIAL $pageFilter->setOperator('PARTIAL'); $pageFilter->setExpressions(['my-page.php']); // 不区分大小写的话可以加下面这行 $pageFilter->setCaseSensitive(false); // 组装过滤器子句 $filterClause = new Google_Service_AnalyticsReporting_DimensionFilterClause(); $filterClause->setFilters([$pageFilter]); // --------------- 新增过滤器代码结束 --------------- // Create the ReportRequest object. $request = new Google_Service_AnalyticsReporting_ReportRequest(); $request->setViewId("XXXX"); $request->setDateRanges(array($july, $august)); $request->setDimensions(array($dimension)); $request->setMetrics(array($metric)); // 把过滤器绑定到请求上 $request->setDimensionFilterClauses([$filterClause]); $body = new Google_Service_AnalyticsReporting_GetReportsRequest(); $body->setReportRequests(array($request)); $reports = $analytics->reports->batchGet($body); // 后续输出代码和原有一致即可 for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) { $report = $reports[ $reportIndex ]; $header = $report->getColumnHeader(); $dimensionHeaders = $header->getDimensions(); $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries(); $rows = $report->getData()->getRows(); for ( $rowIndex = 0; $rowIndex < count($rows); $rowIndex++) { $row = $rows[ $rowIndex ]; $dimensions = $row->getDimensions(); $metrics = $row->getMetrics(); for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) { print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "<br>"); } for ($j = 0; $j < count($metrics); $j++) { $values = $metrics[$j]->getValues(); for ($k = 0; $k < count($values); $k++) { $entry = $metricHeaders[$k]; print($entry->getName() . ": " . $values[$k] . "<br>"); } } } }
可选运算符说明
你可以根据实际需求更换过滤器的运算符:
PARTIAL:路径包含指定字符串即可,和GA前端搜索框的效果完全一致EXACT:必须和指定路径完全匹配REGEXP:支持正则表达式匹配,适合更复杂的路径筛选规则
内容的提问来源于stack exchange,提问作者dokgu
相关产品推荐
相关产品推荐

