【问题标题】:Google analytics api - incomplete report batches谷歌分析 api - 不完整的报告批次
【发布时间】:2018-08-28 06:08:03
【问题描述】:

所以我们有一个可以在特定日期范围内获取报告的有效 API。最近,我们尝试获取包含多达 40,000 个结果的行的报告。我们收到了 API 的响应,并能够提取前 1000 行。

现在的问题是分页。该查询设置为每批次检索 1,000 行,因此总共有 40 个批次(基于 40,000 行)。根据analytics api pagination,从 api 响应中检索 nextPageToken 并将其设置为下一个批处理请求。大多数时候我们得到一个不完整的报告,因为从响应返回的 nextPageToken 是空的。因此我们无法继续获取下一批。我们尝试手动填充nextPageToken,因为它是从零开始的行索引,但是 api 调用失败。

知道为什么响应中的 nextPageToken 会随机失败吗?

迭代代码:

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

$cnt = 0; 
while ($data->reports[0]->nextPageToken > 0 && $cnt < 10) {
    \Log::info($data->reports[0]->nextPageToken); // Token log
    $body->reportRequests[0]->setPageToken($data->reports[0]->nextPageToken);
    $data =  $service->reports->batchGet( $body );
    showData($data->reports[0]->nextPageToken);
    $cnt++;
}

Log results:
Attempt 1
[2018-08-28 03:43:57] local.INFO: 1000  
[2018-08-28 03:43:59] local.INFO: 2000  
[2018-08-28 03:44:04] local.INFO: (failed/ empty next page token)
Attempt 2
[2018-08-28 03:45:01] local.INFO: 1000  
[2018-08-28 03:45:26] local.INFO: 2000  
[2018-08-28 03:45:42] local.INFO: (failed/ empty next page token) 
Attempt 3
[2018-08-28 03:48:47] local.INFO: 1000  
[2018-08-28 03:49:01] local.INFO: 2000  
[2018-08-28 03:49:15] local.INFO: 3000  
[2018-08-28 03:49:31] local.INFO: 4000  
[2018-08-28 03:49:46] local.INFO: 5000  
[2018-08-28 03:50:02] local.INFO: (failed/ empty next page token)  
Attempt 4
[2018-08-28 03:54:10] local.INFO: 1000  
[2018-08-28 03:54:12] local.INFO: 2000  
[2018-08-28 03:54:13] local.INFO: 3000  
[2018-08-28 03:54:14] local.INFO: 4000  
[2018-08-28 03:54:15] local.INFO: 5000  
[2018-08-28 03:54:16] local.INFO: 6000  
[2018-08-28 03:54:31] local.INFO: (failed/ empty next page token)

【问题讨论】:

    标签: php google-analytics google-analytics-api


    【解决方案1】:

    您应该需要设置每个页面令牌,例如nextPageToken

    do {
       //your processing code
        $request->setPageToken($response[0]->getNextPageToken());//set next page token
    } while ($response[0]->getNextPageToken() != '');
    

    【讨论】:

    • 我正在设置它(请参阅帖子上的示例代码)。问题在于 $response[0]->getNextPageToken() 返回空。我也尝试手动设置它是否返回空,因为 nextPageToken 只是一个表示下一批索引的整数,这种方法也失败了。所以我认为谷歌端可能存在问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多