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

Не работает скрипт битых ссылок

Бакалавр ✭

Добрый день! Такая проблема. Нашли скрипт битых ссылок, которые выявляет наличие 404-ых ошибок. Загрузили код в аккаунт Эдвордса, но при запуске выдает сообщение, что превышен лимит 50 000 обращений. и при этом скрипт не выдал нам наличие битых ссылок (хотя они у нас точно есть). Кто сталкивался с  этим? не можем понять в чем проблема и как надо переписать скрипт, чтобы он работал. Заранее спасибо!

Код выглядит вот так

function main() {
// You can add more if you want: http://goo.gl/VhIX
var BAD_CODES = [404,500];
var TO = ['pja@inksystem.biz'];
var SUBJECT = 'Broken Url Report - ' + _getDateString();
var HTTP_OPTIONS = {
    muteHttpExceptions:true
};

//Let's look at ads and keywords for urls
var iters = [
//For Ad Level Urls
AdWordsApp.ads()
.withCondition("Status = 'ENABLED'")
.withCondition("AdGroupStatus = 'ENABLED'")
.withCondition("CampaignStatus = 'ENABLED'")
.withCondition("Type = 'TEXT_AD'")
.get(),
//For Keyword Level Urls
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) {
//Let's remove the value track parameters
url = url.replace(/\{[0-9a-zA-Z]+\}/g,'');
}
if(already_checked[url]) { continue; }
var response_code;
try {
Logger.log("Testing url: "+url);
response_code = UrlFetchApp.fetch(url, HTTP_OPTIONS).getResponseCode();
} catch(e) {
//Something is wrong here, we should know about it.
bad_entities.push({e : entity, code : -1});
}
if(BAD_CODES.indexOf(response_code) >= 0) {
//This entity has an issue. Save it for later. 
bad_entities.push({e : entity, code : response_code});
}
already_checked[url] = true;
}
}
var column_names = ['Type','CampaignName','AdGroupName','Id','Headline/KeywordText','ResponseCode','DestUrl'];
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 = "There are " + bad_entities.length + " urls that are broken. See attachment for details.";

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

//Formats a row of results separated by SEP
function _formatResults(entity,SEP) {
var e = entity.e;
if(typeof(e['getHeadline']) != "undefined") {
//this is an ad entity
return ["Ad",
e.getCampaign().getName(),
e.getAdGroup().getName(),
e.getId(),
e.getHeadline(),
entity.code,
e.getDestinationUrl()
].join(SEP)+"\n";
} else {
// and this is a keyword
return ["Keyword",
e.getCampaign().getName(),
e.getAdGroup().getName(),
e.getId(),
e.getText(),
entity.code,
e.getDestinationUrl()
].join(SEP)+"\n";
}
}

//Helper function to format todays date
function _getDateString() {
return Utilities.formatDate((new Date()), AdWordsApp.currentAccount().getTimeZone(), "yyyy-MM-dd");
}

 

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

Не работает скрипт битых ссылок

Аспирант ✭

Доброго дня. Устарел getDestinationUrl нужно использовать urls().getFinalUrl()

Не работает скрипт битых ссылок

Бакалавр ✭

Добрый день! Заменила везде на rls().getFinalUrl()

Скрипт отрабатывает, проблем нет. Но если зайти в журнал отчетности, то там уведомление  "Cannot fetch more AdWords entities from iterator: exceeded limit of 50000."

Можно ли обойти это ограничение в лимит 50 000 объявлений?

Не работает скрипт битых ссылок

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

Больше чем 50 000 за раз нет, https://developers.google.com/adwords/scripts/docs/limits

  • Один итератор возвращает максимум 50 000 объектов (ключевых слов, объявлений, групп объявлений или кампаний). Затем iterator.hasNext() возвращает false, а в журнал заносится предупреждение.

Это значит что у вас много объектов.

Нужно сокращать кол-во объектов.

Тема 1 в 1 с вашей
https://www.ru.advertisercommunity.com/t5/Prodvinutye-funktsii-AdWords-KMS/Ne-otrabatyvaet-skript-Ad...

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

Не работает скрипт битых ссылок

Бакалавр ✭

Спасибо за подсказку!