谷歌应用程序脚本getas

时间:2012-06-09 11:00:24

标签: google-apps-script

我的问题涉及使用变通方法解决将Google文档转换为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]。

问题在于,之前当我授予权限时,调试器授权对话框将消失并且系统可以正常工作,现在对话框只会重新出现。当试图从电子表格中的菜单运行代码路径时,我得到了一个通用的“Oops!Authorization required”对话框[1]。

暂且不论这个问题是一个丑陋的解决方法,而这个问题已经存在了很长一段时间了,有什么改变使这个解决方法不再起作用?还有其他解决方案吗?

[1]遗憾的是我还无法上传图片,但请参阅Issue Tracker,其中附有我正在谈论的错误和授权对话框示例的图片。

2 个答案:

答案 0 :(得分:1)

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

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

上进行测试

答案 1 :(得分:1)

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