помогите доработать элементарный JavaScript

s2709
На сайте с 30.03.2015
Offline
182
1217

Использую всем известный скрипт для управления ставками в Google adwords (автора не знаю)

вообщем то, скрипт повышет или понижает ставки в зависимости от того на каком месте показывалось объявление за выбранный интервал времени...

если объявление показывалось ниже заданного интервала, то ставки повышаются на 5%

если объявление показывалось выше заданного интервала, то ставки понижаются на 5%

после чего запускается автоматическое правило в adwords, что бы были подняты до попадания на первую страницу.

сам скрипт:


function main() {
//масив Ярлыков.
//Если один то просто строчка типа "Ярлык1".
//Если масив, то ["Ярлык1","Ярлык2",...,"ЯрлыкN"]
var LabelNames = ["3 место"];
//максимально допустимая цена за клик
var maxPrice = 35;
//минимално допустимая цена
var minPrice = 0.5;
//нижняя граница базового диапазона AveragePosition
var customLowerAveragePosition = 2.5;
//верхняя граница базового диапазона AveragePosition
var customUpperAveragePosition = 3;
//процент для базового диапазона
var customPercent = 0;
//(%)процент изменения ставки
var stepPercent = 5;
//наименьшее значение ставки AveragePosition
var minAveragePosition = 1;
//наибольшее значение ставки AveragePosition
var maxAveragePosition = 10;
//diapason
var diapason = 0.5;


var tempPercent = customPercent;
var down_max = customLowerAveragePosition;
var down_min = down_max - diapason;

var up_min = customUpperAveragePosition;
var up_max = up_min + diapason;

var to_up = maxAveragePosition - customUpperAveragePosition;

var labelName = "";
if(LabelNames.constructor === Array){
labelName = "LabelNames CONTAINS_ANY ['" + LabelNames.join("','") + "']";
}else{
labelName = "LabelNames = '" + LabelNames + "'";
}
Logger.log("Condition for labels: " + labelName);

var selectedKeyword = 0;
while(down_max > minAveragePosition){
Logger.log("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
tempPercent = tempPercent - stepPercent;
var keywordIterator = AdWordsApp.keywords()
.withCondition(labelName)
.withCondition("AveragePosition < " + Number(down_max) + " AND AveragePosition > " + Number(down_min - 0.01))
.withCondition("Impressions > 0")
.forDateRange("TODAY")
.get();
Logger.log(" AveragePosition < " + Number(down_max) + " AND AveragePosition > " + Number(down_min - 0.01));
while(keywordIterator.hasNext()){
selectedKeyword = selectedKeyword + 1;
Logger.log(" ---------------");
var keyword = keywordIterator.next();
Logger.log(" " + selectedKeyword + " ----------- keyword: " + keyword.getText());
Logger.log(" old price " + keyword.getMaxCpc());
var tempPrice = keyword.getMaxCpc() + (keyword.getMaxCpc() * tempPercent)/100;
if (tempPrice > maxPrice) {
keyword.setMaxCpc(maxPrice);
}else if (tempPrice < minPrice){
keyword.setMaxCpc(minPrice);
}else{
keyword.setMaxCpc(tempPrice);
}
Logger.log(" new price " + keyword.getMaxCpc());
Logger.log(" add percent " + tempPercent);
}
down_max = down_min - 0.01;
down_min = down_max - diapason;
}

tempPercent = customPercent;

while(up_min < maxAveragePosition){
Logger.log("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
tempPercent = tempPercent + stepPercent;
var keywordIterator = AdWordsApp.keywords()
.withCondition(labelName)
.withCondition("AveragePosition < " + Number(up_max) + " AND AveragePosition > " + Number(up_min-0.01))
.withCondition("Impressions > 0")
.forDateRange("TODAY")
.get();
Logger.log(" AveragePosition < " + Number(up_max) + " AND AveragePosition > " + Number(up_min-0.01));
while (keywordIterator.hasNext()){
selectedKeyword = selectedKeyword + 1;
Logger.log(" ---------------");
var keyword = keywordIterator.next();
Logger.log(" " + selectedKeyword + " ------------------keyword " + keyword.getText());
Logger.log(" old price " + keyword.getMaxCpc());
var tempPrice = keyword.getMaxCpc() + (keyword.getMaxCpc() * tempPercent)/100;
if (tempPrice > maxPrice) {
keyword.setMaxCpc(maxPrice);
}else if (tempPrice < minPrice){
keyword.setMaxCpc(minPrice);
}else{
keyword.setMaxCpc(tempPrice);
}
Logger.log(" new price " + keyword.getMaxCpc());
Logger.log(" add percent " + tempPercent);
}

up_min = up_max;
up_max = up_max + diapason;
}


}

возникла необходимость немного модифицировать сам скрипт, что бы

ставки повышались на 5% (я так понимаю задаётся переменной var stepPercent = 5)

а вот понижались только на 2%, и что бы этот параметр можно было задавать в первоначальных настройках скрипта

поскольку я имею отдалённое представление о программировании :), прошу помощи в тюнинге скрипта

Заранее спасибо.

ДП
На сайте с 23.11.2009
Offline
203
#1

tempPercent = tempPercent - stepPercent;

замените на

tempPercent = tempPercent - minusStepPercent;

и в начале скрипта пропишите, там где всякие var'ы.

var minusStepPercent= 2;

Если всё остальное рабочее, то должно помочь.

Samail
На сайте с 10.05.2007
Offline
361
#2

tempPercent = tempPercent - stepPercent;
наверное это поменять на
tempPercent = tempPercent - 2;

ну можно так-же конечно и так:

//(%)процент изменения ставки

var stepPercent = 5;

поменять на :


//(%)процент увеличения ставки
var stepPercent = 5;
//(%)процент уменьшения ставки
var minusPercent = 2;

и

tempPercent = tempPercent - stepPercent;

на

tempPercent = tempPercent - minusPercent;
s2709
На сайте с 30.03.2015
Offline
182
#3

спасибо...

сейчас попробую :)

и насколько я понимаю процент понижения ставки задаётся переменной var minusPercent ?

ДП
На сайте с 23.11.2009
Offline
203
#4

да. 10 символов

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий