google-apps-script - UrlFetchApp.fetch(URL).getContentText() 突然无法正常工作,尽管没有任何变化
问题描述
我有一个非常简单的谷歌脚本,它从互联网上抓取一个 CSV 文件并将其放入谷歌文档中。之前和之后还有更多,但这里是问题出现的地方:
var csvUrl = "https://data.cdc.gov/resource/muzy-jte6.csv?$limit=6000";
var csvContent = UrlFetchApp.fetch(csvUrl).getContentText();
它每晚自动运行,并且在过去六个月中运行没有问题。突然之间,它不再起作用了。脚本编辑器没有提供任何理由。该链接完全有效,并且仍然有效。我使用来自不同网站的不同 CSV 链接进行了尝试,但遇到了同样的问题。
当我运行脚本时,它只说:
例外:意外错误: https ://data.cdc.gov/resource/muzy-jte6.csv?$limit=6000 (第 8 行,文件“代码”)关闭
正如我所提到的,该脚本自夏天以来已经完美运行了 150 多次,它没有改变,文档没有改变,API 链接也没有改变。我唯一的猜测是我的 Google 帐户有一些权限更改,但该应用程序仍然拥有我的 Google 帐户所需的所有权限。
请帮助我理解为什么该脚本不再起作用以及如何让它再次起作用。
解决方案
我也有同样的情况。那时,我注意到当使用 Google Spreadsheet 的内置函数作为 URL 时,可以检索到值。在这种情况下,作为当前的解决方法,我使用了以下流程。
- 放一个公式
=IMPORTDATA(URL)
。 - 从工作表中检索值。
当上述流程反映到您的 URL 时https://data.cdc.gov/resource/muzy-jte6.csv?$limit=6000
,它变成如下。
示例脚本:
function myFunction() {
const url = "https://data.cdc.gov/resource/muzy-jte6.csv?$limit=6000"; // This is your URL.
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
sheet.clear();
const range = sheet.getRange("A1");
range.setFormula(`=IMPORTDATA("${url}")`);
SpreadsheetApp.flush();
const values = sheet.getDataRange().getValues();
range.clear();
console.log(values)
}
- 在此示例脚本中,使用了“Sheet1”。所以请根据您的实际情况进行修改。
- 运行上述脚本时,URL 中的值将作为
values
. - 在这个答案中,我使用了
IMPORTDATA
. 但是对于每种情况,其他功能可能是合适的。在这种情况下,请检查它们。
笔记:
- 这是当前的解决方法。所以当这个问题被删除时,我认为你可以使用你原来的脚本。
参考:
推荐阅读
- c# - 如何在 Mocked IQueryable 对象上实现 Count 方法
- php - php中的curl超时与curl soap xml调用
- java - 在数组列表中使用来自控制器的值实现 ComboBox
- udp - 不同机器上的 UDP 套接字服务器/客户端不会通信
- powerbi - 如何使用 dax 根据值计算非空白行数
- java - 不兼容的类型:int 不能转换为整数
- java - 如何只打印数组的最后一个元素?
- character-encoding - SikuliX IDE 使用虚线字符
- javascript - 从数组中获取前 6 个元素
- python - 在 jupyter notebook 中一个接一个地运行两个 file.py