【问题标题】:Can Google Sites API still be authorized?Google 协作平台 API 是否仍能获得授权?
【发布时间】:2018-02-18 01:11:56
【问题描述】:

我在 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

【问题讨论】:

    标签: google-apps-script google-sites


    【解决方案1】:

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


    我能看到的唯一其他问题是 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);
      };
    

    【讨论】:

    • 感谢克里斯。我完全错过了关于所需版本的那部分。明天试试这个。希望这可以解决问题,因为控制台中没有站点 API。
    【解决方案2】:

    只要代码中提到了范围,就不需要传递,所以这不是问题。这是我一直在尝试的众多变化之一,我将错过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" 在响应标头中返回,因此请求中不需要。需要的是访问令牌,尽管所有其他 API 似乎都可以使用 .getAccessToken,但我不得不将其修改为 .token_.access_token - 这可能仅适用于 Google 协作平台。

    感谢那些看过这篇文章的人,并感谢克里斯的回复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多