我的问题涉及使用变通方法解决将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,其中附有我正在谈论的错误和授权对话框示例的图片。
答案 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_的范围,并告知我们问题是否消失。