如何使用服务帐户对DCM帐户进行身份验证?

时间:2019-08-20 14:02:15

标签: google-cloud-platform google-api google-api-python-client double-click-advertising

我正在尝试使用python客户端库从DCM下载报告。我正在使用服务帐户,并且正在使用此链接代码this!。我已经按照所有步骤设置了DCM api网址中提到的服务帐户文件,但是在运行代码时遇到了错误提示。

回溯(最近通话最近):   _validate_clientsecrets中的文件“ /usr/bin/anaconda/envs/py35/lib/python3.5/site-packages/oauth2client/clientsecrets.py”,第86行     (client_type,client_info),= clientsecrets_dict.items() ValueError:太多值无法解包(预期1)

我正在使用以下服务帐户文件连接到DCM API并下载报告。这是我要设置的过程,以便每天自动下载报告,而无需任何手动干预。


import argparse
import sys

from googleapiclient import discovery
import httplib2
from oauth2client import client
from oauth2client import tools
from oauth2client.service_account import ServiceAccountCredentials

# Declare command-line flags.
argparser = argparse.ArgumentParser(add_help=False)
argparser.add_argument('path_to_service_account_json_file',help='Path to the service account JSON file to use for authenticating.')
argparser.add_argument('-i','--impersonation_email',help='Google account email to impersonate.')

# The OAuth 2.0 scopes to request.
OAUTH_SCOPES = ['https://www.googleapis.com/auth/dfareporting']


def main(argv):
    # Retrieve command line arguments.
    parser = argparse.ArgumentParser(description=__doc__,formatter_class=argparse.RawDescriptionHelpFormatter,parents=[tools.argparser, argparser])
    flags = parser.parse_args(argv[1:])

    # Authenticate using the supplied service account credentials
    http = authenticate_using_service_account(flags.path_to_service_account_json_file,flags.impersonation_email)

    # Construct a service object via the discovery service.
    service = discovery.build('dfareporting', 'v3.3', http=http)

    try:
        # Construct the request.
        request = service.userProfiles().list()

        # Execute request and print response.
        response = request.execute()

        for profile in response['items']:
            print('Found user profile with ID %s and user name "%s".' %(profile['profileId'], profile['userName']))

    except client.AccessTokenRefreshError:
        print('The credentials have been revoked or expired, please re-run the ''application to re-authorize')

def authenticate_using_service_account(path_to_service_account_json_file,impersonation_email):
    """Authorizes an httplib2.Http instance using service account credentials."""
    # Load the service account credentials from the specified JSON keyfile.
    credentials = ServiceAccountCredentials.from_json_keyfile_name(path_to_service_account_json_file,scopes=OAUTH_SCOPES)

    # Configure impersonation (if applicable).
    if impersonation_email:
        credentials = credentials.create_delegated(impersonation_email)

    # Use the credentials to authorize an httplib2.Http instance.
    http = credentials.authorize(httplib2.Http())

    return http


if __name__ == "__main__":
    main(sys.argv)

TypeError: cannot instantiate ctype 'EVP_MD_CTX' of unknown size

0 个答案:

没有答案