Ten przewodnik zawiera przykłady bezpośredniego wywoływania punktów końcowych REST, bez za pomocą biblioteki klienckiej.
Wymagania wstępne
Wszystkie poniższe przykłady należy skopiować i wkleić do bash”. shell za pomocą polecenia curl.
Potrzebny jest też token programisty, test dostępu do konta oraz konto menedżera Google Ads, które ma co najmniej 1 konto klienta;
Zmienne środowiskowe
Podaj dane logowania i identyfikatory konta poniżej, a następnie skopiuj je i wklej w terminala do skonfigurowania zmiennych środowiskowych używanych w kolejnych przykładach. Przewodnik Autoryzacja zawiera instrukcje generowania Token dostępu OAuth 2.0.
API_VERSION="17"
DEVELOPER_TOKEN="DEVELOPER_TOKEN"
OAUTH2_ACCESS_TOKEN="OAUTH_ACCESS_TOKEN"
MANAGER_CUSTOMER_ID="MANAGER_CUSTOMER_ID"
CUSTOMER_ID="CUSTOMER_ID"
Dodatkowe opcjonalne identyfikatory obiektów
Niektóre z poniższych przykładów dotyczą istniejących budżetów lub kampanii. Jeśli masz identyfikatory istniejących obiektów, których chcesz użyć w tych przykładach, wpisz je poniżej.
BUDGET_ID=BUDGET_ID
CAMPAIGN_ID=CAMPAIGN_ID
W przeciwnym razie 2 warunki mutacje – tworzy przykłady utworzą nowy budżet. i kampanii.
Szukaj
Przewodnik Query Cookbook zawiera wiele rodzajów raportów które odpowiadają niektórym z domyślnych ekranów Google Ads i działają takich samych zmiennych środowiskowych, które są używane w tym przewodniku. Nasze interaktywne zapytanie ale też świetnym narzędziem do interaktywnego tworzenia niestandardowych zapytań.
Z podziałem na strony
Metoda search
korzysta z podziału na strony ze stałym rozmiarem strony wynoszącym 10 000 elementów
page_token
określonego obok query
.
cURL
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}" }'
Ocena 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'
Streaming
Metoda searchStream
przesyła strumieniowo wszystkie wyniki w ramach jednej odpowiedzi, więc
Pole pageSize
nie jest obsługiwane.
cURL
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' " }'
Ocena 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'
Mutacje
W jednym żądaniu można wysłać wiele operacji mutacji (create
, update
lub remove
)
pojedyncze żądanie JSON, wypełniając tablicę operations
.
Tworzy
W tym przykładzie tworzymy 2 budżety kampanii w jednym żądaniu.
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, } } ] }"
W następnym przykładzie użyto elementu BUDGET_ID
obecnego budżetu kampanii. możesz
a następnie skopiuj i wklej dane wyjściowe z poprzedniego kroku.
BUDGET_ID=BUDGET_ID
Zasoby odwołujące się do innych zasobów, robią to przez
nazwa zasobu. Kampania utworzona poniżej
odnosi się do elementu campaignBudget
za pomocą nazwy zasobu z wartością ciągów.
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': {} } } ] }"
Aktualizacje
Aktualizuj atrybuty istniejących obiektów za pomocą operacji update
. Następny
Wykorzystuje w tym przykładzie istniejącą kampanię. możesz skopiować i wkleić
poprzedni tekst
z danym krokiem.
CAMPAIGN_ID=CAMPAIGN_ID
Wszystkie aktualizacje wymagają pola updateMask
z listą wartości rozdzielonych przecinkami
które atrybuty JSON powinny znaleźć się w żądaniu, które należy zastosować jako
. Atrybuty wymienione w żądaniu updateMask
, których nie ma w żądaniu
obiektu. Atrybuty, które nie są wymienione w tabeli updateMask
, ale występują
są ignorowane.
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' } ], }"
Usuń
Obiekty są usuwane, określając nazwę ich zasobu w operacji 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}' } ], }"
Niepowodzenia częściowe
Jeśli w jednym żądaniu znajduje się wiele operacji, możesz opcjonalnie określić
partialFailure
W przypadku wartości true
wykonywane są udane operacje
nieprawidłowe operacje zwracają błędy. Jeśli false
, wszystkie operacje w żądaniu
tylko wtedy, gdy są prawidłowe.
W następnym przykładzie mamy kampanię, możesz kopiować i wklejać zawartość Tworzy przykładowe dane wyjściowe.
CAMPAIGN_ID=CAMPAIGN_ID
To żądanie zawiera 2 operacje. Pierwsze próby zmiany wartości
daną kampanię, a kolejna usiłuje usunąć
kampanii o nieprawidłowym identyfikatorze. Ponieważ druga operacja zakończy się błędem (parametr
identyfikator kampanii jest nieprawidłowy), a ponieważ partialFailure
ma wartość false
, makro
pierwsza operacja też się nie powiedzie, a strategia ustalania stawek w bieżącej kampanii jest
nie zaktualizowano.
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' } ] }"
Operacje zgrupowane
Metoda googleAds:mutate
obsługuje wysyłanie grup operacji z parametrem
wiele typów zasobów. Do
połączyć w jedną sekwencję działań, które powinny zostać wykonane jako grupa.
Zbiór operacji kończy się powodzeniem, jeśli żadna operacja nie powiedzie się, lub wszystkie w przypadku niepowodzenia
jednej operacji kończy się niepowodzeniem.
Ten przykład pokazuje, jak utworzyć budżet kampanii, kampanię, grupę reklam reklamy w ramach jednego zestawu działań. Każda kolejna operacja zależy niż poprzednia. Jeśli w jednym przypadku wystąpi błąd, cała grupa operacji zakończy się niepowodzeniem.
Ujemne liczby całkowite (-1
, -2
, -3
) są używane jako obiekty zastępcze w zasobie
są wypełniane dynamicznie w czasie działania przy użyciu wyników z sekwencji
operacji.
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'] } } } } ] }"
Zarządzanie kontem
Tworzenie kont
Utwórz nowe konta za pomocą metody createCustomerClient
. Pamiętaj, że adres URL
wymaga identyfikatora konta menedżera zamiast identyfikatora konta klienta. Nowy klient
konto zostaje utworzone z poziomu konta menedżera.
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' } }"
Konta dostępne do wyświetlania informacji o produktach
Użyj prostego żądania GET
do metody listAccessibleCustomers
, aby uzyskać listę
kont Google Ads dostępnych przy użyciu danego tokena dostępu OAuth 2.0. Brak menedżera
lub konta klienta.
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}" \
Przesyłanie zasobów binarnych
Metoda assets:mutate
służy do przesyłania i zarządzania
Komponenty. Dane binarne, na przykład obrazy, są kodowane jako
ciąg znaków w standardowym kodowaniu base64 z dopełnieniem. Może to być
Dozwolone jest bezpieczne w adresie URL kodowanie base64 z dopełnieniem lub bez niego.
W tym przykładzie koduje się GIF-a o szerokości 1 piksela, by zachować zwięzłość. W praktyce
Ładunki typu data
są znacznie większe.
Użyj narzędzia wiersza poleceń base64
(część
Podstawowe narzędzia GNU)
do zakodowania obrazu GIF o rozdzielczości 1 piksela.
base64 1pixel.gif
Wartość zakodowana w formacie base64 jest określana jako atrybut data
w żądaniu do interfejsu 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' } } } ] }"