এই পৃষ্ঠাটি Google বিজ্ঞাপন স্ক্রিপ্টগুলির সাথে বিকাশের জন্য বিভিন্ন সেরা অনুশীলনগুলি কভার করে৷
নির্বাচক
নির্বাচকদের সাথে ফিল্টার করুন
যখন সম্ভব, শুধুমাত্র আপনার প্রয়োজনীয় সত্তার জন্য অনুরোধ করতে ফিল্টার ব্যবহার করুন। সঠিক ফিল্টার প্রয়োগের নিম্নলিখিত সুবিধা রয়েছে:
- কোড সহজ এবং বুঝতে সহজ.
- স্ক্রিপ্ট অনেক দ্রুত কার্যকর হবে.
নিম্নলিখিত কোড স্নিপেট তুলনা করুন:
কোডিং পদ্ধতি | কোড স্নিপেট |
---|---|
নির্বাচক ব্যবহার করে ফিল্টার করুন (প্রস্তাবিত) | 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(); |
দ্বিতীয় পদ্ধতিটি কম অনুকূল কারণ আমরা একটি নন-আইডি ক্ষেত্র দ্বারা ফিল্টার করছি।
যখনই সম্ভব অভিভাবকীয় আইডি দ্বারা ফিল্টার করুন
একটি সত্তা নির্বাচন করার সময়, যখনই সম্ভব অভিভাবক আইডি দ্বারা ফিল্টার করুন৷ ফলাফলগুলি ফিল্টার করার সময় সার্ভার দ্বারা পুনরুদ্ধার করা সত্তার তালিকা সীমিত করে এটি আপনার প্রশ্নগুলিকে দ্রুত করে তুলবে৷
নিম্নলিখিত কোড স্নিপেটটি বিবেচনা করুন যা একটি বিজ্ঞাপন গোষ্ঠীকে তার ID দ্বারা পুনরুদ্ধার করে৷ অনুমান করুন যে প্যারেন্ট ক্যাম্পেইন আইডি পরিচিত।
কোডিং পদ্ধতি | কোড স্নিপেট |
---|---|
প্রচারাভিযান এবং বিজ্ঞাপন গ্রুপ আইডি দ্বারা ফিল্টার (প্রস্তাবিত) | var adGroup = AdsApp.adGroups() .withIds([12345]) .withCondition('CampaignId="54678"') .get() .next(); |
একা বিজ্ঞাপন গ্রুপ আইডি দ্বারা ফিল্টার (কম অনুকূল) | var adGroup = AdsApp.adGroups() .withIds([12345]) .get() .next(); |
যদিও উভয় কোড স্নিপেট অভিন্ন ফলাফল দেয়, কোড স্নিপেট 1-এ একটি প্যারেন্ট আইডি (CampaignId="54678")
ব্যবহার করে অতিরিক্ত ফিল্টারিং ফলাফলগুলি ফিল্টার করার সময় সার্ভারকে পুনরাবৃত্তি করতে হয় এমন সত্তার তালিকা সীমাবদ্ধ করে কোডটিকে আরও দক্ষ করে তোলে৷
যখন অনেক ফিল্টারিং শর্ত থাকে তখন লেবেল ব্যবহার করুন
যখন আপনার অনেকগুলি ফিল্টারিং শর্ত থাকে, তখন আপনি যে সংস্থাগুলি প্রক্রিয়া করেন তার জন্য একটি লেবেল তৈরি করা এবং আপনার সত্তাগুলিকে ফিল্টার করতে সেই লেবেলটি ব্যবহার করা একটি ভাল ধারণা৷
কোডের নিম্নলিখিত স্নিপেটটি বিবেচনা করুন যা তাদের নামের দ্বারা প্রচারাভিযানের একটি তালিকা পুনরুদ্ধার করে।
কোডিং পদ্ধতি | কোড স্নিপেট |
---|---|
একটি লেবেল ব্যবহার করুন (প্রস্তাবিত) | 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 ক্লজ ব্যবহার করে সত্তা আইডিগুলিতে ফিল্টার করে। সত্তার সংখ্যা সীমিত হলে এই পদ্ধতিটি ভাল কাজ করে। যাইহোক, আপনার প্রশ্নের দৈর্ঘ্য বাড়ার সাথে সাথে আপনার স্ক্রিপ্টের কার্যকারিতা দুটি কারণে খারাপ হয়:
- একটি দীর্ঘ ক্যোয়ারী পার্স করতে বেশি সময় নেয়।
- প্রতিটি আইডি যা আপনি একটি IN ক্লজে যোগ করেন তা মূল্যায়নের জন্য একটি অতিরিক্ত শর্ত, এবং তাই বেশি সময় নেয়।
এই ধরনের অবস্থার অধীনে, সত্তাগুলিতে একটি লেবেল প্রয়োগ করা এবং তারপর 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() + '"'); |
IN ক্লজ ব্যবহার করে একটি দীর্ঘ ক্যোয়ারী তৈরি করুন (প্রস্তাবিত নয়) | 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 বিজ্ঞাপন সার্ভারে লোড কমায়। যাইহোক, কিছু কোড প্যাটার্ন রয়েছে যা Google বিজ্ঞাপন স্ক্রিপ্টগুলিকে তার ব্যাচের অপারেশনগুলিকে ঘন ঘন ফ্লাশ করতে বাধ্য করে, যার ফলে আপনার স্ক্রিপ্ট ধীরে ধীরে চালানো হয়।
নিম্নলিখিত স্ক্রিপ্টটি বিবেচনা করুন যা কীওয়ার্ডের তালিকার বিড আপডেট করে।
কোডিং পদ্ধতি | কোড স্নিপেট |
---|---|
আপডেট হওয়া উপাদানগুলির উপর নজর রাখুন (প্রস্তাবিত) | 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 বিজ্ঞাপন স্ক্রিপ্টগুলি নতুন অবজেক্ট তৈরি করার দুটি উপায় সমর্থন করে—নির্মাতা এবং তৈরির পদ্ধতি৷ নির্মাতারা সৃষ্টির পদ্ধতির চেয়ে বেশি নমনীয়, যেহেতু এটি আপনাকে API কল থেকে তৈরি করা বস্তুতে অ্যাক্সেস দেয়।
নিম্নলিখিত কোড স্নিপেট বিবেচনা করুন:
কোডিং পদ্ধতি | কোড স্নিপেট |
---|---|
নির্মাতা ব্যবহার করুন (প্রস্তাবিত) | var operation = adGroup.newKeywordBuilder() .withText('shoes') .build(); var keyword = operation.getResult(); |
তৈরির পদ্ধতি ব্যবহার করুন (প্রস্তাবিত নয়) | adGroup.createKeyword('shoes'); var keyword = adGroup.keywords() .withCondition('KeywordText="shoes"') .get() .next(); |
কীওয়ার্ড পুনরুদ্ধারে জড়িত অতিরিক্ত নির্বাচন অপারেশনের কারণে দ্বিতীয় পদ্ধতিটি পছন্দনীয় নয়। উপরন্তু, সৃষ্টি পদ্ধতিও অবমূল্যায়িত।
যাইহোক, মনে রাখবেন যে নির্মাতারা, ভুলভাবে ব্যবহার করলে, Google বিজ্ঞাপন স্ক্রিপ্টগুলিকে ব্যাচ করা থেকে আটকাতে পারে।
নিম্নলিখিত কোড স্নিপেটগুলি বিবেচনা করুন যা কীওয়ার্ডগুলির একটি তালিকা তৈরি করে এবং নতুন তৈরি করা কীওয়ার্ডগুলির আইডি প্রিন্ট করে:
কোডিং পদ্ধতি | কোড স্নিপেট |
---|---|
আপডেট হওয়া উপাদানগুলির উপর নজর রাখুন (প্রস্তাবিত) | 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 স্ক্রিপ্টগুলিকে একবারে একটি অপারেশন চালাতে বাধ্য করে। প্রথম পন্থা, একই রকম হলেও, ব্যাচিংয়ের অনুমতি দেয় যেহেতু আমরা অপারেশন.getResult() কে যেখানে এটি তৈরি করা হয়েছিল তার চেয়ে আলাদা লুপে কল করি।
বড় আপডেটের জন্য বাল্ক আপলোড ব্যবহার করার কথা বিবেচনা করুন
একটি সাধারণ কাজ যা ডেভেলপাররা সম্পাদন করে তা হল বর্তমান কার্যক্ষমতার মানগুলির উপর ভিত্তি করে রিপোর্ট চালানো এবং সত্তা বৈশিষ্ট্যগুলি (উদাহরণস্বরূপ, কীওয়ার্ড বিড) আপডেট করা। যখন আপনাকে প্রচুর সংখ্যক সত্তা আপডেট করতে হয়, তখন বাল্ক আপলোডগুলি আপনাকে আরও ভাল পারফরম্যান্স দেয়। উদাহরণ স্বরূপ, নিম্নলিখিত স্ক্রিপ্টগুলি বিবেচনা করুন যা গত মাসের জন্য TopImpressionPercentage > 0.4
কীওয়ার্ডগুলির সর্বোচ্চCpc বাড়ায়:
কোডিং পদ্ধতি | কোড স্নিপেট |
---|---|
বাল্ক আপলোড ব্যবহার করুন (প্রস্তাবিত) | 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 বিজ্ঞাপন স্ক্রিপ্টের একটি একক রানে পুনরুদ্ধার বা আপডেট করা যেতে পারে এমন বস্তুর সংখ্যার একটি সীমা রয়েছে এবং দ্বিতীয় পদ্ধতিতে নির্বাচন এবং আপডেটের ক্রিয়াকলাপগুলি সেই সীমাতে গণনা করা হয়।
বাল্ক আপলোডগুলি আপডেট করতে পারে এমন সত্তার সংখ্যা এবং সামগ্রিক সম্পাদনের সময় উভয়ের ক্ষেত্রেই উচ্চ সীমা থাকে৷
প্রচারাভিযান দ্বারা আপনার বাল্ক আপলোড গ্রুপ
যখন আপনি আপনার বাল্ক আপলোডগুলি তৈরি করেন, তখন অভিভাবক প্রচারাভিযানের দ্বারা আপনার ক্রিয়াকলাপগুলিকে গোষ্ঠীভুক্ত করার চেষ্টা করুন৷ এটি কার্যকারিতা বাড়ায় এবং পরস্পরবিরোধী পরিবর্তন/সঙ্গতি ত্রুটির সম্ভাবনা হ্রাস করে।
সমান্তরালভাবে চলমান দুটি বাল্ক আপলোড টাস্ক বিবেচনা করুন৷ একজন একটি বিজ্ঞাপন গ্রুপে বিজ্ঞাপনগুলিকে বিরতি দেয়; অন্যটি কীওয়ার্ড বিড সমন্বয় করে। যদিও অপারেশনগুলি সম্পর্কযুক্ত নয়, অপারেশনগুলি একই বিজ্ঞাপন গোষ্ঠীর (অথবা একই প্রচারাভিযানের অধীনে দুটি ভিন্ন বিজ্ঞাপন গোষ্ঠীর) অধীনে সত্তার ক্ষেত্রে প্রযোজ্য হতে পারে৷ যখন এটি ঘটবে, সিস্টেমটি মূল সত্তাকে (ভাগ করা বিজ্ঞাপন গোষ্ঠী বা প্রচারাভিযান) লক করে দেবে, যার ফলে বাল্ক আপলোড টাস্কগুলি একে অপরের উপর ব্লক হয়ে যাবে।
Google বিজ্ঞাপন স্ক্রিপ্টগুলি একটি একক বাল্ক আপলোড টাস্কের মধ্যে সম্পাদনাকে অপ্টিমাইজ করতে পারে, তাই সবচেয়ে সহজ কাজটি হল প্রতি অ্যাকাউন্টে একবারে শুধুমাত্র একটি বাল্ক আপলোড টাস্ক চালানো। আপনি যদি প্রতি অ্যাকাউন্টে একাধিক বাল্ক আপলোড চালানোর সিদ্ধান্ত নেন, তাহলে নিশ্চিত করুন যে বাল্ক আপলোডগুলি সর্বোত্তম পারফরম্যান্সের জন্য প্রচারাভিযানের পারস্পরিক একচেটিয়া তালিকায় (এবং তাদের শিশু সত্তা) কাজ করে৷
রিপোর্টিং
পরিসংখ্যান আনার জন্য রিপোর্ট ব্যবহার করুন
আপনি যখন প্রচুর পরিমাণে সত্তা এবং তাদের পরিসংখ্যান পুনরুদ্ধার করতে চান, তখন স্ট্যান্ডার্ড 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 বিজ্ঞাপন API রিপোর্টিংয়ের সমস্ত বৈশিষ্ট্যের সুবিধা নিতে পরিবর্তে অনুসন্ধান ব্যবহার করার পরামর্শ দিই।
AWQL থেকে GAQL পছন্দ করুন
যদিও AWQL এখনও রিপোর্ট ক্যোয়ারী এবং withCondition
কলের সাথে সমর্থিত, এটি একটি অনুবাদ স্তরের মাধ্যমে চালিত হয় যার প্রকৃত 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); } } |
বিজ্ঞাপন ম্যানেজার (MCC) স্ক্রিপ্ট
সিরিয়াল এক্সিকিউশনের চেয়ে executeInParallel পছন্দ করুন
ম্যানেজার অ্যাকাউন্টের জন্য স্ক্রিপ্ট লেখার সময়, সম্ভব হলে সিরিয়াল এক্সিকিউশনের পরিবর্তে 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 স্প্রেডশীট ক্যাশিং মান দ্বারা দ্বিতীয় কোড স্নিপেট অপ্টিমাইজ করার চেষ্টা করলেও, API কলের সংখ্যার কারণে এটি আপনাকে প্রথম স্নিপেটের তুলনায় খারাপ কর্মক্ষমতা দেয়।