Python Adwords API 身份验证问题

Posted

技术标签:

【中文标题】Python Adwords API 身份验证问题【英文标题】:Python Adwords API authentication issue 【发布时间】:2016-03-07 21:20:44 【问题描述】:

我似乎无法连接 Adwords API。我按照此处描述的步骤操作:https://developers.google.com/adwords/api/docs/first-request

文件位于文件夹 C:\Users\User\Documents\googleads-python-lib-master\ 身份验证文件 (googleads.yaml) 填充了我的帐户设置。这些帐户设置以前在 Java 环境中有效。

对出了什么问题有什么建议吗?

我正在使用 Python 3.5.1 和最新的适用于 Python 的 Adwords API。

我收到的错误代码是:

C:/Users/User/Documents/googleads-python-lib-master/examples/adwords/v201509/basic_operations/get_campaigns.py
INFO:oauth2client.client:Refreshing access_token
DEBUG:suds.transport.http:opening (https://adwords.google.com/api/adwords/cm/v201509/CampaignService?wsdl)
DEBUG:suds.transport.http:sending:
URL: https://adwords.google.com/api/adwords/cm/v201509/CampaignService
HEADERS: 'Content-Type': 'text/xml; charset=utf-8', 'Content-type': 'text/xml; charset=utf-8', 'Soapaction': b'""', 'SOAPAction': b'""', 'Authorization': 'Bearer ya29.ngJKUmqHAKGfa93lSHVcYtpj6IHzN9KAoaMhGS_LEZJvrJjHnEl8Kx83leap3ae-g_zHmzA'
MESSAGE:
b'<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="https://adwords.google.com/api/adwords/cm/v201509" xmlns:ns1="https://adwords.google.com/api/adwords/cm/v201509" xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Header><tns:RequestHeader><tns:developerToken>xxxxxxxxxxxxx</tns:developerToken><tns:userAgent>Client name (AwApi-Python, googleads/3.11.0, Python/3.5.1)</tns:userAgent><tns:validateOnly>false</tns:validateOnly><tns:partialFailure>false</tns:partialFailure></tns:RequestHeader></SOAP-ENV:Header><ns0:Body><ns1:get><ns1:serviceSelector><ns1:fields>Id</ns1:fields><ns1:fields>Name</ns1:fields><ns1:fields>Status</ns1:fields><ns1:paging><ns1:startIndex>0</ns1:startIndex><ns1:numberResults>100</ns1:numberResults></ns1:paging></ns1:serviceSelector></ns1:get></ns0:Body></SOAP-ENV:Envelope>'
ERROR:suds.client:<suds.sax.document.Document object at 0x03F01390>
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\site-packages\suds_jurko-0.6-py3.5.egg\suds\transport\http.py", line 82, in send
  File "C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\site-packages\suds_jurko-0.6-py3.5.egg\suds\transport\http.py", line 132, in u2open
  File "C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 471, in open
    response = meth(req, response)
  File "C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 581, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 509, in error
    return self._call_chain(*args)
  File "C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 443, in _call_chain
    result = func(*args)
  File "C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 589, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 500: Internal Server Error

【问题讨论】:

github.com/googleads/googleads-python-lib/issues/10 感谢您的评论。所以,如果我理解正确,在 Python 3.x 中使用 OAuth2 进行身份验证根本不可能? 【参考方案1】:

通过进一步研究解决了这个问题。 Fabrigm 已经帮助我朝着正确的方向前进。谢谢!

Google Adwords API 有多个版本,适用于 Python 2.x 和 3.x。不过,当您在 Github 上获得最新版本时,您将获得适用于 Python 2.x 的 Google 广告 API 的 Python 客户端库。

当您浏览其他 releases of the library 时,您会发现 Python 2.x 和 3.x 的示例。用 Python 3.x 编写的版本运行良好,但(至少对我而言)很容易犯错误并继续使用另一个版本。

我希望这可以帮助其他遇到同样问题的人。

【讨论】:

以上是关于Python Adwords API 身份验证问题的主要内容,如果未能解决你的问题,请参考以下文章

Google Adwords API 身份验证问题

AdWords API:非 MCC 帐户的客户列表

AdWords 范围:使用 OAuth 流程进行身份验证后缺少 gapi.client.adwords。找不到要传递给 gapi.client.request() 的路径变量

使用 Google Adwords API 时出现解组错误

Java 中的 Adwords API、OAuth2 和服务帐户

“Invalid_client”为 Adwords API 生成 oAuth2 令牌