Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/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 Api调用中的增量偏移量_Javascript_Api_While Loop_Pagination_Offset - Fatal编程技术网

Javascript Api调用中的增量偏移量

Javascript Api调用中的增量偏移量,javascript,api,while-loop,pagination,offset,Javascript,Api,While Loop,Pagination,Offset,我需要在调用api时获得所有结果。我只有100分。 我知道我必须每100抵消一次才能得到全部。不知道总共有多少结果。 我想我应该使用“while”,直到api说没有更多的结果。。或者类似的东西……但我是javascript的初学者,所以我不知道放在哪里方便,以及如何实现它。 我正在使用谷歌应用程序脚本在谷歌工作表中插入结果。 我尝试过使用“while”函数,但我不知道它是否是实现它的正确位置。。变量是否正确。请参阅//循环注释 这是我的代码: var APIurl = 'http://api.e

我需要在调用api时获得所有结果。我只有100分。 我知道我必须每100抵消一次才能得到全部。不知道总共有多少结果。 我想我应该使用“while”,直到api说没有更多的结果。。或者类似的东西……但我是javascript的初学者,所以我不知道放在哪里方便,以及如何实现它。 我正在使用谷歌应用程序脚本在谷歌工作表中插入结果。 我尝试过使用“while”函数,但我不知道它是否是实现它的正确位置。。变量是否正确。请参阅//循环注释 这是我的代码:

var APIurl = 'http://api.elit.com.ar/productos?offset=';
var offset = 0

function callAPI() {
  //Access Data
 var token = Utilities.base64Encode('mytoken');

  var auth =  {
    user_id: 'myid',
    token: token,}    

  var options = {
    muteHttpExceptions: true,
    method: 'POST',
    payload: JSON.stringify(auth),
    }

  // Call API
  var response = UrlFetchApp.fetch(APIurl, options);

  //Parse response
  var json= response.getContentText();
  return JSON.parse(json)
}  

function displayData(){

  var data = callAPI();
  var results = data["resultado"];
  var output = []

  results.forEach(function(elem,i) {
  output.push([elem["cod_alfa"],elem["detalle"],elem["precio"]]);
  });

  //Loop
  while (results !== null){
  callAPI(APIurl + offset + 100);
  };

  //Clear previous content
  var ss = SpreadsheetApp.openByUrl('mygooglesheeturl').getSheetByName('sheetname');
  ss.getRange(1,1,500,3).clearContent();

  //Insert new data in sheet
  var len = output.length;
  ss.getRange(1,1,len,3).setValues(output);
  Logger.log(output);


}

您正在将URL作为参数传递给
callAPI()
,但函数不使用该参数

function callAPI(url) {
  //Access Data
 var token = Utilities.base64Encode('mytoken');

  var auth =  {
    user_id: 'myid',
    token: token,}    

  var options = {
    muteHttpExceptions: true,
    method: 'POST',
    payload: JSON.stringify(auth),
    }

  // Call API
  var response = UrlFetchApp.fetch(url, options);

  //Parse response
  var json= response.getContentText();
  return JSON.parse(json)
}  
您没有更新
offset
变量<代码>偏移量总是
0
,因此
偏移量+100
总是
100
。而且您没有使用
callAPI()
返回的值。在将所有内容推入
输出
数组之前,需要先执行循环,也可以在
while
循环中执行

