Итераторы

Итераторы – это общие шаблоны программирования, которые используются для обхода списка объектов в следующих случаях:

  • Размер списка изначально не известен.
  • Загрузка всего списка в память может занять слишком много ресурсов.

Итераторы поддерживают два метода: boolean hasNext() и Object next(). Скрипты AdWords используют такие шаблоны для извлечения объектов AdWords.

Функционально итераторы почти не отличаются от обычных массивов. С их помощью можно сократить код. Приведем в качестве примера код для сбора данных из массива:

for (var i = 0; i < myArray.length; i++) {
  var myObject = myArray[i];
}
Код для итератора:
while (myIterator.hasNext()) {
  var myObject = myIterator.next();
}

Следующий пример кода демонстрирует использование итератора для всех кампаний в аккаунте:

var campaignIterator = AdWordsApp.campaigns().get();

while (campaignIterator.hasNext()) {
  var campaign = campaignIterator.next();
  Logger.log(campaign.getName() +
      "; active? " + campaign.isEnabled() +
      "; budget=" + campaign.getBudget());
}

В скриптах AdWords итераторы объектов часто имеют ограничения и могут извлечь только первые 50 тыс. объектов. О существующих лимитах читайте в нашем Справочном центре. Если нужно узнать общее количество объектов, извлеченных итератором, вызовите iterator.totalNumEntities(). Так вы сможете разбить работу на несколько этапов. Допустим, сначала выполняется следующий код:

var keywords = campaign.keywords()
    .withCondition("Ctr > 0.01")
    .forDateRange("YESTERDAY")
    .get();
// Проверка соблюдения ограничений.
if (keywords.totalNumEntities() > 50000) {
    // Изменение условий, которое приведет к извлечению меньшего количества ключевых слов.
    keywords = campaign.keywords()
      .withCondition("Ctr > 0.015")
      .forDateRange("YESTERDAY")
      .get();
}

Применение withLimit() к селектору не влияет на значение totalNumEntities(). Значения x и y в приведенном ниже примере кода будут одинаковыми.

var x = AdWordsApp.keywords().get().totalNumEntities();
var y = AdWordsApp.keywords().withLimit(5).get().totalNumEntities();

Чтобы получить итератор для объектов AdWords, сначала необходимо создать селектор.

Оставить отзыв о...

Текущей странице
Скрипты AdWords
Скрипты AdWords