【问题标题】:How to pull data from CATSone API with Authentication Token?如何使用身份验证令牌从 CATSone API 中提取数据?
【发布时间】:2022-01-12 15:09:41
【问题描述】:

我对编码完全陌生。我正在尝试在 Klipfolio 中构建仪表板。我正在使用 CATSone API 将数据从 CATSone 提取到 Klipfolio。但是,我一次只能获取 100 行,这意味着我必须拉数据 2600 次。

我现在正在尝试构建一个脚本以通过 Google 脚本编辑器从 API 获取数据。但是,由于我没有这方面的经验,我只是在尝试一些东西。我看了一些视频,也是 Ben Collins 的。基础很简单,我明白他在做什么。

但是,我在放置 API 密钥时遇到了问题。

    var API_KEY = 'key'

    function callCATSone(){

//Call the CATSone API for all candidate list
var response = UrlFetchApp.fetch("https://api.catsone.nl/v3/candidates");
Logger.log(response.getContentText());                                 

// URL and params for the API
var url = 'https://api.catsone.nl/v3/candidates';

 var params = {
 'method': 'GET',
 'muteHttpExceptions': true,
'headers': {
'Authorization': 'key ' + apikey
}
};

// call the API
var response = UrlFetchApp.fetch(url, params);
var data = response.getContentText();
var json = JSON.parse(data);
}

最后,我想将所有候选人列表数据转移到我的工作表中。因此,我使用授权密钥调用 API。之后,我将处理数据,但那是以后的事了。我现在遇到的第一个问题,就是这个失败代码:

'Verzoek voor https://api.catsone.nl/v3/candidates 是错误的。 Foutcode: 401. Ingekorte serverreactie: {"message":"Invalid credentials."} (Gebruik de optie muteHttpExceptions om de volledige reactie te onderzoeken.) (regel 6, bestand 'Code')'。

我希望将来自 CATSone 的所有数据的列表添加到我的工作表中。

有谁知道我如何做到这一点?

【问题讨论】:

    标签: api google-apps-script urlfetch


    【解决方案1】:

    两个更改应该可以修复凭据错误:

    授权标头应为Authorization: 'Token ' + yourApiKey 而不是'key ',请参阅v3 API 文档https://docs.catsone.com/api/v3/#authentication

    在您的情况下,API 密钥存储在全局变量 API_KEY 中,您应该完全像那样引用它,而不是 apikey(除非您的示例中有错字或缺少代码):Authorization : 'Token ' + API_KEY .

    顺便说一句,它可能应该将Content-Type 标头或contentType 参数设置为UrlFetchApp.fetch() 方法调用到application/json,因为UrlFetchApp.fetch() 请求内容类型默认为application/x-www-form-urlencoded

    如果您打算继续使用 API,阅读this MDN article 会有所帮助。

    【讨论】:

    • 您好奥列格,感谢您的快速回复。我尝试像您告诉我的那样添加 Authorization: 'Token ' + API_KEY 变体。但是,它仍然给我同样的错误。
    • 嗨瑞克!尝试像 Authorization: 'Token <'+API_KEY+'>' 这样添加标头 - 最初,我将符号解释为变量指示符,如果这不起作用,请检查您的子域是否在 .nl 区域中注册。
    • Rick,我再次查看了您的代码,有一个问题 - 您的第一个 UrlFetchApp 调用是否在您的实际代码中被注释掉或删除了?您似乎提出了两次请求 - 一次未经授权,然后才使用(但由于第一次调用没有设置 muteHttpExceptions 参数,因此失败并出现错误)。如果是这样,请忽略之前的评论,并在注释掉/删除第一个请求后尝试初始解决方案。
    • 嗨,奥列格,感谢您的快速回答。我添加了 Authorization: 'Token ' + API_KEY 就像你告诉我的那样。我还将 var 响应更改为 UrlFetchApp.fetch(url, params) 并设置 var params: 'method': 'GET'; 'muteHttpExceptions': true, 'header': {'Authorization': 'Token' + API_KEY } };我现在得到数据,所以它似乎正在工作。非常感谢!
    • 嗨 Rick - 太好了,很高兴一切正常!作为最佳实践,请始终确保将 muteHttpExceptions 作为参数包含在 UrlFetchApp 调用中 - 这可以稍微简化调试过程:)
    猜你喜欢
    • 1970-01-01
    • 2018-04-12
    • 2016-09-06
    • 2019-01-22
    • 2020-06-12
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2015-09-16
    相关资源
    最近更新 更多