使用nextLink属性获取下一个结果页面

时间:2012-08-13 12:37:48

标签: python google-analytics google-api

我正在使用Google API python客户端从Google Analytics下载一些数据。我基本上复制了他们的一个示例并对其进行了修改以完全符合我的需要。

我从示例中获取了这段代码:

   request = service.data().ga().get(
       ids=ids,
       start_date=str(start_date),
       end_date=str(end_date),
       dimensions=','.join(dimensions),
       filters=filters,
       sort="ga:date",
       metrics=','.join(metrics))

然后将其添加到批处理对象,并在收集了10个请求后执行它。这一切都运行良好,但问题是,其中一些请求返回“nextLink”。现在我可以使用不同的start-index创建一个新的请求对象(带有上面的代码),但是没有更好的方法吗?

有没有办法将nextLink解析为新的请求对象?

3 个答案:

答案 0 :(得分:6)

我正在使用这种方法:

firstRun = True
params = {'ids':'ga:00000001',
        'start_date':'2013-07-01',
        'end_date':'2013-07-31',
        'metrics':'ga:visits',
        'dimensions':'ga:source',
        'sort':'-ga:visits',
        'start_index':1,
        'max_results':10000}

while firstRun == True or result.get('nextLink'):
    if firstRun == False:
        params['start_index'] = int(params['start_index']) + int(params['max_results'])

    result = service.data().ga().get(**params).execute()
    firstRun = False

答案 1 :(得分:5)

我找不到解析nextLink对象并用它做请求的方法,但这是我的解决方案并且工作正常:

max_results = 10000

params = {
    'ids': 'ga:' + profile_id,
    'start_date': start_date,
    'end_date': end_date,
    'metrics': ','.join(metrics),
    'dimensions': ','.join(dimensions),
    'start_index': 1,
    'max_results': max_results
}

has_more = True

while has_more:
    results = service.data().ga().get(**params).execute()

    #do something with results

    params['start_index'] = int(params['start_index']) + int(params['max_results'])
    has_more = results.get('nextLink')

答案 2 :(得分:0)

为什么我们不能这样做:

params = {'ids': profile_id,
          'start_date': start_date,
          'end_date': end_date,
          'metrics': metrics,
          'dimensions': dimensions,
          'sort': sort,
          'start_index': 1,
          'max_results': 1}


dummy_call = service.data().ga().get(**params).execute() # just to find out the totalResults number
params['max_results'] = dummy_call[u'totalResults'] # replace max_result with the totalResults number

all_rows = service.data().ga().get(**params).execute()[u'rows']

???