इस पेज पर, Google Ads स्क्रिप्ट के साथ डेवलप करने के सबसे सही तरीकों के बारे में बताया गया है.
सिलेक्टर
सिलेक्टर की मदद से फ़िल्टर करना
जब भी हो सके, सिर्फ़ उन इकाइयों का अनुरोध करने के लिए फ़िल्टर का इस्तेमाल करें जिनकी आपको ज़रूरत है. लागू किया जा रहा है सही फ़िल्टर के नीचे दिए गए फ़ायदे हैं:
- यह कोड समझने में आसान और आसान है.
- स्क्रिप्ट ज़्यादा तेज़ी से चलेगी.
इन कोड स्निपेट की तुलना करें:
कोडिंग का तरीका | कोड स्निपेट |
---|---|
सिलेक्टर का इस्तेमाल करके फ़िल्टर करना (सुझाया गया) |
var keywords = AdsApp.keywords() .withCondition('Clicks > 10') .forDateRange('LAST_MONTH') .get(); while (keywords.hasNext()) { var keyword = keywords.next(); // Do work here. } |
कोड में फ़िल्टर करें (हम इसका सुझाव नहीं देते) |
var keywords = AdsApp.keywords().get(); while (keywords.hasNext()) { var keyword = keywords.next(); var stats = keyword.getStatsFor( 'LAST_MONTH'); if (stats.getClicks() > 10) { // Do work here. } } |
दूसरे तरीके का सुझाव नहीं दिया जाता है, क्योंकि यह सूची को फिर से पाने की कोशिश करता है ध्यान रखें कि सूची पर फ़िल्टर लागू करना है.
कैंपेन की हैरारकी को ट्रैवर्स करने से बचना
अगर आपको किसी खास लेवल पर इकाइयां वापस लानी हैं, तो कैंपेन की पूरी हैरारकी को ट्रैवर्स करने के बजाय, उस लेवल पर कलेक्शन के तरीके का इस्तेमाल करें. यह तरीका आसान होने के साथ-साथ, बेहतर परफ़ॉर्म भी करेगा: सिस्टम को सभी कैंपेन और विज्ञापन ग्रुप को पढ़ने की ज़रूरत नहीं पड़ेगी.
नीचे दिए गए कोड स्निपेट की तुलना करें. ये कोड आपके विज्ञापन के सभी विज्ञापनों को दिखाते हैं खाता:
कोडिंग का तरीका | कोड स्निपेट |
---|---|
इकट्ठा करने का सही तरीका इस्तेमाल करना (सुझाया गया) |
var ads = AdsApp.ads(); |
क्रम के हिसाब से क्रम में आगे बढ़ें (इसका सुझाव नहीं दिया जाता) |
var campaigns = AdsApp.campaigns().get(); while (campaigns.hasNext()) { var adGroups = campaigns.next(). adGroups().get(); while (adGroups.hasNext()) { var ads = adGroups.next().ads().get(); // Do your work here. } } |
दूसरे तरीके का सुझाव नहीं दिया जाता है, क्योंकि यह पूरी प्रोसेस को फ़ेच करने की कोशिश करता है ऑब्जेक्ट (कैंपेन, विज्ञापन ग्रुप) के क्रम, जबकि सिर्फ़ विज्ञापनों की ज़रूरत होती है.
माता-पिता के लिए, निजी डेटा ऐक्सेस करने के खास तरीकों का इस्तेमाल करना
कभी-कभी, आपको वापस लाए गए ऑब्जेक्ट की पैरंट इकाई को पाने की ज़रूरत पड़ती है. इस मामले में, आपको पूरे हैरारकी को फ़ेच करने के बजाय, दिए गए ऐक्सेसर तरीके का इस्तेमाल करना चाहिए.
नीचे दिए गए कोड स्निपेट की तुलना करें. ये उन विज्ञापन समूहों को फिर से हासिल करते हैं जो पिछले महीने 50 से ज़्यादा क्लिक वाले टेक्स्ट विज्ञापन:
कोडिंग का तरीका | कोड स्निपेट |
---|---|
माता-पिता के लिए सही ऐक्सेस करने का तरीका इस्तेमाल करना (इसका सुझाव दिया जाता है) |
var ads = AdsApp.ads() .withCondition('Clicks > 50') .forDateRange('LAST_MONTH') .get(); while (ads.hasNext()) { var ad = ads.next(); var adGroup = ad.getAdGroup(); var campaign = ad.getCampaign(); // Store (campaign, adGroup) to an array. } |
क्रम को पार करें (इसका सुझाव नहीं दिया जाता) |
var campaigns = AdsApp.campaigns().get(); while (campaigns.hasNext()) { var adGroups = campaigns.next() .adGroups() .get(); while (adGroups.hasNext()) { var ads = adGroups.ads() .withCondition('Clicks > 50') .forDateRange('LAST_MONTH') .get(); if (ads.totalNumEntities() > 0) { // Store (campaign, adGroup) to an array. } } } |
दूसरे तरीके का सुझाव नहीं दिया जाता है, क्योंकि इससे पूरे कैंपेन को फ़ेच किया जाता है और विज्ञापन समूह पदानुक्रमों को देख सकते हैं, जबकि आपको सिर्फ़ जो आपके विज्ञापनों के सेट से संबद्ध अभियान और विज्ञापन समूह हैं. पहला तरीका खुद को सिर्फ़ काम के विज्ञापनों के कलेक्शन को फ़ेच करने से रोकता है और यह इसके पैरंट ऑब्जेक्ट को ऐक्सेस करने का सही तरीका है.
खास पैरंट फ़िल्टर का इस्तेमाल करना
किसी कैंपेन या विज्ञापन ग्रुप में मौजूद इकाइयों को ऐक्सेस करने के लिए, फ़िल्टर करने की सुविधा मिलती है.
टेक्स्ट विज्ञापनों की सूची फिर से पाने वाले इन कोड स्निपेट की तुलना करें किसी खास कैंपेन और विज्ञापन समूह में, जिसे आखिरी 50 से ज़्यादा क्लिक मिले हों महीना.
कोडिंग का तरीका | कोड स्निपेट |
---|---|
माता-पिता के लेवल के सही फ़िल्टर का इस्तेमाल करना (इसका सुझाव दिया जाता है) |
var ads = AdsApp.ads() .withCondition('CampaignName = "Campaign 1"') .withCondition('AdGroupName = "AdGroup 1"') .withCondition('Clicks > 50') .forDateRange('LAST_MONTH') .get(); while (ads.hasNext()) { var ad = ads.next(); var adGroup = ad.getAdGroup(); var campaign = ad.getCampaign(); // Store (campaign, adGroup, ad) to // an array. } |
क्रम को पार करें (इसका सुझाव नहीं दिया जाता) |
var campaigns = AdsApp.campaigns() .withCondition('Name = "Campaign 1"') .get(); while (campaigns.hasNext()) { var adGroups = campaigns.next() .adGroups() .withCondition('Name = "AdGroup 1"') .get(); while (adGroups.hasNext()) { var ads = adGroups.ads() .withCondition('Clicks > 50') .forDateRange('LAST_MONTH') .get(); while (ads.hasNext()) { var ad = ads.next(); // Store (campaign, adGroup, ad) to // an array. } } } |
दूसरे तरीके का सुझाव नहीं दिया जाता, क्योंकि यह आपके खाते में कैंपेन और विज्ञापन ग्रुप की हैरारकी पर आधारित होता है. हालांकि, आपको सिर्फ़ विज्ञापनों के चुने गए सेट और उनके पैरंट कैंपेन और विज्ञापन ग्रुप की ज़रूरत होती है. पहले तरीके में, सिलेक्टर पर पैरंट इकाइयों के लिए कोई खास फ़िल्टर लागू करके, विज्ञापनों की सूची में दोहराव को सीमित किया जाता है.
जब हो सके, तब फ़िल्टर करने के लिए आईडी का इस्तेमाल करें
इकाइयों को फ़िल्टर करते समय, अन्य फ़ील्ड के बजाय उनके आईडी के हिसाब से फ़िल्टर करना बेहतर होता है.
कैंपेन चुनने वाले इन कोड स्निपेट पर विचार करें.
कोडिंग का तरीका | कोड स्निपेट |
---|---|
आईडी के हिसाब से फ़िल्टर करें (इसका सुझाव दिया जाता है) |
var campaign = AdsApp.campaigns() .withIds([12345]) .get() .next(); |
नाम के हिसाब से फ़िल्टर करना (कम बेहतर) |
var campaign = AdsApp.campaigns() .withCondition('Name="foo"') .get() .next(); |
दूसरा तरीका कम बेहतर है, क्योंकि हम बिना आईडी वाले फ़ील्ड के हिसाब से फ़िल्टर कर रहे हैं.
जहां भी हो सके, माता-पिता के आईडी के हिसाब से फ़िल्टर करें
किसी इकाई को चुनते समय, जब भी मुमकिन हो, पैरंट आईडी के हिसाब से फ़िल्टर करें. इससे, नतीजों को फ़िल्टर करते समय, सर्वर से वापस पाने वाली इकाइयों की सूची को सीमित करके, आपकी क्वेरी तेज़ी से पूरी होंगी.
किसी विज्ञापन समूह को उसके आईडी के आधार पर फिर से हासिल करने वाले नीचे दिए गए कोड स्निपेट का इस्तेमाल करें. मान लें कि पैरंट कैंपेन आईडी पहले से मौजूद है.
कोडिंग का तरीका | कोड स्निपेट |
---|---|
कैंपेन और विज्ञापन ग्रुप आईडी के हिसाब से फ़िल्टर करें (इसका सुझाव दिया जाता है) |
var adGroup = AdsApp.adGroups() .withIds([12345]) .withCondition('CampaignId="54678"') .get() .next(); |
सिर्फ़ विज्ञापन ग्रुप आईडी के हिसाब से फ़िल्टर करना (कम ऑप्टिमाइज़ किया गया) |
var adGroup = AdsApp.adGroups() .withIds([12345]) .get() .next(); |
दोनों कोड स्निपेट एक जैसे नतीजे देते हैं. हालांकि, पैरंट आईडी (CampaignId="54678")
का इस्तेमाल करके कोड स्निपेट 1 में अतिरिक्त फ़िल्टरिंग करने से, कोड ज़्यादा बेहतर तरीके से काम करता है. ऐसा इसलिए होता है, क्योंकि इससे उन इकाइयों की सूची पर पाबंदी लगती है जिन्हें सर्वर को नतीजों को फ़िल्टर करते समय दोहराना पड़ता है.
फ़िल्टर करने की ज़्यादा शर्तें होने पर लेबल का इस्तेमाल करना
जब आपके पास फ़िल्टर करने की बहुत ज़्यादा शर्तें होती हैं, तो एक अच्छा विकल्प लेबल कर सकते हैं और उस लेबल का इस्तेमाल अपनी इकाइयां.
कैंपेन की सूची फिर से पाने वाले कोड के इस स्निपेट का इस्तेमाल करें उनके नाम से.
कोडिंग अप्रोच | कोड स्निपेट |
---|---|
किसी लेबल का इस्तेमाल करना (सुझाया गया) |
var label = AdsApp.labels() .withCondition('Name = "My Label"') .get() .next(); var campaigns = label.campaigns.get(); while (campaigns.hasNext()) { var campaign = campaigns.next(); // Do more work } |
जटिल सिलेक्टर बनाना (इसका सुझाव नहीं दिया जाता) |
var campaignNames = [‘foo’, ‘bar’, ‘baz’]; for (var i = 0; i < campaignNames.length; i++) { campaignNames[i] = '"' + campaignNames[i] + '"'; } var campaigns = AdsApp.campaigns .withCondition('CampaignName in [' + campaignNames.join(',') + ']') .get(); while (campaigns.hasNext()) { var campaign = campaigns.next(); // Do more work. } |
दोनों कोड स्निपेट की परफ़ॉर्मेंस एक जैसी होती है. हालांकि, आपके सिलेक्टर में शर्तों की संख्या बढ़ने पर, दूसरे तरीके से ज़्यादा जटिल कोड जनरेट होता है. नई इकाई को शामिल करने के लिए स्क्रिप्ट में बदलाव करने के बजाय, नई इकाई पर लेबल लागू करना भी आसान है.
अपने IN क्लॉज़ में कंडीशन की संख्या सीमित करें
स्क्रिप्ट चलाते समय, एक सामान्य उपयोग का उदाहरण इकाइयां. डेवलपर आम तौर पर, प्रोसेस को पूरा करने के लिए, AWQL क्वेरी, जो किसी IN क्लॉज़ का इस्तेमाल करके इकाई आईडी पर फ़िल्टर करती है. यह तरीका, इकाइयों की संख्या सीमित होने पर ठीक से काम करता है. हालांकि, जितनी देर में आपकी क्वेरी में बढ़ोतरी होती है, तो स्क्रिप्ट की परफ़ॉर्मेंस में गिरावट आने की वजह से दो वजहें:
- लंबी क्वेरी को पार्स करने में ज़्यादा समय लगता है.
- आईएन क्लॉज़ में जोड़ा जाने वाला हर आईडी, आकलन करने की एक और शर्त है और इसलिए, इसमें ज़्यादा समय लगता है.
ऐसी शर्तों के तहत, इकाइयों पर लेबल लागू करना बेहतर होता है और
इसके बाद, LabelId
के हिसाब से फ़िल्टर करें.
कोडिंग अप्रोच | कोड स्निपेट |
---|---|
लेबल लागू करें और LabelID के हिसाब से फ़िल्टर करें (सुझाया गया) |
// The label applied to the entity is "Report Entities" var label = AdsApp.labels() .withCondition('LabelName contains "Report Entities"') .get() .next(); var report = AdsApp.report('SELECT AdGroupId, Id, Clicks, ' + 'Impressions, Cost FROM KEYWORDS_PERFORMANCE_REPORT ' + 'WHERE LabelId = "' + label.getId() + '"'); |
आईएन क्लॉज़ का इस्तेमाल करके लंबी क्वेरी बनाएं (इसका सुझाव नहीं दिया जाता) |
var report = AdsApp.report('SELECT AdGroupId, Id, Clicks, ' + 'Impressions, Cost FROM KEYWORDS_PERFORMANCE_REPORT WHERE ' + 'AdGroupId IN (123, 456) and Id in (123,345, 456…)'); |
खाते से जुड़े अपडेट
एक साथ कई बदलाव करना
किसी Google Ads इकाई में बदलाव करने पर, Google Ads स्क्रिप्ट तुरंत बदल सकते हैं. इसके बजाय, यह कई बदलावों को एक साथ करने की कोशिश करता है, ताकि एक ही अनुरोध में कई बदलाव किए जा सकें. इस तरीके से आपकी स्क्रिप्ट ज़्यादा तेज़ हो जाती हैं और Google Ads पर लोड कम हो जाता है सर्वर. हालांकि, कुछ कोड पैटर्न होते हैं, जो Google Ads स्क्रिप्ट को इसके ऑपरेशन के बैच को बार-बार फ़्लश करता है, जिससे आपकी स्क्रिप्ट चलती है धीरे-धीरे.
कीवर्ड की सूची की बिड को अपडेट करने वाली स्क्रिप्ट देखें.
कोडिंग अप्रोच | कोड स्निपेट |
---|---|
अपडेट किए गए एलिमेंट का ट्रैक रखना (सुझाया गया) |
var keywords = AdsApp.keywords() .withCondition('Clicks > 50') .withCondition('CampaignName = "Campaign 1"') .withCondition('AdGroupName = "AdGroup 1"') .forDateRange('LAST_MONTH') .get(); var list = []; while (keywords.hasNext()) { var keyword = keywords.next(); keyword.bidding().setCpc(1.5); list.push(keyword); } for (var i = 0; i < list.length; i++) { var keyword = list[i]; Logger.log('%s, %s', keyword.getText(), keyword.bidding().getCpc()); } |
अपडेट किए गए एलिमेंट को बार-बार फ़ेच करना (इसका सुझाव नहीं दिया जाता) |
var keywords = AdsApp.keywords() .withCondition('Clicks > 50') .withCondition('CampaignName = "Campaign 1"') .withCondition('AdGroupName = "AdGroup 1"') .forDateRange('LAST_MONTH') .get(); while (keywords.hasNext()) { var keyword = keywords.next(); keyword.bidding().setCpc(1.5); Logger.log('%s, %s', keyword.getText(), keyword.bidding().getCpc()); } |
दूसरे तरीके का सुझाव नहीं दिया जाता, क्योंकि keyword.bidding().getCpc()
को कॉल करने पर, Google Ads स्क्रिप्ट setCpc()
ऑपरेशन को फ़्लश कर देती हैं और एक बार में सिर्फ़ एक ऑपरेशन को लागू करती हैं. पहला तरीका, दूसरे तरीके से मिलता-जुलता है. हालांकि, इसमें एक और फ़ायदा है, क्योंकि getCpc()
कॉल को उस लूप से अलग लूप में किया जाता है जहां setCpc()
को कॉल किया जाता है.
जब भी हो सके, बिल्डर का इस्तेमाल करें
Google Ads स्क्रिप्ट में नए ऑब्जेक्ट बनाने के दो तरीके काम करते हैं—बिल्डर और क्रिएशन तरीकों का इस्तेमाल करना होगा. बिल्डर, तरीकों के मुकाबले ज़्यादा सुविधाजनक होते हैं, क्योंकि यह आपको एपीआई कॉल से बनाए गए ऑब्जेक्ट का ऐक्सेस दें.
नीचे दिए गए कोड स्निपेट इस्तेमाल करें:
कोडिंग का तरीका | कोड स्निपेट |
---|---|
बिल्डर का इस्तेमाल करना (इसका सुझाव दिया जाता है) |
var operation = adGroup.newKeywordBuilder() .withText('shoes') .build(); var keyword = operation.getResult(); |
नीति बनाने के तरीकों का इस्तेमाल करना (इसका सुझाव नहीं दिया जाता) |
adGroup.createKeyword('shoes'); var keyword = adGroup.keywords() .withCondition('KeywordText="shoes"') .get() .next(); |
कीवर्ड को वापस पाने के लिए, अतिरिक्त चुनने की कार्रवाई की ज़रूरत पड़ती है. इसलिए, दूसरे तरीके को प्राथमिकता नहीं दी जाती. इसके अलावा, कॉन्टेंट बनाने के तरीके बंद कर दिया गया है.
हालांकि, ध्यान रखें कि बिल्डर का गलत तरीके से इस्तेमाल करने पर, Google Ads स्क्रिप्ट अपने ऑपरेशन को एक साथ नहीं कर पाती हैं.
कीवर्ड की सूची बनाने वाले इन कोड स्निपेट का इस्तेमाल करें, और नए कीवर्ड की आईडी प्रिंट कर सकता है:
कोडिंग अप्रोच | कोड स्निपेट |
---|---|
अपडेट किए गए एलिमेंट का ट्रैक रखना (सुझाया गया) |
var keywords = [‘foo’, ‘bar’, ‘baz’]; var list = []; for (var i = 0; i < keywords.length; i++) { var operation = adGroup.newKeywordBuilder() .withText(keywords[i]) .build(); list.push(operation); } for (var i = 0; i < list.length; i++) { var operation = list[i]; var result = operation.getResult(); Logger.log('%s %s', result.getId(), result.getText()); } |
अपडेट किए गए एलिमेंट को कम समय में वापस पाना (इसका सुझाव नहीं दिया जाता) |
var keywords = [‘foo’, ‘bar’, ‘baz’]; for (var i = 0; i < keywords.length; i++) { var operation = adGroup.newKeywordBuilder() .withText(keywords[i]) .build(); var result = operation.getResult(); Logger.log('%s %s', result.getId(), result.getText()); } |
दूसरे तरीके को प्राथमिकता नहीं दी जाती है, क्योंकि इसमें operation.getResult()
को कॉल किया गया है
जो ऑपरेशन बनाने वाले लूप में होता है. इससे Google Ads स्क्रिप्ट मज़बूर हो जाती हैं
एक बार में एक कार्रवाई निष्पादित करने के लिए. हालांकि, पहला तरीका इससे मिलता-जुलता है, लेकिन
बैच में भेजना, क्योंकि हम Operations.getनतीजे() को
यह बनाया गया था.
बड़े अपडेट के लिए, एक साथ कई फ़ाइलें अपलोड करें
डेवलपर का एक सामान्य काम, रिपोर्ट चलाना और मौजूदा परफ़ॉर्मेंस वैल्यू के आधार पर इकाई की प्रॉपर्टी (उदाहरण के लिए, कीवर्ड बिड) अपडेट करना होता है. टास्क कब शुरू होगा
आपको बहुत सारी इकाइयां अपडेट करनी पड़ती हैं, लेकिन एक साथ कई फ़ाइलें अपलोड करने से
बेहतर परफ़ॉर्मेंस. उदाहरण के लिए, नीचे दी गई स्क्रिप्ट देखें. ये उन कीवर्ड के लिए MaxCpc बढ़ाती हैं जिनका पिछले महीने का TopImpressionPercentage > 0.4
है:
कोडिंग अप्रोच | कोड स्निपेट |
---|---|
एक साथ कई फ़ाइलें अपलोड करने का विकल्प इस्तेमाल करें (सुझाया गया) |
var report = AdsApp.report( 'SELECT AdGroupId, Id, CpcBid FROM KEYWORDS_PERFORMANCE_REPORT ' + 'WHERE TopImpressionPercentage > 0.4 DURING LAST_MONTH'); var upload = AdsApp.bulkUploads().newCsvUpload([ report.getColumnHeader('AdGroupId').getBulkUploadColumnName(), report.getColumnHeader('Id').getBulkUploadColumnName(), report.getColumnHeader('CpcBid').getBulkUploadColumnName()]); upload.forCampaignManagement(); var reportRows = report.rows(); while (reportRows.hasNext()) { var row = reportRows.next(); row['CpcBid'] = row['CpcBid'] + 0.02; upload.append(row.formatForUpload()); } upload.apply(); |
आईडी के हिसाब से कीवर्ड चुनना और अपडेट करना (कम ऑप्टिमाइज़ किया गया) |
var reportRows = AdsApp.report('SELECT AdGroupId, Id, CpcBid FROM ' + 'KEYWORDS_PERFORMANCE_REPORT WHERE TopImpressionPercentage > 0.4 ' + ' DURING LAST_MONTH') .rows(); var map = { }; while (reportRows.hasNext()) { var row = reportRows.next(); var adGroupId = row['AdGroupId']; var id = row['Id']; if (map[adGroupId] == null) { map[adGroupId] = []; } map[adGroupId].push([adGroupId, id]); } for (var key in map) { var keywords = AdsApp.keywords() .withCondition('AdGroupId="' + key + '"') .withIds(map[key]) .get(); while (keywords.hasNext()) { var keyword = keywords.next(); keyword.bidding().setCpc(keyword.bidding().getCpc() + 0.02); } } |
जहां दूसरा तरीका आपको काफ़ी अच्छा परफ़ॉर्मेंस देता है, वहीं पहला तरीका इस मामले में को प्राथमिकता दी जाएगी, क्योंकि
Google Ads स्क्रिप्ट की, फिर से हासिल किए जा सकने वाले ऑब्जेक्ट की संख्या की सीमा होती है या एक बार में अपडेट किया गया हो. साथ ही, प्रोसेस को चुनने और अपडेट करने में दूसरा तरीका उस सीमा के तहत गिना जाता है.
एक साथ कई एंटिटी अपलोड करने पर, अपडेट की जाने वाली एंटिटी की संख्या और पूरे प्रोसेस में लगने वाले समय, दोनों की सीमाएं ज़्यादा होती हैं.
एक साथ कई फ़ाइलें अपलोड करने के लिए, कैंपेन का ग्रुप बनाना
एक साथ कई फ़ाइलें अपलोड करते समय, इन कार्रवाइयों को माता-पिता के हिसाब से ग्रुप में रखने की कोशिश करें कैंपेन बनाएं. इससे, डेटा को अपडेट करने में लगने वाला समय कम हो जाता है. साथ ही, डेटा में एक साथ होने वाले बदलावों / एक साथ होने वाली गड़बड़ियों की संभावना भी कम हो जाती है.
एक साथ कई फ़ाइलें अपलोड करने के दो टास्क चलाने पर विचार करें. एक विज्ञापन ग्रुप में विज्ञापनों को रोकता है; दूसरा कीवर्ड बिड में बदलाव करता है. भले ही, ये कार्रवाइयां एक-दूसरे से जुड़ी न हों, फिर भी ये कार्रवाइयां एक ही विज्ञापन ग्रुप (या एक ही कैंपेन के तहत दो अलग-अलग विज्ञापन ग्रुप) की इकाइयों पर लागू हो सकती हैं. ऐसा होने पर, सिस्टम पैरंट इकाई (शेयर किया गया विज्ञापन ग्रुप या कैंपेन) को लॉक कर देगा. इस वजह से, एक साथ कई फ़ाइलें अपलोड करने के टास्क एक-दूसरे को ब्लॉक कर देंगे.
Google Ads स्क्रिप्ट एक साथ कई फ़ाइलें अपलोड करने के दौरान ही, एक्ज़ीक्यूशन को ऑप्टिमाइज़ कर सकती हैं. तो हर खाते के लिए, एक साथ कई फ़ाइलें अपलोड करने का सबसे आसान तरीका है एक समय. अगर आपको हर खाते के लिए एक से ज़्यादा बल्क अपलोड चलाने हैं, तो पक्का करें कि बल्क अपलोड, कैंपेन (और उनकी चाइल्ड इकाइयों) की अलग-अलग सूचियों पर काम करें, ताकि बेहतर परफ़ॉर्मेंस मिल सके.
रिपोर्टिंग
आंकड़े पाने के लिए रिपोर्ट का इस्तेमाल करना
जब आपको बड़ी संख्या में इकाइयों और उनके आंकड़ों को वापस लाना होता है, तो ऐसा अक्सर AdsApp के स्टैंडर्ड तरीकों की जगह रिपोर्ट इस्तेमाल करना ज़्यादा सही होता है. किसी कीवर्ड को नीचे दी गई वजहों से रिपोर्ट को प्राथमिकता दी जाती है:
- इन रिपोर्ट की मदद से, बड़ी क्वेरी के लिए बेहतर परफ़ॉर्मेंस मिलती है.
- रिपोर्ट, डेटा फ़ेच करने के सामान्य कोटे को पूरा नहीं करेंगी.
डेटा सोर्स में क्लिक, इंप्रेशन, और इंप्रेशन की संख्या, पिछले महीने 50 से ज़्यादा क्लिक पाने वाले सभी कीवर्ड की लागत और टेक्स्ट:
कोडिंग अप्रोच | कोड स्निपेट |
---|---|
रिपोर्ट का इस्तेमाल करना (सुझाया गया) |
report = AdsApp.search( 'SELECT ' + ' ad_group_criterion.keyword.text, ' + ' metrics.clicks, ' + ' metrics.cost_micros, ' + ' metrics.impressions ' + 'FROM ' + ' keyword_view ' + 'WHERE ' + ' segments.date DURING LAST_MONTH ' + ' AND metrics.clicks > 50'); while (report.hasNext()) { var row = report.next(); Logger.log('Keyword: %s Impressions: %s ' + 'Clicks: %s Cost: %s', row.adGroupCriterion.keyword.text, row.metrics.impressions, row.metrics.clicks, row.metrics.cost); } |
AdsApp इटरेटर का इस्तेमाल करें (इसका सुझाव नहीं दिया जाता) |
var keywords = AdsApp.keywords() .withCondition('metrics.clicks > 50') .forDateRange('LAST_MONTH') .get(); while (keywords.hasNext()) { var keyword = keywords.next(); var stats = keyword.getStatsFor('LAST_MONTH'); Logger.log('Keyword: %s Impressions: %s ' + 'Clicks: %s Cost: %s', keyword.getText(), stats.getImpressions(), stats.getClicks(), stats.getCost()); } |
दूसरे तरीके को प्राथमिकता नहीं दी जाती है, क्योंकि यह कीवर्ड के क्रम को दोहराता है
और एक बार में एक इकाई के आंकड़े फिर से हासिल करता है. इस मामले में रिपोर्ट तेज़ी से काम करती हैं, क्योंकि यह एक ही कॉल में सारा डेटा फ़ेच करती है और ज़रूरत के हिसाब से उसे स्ट्रीम करती है. इसके अलावा, दूसरे तरीके से वापस लाए गए कीवर्ड को, get()
कॉल का इस्तेमाल करके वापस लाई गई इकाइयों की संख्या के लिए, आपकी स्क्रिप्ट के कोटे में गिना जाता है.
रिपोर्ट के बजाय खोज का इस्तेमाल करें
रिपोर्ट का तरीका, पुराने इन्फ़्रास्ट्रक्चर के लिए बनाया गया था. GAQL का इस्तेमाल करने पर भी, नतीजे फ़्लैट फ़ॉर्मैट में दिखेंगे. इसका मतलब है कि इसे क्वेरी के नतीजों को पुराने स्टाइल से मैच करने के लिए बदलना होगा. यह सभी फ़ील्ड के लिए काम नहीं करता और हर कॉल में ओवरहेड जोड़ता है.
हमारा सुझाव है कि आप खोज का इस्तेमाल करें, ताकि Google Ads API की नई रिपोर्टिंग की सभी सुविधाओं का फ़ायदा लिया जा सके.
GAQL को AWQL में प्राथमिकता दें
रिपोर्ट क्वेरी और withCondition
कॉल में AWQL अब भी काम करता है. हालांकि, इसे ट्रांसलेशन लेयर के ज़रिए चलाया जाता है, जो असल AWQL के साथ पूरी तरह से काम नहीं करता. अपनी क्वेरी पर पूरा कंट्रोल पाने के लिए, पक्का करें कि
GAQL का इस्तेमाल करके.
अगर आपको मौजूदा AWQL क्वेरी का अनुवाद करना है, तो हमारी मदद के लिए क्वेरी माइग्रेशन टूल उपलब्ध है.
ज़रूरत से ज़्यादा पंक्तियां न चुनें
रिपोर्ट (और सिलेक्टर) को लागू करने की स्पीड, रिपोर्ट से मिलने वाली लाइनों की कुल संख्या पर निर्भर करती है. इससे कोई फ़र्क़ नहीं पड़ता कि उन लाइनों को फिर से पढ़ा जाता है या नहीं. इसका मतलब है कि आपको हमेशा खास फ़िल्टर का इस्तेमाल करना चाहिए, ताकि नतीजों के सेट को ज़्यादा से ज़्यादा कम किया जा सके और आपके इस्तेमाल के उदाहरण से मैच किया जा सके.
उदाहरण के लिए, मान लें कि आपको बाहर की कुछ बोलियों वाले विज्ञापन ग्रुप ढूंढने हैं तय सीमा में रखें. दो अलग-अलग क्वेरी करना ज़्यादा तेज़ होगा, एक बिड के लिए बिड के लिए सबसे कम थ्रेशोल्ड से कम होने पर और टॉप थ्रेशोल्ड से ज़्यादा की बिड के लिए दूसरी बिड इसका मतलब सभी विज्ञापन ग्रुप को फ़ेच करना होगा और उन विज्ञापन ग्रुप को अनदेखा करना होगा जो आप नहीं हैं दिलचस्पी है.
कोडिंग का तरीका | कोड स्निपेट |
---|---|
दो क्वेरी का इस्तेमाल करें (सुझाया गया) |
var adGroups = [] var report = AdsApp.search( 'SELECT ad_group.name, ad_group.cpc_bid_micros' + ' FROM ad_group WHERE ad_group.cpc_bid_micros < 1000000'); while (report.hasNext()) { var row = report.next(); adGroups.push(row.adGroup); } var report = AdsApp.search( 'SELECT ad_group.name, ad_group.cpc_bid_micros' + ' FROM ad_group WHERE ad_group.cpc_bid_micros > 2000000'); while (report.hasNext()) { var row = report.next(); adGroups.push(row.adGroup); } |
सामान्य क्वेरी से फ़िल्टर करें (इसका सुझाव नहीं दिया जाता) |
var adGroups = [] var report = AdsApp.search( 'SELECT ad_group.name, ad_group.cpc_bid_micros' + ' FROM ad_group'); while (report.hasNext()) { var row = report.next(); var cpcBidMicros = row.adGroup.cpcBidMicros; if (cpcBidMicros < 1000000 || cpcBidMicros > 2000000) { adGroups.push(row.adGroup); } } |
Ads मैनेजर (एमसीसी) स्क्रिप्ट
सीरियल एक्ज़ीक्यूशन के बजाय generateInParallel को प्राथमिकता दें
मैनेजर खातों के लिए स्क्रिप्ट लिखते समय, जहां भी हो सके वहां क्रम से चलने की सुविधा के बजाय executeInParallel()
का इस्तेमाल करें. executeInParallel()
से आपकी स्क्रिप्ट को ज़्यादा नतीजे मिलते हैं
हर खाते की प्रोसेसिंग में लगने वाला समय (एक घंटे तक) और 30 मिनट तक हो सकता है
(सीरियल एक्ज़ीक्यूशन के लिए कुल 30 मिनट देने के बजाय). हमारी सीमाएं देखें
पेज पर जाएं.
स्प्रेडशीट
स्प्रैडशीट अपडेट करते समय बैच ऑपरेशन का उपयोग करें
स्प्रेडशीट अपडेट करते समय, बल्क ऑपरेशन के तरीकों का इस्तेमाल करके देखें
(उदाहरण के लिए, getRange()
) उन तरीकों के मुकाबले जो एक बार में एक सेल को अपडेट करते हैं.
नीचे दिए गए कोड स्निपेट पर विचार करें, जो स्प्रेडशीट.
कोडिंग का तरीका | कोड स्निपेट |
---|---|
किसी एक कॉल में सेल की रेंज अपडेट करें (इसका सुझाव दिया जाता है) |
var colors = new Array(100); for (var y = 0; y < 100; y++) { xcoord = xmin; colors[y] = new Array(100); for (var x = 0; x < 100; x++) { colors[y][x] = getColor_(xcoord, ycoord); xcoord += xincrement; } ycoord -= yincrement; } sheet.getRange(1, 1, 100, 100).setBackgroundColors(colors); |
एक बार में एक ही सेल अपडेट करें (हम इसका सुझाव नहीं देते) |
var cell = sheet.getRange('a1'); for (var y = 0; y < 100; y++) { xcoord = xmin; for (var x = 0; x < 100; x++) { var c = getColor_(xcoord, ycoord); cell.offset(y, x).setBackgroundColor(c); xcoord += xincrement; } ycoord -= yincrement; SpreadsheetApp.flush(); } |
Google स्प्रेडशीट, वैल्यू को कैश मेमोरी में सेव करके दूसरे कोड स्निपेट को ऑप्टिमाइज़ करने की कोशिश करता है. हालांकि, एपीआई कॉल की संख्या की वजह से, यह पहले स्निपेट की तुलना में खराब परफ़ॉर्म करता है.