如何在 Google Apps 脚本中向 UrlFetchApp 添加 API 密钥

Posted

技术标签:

【中文标题】如何在 Google Apps 脚本中向 UrlFetchApp 添加 API 密钥【英文标题】:How to add an API Key to a UrlFetchApp in Google Apps Scripts 【发布时间】:2018-08-18 10:58:30 【问题描述】:

已解决 感谢 Dimu Designs 的帮助。

以下工作。

函数 myFunction() var url = "https://api.fortnitetracker.com/v1/profile/pc/Ninja"; var apiKey = "xxx-xxx-xxx";

var res = UrlFetchApp.fetch( 网址, “标题”: “TRN-Api-Key”:apiKey ); var 内容 = res.getContentText();记录器.log(res); Logger.log(内容);

问题

我正在尝试使用 Google 表格中的 Google 应用脚本来调用外部 Fortnite API 来请求玩家数据。我对如何在传递请求时添加 API 密钥作为标头感到困惑。

这是我目前所构建的(请不要笑)!...

function myFunction() var res = UrlFetchApp.fetch("https://api.fortnitetracker.com/v1/profile/PC/Ninja?"); var 内容 = res.getContentText(); Logger.log(res); 记录器.log(内容);

当我尝试运行它时,我得到以下错误:

请求失败 https://api.fortnitetracker.com/v1/profile/PC/Ninja?返回码 401. 截断服务器响应:"message":"No API key found in request"(使用 muteHttpExceptions 选项检查完整响应

我已经尝试根据许多不同的帖子以多种方式添加我的 API 密钥,但它不起作用并且让我更加困惑(此时很容易完成)。

有没有人知道我如何才能完成脚本以确保我得到信息? :)

---编辑---

首先,感谢大家的帮助,这就是我们目前所处的位置。我现在尝试了以下方法:

var url = "https://api.fortnitetracker.com/v1/profile/pc/Ninja";变量 apiKey = "xxx-xxxx-xxx";

var 响应 = UrlFetchApp.fetch( 网址, “标题”: “TRN-Api-Key”:apiKey );

这次返回的是 403 错误,而不是 401 错误。

注意,我也尝试过使用“基本”对标头进行身份验证,但这不起作用”。

【问题讨论】:

显示您尝试将密钥包含在请求中的方式。另请参阅 API 文档 - 它应说明您将如何附加密钥以提交授权请求 没有提供 API 文档。 必须有文档,否则您将不知道如何构建您的 URL。你从哪里得到你的 API 密钥?我会从那里开始。阅读授权。 @tehhowch 有但它的文档极差:fortnitetracker.com/site-api。他们甚至没有提供如何使用 API 密钥的体面示例。我想 OP 将不得不使用 Authorization 标头,但是有不同类型的令牌格式,例如“Basic”、“Bearer”……文档没有给开发人员任何使用的指示。 【参考方案1】:

编辑 我怀疑 API 使用了自定义标头。当你注册一个 API 密钥时,你会得到一个如下形式的字符串:

TRN-Api-Key:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

我在这里猜测,但冒号前面的文本似乎是自定义标题,冒号后面的字符串是 API 密钥。

如果没有适当的文档,这仍然几乎是在黑暗中拍摄,但您可以尝试以下方法:

var url = "[FORTNITE-API-ENDPOINT]";
var apiKey = "[YOUR-API-KEY]"; // sans header and colon

var response = UrlFetchApp.fetch(
    url,
    
        "headers":
            "TRN-Api-Key":apiKey
        
    
);

另外,请务必查看 UrlFetchApp 文档以供将来参考: https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app

【讨论】:

有趣。我尝试了第一个答案,但它仍然返回 401 错误。但是使用这个版本(TRN-Api-Key)我得到了 403 错误。 api.fortnitetracker.com/v1/profile/PC/Ninja 的请求失败?返回代码 403。截断的服务器响应:"message":"Invalid authentication credentials"(使用 muteHttpExceptions 选项检查完整响应)。 (第 4 行,文件“代码”)我在 GitHub 上找到了这个,但由于这是我第一次做任何编码的经历,这就像尝试学习一门新语言......哈! github.com/qlaffont/fortnite-api/blob/master/README.md 使用您使用的更新代码更新您的原始帖子,以便我们对其进行检查 啊..删除“?”在你的 url 字符串的末尾,看看它是否有效(我建议你删除你的 api 密钥,以免有人使用它) 并且你的url字符串中的“PC”需要小写(刚刚测试过,它对我有用) 哈哈关于 api 密钥的好点。我已删除 ?,但仍然收到 403 错误。

以上是关于如何在 Google Apps 脚本中向 UrlFetchApp 添加 API 密钥的主要内容,如果未能解决你的问题,请参考以下文章