Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用UrlFetchApp获取多个页面?_Javascript_Google Apps Script - Fatal编程技术网

Javascript 如何使用UrlFetchApp获取多个页面?

Javascript 如何使用UrlFetchApp获取多个页面?,javascript,google-apps-script,Javascript,Google Apps Script,我需要从Moneybird api获取所有联系人。但每页有50或100个联系人的限制 如果有下一页,则会将其添加到页眉中 ; rel=“下一步” 如何在google apps脚本中使用UrlfetchApp循环页面?还是更好的方法 谢谢你的帮助 function listAllContacts() { var options = { 'method': 'GET', 'contentType': 'application/json', 'muteHttpExce

我需要从Moneybird api获取所有联系人。但每页有50或100个联系人的限制

如果有下一页,则会将其添加到页眉中 ; rel=“下一步”

如何在google apps脚本中使用UrlfetchApp循环页面?还是更好的方法

谢谢你的帮助

function listAllContacts() {
  
  var options = {
    'method': 'GET',
    'contentType': 'application/json',
    'muteHttpExceptions': false,
    'headers': {
      'Authorization': 'Bearer ' + SERVICE.getAccessToken()
    },
  };
  
  var url = 'https://moneybird.com/api/v2/'+ADMIN_ID+'/contacts.json';
  
  var response = UrlFetchApp.fetch(url,options);
  var headers = response.getAllHeaders();
  var link = headers["Link"];
  // Check if there is a rel='next'? then fetch next page
  
  var data = JSON.parse(response.getContentText());
  var resonseCode = JSON.parse(response.getResponseCode());
  console.log(resonseCode);
  console.log(data);
  
  
  return data;
  
}```

我相信你的目标如下

  • 您希望使用
    URL中的循环检索所有页面https://moneybird.com/api/v2/“+ADMIN_ID+”/contacts.json

  • 官方文件称“分页”如下

    对返回实体列表的端点进行分页,以防止大型响应。要控制分页,可以使用page和per_page参数。页面确定要返回的页面(默认值:1),每页控制要返回的实体数量(默认值:50,最大值:100) 每个分页响应都包含一个链接头,其中包含有关上一页和下一页的信息:

    注:
    • 不幸的是,根据您的问题,我无法理解API中的响应值。因此,在本例中,响应值被放入
      结果的数组中。关于这一点,请根据您的实际情况进行修改
    • 从官方文件来看,为了减少循环次数,在URL中使用
      每页
      可能会很有用
    • 当我的猜测不正确时,您能在最后一页提供响应标题吗?通过这一点,我想确认一下
    参考:

      • 我相信你的目标如下

        • 您希望使用
          URL中的循环检索所有页面https://moneybird.com/api/v2/“+ADMIN_ID+”/contacts.json

        • 官方文件称“分页”如下

          对返回实体列表的端点进行分页,以防止大型响应。要控制分页,可以使用page和per_page参数。页面确定要返回的页面(默认值:1),每页控制要返回的实体数量(默认值:50,最大值:100) 每个分页响应都包含一个链接头,其中包含有关上一页和下一页的信息:

          注:
          • 不幸的是,根据您的问题,我无法理解API中的响应值。因此,在本例中,响应值被放入
            结果的数组中。关于这一点,请根据您的实际情况进行修改
          • 从官方文件来看,为了减少循环次数,在URL中使用
            每页
            可能会很有用
          • 当我的猜测不正确时,您能在最后一页提供响应标题吗?通过这一点,我想确认一下
          参考:

          money bird api是否返回官方文件中的页面令牌。我提出了一个修改后的脚本作为答案。你能确认一下吗?不幸的是,我无法测试这个脚本。我为此道歉。所以,当你测试了这个,它不能使用,我道歉。钱鸟api返回页面令牌吗?从官方文件。我提出了一个修改后的脚本作为答案。你能确认一下吗?不幸的是,我无法测试这个脚本。我为此道歉。所以,当你测试这个,它不能被使用,我道歉。
                Link: <https://moneybird.com/api/v2/contacts.json?page=3>; rel="next",
                    <https://moneybird.com/api/v2/contacts.json?page=1>; rel="prev"
          
          function listAllContacts() {
            var options = {
              'method': 'GET',
              'contentType': 'application/json',
              'muteHttpExceptions': false,
              'headers': {
                'Authorization': 'Bearer ' + SERVICE.getAccessToken()
              },
            };
            var url = 'https://moneybird.com/api/v2/'+ADMIN_ID+'/contacts.json';
            
            // I modified below script.
            var results = [];
            do {
              var response = UrlFetchApp.fetch(url,options);
              var data = JSON.parse(response.getContentText());
              results.push(data);
              var resonseCode = JSON.parse(response.getResponseCode());
              console.log(resonseCode);
              console.log(data);
              
              var headers = response.getAllHeaders();
              var link = headers["Link"];
              var checkNextUrl = link.includes("next");
              if (checkNextUrl) url = link.split(";")[0].match(/<(\w.+)>/)[1];
            } while (checkNextUrl);
            return results;
          }