如何用R获取API数据

InfoWorld的|2019年9月4日

没有您想要使用的API的R包?没问题!了解如何编写自己的R代码来使用API密钥身份验证从API提取数据。

版权所有©2019Raybet2

你好。我莎朗马克利斯在IDG通信,这里做一集34多与R:导入数据从一个API。

有很多很棒的R包可以让你用一个函数从API中导入。但有时API没有自己的包。好消息是:编写自己的代码很容易。

我会与机构AccuWeather API,但过程和代码,我会告诉将为使用认证的关键大多数其他API的工作演示这一点。

如果你想跟着一起去developer.accuweather.com,然后按照步骤来注册,创建一个应用程序,并获得免费的关键。有关于如何做的一切,在InfoWorld的这个视频的相关文章中说明。

但在这里,让我们专注于为API将R代码。首先,我将加载HTTR包充分利用API的数据;jsonlite用于解析结果;和dplyr使用管道。

下一步 - 这是关键的 - 我需要知道如何以请求我从API所需的数据结构的URL。搞清楚查询结构可以是过程中最难的部分,这取决于API是如何有据可查。幸运的是,机构AccuWeather API文档都还不错。

任何API查询都需要一个资源URL(或者我认为的URL的根);然后是查询的特定部分。AccuWeather在它的预报API文档中是这样说的:

对于预测的基本网址为主要是恒定的,但它需要一个位置代码。如果你只是寻找一个预测1点的位置,那么,你可以欺骗和使用机构AccuWeather网站搜索预测,然后检查回来的URL。

见末尾的斜杠571_pc?这对01701的位置代码 - 在马萨诸塞州弗雷明汉的办公室邮编。

或者,你可以使用一个机构AccuWeather位置API与R上拉的位置代码,我将在一个位显示。

特定数据请求的查询参数被附加到基本URL的末尾。添加的第一个变量以问号开头,后面跟着name = value。任何附加的键-值对都是用一个与字符和后面跟着name = value来添加的。

因此,为了添加我的API键,URL看起来就像如果我想添加第二个查询参数——比如,将默认的详细信息从false更改为true——它看起来就像这样。

我们可以使用HTTR的GET()函数,使之与URL数据请求。这paste0命令创建URL只是增加了我的API密钥。我已经保存它的R环境变量,所以关键并不在我的屏幕上显示。如何做到这一点的说明也是在这部影片的相关文章。

让我们来看看my_raw_result。这是一个非常复杂的列表。我们希望实际的数据主要是在内容上,但如果我们看那个 我们将看到它是一种“原始”格式,类似于二进制数据。

幸运的是,httr包使得将原始格式转换为可用格式变得很容易——使用content()函数。

内容()为您提供了三个转换选项:为原料(这绝对是无益的在这种情况下);解析 - 这似乎通常会返回某种形式的名单;和文本。对于JSON - 尤其是嵌套的JSON - 我觉得文字是最容易与工作。因此,让我跑与一个平等的文字内容看结构。它只是JSON作为一个文本字符串。

这就是jsonlite包发挥作用的地方。函数的作用是:将json文本字符串转换为更有用的R对象。我将运行dplyr的glimpse()函数,以便更好地查看这个结构。

这是与2项的列表。第1项具有一定的元数据,我们可能需要一个文本字段。第二个项目是一个有很多数据点,我们肯定要进行预测的数据帧。因此,让我们在这个数据帧专门研究。这似乎也最需要我们的预报信息的。

如果我运行在这一瞥(),你可以看到,这是嵌套的JSON,由于某些列的实际上是他们自己的数据帧。但fromJSON()使这一切漂亮无缝。

因此,这些是如何从API获取数据的基础知识。]
1.图出来API的基本URL和查询参数,并构造一个请求的URL。
2.运行HTTR的get()的URL。
3.使用content()解析结果。您可以尝试使用as equals parsed,但如果它返回一个复杂的列表,则尝试使用as equals text。
4.如果需要,运行jsonlite的fromJSON()函数。
在我结束之前,还有几点。

一:如果我们回到my_raw_result-从GET返回初始对象() - 你可以看到有一个状态代码。200只表示一切都OK。但是,如果有一个在400S代码,出事了。如果你正在编写一个函数或脚本,您可以检查状态代码是否是之前额外的代码运行的200S。

二:如果你有多个查询参数,就可以得到一点点讨厌把它们串用膏()命令都在一起。GET()有另一种选择。

可以使用这种格式将查询参数创建为命名列表。看到这里的结构了吗?函数的第一个参数是基本URL,第二个参数是名称和值列表。每个名称都是name = value,名称不带引号。其余的代码是相同的。

这作品为机构AccuWeather位置API为好。

下面介绍一下API所期望的:基本URL,API密钥和q(文字你的搜索)。让我回到我R.首先建立了我的基本URL。接下来是我的我的GET()的URL作为第一个参数,查询字符串列表作为第二个参数的命令。查询列表中有两个项目:我apikey和q,我搜索的文本。

我有200个状态码,所以运行正常。如果我用content来解析它然后用fromJSON()



重点列保存我的位置的代码。完成!

这就是为这个情节,感谢收看!对于以上R提示,头向做多有R在页面去点InfoWorld的点com削减更多的与R,除了R.全部小写
你也可以在YouTube IDG技术谈话频道上找到“用R做更多”的播放列表——在那里你可以订阅,这样你就不会错过任何一集。

希望下次能见到你!
流行
IDG.tv的特色视频