如何使用php从google analytics api获取下一个10000个数据?

如何使用php从google analytics api获取下一个10000个数据?,php,google-analytics,google-api,google-analytics-api,google-api-php-client,Php,Google Analytics,Google Api,Google Analytics Api,Google Api Php Client,你好 有没有办法从google analytics API获取下一个10000个数据? 我想在得到第一个10000个数据之后再得到下一组数据。有没有办法做到这一点?我正在使用google analytics api php客户端库 这是我的密码: <?php $analytics = initializeAnalytics(); $response = getReport($analytics); printResults($response); function

你好

有没有办法从google analytics API获取下一个10000个数据? 我想在得到第一个10000个数据之后再得到下一组数据。有没有办法做到这一点?我正在使用google analytics api php客户端库

这是我的密码:

 <?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 );
}
}
?>

这将获得前10页的数据。我把它限制在10个,以防止它吃掉我的配额。如果你删除它,它将继续抓走所有的行,吃掉你的配额

注意:只有当您有一份报告时,这才有效。如果您有多个报表,那么您将不得不做一些花哨的工作,将正确的pageToken应用于每个报表,并删除已完成的报表。此时,除了返回的报告在报告数组中的位置之外,没有报告Id或方法来匹配发送到报告的内容

$service = new Google_Service_AnalyticsReporting($client); 

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

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

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

// Create the ReportRequest object.
$request = new Google_Service_AnalyticsReporting_ReportRequest();
$request->setViewId("81692014");
$request->setPageSize("10000");  
$request->setDateRanges($dateRange);
$request->setDimensions(array($date,$pagePath));
$request->setMetrics(array($sessions));
$request->setMetrics(array($sessions));

$body = new Google_Service_AnalyticsReporting_GetReportsRequest();
$body->setReportRequests( array( $request) );
$data =  $service->reports->batchGet( $body );


// Remove count if you really want everything.
$cnt = 0; 
while ($data->reports[0]->nextPageToken > 0 && $cnt < 10) {
    // There are more rows for this report.
    $body->reportRequests[0]->setPageToken($data->reports[0]->nextPageToken);
    $data =  $service->reports->batchGet( $body );
    $cnt++;
    }
$service=新谷歌服务分析报告($client);
//创建DateRange对象。
$dateRange=新的Google_服务_分析报告_dateRange();
$dateRange->setStartDate(“2016-01-01”);
$dateRange->setEndDate(“2017-06-30”);
//创建度量对象。
$sessions=新Google_服务_分析报告_度量();
$sessions->setExpression(“ga:sessions”);
$sessions->setAlias(“sessions”);
//创建标注对象。
$date=新的Google_服务_分析报告_维度();
$date->setName(“ga:date”);
$pagePath=新Google_服务_分析报告_维度();
$pagePath->setName(“ga:pagePath”);
//创建ReportRequest对象。
$request=new Google_Service_analytics reporting_ReportRequest();
$request->setViewId(“81692014”);
$request->setPageSize(“10000”);
$request->setDateRanges($dateRange);
$request->setDimensions(数组($date,$pagePath));
$request->setMetrics(数组($sessions));
$request->setMetrics(数组($sessions));
$body=新的Google_服务_分析报告_GetReportsRequest();
$body->setReportRequests(数组($request));
$data=$service->reports->batchGet($body);
//如果您真的想要所有东西,请删除count。
$cnt=0;
而($data->reports[0]->nextPageToken>0&&$cnt<10){
//此报告有更多行。
$body->reportRequests[0]->setPageToken($data->reports[0]->nextPageToken);
$data=$service->reports->batchGet($body);
$cnt++;
}

我在上面贴了一个教程,我使用的完整代码可以在注释中找到。这段代码是从我的示例项目中提取的。

你检查过了吗?@JordiNebot谢谢你的建议。我会试着把这个写在我的代码里。我希望这就是答案。@JordiNebot我试过了,错误是“在null上调用成员函数getNextPageToken()”@ben您必须对响应进行var转储,找出nextpagetoken的位置并使用它。AnalyticsV4与其他API不同,标准分页方法无法工作。我不得不自己为C#@DaImTo重新编写它。你以前用过PHP吗?让我试试你的建议。你在C#?@DalmTo上成功试用过吗?谢谢你的教程。这真是一个很大的帮助。现在可以了。我得到了正确的数据并将这些数据插入了我的数据库。请记住接受答案。当您接受stack overflow的欢迎时,您也将获得积分