Как заставить клиентскую библиотеку Google AdWords API Python работать?

Доступно ли актуальное руководство по использованию клиента AdWords для Python, или если кто-нибудь знает достаточно, чтобы разобрать следующее? Я сделал какую-то ошибку конфигурации или, возможно, Python 2.6 не поддерживается?

В Windows я установил:

  • Питон 2.6
  • setuptools-0.6c11.win32-py2.6.exe
  • PyXML-0.8.4
  • SOAPpy-0.12.4
  • ЗСИ-2.0-rc3
  • adwords_api_python_13.2.0

Я предоставил программе настройки AdWords адрес электронной почты аккаунта Центра клиентов, его пароль, пустой адрес электронной почты и идентификатор клиента, а для токена разработчика тот же адрес электронной почты с добавлением "+USD".

Теперь, если я использую SOAPpy в качестве библиотеки SOAP, я получаю исключение из-за неожиданного параметра ключевого слова timeout, который был предоставлен одной функцией в SOAPpy другой функции в SOAPpy.

Если я использую ZSI в качестве библиотеки SOAP (что я считаю предпочтительным), я получаю следующее исключение:

Traceback (most recent call last):
  File "tutorial.py", line 36, in <module>
    campaigns = campaign_service.Mutate(operations)[0]
  File "c:\Python26\lib\site-packages\adspygoogle\adwords\CampaignService.py", l
ine 112, in Mutate
    'Campaign', self._loc, request)
  File "c:\Python26\lib\site-packages\adspygoogle\adwords\AdWordsWebService.py",
 line 256, in CallMethod
    self.__ManageSoap(buf, start_time, stop_time, error)
  File "c:\Python26\lib\site-packages\adspygoogle\adwords\AdWordsWebService.py",
 line 130, in __ManageSoap
    raise Error(e)
adspygoogle.common.Errors.Error:
Traceback (most recent call last):
  File "c:\Python26\lib\site-packages\adspygoogle\common\WebService.py", line 20
8, in CallMethod
    eval('service.%s(request)' % method_name))
  File "<string>", line 1, in <module>
  File "c:\Python26\lib\site-packages\adspygoogle\adwords\zsi\v201008\CampaignSe
rvice_services.py", line 47, in mutateCampaign
    self.binding.Send(None, None, request, soapaction="", **kw)
  File "build\bdist.win32\egg\ZSI\client.py", line 267, in Send
    self.SendSOAPData(soapdata, url, soapaction, **kw)
  File "build\bdist.win32\egg\ZSI\client.py", line 301, in SendSOAPData
    self.h.send(soapdata)
  File "c:\Python26\lib\site-packages\adspygoogle\common\zsi\HttpsConnectionHand
ler.py", line 93, in send
    httplib.HTTPSConnection.endheaders(self)
  File "c:\Python26\lib\httplib.py", line 892, in endheaders
    self._send_output()
  File "c:\Python26\lib\httplib.py", line 764, in _send_output
    self.send(msg)
  File "c:\Python26\lib\site-packages\adspygoogle\common\zsi\HttpsConnectionHand
ler.py", line 93, in send
    httplib.HTTPSConnection.endheaders(self)
  File "c:\Python26\lib\httplib.py", line 890, in endheaders
    raise CannotSendHeader()
