【问题标题】:Filtering results from Google Analytics Reporting API过滤来自 Google Analytics Reporting API 的结果
【发布时间】:2016-07-07 12:12:03
【问题描述】:

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

我看到这将如何通过 cURL 工作,而不是通过客户端库。看了下客户端库代码,有一个类方法:

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

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

public function getMetricFilterClauses()

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

【问题讨论】:

    标签: google-analytics google-analytics-api


    【解决方案1】:

    背景

    Google API Client libraries 是从Google Discovery Service 生成的。 PHP client library 为资源的每个属性生成 setPropertygetProperty

    分析报告 API V4

    Analytics Reporting API V4 reference docs 详尽地描述了 API。 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 和 JavaScript 请求示例,这应该让您很好地了解如何使用各个客户端库。但你是对的,没有使用过滤器的 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 的每种可能用法的示例。这就是为什么有必要了解如何查看参考文档并了解如何从所描述的结构生成客户端库。

    【讨论】:

    • 以防万一有人想知道 Google_Service_AnalyticsReporting_DimensionFilterClause 上的“EXACT”字符串 $dimensionFilter->setOperator('EXACT');这是一个可能的选项列表:developers.google.com/analytics/devguides/reporting/core/v4/… 我有一个 REALLY.HARD.TIME 找到这个
    • 非常感谢@DenisUyeda 这个 URL。确实很难找到!
    【解决方案2】:

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

    【讨论】:

    • 您应该使用评论来评论答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多