我有以下功能运行得很好:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var habSheet = ss.getSheetByName("Harvests");
var bVals = habSheet.getRange("b2:b").getValues();
var habs = bVals.filter(String).length;
var habitats = habSheet.getRange("B2:B"+habs+1).getDisplayValues();
var data = [];
var traitNames = habSheet.getRange("D1:U1").getValues();
var values = new Array(habs);
for (i = 0; i < habs; i++) {
values[i] = new Array(traitNames[0].length);
for (j=0; j<traitNames[0].length; j++){
values[i][j] = [""];
}
}
var rawData = "";
var names = new Array(habs);
for (i = 0; i < habs; i++) {
names[i] = new Array(1);
}
for (i=0; i<habs; i++){
try{
rawData = UrlFetchApp.fetch("https://api.genopets.me/habitat/"+habitats[i]);
data[i] = JSON.parse(rawData.getContentText());
names[i][0] = data[i].name;
for (j=0; j<data[i].attributes.length; j++){
value = data[i].attributes[j].value;
trait = data[i].attributes[j].trait_type;
for (k=0; k<=21; k++){
if (traitNames[0][k] == trait){
values[i][k] = value;
}
}
}
}
catch(err){但我每天都要接电话。我有紧急情况,因为需要在一小时内再次运行。我正在尝试构建一个临时修复程序,因此我使用importData来使用以下公式调用API:
=join(",",IMPORTDATA("https://api.genopets.me/habitat/"&B2,","))然后,我只想用这些导入的数据替换代码中的rawData。然而,现在它以文本的形式出现,不能以同样的方式进行解析。有没有一种快速的方法强制它成为JSON格式,或者像以前一样转换成字典,这样我就可以用相同的代码来解析它了吗?我被困住了,因为.name、.length等都失败了,因为"rawData“现在只是一个字符串。下面是我正在使用的代码片段,用来尝试正确处理这个问题并构建快速修补程序:
// for (i=0; i<habs; i++){
var i=0;
importData = habSheet.getRange("AL1").getDisplayValue();
rawData = JSON.stringify(importData);
// Logger.log(rawData);
data[i] = rawData;
// data[i] = JSON.parse(rawData.getContentText());
names[i][0] = data[i].name;
for (j=0; j<data[i].attributes.length; j++){
value = data[i].attributes[j].value;
trait = data[i].attributes[j].trait_type;
for (k=0; k<=21; k++){
if (traitNames[0][k] == trait){
values[i][k] = value;
}
}
}我试过像上面一样,也没有紧张,但我还不能得到这个。
作为参考,这是API响应的一个示例:
https://api.genopets.me/habitat/7vTz9dniU14Egpt8XHkMxP1x36BLRd15C11eUTaWhB19
感谢你的帮助!
发布于 2022-08-19 23:25:50
为了找到一个简单的解决方法,我已经做了很多测试,但是找不到一个,由=join(",",IMPORTDATA(url,","))产生的字符串(以及其他的=IMPORTXXX函数)不会对您的代码起作用。在使用这些导入函数时,将解释数据,删除某些字符或格式化值,因此不建议使用这些函数。
由于您提到了您收到的消息与配额限制有关,因此您应该考虑在多个Apps脚本项目中分担此脚本的负载。作为一种可能的即时解决方案,您可以创建脚本的副本(或绑定到脚本的文件),授权新副本,然后再试一次。
要提高性能,可以尝试批量使用调用,使用另一个函数fetchAll (https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetchallrequests)。此方法有100个请求限制。这将导致相同的配额使用。
https://stackoverflow.com/questions/73418157
复制相似问题