2012-06-09 6 views
1

Мой вопрос относится к использованию обходного пути к проблеме преобразования Google Doc в HTML для использования в качестве шаблона электронной почты, который был опубликован Henrique Abreu. Он зарегистрирован как Issue 585 в журнале отслеживания проблем Google Apps.скрипт google apps getas

Я использую следующий код в течение большей части года, и кроме уродливого сценария авторизации (то есть система автоматической авторизации не работает), он работает нормально.

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, где я прикреплял изображение с примерами диалоговых окон с ошибками и авторизацией, о которых я говорю.

ответ

1

В вашем вопросе (и ваш образец таблицы) вы используете рамки, я не уверен, будет работать. «Объем», который я использую для документов, - «https://docs.google.com/feeds/». Это описано здесь https://developers.google.com/gdata/docs/auth/oauth#Scope. Измените область действия, которую вы передаете googleOAuth_ в своем коде, и сообщите нам, если проблема исчезнет.

+0

Вы абсолютно правы. Это то, что вы получаете, когда пытаетесь рационализировать код, который у вас есть неточное понимание. – chrisbateskeegan

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

+0

Я также не могу воспроизвести эту проблему. Возможно, это связано с тем, что первая авторизация oAuth вызывается с открытым UiApp или что-то в этом направлении. Во всяком случае, чтобы авторизовать подобное, отдельно и в коде, это действительно уродливо. Но это еще одна проблема, 667: http://code.google.com/p/google-apps-script-issues/issues/detail?id=677 –

+0

Спасибо, Серж. Я почти уверен, что код, который вы цитировали там, полностью идентичен моему, поэтому я не думаю, что это код, который является проблемой, я думаю, что это связано с окружающей средой. Сейчас я расследую, но я думаю, что это связано с двумя факторами; 1) Обычно я регистрируюсь с использованием нескольких учетных записей google (по умолчанию это не тот, с которым я разрабатываю скрипты), и 2) В качестве альтернативы я использую окно инкогнито. – chrisbateskeegan

+0

Хорошо. Это не связано с несколькими входами, и это не связано с окном инкогнито. Проблема связана с конфиденциальностью документа, экспортируемого через API. Если он является общедоступным или общедоступным, этот код работает нормально. Если он более частный, этот код не будет работать, и это поведение определенно изменилось. – chrisbateskeegan