Как вытащить из Gmail остановки кампаний в Яндекс Директе из-за нехватки бюджета
Яндекс Директ отдает много инфы и статистики о расходах, показах, площадках, настройках и вот этом всём в интерфейсе или через API.
Но не отдает информацию о том, когда останавливаются кампании, когда им не хватает бюджета.
Эту инфу можно доставать из почты, так как директ отправляет письма, каждый раз, когда кампания останавливается.
Воспользуемся этим. Будем парсить почту.
результат работы скрипта
Как запустить:
Самые свежие исходники скрипта на GitHub’e
- копируем этот код;
- создаем новую гугл таблицу;
-
открываем скрипт эдитор
-
называем проект как угодно, но желательно так, чтобы через время вы поняли, что это. Удаляем имеющийся код
-
заполняем projname (если нужно собрать остановки, только по 1 аккаунту). Можно оставить пустым, тогда соберется по всем аккаунтам
название аккаунта, берем из письма
-
жмем на плей, нажимаем review и со всем соглашаемся
-
увидим error. Всё ок, нажимем сохранить и запускаем еще раз
-
ждём. когда вот это исчезнет
- success — в таблице появились данные
Когда-то допилю, ну или вы помогите:
- cделать чтобы грузилось больше 500 строк (сейчас это ограничение метода GmailApp.search)
- сделать, чтобы скрипт запускался автоматически каждый день и дописывал остановки за вчера
Код скрипта:
var projname =''; // название аккаунта, берем из письма http://joxi.ru/4AkkOWnIy4qpgA
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var header = [["Логин", "Дата","Время","Кампания","ID кампании"]] //названия колонок
sheet.getRange('A:E').clearContent(); //очищаем лист , на самом деле только колонки A:E
sheet.getRange("A1:E1").setValues(header); //записываем шапку таблицы
function get_threads_from_yandex(projname_arg) {
return GmailApp.search('(яндекс.директ/показы ) and (приостановлены по дневному ограничению бюджета) and ('+ projname_arg +')')
};
var threads = get_threads_from_yandex(projname);
var i=0;
for (thread in threads)
{
var datetime = threads[i].getLastMessageDate(); // дата из даты письма
var messages = threads[i].getMessages(); //вытаскиваем все сообщения в ветке
var message = messages[0].getPlainBody(); //вытаскиваем текст первого сообщения
var q = message.split('\n', 3) //разбиваем письмо на строки (берем всего 4, там вся нужная инфа)
// ↓ пишем инфу в таблицу
sheet.getRange("A"+(i+2)).setValue(q[0].match(RegExp("Здравствуйте, (.*)!"))[1]); //accname
sheet.getRange("B"+(i+2)).setValue(datetime.getFullYear()+'-'+ (datetime.getMonth()< 9 ? '0' : '') + (1+datetime.getMonth()) + '-' + (datetime.getDate()< 10 ? '0' : '') + datetime.getDate()); //date
sheet.getRange("C"+(i+2)).setValue(q[2].match(RegExp("\\s[0-9:]*\\s")).toString().replace(" ","")); //time
sheet.getRange("D"+(i+2)).setValue(q[2].match(RegExp("\\((.*)\\)\\s"))[1]); //campaignname
sheet.getRange("E"+(i+2)).setValue(q[2].match(RegExp("N[0-9]*")).toString().replace("N","")); //campaignid
i+=1
}