2012-03-17 36 views
0

无可否认,在OSX开发中,我是一个完整的noob。但是,我一直在寻找几个小时,找不到任何帮助或提示。我正在寻找一种方法来查询OSX上的iTunes资料库(不是iOS)上的专辑,歌曲,艺术家等。类似于iOS中的MPMediaQuery类,但是用于OSX。这可以做到吗?你能指点我一个类的参考吗?在OSX上的iTunes中访问音乐专辑和元数据? (MPMediaQuery等效)

谢谢!

回答

3

在Mac上访问iTunes元数据的传统方式是通过AppleScript(或其他语言对应项,如py-appscript)使用其Apple Events界面。有许多提及使用iTunesAppleScriptappscript,例如,this one。您可以使用AppleScript Editor.app来查看iTunes的脚本字典。下面是使用Python appscript查询的一个简单的例子:

>>> from appscript import * 
>>> itunes = app('iTunes') 
>>> for track in itunes.file_tracks[its.album == 'Bridge Over Troubled Water'](): 
... print(track.name()) 
... 
Bridge Over Troubled Water 
El Condor Pasa (If I Could) 
Cecilia 
Keep The Customer Satisfied 
So Long, Frank Lloyd Wright 
The Boxer 
Baby Driver 
The Only Living Boy In New York 
Why Don't You Write Me 
Bye Bye Love 
Song For The Asking 
Feuilles-O 
Bridge Over Troubled Water (Demo Take 6) 

使用Apple事件接口要求iTunes.app运行。另一种方法是解析iTunes自动创建并更新元数据时更新的iTunes Music Library.xml文件。该文件是iTunes元数据的大部分子集的文档化接口,该元数据完整地保存在未公开的内部数据库中。 xml文件实际上是一个文件plist所以很容易由Python plistlib模块读:

>>> import os.path, plistlib 
>>> lib = plistlib.readPlist(os.path.expanduser('~/Music/iTunes/iTunes Music Library.xml')) 
>>> list(lib.keys()) 
['Minor Version', 'Playlists', 'Features', 'Major Version', 'Library Persistent ID', 'Music Folder', 'Application Version', 'Tracks', 'Show Content Ratings', 'Date'] 
>>> lib['Tracks']['42527'] 
{'Album': 'Bridge Over Troubled Water', 'Persistent ID': 'E1C66D8F01C44BD8', 'Track Number': 1, 'Location': 'file://localhost/CD%20Cache/music/aac/Simon%20&%20Garfunkel/Bridge%20Over%20Troubled%20Water/01%20Bridge%20Over%20Troubled%20Water.m4a', 'File Folder Count': 6, 'Disc Number': 1, 'Total Time': 295826, 'Sample Rate': 44100, 'Track Count': 13, 'Genre': 'Rock', 'Bit Rate': 128, 'Kind': 'AAC audio file', 'Name': 'Bridge Over Troubled Water', 'Artist': 'Simon & Garfunkel', 'Disc Count': 1, 'File Type': 1295270176, 'Date Added': datetime.datetime(2011, 12, 13, 10, 5, 47), 'Date Modified': datetime.datetime(2008, 10, 28, 5, 59, 20), 'Library Folder Count': 5, 'Composer': 'Paul Simon', 'Year': 1970, 'Track ID': 42527, 'Size': 4941116, 'Track Type': 'File'} 

然后可将其内省或转换为一个更方便的数据结构进行搜索。

+0

感谢您的提示。 – netslacker 2012-03-18 03:33:29

+0

感谢提示。我也发现了Scripting Bridge库,它似乎和Obj-C中的建议类似。我仍然在玩弄它,但现在有一堂课读取整个iTunes资料库。 iTunes必须运行才能工作,这很遗憾,但我越来越接近我的最终目标。 – netslacker 2012-03-18 03:40:29