【问题标题】:Google Script to send GET request to Trello API and import data to Google Sheet谷歌脚本向 Trello API 发送 GET 请求并将数据导入谷歌表格
【发布时间】:2021-04-03 12:30:48
【问题描述】:

我有一个小脚本可以从 Trello API 中提取信息。

当我将完整的 URL 分配给 String 变量时,脚本可以正常工作。但是,当我单独传递参数时,我收到错误“请求未经授权的权限”。

工作代码:

var url = "https://api.trello.com/1/boards/57c68c1beaab4c676adfaeb1/lists?key=myTrelloKey&token=myTrelloToken";

  var response = UrlFetchApp.fetch(url);
  Logger.log(response.getContentText());

有问题的代码:

var url = "https://api.trello.com/1/boards/57c68c1beaab4c676adfaeb1/lists";

  var options = 
 {
  "key": "myTrelloKey",
  "token": "myTrelloToken",
  "muteHttpExceptions" : true
  };
  
  var response = UrlFetchApp.fetch(url,options);
  Logger.log(response.getContentText());

我试图了解这是否是身份验证问题,但无法解决。我在第二个版本中做错了吗?提前致谢!

【问题讨论】:

    标签: google-apps-script google-sheets trello trello-powerup


    【解决方案1】:

    我相信你目前的情况和目标如下。

    • 根据您的问题,我了解到Working code: 的脚本有效。
    • 您想使用"key": "myTrelloKey""token": "myTrelloToken" 作为查询参数。

    修改点:

    • UrlFetchApp.fetch(url, params)params 没有keytoken 的属性。
      • 我认为这是您的问题的原因。
    • 即使在payload 中使用了这些值,在这种情况下,请求也会变成 POST 方法。
    • 当您想使用"key": "myTrelloKey""token": "myTrelloToken"作为查询参数时,在当前阶段,需要准备一个脚本。
      • 虽然我测试了keytoken是否可以直接用于请求体和请求头而不是查询参数,很遗憾,这些都没有成功。似乎这些被用作查询参数。 Ref

    当以上几点反映到你的脚本中时,它变成如下。

    修改脚本:

    function myFunction() {
      // This is from https://gist.github.com/tanaikech/70503e0ea6998083fcb05c6d2a857107
      String.prototype.addQuery = function(obj) {
        return this + Object.keys(obj).reduce(function(p, e, i) {
          return p + (i == 0 ? "?" : "&") +
            (Array.isArray(obj[e]) ? obj[e].reduce(function(str, f, j) {
              return str + e + "=" + encodeURIComponent(f) + (j != obj[e].length - 1 ? "&" : "")
            },"") : e + "=" + encodeURIComponent(obj[e]));
        },"");
      }
    
      var url = "https://api.trello.com/1/boards/57c68c1beaab4c676adfaeb1/lists";
      var query = {
        "key": "myTrelloKey",
        "token": "myTrelloToken",
      };
      var endpoint = url.addQuery(query);
      Logger.log(endpoint); // <--- https://api.trello.com/1/boards/57c68c1beaab4c676adfaeb1/lists?key=myTrelloKey&token=myTrelloToken
    
      var response = UrlFetchApp.fetch(endpoint, {"muteHttpExceptions" : true});
      Logger.log(response.getContentText());
    }
    

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多