字幕 关闭字幕可在我们的YouTube频道
你可能喜欢

如何用R获取API数据

信息世界|2019年9月4日

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

版权©2019足球竞彩网下载

嗨。我是IDG Communications的Sharon Machlis,这里是Do More with R: Import Data from an API的第34集。

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

我将用AccuWeather API演示这一点,但我将展示的过程和代码将适用于大多数使用密钥进行身份验证的API。

如果你想跟进,请访问developer.accuweather.com,按照步骤注册,创建一个应用程序,并获得一个免费的密钥。在这个视频的相关文章InfoWorld上有如何做到这一切的说明。

但是在这里,让我们关注API的R代码。首先,我将加载从API获取数据的httr包;jsonlite用于解析结果;和使用管道。

接下来—这很重要—我需要知道如何构造URL,以便从API请求我想要的数据。确定查询结构可能是流程中最困难的部分,这取决于API的文档记录情况。幸运的是,AccuWeather API文档非常好。

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

预测的基本URL通常是一个常量,但它需要一个位置代码。如果你只是在寻找一个地点的天气预报,你可以作弊,使用AccuWeather网站搜索天气预报,然后检查返回的URL。

看到结尾的斜杠571_pc了吗?这是01701的位置代码——马萨诸塞州弗雷明汉办公室的邮政编码。

或者,您可以使用AccuWeather Locations API来提取带有R的位置代码,稍后我将展示这一点。

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

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

我们可以使用httr的GET()函数使用该URL发出数据请求。创建URL的paste0命令只是添加了我的API键。我将它存储为一个R环境变量,这样键就不会显示在我的屏幕上。如何做到这一点的说明也在本视频的相关文章中。

让我们看一下my_raw_result。这是一个相当复杂的列表。我们想要的实际数据主要是内容,但如果我们看一下 我们将看到它是一种“原始”格式,看起来像二进制数据。

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

Content()提供了三个转换选项:作为原始格式(在本例中毫无用处);parsed——它通常会返回某种列表;和文本。对于json——尤其是嵌套json——我发现文本是最容易处理的。让我们运行content with as = text,看看它的结构。它只是一个json文本字符串。

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

它是一个包含两项的列表。项目1有一些元数据和一个我们可能需要的文本字段。第二个项目是一个数据框架,里面有很多我们想要的数据点。我们来具体看看这个数据框架。这似乎包含了我们预测所需的大部分信息。

如果我在上面运行瞥见(),您可以看到这是嵌套的JSON,因为有些列实际上是它们自己的数据帧。但是fromJSON()使这一切变得非常无缝。

以上就是如何从API中提取数据的基础。]
1.计算出API的基本URL和查询参数,并构造一个请求URL。
2.在URL上运行httr的GET()。
3.用content()解析结果。您可以尝试使用as equals parsed,但如果返回的是一个复杂的列表,则尝试使用as equals text。
4.如果需要,运行jsonlite的fromJSON()函数。
在我结束之前还有几点。

一:如果我们返回my_raw_result—GET()返回的初始对象—您可以看到有一个状态代码。200表示一切正常。但是如果在400年代有一个编码,就会出问题。如果正在编写函数或脚本,可以在运行其他代码之前检查状态代码是否在200中。

第二:如果有多个查询参数,用paste()命令将它们串在一起可能会有些麻烦。GET()有另一个选项。

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

这也适用于AccuWeather locations API。

这是API正在寻找的:基本URL、API键和q(您正在搜索的文本)。让我们回到r。我首先设置了我的基本url。接下来是my my GET()命令,URL作为第一个参数,查询字符串列表作为第二个参数。查询列表有两项:my apikey和q,即我正在搜索的文本。

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

,

Key列保存我的位置代码。完成了!

以上就是本期节目的全部内容,感谢收看!想了解更多关于R的技巧,请访问go。infoworld。com网站上的Do more With R页面,除R外都是小写字母。
你也可以在YouTube IDG技术谈话频道找到更多关于R的播放列表——在那里你可以订阅,这样你就不会错过任何一集。

希望下次能见到你!
IDG.tv的精选视频