如何在 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 密钥的主要内容,如果未能解决你的问题,请参考以下文章

Google Apps 脚本:Google 表格分组

如何在 Google Apps 脚本中使用服务帐户对 Google 表格进行身份验证

如何使用 Google Apps 脚本在个人 Google 云端硬盘和团队云端硬盘之间移动文件?

如何使用 Google Apps 脚本将公式添加到 Google 表格?

使用 Google Apps 脚本在 Google 表格中创建新表格

如何从 Google 电子表格中的 Google Apps 脚本自动更新“站点地图”功能?