این راهنما شامل نمونههایی از فراخوانی مستقیم نقاط پایانی REST، بدون استفاده از کتابخانه کلاینت است.
پیشنیازها
تمام نمونههای نشان داده شده در اینجا برای کپی کردن و چسباندن در پوسته bash با استفاده از دستور curl در نظر گرفته شدهاند.
شما همچنین به یک توکن توسعهدهنده ، دسترسی به حساب آزمایشی و یک حساب مدیریت تبلیغات گوگل که حداقل شامل یک حساب کاربری باشد، نیاز دارید.
متغیرهای محیطی
اطلاعات حساب کاربری و شناسهها را همانطور که نشان داده شده است وارد کنید و سپس آنها را کپی کرده و در ترمینال خود قرار دهید تا متغیرهای محیطی مورد استفاده در مثالهای بعدی پیکربندی شوند. راهنمای مجوز ، دستورالعملهایی برای تولید یک توکن دسترسی OAuth 2.0 ارائه میدهد.
API_VERSION="22"
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
از صفحهبندی استفاده میکند، با اندازه صفحه ثابت ۱۰۰۰۰ مورد و یک 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}" }'
جیکیوال
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'
حلقه زدن
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' " }'
جیکیوال
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
) را میتوان با پر کردن آرایه operations
در یک بدنه درخواست JSON ارسال کرد.
ایجاد میکند
این مثال دو بودجه کمپین مشترک را در یک درخواست واحد ایجاد میکند.
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
برای دریافت لیستی از حسابهای گوگل ادز که با توکن دسترسی 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 کدگذاری میشوند. کدگذاری استاندارد یا base64 ایمن برای URL با یا بدون padding پذیرفته میشود.
این مثال یک GIF یک پیکسلی را کدگذاری میکند تا نمونه مختصر بماند. در عمل، حجم data
بسیار بیشتر است.
از ابزار خط فرمان base64
(بخشی از ابزارهای اصلی GNU ) برای رمزگذاری یک تصویر GIF با اندازه ۱ پیکسل استفاده کنید.
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' } } } ] }"
این راهنما شامل نمونههایی از فراخوانی مستقیم نقاط پایانی REST، بدون استفاده از کتابخانه کلاینت است.
پیشنیازها
تمام نمونههای نشان داده شده در اینجا برای کپی کردن و چسباندن در پوسته bash با استفاده از دستور curl در نظر گرفته شدهاند.
شما همچنین به یک توکن توسعهدهنده ، دسترسی به حساب آزمایشی و یک حساب مدیریت تبلیغات گوگل که حداقل شامل یک حساب کاربری باشد، نیاز دارید.
متغیرهای محیطی
اطلاعات حساب کاربری و شناسهها را همانطور که نشان داده شده است وارد کنید و سپس آنها را کپی کرده و در ترمینال خود قرار دهید تا متغیرهای محیطی مورد استفاده در مثالهای بعدی پیکربندی شوند. راهنمای مجوز ، دستورالعملهایی برای تولید یک توکن دسترسی OAuth 2.0 ارائه میدهد.
API_VERSION="22"
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
از صفحهبندی استفاده میکند، با اندازه صفحه ثابت ۱۰۰۰۰ مورد و یک 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}" }'
جیکیوال
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'
حلقه زدن
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' " }'
جیکیوال
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
) را میتوان با پر کردن آرایه operations
در یک بدنه درخواست JSON ارسال کرد.
ایجاد میکند
این مثال دو بودجه کمپین مشترک را در یک درخواست واحد ایجاد میکند.
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
برای دریافت لیستی از حسابهای گوگل ادز که با توکن دسترسی 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 کدگذاری میشوند. کدگذاری استاندارد یا base64 ایمن برای URL با یا بدون padding پذیرفته میشود.
این مثال یک GIF یک پیکسلی را کدگذاری میکند تا نمونه مختصر بماند. در عمل، حجم data
بسیار بیشتر است.
از ابزار خط فرمان base64
(بخشی از ابزارهای اصلی GNU ) برای رمزگذاری یک تصویر GIF با اندازه ۱ پیکسل استفاده کنید.
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' } } } ] }"
این راهنما شامل نمونههایی از فراخوانی مستقیم نقاط پایانی REST، بدون استفاده از کتابخانه کلاینت است.
پیشنیازها
تمام نمونههای نشان داده شده در اینجا برای کپی کردن و چسباندن در پوسته bash با استفاده از دستور curl در نظر گرفته شدهاند.
شما همچنین به یک توکن توسعهدهنده ، دسترسی به حساب آزمایشی و یک حساب مدیریت تبلیغات گوگل که حداقل شامل یک حساب کاربری باشد، نیاز دارید.
متغیرهای محیطی
اطلاعات حساب کاربری و شناسهها را همانطور که نشان داده شده است وارد کنید و سپس آنها را کپی کرده و در ترمینال خود قرار دهید تا متغیرهای محیطی مورد استفاده در مثالهای بعدی پیکربندی شوند. راهنمای مجوز ، دستورالعملهایی برای تولید یک توکن دسترسی OAuth 2.0 ارائه میدهد.
API_VERSION="22"
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
از صفحهبندی استفاده میکند، با اندازه صفحه ثابت ۱۰۰۰۰ مورد و یک 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}" }'
جیکیوال
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'
حلقه زدن
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' " }'
جیکیوال
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
) را میتوان با پر کردن آرایه operations
در یک بدنه درخواست JSON ارسال کرد.
ایجاد میکند
این مثال دو بودجه کمپین مشترک را در یک درخواست واحد ایجاد میکند.
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
برای دریافت لیستی از حسابهای گوگل ادز که با توکن دسترسی 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 کدگذاری میشوند. کدگذاری استاندارد یا base64 ایمن برای URL با یا بدون padding پذیرفته میشود.
این مثال یک GIF یک پیکسلی را کدگذاری میکند تا نمونه مختصر بماند. در عمل، حجم data
بسیار بیشتر است.
از ابزار خط فرمان base64
(بخشی از ابزارهای اصلی GNU ) برای رمزگذاری یک تصویر GIF با اندازه ۱ پیکسل استفاده کنید.
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' } } } ] }"
این راهنما شامل نمونههایی از فراخوانی مستقیم نقاط پایانی REST، بدون استفاده از کتابخانه کلاینت است.
پیشنیازها
تمام نمونههای نشان داده شده در اینجا برای کپی کردن و چسباندن در پوسته bash با استفاده از دستور curl در نظر گرفته شدهاند.
شما همچنین به یک توکن توسعهدهنده ، دسترسی به حساب آزمایشی و یک حساب مدیریت تبلیغات گوگل که حداقل شامل یک حساب کاربری باشد، نیاز دارید.
متغیرهای محیطی
اطلاعات حساب کاربری و شناسهها را همانطور که نشان داده شده است وارد کنید و سپس آنها را کپی کرده و در ترمینال خود قرار دهید تا متغیرهای محیطی مورد استفاده در مثالهای بعدی پیکربندی شوند. راهنمای مجوز ، دستورالعملهایی برای تولید یک توکن دسترسی OAuth 2.0 ارائه میدهد.
API_VERSION="22"
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
از صفحهبندی استفاده میکند، با اندازه صفحه ثابت ۱۰۰۰۰ مورد و یک 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}" }'
جیکیوال
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'
حلقه زدن
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' " }'
جیکیوال
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
) را میتوان با پر کردن آرایه operations
در یک بدنه درخواست JSON ارسال کرد.
ایجاد میکند
این مثال دو بودجه کمپین مشترک را در یک درخواست واحد ایجاد میکند.
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
برای دریافت لیستی از حسابهای گوگل ادز که با توکن دسترسی 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 کدگذاری میشوند. کدگذاری استاندارد یا base64 ایمن برای URL با یا بدون padding پذیرفته میشود.
این مثال یک GIF یک پیکسلی را کدگذاری میکند تا نمونه مختصر بماند. در عمل، حجم data
بسیار بیشتر است.
از ابزار خط فرمان base64
(بخشی از ابزارهای اصلی GNU ) برای رمزگذاری یک تصویر GIF با اندازه ۱ پیکسل استفاده کنید.
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' } } } ] }"