0

I'm trying to create remarketing list. I read Python quickstart for installed applications and used code from there. I'm python newbie. Here's the code:

from __future__ import print_function

import argparse
import sys

from googleapiclient.errors import HttpError
from googleapiclient import sample_tools
from oauth2client.client import AccessTokenRefreshError
from oauth2client import tools
from apiclient.discovery import build
import httplib2
from oauth2client import client
from oauth2client import file

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

  Args:
    api_name: string The name of the api to connect to.
    api_version: string The api version to connect to.
    scope: A list of strings representing the auth scopes to authorize for the
      connection.
    client_secrets_path: string A path to a valid client secrets file.

  Returns:
    A service that is connected to the specified API.
  """
  # Parse command-line arguments.
  parser = argparse.ArgumentParser(
      formatter_class=argparse.RawDescriptionHelpFormatter,
      parents=[tools.argparser])
  flags = parser.parse_args([])

  # Set up a Flow object to be used if we need to authenticate.
  flow = client.flow_from_clientsecrets(
      client_secrets_path, scope=scope,
      message=tools.message_if_missing(client_secrets_path))

  # Prepare credentials, and authorize HTTP object with them.
  # If the credentials don't exist or are invalid run through the native client
  # flow. The Storage object will ensure that if successful the good
  # credentials will get written back to a file.
  storage = file.Storage(api_name + '.dat')
  credentials = storage.get()
  if credentials is None or credentials.invalid:
    credentials = tools.run_flow(flow, storage, flags)
  http = credentials.authorize(http=httplib2.Http())

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

  return service

def create(service):
  return service.management().remarketingAudience().insert(
    accountId='16694538',
    webPropertyId='UA-16694838-1',
    body={
      'name': 'Simple Audience',
      'linkedViews': 33205313,
      'linkedAdAccounts': [{
          'type': 'ADWORDS_LINKS',
          'linkedAccountId': '518-659-6088'
      }],
      'audienceType': 'SIMPLE',
      'audienceDefinition': {
        'includeConditions': {
          'isSmartList': False,
          'daysToLookBack': 7,
          'membershipDurationDays': 30,
          'segment': 'users::condition::ga:browser==Chrome'
        }
      }
    }
  ).execute()

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

  # Authenticate and construct service.
  service = get_service('analytics', 'v3', scope, 'client_secrets.json')
  profile = '33205313'
  create(service)


if __name__ == '__main__':
  main()

I get errors like here below:

Traceback (most recent call last):
  File "/home/maciek/Documents/HelloAnalytics.py", line 88, in <module>
    main()
  File "/home/maciek/Documents/HelloAnalytics.py", line 84, in main
    create(service)
  File "/home/maciek/Documents/HelloAnalytics.py", line 71, in create
    'segment': 'users::condition::ga:browser==Chrome'
  File "/usr/local/lib/python2.7/dist-packages/oauth2client/_helpers.py", line 133, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/googleapiclient/http.py", line 840, in execute
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/analytics/v3/management/accounts/16694838/webproperties/UA-16694838-1/remarketingAudiences?alt=json returned "Insufficient Permission">
[Finished in 0.7s with exit code 1]

Please let me know how can I make it work.

TityBoi
  • 399
  • 1
  • 4
  • 11

1 Answers1

1

Well I suppose because you have not called the function get_service to return you the service object that you require to use the API. Certainly, this code is not 'ready' but be sure to give the quickstart a better look.

  service = get_service('analytics', 'v3', scope, key_file_location,
service_account_email)

That is the example for the 'analytics' service. Here is the quickstart for your reference

Igneel64
  • 618
  • 4
  • 10
  • Hi thanks for replay! I edited my code and called the function get_service. Now I'm getting new errors. – TityBoi Apr 05 '17 at 06:11
  • Have a look at this answer explaining more the permissions. http://stackoverflow.com/questions/16978192/google-plus-api-insufficientpermissions-error . Also be sure that your account covers all those requirements listed here https://developers.google.com/analytics/devguides/config/mgmt/v3/remarketing – Igneel64 Apr 05 '17 at 06:16