xTekoxTeko 是 Pin 3.0 引入的 JavaScript 扩展功能模块,有了 xTeko 的新加入,Pin 进一步拓宽了其功能领域,将成为一个可编程自定义扩展的类 Automator 应用。xTeko 有其目前不可替代的优势,今天将带来简单的体验心得。Pin 3.0 目前仍在 TF 测试当中,xTeko 开放的 API 也在不断增加,如需体验,请自行申请。

分析

Workflow 至今已经深深地烙下了「平民编程」的印记,每每有新的「可编程」实用类应用出现都不免有人与之比较。Workflow 现今开放程度已经基本满足一般用户的各方面需求,那么还有没有必要使用 xTeko 呢?我的答案是:有。请看我列举的 xTeko 优势:

  • xTeko 沿用了 Pin 在 Widget 唤起键盘的方法,这为自身带来了与众不同的无可替代的优势,让 Widget 输入成为了可能;
  • xTeko 与 Pythonista 相似,同样提供了高度自定义 UI 的方法,而且个人认为更为「傻瓜」,还支持一些简单的手势触发事件;
  • xTeko 扩展使用纯代码(JavaScript)编写,对于某些群体而言,提高了编写效率(非编写简易);
  • xTeko 扩展可作为小图标嵌入 Pin Widget,与此前 Pin 自带的扩展模块无缝结合。

冲着第一点——Widget 唤起键盘,我开始体验 xTeko 的可能性。

Widget 输入查词/翻译

xTeko 扩展在 Widget 运行有两种不同的 UI:一种是弹出白背景视图,可显示绝大部分控件;另一种主要使用 iOS 的通用接口,包括:$ui.alert$ui.action$ui.menu以及简便的$input.text。针对后者,如果单纯只使用几种便捷方法,Widget 是不会弹出视图的,这用于一些简单功能的扩展可以简化运行界面。Translator
上述两个扩展文末附件已提供。需要说明的是,有道自然语言翻译 API 已改为收费标准,但新用户赠送 100 元体验资金,包括 API 的申请方法,在扩展内均有所说明,仔细阅读即可。

Widget 命令快启

此扩展完完全全是我个人喜好,一般用户应该没有这样的需求。具体功能是通过 Widget 输入形如command parameter的命令进行分发。Launcher
支持的命令可以键入help 查看,这里更详细地说明一下(括号内容表示可省略):

  • op(en):从剪切板获取 URL 并用 Safari 打开,剪切板没有 URL 时抛出错误;
  • op(en) [URL]:从输入参数获取 URL 并用 Safari 打开,参数非 URL 时自动检测剪切板;
  • ch(rome):从剪切板获取 URL 并用 Chrome 打开,剪切板没有 URL 时抛出错误;
  • ch(rome) [URL]:从输入参数获取 URL 并用 Chrome 打开,参数非 URL 时自动检测剪切板;
  • ba(idu) clip:从剪切板获取 Text 并用百度搜索,剪切板没有内容时抛出错误;
  • ba(idu) [text]:从输入参数获取 Text 并用百度搜索;
  • go(ole) clip:从剪切板获取 Text 并用 Google 搜索,剪切板没有内容时抛出错误;
  • go(ole) [text]:从输入参数获取 Text 并用 Google 搜索;
  • sa(ve) clip:从剪切板获取 Text 并缓存;
  • sa(ve) [text]:从输入参数获取 Text 并缓存;
  • sh(ow):获取缓存内容(最多 5 条);
  • cl(ip)cl(ip) show:显示当前剪切板内容;
  • cl(ip) empty:清除当前剪切板内容;
  • he(lp):查看所有支持命令;
  • 不带以上命令直接输入:快捷搜索,搜索引擎与 Safari 设置一致。

因为我不用 Pin Widget,所以有些功能仅自身需求;如另有需求可自行增删命令。

QR Decoder

与此前 Workflow 不同,此扩展使用 xTeko 内置方法解析,无需使用外部 Web API,效率且方便。支持 Share Sheet 传入二维码图片解析,其他位置运行可选择相机扫码或相册选取二维码。QR Decoder

Universal MP4

此扩展运行方法有点诡异,但很有意思,通过且仅通过 Safari 获取网页解析后的源码,捕获 mp4 链接并下载(可选)。之所以说其运行方法诡异,是因为必须要从 Safari 或任何 SafariViewController(如 Telegram)打开带有视频的链接再运行。因为是通用办法,该捕获方法并不能保证所有网页都能正确捕获,即便源码有视频链接也可能不能正确识别。而某些情况下,如果未能捕获链接,可以先播放视频让其得以加载再尝试运行扩展。

链接捕获使用以下方法,有更好的通用匹配方法恳请帮助完善:

