【发布时间】:2019-10-10 20:01:05
【问题描述】:
我正在尝试使用 USDA 网站上描述的 Food Data Central REST API 访问基本食品信息:
对于这个项目,我正在使用 R 中的 httr (v 1.3.1) 包进行调用。
API 调用的文档看起来不错,并提供了一些示例;不幸的是,这些示例都没有使用 R,而且由于我对 API 开发知之甚少,我不确定文档的“内容”应该如何翻译给我。该文档提供了以下示例:
curl -H "Content-Type:application/json"
-d '{"generalSearchInput":"Cheddar cheese"}'
-X POST
https://DEMO_KEY@api.nal.usda.gov/fdc/v1/search
我看到一个“Content-Type”标题和一个正文,其中字符串“Cheddar cheese”被提供给一个名为generalSearchInput的参数。看来我还需要用我自己的 API 密钥替换“DEMO_KEY”字符串。
我宁愿不分享我自己的 API 密钥,而是 it's painless to request one(点击链接,输入姓名/电子邮件,几秒钟后获得密钥,甚至不必确认电子邮件)。
下面是我在 httr 包中复制此调用的尝试:
httr::POST(url = "https://api.nal.usda.gov/fdc/v1/search",
authenticate(user = "<MyAPIKey>", password = "", type = "basic"),
query = list(generalSearchInput = "Cheddar cheese",
encode = "json")
)
回复如下:
Response [https://api.nal.usda.gov/fdc/v1/search]
Date: 2019-10-10 20:34
Status: 403
Content-Type: application/json
Size: 141 B
{
"error": {
"code": "API_KEY_INVALID",
"message": "An invalid api_key was supplied. Get one at https://api.nal.usda.gov:443"
}
这也许不足为奇。我遇到了几个问题:
如何正确地将我的 API 密钥传递给调用?我尝试使用基本 HTTP 身份验证 as described on the api.data.gov website documentation(即,作为用户名和空密码的密钥)这样做,但我认为我这样做不正确。
【问题讨论】:
-
感谢@Kenna,我更新了我的 API 调用。现在看来,主机正在接收并识别请求,尽管它仍然无法识别我传递 API 密钥的方式。我已经输入了一条更新的错误消息来展示新的结果。