function displayData(){

  var output = []
  var offset = 0

  while (true) {
    var results = callAPI(APIUrl + offset).resultado;
    results.forEach(obj => output.push([obj.code_alfa, obj.detalle, obj.precio]);
    if (result.length < 100) {
      break;
    }
    offset += 100;
  }


  //Clear previous content
  var ss = SpreadsheetApp.openByUrl('mygooglesheeturl').getSheetByName('sheetname');
  ss.getRange(1,1,500,3).clearContent();

  //Insert new data in sheet
  var len = output.length;
  ss.getRange(1,1,len,3).setValues(output);
  Logger.log(output);


}
函数displayData(){
变量输出=[]
var偏移量=0
while(true){
var results=callAPI(apirl+offset).resultado;
results.forEach(obj=>output.push([obj.code_alfa,obj.detalle,obj.precio]);
如果(结果长度<100){
打破
}
偏移量+=100;
}
//清除以前的内容
var ss=SpreadsheetApp.openByUrl('mygooglesheeturl')。getSheetByName('sheetname');
ss.getRange(1,1500,3).clearContent();
//在工作表中插入新数据
var len=输出长度;
ss.getRange(1,1,len,3).设置值(输出);
Logger.log(输出);
}

感谢@Barman,这是工作代码:

    var url = 'http://YOUR_URL?offset=';

function callAPI(url) {
  //Access Data
 var token = Utilities.base64Encode('YOUR_TOKEN');

  var auth =  {
    user_id: 'YOUR_USER_ID',
    token: token,}    

  var options = {
    muteHttpExceptions: true,
    method: 'POST',
    payload: JSON.stringify(auth),
    }

  // Call API
  var response = UrlFetchApp.fetch(url, options);

  //Parse response
  var json= response.getContentText();
  return JSON.parse(json);

}  


function displayData(){

  var output = []
  var offset = 0

  while (true) {
    var results = callAPI(url + offset).resultado;

    results.forEach(function (obj) {
    return output.push([obj.cod_alfa, obj.partnumber, obj.detalle, obj.precio, obj.iva, obj.marca, obj.rubro, obj.subrubro, obj.cotizacion, obj.stock, obj.peso, obj.link]);
    }); //REPLACE obj.YOUR_DATA

    if (results.length < 100) {
      break;
    }
    offset += 100;
  }



  //Clear previous content
  var ss = SpreadsheetApp.openByUrl('YOUR_GOOGLE_SPREADSHEET_URL').getSheetByName('YOUR_SHEET_NAME');
  ss.getRange(4,1,2000,12).clearContent();

  //Insert new data in sheet
  var len = output.length;
  ss.getRange(4,1,len,12).setValues(output);
  Logger.log(output);
}
var url='1〕http://YOUR_URL?offset=';
函数callAPI(url){
//访问数据
var token=Utilities.base64Encode('YOUR_token');
var auth={
用户id:“您的用户id”,
令牌:令牌,}
变量选项={
muteHttpExceptions:true,
方法:“POST”,
有效载荷:JSON.stringify(auth),
}
//调用API
var response=UrlFetchApp.fetch(url,选项);
//解析响应
var json=response.getContentText();
返回JSON.parse(JSON);
}  
函数displayData(){
变量输出=[]
var偏移量=0
while(true){
var results=callAPI(url+offset).resultado;
结果:forEach(功能(obj){
返回output.push([obj.cod_alfa,obj.partnumber,obj.detalle,obj.precio,obj.iva,obj.marca,obj.rubro,obj.subrubro,obj.cotizacion,obj.stock,obj.peso,obj.link]);
});//替换obj.u数据
如果(结果长度<100){
打破
}
偏移量+=100;
}
//清除以前的内容
var ss=SpreadsheetApp.openByUrl('YOUR_GOOGLE_SPREADSHEET_URL')。getSheetByName('YOUR_SHEET_NAME');
ss.getRange(4,12000,12).clearContent();
//在工作表中插入新数据
var len=输出长度;
ss.getRange(4,1,len,12).设置值(输出);
Logger.log(输出);
}

你有API文档的链接吗?它应该说明如何分页。它可能在有效负载中。@Barman这里的链接是西班牙语的PDF,如果你需要翻译,请问我。它说分页是通过写“?偏移量=[number]”来完成的在url的末尾。所以我必须找到一种方法在代码中实现这一点,使其自动分页每100个结果,然后将它们全部打印在google工作表中。或者100 x 100打印,直到完成所有结果。我不会说西班牙语(请看标题为PaginaciónMany Thank!的部分,现在我的行出现了错误:
results.forEach({code_-alfa,detalle,precio})=>output.push([code_-alfa,detalle,precio]);
上面写着:属性ID之后缺少。因此我尝试了之前用于该部分的代码。但随后抛出TypeError无法在对象[object]中找到forEach函数这是ES6对象速记。如果语法不受支持,您可以使用Babel对其进行传输。我忘记访问
resultado
属性以获取结果列表。非常感谢!我将发布代码,所有更正正常