2

我想通过 Objective-C 控制 iTunes(我只是无法appscript在我的 OS/X 10.6.3 系统上正确安装 Python ......这本来是我的首选)。

据我所知,Cocoa 上的 IPC 是基于Apple Events的:是否有:

  1. 关于 iTunes/Apple Events API 的在线文档?
  2. 进入 iTunes API 的自省机制?

我知道 Applescript Editor / Open Dictionary 功能,但我不知道如何将我看到的信息翻译成 IPC 调用。

注意:我已经尝试通过PyObjC制定解决方案,但我所追求的主要功能是我无法弄清楚的轨道搜索。

免责声明:这里是 OS/X 超级新手。

4

2 回答 2

11

您是否考虑过使用Scripting Bridge?它内置在操作系统中,也可以与 PyObjC 一起使用。没有不同的搜索 API,因为搜索内置于 AppleScript(其子句)中,它映射到 Scripting Bridge 中的 NSPredicate。

>>> from Foundation import *
>>> from ScriptingBridge import *
>>> itunes = SBApplication.applicationWithBundleIdentifier_(u"com.apple.itunes")
>>> tracks = itunes.sources()[0].libraryPlaylists()[0].tracks()
<SBElementArray @0x468a630: every ITunesTrack of ITunesLibraryPlaylist 0 of ITunesSource 0 of application "iTunes" (157)>
>>> predicate = NSPredicate.predicateWithFormat_(u'artist == "Pink Floyd"')
>>> tracks.filteredArrayUsingPredicate_(predicate)
<SBElementArray @0x457b6c0: ITunesTrack whose 'cmpd'{ 'relo':'=   ', 'obj1':'obj '{ 'want':'prop', 'from':'exmn'($$), 'form':'prop', 'seld':'pArt' }, 'obj2':'utxt'("Pink Floyd") } of ITunesLibraryPlaylist 0 of ITunesSource 0 of application "iTunes" (157)>

另外,如果您是 AppleScript 的新手,我强烈推荐 Script Debugger 的dictionary explorer

于 2010-05-09T15:19:58.500 回答
3

如果您在使用 py-appscript 时遇到问题,请联系作者(即我)进行故障排除。包括有关正在使用的 Python 安装、Xcode 版本以及问题是否特定于 appscript 或影响所有第三方模块或具有 C 扩展名的第三方模块的信息。此外,如果您使用的是 python.org 框架构建而不是内置 Python,请确保安装了可选的 OS X 10.4 SDK。

API 文档可通过 OS X 的 AppleScript 编辑器(文件 > 打开字典)、appscript 的 ASDictionary 或其他第三方 AS 编辑器获得。如果安装了 ASDictionary,还可以使用 appscript 内置的 help() 方法交互式地浏览字典。

然而,可编写脚本的应用程序的 API 文档是出了名的不足,因此还需要很好地理解 AppleScript 的一般工作原理和特定的应用程序脚本是如何工作的。Apple 自己的AppleScript Language Guide描述了所涉及的各种功能,但没有说明如何将它们付诸实践;如果您愿意花一些钱,有几本好书可供选择(免责声明:我自己刚刚合写了一本)。

并期望通过在线文章、讨论论坛和现有脚本进行大量挖掘以寻找线索。Doug 的 AppleScripts for iTunes是 iTunes 脚本的重要来源。当然,它们是用 AppleScript 编写的,但其中许多都可以在 AppleScript 编辑器中阅读,因此是一个很好的提示来源,如果您使用 appscript,您可以使用 ASTranslate 从 AppleScript 转换为 appscript 语法作为起点在写你自己的。

于 2010-05-09T21:43:50.350 回答