我正在尝试从第三方从API提取数据并将其插入Google表格。但是,该第三方每分钟仅允许3个请求,因此我尝试在为此请求构建的函数中使用Utilities.sleep功能。
我的工作表如下:
它具有我正在使用的功能所必需的两个输入(以下):
function GET_DETAILS_RECEITA(CNPJ,sleep_seconds) {
Utilities.sleep(sleep_seconds*1000);
var fields = 'nome,fantasia,email,telefone';
var baseUrl = 'https://www.receitaws.com.br/v1/cnpj/';
var queryUrl = baseUrl + CNPJ;
if (CNPJ == '') {
return 'Give me CNPJ...';
}
var response = UrlFetchApp.fetch(queryUrl);
var json = response.getContentText();
var place = JSON.parse(json);
return [[ place.nome,
place.fantasia,
place.telefone,
place.email,
]];
}
从技术上讲,它应该可以工作,但是由于某种原因,我只能在第一个中获得回报。
我遇到的错误非常笼统,“错误:错误地执行错误个性化。” (类似“错误:个性化功能执行中的内部错误”)。
有什么想法吗?
答案 0 :(得分:1)
来自https://developers.google.com/apps-script/guides/sheets/functions
自定义函数调用必须在30秒内返回。如果不是,则该单元将显示错误:内部错误,执行自定义功能。
考虑到上述情况,在自定义函数上使用sleep
并不是一个好主意,该函数将按OP的意图使用。而是使用自定义菜单或脚本编辑器来执行脚本。
为了最大程度地减少对函数的更改,可以使用将值读/写到电子表格并将必需的参数传递给GET_DETAILS_RECEITA
答案 1 :(得分:0)
我会考虑在对话框中使用类似的方法。只要您使用Chrome,就可以在设置的时间间隔内传递一个额外的参数。
<script>
var CNPJ='what ever';
window.onload=function(){setInterval(getDetails,25000,CNPJ);}
function getDetails(CNPJ){
google.script.run.GET_DETAILS_RECEITA(CNPJ)
}
</script>
如果要回调,请与withSuccessHandler();