Google 应用 Script/URLFetchApp 并使用返回的数据
Google Apps Script/URLFetchApp and using returned data
我对此很陌生,所以请耐心等待——我目前在生成的 google sheet 后端有一个可操作的 google 应用程序脚本来自 Google 表格答案。我实质上是在 google 表单中设置一个票证表格,它将触发相应 sheet 中的数据通过 api 调用发送到我们的票务系统。它工作得很好,但我目前正在尝试优化它。目标是获取我使用的 json 响应:
Logger.log(response.getContentText());
它为我提供了以下信息:
Aug 9, 2020, 11:44:40 AM Info {"_url":"https://testticketingsystem.com/REST/2.0/ticket/123456","type":"ticket","id":"123456"}
并发送另一个 API 调用以将数据发送到该新工单。
这是一个代码片段:
var payload = {
"Subject": String(su),
"Content": String(as),
"Requestor": String(em),
"Queue": String(qu),
"CustomFields": {"CustomField1": String(vn), "CustomField2": String(vb), "CustomField3":
String(vg), "CustomField4": String(av), "CustomField5": String(ov), "CustomField6":
String(sd)}
}
var options = {
'method': 'post',
"contentType" : "application/json",
'payload': JSON.stringify(payload),
'muteHttpExceptions': true
}
var url = "https://testticketingsystem.com/REST/2.0/ticket?token=****************";
var response = UrlFetchApp.fetch(url,options);
Logger.log(response.getContentText());
} catch (error) {
Logger.log(error.toString());
}
}
创建工单后,如何编写将该 ID 号作为变量使用到下一个 api 调用中的脚本?
谢谢!
UrlFetchApp.fetch
returns a HTTPResponse
, and if you expect JSON then you should be able to just use JSON.parse()
从文本创建 object。 (JSON
object 是标准的 JavaScript 全局 object,类似于 Math
;它不是 Google Apps 脚本特定的。)
如果一切顺利,你应该可以使用
var response = UrlFetchApp.fetch(url,options);
var data = JSON.parse(response.getContentText());
var id = data.id;
然后将 id
用于下一个 fetch()
。
备注
如果你的字面反应确实是
Aug 9, 2020, 11:44:40 AM Info {"_url":"https://testticketingsystem.com/REST/2.0/ticket/123456","type":"ticket","id":"123456"}
您将 运行 陷入麻烦,因为直到 {
无效 JSON(如果您需要检查自己,请使用 linter)。但我假设这是在您登录时由控制台添加的 JSON,而不是实际响应本身。
JSON.parse()
会抛出 JSON 无效的错误,因此您可以根据需要使用 try/catch
。
您也可以在尝试 JSON.parse()
之前检查 headers。
这里有一个检查和处理问题的例子。
var type = response.getHeaders()["Content-Type"];
var text = response.getContentText();
if (type === "application/json") {
try {
var data = JSON.parse(text);
} catch (error) {
return Logger.log("Invalid JSON: " + response.getContentText(text));
}
} else {
return Logger.log("expected JSON, but got response of type: " + type);
}
// if we get to this line, data is an object we can use
我对此很陌生,所以请耐心等待——我目前在生成的 google sheet 后端有一个可操作的 google 应用程序脚本来自 Google 表格答案。我实质上是在 google 表单中设置一个票证表格,它将触发相应 sheet 中的数据通过 api 调用发送到我们的票务系统。它工作得很好,但我目前正在尝试优化它。目标是获取我使用的 json 响应:
Logger.log(response.getContentText());
它为我提供了以下信息:
Aug 9, 2020, 11:44:40 AM Info {"_url":"https://testticketingsystem.com/REST/2.0/ticket/123456","type":"ticket","id":"123456"}
并发送另一个 API 调用以将数据发送到该新工单。
这是一个代码片段:
var payload = {
"Subject": String(su),
"Content": String(as),
"Requestor": String(em),
"Queue": String(qu),
"CustomFields": {"CustomField1": String(vn), "CustomField2": String(vb), "CustomField3":
String(vg), "CustomField4": String(av), "CustomField5": String(ov), "CustomField6":
String(sd)}
}
var options = {
'method': 'post',
"contentType" : "application/json",
'payload': JSON.stringify(payload),
'muteHttpExceptions': true
}
var url = "https://testticketingsystem.com/REST/2.0/ticket?token=****************";
var response = UrlFetchApp.fetch(url,options);
Logger.log(response.getContentText());
} catch (error) {
Logger.log(error.toString());
}
}
创建工单后,如何编写将该 ID 号作为变量使用到下一个 api 调用中的脚本?
谢谢!
UrlFetchApp.fetch
returns a HTTPResponse
, and if you expect JSON then you should be able to just use JSON.parse()
从文本创建 object。 (JSON
object 是标准的 JavaScript 全局 object,类似于 Math
;它不是 Google Apps 脚本特定的。)
如果一切顺利,你应该可以使用
var response = UrlFetchApp.fetch(url,options);
var data = JSON.parse(response.getContentText());
var id = data.id;
然后将 id
用于下一个 fetch()
。
备注
如果你的字面反应确实是
Aug 9, 2020, 11:44:40 AM Info {"_url":"https://testticketingsystem.com/REST/2.0/ticket/123456","type":"ticket","id":"123456"}
您将 运行 陷入麻烦,因为直到 {
无效 JSON(如果您需要检查自己,请使用 linter)。但我假设这是在您登录时由控制台添加的 JSON,而不是实际响应本身。
JSON.parse()
会抛出 JSON 无效的错误,因此您可以根据需要使用 try/catch
。
您也可以在尝试 JSON.parse()
之前检查 headers。
这里有一个检查和处理问题的例子。
var type = response.getHeaders()["Content-Type"];
var text = response.getContentText();
if (type === "application/json") {
try {
var data = JSON.parse(text);
} catch (error) {
return Logger.log("Invalid JSON: " + response.getContentText(text));
}
} else {
return Logger.log("expected JSON, but got response of type: " + type);
}
// if we get to this line, data is an object we can use