1

私の質問は、 Henrique Abreuによって公開された電子メール テンプレートとして使用するために Google ドキュメントを HTML に変換する際の問題に対する回避策の使用に関するものです。Google Apps Script イシュー トラッカーにIssue 585として登録されています。

私は 1 年間のほとんどの間、次のコードを使用してきましたが、醜い認証シナリオ (つまり、自動認証システムが機能しない) を除けば、問題なく動作しています。

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を参照してください。ここに、私が話しているエラーと認証ダイアログの例を含む画像が添付されています。

4

2 に答える 2

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"};
}

多分あなたはそれを試すことができますか?

または、必要に応じて、この共有テストシートでテストしてください

于 2012-06-09T13:12:04.323 に答える
1

あなたの質問 (およびサンプル スプレッドシート) では、うまくいくかどうかわからないスコープを使用しています。ドキュメントに使用する「スコープ」は「https://docs.google.com/feeds/」です。これはhttps://developers.google.com/gdata/docs/auth/oauth#Scopeに記載されています。コード内で googleOAuth_ に渡すスコープを変更し、問題が解決したかどうかをお知らせください。

于 2012-06-10T05:57:00.390 に答える