2012-06-09 12 views
1

내 질문은 Henrique Abreu에 게시 된 이메일 템플릿으로 사용하기 위해 Google 문서 도구를 HTML로 변환하는 문제에 대한 해결 방법 사용과 관련이 있습니다. Google Apps Script 문제 추적기에 Issue 585으로 등록되어 있습니다.google apps script getas

나는 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].

문제는 이전에 권한을 부여 받았을 때 디버거 인증 대화 상자가 사라지고 시스템이 작동하지만 지금은 대화 상자가 다시 나타납니다. 스프레드 시트의 메뉴에서 코드 경로를 실행할 때 [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

감사의 말 Serge. 나는 당신이 인용 한 코드가 내 모든 것과 동일하지만 문제가되는 코드라고 생각하지 않는다고 확신한다. 나는 환경과 관련이 있다고 생각한다. 지금 조사 중이지만 두 가지 요소와 관련이 있습니다. 1) 일반적으로 여러 개의 Google 계정 (스크립트를 개발하지 않는 기본 계정)과 2) 시크릿 창을 사용하여 로그인합니다. – chrisbateskeegan

+0

확인. 시크릿 창과 다중 로그인하지 않아도 상관 없습니다. 문제는 API를 통해 내보내는 문서의 개인 정보 보호와 관련이 있습니다. 공용 또는 공용 링크가있는 경우이 코드가 올바르게 작동합니다. 그 이상의 개인적인면,이 코드는 작동하지 않으며,이 동작은 확실히 바뀌 었습니다. – chrisbateskeegan

관련 문제