Скрипт рекламы Google

#javascript #google-apps-script #google-ads-script

Вопрос:

У меня есть скрипт Google Ads, который приближает производительность по ключевым словам, если она превышает пороговое значение ROAS, а затем экспортирует ее в Google-лист каждые 30 дней. Затем я ищу способ, чтобы скрипт взял данные по ключевым словам и группам объявлений и прошелся по листам, нашел ключевые слова и вернул оценки качества для этих ключевых слов после того, как я их добавил.

Вот мой приведенный ниже код, я пытаюсь добавить в 2D-массив из таблицы Google (так как вам нужен 2d-массив для поиска ключевых слов). Мне также нужно иметь возможность перенести данные обратно на лист. Есть какие-нибудь мысли, пожалуйста?

     var sheets = SpreadsheetApp.openByUrl(spreadsheetUrl).getSheets();

    for (i = 0; i < sheets.length; i  ) {
       var sheet = sheets[i];
       var data_range = sheet.getDataRange();
       var last_row = data_range.getLastRow();

          for(var r=2;r<=last_row;r  ) {
            var list = [];
            var keywordID = [];
            var adGroupId = [];
            var keywordID = data_range.getCell(r,13).getValue();
            var adGroupId = data_range.getCell(r,14).getValue();
            list.push([adGroupId,keywordID]);

              var keywords = AdsApp.keywords().withIds(list).get();
         
                while (keywords.hasNext()) {
                  var keyword = keywords.next();
                  var stats = [];
                  var stats = keyword.getQualityScore();
                  row_array.push(stats);
                  sheet.appendRow(row_array)  
                     }

        }
            } 
    
 

Ответ №1:

var data_range = sheet.getDataRange(); это ваш 2D диапазон

var data = sheet.getDataRange().getValues(); является ли ваш 2D массив

Вы можете перебирать данные таким образом (не нужно last_row ):

 for(var r=2; r<=data.length; r  )
 

Затем

 var keywordID = data[r][13]; // or [12], I don't know
var adGroupId = data[r][14]; // or [13]
 

Вероятно, это выглядело бы примерно так

 var sheets = SpreadsheetApp.openByUrl(spreadsheetUrl).getSheets();

for (i = 0; i < sheets.length; i  ) {
  var sheet = sheets[i];
  var data = sheet.getDataRange().getValues();

  for (var r = 2; r <= data.length; r  ) {
    var keywordID = data[r][13]; // or [12]
    var adGroupId = data[r][14]; // or [13]
    var keywords = AdsApp.keywords().withIds([adGroupId, keywordID]).get(); // ?

    var row_array = []
    while (keywords.hasNext()) {
      var stats = keywords.next().getQualityScore();
      row_array.push(stats);
    }
    sheet.appendRow(row_array);
  }
}
 

Я не проверял это, так как у меня нет ваших данных и я не совсем понимаю задачу.

Комментарии:

1. Спасибо! Я думаю, что сейчас это почти работает. Строка var keywords = AdsApp.keywords().withIds([Идентификатор группы, ключевое слово]).get(); // ? должна быть 2D-массивом, поэтому я добавил метод push для переноса идентификатора группы и ключевого слова в другой массив, который работает, когда я использую регистратор. войдите в систему, чтобы проверить. Однако я получаю сообщение об ошибке TypeError: Не удается прочитать свойство «12» из неопределенного. (файл Code.gs, строка 149). Есть какие-нибудь идеи?

2. Ошибка находится в строке ключевого слова var — почему бы ей не считать 12 в качестве позиции столбца?

3. data[r][13] это массив. Его элементы отсчитываются от нуля. Так 0 же как и первая колонка, 1 вторая колонка и т. Д. Так что, вероятно, ваш 13-й столбец является 12-м элементом массива. Попробуйте [12] и [13] (вместо [13] и [14]) соответственно. И я подозреваю, что есть и другие ошибки. Например, я понятия не имею, будет ли это работать AdsApp.keywords().withIds([adGroupId, keywordID]).get() , это выглядит довольно неправильно.