如何使用PHP在Google Analytics Core报告API V4上设置维度别名

时间:2016-07-28 14:49:37

标签: php pagination google-analytics-api

我正致力于使用Google Analytics Core Reporting API V4将Google Analytics Reporting API v4集成到我的网站

我已设置报告api以返回最多10个结果。我的问题是,我无法找到下一个或前一个10个结果,因为它总是先返回10.

有没有办法通过Google Analytics Core Reporting API v4获得下一个和/或前10个结果?

我的PHP代码如下:

// Create the ReportRequest object.   

$request = new Google_Service_AnalyticsReporting_ReportRequest();  
$request->setViewId($VIEW_ID);   
$request->setDateRanges($dateRange); 
$request->setPageSize(10);  
//===========================================================      
//  HOW DO I SET TO SHOW DIFFERENT PAGE THAN A FIRST PAGE     
//  HOW DO I SHOW RESULTS 20-30   
//===========================================================

//$request->setPageToken($page_token); 

$request->setDimensions($dimensions);   
$request->setMetrics($metrics);  
$request->setDimensionFilterClauses($dimensionFilterClause);
$request->setMetricFilterClauses(array($metricFilterClause));
$request->setOrderBys($ordering); 
$body = new Google_Service_AnalyticsReporting_GetReportsRequest();  
$body->setReportRequests( array( $request) );   
return  $analytics->reports->batchGet( $body );

我发现有一个函数setPageToken()和函数getPageToken()我假设必须对它做一些事情。

有人可以解释如何做到这一点吗?这个例子非常有用。谢谢。

1 个答案:

答案 0 :(得分:2)

客户端库

PHP client libraries是根据reference docs中找到的资源说明生成的。任何Object()都将成为PHP客户端库中的一个类。例如,Object(Metric]将变为Google_Service_AnalyticsReporting_Metric。重要的是能够查看资源描述并理解生成的类的结构,除此之外,使用生成的源来指导您如何构建类。

因此,在您的问题标题中,您会问:“如何设置维度别名?”如果您查看资源说明和生成的来源,您会发现只有Metric类具有财产alias。这是因为Metric对象需要expression字段,而不是name字段。实际上,您可以提供ga:sessions * ga:users等数学表达式,但这样的字符串可能会令人困惑,因此您可能希望为alias设置expression

API限制和配额

您一次请求10行并希望通过它们进行分页。我强烈建议您尽最大努力最有效地使用API quota。 API是一种共享资源,如果您使用它效率低下,它将不会带您到目前为止。话虽如此,我将在下面描述如何进行分页。

分页PHP

让我们假设您知道如何使用auth和所有内容成功完成请求,因为您仔细阅读了Hello Analytics PHP指南:

  // Create the ReportRequest object.
  $request = new Google_Service_AnalyticsReporting_ReportRequest();
  $request->setViewId($VIEW_ID);
  $request->setDateRanges($dateRange);
  $request->setMetrics($metrics);
  $request->setDimensions($dimensions);

  $body = new Google_Service_AnalyticsReporting_GetReportsRequest();
  $body->setReportRequests( array( $request) );
  $response = $analytics->reports->batchGet( $body );

太棒了,干得好。困难的部分在你身后。你是一个聪明的程序员,所以你要坚持$response$request,因为你怀疑它们可能很重要。所以你继续解析响应:

  for ( $reportIndex = 0; $reportIndex < count( $response ); $reportIndex++ ) {
    $report = $response[ $reportIndex ];
    $header = $report->getColumnHeader();
    $dimensionHeaders = $header->getDimensions();
    $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries();
    $rows = $report->getData()->getRows();
    $nextPageToken = $report->getNextPageToken();
    ...
    }

您从该报告中获得了一些不错的信息,一些维度和指标看起来像您的新电子商务网站表现良好。实际上,您需要从此报告中获取更多数据,因为在获得计划Q3策略所需的所有行之前,您已经点击了pageSize。没关系,你是一个聪明的程序员,你坚持$request$nextPageToken。你确切地知道要做什么;您将使用$nextPageToken

再次调用API
  $request->setPageToken($nextPageToken);

  $body = new Google_Service_AnalyticsReporting_GetReportsRequest();
  $body->setReportRequests( array( $request) );
  $response = $analytics->reports->batchGet( $body );

因此,您刚刚通过多个页面进行分页。冲洗并重复洗涤。 对于那些想要JSON等效的人,你可以去:

JSON分页示例

原始请求:

{
  "reportRequests": 
  [
    {
      "viewId": "XXXX",
      "metrics": 
      [
        {
          "expression": "ga:users"
        }
      ],
      "dimensions": 
      [
        {
          "name": "ga:pagepath"
        },
        {
          "name": "ga:browser"
        },
        {
          "name": "ga:country"
        }
      ]
    }
  ]
}

响应:

{
 "reports": [
  {
   "columnHeader": {
    "dimensions": [
     "ga:pagepath",
     "ga:browser",
     "ga:country"
    ],
    "metricHeader": {
     "metricHeaderEntries": [
      {
       "name": "ga:users",
       "type": "INTEGER"
      }
     ]
    }
   },
   "data": {
    "rows": [
    ...

    ],
    "totals": [
     {
      "values": [
       "3739"
      ]
     }
    ],
    "rowCount": 1109,
    "minimums": [
     {
      "values": [
       "1"
      ]
     }
    ],
    "maximums": [
     {
      "values": [
       "359"
      ]
     }
    ]
   },
   "nextPageToken": "1000"
  }
 ]
}

第二次请求:

{
  "reportRequests": 
  [
    {
      "viewId": "XXXX",
      "metrics": 
      [
        {
          "expression": "ga:users"
        }
      ],
      "dimensions": 
      [
        {
          "name": "ga:pagepath"
        },
        {
          "name": "ga:browser"
        },
        {
          "name": "ga:country"
        }
      ],
      "pageToken": "1000"
    }
  ]
}