1

Ich benutze Google SpreadSheet und IFTTT, um ein DB Call Log meines Telefons zu tun, das funktioniert perfekt. Jetzt versuche ich ein Formular in einer Webseite nach API aus diesem DB Call Log zu füllen. Ich möchte lastRow immer dann an meine API senden, wenn IFTTT das Blatt füllt. Die erste Zeile im Sheet ist mit Kopfzeilennamen gefüllt: departament, first_name, last_name, E-Mail, Telefon, Deadline.Versuchen, Daten von Google Spreadsheet auf eine externe API zu posten

So verwalten i Daten wie diese API senden:

function myFunction() { 

var data = { 

    'department':  1, 
    'first_name' : 'Test', 
    'last_name' :  'test', 
    'email' :   '[email protected]', 
    '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); 
} 

Jetzt muss ich es automatisieren, aber ich weiß nicht, wie:

  1. (dies ist eine Kalkulationstabelle Frage) IFTTT füllen die Spalte "Deadline" in diesem Format "10. April 2017 um 01:54 Uhr" aber das erforderliche Format für API ist "2017-04-10T13: 54", wie Sie es automatisch ändern?

  2. die Werte aus Blattzellen zu erhalten (von LastRow) und sie json Nutzlast

  3. setzen ein Triggerereignis so den Script-Trigger ist jedes Mal IFTTT auffüllt eine neue Zeile in dem Blatt werfen senden.

Vielen Dank!

Antwort

1

wird versuchen, die Frage einer nach dem anderen zu beantworten:

1) Reformierte Datum: Sie Utilities.formatDate() in Skript-Apps nutzen, können Sie das Datum zu ändern.

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) Holen letzte Zeile Werte: Sie getLastRow() und getValues() Funktionen in Anwendungen Skripte verwenden können

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] 

} 

bearbeiten

Werte zu erhalten, wie das heißt ist Angezeigte Werte im Blatt, können Sie die getvalues ​​zu getDisplayValues ​​() wie folgt ändern:

3) Trigger dein Blatt: Ich werde das Rad hier nicht neu erfinden. Aber wird Ihnen eine tolle Antwort von @Mogsdad Link: Trigger an email when a cell is written into from another app (IFTTT)

Kurz gesagt, müssen Sie onEdit Trigger verwenden, um neue Einträge zu erkennen.
Wenn beim Bearbeiten nicht funktioniert, versuchen Sie Trigger ändern.

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

Hoffnung, das hilft!

+0

Tx für alle. Es funktioniert fast perfekt. –

+0

Abteilung Nein ist 1.0 ich brauchte 1 (keine Dezimalstellen). Telefon Nein ist nicht korrekt, ich brauche eine 10-stellige Nummer, meine aktuelle Nummer ist 727656656 und ich brauche 0727656656. [code] Funktion createSpreadsheetEditTrigger() { var ss = SpreadsheetApp.getActive(); ScriptApp.newTrigger ('PipeLine') .forSpreadsheet (ss) .onEdit() .create(); } [code] Dies ist das Codeelement für Trigger, funktioniert aber nicht wie erwartet (es löst aus, wenn ich eine Zelle im Blatt ändere. Aber es funktioniert nicht, wenn eine neue Zeile von IFTTT automatisch eingefügt wird. –

+0

Ich habe die über die Antwort, um den Anzeigewert anzuzeigen, wie es ist! –