इस गाइड में, क्लाइंट लाइब्रेरी का इस्तेमाल किए बिना, सीधे तौर पर REST एंडपॉइंट को कॉल करने के उदाहरण दिए गए हैं.
कोड के ज़्यादा उदाहरणों के लिए, REST कोड के उदाहरणों वाली GitHub रिपॉज़िटरी देखें.
हर एपीआई तरीके के लिए अनुरोध और जवाब के मुख्य हिस्से देखने के लिए, किसी सेवा के खास एंडपॉइंट के रेफ़रंस दस्तावेज़ देखें.
उदाहरण के लिए, GoogleAdsService.Search के रेफ़रंस पेज पर, Search तरीके के लिए अनुरोध और जवाब के मुख्य हिस्से दिखाए गए हैं.
ज़रूरी शर्तें
यहां दिखाए गए सभी सैंपल को curl कमांड का इस्तेमाल करके, bash shell में कॉपी करके चिपकाया जा सकता है.
आपको डेवलपर टोकन की भी ज़रूरत होगी. साथ ही, टेस्ट खाते का ऐक्सेस होना चाहिए. इसके अलावा, आपके पास कम से कम एक क्लाइंट खाता वाला Google Ads मैनेजर खाता होना चाहिए.
एनवायरमेंट वैरिएबल
दिखाए गए तरीके से खाते के क्रेडेंशियल और आईडी डालें. इसके बाद, उन्हें अपने टर्मिनल में कॉपी करके चिपकाएं. इससे, बाद के उदाहरणों में इस्तेमाल किए गए एनवायरमेंट वैरिएबल कॉन्फ़िगर किए जा सकेंगे. Authorization गाइड में, 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इसके अलावा, बदलाव करता है - उदाहरण बनाता है वाले दो फ़ंक्शन, नया बजट और कैंपेन बनाते हैं.
खोजें
क्वेरी कुकबुक गाइड में, रिपोर्टिंग के कई सैंपल दिए गए हैं. ये सैंपल, Google Ads की कुछ डिफ़ॉल्ट स्क्रीन से मेल खाते हैं. साथ ही, ये इस गाइड में इस्तेमाल किए गए एक ही एनवायरमेंट वैरिएबल के साथ काम करते हैं. इंटरैक्टिव क्वेरी बनाने वाला टूल भी, इंटरैक्टिव तरीके से कस्टम क्वेरी बनाने के लिए एक बेहतरीन संसाधन है.
पेज नंबर डाला गया हो
search तरीके में पेज नंबरिंग का इस्तेमाल किया जाता है. इसमें पेज का साइज़ 10, 000 आइटम पर सेट होता है. साथ ही,query के साथ page_token तय किया जाता है.
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'
बदलाव करता है
operations ऐरे में डेटा डालकर, एक ही JSON अनुरोध के मुख्य हिस्से में कई बदलाव करने के अनुरोध (create, update या remove) भेजे जा सकते हैं.
इससे
इस उदाहरण में, एक ही अनुरोध में कैंपेन के लिए शेयर किए गए दो बजट बनाए गए हैं.
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 तरीके का इस्तेमाल करके नए खाते बनाएं. ध्यान दें कि यूआरएल के लिए, क्लाइंट खाते के आईडी के बजाय मैनेजर खाते के आईडी की ज़रूरत होती है. मैनेजर खाते में एक नया क्लाइंट खाता बनाया जाता है.
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' } }"
ऐक्सेस किए जा सकने वाले खातों की सूची बनाना
listAccessibleCustomers तरीके के लिए, एक सामान्य GET अनुरोध का इस्तेमाल करें. इससे, दिए गए OAuth 2.0 ऐक्सेस टोकन से ऐक्सेस किए जा सकने वाले Google Ads खातों की सूची मिलेगी. इस अनुरोध में, किसी मैनेजर या क्लाइंट खाते के आईडी का इस्तेमाल नहीं किया जाना चाहिए.
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 एन्कोडिंग का इस्तेमाल करके स्ट्रिंग के तौर पर एन्कोड किया जाता है. पैडिंग के साथ या इसके बिना, स्टैंडर्ड या यूआरएल के लिए सुरक्षित base64 कोड में बदलने का तरीका इस्तेमाल किया जा सकता है.
इस उदाहरण में, सैंपल को छोटा रखने के लिए 1 पिक्सल वाले GIF को कोड में बदला गया है. हालांकि, असल में data पेलोड का साइज़ इससे काफ़ी बड़ा होता है.
एक पिक्सल वाली GIF इमेज को एन्कोड करने के लिए, base64 कमांड लाइन यूटिलिटी का इस्तेमाल करें. यह GNU कोर यूटिलिटी का हिस्सा है.
base64 1pixel.gif
base64 कोड में बदली गई वैल्यू को एपीआई अनुरोध में data एट्रिब्यूट के तौर पर तय किया जाता है.
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' } } } ] }"