得益于Workflow自1.5.3版本起更新的Get Content of URL动作,该app的潜力得到了极大的提升。本文分享一种有趣的用法,搜寻附近的免费WiFi并择一显示在系统地图上。

简介

本Workflow主要分三部分:

  1. 获取当前地理位置;
  2. 通过网络资源获取附近的免费WiFi资源;
  3. 将所选WiFi显示在系统地图上

大体的步骤很少,所以是非常简单的。下面将逐步介绍。

下载链接:免费WiFi探测器,从通知中心运行。

1. 获取当前地理位置

这个直接利用Workflow自带的Get Current Location动作就可以获取。

由此获得的地理信息包含经纬度,分别使用Get Details of Locations提取即可。经纬度信息将用在步骤二中。

2. 获取附近免费WiFi信息

这里就直接使用聚合数据的“全国WiFi”API了,地址:https://www.juhe.cn/docs/api/id/18

IMG_3716.png

只需要注册个账号就可以申请API key,没有使用限制。

请求方式为Get/Post,总共有6个输入参数:

  1. lon:经度,使用上一步获取的经度;
  2. lat:纬度,使用上一步获取的纬度;
  3. gtype:所传递经纬类型 1:百度 2:谷歌 3:gps,填gps;
  4. r:搜索范围,单位M,填1000即可,太远懒得跑;
  5. key:应用APPKEY,申请后可以获得,或者直接使用我的;
  6. dtype:返回数据的格式,不用填。

IMG_3717.png

如上填写就可以获取到返回的json数据了,参照API文档页面的介绍逐层提取数据即可。

每个WiFi的数据形式如下:

{
        "name":"瑞尔威饭店",
        "intro":"中F1旅馆门厅;中F2办公区;中F3-F7奇数层走廊;中F4,F6走廊;东F2餐厅,办公;东F3-F7奇数层走廊;东F4,F6走廊;西F3-F7走廊;西F1快餐厅;西B1公共区域",
        "address":"北京市丰台区北京市丰台区莲花池东路116-2号",
        "google_lat":"39.896877",
        "google_lon":"116.325342",
        "baidu_lat":"39.9026269139",
        "baidu_lon":"116.33193121541",
        "province":"北京市",
        "city":"北京市",
        "distance":2959
        },

注意

唯一关键的地方是,如果附近有多个WiFi,则服务器会返回多组数据,这时必须要将它们排成列表供使用者选择。而未经处理的Dictionary数据在Choose from List动作中的显示统一是“Dictionary",不利于使用者查看。这里介绍两种解决方式:

使用Set Name动作

在使用Repeat with Each动作对WiFi位置信息进行逐个处理时,首先提取用于显示的信息,如WiFi名称、距离,再使用Set Name对每个Dictionary数据命名:

IMG_3718.png

这样在接下来的Choose from List动作中所有Dictionary都将显示自己独特的名字,而不是一个个干巴巴的"Dictionary"。在使用者做出选择后,就可以安排其它的Get Dictionary Value动作来进一步获取数据了。

该方式唯一的缺点就是在只有一个Dictionary数据时,由于Workflow开发者更新了Choose from List动作,此时会显示Dictionary中的键与键值,所以需要安排额外的动作对此进行处理。

使用Text动作

IMG_3719.png

该方式在Repeat with Each动作结束后,会产生一个文本List,随后的Choose from List动作将列出每个文本的首行。在使用者做出选择后,需要通过Match Text动作使用正则表达式对经纬度数据进行匹配,语法如下:

(?<=lat:).*?(?=\n)
(?<=lon:).*$

优点是避免了Set Name方案的问题,缺点是每一次循环都需要将经度纬度提取出来,当数据有成百上千个时会多浪费点时间。

3. 在系统地图显示WiFi位置

查询苹果地图相关的文档后,可以知道该URL为:

http://maps.apple.com/?ll=纬度,经度&q=名称

将从步骤二中获取的数据填入并访问即可。

使用

大致使用步骤如下:

  1. 通知中心访问:
    IMG_3720.png

  2. 苹果地图显示位置:
    IMG_3721.png

只有两步操作,所以还是很快捷的。虽然距离的显示有点问题,但还在我可以接受的范围内。不过聚合数据的WiFi数量不算特别多,不知是否会进一步更新数据库。