Сейчас в сети: 257
Сейчас в сети: 257
Советы и вопросы по использованию скриптов AdWords
Подсказки
favorite_border
Ответить
Highlighted

Автоматическое создание объявлений из Spreadsheets

Студент ✭ ✭ ✭

Добрый день!

Существует необходимость автоматического создания однотипных объявлений на основе данных из таблиц Google Spreadsheats.

 

Нашел вот такое решение (https://www.youtube.com/watch?v=BiOQepEHuwA)

пример скрипта в комментариях к видео: 

var SOURCEDATA = "https://docs.google.com/spreadsheets/d/1eh49HaXmtRwgjVLxHK5RQDqRkIUysn6FbKOe9cjVCsQ/edit?usp=sharing";
var NAMEOFDATASHEET = "PeruDomesticos";
var EMAILADDRESS = "oergoto@gmail.com";
var ACCOUNTNAME = "My Account Name";
var MAKECHANGES =1;

function main() {
 doIt();
}

function doIt(){
 var startTime = (new Date()).getTime();
 var maxAllowedMinutes = 28;
 var maxAllowedTime = maxAllowedMinutes * 60 * 1000;
 
 var settings = new Object();
 settings.dataSheet = SpreadsheatApp.openByUrl (SOURCEDATA).getSheetByName (NAMEOFDATASHEET);
 
 settings.email = EMAILADDRESS;
 settings.accountName = ACCOUNTNAME;
 settings.thisAccountId = AdWordsApp.currentAccount().get.CustomerId();

 settings.makeChanges = MAKECHANGES;
 settings.debug = 1;

 settings.adgroupsUpdated = new Array();
 settings.adgroupsCreated = new Array();

 settings.columnNames = new Array();
 settings.dataValues = new Array();
 
 var nowDate = newDate();
 var yyyy = nowDate.getFullYear().toString();
 var mm = (nowDate.getMonth()+1).toString(); //getMonth() is zero-based
 var dd = nowDate.getDate().toString();
 settings.niceNowDate = yyyy + "/" + (mm[1]?mm:"0"+mm[0]) + "/" + (dd[1]?dd:"0"+dd[0]); // padding

 
 // OPCIONAL

 // Set Up Lable
 settings.optDate = nowDate.yyyymmdd();
 settings.labelText = "Script (" - settings.optDate - ")";
 AdWordsApp.createLabel(settings.labelText, [Origen]-[Destino]);

 
 var rows = settings.dataSheet.getDataRange();
 var numRows = rows.getNumRows();
 settings.numColumns = rows.getLastColumn();
 var values = rows.getValues();

 // Read Header Row
 var row = values [0]; 

 for(var i = 0; i < settings.numColumns; i++) {
  var value = row [i];
  settings.columnNames[i] = value;
  if(value.toLowerCase().indexOf("added to accounts") l= -1") {
   settings.addedToAccountsIndex = i;
  }
 }

 if(lsettings.addedToAccountsIndex) {
  settings.dataSheet.insertColumnAfter(settings.numColumns);
  settings.dataSheet.getRange(1, settings.numColumns + 1).setValue("Addedd to Accounts");
  settings.addedToAccountsIndex = settings.numColumns + 1;
 }
 Logger.log("settings.addedToAccountsIndex: " + settings.addedToAccountsIndex);


 // Go Through All Rows of Spreadsheet
 // ----------------------------------

 for(var i = 1; i<numRows; i++) {
  var currentTime = (new Date()).getTme();
  if(currentTime - startTime >= masAllowedTime) { 
   notify(settings);
   break;
  }
  settings.spreadsheetRow = i+1;
  var row = values[i];

  settings.addedTo = new Array();
  var templates = new Array();
  settings.alreadyAddedToAccounts = new Array();
  settings.addedToAccounts = row[settings.addedToAccountsIndex];
  for(var j = 0; j < settings.numColumns; j++) {
   settings.dataValues(j);
  }


 Logger.log(settings.dataValueA + " - " + settings.dataValueB + " - " + settings.dataValueC + " - " + settings.DataValueD + " - " + settings.dataValueE + " - " );
 
 if(typeof(settings.addedToAccounts) l= 'undefined') {
  settings.addedTo = settings.addedToAccounts.split(" , ");
 }


 
 //-----------------------------------------
 //               Template Ads
 // ----------------------------------------

 
 var thisTemplate = newObject();
 thisTemplate.maxCpc = 1,51;
 thisTemplate.target = [{account:"877-374-2027",campaing:"pe-___-gg-es-sr-nb-al-oxd-domesticos-ads_script"}];
 thisTemplate.keywordTemplate = newArray("tiquetes [Destino]",
      "tiquetes [Origen] [Destino]",
      "aerolineas [Destino]",
      "aerolineas [Origen] [Destino]",
      "pasajes [Destino]",
      "pasajes [Origen] [Destino]",
      "boletos [Destino]",
      "boletos [Origen] [Destino]",
      "tickets [Destino]",
      "tickets [Origen] [Destino]",
      "asientos [Destino]",
      "asientos [Origen] [Destino]",
      "boletos [Destino]",
      "boletos [Origen] [Destino]",
      "viajes [Destino]",
      "viajes [Origen] [Destino]",
      "viajar [Destino]",
      "viajar [Origen] [Destino]",
      "billetes [Destino]",
      "billetes [Origen] [Destino]",
      "vuelos [Destino]",
      "vuelos [Origen] [Destino]",
      "avion [Destino]",
      "avion [Origen] [Destino]",
      "promocion [Destino]",
      "promocion [Origen] [Destino]",
      "reservar [Destino]",
      "reservar [Origen] [Destino]",
      "reservas [Destino]",
      "reservas [Origen] [Destino]"
      );


 thisTemplate.adGroupNameTemplate = "[Origen] - [Destino] - [Campaña]";

 thisTemplate.headlineTemplate = new Array("[Destino] Desde [Precio]" , "De [Origen] A [Destino]");
 thisTemplate.description1Template = new Array("Aprovecha Y Vuela A [Destino]" , "Desde [Precio]");
 thisTemplate.description2Template = new Array("Desde [Precio] Reserva" , "Solo Con Avianca, Reserva!");
 thisTemplate.displayUrlTemplate = new Array("Avianca.com/Promocion-[Destino]");
 thisTemplate.destinationUrlTemplate = new Array("http://w...content-available-to-author-only...a.com/es-pe/[UtmUrl]");

 thisTemplate.defaultHeadlines = new Array ("Vuela A [Destino]");
 thisTemplate.defaultDescription1 = new Array ("Desde [Precio].");
 thisTemplate.defaultDescription2 = "Aprovecha Con Avianca, Reserva!";
 thisTemplate.defaultDisplayUrl = new Array("Avianca.com/[Destino]");
 thisTemplate.defaultDestinationUrl = "http://w...content-available-to-author-only...a.com/es-pe/";
 thisTemplate.label = "[Origen]-[Destino]";
 templates.push(thisTemplate);

 }
}

На основе него и видео внес правки в скрипт и получил:

 

 

var SOURCEDATA = "ВАША ТАБЛИЦА";
var NAMEOFDATASHEET = "НАЗВАНИЕ ТАБЛИЦЫ";
var EMAILADDRESS = "ВАШ ИМЕЙЛ";
var ACCOUNTNAME = "НАЗВАНИЕ ВАШЕГО АККАУНТА";
var MAKECHANGES =1;

function main() {
 doIt();
}

function doIt(){
 var startTime = (new Date()).getTime();
 var maxAllowedMinutes = 28;
 var maxAllowedTime = maxAllowedMinutes * 60 * 1000;
 
 var settings = new Object();
 settings.dataSheet = SpreadsheatApp.openByUrl (SOURCEDATA).getSheetByName (NAMEOFDATASHEET);
 
 settings.email = EMAILADDRESS;
 settings.accountName = ACCOUNTNAME;
 settings.thisAccountId = AdWordsApp.currentAccount().get.CustomerId();

 settings.makeChanges = MAKECHANGES;
 settings.debug = 1;

 settings.adgroupsUpdated = new Array();
 settings.adgroupsCreated = new Array();

 settings.columnNames = new Array();
 settings.dataValues = new Array();
 
 var nowDate = newDate();
 var yyyy = nowDate.getFullYear().toString();
 var mm = (nowDate.getMonth()+1).toString(); //getMonth() is zero-based
 var dd = nowDate.getDate().toString();
 settings.niceNowDate = yyyy + "/" + (mm[1]?mm:"0"+mm[0]) + "/" + (dd[1]?dd:"0"+dd[0]); // padding

 
 // OPTIONAL

 // Set Up Lable
 settings.optDate = nowDate.yyyymmdd();
 settings.labelText = "Script (" - settings.optDate - ")";
 AdWordsApp.createLabel(settings.labelText, [NAME]-[PRICE]);

 
 var rows = settings.dataSheet.getDataRange();
 var numRows = rows.getNumRows();
 settings.numColumns = rows.getLastColumn();
 var values = rows.getValues();

 // Read Header Row
 var row = values [0]; 

 for(var i = 0; i < settings.numColumns; i++) {
  var value = row [i];
  settings.columnNames[i] = value;
  if(value.toLowerCase().indexOf("added to accounts") != -1)" {
   settings.addedToAccountsIndex = i;
  }
 }
 if(!settings.addedToAccountsIndex) {
  settings.dataSheet.insertColumnAfter(settings.numColumns);
  settings.dataSheet.getRange(1, settings.numColumns + 1).setValue("Addedd to Accounts");
  settings.addedToAccountsIndex = settings.numColumns + 1;
 }
 Logger.log("settings.addedToAccountsIndex: " + settings.addedToAccountsIndex);


 // Go Through All Rows of Spreadsheet
 // ----------------------------------

 for(var i = 1; i<numRows; i++) {
  var currentTime = (new Date()).getTme();
  if(currentTime - startTime >= masAllowedTime) { 
   notify(settings);
   break;
  }
  settings.spreadsheetRow = i+1;
  var row = values[i];

  settings.addedTo = new Array();
  var templates = new Array();
  settings.alreadyAddedToAccounts = new Array();
  settings.addedToAccounts = row[settings.addedToAccountsIndex];
  for(var j = 0; j < settings.numColumns; j++) {
   settings.dataValues(j);
  }


 Logger.log(settings.dataValueA + " - " + settings.dataValueB + " - " + settings.dataValueC + " - " + settings.DataValueD + " - " + settings.dataValueE + " - " );
 
 if(typeof(settings.addedToAccounts) l= 'undefined') {
  settings.addedTo = settings.addedToAccounts.split(" , ");
 }


 
 //--------------------------------------------------------------------
 //  UPDATE THIS SECTION WITH THE TEAMPLATE FOR YOUR ADS
 // -------------------------------------------------------------------

 
 var thisTemplate = newObject();
 thisTemplate.maxCpc = 15.00;
 thisTemplate.target = [{account:"ID ВАШЕГО АККАУНТА",campaing:"НАЗВАНИЕ КОМПАНИИ В КОТОРОЙ БУДУТ СОЗДАНЫ ОБЪЯВЛЕНИЯ"}];
 thisTemplate.keywordTemplate = newArray("[NAME]|[URL]",
      "Купить [CATEGORY][NAME]|[URL]",
      "Цена [CATEGORY][NAME]|[URL]"
            );


 thisTemplate.adGroupNameTemplate = "[CATEGORY]";

 thisTemplate.headline1Template = new Array("[NAME]");
 thisTemplate.headline2Template = new Array("за [PRICE] грн");  
 thisTemplate.descriptionTemplate = new Array("ВАШ ТЕКСТ ОБЪЯВЛЕНИЯ");
 thisTemplate.path1Template = new Array("ВАШ ПУТЬ1");
 thisTemplate.path2Template = new Array("ВАШ ПУТЬ2");
 thisTemplate.finalUrlTemplate = new Array("ВАШ УРЛ");
   
 thisTemplate.defaultHeadline1Template = new Array("СТАНДАРТНЫЙ ЗАГОЛОВОК1");
 thisTemplate.defaultHeadline2Template = new Array("СТАНДАРТНЫЙ ЗАГОЛОВОК2");  
 thisTemplate.defaultDescriptionTemplate = new Array("ВАШЕ СТАНДАРТНОЕ ОПИСАНИЕ");
 thisTemplate.defaultPath1Template = new Array("СТАНДАРТНЫЙ ПУТЬ1");
 thisTemplate.defaultPath2Template = new Array("СТАНДАРТНЫЙ ПУТЬ2");
 thisTemplate.defaultFinalUrlTemplate = new Array("СТАНДАРТНЫЙ УРЛ");
 thisTemplate.label = "[NAME]-[CATEGORY]";
 templates.push(thisTemplate);

 }
}

 

