[菜鸟系列]Mac上的自动化初探
“自动化”这个词大家都是耳熟能详了,但是如何把其应用到日常工作中,可就不是那么容易的事情了。《卓有成效的程序员》中曾经有过这么两句话:
1、不要浪费时间动手去做可以被自动化的事情
2、做简单重复的事是在浪费注意力
这两句话大家看了都觉得是真理,但却没有真正的“付诸行动”。不过话说回来,要想做到这两点,特别是对于我们这种non-programmer来说,是需要通过好用的工具来实现的,Mac恰恰为我们提供了这么一个平台,它提供了两种强有力的工具:
- Automator
官方对它的介绍是:Automator is an innovative personal automation assistant that makes it easy to automate repetitive tasks. Automator lets you skip the complex programming and scripting that is normally required to create automations. Individual steps called actions can be assembled into a complete task by dragging actions into an Automator workflow. You can run your completed workflows repeatedly, and even share them with others.
- Applescript
Applescript是一种Apple自定义的脚本语言,它就不多做介绍了,之前我曾翻译过一篇介绍它的实例文章
下面我们拿一个实际的例子来说明Mac上的自动化到底是如何实现的。
背景:InfoQ中文站有很多编辑,我需要不定期的给过生日的编辑发送birthday greeting邮件,通常我会把邮件发送到我们的编辑群组里,让大家来共同祝贺过生日的编辑。以前在这个流程中,完全都是“手动”完成的,需要每天查看一下iCal,看看谁过生日了,如果有人过生日,就给大家发一封“祝贺寿星”的邮件。虽然这整个流程也就花费掉我3分钟的时间,但是,这就属于典型的“简单重复”。我不想再因为这些小事,浪费我的注意力了。
目标:把发送birthday greeting的工作,完全自动化。
想法:我首先考虑的是通过AppleScript来完成,首先调用Address Book(通讯录)查找“InfoQ编辑group”中谁是今天过生日,如果有人过,就把相关信息提取出来,再调用Mail,向编辑群组发送birthday greeting;如果没人过,就立刻停止。但是在实际做的过程中感觉,还是有些小麻烦,有没有更简单的方法呢,有,那就是Automator,以前只是听闻Automator,从来没有实践过,但是一用,发现还是非常容易上手的:Automator会自动把这一系列的Action(行为),用拖拽的方式来实现。但在做的过程中发现,Automator比较适合单一的流程,换句话说,如果一种任务,它分很多种不同的情况,不应该用一条workflow来实现,应当每种情况创建一条workflow,然后通过AppleScript来组织不同工作流之间的关系,这样既便于扩展,也便于管理。(笔者注:对于本实例而言,单独Automator便可搞定,不需要AppleScript的协助,这里只是提供一种通用的思路)
过程:
首先启动Automator,选择workflow(笔者注:对于本实例而言,也可选择“iCal Alarm”,这里只为提供一种通用的方法):

接下来选中左一栏的“Contacts”,把左二列的“Find Address Book Groups”拖拽到右侧,并设置好“Name contains infoQ”。然后再把左二列的“Filter Address Book People”拖拽到右边,设置好“Birthday is today”以及“Email contains @”。这一步,相信我不用多讲大家也能看明白:首先寻找通讯录中名为“infoQ”的群组(group),然后再从这里面找(Filter)生日是今天的,并且有Email信息的。很简单吧:

接下来,很可能没有找到任何今天过生日的人,那我们就应当果断的把整个流程“停止”了,没必要再继续下去。所以,你可以看到上图中,我在下面又添加了一个“Stop if input is Empty”,这个行为(Action)不是Automator默认带的,你可以从网上下,并安装上,然后它会被分类到左一栏的“Utilities”中。
现在我们已经找到了今天过生日的人,接下来就要获取寿星的信息(Contacts > Get Contact Information,只保留了名字和生日),然后用这些信息,发送新邮件(Mail > New Mail Message,设置好主题、收件人等信息。此步有一点需要注意──默认发件箱“Default Account”,如果你没有在Mail的Preferences中设置,它会自动把最活跃的帐号作为默认发件箱),最后,把邮件发送出去(Mail > Send Outgoing Messages),此流程如下图所示:

好了,到现在为止,流程部分就完成了,把它另存为Application,名为“birthday_email.app”。接下来,你需要通过iCal每天自动调用这个程序,但正如我在前面提到的,我们想通过AppleScript来控制不同的流程,虽然现在只有这一个流程,但是以防将来如果增加不同的分支(流程)。所以,打开AppleScript Editor,输入下面这些代码
-- launch "birthday_email" to send email greetings tell application "birthday_email" to launch -- wait for sending emails delay 180 -- close Address Book tell application "Address Book" to quit
这段代码我就不多讲了,可看其中的注释。好了,现在把它保存下来“launch_birth_email.scpt”。
最后一步,就是在iCal中创建一个event,repeat everyday,然后通过alarm调用这个脚本。

All Done:)
这就是在Mac上工作的乐趣!
This entry was posted on Sunday, October 4th, 2009 at 3:57 pm and is filed under development, mac, novice, tutorial. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

