Workflow 没有做不了的事,只有你还没有想到。个人认为 Workflow 的精髓在于 Today Widget 的使用,随着设备更新换代,大多数快捷链接和预览信息都可以通过 3D Touch 实现(iOS10),那么 Workflow 能够在不启动主程序的情况下完成简要而不简单的查询任务将能充分发挥 Workflow 的强大作用。实际生活中,收到一个快递单号,有时候只是想要看一眼单号的状态,如果不想繁琐地打开一个快递 App—粘帖单号—查询,那么这个 Workflow 很适合粗看一眼单号状态的你。

分析

如果你有一定的了解,查询快递单号的 API 数不胜数,但是想要方便使用,却绝大多数都不满足要求。这话的意思指的是,绝大多数快递 API 都需要输入快递公司代号,如果能自动识别快递公司,那使用将得到更大的便利。搜索的过程是漫长的,遍历众多公用快递 API,都不能满足我的要求,最后寻找一些「隐藏」的 API,碰巧解决了我的大难题。「隐藏」之意,是指通过抓快递 App 的数据包,搜索能通过小手段使用该 App 自用的 API。下面为大家展示搜索的成果。

实现

能够自动识别快递公司的 API,最终选定为快递100(此处必须使用移动版)。分析的过程就是抓包移动版查询的请求,若想要学习可以自行重复分析过程,而分析的结果如下给出。

  1. 通过快递单号自动识别快递公司的 API:

    http://m.kuaidi100.com/autonumber/auto?num=[Express Number]

    返回的结果是 JSON 数据,这是快递100移动版自用的识别快递公司 API,可以对比看出返回的结果与网页结果一致。而自动识别不意味着100%准确,所以一般都会列出两个以上识别结果。一般而言,第一个是普遍准确的,若分析有误,后面的结果一般也不正确,因此实际使用选取第一个返回结果即可

  2. 通过快递单号和快递公司代号搜索快递状态的 API:

    http://m.kuaidi100.com/query?type=[Company Code]&postid=[Express Number]

    type=[Company Code] 就是上面获得的快递公司代号。剩下的任务就是 JSON 数据的处理,不再详细描述。

进阶

获得以上所有的数据,其实已经满足了预期的所有要求:自动识别快递公司并查询快递状态,但结合 Workflow 使用还有一个优化问题,软件知道快递公司是哪个了,可我自己还蒙在鼓里。不幸的是,返回的数据没有完整中文快递公司的内容,仅有快递公司的代号,这样显示十分不直观。解决这个问题,结合快递100给出的公司技术文档,自行做出一个快递公司代号与快递公司名称的对比文件快递公司对照表,如下所示,文件在结尾附件给出。快递公司对照表
使用的方法很简单,把文件保存在 iCloud、Dropbox 等 Workflow 能访问的云端中,每次查询任务都打开文件,使用正则获取完整中文快递公司名称,保存为变量并应用在 Workflow 显示中。结合给出的快递公司对照表,可以使用以下正则表达式:

(?<=[Company Code]:).+

应注意:[Company] 指的是实现中第一步获得的快递公司代号,此处 Workflow 应该以一个变量的形式使用。
快递公司正则表达式例子如果不熟悉上述正则表达式的含义,请自主学习。当然获取的方法不唯一,可自行修改。

说明

文章的核心部分是分享供 Workflow 使用的自动识别快递公司的单号查询 API,所以对 Workflow 的制作未作太多解释。文章结尾附件提供一个本人的 Workflow Demo,仅供学习所用,严禁一切商业利用。

  • Demo 做了更多优化设计,包含新建单号、查找历史单号、清除历史记录等功能,因此首次使用请确保 iCloud Drive 已启用。
  • 请确保快递公司对照表文件名称不变保存到 iCluod 的 Workflow 目录下,以确保文件正常打开。
  • 单号保存设计的工作有很多考虑,其中一个是判断单号已签收,以提示删除该单号记录,涉及删除记录同时分割符号的处理问题,工作量不少,希望各位尊重本人的劳动成果,分享请引用出处原文地址

附件

快递公司对照表: Express Company

Workflow Demo: Express Search


如有问题,欢迎留言或邮件咨询

  • « 上一篇:URL Schemes - 汇总