При проверке скрипта выдает ошибку (Unterminated string literal. (строка 58)). В чем ошибка? Подскажите как исправить? Будет ли работать скрипт после того как я внес изменения в блок который отвечал за создание самого объявления. Ведь в оригинале использовались стандартные объявления я же постарался адаптировать его под новый расширенный формат.

Если у кого-то была подобная ситуация и есть более простое решение буду рад любым советам.


var SOURCEDATA = "_j_8M/edit#gid=0";
var NAMEOFDATASHEET = «xxx»;
var EMAILADDRESS = «xxx»;
var ACCOUNTNAME = "xxx";
var MAKECHANGES =1;

function main() {
 doIt();
}

function doIt(){
 var startTime = (new Date()).getTime();
 var maxAllowedMinutes = 28;
 var maxAllowedTime = maxAllowedMinutes * 60 * 1000;
 
 var settings = new Object();
 settings.dataSheet=SpreadsheetApp.openByUrl(SOURCEDATA).getSheetByName(NAMEOFDATASHEET);
  
 settings.email = EMAILADDRESS;
 settings.accountName = ACCOUNTNAME;
 settings.thisAccountId = AdWordsApp.currentAccount().getCustomerId();

 settings.makeChanges = MAKECHANGES;
 settings.debug = 1;

 settings.adgroupsUpdated = new Array();
 settings.adgroupsCreated = new Array();

 settings.columnNames = new Array();
 settings.dataValues = new Array();
 
 var nowDate=new Date();
 var yyyy = nowDate.getFullYear().toString();
 var mm = (nowDate.getMonth()+1).toString(); //getMonth() is zero-based
 var dd = nowDate.getDate().toString();
 settings.niceNowDate = yyyy + "/" + (mm[1]?mm:"0"+mm[0]) + "/" + (dd[1]?dd:"0"+dd[0]); // padding

 
 // OPTIONAL

 // Set Up Lable
 settings.optDate = Utilities.formatDate(nowDate, "GMT", "yyyymmdd");
 settings.labelText = "Script (" - settings.optDate - ")";
 AdWordsApp.createLabel(settings.labelText, "[NAME]-[PRICE]");

 
 var rows = settings.dataSheet.getDataRange();
 var numRows = rows.getNumRows();
 settings.numColumns = rows.getLastColumn();
 var values = rows.getValues();

 // Read Header Row
 var row = values [0]; 

 for(var i = 0; i < settings.numColumns; i++) {
  var value = row [i];
  settings.columnNames[i] = value;
  if(value.toLowerCase().indexOf("added to accounts") != -1) {
   settings.addedToAccountsIndex = i;
  }
 }
 if(!settings.addedToAccountsIndex) {
  settings.dataSheet.insertColumnAfter(settings.numColumns);
  settings.dataSheet.getRange(1, settings.numColumns + 1).setValue("Addedd to Accounts");
  settings.addedToAccountsIndex = settings.numColumns + 1;
 }


 // Go Through All Rows of Spreadsheet
 // ----------------------------------

 for(var i = 1; i<numRows; i++) {
   var currentDate = new Date();
  var currentTime = currentDate.getTime();
  if(currentTime - startTime >= maxAllowedTime) { 
   notify(settings);
   break;
  }
  settings.spreadsheetRow = i+1;
  var row = values[i];

  settings.addedTo = new Array();
  var templates = new Array();
  settings.alreadyAddedToAccounts = new Array();
  settings.addedToAccounts = row[settings.addedToAccountsIndex];
  for(var j = 0; j < settings.numColumns; j++) {
   settings.dataValues[j] = row[j];
  }

     //Logger.log(settings.dataValues);
       Logger.log(settings.dataValueA + " - " + settings.dataValueB + " - " + settings.dataValueC + " - " + settings.DataValueD + " - " + settings.dataValueE + " - " );
 
 if(typeof(settings.addedToAccounts) != 'undefined') {
  settings.addedTo = settings.addedToAccounts.split(" , ");
 }


 
 //--------------------------------------------------------------------
 //  UPDATE THIS SECTION WITH THE TEAMPLATE FOR YOUR ADS
 // -------------------------------------------------------------------

 var thisTemplate = new Object();
 thisTemplate.maxCpc = 15.00;
 thisTemplate.target = [{account:"xxx-xxx-xxxx",campaing:"xxxxxxxx"}];
 thisTemplate.keywordTemplate = new Array("[NAME]|[URL]",
      "Купить [CATEGORY][NAME]|[URL]",
      "Цена [CATEGORY][NAME]|[URL]"
            );


 thisTemplate.adGroupNameTemplate = "[CATEGORY]";
 thisTemplate.headline1Template = new Array("[NAME]");
 thisTemplate.headline2Template = new Array("за [PRICE] грн");  
 thisTemplate.descriptionTemplate = new Array("ВАШ ТЕКСТ ОБЪЯВЛЕНИЯ");
 thisTemplate.path1Template = new Array("ВАШ ПУТЬ1");
 thisTemplate.path2Template = new Array("ВАШ ПУТЬ2");
 thisTemplate.finalUrlTemplate = new Array("[URL]");
   
 thisTemplate.defaultHeadline1Template = new Array(["NAME"]);
 thisTemplate.defaultHeadline2Template = new Array("qwerty2");  
 thisTemplate.defaultDescriptionTemplate = new Array("qwerty");
 thisTemplate.defaultPath1Template = new Array("qwerty");
 thisTemplate.defaultPath2Template = new Array("qwerty2");
 thisTemplate.defaultFinalUrlTemplate = new Array("[URL]");
 thisTemplate.label = "[CATEGORY]";
 templates.push(thisTemplate);
Logger.log(templates);
  }
}

 

