2017-08-13 54 views
1

好日子,如何使用PHP

我真的想獲得來自谷歌Analytics(分析)的前10000個數據後獲得下一組數據使用的nextPageToken在谷歌Analytics(分析)API。經過進一步研究後,有一件事叫做nextpagetoken,這是我得到下一組數據的麻煩。我已經嘗試過,但一直在獲取錯誤的錯誤或沒有數據。以前有人有同樣的問題嗎?請幫助我(示例代碼非常感謝)。非常感謝。

這裏是我的代碼:

<?php 
    $analytics = initializeAnalytics();  
    $response = getReport($analytics); 
    printResults($response); 

    function initializeAnalytics() 
    { 
     $KEY_FILE_LOCATION = __DIR__ . 'MyFileDirectory'; 
     // Create and configure a new client object. 
     $client = new Google_Client(); 
     $client->setApplicationName("Hello Analytics Reporting"); 
     $client->setAuthConfig($KEY_FILE_LOCATION); 
     $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']); 
     $analytics = new Google_Service_AnalyticsReporting($client); 
     return $analytics; 
    } 

    function getReport($analytics) { 
     // Replace with your view ID, for example XXXX. 
     $VIEW_ID = "MyViewId"; 

     // Create the DateRange object. 
     $dateRange = new Google_Service_AnalyticsReporting_DateRange(); 
     $dateRange->setStartDate("2017-04-01"); 
     $dateRange->setEndDate("2017-06-19"); 

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

     //Create the Dimensions object. 
     $clientId = new Google_Service_AnalyticsReporting_Dimension(); 
     $clientId->setName("ga:dimension4"); 
     $sessionId = new Google_Service_AnalyticsReporting_Dimension(); 
     $sessionId->setName("ga:dimension5"); 
     $eventLabel = new Google_Service_AnalyticsReporting_Dimension(); 
     $eventLabel->setName("ga:eventLabel"); 
     $timestamp = new Google_Service_AnalyticsReporting_Dimension(); 
     $timestamp->setName("ga:dimension3"); 

     // Create the ReportRequest object. 
     $request = new Google_Service_AnalyticsReporting_ReportRequest(); 
     $request->setViewId($VIEW_ID); 
     //set number of rows 
     $request->setPageSize(10000); 
     $request->setDateRanges($dateRange); 
     $request->setMetrics(array($totalEvents)); 
     $request->setDimensions(array($clientId,$sessionId,$eventLabel, 
     $timestamp)); 
     $body = new Google_Service_AnalyticsReporting_GetReportsRequest(); 
     $body->setReportRequests(array($request)); 
     return $analytics->reports->batchGet($body); 
    } 

    function printResults($reports) { 
     for ($reportIndex = 0; $reportIndex < count($reports); $reportIndex++) 
     { 
      $report = $reports[ $reportIndex ]; 
      $header = $report->getColumnHeader(); 
      $dimensionHeaders = $header->getDimensions(); 
      $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries(); 
      $rows = $report->getData()->getRows(); 
      echo '<table border="1">'; 

      for ($rowIndex = 0; $rowIndex < count($rows); $rowIndex++) { 
       $row = $rows[ $rowIndex ]; 
       $dimensions = $row->getDimensions(); 
       $metrics = $row->getMetrics(); 
       echo '<tr>';  

       for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) 
       { 
        echo '<td>' . ": " . $dimensions[$i] . "\n" .'</td>'; 
       } 
       for ($j = 0; $j < count($metrics); $j++) { 
        $values = $metrics[$j]->getValues(); 
        for ($k = 0; $k < count($values); $k++) { 
         $entry = $metricHeaders[$k]; 
         echo '<td>' . ": " . $values[$k] . "\n" .'</td>' ; 
        } 
        echo '</tr>'; 
       } 
      } 
      echo '</table>'; 
     } 
    } 
?> 

回答

1

你必須得到每個響應nextPageToken值,設置爲每一個請求:

$client = new \Google_Client(); 
/* ... */ 
$analytics = new \Google_Service_AnalyticsReporting($client); 
$request = new \Google_Service_AnalyticsReporting_ReportRequest(); 
$request->setViewId($view); 
$request->setMetrics($metrics); 
$request->setDateRanges($dateRange); 
$request->setPageSize(10000); 
/* ... */ 
$body = new \Google_Service_AnalyticsReporting_GetReportsRequest(); 
$body->setReportRequests(array($request)); 
do { 
    $response = $analytics->reports->batchGet($body, $params); 
    /* ... 
    Processing $response 
    ... */ 
    $request->setPageToken($response[0]->getNextPageToken()); 
} while ($response[0]->getNextPageToken() != ''); 
+0

我試過上面提供的代碼,但我得到了空白屏幕。我可以澄清一下,我應該在哪一行中插入你提供的代碼?道歉,新手在這裏。 – Ben

+0

你有沒有得到它的工作? – Norgul