Blubber
Blubber

Reputation: 2254

Using nextLink attribute to get the next result page

I'm using the Google APIs python client to download some data from Google Analytics. I basically copied one of their exampels and modified it to do exactly what I need.

I took this piece of code from the examples:

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)
)

Then add it to the batch object, and execute it once it has collected 10 requests. This all works well, but the problem is, some of those requests return a nextLink. Now I could just create a new request object (with the above code) with a different start-index, but isn't there a better way?

Is there a way to just parse the nextLink into a new request object?

Upvotes: 4

Views: 1756

Answers (3)

Inês Martins
Inês Martins

Reputation: 550

Why we can't just do:

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']

???

Upvotes: 0

franzueto
franzueto

Reputation: 86

I could not found a way to parse the nextLink object and do a request with it but this was my solution and works fine:

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')

Upvotes: 5

chonduhvan
chonduhvan

Reputation: 61

I'm using this approach:

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

Upvotes: 6

Related Questions