2017-04-05 36 views
0

我試圖創建再營銷列表。我爲已安裝的應用程序閱讀了Python快速入門,並從中使用了代碼。我是python新手。下面的代碼:使用API​​創建再營銷列表

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() 

我得到這樣的錯誤在這裏如下:

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] 

請讓我知道我可以使它發揮作用。

回答

1

嗯,我想因爲你沒有調用函數get_service來返回你需要使用API​​的服務對象。當然,這個代碼不是'準備好的',但一定要讓快速入門更好看。

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

這就是'analytics'服務的例子。 這裏是quickstart供您參考

+0

嗨,感謝您的重播!我編輯了我的代碼並調用函數get_service。現在我收到新的錯誤。 – TityBoi

+0

看看這個答案解釋更多的權限。 http://stackoverflow.com/questions/16978192/google-plus-api-insufficientpermissions-error。另外請確保您的帳戶覆蓋此處列出的所有要求https://developers.google.com/analytics/devguides/config/mgmt/v3/remarketing – Igneel64