TypeError: file () - argument 1-kodierte Strings ohne NULL-bytes, nicht str

Ich versuche zu Folgen dieses tutorial, um so Verbindung zu den Google-Analytics-API. Ich folgte alles Schritt für Schritt. Aber wenn ich das Modul in python, bekomme ich die folgende Fehlermeldung:

Traceback (most recent call last):
  File "C:\Users\me\Desktop\New folder (3)\HelloAnalytics.py", line 112, in <module>
    main()
  File "C:\Users\me\Desktop\New folder (3)\HelloAnalytics.py", line 106, in main
    service_account_email)
  File "C:\Users\me\Desktop\New folder (3)\HelloAnalytics.py", line 35, in get_service
    service_account_email, key, scopes=scope)
  File "C:\Python27\lib\site-packages\oauth2client\service_account.py", line 274, in from_p12_keyfile
    with open(filename, 'rb') as file_obj:
TypeError: file() argument 1 must be encoded string without NULL bytes, not str

Ob jemand kann mich in die richtige Richtung, das wäre toll. Der vollständige code ist hier:

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

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



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 = ServiceAccountCredentials.from_p12_keyfile(
    service_account_email, key, scopes=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()
  • Dies scheint zu sein, viel mehr code als nötig wäre, um die Reproduktion Ihrer Fehler. Können Sie statt der post ein minimal Beispiel dieser code zur Erzeugung der Fehler, den Sie haben (hilfreich!) zur Verfügung gestellt?
  • Ehrlich, ich bin ganz neu hier. Ich möchte gar nicht wissen, was zu nehmen, ohne zu brechen etwas anderes. Ich entschuldige mich.
  • Hast du mit einem richtigen Dateipfad (mit einer benannten Laufwerksbuchstaben, da du scheinbar auf windows) für die key_file_location ? Die Fehlermeldung scheint zu beklagen, das argument für die Datei-operation, nicht alles, was innerhalb der Datei.
  • Danke für die Antwort. Im code verwende ich: key_file_location = './client_secrets.p12', und ich führe den code in den gleichen Ordner. Aber ich habe den gleichen, genaue Fehlermeldung, wenn ich den vollständigen Pfad mit dem Laufwerksbuchstaben. Ich weiß, dass ich den Weg zu korrigieren und die p12-Datei gelesen wird, weil wenn ich schalten Sie die Weg, bekomme ich ein " No such file or directory:' Fehler. Vielen Dank für die Hilfe.
InformationsquelleAutor Jay | 2016-03-04
Schreibe einen Kommentar