我是AdWords的新手,我正在尝试按照此处显示的说明使用Google的AdWords API Python客户端设置我的第一个API请求:https://developers.google.com/adwords/api/docs/guides/first-api-call 我已尽我所能按照说明进行操作,并且只能使API调用返回: google.auth.exceptions.RefreshError :(“ invalid_grant:错误请求”,“ {\ n“错误”:“ invalid_grant”,\ n“错误描述”:“错误请求” \ n}')
按照说明,我尝试了以下顺序:
1.设置一个AdWords经理帐户并要求我的开发者令牌
2.收到通知,我的开发令牌现在正在挂起
3.使用与我用来请求开发者令牌的电子邮件地址不同的电子邮件地址创建了一个Test Manager帐户。
4.在“测试管理器”帐户下创建的测试活动
5.按照提供的说明安装Python客户端库
6.在与用于请求开发者令牌的电子邮件地址关联的Google Developer Console中,我已经设置了OAuth客户端ID,并收到了我的client_ID和client_secret
7.使用这些凭据进入generate_refresh_token.py文件,然后运行脚本以接收URL以生成刷新令牌。
8.导航到提供的URL并使用TEST MANAGER帐户登录,并收到刷新令牌
9.在googleads.yaml文件(位于硬盘驱动器的根目录中)中,我添加了来自AdWords管理器帐户(而非测试帐户)的开发人员令牌,在步骤6中生成的client_id和client_secret,刷新步骤8中生成的令牌以及来自TEST MANAGER帐户的客户客户ID。
10.使用以下示例API脚本创建一个Python文件:https://github.com/googleads/googleads-python-lib/blob/master/examples/adwords/v201809/basic_operations/get_campaigns.py
这是示例代码:
from googleads import adwords
PAGE_SIZE = 100
def main(client):
# Initialize appropriate service.
campaign_service = client.GetService('CampaignService', version='v201809')
# Construct selector and get all campaigns.
offset = 0
selector = {
'fields': ['Id', 'Name', 'Status'],
'paging': {
'startIndex': str(offset),
'numberResults': str(PAGE_SIZE)
}
}
more_pages = True
while more_pages:
page = campaign_service.get(selector)
# Display results.
if 'entries' in page:
for campaign in page['entries']:
print ('Campaign with id "%s", name "%s", and status "%s" was '
'found.' % (campaign['id'], campaign['name'],
campaign['status']))
else:
print ('No campaigns were found.')
offset += PAGE_SIZE
selector['paging']['startIndex'] = str(offset)
more_pages = offset < int(page['totalNumEntries'])
if __name__ == '__main__':
adwords_client = adwords.AdWordsClient.LoadFromStorage()
main(adwords_client)
预期输出:所有广告系列的JSON响应
实际输出:google.auth.exceptions.RefreshError :(“ invalid_grant:错误的请求”,“ {\ n“错误”:“ invalid_grant””,\ n“错误的描述”:“错误的请求” \ n}')< / p>
答案 0 :(得分:0)
****编辑:我解决了我的问题****
generate_refresh_token.py的脚本是用Python 2编写的,而我试图在Python 3中运行它。脚本的第101行使用raw_input()方法,该方法在Python 3中已更改为input()。这导致脚本执行中出现错误,该错误在执行步骤8导航到URL之后并没有提示我输入要提供的访问代码(我被赋予了访问令牌,而不是以前认为的刷新令牌) )。
将脚本更改为input()并在Python 3编译器中运行后,系统提示我提供访问代码,该访问代码在命令行上返回了刷新代码。我希望这可以帮助其他在Python API客户端上苦苦挣扎的人。