#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()
, это выглядит довольно неправильно.