2016-03-02 75 views
1

我試圖按照this tutorial連接到Google AnalyticsAPI。我一直按照說明進行操作。我的電腦上安裝了Python 2.7。我已經安裝了Google客戶端庫。當我運行該程序,我得到以下錯誤在終端:使用Python連接到Google Analytics API

Traceback (most recent call last): 
    File "HelloAnalytics.py", line 6, in <module> 
    from oauth2client.client import SignedJwtAssertionCredential 
ImportError: cannot import name SignedJwtAssertionCredentials 

6號線,它指的是:

from oauth2client.client import SignedJwtAssertionCredentials 

我是在一個完整的丟失。我查看了其他曾發生過相同錯誤的人,here,herehere,但解決方案無效。我有一些編程知識,但與你們許多人相比,我是一個小菜鳥。

完整的代碼是在這裏:

"""A simple example of how to access the Google Analytics API.""" 

import argparse 

from apiclient.discovery import build 
from oauth2client.client import SignedJwtAssertionCredentials 

import httplib2 
from oauth2client import client 
from oauth2client import file 
from oauth2client import tools 



def get_service(api_name, api_version, scope, key_file_location, 
       service_account_email): 
    """Get a service that communicates to a Google API. 

    Args: 
    api_name: The name of the api to connect to. 
    api_version: The api version to connect to. 
    scope: A list auth scopes to authorize for the application. 
    key_file_location: The path to a valid service account p12 key file. 
    service_account_email: The service account email address. 

    Returns: 
    A service that is connected to the specified API. 
    """ 

    f = open(key_file_location, 'rb') 
    key = f.read() 
    f.close() 

    credentials = SignedJwtAssertionCredentials(service_account_email, key, 
    scope=scope) 

    http = credentials.authorize(httplib2.Http()) 

    # Build the service object. 
    service = build(api_name, api_version, http=http) 

    return service 


def get_first_profile_id(service): 
    # Use the Analytics service object to get the first profile id. 

    # Get a list of all Google Analytics accounts for this user 
    accounts = service.management().accounts().list().execute() 

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

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

    if properties.get('items'): 
     # Get the first property id. 
     property = properties.get('items')[0].get('id') 

     # Get a list of all views (profiles) for the first property. 
     profiles = service.management().profiles().list(
      accountId=account, 
      webPropertyId=property).execute() 

     if profiles.get('items'): 
     # return the first view (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 
    # for the number of sessions within the past seven days. 
    return service.data().ga().get(
     ids='ga:' + profile_id, 
     start_date='7daysAgo', 
     end_date='today', 
     metrics='ga:sessions').execute() 


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

    else: 
    print 'No results found' 


def main(): 
    # Define the auth scopes to request. 
    scope = ['https://www.googleapis.com/auth/analytics.readonly'] 

    # Use the developer console and replace the values with your 
    # service account email and relative location of your key file. 
    service_account_email = '<Replace with your service account email address.>' 
    key_file_location = '<Replace with /path/to/generated/client_secrets.p12>' 

    # Authenticate and construct service. 
    service = get_service('analytics', 'v3', scope, key_file_location, 
    service_account_email) 
    profile = get_first_profile_id(service) 
    print_results(get_results(service, profile)) 


if __name__ == '__main__': 
    main() 

任何幫助或方向將不勝感激。

回答

0

source repository最近進行了更新,並Hello Analytics Guides以來也進行了更新,以使用新代碼:

from apiclient.discovery import build 
from oauth2client.service_account import ServiceAccountCredentials 

... 
credentials = ServiceAccountCredentials.from_p12_keyfile(
    service_account_email, key_file_location, scopes=scope) 

哪裏service_account_email是你從開發者控制檯獲取的服務帳戶的電子郵件地址,並且key_file_locaiton/the/path/to/key.p12,而scopes是您需要授予服務帳戶的scopes

請記住將服務帳戶電子郵件地址添加爲您希望訪問的Google Analytics數據視圖(個人資料)的授權用戶。

+0

你好,感謝您的更新。但現在我得到這個錯誤:類型錯誤:文件()沒有空字節參數1必須編碼字符串,而不是str的 – Jay

+0

回溯(最近通話最後一個): 文件「C:\用戶\我\桌面\新建文件夾(3) \ HelloAnalytics.py 「線路112,在 主() 文件 」C:\用戶\ u6023273 \桌面\新文件夾(3)\ HelloAnalytics.py「,線106,在主 SERVICE_ACCOUNT_EMAIL) 文件」 C :\ Users \ me \ Desktop \ New folder(3)\ HelloAnalytics.py「,第35行,在get_service service_account_email,key,scopes = scope) – Jay

+0

文件」C:\ Python27 \ lib \ site-packages \ oauth2client \ service_account .py「第272行的from_p12_keyfile ,其中open(filename,'rb')爲file_obj: TypeError:file()參數1必須爲編碼字符串wi不包含NULL字節,不包含str – Jay