Автоматизируем рекламу. Adwords API. Часть 1

Leonid Guryev
5 min readOct 23, 2017

--

Всем привет! Это первая статья в цикле. Для начала представлюсь. Меня зовут Леонид, я работаю в Chocofamily, занимаюсь маркетингом в проекте Chocofood.

Хочу сразу оправдать себя, я в первую очередь маркетолог, и программировать не умею, но учусь и стараюсь. Поэтому эти статьи не претендуют на истину в последней инстанции, а качество написанного говнокода оставляет желать лучшего. Основная цель всего этого — показать маркетолагам, что учить питон и другие штуки это классно, и сильно поможет в работе.

Итак, начинаем. Мы будем использовать для автоматизации Python 2.7 и официальную библиотеку для работы с Adwords от Google. Ссылка для скачивания, изучения примеров и т.д.: https://github.com/googleads/googleads-python-lib

Устанавливаем Python, если у вас его нет. В интернете миллиард гайдов, как это сделать.

Далее устанавливаем библиотеку для работы с Adwords, под названием GoogleAds. В консоли пишем:

$ pip install googleads

Результат должен быть таким:

3. Другие библиотеки, которые необходимы для корректной работы GoogleAds (при установке через pip устанавливаются автоматически):

- httplib2             -- https://pypi.python.org/pypi/httplib2/
- oauth2client -- https://pypi.python.org/pypi/oauth2client/
- suds-jurko -- https://pypi.python.org/pypi/suds-jurko/
- pysocks -- https://pypi.python.org/pypi/PySocks/
- pytz -- https://pypi.python.org/pypi/pytz
- pyYAML -- https://pypi.python.org/pypi/pyYAML/
- xmltodict -- https://pypi.python.org/pypi/xmltodict/
- mock -- https://pypi.python.org/pypi/mock
(only needed to run unit tests)
- pyfakefs -- https://pypi.python.org/pypi/pyfakefs
(only needed to run unit tests)

4. Теперь самое интересное: авторизация.

Для того чтоб работать с API, вам нужен токен разработчика, client id, client secret, refresh token и номер клиента.

Для того, чтобы получит токен разработчика, мы регистрируем Центр клиентов (MCC), заходим в “Настройки” > “Центр Adwords API”, и там заполняем форму для получения токена:

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

Ну и, как вы понимаете, вам теперь необходим тестовый центр клиентов (тестовый MCC аккаунт), для этого нужно зарегистрировать новый gmail аккаунт и перейти по ссылке: https://adwords.google.com/um/StartNewMccAccount?testAccount=true

В результате вы должны получить такой MCC акк с красной плашкой, предупреждающей о том, что это тестовый аккаунт (в нем лучше сразу завести тестового клиента, с тестовой кампанией):

Переходим к получению client_id, client_secret (они нужны и для тестового аккаунта, и для боевого):

Идем по адресу: console.cloud.google.com. Авторизуемся с почты, на которой зарегистрирован тестовый MCC.

Регистрируем новый проект:

Для этого жмем на “Выберите проект” и жмем на +

После этого заходим в раздел «Credentials» или «Учетные данные» в боковом меню, и в открывшемся разделе жмем «Create credentials» (создать учетные данные) > oAuth Client ID. В “Application type” выбираем “Other”. Если все успешно, выскочит окошко с client id и client secret.

Отлично, теперь у нас есть токен разработчика, клиент айди и секрет. Нужен рефреш токен. Для этого создаем .py файл с этим кодом:

import argparse

import sys

from oauth2client import client

# Your OAuth2 Client ID and Secret. If you do not have an ID and Secret yet,

# please go to https://console.developers.google.com and create a set.

DEFAULT_CLIENT_ID = ‘ВСТАВЬТЕ ВАШ CLIENT ID’

DEFAULT_CLIENT_SECRET = ‘ВСТАВЬТЕ ВАШ CLIENT SECRET’

# The AdWords API OAuth2 scope.

SCOPE = u’https://www.googleapis.com/auth/adwords'

parser = argparse.ArgumentParser(description=’Generates a refresh token with ‘

‘the provided credentials.’)

parser.add_argument(‘ — client_id’, default=DEFAULT_CLIENT_ID,

help=’Client Id retrieved from the Developer\’s Console.’)

parser.add_argument(‘ — client_secret’, default=DEFAULT_CLIENT_SECRET,

help=’Client Secret retrieved from the Developer\’s ‘

‘Console.’)

parser.add_argument(‘ — additional_scopes’, default=None,

help=’Additional scopes to apply when generating the ‘

‘refresh token. Each scope should be separated by a comma.’)

def main(client_id, client_secret, scopes):

“””Retrieve and display the access and refresh token.”””

flow = client.OAuth2WebServerFlow(

client_id=client_id,

client_secret=client_secret,

scope=scopes,

user_agent=’Ads Python Client Library’,

redirect_uri=’urn:ietf:wg:oauth:2.0:oob’)

authorize_url = flow.step1_get_authorize_url()

print (‘Log into the Google Account you use to access your AdWords account’

‘and go to the following URL: \n%s\n’ % (authorize_url))

print ‘After approving the token enter the verification code (if specified).’

code = raw_input(‘Code: ‘).strip()

try:

credential = flow.step2_exchange(code)

except client.FlowExchangeError, e:

print ‘Authentication has failed: %s’ % e

sys.exit(1)

else:

print (‘OAuth2 authorization successful!\n\n’

‘Your access token is:\n %s\n\nYour refresh token is:\n %s’

% (credential.access_token, credential.refresh_token))

if __name__ == ‘__main__’:

args = parser.parse_args()

configured_scopes = [SCOPE]

if not (any([args.client_id, DEFAULT_CLIENT_ID]) and

any([args.client_secret, DEFAULT_CLIENT_SECRET])):

raise AttributeError(‘No client_id or client_secret specified.’)

if args.additional_scopes:

configured_scopes.extend(args.additional_scopes.replace(‘ ‘, ‘’).split(‘,’))

main(args.client_id, args.client_secret, configured_scopes)

Запустим его через консоль, предварительно вставив client_id&client_secret в нужные поля, в результате вы получите ссылку:

В 3ей строке пример моей ссылки

Перейдя по ней, нужно выбрать аккаунт, на который зарегистрирован тестовый MCC.

После выбора вы получите код:

Его нужно вставить в консоль, в результате вы получите ваш refresh token:

В будущем, когда вы получите базовый доступ для вашего токена разработчика, все эти манипуляции нужно будет повторить для основного MCC аккаунта.

Потненько, но мы почти у цели. У нас есть все, чтобы сделать первый запрос, а именно: получить список компаний в моем аккаунте.

Как это сделать, я расскажу во второй статье.­

P.S. Мне лень замазывать токены, ключи и прочую лабуду, так что после публикация я их просто удалю.

--

--