1

私はGoogle SpreadSheetとIFTTTを使用して自分の電話機のDBコールログを作成していますが、これは完璧です。 今、このDBコールログからAPIを使用してWebページにフォームを入力しようとしています。 IFTTTがシートにデータを取り込むたびにlastRowをAPIに送信します。 シートの最初の行には、departament、first_name、last_name、email、phone、deadlineというヘッダー名が入力されます。Google Spreadsheetから外部Apiにデータを投稿しようとしています

だから私はこのようなAPIにデータを送信するために管理:

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

今私はそれを自動化する必要があるが、私は方法がわからない。(これは、スプレッドシートの質問です)

  1. をIFTTTは、この形式の「締め切り日」列を「2017年4月10日01:54 PM」に設定しますが、APIの必要な形式は「2017-04-10T13:54」です。 (LASTROWから)シートのセルから値を取得し、スクリプトトリガのたびIFTTTがシートに新しい行を移入するように、トリガイベントを設定するには、JSONペイロードに

  2. を投げ、それらを送信するために

ありがとうございます!

答えて

1

は1で質問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)最後の行の値を取得します。つまり、あるとしてあなたが値を取得するには

アプリのスクリプトで

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] 

} 

編集をgetLastRow()getValues()機能を使用することができますシートに表示された値を取得するには、getvaluesをgetDisplayValues()に変更して次のようにします。

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

3)シートをトリガーします:私はここでホイールを再発明しません。しかし、@Mogsdadからのすばらしい答えを提供します リンク:Trigger an email when a cell is written into from another app (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); 
} 

希望に役立ちます!

+0

すべてのためのTx。ほぼ完璧に動作しています。 –

+0

部門番号は1.0です(必要なものは1つではありません)。電話番号は正しくない10桁の番号は必要ありません。現在の番号は727656656で、0727656656が必要です。 [code] function createSpreadsheetEditTrigger(){ var ss = SpreadsheetApp.getActive(); ScriptApp.newTrigger( 'PipeLine') .forSpreadsheet(ss) .onEdit() .create(); } [コード]これはトリガーのコードですが、期待どおりに機能していません(シート内のセルを変更したときにトリガーされますが、新しい行がIFTTTによって自動挿入されたときには機能しません)。 –

+0

上記のように表示値を表示するための答え! –

関連する問題