В этом руководстве приведены примеры прямого вызова REST-эндпоинтов без использования клиентской библиотеки.
Более подробные примеры кода можно найти в репозитории GitHub с примерами кода REST.
Чтобы просмотреть тела запроса и ответа для каждого метода API, обратитесь к справочной документации по конкретным конечным точкам сервиса.
Например, на справочной странице для GoogleAdsService.Search отображаются тела запроса и ответа для метода Search .
Предварительные требования
Все представленные здесь примеры предназначены для копирования и вставки в оболочку bash с помощью команды curl .
Вам также потребуется токен разработчика , доступ к тестовому аккаунту подойдет, а также аккаунт Google Ads Manager, содержащий как минимум один клиентский аккаунт.
переменные окружающей среды
Введите учетные данные и идентификаторы, как показано, а затем скопируйте и вставьте их в терминал, чтобы настроить переменные среды, используемые в последующих примерах. В руководстве по авторизации приведены инструкции по генерации токена доступа OAuth 2.0.
API_VERSION="23"
DEVELOPER_TOKEN="DEVELOPER_TOKEN"
OAUTH2_ACCESS_TOKEN="OAUTH_ACCESS_TOKEN"
MANAGER_CUSTOMER_ID="MANAGER_CUSTOMER_ID"
CUSTOMER_ID="CUSTOMER_ID"Дополнительные необязательные идентификаторы объектов
Некоторые из приведенных ниже примеров работают с уже существующими бюджетами или кампаниями. Если у вас есть идентификаторы существующих объектов, которые можно использовать в этих примерах, введите их, как показано.
BUDGET_ID=BUDGET_ID
CAMPAIGN_ID=CAMPAIGN_IDВ противном случае, два примера Mutates - Creates создают новый бюджет и кампанию.
Поиск
В руководстве Query Cookbook содержится множество примеров отчетов, соответствующих некоторым стандартным экранам Google Ads и работающих с теми же переменными среды, что и в этом руководстве. Наш интерактивный инструмент для создания запросов также является отличным ресурсом для интерактивного создания пользовательских запросов.
Постраничная разбивка
Метод search использует пагинацию с фиксированным размером страницы в 10 000 элементов и указанием page_token рядом с query .
локон
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:search" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data '{ "query": " SELECT campaign.name, campaign_budget.amount_micros, campaign.status, campaign.optimization_score, campaign.advertising_channel_type, metrics.clicks, metrics.impressions, metrics.ctr, metrics.average_cpc, metrics.cost_micros, campaign.bidding_strategy_type FROM campaign WHERE segments.date DURING LAST_7_DAYS AND campaign.status != 'REMOVED' ", "page_token":"${PAGE_TOKEN}" }'
GAQL
SELECT campaign.name, campaign_budget.amount_micros, campaign.status, campaign.optimization_score, campaign.advertising_channel_type, metrics.clicks, metrics.impressions, metrics.ctr, metrics.average_cpc, metrics.cost_micros, campaign.bidding_strategy_type FROM campaign WHERE segments.date DURING LAST_7_DAYS AND campaign.status != 'REMOVED'
Стриминг
Метод searchStream передает все результаты в одном ответе, поэтому поле pageSize не поддерживается.
локон
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:searchStream" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data '{ "query": " SELECT campaign.name, campaign_budget.amount_micros, campaign.status, campaign.optimization_score, campaign.advertising_channel_type, metrics.clicks, metrics.impressions, metrics.ctr, metrics.average_cpc, metrics.cost_micros, campaign.bidding_strategy_type FROM campaign WHERE segments.date DURING LAST_7_DAYS AND campaign.status != 'REMOVED' " }'
GAQL
SELECT campaign.name, campaign_budget.amount_micros, campaign.status, campaign.optimization_score, campaign.advertising_channel_type, metrics.clicks, metrics.impressions, metrics.ctr, metrics.average_cpc, metrics.cost_micros, campaign.bidding_strategy_type FROM campaign WHERE segments.date DURING LAST_7_DAYS AND campaign.status != 'REMOVED'
Мутирует
В одном JSON-запросе можно отправить несколько операций изменения ( create , update или remove ), заполнив массив operations .
Создает
В этом примере создаются два общих бюджета кампании в рамках одного запроса.
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaignBudgets:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'operations': [ { 'create': { 'name': 'My Campaign Budget #${RANDOM}', 'amountMicros': 500000, } }, { 'create': { 'name': 'My Campaign Budget #${RANDOM}', 'amountMicros': 500000, } } ] }"
В следующем примере используется BUDGET_ID существующего бюджета кампании; вы можете скопировать и вставить его из результатов предыдущего шага.
BUDGET_ID=BUDGET_ID Ресурсы, ссылающиеся на другие ресурсы, делают это по имени ресурса . Кампания, созданная в следующем примере, ссылается на объект campaignBudget по его строковому имени ресурса.
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'operations': [ { 'create': { 'status': 'PAUSED', 'advertisingChannelType': 'SEARCH', 'geoTargetTypeSetting': { 'positiveGeoTargetType': 'PRESENCE_OR_INTEREST', 'negativeGeoTargetType': 'PRESENCE_OR_INTEREST' }, 'name': 'My Search campaign #${RANDOM}', 'campaignBudget': 'customers/${CUSTOMER_ID}/campaignBudgets/${BUDGET_ID}', 'targetSpend': {} } } ] }"
Обновления
Обновите атрибуты существующих объектов с помощью операций update . В следующем примере используется существующая кампания; вы можете скопировать и вставить данные из результатов предыдущего шага.
CAMPAIGN_ID=CAMPAIGN_IDДля всех обновлений требуется поле updateMask , представляющее собой разделенный запятыми список JSON-атрибутов, которые должны присутствовать в запросе и применяться в качестве обновления. Атрибуты, перечисленные в updateMask , но отсутствующие в теле запроса, очищаются для объекта. Атрибуты, не перечисленные в updateMask , но присутствующие в теле запроса, игнорируются.
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'operations': [ { 'update': { 'resourceName': 'customers/${CUSTOMER_ID}/campaigns/${CAMPAIGN_ID}', 'name': 'A changed campaign name #${RANDOM}', }, 'updateMask': 'name' } ], }"
Удаляет
Объекты удаляются путем указания их имени ресурса в качестве операции remove .
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'operations': [ { 'remove': 'customers/${CUSTOMER_ID}/campaigns/${CAMPAIGN_ID}' } ], }"
Частичные отказы
Если в одном запросе содержится несколько операций, можно дополнительно указать partialFailure . Если true , выполняются успешные операции, а некорректные возвращают ошибки. Если false , все операции в запросе выполняются успешно только в том случае, если все они корректны.
В следующем примере используется существующая кампания; вы можете скопировать и вставить текст из примера результатов создания .
CAMPAIGN_ID=CAMPAIGN_IDСледующий запрос содержит две операции. Первая пытается изменить стратегию назначения ставок для указанной кампании, а вторая — удалить кампанию с недействительным идентификатором. Поскольку вторая операция приводит к ошибке (идентификатор кампании недействителен), и поскольку partialFailure установлен в false , первая операция также завершается с ошибкой, и стратегия назначения ставок существующей кампании не обновляется.
curl --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'partialFailure': false, 'operations': [ { 'update': { 'resourceName': 'customers/${CUSTOMER_ID}/campaigns/${CAMPAIGN_ID}', 'manualCpc': { 'enhancedCpcEnabled': false } }, 'updateMask': 'manual_cpc.enhanced_cpc_enabled' }, { 'remove': 'customers/${CUSTOMER_ID}/campaigns/INVALID_CAMPAIGN_ID' } ] }"
Сгруппированные операции
Метод googleAds:mutate поддерживает отправку групп операций с ресурсами различных типов. Вы можете отправить множество операций разных типов, чтобы объединить их в последовательность операций, которые должны быть выполнены как группа. Набор операций считается успешным, если ни одна операция не завершилась с ошибкой, или все операции завершаются с ошибкой, если какая-либо из них завершается с ошибкой.
В этом примере показано, как создать бюджет кампании, саму кампанию, группу объявлений и объявление одновременно в рамках одного набора действий. Каждая последующая операция зависит от предыдущей. Если одна из них завершится неудачей, завершится неудачей весь набор операций.
Отрицательные целые числа ( -1 , -2 , -3 ) используются в качестве заполнителей в именах ресурсов и динамически заполняются во время выполнения результатами последовательности операций.
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'mutateOperations': [ { 'campaignBudgetOperation': { 'create': { 'resourceName': 'customers/${CUSTOMER_ID}/campaignBudgets/-1', 'name': 'My Campaign Budget #${RANDOM}', 'deliveryMethod': 'STANDARD', 'amountMicros': 500000, 'explicitlyShared': false } } }, { 'campaignOperation': { 'create': { 'resourceName': 'customers/${CUSTOMER_ID}/campaigns/-2', 'status': 'PAUSED', 'advertisingChannelType': 'SEARCH', 'geoTargetTypeSetting': { 'positiveGeoTargetType': 'PRESENCE_OR_INTEREST', 'negativeGeoTargetType': 'PRESENCE_OR_INTEREST' }, 'name': 'My Search campaign #${RANDOM}', 'campaignBudget': 'customers/${CUSTOMER_ID}/campaignBudgets/-1', 'targetSpend': {} } } }, { 'adGroupOperation': { 'create': { 'resourceName': 'customers/${CUSTOMER_ID}/adGroups/-3', 'campaign': 'customers/${CUSTOMER_ID}/campaigns/-2', 'name': 'My ad group #${RANDOM}', 'status': 'PAUSED', 'type': 'SEARCH_STANDARD' } } }, { 'adGroupAdOperation': { 'create': { 'adGroup': 'customers/${CUSTOMER_ID}/adGroups/-3', 'status': 'PAUSED', 'ad': { 'responsiveSearchAd': { 'headlines': [ { 'pinned_field': 'HEADLINE_1', 'text': 'An example headline' }, { 'text': 'Another example headline' }, { 'text': 'Yet another headline' } ], 'descriptions': [ { 'text': 'An example description' }, { 'text': 'Another example description' } ], 'path1': 'all-inclusive', 'path2': 'deals' }, 'finalUrls': ['https://www.example.com'] } } } } ] }"
Управление учетными записями
Вы можете создавать учетные записи, отображать список доступных учетных записей и загружать бинарные файлы.
Создать учетные записи
Создавайте новые учетные записи с помощью метода createCustomerClient . Обратите внимание, что в URL-адресе требуется идентификатор учетной записи менеджера , а не идентификатор учетной записи клиента. Новая учетная запись клиента создается под учетной записью менеджера.
curl f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${MANAGER_CUSTOMER_ID}:createCustomerClient" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'customerClient': { 'descriptiveName': 'My Client #${RANDOM}', 'currencyCode': 'USD', 'timeZone': 'America/New_York' } }"
Список доступных учетных записей
Для получения списка аккаунтов Google Ads, доступных с помощью предоставленного токена доступа OAuth 2.0, используйте простой GET запрос к методу listAccessibleCustomers . В этом запросе не следует использовать идентификаторы аккаунтов менеджеров или клиентов.
curl -f --request GET "https://googleads.googleapis.com/v${API_VERSION}/customers:listAccessibleCustomers" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
Загрузка бинарных файлов
Метод assets:mutate используется для загрузки и управления ресурсами . Двоичные данные, такие как изображение, кодируются как строка с использованием стандартного кодирования base64 с добавлением заполнения. Принимаются как стандартное, так и URL-безопасное кодирование base64 с добавлением заполнения или без него.
В этом примере для краткости используется GIF-файл размером в 1 пиксель. На практике же объем передаваемых data значительно больше.
Используйте утилиту командной строки base64 (часть основных утилит GNU ) для кодирования GIF-изображения размером в 1 пиксель .
base64 1pixel.gif
Значение, закодированное в формате base64, указывается в качестве атрибута data в запросе к API.
curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/assets:mutate" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data "{ 'operations': [ { 'create': { 'name': 'My image asset #${RANDOM}', 'type': 'IMAGE', 'imageAsset': { 'data': 'R0lGODlhAQABAAAAACH5BAEAAAAALAAAAAABAAEAAAIA' } } } ] }"