使用Google Apps脚本尝试使用Ecobee API与我的恒温器通话。在下面的代码中,json
的值为"{ "status": { "code": 0, "message": "" } }"
。要获得正确的完整回复,请参阅问题后面的curl
结果。
出于某种原因,response
仅从服务器返回的三个结果中获取最终元素(status
)page
,thermostatList
和{ {1}})。
我错过了什么?
Google Apps脚本如下:
status
使用function getSettings() {
var response = fetchSettings();
var json = response.getContentText();
var data = JSON.parse(json);
// response, json, and data only show `status` result
}
function fetchSettings() {
try {
var headers = {
'Authorization': 'Bearer AUTH_TOKEN'
};
var payload = {
'selection' : {
'selectionType':'registered',
'selectionMatch': '',
'includeRuntime': 'true'
}
};
var options = {
'method': 'get',
'headers': headers,
'contentType': 'text/json',
'payload': JSON.stringify(payload);
};
var URL = 'https://api.ecobee.com/1/thermostat?format=json'
return UrlFetchApp.fetch(URL,options);
} catch(e) {
return e;
}
}
如下:
curl
我得到了完整的结果。
curl -s -H 'Content-Type: text/json' -H 'Authorization: Bearer AUTH_TOKEN' 'https://api.ecobee.com/1/thermostat?format=json&body=\{"selection":\{"selectionType":"registered","selectionMatch":"",includeRuntime":true\}\}'
答案 0 :(得分:2)
我认为问题是UrlFetchApp
不支持使用get方法作为查询字符串发送有效负载。我认为这是UrlFetchApp
和poor design on the part of the Ecobee API的正确设计。我通过如下在查询字符串中发送JSON来制作kluge解决方法。
var URL = 'https://api.ecobee.com/1/thermostat?body='+encodeURIComponent(JSON.stringify(payload));