Google Sites API仍然可以获得授权吗?

时间:2018-02-18 01:11:56

标签: google-apps-script google-sites

我在Google OAuth 2.0 Playground中对其进行了测试,看起来我可以从网站上返回信息,但是当我设置OAuth2 code from Github时,我似乎无法执行UrlFetchApp请求
the error returned code 403. Truncated server response: Not authorized to access this feed 我不确定这是因为它未在API控制台中启用,但我无法在那里或在高级Google服务下找到它。

这是我所涉及的代码部分:

var service = getService();
  if (service.hasAccess()) {
  Logger.log("initial xml has access "service.hasAccess());
    var headers = {
      "Authorization": "Bearer " + service.getAccessToken()
    };
    var MyAttachmentsURL = 'https://sites.google.com/feeds/content/[DOMAIN]/[SITE NAME]?kind=attachment';
    var response = UrlFetchApp.fetch(MyAttachmentsURL, headers);
  };

Github的脚本为我工作,我在消息出现时授权。这是我的范围标签中的内容:

  

脚本要求的7个OAuth范围:
  https://sites.google.com/feeds
  https://www.googleapis.com/auth/drive
  https://www.googleapis.com/auth/script.container.ui
  https://www.googleapis.com/auth/script.external_request
  https://www.googleapis.com/auth/script.scriptapp
  https://www.googleapis.com/auth/spreadsheets
  https://www.googleapis.com/auth/userinfo.email

2 个答案:

答案 0 :(得分:0)

根据协议指南的“Authorizing requests with OAuth 2.0”如果您可以看到该选项,则必须在API控制台中激活Google协作平台API(步骤2)。

我能看到的唯一其他问题是requiring to specify a versionGData-Version: 1.4

所以你的代码会变成这样的东西:

var service = getService();
  if (service.hasAccess()) {
  Logger.log("initial xml has access "service.hasAccess());
    var headers = {
      "GData-Version": "1.4",
      "Authorization": "Bearer " + service.getAccessToken()
    };
    var MyAttachmentsURL = 'https://sites.google.com/feeds/content/[DOMAIN]/[SITE NAME]?kind=attachment';
    var response = UrlFetchApp.fetch(MyAttachmentsURL, headers);
  };

答案 1 :(得分:0)

只要代码中提到了范围,就不需要传递它,因此这不是问题。这是我一直尝试的众多变化之一,我责怪错过了post method就是凌晨。此代码有效(暂时)。

  var service = getService();
  if (service.hasAccess()) {
  Logger.log("initial xml has access "+service.hasAccess());
    var headers = {
//      "GData-Version" : "1.4",
      "Authorization" : "Bearer "+service.token_.access_token
    };
    var params = {"headers": headers, 'method':'get', 'muteHttpExceptions':true};     
    var MyAttachmentsURL = 'https://sites.google.com/feeds/content/[DOMAIN]/[SITE NAME]?kind=attachment';
    var response = UrlFetchApp.fetch(MyAttachmentsURL, params);
    };

似乎在响应头中返回"GData-Version" : "1.4",因此请求中不需要.getAccessToken。我们需要的是访问令牌,虽然所有其他API似乎都能够使用.token_.access_token,但我必须将其修改为<div class="nav-wrapper"> <a href="index.html" class="brand-logo"> Logo</a> <a href="#" data-activates="mobile-demo" class="button-collapse"><i class="material-icons">menu</i></a> <ul class=" right hide-on-med-and-down"> <li> <a href=""> <img src="./img/bg.jpeg" alt="" style="width: 10%;"></a> </li> <li> <a> username</a></li> <li> <a href=""> profile</a></li> </ul> <ul class="side-nav" id="mobile-demo"> <li><a href="sass.html">Sass</a></li> <li><a href="badges.html">Components</a></li> <li><a href="collapsible.html">Javascript</a></li> <li><a href="mobile.html">Mobile</a></li> </ul> </div> - 这可能仅适用于Google协作平台。

我很感谢那些看过这个并感谢Chris回应的人。