Попытка опубликовать данные из Google Spreadsheet на внешний API

Я использую Google SpreadSheet и IFTTT для ведения журнала вызовов БД на моем телефоне, это отлично работает. Сейчас я пытаюсь заполнить форму на веб-странице с помощью API из этого журнала вызовов БД. Я хотел бы отправлять lastRow своему API каждый раз, когда IFTTT заполняет лист. Первая строка в листе заполнена заголовками: departament, first_name, last_name, email, phone, крайний срок.

Так что мне удается отправить данные в API, как это:

function myFunction() {

var data = {

    'department':     1,
    'first_name' :    'Test',
    'last_name' :     'test',
    'email' :         'email@gmail.com',
    'phone' :         ["0700000000"],
    'deadline' :      '2017-04-10T00:00'
}

var payload = JSON.stringify(data)  

var headers = {

     'AUTHORIZATION': 'Token b8473654v6345teryrby456yrtyrtyertytdvfh87afc',
     // Add any other required parameters for XXX API.
};
var url = 'http://api.XXX.com/api/1.0/clients/';
var options = {
    'method': 'post',
    'contentType': 'application/json', 
    'headers': headers,
    'payload' : payload,
};
var response = UrlFetchApp.fetch(url, options);
}

Теперь мне нужно автоматизировать это, но я не знаю как:

  1. (это вопрос таблицы) IFTTT заполняет столбец "крайний срок" в этом формате "10 апреля 2017 года в 13:54", однако для API необходим формат "2017-04-10T13:54", как его автоматически изменить?

  2. получить значения из ячеек Sheet (из lastRow) и отправить их с помощью json

  3. установить событие триггера таким образом, чтобы триггер сценария каждый раз, когда IFTTT заполнял новую строку в листе.

Спасибо!

1 ответ

Решение

Постараюсь ответить на вопрос один за другим:

1) Дата переформатирования: вы можете использовать Utilities.formatDate() в скрипте приложения, чтобы изменить дату.

Код:

function reformatDate(dtStr)
{
 if (dtStr == undefined)
 dtStr = "April 1, 2017 at 01:54PM"

 dtStr = dtStr.replace("at", "") // Remove at
 dtStr = dtStr.replace(/(\d)(PM)/g,"$1 $2") //Add a space between the time and PM
 dtStr = dtStr.replace(/(\d)(AM)/g,"$1 $2") //Add a space between the time and AM
 Logger.log(dtStr)

 dtStr = new Date(dtStr)
 var newDt = Utilities.formatDate(dtStr, SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "yyyy-MM-dd'T'HH:mm") 
 Logger.log(newDt)

 return newDt
}

2) Получить последнюю строку Значения: Вы можете использовать getLastRow() а также getValues() функции в скриптах приложений

function lastRowData(){
 var ss = SpreadsheetApp.getActive()
 var sheet = ss.getActiveSheet()
 var lastRow = sheet.getLastRow() 
 var lastCol = sheet.getLastColumn()
 var lastRowData = sheet.getRange(lastRow,1,1,lastCol).getValues()
 return lastRowData[0]

}

редактировать

Чтобы получить значения как есть, то есть отображаемые значения на листе, вы можете изменить get values ​​для getDisplayValues ​​() следующим образом:

var lastRowData = sheet.getRange(lastRow,1,1,lastCol).getDisplayValues()

3) Запустите свой лист: я не буду изобретать колесо здесь. Но предоставит вам замечательный ответ от @Mogsdad. Ссылка: запуск электронного письма, когда ячейка записывается из другого приложения (IFTTT).

Короче говоря, вам придется использовать onEdit Trigger для обнаружения новых записей.
Если редактирование не работает, попробуйте изменить триггер.

Полный код:

function myFunction() {
var lastRow = lastRowData()
var data = {

    'department':     lastRow[0],
    'first_name' :    lastRow[1],
    'last_name' :     lastRow[2],
    'email' :         lastRow[3]',
    'phone' :         [lastRow[4]],
    'deadline' :      reformatDate(lastRow[5])
}

var payload = JSON.stringify(data)  

var headers = {

     'AUTHORIZATION': 'Token b8473654v6345teryrby456yrtyrtyertytdvfh87afc',
     // Add any other required parameters for XXX API.
};
var url = 'http://api.XXX.com/api/1.0/clients/';
var options = {
    'method': 'post',
    'contentType': 'application/json', 
    'headers': headers,
    'payload' : payload,
};
var response = UrlFetchApp.fetch(url, options);
}

Надеюсь, это поможет!

Другие вопросы по тегам