我在手机和手表上使用 Siri 随时随地创建提醒。当我在办公室时,我不想使用 Siri 打扰安静,所以我通常使用与提醒应用程序集成的 Alfred 工作流程,或者直接使用提醒应用程序。
但是,两者都有一个相当笨拙的界面,如果我可以在命令行中输入,那就容易多了:
$ siri "remind me to check stack overflow for responses to my question in 15 minutes"
macOS Sierra 将 Siri 引入了桌面,但到目前为止,除了字面上大声说话之外,我一直无法找到与 Siri 交互的任何方式,而 Spotlight 与 Siri 的自然语言理解能力并不匹配。
Apple 已经发布了 Siri SDK,但它似乎主要与向 Siri 添加功能有关,而不是为了公开 Siri API。
Apple 是否向 macOS 上的 Siri 公开任何类型的 API,以便人们可以通过命令行、系统调用或其他可执行文件发出 Siri 请求?
注意:我知道这个问题可以在 Ask Different、Super User 或 Unix & Linux 中找到更好的归宿。最后,我认为与 API 或 SDK 进行某种编程集成是最可能的解决方案,因此 Stack Overflow 似乎是最合适的发布位置。如果管理员不同意,请迁移到最好的社区。
我创建了一个简单的 Python 脚本,当从命令行调用时,其行为类似于您问题中的请求。
该脚本使用
keyboard Python 模块。
#!/usr/bin/python
import sys
import time
import keyboard
def trigger_siri():
keyboard.press('command+space')
time.sleep(0.3)
keyboard.release('command+space')
time.sleep(0.2) # Wait for Siri to load
if __name__=='__main__':
trigger_siri()
keyboard.write(sys.argv[1])
keyboard.send('enter')
$ cliclick kd:fn kp:space ku:fn w:250 t:"turn on the living room lights" kp:return
更进一步,如果您熟悉
终端别名和函数,您可以创建一个“siricli”函数:
siricli(){
cliclick kd:fn kp:space ku:fn w:250 t:"$1" kp:return
}
添加该功能后打开一个新的终端窗口,现在您可以从命令行调用 Siri,如下所示:
siricli "turn on the living room lights"
Type to Siri
,您可以使用像这样的 AppleScript(您可以通过终端的 osascript 或快捷方式调用它):
on run {input, parameters}
tell application "System Events"
key code 49 using {shift down, command down}
delay 0.5
keystroke "Listen to the News"
delay 0.2
key code 36
delay 1
set visible of application process "Podcasts" to false
end tell
return input
end run
如果您的 Siri 快捷键不是 cmd+shift+space,请查看此页面。