【问题标题】:google apps script getas谷歌应用脚​​本getas
【发布时间】:2012-08-09 21:48:29
【问题描述】:

我的问题涉及使用解决方法来解决将 Google Doc 转换为 HTML 以用作Henrique Abreu 发布的电子邮件模板的问题。它在 Google Apps 脚本问题跟踪器上注册为 Issue 585。

我在一年中的大部分时间里一直在使用以下代码,除了丑陋的授权场景(即自动授权系统不起作用)之外,它运行正常。

function getDocAsHtml(docId){
  var url = 'https://docs.google.com/feeds/download/documents/Export?exportFormat=html&format=html&id=';
  var auth = googleOAuth_('docs',url+docId);
  return UrlFetchApp.fetch(url+docId,auth).getContentText();
}

function googleOAuth_(name,scope) {
  var oAuthConfig = UrlFetchApp.addOAuthService(name);
  oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
  oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
  oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
  oAuthConfig.setConsumerKey('anonymous');
  oAuthConfig.setConsumerSecret('anonymous');
  return {oAuthServiceName:name, oAuthUseToken:"always"};
}

我的问题是最近新的授权不再有效。因此,我使用的现有电子表格可以继续工作并正确发送电子邮件。然而,在创建了一个新的电子表格并将代码导入其中后,就会触发授权机制 [1]。

问题是,以前当我授予权限时,调试器授权对话框会消失并且系统会正常工作,而现在该对话框只是重新出现。当尝试从电子表格中的菜单运行代码路径时,我得到一个通用的“糟糕!需要授权”对话框 [1]。

撇开对于一个已经存在很长时间的问题来说,这是一个丑陋的解决方法这一事实,是什么改变使这个解决方法不再有效?还有其他解决方案吗?

[1] 很遗憾,我还不能上传图片,但可以查看 Issue Tracker,我在其中附上了一张图片,其中包含我正在谈论的错误和授权对话框的示例。

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    在您的问题(和您的示例电子表格)中,您使用的范围我不确定是否会起作用。我用于文档的“范围”是“https://docs.google.com/feeds/”。这记录在这里https://developers.google.com/gdata/docs/auth/oauth#Scope。请在您的代码中更改您传递给 googleOAuth_ 的范围,如果问题消失,请告诉我们。

    【讨论】:

    • 你是绝对正确的。当你试图合理化你理解不准确的代码时,你会得到这样的结果。
    【解决方案2】:

    我看到您在问题跟踪器上发帖并在新的电子表格上进行了一些测试。在我的测试中,当我使用这个小功能时,授权过程就会出现:

    function autorise(){
    // fonction à appeler pour autoriser googleOauth
    var id= "put here the string ID of a doc you own"
      var url = 'https://docs.google.com/feeds/';
      var doc = UrlFetchApp.fetch(url+'download/documents/Export?exportFormat=html&format=html&id='+id,
                                  googleOAuth_('docs',url)).getContentText();  
    }
    // this part is the same you use and is already in your script... I show it here for info only
    function googleOAuth_(name,scope) {
      var oAuthConfig = UrlFetchApp.addOAuthService(name);
      oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
      oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
      oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
      oAuthConfig.setConsumerKey('anonymous');
      oAuthConfig.setConsumerSecret('anonymous');
      return {oAuthServiceName:name, oAuthUseToken:"always"};
    }
    

    也许你可以试试?

    或者,如果您愿意,可以在 this shared testsheet 上进行测试

    【讨论】:

    • 我也无法重现这个问题。也许它与打开 UiApp 时调用的第一个 oAuth 授权有关,或者与这些方面有关。无论如何,必须像这样单独且仅在代码中进行授权确实很丑陋。但这是另一个问题,667:code.google.com/p/google-apps-script-issues/issues/…
    • 谢谢谢尔盖。我很确定您引用的代码与我的几乎相同,所以我认为问题不是代码,我认为这与环境有关。我现在正在调查,但我认为这与两个因素有关; 1) 我通常使用多个 Google 帐户登录(默认帐户不是我开发脚本时使用的帐户)和 2) 或者我使用隐身窗口。
    • 好的。这与多重登录无关,也与隐身窗口无关。该问题与通过 API 导出的文档的隐私有关。如果它是公开的或带有链接的公开,则此代码可以正常工作。如果它比这更私密,则此代码将不起作用,并且此行为肯定已经改变。
    • 所以要清楚,我的问题与模板文档的 privacy 设置有关。现在看来,除非源文档已共享“网络上的公共”或“有链接的任何人”,否则身份验证将失败。任何大于此的隐私设置都将失败。我创建了一个sample spreadsheet 来突出问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 2016-10-08
    • 2017-12-25
    • 2015-12-06
    相关资源
    最近更新 更多