使用Google应用程序脚本访问Capsule CRM API(从Curl-Req转换)
我正在尝试访问capsule CRM API(文档) 我对谷歌应用程序脚本还不太熟悉,并试图使用UrlFetchApp将curl请求转换为gas函数 我正试图通过API搜索某一方--他们提供以下端点: 得到 以下是请求中的搜索参数:使用Google应用程序脚本访问Capsule CRM API(从Curl-Req转换),curl,google-apps-script,get,Curl,Google Apps Script,Get,我正在尝试访问capsule CRM API(文档) 我对谷歌应用程序脚本还不太熟悉,并试图使用UrlFetchApp将curl请求转换为gas函数 我正试图通过API搜索某一方--他们提供以下端点: 得到 以下是请求中的搜索参数: q\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 页面键入(整数)\返回的结果页面 每页类型(整数)\每页返回的实体数 他
- q\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
- 页面键入(整数)\返回的结果页面
- 每页类型(整数)\每页返回的实体数
curl -H "Authorization: Bearer {token}"
-H "Accept: application/json"
https://api.capsulecrm.com/api/v2/parties
下面是我的gas函数,它确实返回数据,但不能有效地搜索正确的记录并只返回结果集。我想知道是否有更简单、更好的方法来执行此搜索
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());
}
编辑:根据杰克·布朗的反馈:
建议似乎是正确的,但是胶囊API不适合这种结构:
如果不将负载传递给urlFetch方法,则创建负载。但是,您需要在options对象中插入有效负载,如下所示:
var options = {
"headers" : headers,
"method" : "GET",
"payload" : payload
};
此外,curl中的-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))
希望有帮助 如果不将负载传递给urlFetch方法,则创建负载。但是,您需要在options对象中插入有效负载,如下所示:
var options = {
"headers" : headers,
"method" : "GET",
"payload" : payload
};
此外,curl中的-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))
希望有帮助 如果
选项中包含有效负载
,则获取
将发出POST请求,即使您指定方法:“获取”
。这解释了为什么您从API收到“methodnotallowed”错误“/API/v2/parties/search”端点只接受GET请求而不接受POST
因此,这意味着对于GET请求,搜索查询应该包含在URL中,而不是有效负载中。最好是自己控制转义,而不是使用UrlFetchApp
提供的转义-这将允许搜索词中有任何特殊字符。GET是默认方法,因此可以从选项中忽略它
进行这些更改后,代码将变为:
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));
}
如果options
中包含payload
,则fetch
将发出POST请求,即使您指定方法:“get”
。这解释了为什么您从API收到“methodnotallowed”错误“/API/v2/parties/search”端点只接受GET请求而不接受POST
因此,这意味着对于GET请求,搜索查询应该包含在URL中,而不是有效负载中。最好是自己控制转义,而不是使用UrlFetchApp
提供的转义-这将允许搜索词中有任何特殊字符。GET是默认方法,因此可以从选项中忽略它
进行这些更改后,代码将变为:
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));
}
感谢您的全面帮助-您帮助我更好地理解了结构,您可以将有效负载修改为:var-payload={“q”:101756643,“page”:1,“perPage”:50,}代码>然后再试一次?按标签搜索似乎仍然有效。所以不能真正说出正确的语法或结构!感谢您的全面帮助-您帮助我更好地理解了结构,您可以将有效负载修改为:var-payload={“q”:101756643,“page”:1,“perPage”:50,}代码>然后再试一次?按标签搜索似乎仍然有效。所以不能真正说出正确的语法或结构!