2016-03-02 165 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