1

一部のドメイン管理 API 用に、GAS でいくつかのラッパー ライブラリを構築しています。OAuth、UrlFetch、XML to Object、Object to XML 関数を処理する一般的なライブラリがあります。これをライブラリとして API ラッパーに追加しました。最初に作成したのは EmailAuditAPI 用です。これは、EmailAuditAPI をライブラリとしてロードすると問題なく機能します。私が作成した 2 番目の API ラッパーは、GmailSettingsAPI 用です。このラッパーはそれ自体で正常に動作しますが、ライブラリとして読み込まれた別のスクリプトから呼び出すと動作しません。あなたをより視覚的に

GoogleAPITools -> EmailAuditAPI Wrapper -> プロジェクト スクリプト: 動作します!

GoogleAPITools -> GmailSettingsAPI Wrapper -> Project Script : 動作しません!

GoogleAPITools -> GmailSettingsAPI ラッパー: 動作します!

これが重要なコードだと思います:

GoogleAPITools
function callGApi(apiUrl,authScope,method,payloadIn)
{  
  //oAuth & Fetch Arguments
  var fetchArgs = googleOAuth_("google", authScope);
  fetchArgs.method = method ? method : "GET";

  if(payloadIn)
  {
    fetchArgs.contentType = "application/atom+xml";
    fetchArgs.payload = payloadIn;
  }

  var urlFetch = UrlFetchApp.fetch(apiUrl, fetchArgs); //This line fails w/ not working wrapper
  var returnObject = urlFetch.getContentText() != '' ? Xml.parse(urlFetch.getContentText()) : urlFetch.getResponseCode();
  return returnObject;
}

//Google oAuth
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"};
}

このラッパーは、ライブラリとして 3 番目のスクリプトに読み込まれると機能します。

function getAccountInfoRequest(user,reqId)
{
  var properties = GoogleAPITools.callGApi(ACCOUNTINFOURL + user + "/" + reqId,AUDITSCOPE).entry.property;
  return GoolgeAPITools.returnXmlToObject(properties);
}

このラッパーは、ライブラリとして 3 番目のスクリプトに読み込まれると機能しませんが、単独では機能します。GoogleAPITools は、両方のラッパー スクリプトでライブラリとして読み込まれます。

GmailSettingsAPI Wrapper
//Get Signature
function getSignatureForUser(user)
{
  var returnedInfo = GoogleAPITools.callGApi(EMAILSETTINGSURL + user + "/signature",EMAILSETTINGSSCOPE);
  return GoolgeAPITools.returnXmlToObject(new Array(returnedInfo.entry.property));
}

両方のラッパーをライブラリとしてロードした 3 番目のプロジェクト スクリプト:

function testApiWrappers() {
  var user = "john";
  var reqId = "123456789";
  Logger.log(AuditApi.getAccountInfoRequest(user,reqId));
  Logger.log(GmailSettingsApi.getSignatureForUser(user)); //Fails here
}

私のログには、AuditApi 呼び出しの戻りが表示されますが、GoogleAPITools スクリプトの URLFetch を参照する「予期しないエラー:」が表示されます。

2 つの API の Oauth に違いはありますか? 私が見逃した私のコードに何か目立つものはありますか? どんな援助も素晴らしいでしょう。

4

0 に答える 0