从 Google 分析报告 API 过滤结果

Filtering results from Google Analytics Reporting API

我使用报告 API(版本 4)和 PHP 客户端库成功地从 Google Analytics 下载结果。但是我还没有想出如何正确过滤这些结果。

我知道这是如何通过 cURL 工作的,而不是通过客户端库。我查看了客户端库代码,有一个class方法:

apiclient-services/Google/Service/AnalyticsReporting/ReportRequest.php:
public function setMetricFilterClauses($metricFilterClauses)

我没有看到任何文档或相关 get 方法的任何用法:

public function getMetricFilterClauses()

是否有通过 PHP 客户端库使用过滤器的示例?

背景

Google API Client libraries are generated from the Google Discovery Service. And the PHP client library 为资源的每个 属性 生成一个 setPropertygetProperty

分析报告API V4

Analytics Reporting API V4 reference docs exhustively describe the API. The Developer Guide 给出了客户端库将生成的基础 JSON 示例:

POST https://analyticsreporting.googleapis.com/v4/reports:batchGet
{
  "reportRequests":
  [
    {
      "viewId": "XXXX",
      "dateRanges": [
        {"endDate": "2014-11-30", "startDate": "2014-11-01"}
      ],
      "metrics": [
        {"expression": "ga:pageviews"},
        {"expression": "ga:sessions"}
      ],
      "dimensions": [{"name": "ga:browser"}, {"name": "ga:country"}],
      "dimensionFilterClauses": [
        {
          "filters": [
            {
              "dimensionName": "ga:browser",
              "operator": "EXACT",
              "expressions": ["Chrome"]
            }
          ]
        }
      ]
    }
  ]
}

并且Samples page在Python、Java、PHP和Java脚本中给出了很多示例请求,这应该能让你很好地理解如何使用各个客户端库。但是你是对的,没有 PHP 使用过滤器的明确示例。

PHP 过滤器示例

下面是与上述请求相同的示例:

// Create the DateRange object.
$dateRange = new Google_Service_AnalyticsReporting_DateRange();
$dateRange->setStartDate("2014-11-01");
$dateRange->setEndDate("2014-11-30");

// Create the Metrics object.
$pageviews = new Google_Service_AnalyticsReporting_Metric();
$pageviews->setExpression("ga:pageviews");

$sessions = new Google_Service_AnalyticsReporting_Metric();
$sessions->setExpression("ga:sessions");

//Create the Dimensions object.
$browser = new Google_Service_AnalyticsReporting_Dimension();
$browser->setName("ga:browser");

$country = new Google_Service_AnalyticsReporting_Dimension();
$country->setName("ga:country");

// Create the DimensionFilter.
$dimensionFilter = new Google_Service_AnalyticsReporting_DimensionFilter();
$dimensionFilter->setDimensionName('ga:browser');
$dimensionFilter->setOperator('EXACT');
$dimensionFilter->setExpressions(array('Chrome'));

// Create the DimensionFilterClauses
$dimensionFilterClause = new Google_Service_AnalyticsReporting_DimensionFilterClause();
$dimensionFilterClause->setFilters(array($dimensionFilter));

// Create the ReportRequest object.
$request = new Google_Service_AnalyticsReporting_ReportRequest();
$request->setViewId("XXXX");
$request->setDateRanges($dateRange);
$request->setDimensions(array($browser, $country));
$request->setDimensionFilterClauses(array($dimensionFilterClause));
$request->setMetrics(array($pageviews, $sessions));

$body = new Google_Service_AnalyticsReporting_GetReportsRequest();
$body->setReportRequests( array( $request) );
return $analyticsreporting->reports->batchGet( $body );

正如您可能注意到的那样,我从未使用过 $object->getProperty()。基本上它会做的就是给我它的当前值。调用 API 时,您只需要 $object->setProperty($value); 因此我向您介绍了生成客户端库的背景。

结论

Analytics Reporting API 本身很复杂,并且有许多客户端库语言。在每种可能的客户端库语言中,并不总是可以给出 API 的每种可能用法的示例。这就是为什么有必要了解如何查看参考文档并了解如何从所描述的结构中生成客户端库。

上面脚本中的 DimensionFilter() class 存在问题,我收到未定义的错误消息,但我已将其更改为 Google_Service_AnalyticsReporting_DimensionFilter() class现在它正在工作希望对某人有所帮助。