Автоматическое создание объявлений из Spreadsheets

Магистр ✭ ✭

@Eugeniy K Все дело в кавычке.

if(value.toLowerCase().indexOf("added to accounts") != -1)" {

 

Должно быть вот так

if(value.toLowerCase().indexOf("added to accounts") != -1) {

Автоматическое создание объявлений из Spreadsheets

Студент ✭ ✭ ✭

@Dmytro Tonkikh Спасибо! Теперь Missing ) after condition. (строка 93). Может подскажите в чем там проблема. (Вроде все скобки закрыты)

Автоматическое создание объявлений из Spreadsheets

Магистр ✭ ✭

@Eugeniy K 

if(typeof(settings.addedToAccounts) l= 'undefined') {

Теперь знак вопроса

if(typeof(settings.addedToAccounts) != 'undefined') {

Автоматическое создание объявлений из Spreadsheets

Студент ✭ ✭ ✭

@Dmytro Tonkikh, Да заметил и изменил теперь журнал выдает ошибку в 17 строке 

ReferenceError: "SpreadsheatApp" is not defined. (line 17).

Автоматическое создание объявлений из Spreadsheets

Магистр ✭ ✭

Уберите пробелы

settings.dataSheet = SpreadsheatApp.openByUrl (SOURCEDATA).getSheetByName (NAMEOFDATASHEET);

Автоматическое создание объявлений из Spreadsheets

Студент ✭ ✭ ✭

@Dmytro Tonkikh заменил SpreadsheAtApp.open на SpreadsheEtApp.open. теперь ошибка с 

 Cannot call method "CustomerId" of undefined. (line 21)

 

Автоматическое создание объявлений из Spreadsheets

Магистр ✭ ✭

@Eugeniy K

 

settings.thisAccountId = AdWordsApp.currentAccount().get.CustomerId();

settings.thisAccountId = AdWordsApp.currentAccount().CustomerId();

Автоматическое создание объявлений из Spreadsheets

Студент ✭ ✭ ✭

@Dmytro Tonkikh Та же строка но другая ошибка 

Cannot find function CustomerId in object Account. (line 21)


Автоматическое создание объявлений из Spreadsheets

Магистр ✭ ✭

@Eugeniy K

settings.thisAccountId = AdWordsApp.currentAccount().getCustomerId();