我是 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 "error": "invalid_grant",\n "error_description": "错误请求"\n}')
根据说明,我尝试了以下顺序:
1. 设置 AdWords 管理工具帐户并请求我的开发者 token
2. 收到通知,我的开发 token 现在正在等待处理
3. 使用与我用来请求开发者 token 的电子邮件地址不同的电子邮件地址创建了一个测试经理帐户
4. 在测试经理帐户下创建测试事件
5. 按照提供的说明安装 Python 客户端库
6. 在与用于请求开发者 token 的电子邮件地址关联的 Google 开发者控制台中,我已设置 OAuth 客户端 ID 并收到我的 client_ID 和 client_secret
7. 将这些凭据用于generate_refresh_token.py 文件并运行脚本以接收 URL 以生成刷新 token 。
8. 导航到提供的 URL 并使用 TEST MANAGER 帐户登录并收到刷新 token
9. 在 googleads.yaml 文件(位于硬盘根目录)中,我添加了来自 AdWords 管理帐户(不是测试帐户)的开发人员 token 、第 6 步中生成的 client_id 和 client_secret,刷新第 8 步中生成的 token 以及来自 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 "error": "invalid_grant",\n "error_description": "错误请求"\n}')
最佳答案
**** 编辑:我解决了我的问题 ****
generate_refresh_token.py 的脚本是用 Python 2 编写的,我尝试在 Python 3 中运行它。脚本的第 101 行使用 raw_input() 方法,该方法在 Python 3 中已更改为 input()。这导致脚本执行中出现错误,该错误不会提示我输入在步骤 8 中导航到 URL 后给出的访问代码(我得到的是访问 token ,而不是我之前认为的刷新 token ) ).
将脚本更改为 input() 并在 Python 3 编译器中运行它后,系统提示我提供访问代码,该访问代码在命令行上返回刷新代码。我希望这可以帮助那些在 Python API 客户端上苦苦挣扎的人。
关于python-3.x - Google AdWords API Python 客户端仅返回 RefreshError : invalid_grant: Bad Request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55316656/