尝试将数据从Google Spreadsheet发布到外部API

编程入门 行业动态 更新时间:2024-10-28 18:29:42
本文介绍了尝试将数据从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','phone':[0700000000],'截止日期':'2017-04-10T00:00'} var payload = JSON.stringify数据) 变种头= { 'AUTHORIZATION': '令牌b8473654v6345teryrby456yrtyrtyertytdvfh87afc',$ b $B∥加上用于XXX API的任何其他所需的参数。 }; var url ='api.XXX/api/1.0/clients/'; var options = {'method':'post','contentType':'application / json','headers':headers,'payload ':有效载荷,}; var response = UrlFetchApp.fetch(url,options); $ / code>

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

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

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

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

  • 谢谢! >试着逐个回答问题: 重新格式化日期:您可以使用 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 ='api.XXX/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', '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 = 'api.XXX/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:

  • (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?

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

  • 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 = 'api.XXX/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

    本文发布于:2023-10-12 17:46:30,感谢您对本站的认可!
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:数据   Google   API   Spreadsheet

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!