我正在尝试访问胶囊CRM API(文档here)
我对谷歌应用程序脚本很新,并试图使用UrlFetchApp将卷曲请求转换为气体功能
我正在尝试通过API搜索特定的一方 - 他们提供此端点:
获取
https://api.capsulecrm.com/api/v2/parties/search
这些是请求中的搜索参数:
他们的API文档说您可以通过执行以下操作从API读取数据:
curl -H "Authorization: Bearer {token}"
-H "Accept: application/json"
https://api.capsulecrm.com/api/v2/parties
以下是我的气体功能,它确实返回数据,但不能有效地搜索正确的记录并仅返回结果集。我想知道是否有更简单,更好的方法来执行此搜索?
function curlRequest(partyid) {
var authenticationToken = "XvDEdg652DG...xYYRg";
//var url = "https://api.capsulecrm.com/api/v2/parties";
var url = "https://api.capsulecrm.com/api/v2/parties/search";
var headers = {
"Authorization" : "Bearer " + authenticationToken,
};
var payload = {
"Accept": "application/json",
"q":{
"id":101756643
},
"page":1,
"perPage": 50,
};
var options = {
"headers" : headers,
"method" : "GET"
};
Logger.log(options);
Logger.log(UrlFetchApp.fetch(url, options));
//var data = JSON.parse(response.getContentText());
}
编辑:基于Jack Brown的反馈:
答案 0 :(得分:1)
您永远不会将有效负载传递给urlFetch方法,而是创建有效负载。但是,您需要在options对象中插入有效负载,如下所示:
var options = {
"headers" : headers,
"method" : "GET",
"payload" : payload
};
卷曲中的-H表示标题值,因此应在标题中定义"Accept": "application/json"
var headers = {
"Authorization" : "Bearer " + authenticationToken,
"Accept": "application/json"
}
最后,您的有效负载将如下所示:
var payload = {
"q":{
"id":101756643
},
"page":1,
"perPage": 50,
};
现在,当你进行urlfetch调用时,它应该像excepted一样工作。
Logger.log(UrlFetchApp.fetch(url, options))
希望有所帮助!
答案 1 :(得分:1)
如果payload
中包含options
,那么即使指定fetch
,method: 'get'
也会发出POST请求。这解释了为什么您从API接收“方法不允许”错误 - “/ api / v2 / parties / search”端点仅接受GET请求而不接受POST。
所以这意味着对于GET请求,搜索查询应该包含在URL中,而不是包含在有效负载中。也可能最好控制自己逃避而不是使用UrlFetchApp
提供的转义 - 这将允许搜索词中的任何特殊字符。 GET是默认方法,因此可以从options
中省略。
进行这些更改后,代码变为:
function myFunction() {
var authenticationToken = "XvDEdg652DG...xYYRg";
var query = "your search";
var url = "https://api.capsulecrm.com/api/v2/parties/search?q=" +
encodeURIComponent(query);
var headers = {
"Authorization" : "Bearer " + authenticationToken,
"Accept": "application/json"
};
var options = {
headers: headers,
escaping: false
};
Logger.log(UrlFetchApp.fetch(url, options));
}