Google Apps脚本UrlFetchApp返回未授权错误401

时间:2018-08-23 17:03:39

标签: google-apps-script export google-docs urlfetch

这是我正在使用的代码。

function doc_to_html(id)
{
  var url = "https://docs.google.com/feeds/download/documents/export/Export?id="+id+"&exportFormat=html";
var param = 
    {
      method      : "get",
      headers     : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
      muteHttpExceptions:true,
    };
 var html = UrlFetchApp.fetch(url,param).getContentText();
  Logger.log(html);
}

它经过多次测试,但现在返回“未经授权” 错误401。“更准确地说,它正在返回:

<html>
<head>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>

我已经查看了有关UrlFetchApp的所有文档,但没有看到任何配额或限制。我检查了脚本作用域,并且https://www.googleapis.com/auth/script.external_request得到了授权。

1 个答案:

答案 0 :(得分:2)

提供的范围不足以访问文档。要访问它,您还需要文档作用域。编辑清单文件以具有以下范围:

BEGIN;  -- a transaction
SET LOCAL timezone = 'whatever';  -- for the transaction only
SELECT /* your query */;
COMMIT;

或在脚本中添加对Document App的虚拟调用:

"oauthScopes": ["https://www.googleapis.com/auth/script.external_request","https://www.googleapis.com/auth/documents"],

基于Tanaike的评论,看来文档范围还不够,但是即使我们不访问电子表格,也需要电子表格范围。另外,必须使用云端硬盘的只读作用域。

电子表格+文档范围:

清单:

DocumentApp.getActiveDocument();

或在脚本中添加对Document App + SpreadsheetApp的虚拟调用:

"oauthScopes": ["https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/documents"
    "https://www.googleapis.com/auth/spreadsheets"],

驱动器范围:

清单:

//DocumentApp.getActiveDocument();
//SpreadsheetApp.getActive();

或在脚本中添加对DriveApp的虚拟调用:

"oauthScopes": ["https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/drive.readonly"],