Google Adwords API 身份验证问题
Posted
技术标签:
【中文标题】Google Adwords API 身份验证问题【英文标题】:Google Adwords API authentication issue 【发布时间】:2013-04-25 16:56:38 【问题描述】:刚开始使用 Adwords API,由于某种原因,我似乎根本无法连接。
下面的代码,直接来自教程抛出错误:
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
client = AdWordsClient(path=os.path.join('Users', 'ravinthambapillai', 'Google Drive', 'client_secrets.json'))
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/adspygoogle/adwords/AdWordsClient.py", line 151, in __init__
self._headers = self.__LoadAuthCredentials()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/adspygoogle/adwords/AdWordsClient.py", line 223, in __LoadAuthCredentials
return super(AdWordsClient, self)._LoadAuthCredentials()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/adspygoogle/common/Client.py", line 94, in _LoadAuthCredentials
raise ValidationError(msg)
**ValidationError: Authentication data is missing.**
from adspygoogle.adwords.AdWordsClient import AdWordsClient
from adspygoogle.common import Utils
client = AdWordsClient(path=os.path.join('Users', 'this-user', 'this-folder', 'client_secrets.json'))
【问题讨论】:
【参考方案1】:看起来有两个问题。首先,尝试删除最后一个路径元素,据我所知,path
参数需要一个包含身份验证pickle、日志等的目录。这种方法要求您已经有一个有效的auth_token.pkl
。
其次,您似乎正在使用 OAuth2 进行身份验证(我猜是 client_secrets.json
文件)。为此,您需要使用oauth2client
库并在headers
参数中为AdWordsClient
提供一个oauth2credentials 实例。
以下内容直接来自客户端分发中的文件examples/adspygoogle/adwords/v201302/misc/use_oauth2.py
,应该让您了解它是如何工作的:
# We're using the oauth2client library:
# http://code.google.com/p/google-api-python-client/downloads/list
flow = OAuth2WebServerFlow(
client_id=oauth2_client_id,
client_secret=oauth2_client_secret,
# Scope is the server address with '/api/adwords' appended.
scope='https://adwords.google.com/api/adwords',
user_agent='oauth2 code example')
# Get the authorization URL to direct the user to.
authorize_url = flow.step1_get_authorize_url()
print ('Log in to your AdWords account and open the following URL: \n%s\n' %
authorize_url)
print 'After approving the token enter the verification code (if specified).'
code = raw_input('Code: ').strip()
credential = None
try:
credential = flow.step2_exchange(code)
except FlowExchangeError, e:
sys.exit('Authentication has failed: %s' % e)
# Create the AdWordsUser and set the OAuth2 credentials.
client = AdWordsClient(headers=
'developerToken': '%s++USD' % email,
'clientCustomerId': client_customer_id,
'userAgent': 'OAuth2 Example',
'oauth2credentials': credential
)
【讨论】:
dorian:这里的 client_customer_id 是一个变量。这个值应该由客户提供,还是被视为机密值? 'client_customer_id' 只是您要访问的 Google AdWords 帐户的 ID(“123-456-7890”)。 AFAIR 可以省略此参数,在这种情况下,您将访问与您的 Google 帐户相关联的*** Adwords 帐户。【参考方案2】:我不熟悉AdWordsClient
api,但你确定你的路径是正确的吗?
您当前的join
生成的是相对路径,您需要绝对路径吗?
>>> import os
>>> os.path.join('Users', 'this-user')
'Users/this-user'
为了测试,您可以硬编码绝对路径以确保它不是路径问题
我还要确保 'client_secrets.json
存在,并且执行 python 的用户可以读取它
【讨论】:
以上是关于Google Adwords API 身份验证问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 suds 在 Python 中使用 OAuth2 进行 Google Adwords API 身份验证
google adwords api 与 google-adwords-api gem
与链接到 Google Adwords 帐户的 Google Analytics API 相比,Google Adwords API 报告可以获得多少?