2012-06-09 4 views
1

Ma question concerne l'utilisation d'une solution de contournement au problème de la conversion d'un document Google Doc en HTML pour l'utiliser comme modèle d'e-mail publié par Henrique Abreu. Il est enregistré en tant que Issue 585 dans le suivi des problèmes de Google Apps Script.google apps script getas

J'ai utilisé le code suivant pendant la meilleure partie de l'année maintenant et mis à part le scénario d'autorisation moche (c.-à-d. Que le système d'autorisation automatique ne fonctionne pas) cela fonctionne bien.

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

Mon problème est que récemment les nouvelles autorisations ne fonctionnent plus. Ainsi, les feuilles de calcul existantes que j'utilise continuent de fonctionner et d'envoyer des courriels correctement. Cependant, après avoir créé une nouvelle feuille de calcul et importé le code, le mécanisme d'autorisation est déclenché [1]. Le problème est que, alors qu'auparavant, lorsque j'avais accordé des autorisations, la boîte de dialogue d'autorisation du débogueur disparaissait et que le système fonctionnait, la boîte de dialogue réapparaît maintenant. Lorsque vous essayez d'exécuter le chemin de code à partir d'un menu dans la feuille de calcul, j'obtiens une boîte de dialogue générique "Oops! Authorization required" à la place [1]. En dehors du fait qu'il s'agit d'une solution de contournement pour un problème qui traîne depuis longtemps, qu'est-ce qui a changé pour que cette solution de contournement ne fonctionne plus? Y a-t-il une autre solution?

[1] Malheureusement, je ne peux pas encore télécharger d'images, mais je vois le Issue Tracker où j'ai joint une image avec des exemples des boîtes de dialogue d'erreur et d'autorisation dont je parle.

Répondre

1

Dans votre question (et votre feuille de calcul de l'échantillon) vous utilisez un champ, je ne suis pas sûr fonctionnera. La "portée" que j'utilise pour les documents est "https://docs.google.com/feeds/". Ceci est documenté ici https://developers.google.com/gdata/docs/auth/oauth#Scope. Veuillez modifier le champ d'application que vous transmettez à googleOAuth_ dans votre code et faites-nous savoir si le problème disparaît.

+0

vous avez absolument raison. C'est ce que vous obtenez lorsque vous essayez de rationaliser le code dont vous avez une compréhension imprécise. – chrisbateskeegan

1

Je vous ai vu publier sur le système de suivi des problèmes et faire des tests sur une nouvelle feuille de calcul. Dans mon test le processus d'autorisation apparaît lorsque j'utilise cette petite fonction:

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

Peut-être que vous pourriez l'essayer?

ou, si vous préférez, le tester sur this shared testsheet

+0

Je ne peux pas non plus reproduire ce problème. Peut-être est-ce lié à la première autorisation oAuth appelée avec une UiApp ouverte, ou quelque chose du genre. Quoi qu'il en soit, avoir à autoriser comme ça, séparément et dans le code seulement est en effet moche. Mais c'est un autre problème, 667: http://code.google.com/p/google-apps-script-issues/issues/detail?id=677 –

+0

Merci Serge. Je suis à peu près certain que le code que vous avez cité est identique au mien, donc je ne pense pas que ce soit le code qui soit le problème, je pense que c'est lié à l'environnement. J'étudie maintenant mais je pense que c'est lié à deux facteurs; 1) Je suis généralement connecté en utilisant plusieurs comptes google (celui par défaut n'étant pas celui avec lequel je développe des scripts) et 2) Sinon, j'utilise une fenêtre de navigation privée. – chrisbateskeegan

+0

Ok. Il ne s'agit pas de connexion multiple, ni de fenêtre incognito. Le problème concerne la confidentialité du document exporté via l'API. Si c'est public ou public avec lien ce code fonctionne bien. Si c'est plus privé que ça, ce code ne fonctionnera pas, et ce comportement a définitivement changé. – chrisbateskeegan