使用Google App Script访问Capsule CRM API(从Curl Req转换)

时间:2017-04-20 10:33:35

标签: curl google-apps-script get

我正在尝试访问胶囊CRM API(文档here

我对谷歌应用程序脚本很新,并试图使用UrlFetchApp将卷曲请求转换为气体功能

我正在尝试通过API搜索特定的一方 - 他们提供此端点:

获取

https://api.capsulecrm.com/api/v2/parties/search

这些是请求中的搜索参数:

  • q _________类型(字符串)___:要搜索的值,例如:一个名字
  • 页面 ______类型(整数)__:要返回的结果页面
  • perPage ___类型(整数)__:每页返回的实体数

他们的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的反馈:

似乎建议是正确的,但Capsule API不适用于此结构: enter image description here

2 个答案:

答案 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,那么即使指定fetchmethod: '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));    
}