2

Python を使用して Google アナリティクス API にクエリを実行しようとしています。ドキュメントの例に従いました。(私が抱えている問題をデバッグするのに役立つように、非常に小さな変更を加えました)。「NoneType」オブジェクトに属性「__ getitem __」がありませんが、説明できないようです。2012 年 3 月 3 日の ga:visits データを取得しようとする、Google が提供するドキュメントの例に従っているだけです。

私が実行しているコードは次のとおりです。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys

# import the Auth Helper class
import hello_analytics_api_v3_auth

from apiclient.errors import HttpError
from oauth2client.client import AccessTokenRefreshError

def main(argv):
  # Step 1. Get an analytics service object.
  print "I got here twice"
  service = hello_analytics_api_v3_auth.initialize_service()

  try:
    # Step 2. Get the user's first profile ID.
    profile_id = get_first_profile_id(service)
    print profile_id

    if profile_id:
      # Step 3. Query the Core Reporting API.
      results = get_results(service, profile_id)
      print "I got the results"

      # Step 4. Output the results.
      print_results(results)
      print "I printed the results"

  except TypeError, error:
    # Handle errors in constructing a query.
    print ('There was an error in constructing your query : %s' % error)

  except HttpError, error:
    # Handle API errors.
    print ('Arg, there was an API error : %s : %s' %
           (error.resp.status, error._get_reason()))

  except AccessTokenRefreshError:
    # Handle Auth errors.
    print ('The credentials have been revoked or expired, please re-run '
           'the application to re-authorize')

def get_first_profile_id(service):
  # Get a list of all Google Analytics accounts for this user
  print "I am trying to get first profile ID"
  accounts = service.management().accounts().list().execute()

  if accounts.get('items'):
    # Get the first Google Analytics account
    firstAccountId = accounts.get('items')[0].get('id')

    # Get a list of all the Web Properties for the first account
    webproperties = service.management().webproperties().list(accountId=firstAccountId).execute()

    if webproperties.get('items'):
      # Get the first Web Property ID
      firstWebpropertyId = webproperties.get('items')[0].get('id')

      # Get a list of all Profiles for the first Web Property of the first Account
      profiles = service.management().profiles().list(
          accountId=firstAccountId,
          webPropertyId=firstWebpropertyId).execute()

      if profiles.get('items'):
        # return the first Profile ID
        return profiles.get('items')[0].get('id')

  return None


def get_results(service, profile_id):
  # Use the Analytics Service Object to query the Core Reporting API
  return service.data().ga().get(
      ids='ga:' + profile_id,
      start_date='2012-03-03',
      ##The start date dates range is hard coded here
      ##We have to change this so it becomes an input parameter
      end_date='2012-03-03',
      ##The end date is also hard coded in
      ##Change this to be an input parameter
      ##If you run out of ideas, read the start date off a txt file
      ##And then have the user change the text file before running
      ##the program
      metrics='ga:visits').execute()

def print_results(results):
  # Print data nicely for the user.
  print results
  if results:
    print 'First Profile: %s' % results.get('profileInfo').get('profileName')
    print 'Total Visits: %s' % results.get('rows')[0][0]

  else:
    print 'No results found'

##if __name__ == '__main__':
main(sys.argv)

次の結果が返されます。

I got here twice
I am trying to get first profile ID
REDACT PROFILE ID
I got the results
{u'kind': u'analytics#gaData', u'containsSampledData': False}, u'itemsPerPage': 1000, u'totalsForAllResults': {u'ga:visits': u'0'}, u'columnHeaders': [{u'dataType': u'INTEGER', u'columnType': u'METRIC', u'name': u'ga:visits'}], u'query': {u'max-results': 1000, u'start-date': u'2012-03-03', u'start-index': 1, u'ids': u'ga:REDACTED', u'metrics': [u'ga:visits'], u'end-date': u'2012-03-03'}, u'totalResults': 0, u'id': u'https://www.googleapis.com/analytics/v3/data/ga?ids=ga:4159539&metrics=ga:visits&start-date=2012-03-03&end-date=2012-03-03&start-index=1&max-results=1000', u'selfLink': u'https://www.googleapis.com/analytics/v3/data/ga?ids=ga:4159539&metrics=ga:visits&start-date=2012-03-03&end-date=2012-03-03&start-index=1&max-results=1000'}
First Profile: H - REDACTED
There was an error in constructing your query : 'NoneType' object has no attribute '__getitem__'

何が問題なのかを説明し、何を修正する必要があるかを教えてくれる人はいますか? :)

ありがとう

4

4 に答える 4

2

get関数を呼び出す前に、オブジェクトがNoneでないことを確認してください。多分

service.management().profiles().list(
          accountId=firstAccountId,
          webPropertyId=firstWebpropertyId).execute()

Noneを返し、profiles.get('items')失敗しています。

于 2012-08-14T13:40:44.473 に答える
1

私の場合、上記の日付の間にセッションがなかっただけです。同じ「NoneType」オブジェクトが返されました

于 2014-05-26T16:02:56.260 に答える