xTeko - 体验
xTeko 是 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 是不会弹出视图的,这用于一些简单功能的扩展可以简化运行界面。
上述两个扩展文末附件已提供。需要说明的是,有道自然语言翻译 API 已改为收费标准,但新用户赠送 100 元体验资金,包括 API 的申请方法,在扩展内均有所说明,仔细阅读即可。
Widget 命令快启
此扩展完完全全是我个人喜好,一般用户应该没有这样的需求。具体功能是通过 Widget 输入形如command parameter
的命令进行分发。
支持的命令可以键入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 传入二维码图片解析,其他位置运行可选择相机扫码或相册选取二维码。
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 运行。
需要说明的是,此扩展理论上能够捕获解析后源码带有 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.
如有问题,欢迎留言或邮件咨询