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

Скрипт остановки кампании когда сайт не работает

Студент ✭

Приветствую, сообщество!

 

Есть ли у кого-то наработки по скрипту, останавливающему кампанию, когда сайт/страница не работает/выдает ошибку 404 и т.д?

2 Ответ экспертаverified_user

Утвержденные решения
Лучший ответ.
Решение
Утвердил автор темы Василий В
сентября 2015

Re: Скрипт остановки кампании когда сайт не работает

Ведущий участник

Приветствую, 
Вот такое есть. Разработка не своя, но нормально работало на средних по размеру аккаунтах. 

function main() {
  // можно добавить больше кодов ответа сервера. Укажите свой e-mail.
  var BAD_CODES = [404,500];
  var TO = ['адрес вашей почтыy@gmail.com'];
  var SUBJECT = 'Отчет по некорректным url - ' + _getDateString();
  var HTTP_OPTIONS = {
    muteHttpExceptions:true
  };

  //Собираем url всех ключевиков и объявлений
  var iters = [
    // Для url уровня объявлений
    AdWordsApp.ads()
      .withCondition("Status = 'ENABLED'")
      .withCondition("AdGroupStatus = 'ENABLED'")
      .withCondition("CampaignStatus = 'ENABLED'")
      .withCondition("Type = 'TEXT_AD'")
      .get(),
    // Для url уровня ключевиков
    // AdWordsApp.keywords()
    //   .withCondition("Status = 'ENABLED'")
    //   .withCondition("DestinationUrl != ''")
   //   .withCondition("AdGroupStatus = 'ENABLED'")
    //   .withCondition("CampaignStatus = 'ENABLED'")
    //   .get()
    ];

  var already_checked = {};
  var bad_entities = [];
  for(var x in iters) {
    var iter = iters[x];
    while(iter.hasNext()) {
      var entity = iter.next();
      if(entity.getDestinationUrl() == null) { continue; }
      var url = entity.getDestinationUrl();
      if(url.indexOf('{') >= 0) {
        // Удаляем параметры отслеживания
        url = url.replace(/\{[0-9a-zA-Z]+\}/g,'');
      }
      if(already_checked[url]) { continue; }
      var response_code;
      try {
        Logger.log("Тестовый url: "+url);
        response_code = UrlFetchApp.fetch(url, HTTP_OPTIONS).getResponseCode();
      } catch(e) {
        // Что-то пошло не так, нужно сообщить нам об этом
        bad_entities.push({e : entity, code : -1});
        Logger.log('Ошибка');
        entity.pause();
      }
      if(BAD_CODES.indexOf(response_code) >= 0) {
        // Этот элемент с ошибкой, сохраним его.
        bad_entities.push({e : entity, code : response_code});
        Logger.log('Некорректный url: ' + url);
        entity.pause();
      }
      already_checked[url] = true;
    }
  }
  var column_names = ['Тип','Кампания','Группа','Id','Заголовок/Ключевое слово','Ответ сервера','Адрес(Url)'];
  var attachment = column_names.join(",")+"\n";
  for(var i in bad_entities) {
    attachment += _formatResults(bad_entities[i],",");
  }
  if(bad_entities.length > 0) {
    var options = { attachments: [Utilities.newBlob(attachment, 'text/csv', 'bad_urls_'+_getDateString()+'.csv')] };
    var email_body = "В наличии " + bad_entities.length + " некорректных url. Подробности в приложении.";

    for(var i in TO) {
      MailApp.sendEmail(TO[i], SUBJECT, email_body, options);
    }
  }
}

//Форматирование рядов с результатами, разделяемое SEP
function _formatResults(entity,SEP) {
  var e = entity.e;
  if(typeof(e['getHeadline']) != "undefined") {
    // Элемент объявления
    return ["Ad",
            e.getCampaign().getName(),
            e.getAdGroup().getName(),
            e.getId(),
            e.getHeadline(),
            entity.code,
            e.getDestinationUrl()
           ].join(SEP)+"\n";
  } else {
    // и ключевика
    return ["Keyword",
            e.getCampaign().getName(),
            e.getAdGroup().getName(),
            e.getId(),
            e.getText(),
            entity.code,
            e.getDestinationUrl()
           ].join(SEP)+"\n";
  }
}

// Вспомогательная функция. Форматирование сегодняшней даты.
function _getDateString() {
  return Utilities.formatDate((new Date()), AdWordsApp.currentAccount().getTimeZone(), "yyyy-MM-dd");
}

 

C уважением,
Павел

Просмотреть решение в исходном сообщении


Все ответы
Лучший ответ.
Решение
Утвердил автор темы Василий В
сентября 2015

Re: Скрипт остановки кампании когда сайт не работает

Ведущий участник

Приветствую, 
Вот такое есть. Разработка не своя, но нормально работало на средних по размеру аккаунтах. 

