You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Google Analytics Python API分页获取超1万条记录

如何为Google Analytics Reporting API V4实现分页获取全量数据

嘿,我刚好处理过类似的需求——Google Analytics Reporting API V4确实有单页最多返回10000条记录的限制,要拿到超过这个量的全量数据,就得靠API提供的分页token机制来循环请求。核心逻辑很简单:每次请求后检查响应里的nextPageToken,如果存在就带着这个token发起下一次请求,直到没有更多数据为止。

下面是修改后的完整函数,我会把关键改动点给你讲清楚:

def get_full_report(analytics):
    """Queries the Analytics Reporting API V4 and retrieves all records via pagination.
    Args:
      analytics: An authorized Analytics Reporting API V4 service object.
    Returns:
      A list containing all rows from the Analytics report.
    """
    all_rows = []
    page_token = None
    
    while True:
        # 构建请求体,首次请求pageToken为None,后续传递上一页的nextPageToken
        response = analytics.reports().batchGet(
            body={
                'reportRequests': [
                    {
                        'viewId': VIEW_ID,
                        'dateRanges': [{'startDate': '2020-07-02', 'endDate': '2020-07-09'}],
                        'pageSize': 10000,
                        'metrics':[{'expression': 'ga:pageViews'}],
                        'dimensions':[{'name': 'ga:dimension1'}, {'name': 'ga:dimension2'}],
                        'pageToken': page_token  # 关键:分页标识,每次请求传递最新的token
                    }]
            }
        ).execute()
        
        # 提取当前页的数据,合并到总列表中
        report = response.get('reports', [])[0]
        if 'rows' in report:
            all_rows.extend(report['rows'])
        
        # 检查是否还有下一页数据
        page_token = report.get('nextPageToken')
        if not page_token:
            break  # 没有更多数据,结束循环
    
    return all_rows

关键改动说明:

  • 总数据存储:用all_rows列表来累积所有分页返回的记录,避免每次请求覆盖之前的结果。
  • 循环请求:用while True持续发起请求,直到没有下一页token时退出。
  • pageToken参数:这是分页的核心——首次请求时page_token为None,API返回第一页;后续请求用前一次响应里的nextPageToken,告诉API要获取下一页的数据。
  • 数据合并:每次拿到响应后,把当前页的rows通过extend方法加到总列表里,这样最后就能得到完整的数据集。
  • 终止条件:当响应里找不到nextPageToken,说明所有数据都已经获取完毕,直接跳出循环。

小提示:

  • 如果你需要保留表头信息(比如维度和指标的名称),可以在返回的时候把report['columnHeader']也带上,方便后续解析数据。
  • 注意API的配额限制,虽然分页是官方推荐的方式,但如果数据量特别大,还是要留意不要超出请求频率的限制哦。

内容的提问来源于stack exchange,提问作者merkle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 12:37:41