span8
span4
本文将继续探索与制作FME API调用。我们以前通过制定与API调用工作JSON读取器。这种方法是在FME API的工作,使用硬编码请求URL从检索空气质量和污染数据最简单的方法airvision的rest api。鉴于读者不用输入端口,我们无法让使用其他数据集的属性值动态API调用。要创建提供更大的灵活性和功能亚搏在线API的工作流程,有大家推荐几款变压器。
下面给出了提供有关如何使用三种不同的变压器,所有生产相同的输出KML文件作为访问AirVisual的API说明先前教程。本次演示的目的是比较,让用户能够访问API的变压器。他们都提供了独特的优势,并具有根据API和所需的输出要求的最佳使用案例。
我们将通过API调用功能阅读器中,JSONextractor公司和HttpCaller程序。我们将通过从最简单到最复杂的每种方法,描述了重大分歧,并为每个变压器推荐使用情况。每种方法的可用性将取决于响应格式和API的要求。AirVisual的API可以从这些变压器因访问:
要创建KML文件,为每个三种方法的前几个步骤将是相同的。如果您已经从检索的AirVisual API密钥,您可以继续使用本演示。如果没有,请按照步骤1和2从如何访问使用JSON阅读器的API文章检索自己的API密钥。如果你想利用沿Safe Software公司总部的坐标追随,请使用以下请求URL:亚搏在线
http://api.airvisual.com/v2/nearest_city?lat=49.178&lon=-122.842&key=
从启动页面中选择New workspace以打开空白画布。
参数可以保留为默认值,因为此转换器仅用于初始化工作区,而不必输入数据。如果您想创建一个动态请求URL,您可以使用包含有效GPS坐标和API键的现有工作流来替换创建者,因为这是请求URL所需的三个元素。亚搏在线出于本演示的目的,我们将使用一个创建者来确保每个方法是可比较的和一致的。
FeatureReader是一个转换器,它的作用类似于阅读器,但在转换过程中被合并到工作流中。亚搏在线这意味着有一个输入端口需要启动才能读取特性。与典型的阅读器一样,FeatureReader也可以读取JSON,将值输出到具有指定坐标系统的属性中。功能阅读器和reader之间的主要区别在于输入端口的存在,它允许在转换过程中读取数据。这种API方法的最佳用例应该包括以下情况:
FeatureReader工亚搏在线作流
将您的创建者连接到FeatureReader的启动程序端口。在参数中,将格式设置为JSON (JavaScript对象表示法),将坐标系统设置为LL84。这将确保在创建点特性时正确解释纬度和经度值。数据集将是您的API键被替换的请求URL
运行带有功能缓存的工作空间,以便在可视化预览中查看输出。选择JSONFeature输出端口,在Visual Preview (Ctrl + Alt + F)中打开Feature Information窗口,查看属性列表。与JSON阅读器一样,响应中的每个值都被压缩成一个属性。
创建几何体、管理属性和写入kml的其余步骤与如何访问使用JSON阅读器的API文章。有关以下每个步骤的详细说明,请参阅链接的文章。
将VertexCreator连接到FeatureReader的JSONFeature输出端口。AirVisual返回JSON数组中最近的监测站的坐标。因为这些值被读入FME as列表属性,您必须通过其索引指定要使用的值,该索引在花括号之间表示。注意,JSON索引从0开始,而不是1。
在VertexCreator的参数中,将X值设置为坐标数组(经度)中的第一个对象data.location。坐标{0},Y值作为第二个(纬度),data.location.coordinates{1}。
添加一个AttributeManager并打开参数。双击Output属性下的单元格以重命名属性。重命名以下属性:
使用表下的黑色箭头来安排输出属性的顺序。要删除额外的属性,请使用Ctrl或Shift单击选择它们的行,然后单击表下面的减号按钮。删除其余属性。
为输出的.kml文件选择一个文件目录和名称。如果尚未设置特性类型定义,则将其更改为Automatic,然后单击OK。当出现功能类型窗口时,将功能类型名称重命名为MonitoringStation_FeatureReader。将AttributeManager输出端口连接到KML写入器特性类型。
单击工具栏中的绿色Run按钮,如果转换成功,转到您的文件目录以确保编写了.kml文件。
在谷歌Earth中,选择File→Open→.kml文件
视图应该自动缩放到您最近的监测站的位置。单击pin查看属性数据。
FME桌面有各种各样的json专用的变压器。它们中的大多数允许JSON输入源是一个URL,这意味着这些工具非常适合读取、解析和验证从web获得的JSON数据。特别是JSONExtractor提供了最佳的解析能力,允许用户轻松地从JSON格式的嵌套值中创建特性属性。与JSON阅读器或FeatureReader不同,JSONExtractor不会自动创建JSON文本中每个值的属性。用户必须从JSON查询中选择所需的输出属性。使用此转换器的好处是,您将仅从API响应输出所需的内容。这是一个方便的特性,它限制了稍后工作空间中属性处理的数量,在API响应返回许多属性值时尤其有用。这种API方法的最佳用例应该包括以下情况:
jsonextractor工亚搏在线作流
将您的创建者连接到jsonextractor输入端口并打开参数。将输入源更改为file/url,然后将请求url复制到file/url参数中,替换airvision键
json查询(javascript属性访问器在本例中)通过将数据分段到其嵌套级别来描述属性的路径。如果您需要的值是深度嵌套的,那么json查询将更长。我们将从json树中选择每个查询,而不是手动输入查询。
首先在jsonextractor参数中填写target属性列。这包括我们以前使用的八个属性名,加上纬度和经度。
接下来,选择JSON查询列下的空白空间来公开椭圆。选择省略号以查看json树。使用箭头展开json,直到找到正确的属性。例如,要找到“城市”,我们只需要扩展“数据”。单击“确定”时,空白区域将自动填充您的JSON查询。
有些属性很难识别,因为它们不像城市、州和国家那样不言自明。对于这些缩写值,您必须引用API文档解码你的反应。其他属性将在数组中返回,例如坐标值。要指定所需的数组值,请首先选择
与json阅读器和featurereader不同,纬度和经度属性可以直接输入到vertecreator中,而不必担心数组,因为我们已经在上一步中分离了坐标。将x值设置为经度属性,将y值设置为纬度。
由于没有在jsonextractor中设置坐标系的选项,我们必须使用coordinatesystemsetter来指定如何读取x和y值。将坐标系设置为ll84。
添加AttributeManager并打开其参数。您将注意到,只有您提取的10个原始属性,加上创建者的产品“创建”实例。使用出现在“操作”列下的单元格中的下拉菜单,删除“创建”实例、纬度和经度属性。
为输出的.kml文件选择一个文件目录和名称。如果尚未设置特性类型定义,则将其更改为Automatic,然后单击OK。在出现“要素类型”窗口提示时,将要素类型名称重命名为MonitoringStation_jsonextractor。将AttributeManager输出端口连接到KML写入器特性类型。
单击工具栏中的绿色Run按钮,如果转换成功,转到您的文件目录以确保编写了.kml文件。
在谷歌Earth中,选择File→Open→.kml文件
视图应该自动缩放到您最近的监测站的位置。单击pin查看属性数据。
httpcaller设备完善,可以处理数千个api,而无需编码。它使用指定的http/https方法访问请求url,可以选择通过用户名/密码、命名连接、头或上载的实体进行身份验证。对于请求,用户可以选择修改其查询字符串参数、头,如果要放置、发布、修补或删除,则可以选择上载正文。响应可以保存到属性或文件中,同时在响应头中提供错误和状态代码。此api方法的用例将包括以下情况:
HttpCaller工亚搏在线作流
将创建者连接到输入端口并打开参数。为了提高可读性,请使用查询字符串参数分解请求url的组件。使用设置为get的http方法输入以下url作为请求url。
http://api.airvision.com/v2/最近的城市?
httpcaller允许您添加url查询字符串作为转换器参数。在“名称”列下输入lat、lon和key,然后在“值”列下输入49.178、-122.842和api键,其中
在启用了功能缓存的情况下运行工作区,以便在可视化预览中查看响应正文。如果使用提供的坐标,则“响应”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”:“氮气”}}}}
我们必须手动创建查询,因为从属性读取JSON文档时,JSONExtractor不显示JSON树。因此,我们应该格式化JSON,以便能够读取它的结构来构造查询。
我们可以用a来格式化JSON响应json格式化程序。将HTTPCaller输出连接到JSONFormatter,并将JSON文档设置为_response_body属性。将其余参数保留为默认值,然后单击OK。运行启用了功能缓存的工作空间,以便在可视化预览中查看重新格式化的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”嵌套在“data”下面。使用这个逻辑,我们可以创建一个JSON查询:
json(“数据”)(“当前”)(“污染”)(“mainus”)
要查询数组中的值,例如监测站的坐标,您将使用相同的逻辑,但是要在数组中指定对象,必须指定一个位置号。例如,对于经度的JSON查询是:
json(“数据”)(“位置”)(“坐标”)[0]
我们使用0来表示经度,因为它是数组中的第一个值。如果我们想指定纬度,我们将使用1作为方括号之间的位置号。
在JSONExtractor中,将JSON文档设置为_response_body或_formatting。它们都包含相同的JSON文本,但其中一个是用缩进和空格格式化的。重新格式化不会影响JSON查询的执行方式。
使用每个输出属性的名称填充目标属性列,如下所示:
在JSON查询列下,使用上一步中描述的逻辑用对应的查询填充每个单元格。在另一个窗口(如记事本)中打开重新格式化的响应主体可能会有帮助。指的是API文档解码响应体中的缩写值。
纬度和经度属性可以直接输入到VertexCreator中,而不必担心数组,因为在前面的步骤中已经将坐标分隔开了。将x值设置为经度属性,将y值设置为纬度。
由于在HTTPCaller中没有设置坐标系统的选项,因此我们必须使用CoordinateSystemSetter来指定如何读取X和Y值。将坐标系设置为ll84。
添加AttributeManager并打开其参数。删除_creation_instance、_response_body、_http_status_code、Longitude、Latitude和_formatting,使用Action列下拉菜单选择Remove。
为输出的.kml文件选择一个文件目录和名称。如果尚未设置特性类型定义,则将其更改为Automatic,然后单击OK。当出现功能类型窗口提示时,将功能类型名称重命名为MonitoringStation_HTTPCaller。将AttributeManager输出端口连接到KML写入器特性类型。
单击绿色的Run按钮,如果转换成功,转到文件目录以确保保存了.kml文件。
在谷歌Earth中,选择File→Open→.kml文件
视图应该自动缩放到您最近的监测站的位置。单击pin查看属性数据。
这三种方法都会产生相同的.kml文件,所以如果你使用提供的坐标,你应该在这三种情况下看到类似的东西:
kml文件包含八个属性,这些属性使用fme中的不同转换器进行了分析、重命名和重新排序。在考虑最终产品时,最有效的方法是jsonextractor,因为它允许我们过滤掉select值,从而限制了稍后工作流中的属性处理量。亚搏在线此外,json树允许我们轻松地创建查询,而不需要任何关于json格式的知识。如果我们希望每个响应值都是输出属性,那么featurereader将是最佳选择。尽管httpcaller方法也包含一个jsonextractor,但是我们必须手动输入查询,因为当输入数据源是动态的时,json树不是一个可用的特性。有了这个方法,就需要同时具备api和json的工作知识,因为有更多的手动输入。
httpcaller在访问api时提供了最多的用户控制,但在本文中,这些特性没有突出显示。有关如何利用httpcaller特性的演示,请访问下一篇文章在api系列“如何使用httpcaller访问api”中。您将学习如何访问movebank rest api,该api返回包含活体动物移动数据的.csv文件。
©2019安全亚搏在线软件公司|法律