function main() {
  // можно добавить больше кодов ответа сервера. Укажите свой e-mail.
  var BAD_CODES = [404,500];
  var TO = ['адрес вашей почтыy@gmail.com'];
  var SUBJECT = 'Отчет по некорректным url - ' + _getDateString();
  var HTTP_OPTIONS = {
    muteHttpExceptions:true
  };

  //Собираем url всех ключевиков и объявлений
  var iters = [
    // Для url уровня объявлений
    AdWordsApp.ads()
      .withCondition("Status = 'ENABLED'")
      .withCondition("AdGroupStatus = 'ENABLED'")
      .withCondition("CampaignStatus = 'ENABLED'")
      .withCondition("Type = 'TEXT_AD'")
      .get(),
    // Для url уровня ключевиков
    // AdWordsApp.keywords()
    //   .withCondition("Status = 'ENABLED'")
    //   .withCondition("DestinationUrl != ''")
   //   .withCondition("AdGroupStatus = 'ENABLED'")
    //   .withCondition("CampaignStatus = 'ENABLED'")
    //   .get()
    ];

  var already_checked = {};
  var bad_entities = [];
  for(var x in iters) {
    var iter = iters[x];
    while(iter.hasNext()) {
      var entity = iter.next();
      if(entity.getDestinationUrl() == null) { continue; }
      var url = entity.getDestinationUrl();
      if(url.indexOf('{') >= 0) {
        // Удаляем параметры отслеживания
        url = url.replace(/\{[0-9a-zA-Z]+\}/g,'');
      }
      if(already_checked[url]) { continue; }
      var response_code;
      try {
        Logger.log("Тестовый url: "+url);
        response_code = UrlFetchApp.fetch(url, HTTP_OPTIONS).getResponseCode();
      } catch(e) {
        // Что-то пошло не так, нужно сообщить нам об этом
        bad_entities.push({e : entity, code : -1});
        Logger.log('Ошибка');
        entity.pause();
      }
      if(BAD_CODES.indexOf(response_code) >= 0) {
        // Этот элемент с ошибкой, сохраним его.
        bad_entities.push({e : entity, code : response_code});
        Logger.log('Некорректный url: ' + url);
        entity.pause();
      }
      already_checked[url] = true;
    }
  }
  var column_names = ['Тип','Кампания','Группа','Id','Заголовок/Ключевое слово','Ответ сервера','Адрес(Url)'];
  var attachment = column_names.join(",")+"\n";
  for(var i in bad_entities) {
    attachment += _formatResults(bad_entities[i],",");
  }
  if(bad_entities.length > 0) {
    var options = { attachments: [Utilities.newBlob(attachment, 'text/csv', 'bad_urls_'+_getDateString()+'.csv')] };
    var email_body = "В наличии " + bad_entities.length + " некорректных url. Подробности в приложении.";

    for(var i in TO) {
      MailApp.sendEmail(TO[i], SUBJECT, email_body, options);
    }
  }
}

//Форматирование рядов с результатами, разделяемое SEP
function _formatResults(entity,SEP) {
  var e = entity.e;
  if(typeof(e['getHeadline']) != "undefined") {
    // Элемент объявления
    return ["Ad",
            e.getCampaign().getName(),
            e.getAdGroup().getName(),
            e.getId(),
            e.getHeadline(),
            entity.code,
            e.getDestinationUrl()
           ].join(SEP)+"\n";
  } else {
    // и ключевика
    return ["Keyword",
            e.getCampaign().getName(),
            e.getAdGroup().getName(),
            e.getId(),
            e.getText(),
            entity.code,
            e.getDestinationUrl()
           ].join(SEP)+"\n";
  }
}

// Вспомогательная функция. Форматирование сегодняшней даты.
function _getDateString() {
  return Utilities.formatDate((new Date()), AdWordsApp.currentAccount().getTimeZone(), "yyyy-MM-dd");
}

 

C уважением,
Павел

Re: Скрипт остановки кампании когда сайт не работает

Восходящие звезды
Чучуть добавлю, один из прекрасных специалистов, сделал подборку скриптов (134 штуки), думаю в этом списке найдете то, что вам нужно http://bit.ly/1IzsVCA

Re: Скрипт остановки кампании когда сайт не работает

Студент ✭
список -хорошо, но по теме подходит ТОЛЬКО 1 пункт, да и тот, то-же самое, просто автор скрипта!!! Тем кто хочет найти автора ранее изложенного кода и не перебирать список : http://www.freeadwordsscripts.com/2013/04/report-on-broken-urls-in-your-account.html

Скрипт остановки кампании когда сайт не работает

Аспирант ✭

@Vladimir C только решение по ссылке freeadwordsscripts и то, что было ранее принято за решение, не будет работать! Из-за getDestinationUrl

Re: Скрипт остановки кампании когда сайт не работает

Студент ✭
Ну я вытащил из списка ссылку ту-же самую что и в решении ))) так-что ожидаемо )