1. 概述
1.1 应用场景
FR 日报表中需要填写对应城市的天气信息,包括日期、天气、最高温度、最低温度等,目前只能通过城市名人工查询后获得这些信息。
FineDataLink 可简化上述操作流程:根据数据库表存储的城市数据,调用高德 API 接口,获取对应天气数据并存储到数据库,FR 报表直接取数即可。
1.2 实现思路
使用 地理/逆地理编码接口 接口,根据城市名获得对应的城市编码。
使用 天气查询 接口,根据城市编码获取对应城市天气数据。
1.3 任务展示
FineDataLink 中的数据处理过程,详情参见:https://demo.finedatalink.com/ 「使用高德接口获取城市天气数据」。
2. 操作步骤
2.1 场景模拟
示例数据:city.xls
示例数据如下图所示:
city 表中存储着城市数据,希望能获取对应城市当天的天气数据。如下图所示:
2.2 方案说明
1)添加参数,值为当天日期。
2)通过「参数赋值」节点将城市数据取出,并作为参数输出,使用 地理/逆地理编码接口 接口,根据城市名获得对应的城市编码。
3)使用 天气查询 接口,根据城市编码获取对应城市天气数据。
4)使用「数据过滤」算子过滤出当天天气数据。
5)使用「循环容器」节点,遍历所有参数执行上述过程。
2.3 申请高德 Key
1)访问 高德控制台 (amap.com),点击「应用管理>我的应用>创建新应用」,应用名称可自定义,应用类型选择「天气」。如下图所示:
2)点击右上角的「添加Key」,Key 名称可自定义,服务平台选择「Web服务」,同意下方的协议,提交。
3)下方的 Key 值为后续调用 API 时需要用到的 key 值,右侧「查看配额」可查看对应 api 的使用次数限制。高德天气 api 限制每日调用上限为 300000 。
2.4 设置参数
新建定时任务,在「参数设置」中添加参数 todaytime ,值为 yyyy-mm-dd,代表取 ${cyctime} (任务执行时间) yyyy-mm-dd 格式的值。便于后续步骤中,通过该参数过滤出今天的天气数据。如下图所示:
注:${cyctime} 为定时任务在 调度配置 中设置的每次运行的时间节点,格式为 yyyy-mm-dd hh:mm:ss
2.5 获取城市数据并作为参数输出
拖入「参数赋值」节点,取出城市数据,并将城市数据输出为参数。如下图所示:
参数默认值只是为了下游节点提前预览设置的,实际运行时不会用到这个默认值。
2.6 设置循环容器
使用「循环容器」节点,将「参数赋值」节点的输出结果赋值给「循环容器」节点后,一次次循环来遍历赋值节点的输出结果。
循环方式选择「遍历循环」,勾选 city_name 参数,需要将该参数传递给「循环容器」中的节点。如下图所示:
2.7 将城市数据转化为城市编码
city 表中保存着城市数据,需要使用 地理/逆地理编码接口 将详细的结构化地址转换为城市编码。
2.7.1 设置 API 输入算子
1)将「数据转换」节点拖入「循环容器」中,进入「数据转换」节点,拖入「API输入」算子。
2)「API输入」算子中:
API 接口地址:https://restapi.amap.com/v3/geocode/geo,API 接口说明请参见:地理/逆地理编码接口
需要用到的请求参数说明:
请求参数 | 含义 | 使用说明 |
---|---|---|
address | 结构化地址信息 | 为本文 2.5 节获取的 city_name 参数 |
output | 返回数据格式类型 可选输入内容包括:JSON,XML。设置 JSON 返回结果数据将会以JSON结构构成;如果设置 XML 返回结果数据将以 XML 结构构成 | 本文示例选择 json |
key | 用户在高德地图官网申请Web服务API类型Key | 本文 2.3 节获取的值 |
所以,请求URL为:https://restapi.amap.com/v3/geocode/geo?address=${city_name}&output=json&key=6aa960b7617f6b2ef00c43580f98c7db
「API输入」算子设置界面如下图所示:
点击「数据预览」,如下图所示:
需要使用「JSON解析」算子解析数据。
2.7.2 解析数据
1)拖入「JSON解析」算子,源字段为 default 。不勾选「解析后保留所有上游输出字段」按钮,只保留解析后的字段信息;JSON 节点选择 adcode、district 字段。如下图所示:
2)点击「数据预览」,解析后数据如下图所示:
2.7.3 将 adcode 字段作为参数输出
将 adcode 字段(城市编码)作为参数输出,便于后续获得该城市天气数据。
1)拖入「参数输出」节点, 将 adcode 字段输出为参数 city_adcode 。如下图所示:
2)点击右上角「保存」按钮。
2.8 获取城市天气数据
本节根据 adcode 字段(城市编码)数据获得该城市的天气数据。
2.8.1 设置 API 输入算子
1)将「数据转换」节点拖入「循环容器」中,进入「数据转换」节点,拖入「API输入」算子。
2)「API输入」算子中:
API 接口地址:https://restapi.amap.com/v3/weather/weatherInfo,API 接口说明请参见:天气查询
需要用到的请求参数说明:
请求参数 | 含义 | 使用说明 |
---|---|---|
city | 城市编码 输入城市的adcode,adcode信息可参考城市编码表 | 本文 2.7.3 节获取的 city_adcode 参数 |
extensions | 气象类型 可选值:base/all base:返回实况天气 all:返回预报天气 | 本节选择 all |
key | 用户在高德地图官网申请web服务API类型KEY | 本文 2.3 节获取的值 |
所以,请求URL为:
https://restapi.amap.com/v3/weather/weatherInfo?key=6aa960b7617f6b2ef00c43580f98c7db&city=${city_adcode}&extensions=all
「API输入」算子中,取消勾选「将解析后的JSON数据展开为二维表」按钮,不使用二维表形式展示数据,使用 json 格式展示数据,后续使用「JSON 解析」节点统一对数据进行解析。
2.8.2 解析数据
1)拖入「JSON解析」算子,对 2.8.1 节的数据进行解析。不勾选「解析后保留所有上游输出字段」按钮,只保留解析后的字段信息。
选择解析字段:province、reporttime、city、casts。如下图所示:
2)点击「数据预览」,可看到 casts 字段为 JSON 格式数据,需要进一步解析。如下图所示:
3)拖入「JSON解析」算子,解析 casts 字段。勾选「解析后保留所有上游输出字段」按钮,若不勾选该按钮,将只保留 casts 字段解析后的数据;选择解析字段:date、dayweather、nightweather、daytemp、nighttemp、daywind、nightwind、daypower、nightpower。如下图所示:
4)点击「数据预览」,如下图所示:
2.8.3 删除不必要字段、修改字段类型
拖入「字段设置」算子,修改 date 字段类型为 yyyy-MM-dd ,删除 casts 字段。如下图所示:
2.8.4 过滤出今天天气数据
添加「数据过滤」算子,设置 date 字段的值等于 2.4 节设置的参数的值,过滤出今天天气数据。如下图所示:
2.8.5 数据输出
1)添加「DB表输出」算子,输出数据。如下图所示:
2)点击右上角「保存」按钮。
2.9 效果查看
任务运行成功后,weatherInfo 表数据如下图所示: