این راهنما شامل نمونه هایی از فراخوانی مستقیم نقاط انتهایی REST بدون استفاده از کتابخانه مشتری است.
پیش نیازها
تمام نمونههای زیر با استفاده از دستور curl باید در یک پوسته bash کپی و جایگذاری شوند.
همچنین به یک رمز توسعه دهنده نیاز دارید، دسترسی به حساب آزمایشی خوب است و یک حساب مدیر Google Ads حاوی حداقل یک حساب مشتری.
متغیرهای محیطی
اعتبارنامه ها و شناسه های حساب را در زیر وارد کنید و سپس در ترمینال خود کپی و جایگذاری کنید تا متغیرهای محیطی استفاده شده در مثال های بعدی را پیکربندی کنید. راهنمای مجوز دستورالعملهایی را برای ایجاد نشانه دسترسی 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"
شناسههای شی اختیاری اضافی
برخی از مثالهای زیر روی بودجهها یا کمپینهای از قبل موجود کار میکنند. اگر شناسه اشیاء موجود برای استفاده با این مثال ها دارید، آنها را در زیر وارد کنید.
BUDGET_ID=BUDGET_ID
CAMPAIGN_ID=CAMPAIGN_ID
در غیر این صورت، دو نمونه Mutates - Creates یک بودجه و کمپین جدید ایجاد می کنند.
جستجو کنید
راهنمای Query Cookbook شامل نمونههای گزارش بسیاری است که با برخی از صفحههای پیشفرض Google Ads مطابقت دارد و با متغیرهای محیطی مشابهی که در این راهنما استفاده شده است کار میکند. ابزار سازنده پرس و جو تعاملی ما همچنین یک منبع عالی برای ایجاد پرس و جوهای سفارشی به صورت تعاملی است.
صفحه بندی شده
روش search
از صفحه بندی استفاده می کند، با اندازه صفحه ثابت 10000 مورد و یک page_token
که در کنار 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}" }'
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
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'
جهش می یابد
چندین عملیات جهش ( create
، update
، یا remove
) را می توان در یک بدنه درخواست JSON با پر کردن آرایه 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
، همه عملیات در درخواست موفق می شوند اگر و تنها در صورتی که همه آنها معتبر باشند.
مثال بعدی از یک کمپین موجود استفاده می کند. می توانید از خروجی Creates نمونه کپی و جایگذاری کنید.
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' } }"
فهرست کردن حساب های قابل دسترسی
از یک درخواست ساده GET
به روش listAccessibleCustomers
استفاده کنید تا فهرستی از حسابهای Google Ads را که با نشانه دسترسی OAuth 2.0 قابل دسترسی هستند، دریافت کنید. هیچ شناسه حساب مدیر یا مشتری نباید در این درخواست استفاده شود.
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 با padding کدگذاری می شوند. کدگذاری استاندارد یا ایمن URL base64 با یا بدون بالشتک پذیرفته می شود.
این مثال یک GIF 1 پیکسلی را رمزگذاری می کند تا نمونه را مختصر نگه دارد. در عمل، حجم data
ها بسیار بزرگتر است.
از ابزار خط فرمان base64
(بخشی از ابزارهای هسته گنو ) برای رمزگذاری یک تصویر 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' } } } ] }"