我已经运行了一段时间(一年)的Google表格脚本,需要从它的Google云端硬盘目录中读取HTML文件。打开文件的代码如下所示:
var myHtmlFile = UrlFetchApp.fetch("https://googledrive.com/host/0B1m........JtZzQ/myfile.htm");
...我可以使用HTM文件进一步解析。
突然,上面的代码抛出错误404.
最近有什么变化,阻止我打开文件吗?
答案 0 :(得分:0)
我发现之前曾经有过这么奇怪!如果它确实存在,那可能就是一个错误 - 非常确定它从来没有打算像#34;本地"文件...我从未见过它提到UrlFetchApp.fetch()
可以获取的任何地方#34;本地"这样的文件。
一个简单的解决方法就是使用文件的正确完整URL:
var myHtmlFile = UrlFetchApp.fetch("https://googledrive.com/host/{public_folder_id}/myfile.htm");
这将确保您的代码符合API,并且在下次Google更改内容时不会中断。
答案 1 :(得分:0)
在与'azawaza'讨论之后(感谢所有提示),我终于解决了这个问题,所以我发布了解决方案以防其他人陷入其中。
看起来像构造
https://googledrive.com/host/{public_folder_id}/myfile.htm
UrlFetchApp.fetch(url,true)中的无法再使用。它给出了错误404.
我从以下构造中获取它(为简单起见,假设我的电子表格只有一个父文件夹):
...
var myId = DocsList.getFileById(SpreadsheetApp.getActive().getId());
var folderId = myId.getParents()[0].getId();
var url = "https://googledrive.com/host/" + folderId + "/myfile.htm";
// url looks like: https://googledrive.com/host/0B1m....JtZzQ/myfile.htm"
var httpResp = UrlFetchApp.fetch(url,true); //throws 404 !!!
// now, parse 'httpResp'
对我有用的解决方案是直接使用这个构造找到文件(同样,假设只有一个给定名称的文件):
var htmlCont = DocsList.find("myfile.htm")[0].getContentAsString();
// now, parse htmlCont
我不知道为什么'旧'解决方案不再适用。正如我提到的,它工作了一年。
更新(2015年5月)
'DocsList'已被弃用,这是一个新的构造:
var files = DriveApp.getFilesByName(myURL);
if (files.hasNext()) {
var htmlCont = files.next().getBlob().getDataAsString()
}
必须使用