我是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.使用与我用于请求开发人员令牌的电子邮件地址不同的电子邮件地址创建了一个测试经理帐户 4.在Test Manager帐户下创建测试活动 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}')
****编辑:我解决了我的问题**** generate_refresh_token.py的脚本是用Python 2编写的,我试图在Python 3中运行它。脚本的第101行使用raw_input()方法,已经在Python 3中更改为input()。这导致脚本执行中的错误没有提示我输入我在步骤8中导航到URL后给出的访问代码(我被给予访问令牌,而不是我之前认为的刷新令牌) )。 将脚本更改为input()并在Python 3编译器中运行后,系统会提示您提供访问代码,该代码在命令行上返回刷新代码。我希望这有助于其他人在使用Python API客户端。