重中之重:AppleScript字典
虽然AppleScript本身自带有大量可以作用于Mac系统中任何程序的指令,但应用程序的作者还是有责任针对他的应用添加AppleScript的全面支持。换句话说,开发者必须编写一个他的程序如何与系统里其他程序进行通讯的手册,这些手册被称之为“字典”。要打开字典,在AppleScript编辑器上选择菜单:文件->打开字典 (或快捷键Shift-Command-O)。例如在打开的字典里向下浏览,找到程序Mail然后按“选取”,你应该会看到以下的窗口:
在左边的列中包含了指令和物件的“套件”。当你选择了一个套件,你会在下面的显示窗中看到此套件所包含的所有东西。你可以通过点击第二列及第三列里的命令来缩小预览的范围。套件包含了“指令”(圆形的C图标)和“类”(方形的C图标),而“类”包含了“属性”(P图标)和“元素”(E图标)。要理解这些东西怎么工作在一起,最好的方法就是用字典来写一个脚本范例。
为脚本创建一个算法
首先我们需要一个算法,其实算法只是“我们需要写下脚本如何工作”的一个高端叫法。我们希望创建一个脚本去编写和发送邮件。我们会使用变量来使将来改变邮件内容和收件人变得容易一点。在我们写下算法的时候,我们要时刻记住AppleScript是如何工作的。
1、为收件人名字、收件人邮件地址、邮件标题以及邮件文本等创建变量
2、创建新邮件的变量,同时指定邮件信息的属性
3、创建一个新的邮件
4、发送这个新邮件
创建简单的变量
我们已经了解到如何创建储存文本的变量,所以我们在这一步还用不到字典。下面是代码:
--Variables set recipientName to "jsntghf" set recipientAddress to "[email protected]" set theSubject to "AppleScript Automated Email" set theContent to "This email was created and sent using AppleScript!"
如你所见,我们只是放了一些数据到这四个变量中,它们分别是收件人名字、收件人邮件地址、邮件标题和邮件正文文本。这些变量里面的内容你喜欢改成什么都可以,但我建议你把你自己的邮件地址放到收件人邮件地址变量中,这样我们测试脚本的时候就可以通过查自己的邮箱看脚本是否发送邮件成功。
使用Mail字典来创建邮件变量
由于我们完全不知道怎么告诉Mail去创建一个新的邮件信息,所以我们必须借助于 AppleScript字典。如果你点击一下“Standard Suite”你会看到一些AppleScript自带的公共标准命令。由于我们是要“创建”一个新的邮件信息,我们通过向下浏览来找到相关的命令,你会发现里面没有“create”这个命令,但再向下滑到差不多中间的部分你会找到“make”这个命令。听起来貌似不错,所以创建一个新的邮件系统,其实是要告诉AppleScript我们要“make”一些东西。
接下来点击最左列的“Mail”套件。我们刚才已经找到动作是“make”,所以在这里我们跳过所有“指令”(动词)不看,直接翻到下面的“类”(名词)中。我们第一个看到的类是“outgoing message”,太好了,这就是我们要的,因为我们就是要发出一个新的邮件信息。接着点击“outgoing message”类,然后看下面显示的属性说明。
我们需要把第一步创建的几个简单变量插入到新邮件变量中。但在下面的“outgoing message”属性列表中,我们只找到邮件标题和内容的属性,而没看到收件人相关的属性。现在我们知道引用这些属性的正确语法了。注意,字典告诉你的是属性的定义格式。比如subject这个属性,我们定义的方法是“subject:你想打的标题字样”。
同样你会在套件中找到一个叫“send”的指令,我们会使用这个指令来发送邮件。现在我们还需要知道正确表达收件人名字和收件人邮箱地址的语法。由于不在这个套件中,我们点击“Message”套件。向下浏览到差不多一半的时候我们找到“receipient” 这个类,点击这个类会看到他的属性列表,同样我们可以通过简单的英文来引用这个类的属性,它的属性包括“name”和“address”。
你可以使用字典窗右上角的搜索栏快速的搜索你需要的类或属性等。
现在我们已经准备好用上面学到的语法来创建我们的邮件信息了,代码如下:
--Variables set recipientName to "jsntghf" set recipientAddress to "[email protected]" set theSubject to "AppleScript Automated Email" set theContent to "This email was created and sent using AppleScript!" --Mail Tell Block tell application "Mail" --Create the message set theMessage to make new outgoing message with properties {subject:theSubject, content:theContent, visible:true} end tell
注意我创建了一个tell命令块来包住所有发送给Mail应用程序的命令。然后我创建了一个变量(theMessage)并让他去“make”一个新的“outgoing message”,而且指定了上面说到的属性。需要注意的是属性组需要用{}来包住,每个属性间用逗号分隔。
设置收件人和发送邮件
上面创建了邮件的变量,我们现在会使用另一个tell命令块来让这个变量设置好收件人信息并且进行发送,代码如下:
--Variables set recipientName to "jsntghf" set recipientAddress to "[email protected]" set theSubject to "AppleScript Automated Email" set theContent to "This email was created and sent using AppleScript!" --Mail Tell Block tell application "Mail" --Create the message set theMessage to make new outgoing message with properties {subject:theSubject, content:theContent, visible:true} --Set a recipient tell theMessage make new to recipient with properties {name:recipientName, address:recipientAddress} --Send the Message send end tell end tell
我们知道theMessage指向的是一个outgoing message类的实例,我们在前面查 outgoing message类的时候,看到除了属性列表外,前面还有一个叫Elements的说明,这里说明的是这个类具有这些元素,其中就包括一个叫to recipient的元素。那么这里就比较好理解了,“tell theMessage make new to recipient” 这句就可以理解为告诉theMessage这个实例创建(或者叫设置)它自己的to recipient元素,当然用的就是后面跟的properties了。
最后我们执行“send”指令来发送我们的邮件。注意最下面我们用了两次end tell,因为有两个tell命令块需要关闭。当你修改完一些输入的错误并编译完成后点击 “运行”,Mail程序应该会自动创建一封邮件并且发出。现在查查你自己的邮箱有没有收到吧~
恭喜你,你已经完成了第一个AppleScript脚本了!你可以把脚本保存成Script,后面可以随时回来修改和运行,又或者保存成Application,当成是应用程序一样打开运行。
不断学习
我希望这个入门手册会让你幻想到那些可以自动化的任务。我展示的AppleScript字典和语法仅仅是个开始,但如果你真的对AppleScript很感兴趣,你需要看更多的教程才能掌握。Apple在官网上提供了丰富的AppleScript相关资料,是一个不错的开始!
另外一个值得一提的网站是T&B。它提供了一些很有深度的解释和教程,虽然有点老,但解释得很全面而且是免费的!