Google Spreadsheets: забираем и храним изменения цен-погоды-курса валют

Сегодня будем через гуглдодоки не только алерты высылать, но и логировать изменения каких-то цифорок.

Задача — вытянуть текущий курс валюты и сохранить его в новую строчку. Один день — одна строка.

Как будет работать — сначала обновляем текущие данные про курс валюты, сравниваем с последним сохраненным. Если изменилось — то записываем в лог.


Поехали

Сначала готовим табличку:

Открываем Script Editor: Tools > Script Editor

Вставляем код:

function updatePoints() {
//Забираем последние записанные данные
var sh = SpreadsheetApp.getActiveSheet();
var datesColumn = sh.getRange( "A1:A" ).getValues();
var lastRow = datesColumn.filter( String ).length;
var oldDate = datesColumn[ lastRow - 1 ][ 0 ];
var oldPoints = parseFloat( sh.getRange( "B" + lastRow ).getValues() );
//обновляем курс на сегодня
sh.getRange( 'e2' ).setValue( '=round(GoogleFinance("CURRENCY:USDRUB"),2)' );
//сохраняем текущую дату-время
var currentDate = Utilities.formatDate( new Date(), "GMT+3", "dd.MM HH:mm" );
sh.getRange( 'e1' ).setValue( currentDate );
//читаем актуальный курс
var currentPoints = parseFloat( sh.getRange( 'e2' ).getValues() );
//Смотрим есть ли изменения
if ( currentPoints !== oldPoints ) {
//сохраняем новые поинты и дату-время обновления
lastRow++;
sh.getRange( "B" + lastRow ).setValue( currentPoints );
sh.getRange( "A" + lastRow ).setValue( currentDate );
};
/*Если хотим - отправляем почту
MailApp.sendEmail("alert@alert.ru", "[Alert] ["+currentDate+"] points raised to " + currentPoints, "Old points " + oldPoints
+"\nNew points "+currentPoints+"\n\nUpdated:"+currentDate,{noReply:true});*/
}

И можно сделать себе кнопочку в интерфейсе, чтобы запускать вручную обновление:

Вот таким кодом:

function onOpen() {
SpreadsheetApp.getUi().createMenu("Extra")
.addItem("Обновить данные", "updatePoints")
.addToUi();
}

Настраиваем обновление через триггеры:


Заключение

Теперь у нас есть логер курсов валют. Если не получилось, то можно посмотреть живой пример вот тут.

Ну или любых штук — можно вытягивать любые данные откуда захочется, например логировать цены на какие-то товары в Маркете, ну или погоду.