2016-11-24 58 views
0

我试图从google-analytics-api获取数据,我运行示例代码:HelloAnalytics.py(https://developers.google.com/analytics/devguides/reporting/core/v3/quickstart/service-py), 但存在一些错误:IOError:[Errno 13 ] 我已将我的服务帐户电子邮件地址添加到我的GA帐户 我正在使用mac os。python:IOError:[Errno 13]权限被拒绝。当我尝试google-analytics-api示例代码

详细错误信息:

Traceback (most recent call last): 
    File "/Users/mac/Documents/python-f/HelloAnalytics.py", line 82, in <module> 
    main() 
    File "/Users/mac/Documents/python-f/HelloAnalytics.py", line 77, in main 
    analytics = initialize_analyticsreporting() 
    File "/Users/mac/Documents/python-f/HelloAnalytics.py", line 34, in initialize_analyticsreporting 
    analytics = build('analytics', 'v4', http=http, discoveryServiceUrl=DISCOVERY_URI) 
    File "build/bdist.macosx-10.12-intel/egg/oauth2client/_helpers.py", line 133, in positional_wrapper 
    File "build/bdist.macosx-10.12-intel/egg/googleapiclient/discovery.py", line 222, in build 
    File "build/bdist.macosx-10.12-intel/egg/googleapiclient/discovery.py", line 269, in _retrieve_discovery_doc 
    File "build/bdist.macosx-10.12-intel/egg/oauth2client/transport.py", line 159, in new_request 
    File "build/bdist.macosx-10.12-intel/egg/oauth2client/client.py", line 744, in _refresh 
    File "build/bdist.macosx-10.12-intel/egg/oauth2client/client.py", line 775, in _do_refresh_request 
    File "build/bdist.macosx-10.12-intel/egg/oauth2client/transport.py", line 282, in request 
    File "/Library/Python/2.7/site-packages/httplib2-0.9.2-py2.7.egg/httplib2/__init__.py", line 1609, in request 
    (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey) 
    File "/Library/Python/2.7/site-packages/httplib2-0.9.2-py2.7.egg/httplib2/__init__.py", line 1351, in _request 
    (response, content) = self._conn_request(conn, request_uri, method, body, headers) 
    File "/Library/Python/2.7/site-packages/httplib2-0.9.2-py2.7.egg/httplib2/__init__.py", line 1272, in _conn_request 
    conn.connect() 
    File "/Library/Python/2.7/site-packages/httplib2-0.9.2-py2.7.egg/httplib2/__init__.py", line 1036, in connect 
    self.disable_ssl_certificate_validation, self.ca_certs) 
    File "/Library/Python/2.7/site-packages/httplib2-0.9.2-py2.7.egg/httplib2/__init__.py", line 80, in _ssl_wrap_socket 
    cert_reqs=cert_reqs, ca_certs=ca_certs) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 911, in wrap_socket 
    ciphers=ciphers) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 520, in __init__ 
    self._context.load_verify_locations(ca_certs) 
IOError: [Errno 13] Permission denied 

的源代码:

"""Hello Analytics Reporting API V4.""" 

import argparse 

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

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


SCOPES = ['https://www.googleapis.com/auth/analytics.readonly'] 
DISCOVERY_URI = ('https://analyticsreporting.googleapis.com/$discovery/rest') 
KEY_FILE_LOCATION = '/Users/mac/Documents/python-f/MyProject-a7c00ebc9685.p12' 
SERVICE_ACCOUNT_EMAIL = '[email protected]' 
VIEW_ID = '120100451' 


def initialize_analyticsreporting(): 
    """Initializes an analyticsreporting service object. 

    Returns: 
    analytics an authorized analyticsreporting service object. 
    """ 

    credentials = ServiceAccountCredentials.from_p12_keyfile(
    SERVICE_ACCOUNT_EMAIL, KEY_FILE_LOCATION, scopes=SCOPES) 

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

    # Build the service object. 
    analytics = build('analytics', 'v4', http=http, discoveryServiceUrl=DISCOVERY_URI) 

    return analytics 


def get_report(analytics): 
    # Use the Analytics Service Object to query the Analytics Reporting API V4. 
    return analytics.reports().batchGet(
     body={ 
     'reportRequests': [ 
     { 
      'viewId': VIEW_ID, 
      'dateRanges': [{'startDate': '7daysAgo', 'endDate': 'today'}], 
      'metrics': [{'expression': 'ga:sessions'}] 
     }] 
     } 
).execute() 


def print_response(response): 
    """Parses and prints the Analytics Reporting API V4 response""" 

    for report in response.get('reports', []): 
    columnHeader = report.get('columnHeader', {}) 
    dimensionHeaders = columnHeader.get('dimensions', []) 
    metricHeaders = columnHeader.get('metricHeader', {}).get('metricHeaderEntries', []) 
    rows = report.get('data', {}).get('rows', []) 

    for row in rows: 
     dimensions = row.get('dimensions', []) 
     dateRangeValues = row.get('metrics', []) 

     for header, dimension in zip(dimensionHeaders, dimensions): 
     print header + ': ' + dimension 

     for i, values in enumerate(dateRangeValues): 
     print 'Date range (' + str(i) + ')' 
     for metricHeader, value in zip(metricHeaders, values.get('values')): 
      print metricHeader.get('name') + ': ' + value 


def main(): 

    analytics = initialize_analyticsreporting() 
    response = get_report(analytics) 
    print_response(response) 

if __name__ == '__main__': 
    main() 
+0

要排除显而易见的问题,您是否已将自己的服务帐号电子邮件地址添加到GA帐号? –

回答

0

正在使用的服务帐户。您是否允许服务帐户访问您的Google Analytics帐户?

转到管理下的谷歌分析网站,将帐户级别的服务帐户电子邮件地址添加到您希望请求数据的帐户。

理念之二:

IOError: [Errno 13] Permission denied检查是否具有permssions为P12文件。

+0

我添加了该帐户。它具有读取和分析权限。 –

+0

如果它仍然不起作用请仔细检查您的VIEW_ID。您无权访问您要请求数据的帐户。 – DaImTo

+0

我检查了VIEW_ID,它是正确的。问题依然存在。 –