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