写一个workflow
Alfred的workflow可谓是顶顶大名,一般都是习惯于用别人写的脚本,但是我们日常工作中确实是有自己的需求的,所以需要学一下这个workflow要怎么写。
需求
我要的workflow不复杂,就是输入关键字,能把我需要的信息查询回来,然后展示出来,我选择其中一个,跳到我要的地方,或者复制到剪贴板就行了。
查了一圈,官方没有给一个明确的教程,第三方的教程写的也是五花八门。
执行原理
从我实践的结果来看,Alfred会根据触发条件,执行我们指定的脚本,执行脚本后获取输出,只要输出的数据是一个结构化的数据,那么就可以根据这个结构化的结果展示成列表。再把这个结果传到下一步的行为,触发消息通知,打开浏览器等特定的操作,从而完成这一系列工作流。
结构化数据
各个地方其实都没有看到这个结构化数据到底长啥样,我通过查询一些成熟的库输出的数据,整理了一下,大概长这样。
<?xml version="1.0"?>
<items>
<item uid="" arg="">
<title>标题</title>
<subtitle>副标题</subtitle>
<icon></icon>
</item>
...
</items>
2
3
4
5
6
7
8
9
可以看到,是一个xml结构,大概的元素就这么些.
uid表示编号。
arg表示选中之后往下传递的指
title和subtitle就是主标题和副标题,展示使用的
icon可以有也可以没有
只要标准输出的数据是这个格式,那么Alfred就可以解析成列表展示。
编码语言
Alfred支持多种编码语言,我用的是python。
目前从我使用的版本来看,只能使用默认的python作为解释器,也就是 /usr/bin/python,如果脚本中有使用第三方库,那么就直接安装在本机就行。
所以从这么来看,如果脚本中包含了第三方库,那么这里就必须要注意,迁移的时候,这些东西都得带过去,否则也是无法运行的。
调试代码
写代码的时候可以直接在本地用python xxxx.py来调试,调试成功之后,把所有的print都去掉。否则Alfred会把所有的标准输出作为数据解析成列表,一旦有调试数据,则是一个不标准的数据,会运行失败。
如果添加到工具想要看调试结果,可以打开workflows,选中工具之后,点击右上角的虫子按钮,会弹出一个控制台,然后执行工具,对应的执行过程就会在这个控制太现实,供开发者调试。
参数传递
Alfred的组件参数只能有一个,默认就是{query}这个固定写死,这个会用上个组件传递过来的数据填充,比如我要打开一个页面http://www.baidu.com?q=abcdefg 那么可以写成http://www.baidu.com?q={query} 前一个组件只要传递一个值过来,这个就会被替换。
总结
会编码的同学,要写一个workflow是非常容易的,只要搞清楚workflow的运行机制,数据结构和参数传递,那么剩下的就是简单的编码了。