4

我正在使用 Google APIs 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. 现在我可以用不同的起始索引创建一个新的请求对象(使用上面的代码),但是没有更好的方法吗?

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

4

3 回答 3

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
于 2013-08-29T12:05:10.090 回答
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')
于 2015-01-30T01:36:46.583 回答
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']

???

于 2016-10-06T14:38:46.200 回答