span8
span4
本文将继续探索使用FME进行API调用。我们之前通过詹森读者.这种方法是使用FME中的api的最简单的方法,使用硬编码的请求URL来检索空气质量和污染数据AirVisual的REST API.由于读取器没有输入端口,我们无法使用来自其他数据集的属性值进行动态API调用。要创建提供更大灵活性和功能的亚搏在线API工作流,我们推荐几种转换器。
下面的演示将提供如何使用三个不同的变压器访问AirVisual的API的说明,它们都产生相同的输出KML文件前一教程.这个演示的目的是比较允许用户访问api的转换器。它们都提供了不同的好处,并根据API的需求和期望的输出提供了最佳用例。
我们将通过FeatureReader,JSONExtractor,httpcaller..我们将从最简单的到最复杂的每一种方法,描述主要的差异,并推荐每个转换器的用例。每种方法的可用性将取决于响应格式和API的需求。AirVisual的API可以从这些变压器中访问,因为:
要创建KML文件,这三种方法中的每一个的前几个步骤都是相同的。如果您已从AirVisual中检索API密钥,则可以继续此演示。如果没有,请按照步骤1和2如何使用JSON阅读器访问API文章检索您自己的API密钥。如果您想使用安全软件总部的坐标进行跟踪,请使用以下请求URL:亚搏在线
http://api.airvisual.com/v2/nearest_city?lat=49.178&lon= - 122.842 - &key= < API键>
从启动页选择New workspace以打开空白画布。
参数可以保留为默认值,因为该转换器仅用于初始化工作区,而不需要输入数据。如果您想要创建一个动态请求URL,您可以用包含有效GPS坐标和API键的现有工作流替换Creator,因为这是请求URL所需的惟一三个元素。亚搏在线出于本演示的目的,我们将使用Creator来确保每个方法是可比较的和一致的。
FeatureReader是一个变换器,它与读者类似,但始于工作流中间翻译。亚搏在线这意味着存在需要启动要读取的功能的输入端口。与典型的读者一样,FeatureReader也可以读取JSON,将值输出到具有指定坐标系的属性中。FeatureReader和读取器之间的主要区别在于存在输入端口,允许读取数据中翻。此API方法的最佳用例将包括以下情况:
FeatureReader工亚搏在线作流
将您的创建者连接到featuereader的启动器端口。其中“格式”为“JSON (JavaScript Object Notation)”,“坐标系统”为“LL84”。这将确保在创建点特性时正确解释纬度和经度值。数据集将是请求URL,并替换您的API键,其中出现< your API key >。
运行启用了Feature Caching的工作空间,以在Visual Preview中查看输出。选择JSONFeature输出端口并在Visual Preview (Ctrl + Alt + F)中打开Feature Information窗口来查看属性列表。与JSON Reader一样,响应中的每个值都被压缩为一个属性。
创建几何图形、管理属性和写入KML的其余步骤与本文中介绍的步骤5到步骤9相同如何使用JSON阅读器访问API篇文章。有关以下每个步骤的详细描述,请参阅链接的文章。
从你的featuereader连接一个VertexCreator到JSONFeature输出端口。AirVisual以JSON数组的形式返回最近的监测站的坐标。由于这些值被读入FME为属性列表,您必须通过它的下标来指定要使用的值,下标在花括号中表示。注意,JSON索引从0开始,而不是1。
在顶点的参数中,将x值设置为坐标阵列(经度),data.location.coordinate {0}中的第一个对象,以及作为第二(纬度)的y值,data.location.coordinates {1}。
添加一个AttributeManager并打开参数。双击Output Attribute下的单元格重命名属性。重命名以下属性:
使用表下面的黑色箭头来安排输出属性的顺序。若要删除额外的属性,请使用Ctrl或Shift选择它们的行,单击,然后单击表格下方的减号按钮。删除其余的属性。
为输出的.kml文件选择一个文件目录和名称。如果尚未设置功能类型定义,请将其更改为自动,然后单击OK。当功能类型窗口提示时,将功能类型名称重命名为monitoringstation_featureereader。将AttributeManager Output端口连接到KML编写器特性类型。
单击工具栏中的绿色运行按钮,如果翻译成功,请转到文件目录以确保写入.kml文件。
在谷歌Earth中,选择文件→打开→你的。kml文件
视图会自动放大到离你最近的监测站的位置。单击大头针查看属性数据。
FME Desktop拥有各种特定于JSON的变压器。其中大多数允许JSON输入源是一个URL,这意味着这些工具非常适合读取,解析和验证从Web获取的JSON数据。jsonextractor尤其提供了最佳解析功能,允许用户轻松地从JSON格式掩埋的嵌套值中创建要素属性。与JSON阅读器或FeatureReader不同,JSonextractor不会自动在JSON文本中的每个值中创建属性。用户必须通过从JSON查询中选择它们来指定所需的输出属性。使用此变形金机的好处是您只会输出您需要的API响应。这是一个方便的功能,它限制了工作区稍后处理的属性处理,并且当API响应返回许多属性值时特别有用。此API方法的最佳用例将包括以下情况:
JSONExtractor工亚搏在线作流
将Creator连接到JSonextractor输入端口并打开参数。将输入源更改为文件/ URL,然后将请求URL复制到文件/ URL参数中,替换您的ACIP键出现的空中键。
JSON (JavaScript查询属性访问器在这种情况下)通过将数据分段为其嵌套级别来描述对您属性的路径。如果您需要的值深入嵌套,您的JSON查询将更长。我们将从json树中选择每个人,而不是手动键入。
首先在JSONExtractor参数中填写Target Attribute列。这包括我们之前使用的8个属性名,以及Latitude和Longitude。
接下来,在JSON查询列下选择空白空间以暴露省略号。选择要查看JSON树的省略号。在找到合适的属性之前,请使用箭头展开您的JSON。例如,要找到“城市”,我们只需要扩展“数据”。单击“确定”时,空白空间将自动使用JSON查询填充。
有些属性比较难识别,因为它们不是不言自明的,比如城市、州和国家。对于这些缩写值,必须引用API文档解读你的反应。其他属性将以数组的形式返回,比如坐标值。要指定需要的数组值,首先选择
与JSON Reader和featureereader不同,Latitude和Longitude属性可以直接输入到VertexCreator中,而不必担心数组,因为我们在前面的步骤中已经分离了坐标。将X值设置为经度属性,将Y值设置为纬度。
由于没有选项来在jsonextractor中设置坐标系,因此我们必须使用coordinateSystemsetter来指定如何读取x和y值。设置坐标系统为LL84。
添加一个AttributeManager并打开它的参数。您将注意到,您只提取了10个原始属性,加上Creator的一个产品_creation_instance。通过使用出现在Action列下单元格中的下拉菜单,删除_creation_instance、Latitude和Longitude属性。
为输出的.kml文件选择一个文件目录和名称。如果尚未设置功能类型定义,请将其更改为自动,然后单击OK。当出现Feature Type窗口提示时,将Feature Type Name重命名为MonitoringStation_JSONExtractor。将AttributeManager Output端口连接到KML编写器特性类型。
单击工具栏中的绿色运行按钮,如果翻译成功,请转到文件目录以确保写入.kml文件。
在谷歌Earth中,选择文件→打开→你的。kml文件
视图会自动放大到离你最近的监测站的位置。单击大头针查看属性数据。
HTTPCaller可以很好地处理数千个api,而不需要编码。它使用指定的HTTP/HTTPS方法访问请求URL,通过用户名/密码、命名连接、头或上传的主体进行身份验证。对于请求,用户可以选择修改他们的查询字符串参数、标题,如果他们要PUT、POST、PATCH或DELETE,则可以选择上传正文。可以将响应保存到属性或文件中,同时在响应头中提供错误和状态代码。这个API方法的用例包括以下情况:
HTTPCaller工亚搏在线作流
将您的Creator连接到输入端口并打开参数。为了提高可读性,可以使用查询字符串参数分解请求URL的组件。输入以下URL作为请求URL,并将HTTP方法设置为GET。
http://api.airvisual.com/v2/nearest_city?
HTTPCaller允许您添加URL查询字符串作为转换器参数。在“名称”列下输入lat、lon和key,然后在“值”列下输入49.178、-122.842和您的API键,其中< your API key >出现。查询字符串参数是设置动态API调用的好地方,因为您可以用属性或替换Value列中的任何单元格用户参数.使用用户参数的动态调用将在下一篇文章本系列的。其余参数可以保持默认值。
运行启用了Feature Caching的工作空间,以在Visual Preview中查看响应正文。如果你使用了提供的坐标,_response_body属性应该返回类似如下内容:
{“状态”:“成功”,“数据”:{“城市”:“新西敏寺”,“状态”:“英国哥伦比亚”、“国家”:“加拿大”、“位置”:{“类型”:“点”、“坐标”:[-122.91091999999999,49.20678]},“当前”:{"天气":{“t”:“2019 - 05 - 17 t16:00:00.000z”,“胡”:71年,“ic”:“01 d”、“公关”:1008年,“tp”:12日" wd ": 160年,“ws”:3.6},“污染”:{“t”:“2019 - 05 - 17 t15:00:00.000z”、“aqius”:12日“mainus”:“p2”、“aqicn”:24日,“maincn”:“氮气”}}}}
我们必须手动创建查询,因为JSONExtractor在从属性读取JSON文档时不会显示JSON树。因此,我们应该格式化JSON,以便读取其结构来构造查询。
我们可以用JSONFormatter.将HttpCaller输出连接到JSONFormatter并将JSON文档设置为_Response_Body属性。将剩余的参数留成默认值,然后单击“确定”。使用功能缓存运行工作空间,启用可视预览中的Realtated JSON。你应该看到类似的东西:
{“状态”:“成功”,“数据”:{“城市”:“新西敏寺”,“状态”:“英属哥伦比亚”,“国家”:“加拿大”、“位置”:{“类型”:“点”、“坐标”:[-122.91091999999999,49.20678]},“当前”:{"天气":{“t”:“2019 - 05 - 17 t16:00:00.000z”,“胡”:71年,“ic”:“01 d”、“公关”:1008年,“tp”:12日" wd ": 160年,“ws”:3.6},“污染”:{“t”:“2019 - 05 - 17 t15:00:00.000z”、“aqius”:12日“mainus”:“p2”、“aqicn”:24日,“maincn”:“氮气”}}}}
JSON文本现在采用缩进和空格格式,以提高可读性。嵌套结构被清晰地布局,使其更容易构造JSON查询.例如,根据美国的空气质量指数查询主要污染物,可以看到“mainus”嵌套在“pollution”下面,“pollution”嵌套在“current”下面,“data”嵌套在“current”下面。使用这个逻辑,我们可以创建一个JSON查询:
json(“数据”)(“当前”)(“污染”)(“mainus”)
要查询数组中的值(比如监测站的坐标),您将使用相同的逻辑,但要在数组中指定对象,必须指示位置号。例如,经度的JSON查询是:
json(“数据”)(“位置”)(“坐标”)[0]
我们使用0来表示经度,因为它是数组中的第一个值。如果我们想指定纬度,我们可以使用1作为方括号之间的位号。
在jsonextractor中,将JSON文档设置为_Response_Body或_Formatted。这些都包含相同的JSON文本,但是一个用缩进和空格格式化。重新格式化不会影响JSON查询的执行方式。
使用每个输出属性的名称填写Target Attribute列,如下所示:
在JSON Query列下,使用前面步骤中描述的逻辑用相应的查询填充每个单元格。在另一个窗口(如记事本)中打开重新格式化的响应正文可能会有帮助。指的是API文档解码响应体中的缩写值。
纬度和经度属性可以直接输入到VertexCreator中,而不必担心数组,因为我们在前面的步骤中已经分离了坐标。将X值设置为经度属性,将Y值设置为纬度。
由于在HTTPCaller中没有设置坐标系统的选项,我们必须使用CoordinateSystemSetter来指定如何读取X和Y值。设置坐标系统为LL84。
添加一个AttributeManager并打开它的参数。删除_creation_instance, _response_body, _http_status_code, Longitude, Latitude和_格式化通过在Action列下的下拉菜单选择Remove。
为输出的.kml文件选择一个文件目录和名称。如果尚未设置功能类型定义,请将其更改为自动,然后单击OK。当出现“特性类型”窗口提示时,将特性类型名称重命名为MonitoringStation_HTTPCaller。将AttributeManager Output端口连接到KML编写器特性类型。
单击绿色的Run按钮,如果翻译成功,转到文件目录,确保.kml文件已保存。
在谷歌Earth中,选择文件→打开→你的。kml文件
视图会自动放大到离你最近的监测站的位置。单击大头针查看属性数据。
描述的三个方法中的每一个都会生成相同的.kml文件,所以如果你使用了提供的坐标,你应该会在所有三种情况下看到类似的结果:
输出的.kml文件包含使用FME中的不同转换器解析、重命名和重新排序的8个属性。在考虑最终产品时,最有效的方法是JSONExtractor,因为它允许我们过滤选择值,从而限制了稍后在工作流中处理属性的数量。亚搏在线此外,JSON树允许我们轻松地创建查询,而不需要以前了解JSON格式。如果我们希望每个响应值都是一个输出属性,那么featuereader将是最好的选择。尽管HTTPCaller方法也包含JSONExtractor,但我们必须手动输入查询,因为当输入数据源是动态的时,JSON树不是可用的特性。使用这种方法,有必要同时掌握api和JSON的工作知识,因为有更多的手动输入。
在访问API时,HTTPCaller提供了最多的用户控制,但是出于本文的目的,这些特性并没有突出显示。有关如何利用HTTPCaller特性的演示,请访问下一篇文章在API系列“如何使用HTTPCaller访问API”中。您将了解如何访问Movebank REST API,该API返回一个包含活体动物运动数据的.csv文件。
©2019 S亚搏在线afe Software Inc |法律