CannotSendHeader [RAW DATA: _________________________________ Tue Mar 08 16:54:4
0 2011 REQUEST:

за которым следует некоторый XML, который я изменил, чтобы удалить идентифицирующие данные:

<SOAP-ENV:Envelope xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xm
lns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ZSI="http://www.z
olera.com/schemas/ZSI/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Header><RequestHeader xmlns
="https://adwords.google.com/api/adwords/cm/v201008"><authToken>XYZ</authToken>
<userAgent>AwApi-Python-13.2.0|XYZ</userAgent><developerTok
en>[email protected]+USD</developerToken></RequestHeader></SOAP-ENV:Header><SO
AP-ENV:Body xmlns:ns1="https://adwords.google.com/api/adwords/cm/v201008"><ns1:m
utate xmlns:ns1="https://adwords.google.com/api/adwords/cm/v201008"><ns1:operati
ons><ns1:operator>ADD</ns1:operator><ns1:operand><ns1:name>Interplanetary Cruise
 #201138165440485000</ns1:name><ns1:status>PAUSED</ns1:status><ns1:endDate>20120
101</ns1:endDate><ns1:budget xsi:type="ns1:Budget"><ns1:period>DAILY</ns1:period
><ns1:amount xsi:type="ns1:Money"><ns1:microAmount>50000000</ns1:microAmount></n
s1:amount><ns1:deliveryMethod>STANDARD</ns1:deliveryMethod></ns1:budget><ns1:bid
dingStrategy xsi:type="ns1:ManualCPC"></ns1:biddingStrategy></ns1:operand></ns1:
operations></ns1:mutate></SOAP-ENV:Body></SOAP-ENV:Envelope>

Мой код ниже:

from adspygoogle.adwords.AdWordsClient import AdWordsClient
from adspygoogle.common import Utils

client = AdWordsClient(path = '../../installers/adwords_api_python_13.2.0.tar/adwords_api_python_13.2.0')

campaign_service = client.GetCampaignService('https://adwords-sandbox.google.com', 'v201008')

operations = [{
    'operator': 'ADD',
    'operand': {
        'name': 'Interplanetary Cruise #%s' % Utils.GetUniqueName(),
        'status': 'PAUSED',
        'biddingStrategy': {
            'type': 'ManualCPC'
        },
        'endDate': '20120101',
        'budget': {
            'period': 'DAILY',
            'amount': {
                'microAmount': '50000000'
            },
            'deliveryMethod': 'STANDARD'
        }
    }
}]

campaigns = campaign_service.Mutate(operations)[0]

# Display results.
for campaign in campaigns['value']:
  print ('Campaign with name \'%s\' and id \'%s\' was added.'
         % (campaign['name'], campaign['id']))

print
print ('Usage: %s units, %s operations' % (client.GetUnits(),
                                           client.GetOperations()))

Обратите внимание, что код руководства на странице http://code.google.com/apis/adwords/docs/tutorial.html даже немного не работает, в текущей версии клиента нет такой вещи, как aw_api.Client. Но приведенное выше в основном скопировано из учебника.

Примеры, предоставленные вместе с клиентом, приводят к той же ошибке.

Я мог бы попробовать более старую клиентскую библиотеку, если текущая просто сломана, хотя, если это имеет значение, мне понадобится библиотека, поддерживающая TargetingIdeaService.

[Редактировать: о, извините, я забыл сказать, что на самом деле редактировал код клиента AdWords. В Utils.GetDataFromCsvFile я удалил .replace(':','|') из строки, которая создает URL-адрес файла, переданный urllib.urlopen.

Вот что заставляет меня подозревать, что моя версия Python может не поддерживаться, поскольку Windows Python 2.6, похоже, не смог открыть URL-адрес file:///c|/foo/bar/baz/]


person Steve Jessop    schedule 08.03.2011    source источник
comment
Можете ли вы опубликовать запрос мыла и ответ на ошибки? Если его вообще отправить?   -  person JiminyCricket    schedule 08.03.2011
comment
@JiminyCricket: я отредактировал вопрос, добавив XML-сообщение вместе с исключением. Это то, что вы имеете в виду, или где-то скрыты дополнительные данные журнала?   -  person Steve Jessop    schedule 08.03.2011


Ответы (1)


Вы пробовали с ZSI-2.0? Этот отчет о проблеме похож на http://code.google.com/p/google-api-adwords-python-lib/issues/detail?id=141. Пожалуйста, добавьте свою информацию в отчет об ошибке, если вы продолжаете видеть эту проблему.

Что касается устаревшего кода учебника, хороший улов! Я исправлю это в ближайшее время. Отслеживайте на http://code.google.com/p/google-api-adwords-python-lib/issues/detail?id=152.

person Stan    schedule 09.03.2011
comment
Спасибо, я попробую это и вернусь к вам. Я не понимал, что 2.0-rc3 не последняя версия - я думаю, они отказались от pypi (или pypi отказались от них, в зависимости от того, как это работает). - person Steve Jessop; 09.03.2011