简体   繁体   中英

Trying to post data from Google Spreadsheet to a external Api

I'm using Google SpreadSheet and IFTTT to do a DB Call Log of my phone, this is working perfect. Now I'm trying to populate a form in a web page by API from this DB Call Log. I would like to send lastRow to my API every time IFTTT populate the Sheet. The first Row in the Sheet is populated with headers name: departament, first_name, last_name, email, phone, deadline.

So i manage to send data to API like this:

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);
}

Now i need to automate it but i don't know how:

  1. (this is a SpreadSheet question) IFTTT populate the "deadline" column in this format "April 10, 2017 at 01:54PM" however the needed format for API is "2017-04-10T13:54", how to auto modify it?

  2. to get the values from Sheet cells (from lastRow) and send them throw json payload

  3. to set a trigger event so the script trigger's every time IFTTT populates a new Row in the Sheet.

Thank you!

Will try to answer the question one by one:

1) Reformat date: You can use Utilities.formatDate() in apps script to modify your date.

Code:

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) Get last row Values: You can use getLastRow() and getValues() functions in apps scripts

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]

}

Edit

To get values as is ie displayed values in the sheet, you can modify the getvalues to getDisplayValues() like so:

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

3) Trigger your sheet: I will not reinvent the wheel here. But will provide you with an awesome answer from @Mogsdad Link: Trigger an email when a cell is written into from another app (IFTTT)

In short, you will have to use onEdit Trigger to detect new entries.
If on edit doesn't work, try on Change trigger.

Complete code:

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);
}

Hope that helps!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM