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

简介

本 Workflow 主要分三部分,从通知中心运行(下载地址

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

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

1. 获取当前地理位置

这个直接利用 Workflow 自带的 Get Current Location 动作就可以获取,由此获得的地理信息包含经纬度,分别使用 Get Details of Locations 提取即可。经纬度信息将用在步骤 2 中。

2. 获取附近免费 Wi-Fi 信息

这里就直接使用聚合数据的全国 Wi-Fi API 了,只需要注册个账号就可以申请 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:返回数据的格式,不用填。

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

每个 Wi-Fi 的数据形式如下:

{
"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
},

  

注意

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

使用 Set Name 动作

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

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

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

使用 Text 动作

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

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

  

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

3. 在系统地图显示 Wi-Fi 位置

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

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

 

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

使用

1. 通知中心访问:


2. 苹果地图显示位置:

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

 

原作者: creampie

技巧:利用 Workflow 显示附近的免费 Wi-Fi的更多相关文章

  1. 利用python库twilio来免费发送短信

    大家好,我是四毛,最近开通了个人公众号“用Python来编程”,欢迎大家“关注”,这样您就可以收到优质的文章了. 今天跟大家分享的主题是利用python库twilio来免费发送短信. 先放一张成品图 ...

  2. 隐写技巧——利用JPEG文件格式隐藏payload

    0x00 前言 继续对图片隐写技巧的学习,这次是对JPEG文件格式的学习和理解.同PNG文件的格式对比,JPEG文件相对简单,读取其中隐藏payload的方式大同小异,两者区别在于文件格式不同,可供利 ...

  3. 利用京东云擎架设免费Wordpress 博客(git方式)

    京东云擎(JAE)是京东推出的一款公有云产品,是京东云平台生态圈的核心组成部分.与百度的BAE.新浪的SAE同样.可是JAE刚上线不久,可能非常多人都还没听说过或不太了解.我尝试在JAE安装WordP ...

  4. Eclipse用法和技巧十:显示代码outline

    在一个文件中快速找到某一个方法或者某一个作用域,可以使用 Ctrl+O或者Ctrl+F3,快速显示当前代码的outline,进行快速查找.效果如下:        这里主要是补充一些后续操作,能更加方 ...

  5. DirectX11 With Windows SDK--08 Direct2D与Direct3D互操作性以及利用DWrite显示文字

    前言 注意:从这一章起到后面的所有项目无一例外都利用了Direct2D与Direct3D互操作性,但系统要求为Win10, Win8.x 或 Win7 SP1且安装了KB2670838补丁以支持Dir ...

  6. 利用shell显示wordcount功能

      Shell脚本编程是Linux系统最为核心的技术之一,它能够利用简单的命令来实现一些复杂的功能,同时,由于Linux提供了很多文本处理命令,如grep(grep family), tr, sed, ...

  7. 利用div显示隐藏实现的分页效果

    实现步骤: 1.创建对应切换div <div class="bottom_daohang"> <div class="bottom_daohang_zo ...

  8. 利用GitHub和Hexo打造免费的个人博客

    每个程序猿都需要一个个人博客,目前广泛出现在大家视野里的有CSDN.博客园.简书,但是他们却没有给用户一个专属的站点.一个好记的域名.你需要一个https://xxx.xxx.xxx/格式的网址,一个 ...

  9. iOS开发小技巧--利用MJExtension解决数据结构复杂的模型转换

    一.开发中难免会遇到,系统返回的数据中字典套集合,集合里面又套一层字典,然后字典里面还有字典或者集合等等的复杂结构的数据...MJExtension轻松搞定这类问题 1.解决方法一: 例:百思项目中帖 ...

随机推荐

  1. Wijmo金融图表系列之平均K线图&砖形图

    2015年7月16日将会发布有史以来最令人兴奋的控件-Wijmo 金融图表,它的一体化设计为单个自定义集合提供了所有主要的金融图表,这是市场上的其他控件都不具备的独一无二的好处.它像Wijmo其他任意 ...

  2. 不是语言之争--Go vs Erlang

    因为 云巴 系统对高并发.低延迟的需求,我们对各个语言.平台做了很多的调研比较工作.这自然就包括致力于开发高并发应用的 Go 和 Erlang. 并发 Go 对高并发的支持通过 goroutine 实 ...

  3. 缓存技术比拼:Redis与Memcached的同与不同

    转至:http://developer.51cto.com/art/201603/507980.htm 在今天的文章中,我们将探讨Redis(REmote DIctionary Server).Red ...

  4. IOS6学习笔记(一)

    一.ARC 1.ARC环境下可以使用-(void)dealloc{};处理一些事情(比如移除KVO观察),但不要调用[super dealloc]; 2.ARC与非ARC混编要注意符合Cocoa命名约 ...

  5. location对象及history对象

     history对象 location 是最有用的BOM对象之一,它提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能.事实上,location 对象是很特别的一个对象,因为它既是windo ...

  6. atitit.木马病毒webshell的原理and设计 java c# .net php.

    atitit.木马病毒webshell的原理and设计 java c# .net php. 1. 隐蔽性 编辑 WebShell后门具有隐蔽性,一般有隐藏在正常文件中并修改文件时间达到隐蔽的,还有利用 ...

  7. 无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”。此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来 自 HRESULT:

    无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”.此操作失败的原因是对 IID 为“{000208D5 -000 ...

  8. oracle pfile spfile

    1.参数文件的定义.作用 oracle数据库通过一系列参数来对数据库进行配置.这些参数是以键-值对的形式来表 示的,如:MAXLOGFILES=50BACKGROUND_DUMP_DEST=C:DUM ...

  9. all things are difficult before they are easy

    刚开始接触一项新知识时,总是感觉很难,只要你用心钻研下去,它会慢慢变简单的.

  10. android view holder 优化

    android 一般都用viewholder来优化contentView,采用sparseArray能够进一步优化 /** * 用法: ImageView bananaView = ViewHolde ...