使用Google应用程序脚本访问Capsule CRM API(从Curl-Req转换)

使用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 页面键入(整数)\返回的结果页面 每页类型(整数)\每页返回的实体数 他

我正在尝试访问capsule CRM API(文档)

我对谷歌应用程序脚本还不太熟悉,并试图使用UrlFetchApp将curl请求转换为gas函数

我正试图通过API搜索某一方--他们提供以下端点:

得到

以下是请求中的搜索参数:

  • q\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
  • 页面键入(整数)\返回的结果页面
  • 每页类型(整数)\每页返回的实体数
他们的API文档说,您可以通过执行以下操作从API读取数据:

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,}然后再试一次?按标签搜索似乎仍然有效。所以不能真正说出正确的语法或结构!