function tryToMatchMP4(source) {
  // Try to match direct links
  var match = source.match(/https?\:\\?\/\\?\/[^\s"']+?mp4[^\s"']*/g)
  if (match == null) {
    // Try to match encoded links
    match = source.match(/https%3a%2f%2f[^\s"']+?mp4[^\s"']*/ig)
    if (match == null) {
      return null
    } else {
      var list = []
      for (var i of match) {
        var matchNew = decodeURIComponent(value).match(/https?\:\\?\/\\?\/[^\s"';]+?mp4[^\s"';]*/g)
        if (matchNew != null) {
          for (var j of matchNew) {
            list.push(j)
          }
        }
      }
      return list.length > 0 ? list : null
    }
  } else {
    return match
  }
}

正常情况下有捕获内容、无捕获内容会如图对应显示,如运行后只有空白视图说明未能正常运行,请再次确认是否正确从 Safari 或 SafariViewController 运行。Universal MP4
需要说明的是,此扩展理论上能够捕获解析后源码带有 mp4 关键词的链接,但很多特殊情况会影响捕获结果:

  • 网页采用异步方法刷新 frame,有可能致使源码与实际不一致;
  • 视频链接通过 URL 指向 mp4 资源,但链接没有.mp4扩展名的关键词;
  • mp4 链接可能埋藏在 js 里,而该 js 有众多 HTML 转义字符或编码。此类链接已作通配处理,但不排除存在链接捕获不完整的问题。

为此,如果点选链接未能正确下载,说明链接捕获有误;这时候提供左划修改捕获链接方法,幸运的话或许可以裁截出正确的链接。

存在的问题和意见

Pin 作为国内个人开发者独立完成的实用类应用,我一直都是十分千分万分的敬佩。尽管一直有人作比较挑起争端,但就产品而言是理应获得支持的。Pin 3.0 加入 xTeko 自定义扩展模块更可以体现出钟大的功力。如果常常关注实用类 iOS 应用,你可能听过国人开发的 Link 这款产品,它有点模仿 Workflow 的味道,但最终也石沉大海。所以由国人开发的、有一定知名度的、独立开发的 Pin 能走到这个地步,还是那一句:十分千分万分敬佩。

就其开发周期来看,我认为 xTeko 的完成度已经相当高了。API 都是在日后逐步添上的,而截止至今其 TF 测试版已经可以完成很多事情了。如果确实要我比较的话,我觉得 70% 的 Workflow 都可以改写为 xTeko 扩展,只是我也认为不必要这么做。找准产品的定位很重要,我不认为 xTeko 在向 Workflow 看齐,当然钟大也一样。

xTeko 对于一般用户而言绝对没有 Workflow 那么白菜,仍有致命的不足:

  • 不是人人都有编程思想会写代码,更不是人人都会 JavaScript,甚至有时候我觉得 js 是个无比巨大的坑;
  • 没有 Console 的 js 是很难调试的(我认为),js 本身就是解释型语言,相对比较难定位错误(语法错误会有提示);
  • xTeko 的 Widget 在下拉通知栏时经常闪动,其扩展经常无法撑开 Widget。

这方面定位钟大也是有考虑的,商店的引入是关上一道门又打开了一道门的做法,原则上可以减轻以上的不足。所以面向一般用户,xTeko 的商店对国人更有针对性,让大家都能体验 xTeko 扩展。就我多次与钟大交流看来,他几乎是有问必答兢兢业业的开发者,借用群里看到的一句话:「(Pin 开发者)真辛苦总在半夜发 TF」,这已经值得我说一句:「奖鸡腿 哈哈」。

说明

Universal MP4 增加了 GET HTTP Source 办法,未在 Safari 运行的情况下尝试从 Action Extension 或 Clipboard 获取网页链接并请求 HTML 资源。但仍强烈建议在 Safari 运行,因为 Safari 能够获取解析后的动态源码而非 HTTP 请求的静态源码。如未从 Safari 运行且未能捕获链接,请尝试使用 Safari 运行,因为后者获得的源码可能更丰富一点。

附件

JSBox:Translator

V1.2 [2017-12-20 00:00]

  • Switch to JSBox.

V1.1 [2017-09-11 20:00]

  • Localized, now support EN and ZH languages.

JSBox:Quick Translator

V1.2 [2017-12-20 00:00]

  • Switch to JSBox.

V1.1 [2017-09-11 20:00]

  • Localized, now support EN and ZH languages.

JSbox:Launcher

V1.2 [2017-12-20 00:00]

  • Switch to JSBox.

V1.1 [2017-09-11 20:00]

  • Localized, now support EN and ZH languages.

JSBox:QR Decoder

V1.2 [2017-12-20 00:00]

  • Switch to JSBox.

V1.1 [2017-09-11 20:00]

  • Localized, now support EN and ZH languages.

JSBox:Universal MP4

V1.2 [2017-12-20 00:00]

  • Switch to JSBox.

V1.1 [2017-09-11 20:00]

  • Localized, now support EN and ZH languages.

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

  • « 上一篇:Pythonista - Multiprocessing 模块