尝试将数据从Google Spreadsheet发布到外部API [英] Trying to post data from Google Spreadsheet to a external Api

查看:98
本文介绍了尝试将数据从Google Spreadsheet发布到外部API的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Google SpreadSheet和IFTTT来完成手机的数据库通话记录,这个工作非常完美。
现在我正试图从这个数据库调用日志中通过API填充网页中的表单。
每次IFTTT填充工作表时,我都希望将lastRow发送到我的API。
表单中的第一行填充了标题名称: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],
'截止日期':'2017-04-10T00:00'
}

var payload = JSON.stringify数据)

变种头= {

'AUTHORIZATION': '令牌b8473654v6345teryrby456yrtyrtyertytdvfh87afc',$ b $B∥加上用于XXX API的任何其他所需的参数。
};
var url ='http://api.XXX.com/api/1.0/clients/';
var options = {
'method':'post',
'contentType':'application / json',
'headers':headers,
'payload ':有效载荷,
};
var response = UrlFetchApp.fetch(url,options);

$ / code>

现在我需要自动化它,但我不知道如何: p>


  1. (这是一个SpreadSheet问题)IFTTT以2017年4月10日下午01:54格式填充截止日期但是API所需的格式是2017-04-10T13:54,如何自动修改它?


  2. 从Sheet单元格中获取值lastRow),并发送它们抛出json有效载荷


  3. 设置触发事件,以便每次IFTTT在工作表中填充新行时触发脚本。


谢谢! >试着逐个回答问题:

<1>重新格式化日期:您可以使用 Utilities.formatDate()在应用程序脚本中修改日期。



代码:

 函数reforma tDate(dtStr)
{
如果(dtStr ==未定义)
dtStr = 2017年4月1日,在下午1点54分

dtStr = dtStr.replace( at,)//在
处删除dtStr = dtStr.replace(/(\d)(PM)/ g,$ 1 $ 2)//在时间和PM $ b之间加一个空格$ b dtStr = dtStr.replace(/(\ d)(AM)/ g,$ 1 $ 2)//在时间和AM
之间加一个空格Logger.log(dtStr)

dtStr =新日期(dtStr)
变种newDt = Utilities.formatDate(dtStr,SpreadsheetApp.getActive()getSpreadsheetTimeZone(), YYYY-MM-dd'T'HH:毫米。)
Logger.log(newDt)

return newDt
}

2)获取最后一行值:您可以在应用程序脚本中使用 getLastRow() getValues() p>

 函数lastRowData(){
var ss = SpreadsheetApp.getActive()
var sheet = ss.getActiveSheet( )
变种LASTROW = sheet.getLastRow()
变种LASTCOL = sheet.getLastColumn()
变种lastRowData = sheet.getRange(LASTROW,1,1-,LASTCOL).GE tValues()
return lastRowData [0]

}

编辑



为了获得值,例如表格中的显示值,您可以将getvalues修改为getDisplayValues(),如下所示:

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

3)触发你的工作表:我不会在这里重新发明轮子。但会给你一个来自@Mogsdad
的真棒答案:



必须使用onEdit Trigger来检测新条目。

如果在编辑时不起作用,请尝试更改触发器。



完整的代码:

  function myFunction(){
var lastRow = lastRowData()
var data = {
$ b $'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',
//为XXX API添加任何其他必需的参数。
};
var url ='http://api.XXX.com/api/1.0/clients/';
var options = {
'method':'post',
'contentType':'application / json',
'headers':headers,
'payload ':有效载荷,
};
var response = UrlFetchApp.fetch(url,options);
}

希望有帮助!

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 i.e. 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!

这篇关于尝试将数据从Google Spreadsheet发布到外部API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