【问题标题】:python:IOError: [Errno 13] Permission denied. When I tried google-analytics-api sample codepython:IOError: [Errno 13] 权限被拒绝。当我尝试 google-analytics-api 示例代码时
【发布时间】:2016-11-24 18:21:05
【问题描述】:

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

详细错误信息:

   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 = 'data-510@prime-imagery-150409.iam.gserviceaccount.com'
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()

【问题讨论】:

  • 排除显而易见的问题,您是否将您的服务帐户电子邮件地址添加到您的 GA 帐户?

标签: python google-analytics google-analytics-api


【解决方案1】:

您正在使用服务帐户。您是否授予服务帐号访问您的 Google Analytics(分析)帐号的权限?

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

想法二:

IOError: [Errno 13] Permission denied 检查您是否拥有 p12 文件的权限。

【讨论】:

  • 我添加了帐号。它具有读取和分析权限。
  • 如果仍然无法正常工作,请仔细检查您的 VIEW_ID。您无权访问您从中请求数据的帐户。
  • 我检查了 VIEW_ID,没错。问题依然存在。
  • 那么由于我在技术上不是 python div,我会仔细检查您的脚本是否可以访问 KEY_FILE_LOCATION。我猜这可能是文件访问错误。
猜你喜欢
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 2017-04-20
  • 2011-06-11
  • 2014-07-15
  • 2015-07-17
相关资源
最近更新 更多