Bu sayfada, Google Ads komut dosyalarıyla geliştirme yapmaya yönelik çeşitli en iyi uygulamalar ele alınmaktadır.
Seçiciler
Seçicilerle filtreleme
Mümkün olduğunda, yalnızca ihtiyacınız olan öğeleri istemek için filtreleri kullanın. Doğru filtreler uygulamanın aşağıdaki avantajları vardır:
- Kod daha basit ve anlaşılması daha kolaydır.
- Komut dosyası çok daha hızlı çalışır.
Aşağıdaki kod snippet'lerini karşılaştırın:
Kodlama yaklaşımı | Kod snippet'i |
---|---|
Seçicileri kullanarak filtreleme (önerilir) |
var keywords = AdsApp.keywords() .withCondition('Clicks > 10') .forDateRange('LAST_MONTH') .get(); while (keywords.hasNext()) { var keyword = keywords.next(); // Do work here. } |
Kodda filtreleme (önerilmez) |
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. } } |
İkinci yaklaşım, yalnızca listeye filtre uygulamak için hesabınızdaki tüm anahtar kelimelerin listesini almaya çalıştığından önerilmez.
Kampanya hiyerarşisinde gezinmekten kaçının
Belirli bir düzeydeki öğeleri almak istediğinizde, tüm kampanya hiyerarşisini geçmek yerine o düzeyde bir koleksiyon yöntemi kullanın. Bu yöntem daha basit olmasının yanı sıra çok daha iyi performans gösterir. Sistem, tüm kampanyaları ve reklam gruplarını gereksiz yere okumak zorunda kalmaz.
Hesabınızdaki tüm reklamları alan aşağıdaki kod snippet'lerini karşılaştırın:
Kodlama yaklaşımı | Kod snippet'i |
---|---|
Uygun toplama yöntemini kullanma (önerilir) |
var ads = AdsApp.ads(); |
Hiyerarşide gezinme (Önerilmez) |
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. } } |
Yalnızca reklamlar gerekli olmasına rağmen nesnelerin (kampanyalar, reklam grupları) tüm hiyerarşilerini getirmeye çalıştığı için ikinci yaklaşım önerilmez.
Belirli ebeveyn erişim yöntemlerini kullanma
Bazen, alınan bir nesnenin üst öğesini elde etmeniz gerekir. Bu durumda, tüm hiyerarşileri getirmek yerine sağlanan erişim yöntemini kullanmanız gerekir.
Geçen ay 50'den fazla tıklama alan metin reklamları içeren reklam gruplarını alan aşağıdaki kod snippet'lerini karşılaştırın:
Kodlama yaklaşımı | Kod snippet'i |
---|---|
Uygun üst öğe erişimci yöntemini kullanma (önerilir) |
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. } |
Hiyerarşide gezinme (önerilmez) |
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. } } } |
İkinci yaklaşım, hesabınızdaki kampanya ve reklam grubu hiyerarşilerinin tamamını getirdiği için önerilmez. Oysa sizin yalnızca reklam grubunuzla ilişkili bir kampanya ve reklam grubu alt kümesine ihtiyacınız vardır. İlk yaklaşım, yalnızca alakalı reklam koleksiyonunu getirmekle sınırlıdır ve üst nesnelerine erişmek için uygun bir yöntem kullanır.
Belirli üst filtreleri kullanma
Belirli bir kampanya veya reklam grubundaki öğelere erişmek için hiyerarşiyi getirip geçmek yerine seçicide belirli bir filtre kullanın.
Belirli bir kampanyadaki ve reklam grubundaki metin reklamların listesini alan aşağıdaki kod snippet'lerini karşılaştırın. Bu kampanya ve reklam grubu, geçen ay 50'den fazla tıklama almış olmalıdır.
Kodlama yaklaşımı | Kod snippet'i |
---|---|
Uygun üst düzey filtreleri kullanın (önerilir) |
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. } |
Hiyerarşide gezinme (önerilmez) |
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. } } } |
İkinci yaklaşım, hesabınızdaki kampanya ve reklam grubu hiyerarşisini yinelediği için önerilmez. Oysa yalnızca seçili bir reklam grubu ve bunların üst kampanyaları ile reklam gruplarına ihtiyacınız vardır. İlk yaklaşımda, seçicide üst öğeler için belirli bir filtre uygulanarak yineleme reklam listesiyle sınırlandırılır.
Mümkün olduğunda filtreleme için kimlikleri kullanın
Öğeler için filtreleme yaparken diğer alanlar yerine öğeleri kimliklerine göre filtrelemek tercih edilir.
Bir kampanyayı seçen aşağıdaki kod snippet'lerini inceleyin.
Kodlama yaklaşımı | Kod snippet'i |
---|---|
Kimliğe göre filtreleme (önerilir) |
var campaign = AdsApp.campaigns() .withIds([12345]) .get() .next(); |
Ada göre filtreleme (daha az ideal) |
var campaign = AdsApp.campaigns() .withCondition('Name="foo"') .get() .next(); |
Kimlik dışı bir alana göre filtreleme yaptığımız için ikinci yaklaşım daha az idealdir.
Mümkün olduğunda ebeveyn kimliklerine göre filtreleme
Bir öğe seçerken mümkün olduğunda üst kimliklere göre filtreleyin. Bu işlem, sonuçları filtrelerken sunucular tarafından alınan öğe listesini sınırlayarak sorgularınızı hızlandırır.
Bir reklam grubunu kimliğine göre alan aşağıdaki kod snippet'ini inceleyin. Üst kampanya kimliğinin bilindiğini varsayın.
Kodlama yaklaşımı | Kod snippet'i |
---|---|
Kampanya ve reklam grubu kimliklerine göre filtreleme (önerilir) |
var adGroup = AdsApp.adGroups() .withIds([12345]) .withCondition('CampaignId="54678"') .get() .next(); |
Yalnızca reklam grubu kimliğine göre filtreleme (daha az ideal) |
var adGroup = AdsApp.adGroups() .withIds([12345]) .get() .next(); |
Her iki kod snippet'i de aynı sonuçları verse de, 1. kod snippet'inde üst kimlik (CampaignId="54678")
kullanılarak yapılan ek filtreleme, sonuçları filtrelerken sunucunun yinelemesi gereken öğe listesini kısıtlayarak kodu daha verimli hale getirir.
Çok fazla filtreleme koşulu olduğunda etiketleri kullanma
Çok fazla filtreleme koşulunuz olduğunda, işlediğiniz öğeler için bir etiket oluşturmanız ve öğelerinizi filtrelemek üzere bu etiketi kullanmanız iyi bir fikirdir.
Adlarına göre kampanya listesini alan aşağıdaki kod snippet'ini inceleyin.
Kodlama yaklaşımı | Kod snippet'i |
---|---|
Etiket kullanma (önerilir) |
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 } |
Karmaşık seçiciler oluşturma (önerilmez) |
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. } |
Her iki kod snippet'i de benzer düzeyde performans sağlasa da seçicinizdeki koşul sayısı arttıkça ikinci yaklaşım daha karmaşık kodlar oluşturma eğilimindedir. Ayrıca, etiketi yeni bir öğeye uygulamak, komut dosyasını yeni bir öğe içerecek şekilde düzenlemekten daha kolaydır.
IN ifadesindeki koşul sayısını sınırlayın.
Komut dosyaları çalıştırırken yaygın bir kullanım alanı, bir liste için rapor çalıştırmaktır. Geliştiriciler genellikle bir IN ifadesi kullanarak varlık kimliklerine göre filtreleme yapan çok uzun bir AWQL sorgusu oluşturarak bunu başarır. Bu yaklaşım, varlık sayısı sınırlı olduğunda sorunsuz çalışır. Ancak sorgunuzun uzunluğu arttıkça komut dosyanızın performansı iki nedenden dolayı düşer:
- Daha uzun bir sorgunun ayrıştırılması daha uzun sürer.
- Bir IN ifadesine eklediğiniz her kimlik, değerlendirilecek ek bir koşuldur ve bu nedenle daha uzun sürer.
Bu gibi durumlarda, varlıklara etiket uygulamak ve ardından LabelId
ile filtrelemek daha iyi olur.
Kodlama yaklaşımı | Kod snippet'i |
---|---|
Etiket uygulayın ve labelID'ye göre filtreleyin (önerilir) |
// 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 koşulunu kullanarak uzun bir sorgu oluşturma (önerilmez) |
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…)'); |
Hesap güncellemeleri
Toplu değişiklikler
Bir Google Ads öğesinde değişiklik yaptığınızda Google Ads komut dosyaları bu değişikliği hemen yürütmez. Bunun yerine, birden fazla değişikliği gruplandırmaya çalışır. Böylece, birden fazla değişiklik yapan tek bir istek gönderebilir. Bu yaklaşım, komut dosyalarınızı daha hızlı hale getirir ve Google Ads sunucularındaki yükü azaltır. Ancak, Google Ads komut dosyalarını işlemler grubunu sık sık temizlemeye zorlayan ve dolayısıyla komut dosyanızın yavaş çalışmasına neden olan bazı kod kalıpları vardır.
Bir anahtar kelime listesinin tekliflerini güncelleyen aşağıdaki komut dosyasını inceleyin.
Kodlama yaklaşımı | Kod snippet'i |
---|---|
Güncellenen öğeleri takip etme (önerilir) |
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()); } |
Güncellenen öğeleri sıkı bir döngüde alma (önerilmez) |
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()
çağrısı, Google Ads komut dosyalarını setCpc()
işlemini temizlemeye ve her seferinde yalnızca bir işlem yürütmeye zorladığı için ikinci yaklaşım önerilmez. İkinci yaklaşıma benzese de ilk yaklaşım, getCpc()
çağrısı setCpc()
çağrısının yapıldığı döngüden ayrı bir döngüde yapıldığından gruplandırmayı destekleme gibi ek bir avantaja sahiptir.
Mümkün olduğunda oluşturucuları kullanın
Google Ads komut dosyaları, yeni nesneler oluşturmak için iki yöntemi (oluşturucular ve oluşturma yöntemleri) destekler. Oluşturucular, API çağrısından oluşturulan nesneye erişmenizi sağladığı için oluşturma yöntemlerine göre daha esnektir.
Aşağıdaki kod snippet'lerini inceleyin:
Kodlama yaklaşımı | Kod snippet'i |
---|---|
Oluşturucuları kullanma (önerilir) |
var operation = adGroup.newKeywordBuilder() .withText('shoes') .build(); var keyword = operation.getResult(); |
Oluşturma yöntemlerini kullanma (önerilmez) |
adGroup.createKeyword('shoes'); var keyword = adGroup.keywords() .withCondition('KeywordText="shoes"') .get() .next(); |
İkinci yaklaşım, anahtar kelimeyi alma işleminde ek seçim işlemi yapılması nedeniyle tercih edilmez. Ayrıca oluşturma yöntemleri de kullanımdan kaldırılıyor.
Ancak, yanlış kullanıldığında oluşturucuların Google Ads komut dosyalarının işlemlerini toplu olarak gerçekleştirmesini engelleyebileceğini unutmayın.
Aşağıdaki kod snippet'lerini kullanarak anahtar kelime listesi oluşturabilir ve yeni oluşturulan anahtar kelimelerin kimliğini yazdırabilirsiniz:
Kodlama yaklaşımı | Kod snippet'i |
---|---|
Güncellenen öğeleri takip etme (önerilir) |
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()); } |
Güncellenen öğeleri sıkı bir döngüde alma (önerilmez) |
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()); } |
İkinci yaklaşım, işlemi oluşturan döngü içinde operation.getResult()
çağrısı yaptığından ve bu nedenle Google Ads komut dosyalarını her seferinde bir işlem yürütmeye zorladığından tercih edilmez. İlk yaklaşım benzer olsa da işlemi oluşturulduğu döngüden farklı bir döngüde çağırdığımız için toplu işleme izin verir.
Büyük güncellemeler için toplu yüklemeleri kullanabilirsiniz.
Geliştiricilerin yaptığı yaygın bir görev, rapor çalıştırmak ve mevcut performans değerlerine göre öğe özelliklerini (ör. anahtar kelime teklifleri) güncellemektir. Çok sayıda öğeyi güncellemeniz gerektiğinde toplu yüklemeler genellikle daha iyi performans sağlar. Örneğin, son bir ayda TopImpressionPercentage > 0.4
olan anahtar kelimelerin MaksTBM'sini artıran aşağıdaki komut dosyalarını inceleyin:
Kodlama yaklaşımı | Kod snippet'i |
---|---|
Toplu yüklemeyi kullanma (önerilir) |
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(); |
Kimliğe göre anahtar kelime seçme ve güncelleme (daha az ideal) |
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); } } |
İkinci yaklaşım oldukça iyi bir performans sunsa da bu durumda birinci yaklaşım tercih edilir. Bunun nedeni,
Google Ads komut dosyalarında tek bir çalıştırmada alınabilecek veya güncellenebilecek nesne sayısı sınırlıdır ve ikinci yaklaşımdaki seçme ve güncelleme işlemleri bu sınıra dahil edilir.
Toplu yüklemeler, hem güncelleyebileceği öğe sayısı hem de genel yürütme süresi açısından daha yüksek sınırlara sahiptir.
Toplu yüklemelerinizi kampanyalara göre gruplandırma
Toplu yüklemelerinizi oluştururken işlemleri üst kampanyaya göre gruplandırmaya çalışın. Bu, verimliliği artırır ve çakışan değişiklikler / eşzamanlılık hataları olasılığını azaltır.
Paralel olarak çalışan iki toplu yükleme görevini ele alalım. Biri reklam grubundaki reklamları duraklatır, diğeri ise anahtar kelime tekliflerini ayarlar. İşlemler ilişkili olmasa da aynı reklam grubundaki (veya aynı kampanyadaki iki farklı reklam grubundaki) öğeler için geçerli olabilir. Bu durumda sistem, üst öğeyi (paylaşılan reklam grubu veya kampanya) kilitler ve toplu yükleme görevlerinin birbirini engellemesine neden olur.
Google Ads komut dosyaları, tek bir toplu yükleme görevi içinde yürütmeyi optimize edebilir. Bu nedenle, aynı anda hesap başına yalnızca bir toplu yükleme görevi çalıştırmak en basit yöntemdir. Hesap başına birden fazla toplu yükleme çalıştırmaya karar verirseniz optimum performans için toplu yüklemelerin, birbirini dışlayan bir kampanya listesi (ve alt öğeleri) üzerinde çalıştığından emin olun.
Raporlama
İstatistikleri getirmek için raporları kullanma
Büyük miktarda öğeyi ve istatistiklerini almak istediğinizde, standart AdsApp yöntemleri yerine raporları kullanmak genellikle daha iyidir. Raporların kullanımı aşağıdaki nedenlerden dolayı tercih edilir:
- Raporlar, büyük sorgularda daha iyi performans sunar.
- Raporlar normal getirme kotalarını etkilemez.
Geçen ay 50'den fazla tıklama alan tüm anahtar kelimelerin tıklama, gösterim, maliyet ve metin bilgilerini getiren aşağıdaki kod snippet'lerini karşılaştırın:
Kodlama yaklaşımı | Kod snippet'i |
---|---|
Raporları kullanma (önerilir) |
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 yineleyicilerini kullanma (önerilmez) |
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()); } |
İkinci yaklaşım, anahtar kelimeler üzerinde yineleme yaptığı ve istatistikleri her seferinde bir öğe olacak şekilde aldığı için tercih edilmez. Bu durumda raporlar daha hızlı çalışır. Çünkü tüm veriler tek bir çağrıda alınır ve gerektiğinde yayınlanır. Ayrıca, ikinci yaklaşımda alınan anahtar kelimeler, get()
çağrısı kullanılarak alınan öğe sayısı için komut dosyanızın kotasına dahil edilir.
Rapor yerine aramayı kullanma
Rapor yöntemi eski altyapı için oluşturulmuştur ve GAQL kullanıyor olsanız bile sonuçları düz biçimde verir. Bu nedenle, sorgunun sonuçlarını eski stile uyacak şekilde dönüştürmesi gerekir. Bu işlem tüm alanlarda desteklenmez ve her çağrıya ek yük getirir.
Yeni Google Ads API raporlamasının tüm özelliklerinden yararlanmak için arama işlevini kullanmanızı öneririz.
AWQL yerine GAQL'yi tercih etme
AWQL, rapor sorgularında ve withCondition
çağrılarında hâlâ destekleniyor olsa da gerçek AWQL ile tam uyumlu olmayan bir çeviri katmanı üzerinden çalıştırılır. Sorgularınız üzerinde tam kontrol sahibi olmak için GAQL kullandığınızdan emin olun.
Çevirmek istediğiniz mevcut AWQL sorgularınız varsa yardımcı olması için Sorgu Taşıma Aracı'nı kullanabilirsiniz.
Gereğinden fazla satır seçmeyin
Raporların (ve seçicilerin) yürütülme hızı, bunları yineleyip yinelemediğinize bakılmaksızın rapor tarafından döndürülecek toplam satır sayısına bağlıdır. Bu nedenle, kullanım alanınızla eşleşmesi için sonuç kümesini mümkün olduğunca küçültmek üzere her zaman belirli filtreler kullanmanız gerekir.
Örneğin, belirli bir aralığın dışında teklifler içeren reklam gruplarını bulmak istediğinizi varsayalım. Tüm reklam gruplarını getirip ilgilenmediğiniz reklam gruplarını yoksaymak yerine, biri alt eşiğin altındaki teklifler, diğeri de üst eşiğin üstündeki teklifler için olmak üzere iki ayrı sorgu oluşturmak daha hızlı olacaktır.
Kodlama yaklaşımı | Kod snippet'i |
---|---|
İki sorgu kullanma (önerilir) |
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); } |
Genel bir sorgudan filtreleme (önerilmez) |
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 Manager (MM) komut dosyaları
Seri yürütme yerine executeInParallel'i tercih etme
Yönetici hesapları için komut dosyaları yazarken mümkün olduğunda seri yürütme yerine executeInParallel()
kullanın. executeInParallel()
, komut dosyanıza daha fazla işlem süresi (bir saate kadar) ve işlenen hesap başına 30 dakikaya kadar süre (sıralı yürütme için toplam 30 dakika yerine) tanır. Daha fazla bilgi için sınırlar sayfamızı inceleyin.
E-tablolar
E-tabloları güncellerken toplu işlemleri kullanma
E-tabloları güncellerken, tek bir hücreyi güncelleyen yöntemler yerine toplu işlem yöntemlerini (ör. getRange()
) kullanmaya çalışın.
Bir e-tabloda fraktal deseni oluşturan aşağıdaki kod snippet'ini inceleyin.
Kodlama yaklaşımı | Kod snippet'i |
---|---|
Tek bir çağrıda hücre aralığını güncelleme (önerilir) |
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); |
Hücreleri tek tek güncelleme (önerilmez) |
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 E-Tablolar, değerleri önbelleğe alarak ikinci kod snippet'ini optimize etmeye çalışsa da yapılan API çağrılarının sayısı nedeniyle ilk snippet'e kıyasla daha düşük performans sunar.